{"version":3,"file":"static/js/main.ff95d43a.js","mappings":"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AAO,EAAGD,IAAK,CAC1C,IAAI45B,EAAM,EAAF55B,EAAI,EACR6nB,EAAIliB,SAASsxD,EAAQ/oD,UAAU0rB,EAAGA,EAAE,GAAI,IAC5C/tB,EAAO7L,GAAK6nB,CACb,CACA,OAAOhc,EAER,QACC,OAAOyqD,EAAyB12D,EAAM+D,EAAQqe,EAAc5N,GAE/D,CAEA,OAzBAzQ,EAAOse,gBAAiB,EAyBF,kBAAXuF,EACH5c,EAASkB,aAAaC,EAAU,IAAKyb,EAAQ7jB,GAE7CoI,EAAS,EAAMyb,EAAQ,EAChC,YCnCAloB,EAAOC,QANG,uNCgEVD,EAAOC,QAhEG,i6ICSVD,EAAOC,QATG,+MCQVD,EAAOC,QARG,yKCSVD,EAAOC,QATG,8LCoJVD,EAAOC,QApJqB,CAC3B,uBACA,wBACA,uBACA,kBACA,mBACA,mBACA,cACA,WAEA,UACA,eACA,YACA,aACA,UACA,YACA,gBACA,WAEA,gBACA,mBACA,aACA,eACA,aACA,YACA,YACA,kBAEA,wBACA,wBACA,uBACA,wBACA,wBACA,oBACA,oBACA,mBAEA,gBACA,uBACA,qBACA,gBACA,cACA,cACA,eACA,eAEA,SACA,QACA,QACA,aACA,kBACA,oBACA,kBACA,UAEA,oBACA,oBACA,kBACA,kBACA,aACA,aACA,cACA,gBAEA,UACA,WACA,OACA,gBACA,cACA,gBACA,gBACA,gBAEA,cACA,WACA,YACA,eACA,OACA,eACA,UACA,WAEA,UACA,QACA,WACA,YACA,eACA,aACA,UACA,UAEA,gBACA,kBACA,kBACA,eACA,iBACA,eACA,gBACA,mBAEA,gBACA,aACA,kBACA,cACA,cACA,iBACA,aACA,cAEA,YACA,kBACA,eACA,kBACA,kBACA,eACA,cACA,aAEA,QACA,QACA,WACA,OACA,UACA,UACA,SACA,SAEA,cACA,QACA,cACA,YACA,aACA,cACA,aACA,iBAEA,oBACA,eACA,WACA,aACA,iBACA,aACA,WACA,UAEA,8BC7ID,IAAIwwD,EAAcvyD,EAAQ,MAuC1B8B,EAAOC,QArCO,SAAU43D,EAAKnzD,EAAYvB,EAAM+tD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AM,IAAM,KAAO,CAAC,IAAK,IAAM,IAAM,IAAM,IAAM,IAAM,MAAO,CAAC,IAAK,EAAM,MAAO,IAAM,MAAO,IAAM,MAAO,CAAC,KAAM,IAAM,KAAO,IAAM,KAAO,KAAM,KAAO,CAAC,KAAM,IAAM,KAAO,CAAC,IAAK,EAAM,MAAO,CAAC,IAAK,EAAM,KAAM,EAAM,KAAM,IAAM,MAAO,CAAC,IAAK,KAAO,KAAO,CAAC,IAAK,KAAO,IAAM,KAAO,IAAM,KAAO,KAAO,CAAC,IAAK,IAAM,EAAM,IAAM,IAAM,IAAM,KAAO,CAAC,IAAK,IAAM,IAAM,IAAM,IAAM,IAAM,MAAO,CAAC,IAAK,EAAM,MAAO,IAAM,MAAO,IAAM,MAAO,CAAC,KAAM,IAAM,KAAO,IAAM,KAAO,KAAM,KAAO,CAAC,KAAM,IAAM,KAAO,CAAC,IAAK,EAAM,MAAO,CAAC,IAAK,EAAM,KAAM,EAAM,MAAO,IAAM,MAAO,CAAC,KAAM,IAAM,KAAO,IAAM,KAAO,IAAM,KAAO,CAAC,KAAM,IAAM,KAAO,IAAM,KAAO,KAAO,KAAO,CAAC,KAAM,KAAO,KAAO,KAAO,KAAO,KAAO,MAAO,CAAC,IAAK,GAAO,KAAM,GAAO,MAAO,KAAO,MAAO,CAAC,KAAM,IAAM,KAAO,CAAC,KAAM,IAAM,KAAO,IAAM,KAAO,IAAM,KAAO,CAAC,KAAM,IAAM,GAAO,IAAM,GAAO,KAAO,KAAO,CAAC,KAAM,KAAO,KAAO,KAAO,KAAO,KAAO,MAAO,CAAC,IAAK,GAAO,KAAM,KAAO,KAAM,KAAO,MAAO,CAAC,IAAK,KAAO,IAAM,KAAO,IAAM,MAAO,KAAO,CAAC,IAAK,KAAO,KAAO,CAAC,IAAK,GAAO,MAAO,CAAC,IAAK,GAAO,KAAM,GAAO,MAAO,KAAO,MAAO,CAAC,KAAM,IAAM,KAAO,CAAC,KAAM,IAAM,KAAO,IAAM,KAAO,IAAM,KAAO,CAAC,KAAM,IAAM,GAAO,IAAM,GAAO,KAAO,KAAO,CAAC,KAAM,KAAO,KAAO,KAAO,KAAO,KAAO,MAAO,CAAC,IAAK,GAAO,KAAM,KAAO,KAAM,KAAO,MAAO,CAAC,IAAK,KAAO,IAAM,KAAO,IAAM,MAAO,KAAO,CAAC,IA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AM,IAAM,KAAO,CAAC,IAAK,IAAM,KAAO,CAAC,IAAK,KAAO,KAAO,CAAC,IAAK,KAAO,IAAM,KAAO,IAAM,KAAO,KAAO,CAAC,IAAK,KAAO,IAAM,KAAO,KAAM,KAAO,KAAO,CAAC,IAAK,GAAO,IAAM,KAAO,IAAM,KAAO,KAAO,CAAC,IAAK,IAAM,EAAM,KAAO,IAAM,MAAO,KAAO,CAAC,IAAK,MAAO,IAAM,KAAO,IAAM,MAAO,KAAO,CAAC,IAAK,IAAM,IAAM,EAAM,KAAO,IAAM,MAAO,CAAC,KAAM,IAAM,KAAO,IAAM,MAAO,IAAM,MAAO,CAAC,IAAK,EAAM,KAAO,IAAM,KAAO,IAAM,KAAO,CAAC,KAAM,IAAM,KAAO,IAAM,KAAO,IAAM,KAAO,CAAC,KAAM,KAAM,KAAO,IAAM,IAAO,KAAM,KAAO,CAAC,KAAM,IAAM,KAAO,CAAC,IAAK,IAAM,KAAO,CAAC,IAAK,IAAM,IAAM,IAAM,IAAM,IAAM,KAAO,CAAC,IAAK,IAAM,IAAM,IAAM,IAAM,KAAM,KAAO,CAAC,IAAK,IAAM,EAAM,IAAM,IAAM,IAAM,KAAO,CAAC,IAAK,IAAM,IAAM,IAAM,IAAM,IAAM,KAAO,CAAC,IAAK,EAAM,IAAM,IAAM,IAAM,IAAM,MAAO,CAAC,IAAK,IAAM,KAAM,IAAM,KAAM,IAAM,MAAO,CAAC,KAAM,IAAM,KAAO,IAAM,KAAO,MAAO,KAAO,CAAC,KAAM,KAAO,KAAO,MAAO,KAAO,MAAO,KAAO,CAAC,KAAM,KAAO,KAAO,KAAO,KAAO,KAAO,KAAO,CAAC,KAAM,KAAO,KAAO,KAAO,MAAO,KAAO,MAAO,CAAC,KAAM,KAAO,KAAO,KAAO,KAAO,KAAO,KAAO,CAAC,KAAM,KAAO,KAAO,CAAC,KAAM,IAAM,KAAO,CAAC,KAAM,IAAM,KAAO,IAAM,KAAO,IAAM,KAAO,CAAC,KAAM,IAAM,KAAO,IAAM,MAAO,IAAM,MAAO,CAAC,IAAK,EAAM,KAAO,IAAM,KAAO,IAAM,KAAO,CAAC,KAAM,IAAM,GAAO,IAAM,KAAO,KAAM,KAAO,CAAC,KAAM,KAAM,KAAO,IAAM,KAAO,KAAM,KAAO,CAAC,KAAM,KAAO,IAAM,GAAO,IA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,KAAM,IAAM,KAAO,IAAM,KAAO,IAAM,MAAO,CAAC,KAAM,IAAM,KAAO,IAAM,KAAO,IAAM,KAAO,CAAC,KAAM,IAAM,KAAO,IAAM,KAAO,IAAM,KAAO,CAAC,KAAM,IAAM,KAAO,IAAM,KAAO,IAAM,KAAO,CAAC,KAAM,KAAO,KAAO,MAAO,MAAO,MAAO,MAAO,CAAC,KAAM,KAAO,GAAM,KAAO,IAAM,KAAO,MAAO,CAAC,IAAK,KAAO,KAAM,KAAO,KAAM,KAAO,MAAO,CAAC,KAAM,IAAM,KAAO,IAAM,KAAO,KAAM,KAAO,CAAC,KAAM,KAAO,KAAO,MAAO,IAAO,MAAO,KAAO,CAAC,KAAM,KAAO,KAAO,KAAO,IAAM,KAAO,MAAO,CAAC,IAAK,KAAO,IAAM,KAAO,IAAM,MAAO,KAAO,CAAC,IAAK,KAAO,IAAM,MAAO,IAAM,KAAM,KAAO,CAAC,IAAK,GAAM,IAAM,IAAM,GAAM,IAAM,KAAO,CAAC,IAAK,IAAM,IAAM,IAAM,IAAM,IAAM,KAAO,CAAC,IAAK,KAAO,IAAM,KAAO,KAAM,KAAO,MAAO,CAAC,IAAK,KAAO,KAAM,KAAO,KAAM,KAAO,MAAO,CAAC,IAAK,GAAO,IAAM,KAAO,IAAM,IAAM,KAAO,CAAC,IAAK,IAAM,IAAM,IAAM,IAAM,IAAM,KAAO,CAAC,IAAK,KAAO,IAAM,KAAO,IAAM,MAAO,KAAO,CAAC,IAAK,KAAO,IAAM,KAAO,IAAM,KAAO,KAAO,CAAC,KAAM,CAAC,KAAM,KAAM,MAAO,CAAC,KAAM,KAAO,KAAO,KAAO,KAAO,KAAO,KAAO,CAAC,KAAM,IAAM,KAAO,KAAM,KAAO,IAAM,KAAO,CAAC,KAAM,IAAM,IAAM,IAAM,KAAM,IAAM,MAAO,CAAC,IAAK,IAAM,IAAM,MAAO,IAAM,MAAO,KAAO,CAAC,IAAK,KAAO,KAAO,CAAC,IAAK,KAAO,KAAO,CAAC,IAAK,KAAO,IAAM,KAAO,IAAM,KAAO,KAAO,CAAC,IAAK,GAAO,KAAO,KAAO,IAAO,KAAO,KAAO,CAAC,KAAM,KAAO,KAAO,KAAO,KAAO,KAAO,KAAO,CAAC,KAAM,CAAC,IAAK,KAAM,MAAO,CAAC,KAAM,KAAO,KAAO,KAAO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,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,SACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,UAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,QAAY,UAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,SACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,YACxC,CAAI,WAAY,WAAY,WAAY,WACpC,SAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,SACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,SACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,UACpC,UAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,UAAY,UACpC,WAAY,WAAY,WAAY,WACpC,UAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,UACpC,UAAY,UAAY,WAAY,UACpC,WAAY,UAAY,WAAY,WACpC,SAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,UAAY,UAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,SACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,UAAY,UAAY,WAAY,WACpC,UAAY,WAAY,SAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,UACpC,UAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,UAAY,UACpC,WAAY,UAAY,UAAY,UACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,YACxC,CAAI,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,UAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,SAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,UACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,SAAY,WAAY,SACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,UACpC,UAAY,SAAY,WAAY,WACpC,WAAY,UAAY,UAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,UAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,UACpC,UAAY,UAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,QAAY,UACpC,UAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,UAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,YACxC,CAAI,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,UAAY,SACpC,WAAY,SAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,SAAY,SACpC,WAAY,WAAY,WAAY,WACpC,UAAY,UAAY,WAAY,UACpC,WAAY,WAAY,SAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,UAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,SACpC,UAAY,WAAY,UAAY,WACpC,WAAY,UAAY,SAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,SAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,UAAY,UAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,UAAY,WACpC,WAAY,UAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,UAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,UAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,UAAY,SAAY,SAAY,WACpC,WAAY,WAAY,WAAY,WACpC,W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AAgBrpM,KAAKhC,SAASsrM,sCAjFtC,GC3DAC,EAAA,SAAAC,0HACSjyL,EAAGC,UACPD,EAAEkyL,cAAcjyL,6CAIhB,4CAGGlN,UACH,IAAI0hF,OAAO1hF,SAVhB,CAAoB+4L,GCA1B,SAASqG,EAAQt2L,EAAOu2L,MAClBv2L,EAAQu2L,EAAW,GAAI,OAAO,UAC9BC,EAAa,EACbC,EAAWF,EAAW7sM,OAAS,EAC5B8sM,GAAcC,GAAU,KACvBC,EAAchlM,KAAKwC,OAAOsiM,EAAaC,GAAY,GAGnDE,EAA2B,EAAdD,KAIjB12L,GAASu2L,EAAWI,IACpB32L,GAASu2L,EAAWI,EAAa,UAE1B,EAGL32L,EAAQu2L,EAAWI,EAAa,GAElCH,EAAaE,EAAc,EAG3BD,EAAWC,EAAc,SAGtB,ECzBT,IAAME,EAAyB,CAC7B,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QAIIC,EAAwB,SAAAC,UAC5BR,EAAQQ,EAAWF,IAOfG,EAA6B,CACjC,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAYIC,EAA6B,CACjC,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,OAQIC,EAAgC,CAKpC,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,OACA,QAGIC,EAA2B,CAK/B,MACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,SAMIC,EAAwB,CAK5B,EACA,GACA,IACA,IAMA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KAMA,MACA,MAMA,MACA,MAMA,MACA,MAMA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MAMA,OACA,OACA,OACA,OAOA,OACA,QACA,QACA,SAIIC,EAAwB,SAAAN,UAC5BR,EAAQQ,EAAWE,IACnBV,EAAQQ,EAAWK,IACnBb,EAAQQ,EAAWG,IACnBX,EAAQQ,EAAWI,IAOfG,EAAqB,CACzB,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAIIC,EAAqB,SAAAR,UAAaR,EAAQQ,EAAWO,IAOrDE,EAAkB,CACtB,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,KACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,O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,EACAv4Q,EAAA,EAAoBA,EAAA4zI,EAAA3zI,OAAgBD,IACpCs4Q,EAAA,EAAA1kI,EAAA5zI,GACA8gJ,EADyBy3H,EAAA,EAAAv4Q,GACzBi4Q,EAAAK,GACAx3H,EAAAy3H,EAAA,GAAAN,EAAAK,EAAA,GAEA,OAAAx3H,EAAA59F,SAAA,OACA,EAEAk1N,EAAA9sQ,UAAA0U,IAAA,WACA,kCCpEA1gB,EAAAC,QAAA,CACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,iBACA,YACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,YACA,aACA,wwBAEA,oBACA,mBACA,aACA,aACA,wqBAEA,sBACA,qBACA,aACA,aACA,4uBAEA,sBACA,qBACA,aACA,aACA,0kBAEA,sBACA,qBACA,aACA,aACA,guBAEA,sBACA,qBACA,aACA,aACA,slBAEA,sBACA,qBACA,aACA,aACA,4sBAEA,sBACA,qBACA,aACA,aACA,orBAEA,sBACA,qBACA,aACA,aACA,0qBAEA,sBACA,qBACA,aACA,aACA,smBAEA,sBACA,qBACA,UACA,aACA,0gBAEA,mBACA,UACA,aACA,4nBAEA,mBACA,UACA,aACA,glBAEA,mBACA,UACA,aACA,8mBAEA,mBACA,UACA,aACA,osBAEA,mBACA,UACA,aACA,osBAEA,mBACA,UACA,aACA,0qBAEA,mBACA,UACA,aACA,8oBAEA,mBACA,UACA,aACA,shBAEA,mBACA,WACA,aACA,smBAEA,oBACA,WACA,aACA,wsBAEA,oBACA,WACA,aACA,knBAEA,oBACA,WACA,aACA,wkBAEA,oBACA,WACA,aACA,0hBAEA,oBACA,WACA,aACA,0lBAEA,oBACA,OACA,aACA,gqBAEA,eACA,iBACA,OACA,aACA,8vBAEA,eACA,iBACA,OACA,aACA,krBAEA,eACA,iBACA,OACA,aACA,0kBAEA,eACA,iBACA,OACA,aACA,srBAEA,eACA,iBACA,OACA,aACA,8vBAEA,eACA,iBACA,OACA,aACA,8sBAEA,eACA,iBACA,OACA,aACA,slBAEA,eACA,iBACA,OACA,aACA,0kBAEA,eACA,iBACA,OACA,aACA,4pBAEA,eACA,iBACA,OACA,aACA,gqBAEA,eACA,iBACA,OACA,aACA,stBAEA,eACA,iBACA,OACA,aACA,gqBAEA,eACA,iBACA,OACA,aACA,s8BAEA,eACA,iBACA,OACA,aACA,gqBAEA,eACA,iBACA,OACA,aACA,kwBAEA,eACA,iBACA,OACA,aACA,0uBAEA,eACA,iBACA,OACA,aACA,ohBAEA,eACA,iBACA,QACA,aACA,8vBAEA,iBACA,mBACA,QACA,aACA,osBAEA,iBACA,mBACA,QACA,aACA,owBAEA,iBACA,mBACA,QACA,aACA,4iBAEA,iBACA,mBACA,QACA,aACA,ksBAEA,iBACA,mBACA,QACA,aACA,kwBAEA,iBACA,mBACA,QACA,aACA,0tBAEA,iBACA,mBACA,QACA,aACA,8iBAEA,iBACA,mBACA,aACA,aACA,4mBAEA,aACA,aACA,4uBAEA,UACA,aACA,4rBAEA,YACA,aACA,4lBAEA,UACA,aACA,wmBAEA,YACA,aACA,gnBAEA,SACA,aACA,gwBAEA,YACA,aACA,0mBAEA,YACA,aACA,8uBAEA,OACA,aACA,8vBAEA,OACA,aACA,8vBAEA,QACA,aACA,8vBAEA,OACA,aACA,8uBAEA,UACA,aACA,2qBAEA,QACA,aACA,4uBAEA,MACA,aACA,u7BAEA,iBACA,aACA,woBAEA,YACA,aACA,soBAEA,OACA,aACA,svBAEA,QACA,aACA,66BAEA,UACA,aACA,y+BAEA,UACA,aACA,w+BAEA,UACA,aACA,giBAEA,WACA,aACA,wmBAEA,OACA,aACA,0wBAEA,QACA,aACA,2yBC5bAD,EAAAC,QAAA,CAEA,oBACA,aACA,aACA,osBAGA,YACA,eACA,OACA,aACA,owBAGA,KACA,aACA,wvBAGA,OACA,aACA,gtBAIA,kBACA,gBACA,gBACA,oBACA,oBACA,gBACA,cACA,eACA,eACA,iBACA,kBACA,WAEA,kBACA,kBACA,kBACA,kBACA,kBACA,mBACA,mBACA,mBACA,mBACA,oBAEA,uBACA,uBACA,uBACA,uBACA,8BACA,4BACA,2BACA,4BACA,uBACA,wBAEA,cACA,cACA,cACA,cACA,cACA,eACA,eACA,eACA,eACA,gBAEA,mBACA,mBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,qBACA,kBACA,qBACA,qBACA,qBACA,qBAEA,iBACA,kBAEA,oBAEA,kBACA,mBACA,mBACA,mBAEA,iBACA,kBACA,mBACA,mBAEA,kBACA,mBAEA,mBACA,oBAEA,iBACA,kBAEA,mBACA,oBACA,sBAEA,iBACA,qBACA,qBAEA,eACA,iBACA,oBACA,mBACA,mBAEA,yBACA,sBACA,4BACA,iBACA,2BACA,aAEA,cACA,gBACA,gBACA,iBACA,gBACA,gBACA,gBACA,oBAEA,gBACA,cACA,eACA,gBAEA,gBACA,cACA,gBAEA,sBAEA,gBACA,iBAEA,oBACA,cAEA,6BACA,0BACA,cAEA,sBACA,cACA,kBACA,mBACA,mBAEA,gBACA,6DC/KA,IAAAkjI,EAAa6O,EAAA,OAAA7O,OAOb,SAAA+1I,IACA,CASA,SAAAC,IACA,CAgBA,SAAAC,IACA,KAAAC,cAAA,CACA,CAuCA,SAAAC,EAAA5F,EAAAl/H,GACA,KAAAA,MAAAA,CACA,CAQA,SAAA+kI,EAAAh5Q,EAAA40Q,QAEAzzQ,KADAnB,EAAAA,GAAA,IACAi5Q,SACAj5Q,EAAAi5Q,QAAA,GACA,KAAA1iH,QAAAq+G,EAAA3gI,MAAAilI,WAAA,WAAAl5Q,EACA,CAaA,SAAAm5Q,EAAAn5Q,EAAA40Q,GACA,KAAAM,QAAA,KACA,KAAAkE,YAAA,GACA,KAAAC,eAAA,EAEA,KAAAr5Q,QAAAA,GAAA,GACA,KAAAi0I,MAAA2gI,EAAA3gI,KACA,CA6CA,SAAAqlI,EAAAC,EA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AAl9P,IACAg9P,aAAAh9P,IACAm9P,oBAAAn9P,IACAs9P,oBAAAt9P,IACAo9P,sBAAAp9P,IACAq9P,sBAAAr9P,IACAw9P,sBAAAx9P,IACA66P,UAAA76P,IACAy9P,oBAAAz9P,IACAg1N,OAAAh1N,IACA26P,cAAA36P,KAGAw4P,EAAAkB,aAAA,CACA,QACA,OACA,OACA,SACA,UAGAlB,EAAAiB,SAAA,CACA,QACA,OACA,OACA,SACA,SACA,UACA,WACA,UACA,WACA,UACA,WACA,SACA,WACA,QACA,WACA,UACA,WACA,SACA,WACA,UACA,WACA,SACA,WACA,WACA,UACA,WACA,WACA,WACA,SACA,UACA,WACA,UACA,WACA,SACA,WACA,WACA,UACA,UACA,WACA,UACA,WACA,SACA,WACA,WACA,UACA,WACA,QACA,SACA,WACA,UACA,WACA,SACA,WACA,WACA,UACA,WACA,WACA,WACA,SACA,UACA,UACA,WACA,UACA,WACA,SACA,WACA,SACA,SACA,QACA,SACA,UACA,SACA,UACA,WACA,QACA,WACA,SACA,QACA,SACA,UACA,QACA,QACA,SACA,QACA,WACA,SACA,SACA,SACA,UACA,UACA,SACA,WACA,UACA,SACA,UACA,WACA,WACA,WACA,WACA,UACA,WACA,UACA,UACA,WACA,WACA,SACA,SACA,SACA,UACA,UACA,SACA,UACA,UACA,YACA,SACA,QACA,UACA,SACA,UACA,WACA,OACA,OACA,OACA,YACA,OACA,QACA,UACA,QACA,YACA,QACA,QACA,QACA,UACA,UACA,SACA,UACA,UACA,YACA,SACA,QACA,UACA,SACA,UACA,WACA,OACA,OACA,OACA,YACA,OACA,QACA,WACA,UACA,QACA,YACA,QACA,QACA,QACA,UACA,aACA,UACA,QACA,UACA,UACA,YACA,UACA,SACA,SACA,SACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YACA,YACA,UACA,YACA,YACA,WACA,WACA,YACA,YACA,WACA,WACA,UACA,WACA,YACA,UACA,WACA,aACA,UACA,UACA,UACA,UACA,UACA,WACA,UACA,UACA,UACA,UACA,UACA,YACA,UACA,WACA,WACA,WACA,UACA,WACA,QACA,UACA,SACA,WACA,YACA,WACA,UACA,WACA,SACA,SACA,QACA,SACA,SACA,SACA,YACA,SACA,UACA,WACA,QACA,WACA,QACA,QACA,SACA,SACA,UACA,UACA,UACA,WACA,YACA,UACA,UACA,WACA,WACA,YACA,YACA,UACA,UACA,SACA,YACA,WACA,YACA,YAGAx6R,OAAAC,KAAAs5R,EAAAiB,UAAAt6R,SAAA,SAAAC,GACA,IAAA8Q,EAAAsoR,EAAAiB,SAAAr6R,GACAyf,EAAA,kBAAA3O,EAAAmgF,OAAAC,aAAApgF,GAAAA,EACAsoR,EAAAiB,SAAAr6R,GAAAyf,CACA,IAEA25Q,EAAA5mC,MACA4mC,EAAA5mC,MAAA4mC,EAAA5mC,MAAA/yO,IAAAA,EAMA,SAAAulD,EAAAmpD,EAAA/tG,EAAA2lC,GACAooE,EAAA/tG,IAAA+tG,EAAA/tG,GAAA2lC,EACA,CAEA,SAAAm2O,EAAA/tK,EAAAS,EAAA7oE,GACAooE,EAAA8sK,UAAA+D,EAAA7wK,GACAnpD,EAAAmpD,EAAAS,EAAA7oE,EACA,CAEA,SAAAi5O,EAAA7wK,GACAA,EAAA8sK,SAAA6B,EAAA3uK,EAAA/pC,IAAA+pC,EAAA8sK,UACA9sK,EAAA8sK,UAAAj2N,EAAAmpD,EAAA,SAAAA,EAAA8sK,UACA9sK,EAAA8sK,SAAA,EACA,CAEA,SAAA6B,EAAA14M,EAAAv7D,GAGA,OAFAu7D,EAAA52C,OAAA3kB,EAAAA,EAAA2kB,QACA42C,EAAA+sB,YAAAtoF,EAAAA,EAAA7D,QAAA,aACA6D,CACA,CAEA,SAAA5C,EAAAkoG,EAAA3nB,GAUA,OATAw4L,EAAA7wK,GACAA,EAAAwsK,gBACAn0L,GAAA,WAAA2nB,EAAAxqH,KACA,aAAAwqH,EAAAngG,OACA,WAAAmgG,EAAAjsF,GAEAskE,EAAA,IAAA53C,MAAA43C,GACA2nB,EAAAloG,MAAAugF,EACAxhC,EAAAmpD,EAAA,UAAA3nB,GACA2nB,CACA,CAEA,SAAArsG,EAAAqsG,GAYA,OAXAA,EAAA8rK,UAAA9rK,EAAA6rK,YAAAmB,EAAAhtK,EAAA,qBACAA,EAAA55F,QAAAqM,EAAAu5P,OACAhsK,EAAA55F,QAAAqM,EAAAi6P,kBACA1sK,EAAA55F,QAAAqM,EAAAm6P,MACA90Q,EAAAkoG,EAAA,kBAEA6wK,EAAA7wK,GACAA,EAAAjsF,EAAA,GACAisF,EAAA4rK,QAAA,EACA/0N,EAAAmpD,EAAA,SACAkrK,EAAA1gO,KAAAw1D,EAAAA,EAAAwuE,OAAAxuE,EAAA/pC,KACA+pC,CACA,CAEA,SAAAgtK,EAAAhtK,EAAAjoG,GACA,qBAAAioG,KAAAA,aAAAkrK,GACA,UAAAzqO,MAAA,0BAEAu/D,EAAAwuE,QACA12K,EAAAkoG,EAAAjoG,EAEA,CAEA,SAAAk3Q,EAAAjvK,GACAA,EAAAwuE,SAAAxuE,EAAA5yB,QAAA4yB,EAAA5yB,QAAA4yB,EAAA2rK,cACA,IAAAj0O,EAAAsoE,EAAAs/C,KAAAt/C,EAAAs/C,KAAA1rK,OAAA,IAAAosH,EACAgO,EAAAhO,EAAAgO,IAAA,CAA6B53H,KAAA4pH,EAAA5yB,QAAAtD,WAAA,IAG7Bk2B,EAAA/pC,IAAAo2M,QACAr+J,EAAAs+J,GAAA50O,EAAA40O,IAEAtsK,EAAAosK,WAAAx4R,OAAA,EACAm6R,EAAA/tK,EAAA,iBAAAgO,EACA,CAEA,SAAAwjK,EAAAp7R,EAAAqlP,GACA,IACAg2C,EADAr7R,EAAA6Q,QAAA,KACA,MAAA7Q,GAAAA,EAAAuI,MAAA,KACAsgG,EAAAwyL,EAAA,GACAC,EAAAD,EAAA,GAQA,OALAh2C,GAAA,UAAArlP,IACA6oG,EAAA,QACAyyL,EAAA,IAGA,CAAazyL,OAAAA,EAAAyyL,MAAAA,EACb,CAEA,SAAAhC,EAAA1vK,GAKA,GAJAA,EAAAwuE,SACAxuE,EAAAsvK,WAAAtvK,EAAAsvK,WAAAtvK,EAAA2rK,eAGA,IAAA3rK,EAAAosK,WAAAnlR,QAAA+4G,EAAAsvK,aACAtvK,EAAAgO,IAAAlkC,WAAAvnF,eAAAy9G,EAAAsvK,YACAtvK,EAAAsvK,WAAAtvK,EAAAuvK,YAAA,OAFA,CAMA,GAAAvvK,EAAA/pC,IAAAo2M,MAAA,CACA,IAAAsF,EAAAH,EAAAxxK,EAAAsvK,YAAA,GACArwL,EAAA0yL,EAAA1yL,OACAyyL,EAAAC,EAAAD,MAEA,aAAAzyL,EAEA,WAAAyyL,GAAA1xK,EAAAuvK,cAAA8B,EACArE,EAAAhtK,EACA,gCAAAqxK,EAAA,aACArxK,EAAAuvK,kBACU,aAAAmC,GAAA1xK,EAAAuvK,cAAA+B,EACVtE,EAAAhtK,EACA,kCAAAsxK,EAAA,aACAtxK,EAAAuvK,iBACU,CACV,IAAAvhK,EAAAhO,EAAAgO,IACAt2E,EAAAsoE,EAAAs/C,KAAAt/C,EAAAs/C,KAAA1rK,OAAA,IAAAosH,EACAgO,EAAAs+J,KAAA50O,EAAA40O,KACAt+J,EAAAs+J,GAAA56R,OAAAynB,OAAAu+B,EAAA40O,KAEAt+J,EAAAs+J,GAAAoF,GAAA1xK,EAAAuvK,WACA,CAMAvvK,EAAAosK,WAAAj1R,KAAA,CAAA6oH,EAAAsvK,WAAAtvK,EAAAuvK,aACA,MAEAvvK,EAAAgO,IAAAlkC,WAAAk2B,EAAAsvK,YAAAtvK,EAAAuvK,YACAxB,EAAA/tK,EAAA,eACA5pH,KAAA4pH,EAAAsvK,WACAplR,MAAA81G,EAAAuvK,cAIAvvK,EAAAsvK,WAAAtvK,EAAAuvK,YAAA,EAxCA,CAyCA,CAEA,SAAAL,EAAAlvK,EAAA4xK,GACA,GAAA5xK,EAAA/pC,IAAAo2M,MAAA,CAEA,IAAAr+J,EAAAhO,EAAAgO,IAGA2jK,EAAAH,EAAAxxK,EAAA5yB,SACA4gC,EAAA/uB,OAAA0yL,EAAA1yL,OACA+uB,EAAA0jK,MAAAC,EAAAD,MACA1jK,EAAA6jK,IAAA7jK,EAAAs+J,GAAAqF,EAAA1yL,SAAA,GAEA+uB,EAAA/uB,SAAA+uB,EAAA6jK,MACA7E,EAAAhtK,EAAA,6BACAj6G,KAAAC,UAAAg6G,EAAA5yB,UACA4gC,EAAA6jK,IAAAF,EAAA1yL,QAGA,IAAAvnD,EAAAsoE,EAAAs/C,KAAAt/C,EAAAs/C,KAAA1rK,OAAA,IAAAosH,EACAgO,EAAAs+J,IAAA50O,EAAA40O,KAAAt+J,EAAAs+J,IACA56R,OAAAC,KAAAq8H,EAAAs+J,IAAA16R,SAAA,SAAA27B,GACAwgQ,EAAA/tK,EAAA,mBACA/gB,OAAA1xE,EACAskQ,IAAA7jK,EAAAs+J,GAAA/+P,IAEA,IAMA,QAAA55B,EAAA,EAAAsxE,EAAA+6C,EAAAosK,WAAAx4R,OAAoDD,EAAAsxE,EAAOtxE,IAAA,CAC3D,IAAAm+R,EAAA9xK,EAAAosK,WAAAz4R,GACAyC,EAAA07R,EAAA,GACA5nR,EAAA4nR,EAAA,GACAL,EAAAD,EAAAp7R,GAAA,GACA6oG,EAAAwyL,EAAAxyL,OACAyyL,EAAAD,EAAAC,MACAG,EAAA,KAAA5yL,EAAA,GAAA+uB,EAAAs+J,GAAArtL,IAAA,GACA5wF,EAAA,CACAjY,KAAAA,EACA8T,MAAAA,EACA+0F,OAAAA,EACAyyL,MAAAA,EACAG,IAAAA,GAKA5yL,GAAA,UAAAA,IAAA4yL,IACA7E,EAAAhtK,EAAA,6BACAj6G,KAAAC,UAAAi5F,IACA5wF,EAAAwjR,IAAA5yL,GAEA+gB,EAAAgO,IAAAlkC,WAAA1zF,GAAAiY,EACA0/Q,EAAA/tK,EAAA,cAAA3xG,EACA,CACA2xG,EAAAosK,WAAAx4R,OAAA,CACA,CAEAosH,EAAAgO,IAAA+jK,gBAAAH,EAGA5xK,EAAA8rK,SAAA,EACA9rK,EAAAs/C,KAAAnoK,KAAA6oH,EAAAgO,KACA+/J,EAAA/tK,EAAA,YAAAA,EAAAgO,KACA4jK,IAEA5xK,EAAA+rK,UAAA,WAAA/rK,EAAA5yB,QAAA9mF,cAGA05G,EAAA55F,MAAAqM,EAAAm6P,KAFA5sK,EAAA55F,MAAAqM,EAAAg1N,OAIAznI,EAAAgO,IAAA,KACAhO,EAAA5yB,QAAA,IAEA4yB,EAAAsvK,WAAAtvK,EAAAuvK,YAAA,GACAvvK,EAAAosK,WAAAx4R,OAAA,CACA,CAEA,SAAAy7R,EAAArvK,GACA,IAAAA,EAAA5yB,QAIA,OAHA4/L,EAAAhtK,EAAA,0BACAA,EAAA8sK,UAAA,WACA9sK,EAAA55F,MAAAqM,EAAAm6P,MAIA,GAAA5sK,EAAAqtK,OAAA,CACA,cAAArtK,EAAA5yB,QAIA,OAHA4yB,EAAAqtK,QAAA,KAAArtK,EAAA5yB,QAAA,IACA4yB,EAAA5yB,QAAA,QACA4yB,EAAA55F,MAAAqM,EAAAg1N,QAGAsmC,EAAA/tK,EAAA,WAAAA,EAAAqtK,QACArtK,EAAAqtK,OAAA,EACA,CAIA,IAAAj1Q,EAAA4nG,EAAAs/C,KAAA1rK,OACAw5F,EAAA4yB,EAAA5yB,QACA4yB,EAAAwuE,SACAphG,EAAAA,EAAA4yB,EAAA2rK,cAGA,IADA,IAAAqG,EAAA5kM,EACAh1E,KACA4nG,EAAAs/C,KAAAlnJ,GACAhiB,OAAA47R,GAEAhF,EAAAhtK,EAAA,wBAOA,GAAA5nG,EAAA,EAIA,OAHA40Q,EAAAhtK,EAAA,0BAAAA,EAAA5yB,SACA4yB,EAAA8sK,UAAA,KAAA9sK,EAAA5yB,QAAA,SACA4yB,EAAA55F,MAAAqM,EAAAm6P,MAGA5sK,EAAA5yB,QAAAA,EAEA,IADA,IAAA97E,EAAA0uG,EAAAs/C,KAAA1rK,OACA0d,KAAA8G,GAAA,CACA,IAAA41G,EAAAhO,EAAAgO,IAAAhO,EAAAs/C,KAAA38I,MACAq9F,EAAA5yB,QAAA4yB,EAAAgO,IAAA53H,KACA23R,EAAA/tK,EAAA,aAAAA,EAAA5yB,SAEA,IAAA7hF,EAAA,GACA,QAAA5X,KAAAq6H,EAAAs+J,GACA/gR,EAAA5X,GAAAq6H,EAAAs+J,GAAA34R,GAGA,IAAA+jD,EAAAsoE,EAAAs/C,KAAAt/C,EAAAs/C,KAAA1rK,OAAA,IAAAosH,EACAA,EAAA/pC,IAAAo2M,OAAAr+J,EAAAs+J,KAAA50O,EAAA40O,IAEA56R,OAAAC,KAAAq8H,EAAAs+J,IAAA16R,SAAA,SAAA27B,GACA,IAAA6B,EAAA4+F,EAAAs+J,GAAA/+P,GACAwgQ,EAAA/tK,EAAA,oBAAiD/gB,OAAA1xE,EAAAskQ,IAAAziQ,GACjD,GAEA,CACA,IAAAhX,IAAA4nG,EAAA6rK,YAAA,GACA7rK,EAAA5yB,QAAA4yB,EAAAuvK,YAAAvvK,EAAAsvK,WAAA,GACAtvK,EAAAosK,WAAAx4R,OAAA,EACAosH,EAAA55F,MAAAqM,EAAAm6P,IACA,CAEA,SAAA2D,EAAAvwK,GACA,IAEAthH,EAFA8xR,EAAAxwK,EAAAwwK,OACAyB,EAAAzB,EAAAlqR,cAEA4rR,EAAA,GAEA,OAAAlyK,EAAAksK,SAAAsE,GACAxwK,EAAAksK,SAAAsE,GAEAxwK,EAAAksK,SAAA+F,GACAjyK,EAAAksK,SAAA+F,IAGA,OADAzB,EAAAyB,GACAruK,OAAA,KACA,MAAA4sK,EAAA5sK,OAAA,IACA4sK,EAAAA,EAAAhrP,MAAA,GAEA0sP,GADAxzR,EAAApF,SAAAk3R,EAAA,KACA35O,SAAA,MAEA25O,EAAAA,EAAAhrP,MAAA,GAEA0sP,GADAxzR,EAAApF,SAAAk3R,EAAA,KACA35O,SAAA,MAGA25O,EAAAA,EAAA35Q,QAAA,UACAiQ,MAAApoB,IAAAwzR,EAAA5rR,gBAAAkqR,GACAxD,EAAAhtK,EAAA,4BACA,IAAAA,EAAAwwK,OAAA,KAGA1tM,OAAAwjH,cAAA5nM,GACA,CAEA,SAAAiuR,EAAA3sK,EAAAjsF,GACA,MAAAA,GACAisF,EAAA55F,MAAAqM,EAAAy6P,UACAltK,EAAAmtK,iBAAAntK,EAAA/qH,UACM83R,EAAAh5P,KAGNi5P,EAAAhtK,EAAA,oCACAA,EAAA8sK,SAAA/4P,EACAisF,EAAA55F,MAAAqM,EAAAm6P,KAEA,CAEA,SAAAhpK,EAAAk4E,EAAAnoM,GACA,IAAAiJ,EAAA,GAIA,OAHAjJ,EAAAmoM,EAAAloM,SACAgJ,EAAAk/L,EAAAl4E,OAAAjwH,IAEAiJ,CACA,CAtVA61B,EAAAw4P,EAAA5mC,MAm4BAvhK,OAAAwjH,eACA,WACA,IAAA6rF,EAAArvM,OAAAC,aACA3kF,EAAAxC,KAAAwC,MACAkoM,EAAA,WACA,IAEAunE,EACAukB,EAFAC,EAAA,GAGAtqR,GAAA,EACAnU,EAAAgvF,UAAAhvF,OACA,IAAAA,EACA,SAGA,IADA,IAAAgJ,EAAA,KACAmL,EAAAnU,GAAA,CACA,IAAAs+I,EAAAhsC,OAAAtjB,UAAA76E,IACA,IACA4+G,SAAAurB,IACAA,EAAA,GACAA,EAAA,SACA9zI,EAAA8zI,KAAAA,EAEA,MAAA9C,WAAA,uBAAA8C,GAEAA,GAAA,MACAmgJ,EAAAl7R,KAAA+6I,IAIA27H,EAAA,QADA37H,GAAA,QACA,IACAkgJ,EAAAlgJ,EAAA,WACAmgJ,EAAAl7R,KAAA02Q,EAAAukB,KAEArqR,EAAA,IAAAnU,GAAAy+R,EAAAz+R,OA7BA,SA8BAgJ,GAAAu1R,EAAAxnK,MAAA,KAAA0nK,GACAA,EAAAz+R,OAAA,EAEA,CACA,OAAAgJ,CACA,EAEAlL,OAAAglH,eACAhlH,OAAAglH,eAAA5zB,OAAA,iBACA54E,MAAAo8L,EACApvF,cAAA,EACAE,UAAA,IAGAt0B,OAAAwjH,cAAAA,CAEK,CAlDL,EAoDC,CAriDA,CAqiDiDpzM,uCCniDlD,IAAAq/O,EAAmBttG,EAAQ,OAC3B00G,EAAa10G,EAAQ,OACrBqtJ,EAAqBrtJ,EAAQ,MAARA,GACrBtuB,EAAWsuB,EAAQ,OAEnB4tG,EAAiB5tG,EAAQ,OACzBstJ,EAAAhgD,EAAA,gBAKAt/O,EAAAC,QAAA,SAAAghE,EAAAtgE,GACA,uBAAAsgE,EACA,UAAA2+K,EAAA,0BAEA,qBAAAj/O,GAAAA,EAAA,GAAAA,EAAA,YAAA2+R,EAAA3+R,KAAAA,EACA,UAAAi/O,EAAA,8CAGA,IAAAwsB,EAAAz8K,UAAAhvF,OAAA,KAAAgvF,UAAA,GAEA4vM,GAAA,EACAC,GAAA,EACA,cAAAv+N,GAAAyiD,EAAA,CACA,IAAAqkJ,EAAArkJ,EAAAziD,EAAA,UACA8mM,IAAAA,EAAA9jJ,eACAs7K,GAAA,GAEAx3B,IAAAA,EAAA5jJ,WACAq7K,GAAA,EAEA,CASA,OAPAD,GAAAC,IAAApzB,KACAizB,EACA34C,EAA4CzlL,EAAA,SAAAtgE,GAAA,MAE5C+lP,EAA4CzlL,EAAA,SAAAtgE,IAG5CsgE,CACA,sCCzCA,IAAAylL,EAAa10G,EAAQ,OACrBqtJ,EAAqBrtJ,EAAQ,MAARA,GACrBm+H,EAAqCn+H,EAAA,OAAAm+H,iCAErCvwB,EAAiB5tG,EAAQ,OAGzBhyI,EAAAC,QAAA,SAAAghE,EAAA99D,GACA,uBAAA89D,EACA,UAAA2+K,EAAA,0BAUA,OARAjwJ,UAAAhvF,OAAA,KAAAgvF,UAAA,KACAwgL,IACAkvB,EACA34C,EAA4CzlL,EAAA,OAAA99D,GAAA,MAE5CujP,EAA4CzlL,EAAA,OAAA99D,IAG5C89D,CACA,wBCDAjhE,EAAAC,QAAAo4R,EAEA,IAAAoH,EAASztJ,EAAA,OAAAk0E,aAoBT,SAAAmyE,IACAoH,EAAAloO,KAAA,KACA,CArBey6E,EAAQ,MAEvBkiD,CAAAmkG,EAAAoH,GACApH,EAAAthJ,SAAkB/E,EAAQ,OAC1BqmJ,EAAAqH,SAAkB1tJ,EAAQ,OAC1BqmJ,EAAAsH,OAAgB3tJ,EAAQ,OACxBqmJ,EAAA5sD,UAAmBz5F,EAAQ,OAC3BqmJ,EAAAuH,YAAqB5tJ,EAAQ,OAC7BqmJ,EAAA9tP,SAAkBynG,EAAQ,OAC1BqmJ,EAAAwH,SAAkB7tJ,EAAQ,OAG1BqmJ,EAAAA,OAAAA,EAWAA,EAAArsR,UAAA2uN,KAAA,SAAAlmN,EAAAlU,GACA,IAAA2nB,EAAA,KAEA,SAAA43Q,EAAAj3F,GACAp0L,EAAA0vG,WACA,IAAA1vG,EAAAm2G,MAAAi+E,IAAA3gL,EAAAnlB,OACAmlB,EAAAnlB,OAGA,CAIA,SAAAg9R,IACA73Q,EAAA81Q,UAAA91Q,EAAAklC,QACAllC,EAAAklC,QAEA,CANAllC,EAAA45B,GAAA,OAAAg+O,GAQArrR,EAAAqtC,GAAA,QAAAi+O,GAIAtrR,EAAAurR,UAAAz/R,IAAA,IAAAA,EAAAmgB,MACAwH,EAAA45B,GAAA,MAAAm8O,GACA/1Q,EAAA45B,GAAA,QAAAm+O,IAGA,IAAAC,GAAA,EACA,SAAAjC,IACAiC,IACAA,GAAA,EAEAzrR,EAAAiM,MACA,CAGA,SAAAu/Q,IACAC,IACAA,GAAA,EAEA,oBAAAzrR,EAAAqsD,SAAArsD,EAAAqsD,UACA,CAGA,SAAAvI,EAAA6sC,GAEA,GADA6M,IACA,IAAAwtL,EAAApxB,cAAA,cACA,MAAAjpK,CAEA,CAMA,SAAA6M,IACA/pF,EAAA2zN,eAAA,OAAAikD,GACArrR,EAAAonO,eAAA,QAAAkkD,GAEA73Q,EAAA2zN,eAAA,MAAAoiD,GACA/1Q,EAAA2zN,eAAA,QAAAokD,GAEA/3Q,EAAA2zN,eAAA,QAAAtjL,GACA9jD,EAAAonO,eAAA,QAAAtjL,GAEArwC,EAAA2zN,eAAA,MAAA5pI,GACA/pF,EAAA2zN,eAAA,QAAA5pI,GAEAx9F,EAAAonO,eAAA,QAAA5pI,EACA,CAUA,OA5BA/pF,EAAA45B,GAAA,QAAAyW,GACA9jD,EAAAqtC,GAAA,QAAAyW,GAmBArwC,EAAA45B,GAAA,MAAAmwD,GACA/pF,EAAA45B,GAAA,QAAAmwD,GAEAx9F,EAAAqtC,GAAA,QAAAmwD,GAEAx9F,EAAAmvD,KAAA,OAAA17C,GAGAzT,CACA,kCC5HA,IAAAmnN,EAAA,GAEA,SAAAgI,EAAAt+E,EAAAxgI,EAAA4gI,GACAA,IACAA,EAAAl4F,OAWA,IAAAy4F,EAEA,SAAAN,GAnBA,IAAAC,EAAAC,EAsBA,SAAAI,EAAA/kF,EAAA2iK,EAAAC,GACA,OAAAn+E,EAAApuF,KAAA,KAdA,SAAA2J,EAAA2iK,EAAAC,GACA,wBAAAh/M,EACAA,EAEAA,EAAAo8C,EAAA2iK,EAAAC,EAEA,CAQAr+E,CAAAvkF,EAAA2iK,EAAAC,KAAA,IACA,CAEA,OA1BAj+E,EAoBAF,GApBAC,EAoBAK,GApBgDj6I,UAAAvN,OAAAynB,OAAA2/H,EAAA75I,WAA0D45I,EAAA55I,UAAAs8D,YAAAs9E,EAA2CA,EAAAhK,UAAAiK,EA0BrJI,CACA,CARA,CAQGP,GAEHO,EAAAj6I,UAAA7I,KAAAuiJ,EAAAviJ,KACA8iJ,EAAAj6I,UAAAs5I,KAAAA,EACAs2E,EAAAt2E,GAAAW,CACA,CAGA,SAAA89E,EAAA9G,EAAA+G,GACA,GAAAv0M,MAAA44C,QAAA40J,GAAA,CACA,IAAAz7L,EAAAy7L,EAAAt8N,OAKA,OAJAs8N,EAAAA,EAAA3wK,KAAA,SAAA5rD,GACA,OAAAmvF,OAAAnvF,EACA,IAEA8gC,EAAA,EACA,UAAAlkB,OAAA0mN,EAAA,KAAA1mN,OAAA2/M,EAAA1qL,MAAA,EAAA/Q,EAAA,GAAAzc,KAAA,eAAAk4M,EAAAz7L,EAAA,GACM,IAAAA,EACN,UAAAlkB,OAAA0mN,EAAA,KAAA1mN,OAAA2/M,EAAA,WAAA3/M,OAAA2/M,EAAA,IAEA,MAAA3/M,OAAA0mN,EAAA,KAAA1mN,OAAA2/M,EAAA,GAEA,CACA,YAAA3/M,OAAA0mN,EAAA,KAAA1mN,OAAAuyE,OAAAotI,GAEA,CA6BA2G,EAAA,kCAAAzgO,EAAA8T,GACA,oBAAAA,EAAA,4BAAA9T,EAAA,GACA,GAACmxH,WACDsvG,EAAA,iCAAAzgO,EAAA85N,EAAApvL,GAEA,IAAAo2L,EA/BAlD,EAAA1vM,EAwCAttB,EAEA,GATA,kBAAAk5N,IAjCA8D,EAiCA,OAAA9D,EAhCA5tM,QAAAgC,GAAAA,EAAA,KAAAA,EAAA0vM,EAAApgO,UAAAogO,IAiCAkD,EAAA,cACAhH,EAAAA,EAAAr5M,QAAA,aAEAqgN,EAAA,UAhCA,SAAA3iN,EAAAy/M,EAAAC,GAKA,YAJAt/N,IAAAs/N,GAAAA,EAAA1/M,EAAA3gB,UACAqgO,EAAA1/M,EAAA3gB,QAGA2gB,EAAA1S,UAAAoyN,EAAAD,EAAApgO,OAAAqgO,KAAAD,CACA,CA+BAttG,CAAAtwH,EAAA,aAEAY,EAAA,OAAAuZ,OAAAna,EAAA,KAAAma,OAAA2mN,EAAA,KAAA3mN,OAAAymN,EAAA9G,EAAA,aACI,CACJ,IAAAx1N,EAhCA,SAAA6Z,EAAAy/M,EAAAl+N,GAKA,MAJA,kBAAAA,IACAA,EAAA,KAGAA,EAAAk+N,EAAApgO,OAAA2gB,EAAA3gB,UAGA,IAAA2gB,EAAAtN,QAAA+sN,EAAAl+N,EAEA,CAsBA8lC,CAAAxlC,EAAA,2BACAY,EAAA,QAAAuZ,OAAAna,EAAA,MAAAma,OAAA7V,EAAA,KAAA6V,OAAA2mN,EAAA,KAAA3mN,OAAAymN,EAAA9G,EAAA,QACA,CAGA,OADAl5N,GAAA,mBAAAuZ,cAAAuwB,EAEA,GAACymF,WACDsvG,EAAA,uDACAA,EAAA,uCAAAzgO,GACA,aAAAA,EAAA,4BACA,IACAygO,EAAA,gDACAA,EAAA,iCAAAzgO,GACA,qBAAAA,EAAA,+BACA,IACAygO,EAAA,0DACAA,EAAA,sDACAA,EAAA,gDACAA,EAAA,+DAAAtvG,WACAsvG,EAAA,iCAAAl6F,GACA,2BAAAA,CACA,GAACpV,WACDsvG,EAAA,yEACA5jO,EAAAC,QAAAi/B,EAAoB08L,oDCjGpBq4B,EAAAx1P,OAAAC,MAAA,SAAA0yC,GACA,IAAA1yC,EAAA,GACA,QAAAE,KAAAwyC,EAAA1yC,EAAAwF,KAAAtF,GACA,OAAAF,CACA,EAGAsB,EAAAC,QAAA0/R,EACA,IAAA5oJ,EAAe/E,EAAQ,OACvB0tJ,EAAe1tJ,EAAQ,OACvBA,EAAQ,MAARA,CAAkB2tJ,EAAA5oJ,GAIlB,IADA,IAAAr4I,EAAAu1P,EAAAyrC,EAAA1zR,WACAgK,EAAA,EAAkBA,EAAAtX,EAAAiC,OAAiBqV,IAAA,CACnC,IAAAiuO,EAAAvlP,EAAAsX,GACA2pR,EAAA3zR,UAAAi4O,KAAA07C,EAAA3zR,UAAAi4O,GAAAy7C,EAAA1zR,UAAAi4O,GACA,CAEA,SAAA07C,EAAAp/R,GACA,qBAAAo/R,GAAA,WAAAA,EAAAp/R,GACAw2I,EAAAx/E,KAAA,KAAAh3D,GACAm/R,EAAAnoO,KAAA,KAAAh3D,GACA,KAAA4/R,eAAA,EACA5/R,KACA,IAAAA,EAAAy9R,WAAA,KAAAA,UAAA,IACA,IAAAz9R,EAAA4jH,WAAA,KAAAA,UAAA,IACA,IAAA5jH,EAAA4/R,gBACA,KAAAA,eAAA,EACA,KAAA77E,KAAA,MAAA25E,IAGA,CA8BA,SAAAA,IAEA,KAAAv/C,eAAAC,OAIEr1G,EAAOivG,SAAA6nD,EAAA,KACT,CACA,SAAAA,EAAAh6R,GACAA,EAAAsa,KACA,CAvCAjiB,OAAAglH,eAAAk8K,EAAA3zR,UAAA,yBAIAg4G,YAAA,EACA6R,IAAA,WACA,YAAA6oH,eAAA2hD,aACA,IAEA5hS,OAAAglH,eAAAk8K,EAAA3zR,UAAA,kBAIAg4G,YAAA,EACA6R,IAAA,WACA,YAAA6oH,gBAAA,KAAAA,eAAA4hD,WACA,IAEA7hS,OAAAglH,eAAAk8K,EAAA3zR,UAAA,kBAIAg4G,YAAA,EACA6R,IAAA,WACA,YAAA6oH,eAAA/9O,MACA,IAeAlC,OAAAglH,eAAAk8K,EAAA3zR,UAAA,aAIAg4G,YAAA,EACA6R,IAAA,WACA,YAAAn0H,IAAA,KAAA6+R,qBAAA7+R,IAAA,KAAAg9O,gBAGA,KAAA6hD,eAAAC,WAAA,KAAA9hD,eAAA8hD,SACA,EACA5qK,IAAA,SAAA3+G,QAGAvV,IAAA,KAAA6+R,qBAAA7+R,IAAA,KAAAg9O,iBAMA,KAAA6hD,eAAAC,UAAAvpR,EACA,KAAAynO,eAAA8hD,UAAAvpR,EACA,wCCjGAjX,EAAAC,QAAA2/R,EACA,IAAAn0D,EAAgBz5F,EAAQ,OAExB,SAAA4tJ,EAAAr/R,GACA,qBAAAq/R,GAAA,WAAAA,EAAAr/R,GACAkrO,EAAAl0K,KAAA,KAAAh3D,EACA,CAJAyxI,EAAQ,MAARA,CAAkB4tJ,EAAAn0D,GAKlBm0D,EAAA5zR,UAAAwyO,WAAA,SAAA31C,EAAAn0D,EAAAmqG,GACAA,EAAA,KAAAh2C,EACA,0CCVA82F,YAHA3/R,EAAAC,QAAA82I,EAMAA,EAAA0pJ,cAAAA,EAGSzuJ,EAAA,OAAAk0E,aAAT,IAqBA7kH,EApBAq/L,EAAA,SAAA1zB,EAAAvlQ,GACA,OAAAulQ,EAAA12K,UAAA7uF,GAAA9G,MACA,EAIA03R,EAAarmJ,EAAQ,OAGrB7O,EAAa6O,EAAA,OAAA7O,OACbw9J,GAAuC,qBAAX3uJ,EAAAhxG,EAAyBgxG,EAAAhxG,EAAM,qBAAA5xB,OAAAA,OAAA,qBAAAhJ,KAAAA,KAAG,CAAH,GAAmFwxD,YAAA,aAS9IgpO,EAAgB5uJ,EAAQ,OAGxB3wC,EADAu/L,GAAAA,EAAAC,SACAD,EAAAC,SAAA,UAEA,aAIA,IAWA3oB,EACA4oB,EACA15N,EAbAspG,EAAiB1+B,EAAQ,OACzB+uJ,EAAkB/uJ,EAAQ,OAE1BgvJ,EADehvJ,EAAQ,OACvBgvJ,iBACArlE,EAAqB3pF,EAAA,OAAA9yG,EACrBmnH,EAAAs1E,EAAAt1E,qBACA46I,EAAAtlE,EAAAslE,0BACAC,EAAAvlE,EAAAulE,2BACAC,EAAAxlE,EAAAwlE,mCAMAnvJ,EAAQ,MAARA,CAAkB+E,EAAAshJ,GAClB,IAAA+I,EAAAL,EAAAK,eACAC,EAAA,6CAYA,SAAAZ,EAAAlgS,EAAA2yI,EAAAouJ,GACA3B,EAAAA,GAAqB3tJ,EAAQ,OAC7BzxI,EAAAA,GAAA,GAOA,mBAAA+gS,IAAAA,EAAApuJ,aAAAysJ,GAIA,KAAA4B,aAAAhhS,EAAAghS,WACAD,IAAA,KAAAC,WAAA,KAAAA,cAAAhhS,EAAAihS,oBAIA,KAAAnB,cAAAW,EAAA,KAAAzgS,EAAA,wBAAA+gS,GAKA,KAAAzrO,OAAA,IAAA66G,EACA,KAAA/vK,OAAA,EACA,KAAA8gS,MAAA,KACA,KAAAC,WAAA,EACA,KAAAC,QAAA,KACA,KAAAhjD,OAAA,EACA,KAAAijD,YAAA,EACA,KAAAC,SAAA,EAMA,KAAAC,MAAA,EAIA,KAAAC,cAAA,EACA,KAAAC,iBAAA,EACA,KAAAC,mBAAA,EACA,KAAAC,iBAAA,EACA,KAAAC,QAAA,EAGA,KAAAC,WAAA,IAAA7hS,EAAA6hS,UAGA,KAAAC,cAAA9hS,EAAA8hS,YAGA,KAAA7B,WAAA,EAKA,KAAAzmB,gBAAAx5Q,EAAAw5Q,iBAAA,OAGA,KAAAuoB,WAAA,EAGA,KAAAC,aAAA,EACA,KAAA9sB,QAAA,KACA,KAAA/gI,SAAA,KACAn0I,EAAAm0I,WACAwjI,IAAAA,EAAwClmI,EAAA,OAAA5yG,GACxC,KAAAq2O,QAAA,IAAAyC,EAAA33Q,EAAAm0I,UACA,KAAAA,SAAAn0I,EAAAm0I,SAEA,CACA,SAAAqC,EAAAx2I,GAEA,GADAo/R,EAAAA,GAAqB3tJ,EAAQ,SAC7B,gBAAA+E,GAAA,WAAAA,EAAAx2I,GAIA,IAAA+gS,EAAA,gBAAA3B,EACA,KAAAY,eAAA,IAAAE,EAAAlgS,EAAA,KAAA+gS,GAGA,KAAAtD,UAAA,EACAz9R,IACA,oBAAAA,EAAAsqH,OAAA,KAAA0rB,MAAAh2I,EAAAsqH,MACA,oBAAAtqH,EAAAugE,UAAA,KAAA0hO,SAAAjiS,EAAAugE,UAEAu3N,EAAA9gO,KAAA,KACA,CAwDA,SAAAkrO,EAAAvvJ,EAAA21D,EAAAn0D,EAAAguJ,EAAAC,GACAthM,EAAA,mBAAAwnG,GACA,IAKAzjG,EALAjyE,EAAA+/G,EAAAqtJ,eACA,UAAA13F,EACA11K,EAAA0uQ,SAAA,EAuNA,SAAA3uJ,EAAA//G,GAEA,GADAkuE,EAAA,eACAluE,EAAAwrN,MAAA,CACA,GAAAxrN,EAAAsiP,QAAA,CACA,IAAA5sE,EAAA11K,EAAAsiP,QAAA/0P,MACAmoL,GAAAA,EAAAloM,SACAwyB,EAAA0iC,OAAA3xD,KAAA2kM,GACA11K,EAAAxyB,QAAAwyB,EAAAouQ,WAAA,EAAA14F,EAAAloM,OAEA,CACAwyB,EAAAwrN,OAAA,EACAxrN,EAAA2uQ,KAIAc,EAAA1vJ,IAGA//G,EAAA4uQ,cAAA,EACA5uQ,EAAA6uQ,kBACA7uQ,EAAA6uQ,iBAAA,EACAa,EAAA3vJ,IAnBA,CAsBA,CA9OA4vJ,CAAA5vJ,EAAA//G,QAIA,GADAwvQ,IAAAv9L,EA6CA,SAAAjyE,EAAA01K,GACA,IAAAzjG,EAjPAh0D,EAqPA,OArPAA,EAkPAy3J,EAjPA1lE,EAAAhL,SAAA/mF,IAAAA,aAAAuvP,GAiPA,kBAAA93F,QAAAnnM,IAAAmnM,GAAA11K,EAAAouQ,aACAn8L,EAAA,IAAAihD,EAAA,yCAAAwiD,IAEAzjG,CACA,CAnDA29L,CAAA5vQ,EAAA01K,IACAzjG,EACAg8L,EAAAluJ,EAAA9tC,QACM,GAAAjyE,EAAAouQ,YAAA14F,GAAAA,EAAAloM,OAAA,EAIN,GAHA,kBAAAkoM,GAAA11K,EAAAouQ,YAAA9iS,OAAAuoI,eAAA6hE,KAAA1lE,EAAAn3H,YACA68L,EA3MA,SAAAA,GACA,OAAA1lE,EAAA/7D,KAAAyhI,EACA,CAyMAm6F,CAAAn6F,IAEA65F,EACAvvQ,EAAAyuQ,WAAAR,EAAAluJ,EAAA,IAAAiuJ,GAA+F8B,EAAA/vJ,EAAA//G,EAAA01K,GAAA,QACvF,GAAA11K,EAAAwrN,MACRyiD,EAAAluJ,EAAA,IAAA+tJ,OACQ,IAAA9tQ,EAAAqtQ,UACR,SAEArtQ,EAAA0uQ,SAAA,EACA1uQ,EAAAsiP,UAAA/gI,GACAm0D,EAAA11K,EAAAsiP,QAAA7qJ,MAAAi+E,GACA11K,EAAAouQ,YAAA,IAAA14F,EAAAloM,OAAAsiS,EAAA/vJ,EAAA//G,EAAA01K,GAAA,GAA4Fq6F,EAAAhwJ,EAAA//G,IAE5F8vQ,EAAA/vJ,EAAA//G,EAAA01K,GAAA,EAEA,MACM65F,IACNvvQ,EAAA0uQ,SAAA,EACAqB,EAAAhwJ,EAAA//G,IAOA,OAAAA,EAAAwrN,QAAAxrN,EAAAxyB,OAAAwyB,EAAAktQ,eAAA,IAAAltQ,EAAAxyB,OACA,CACA,SAAAsiS,EAAA/vJ,EAAA//G,EAAA01K,EAAA65F,GACAvvQ,EAAAwuQ,SAAA,IAAAxuQ,EAAAxyB,SAAAwyB,EAAA2uQ,MACA3uQ,EAAAmvQ,WAAA,EACApvJ,EAAAtvE,KAAA,OAAAilI,KAGA11K,EAAAxyB,QAAAwyB,EAAAouQ,WAAA,EAAA14F,EAAAloM,OACA+hS,EAAAvvQ,EAAA0iC,OAAAj5C,QAAAisL,GAAgD11K,EAAA0iC,OAAA3xD,KAAA2kM,GAChD11K,EAAA4uQ,cAAAa,EAAA1vJ,IAEAgwJ,EAAAhwJ,EAAA//G,EACA,CA3GA10B,OAAAglH,eAAAszB,EAAA/qI,UAAA,aAIAg4G,YAAA,EACA6R,IAAA,WACA,YAAAn0H,IAAA,KAAA6+R,gBAGA,KAAAA,eAAAC,SACA,EACA5qK,IAAA,SAAA3+G,GAGA,KAAAspR,iBAMA,KAAAA,eAAAC,UAAAvpR,EACA,IAEA8/H,EAAA/qI,UAAA80D,QAAAigO,EAAAjgO,QACAi2E,EAAA/qI,UAAAm3R,WAAApC,EAAAqC,UACArsJ,EAAA/qI,UAAAw2R,SAAA,SAAAt0Q,EAAA2wN,GACAA,EAAA3wN,EACA,EAMA6oH,EAAA/qI,UAAA9H,KAAA,SAAA2kM,EAAAn0D,GACA,IACAiuJ,EADAxvQ,EAAA,KAAAotQ,eAcA,OAZAptQ,EAAAouQ,WAUAoB,GAAA,EATA,kBAAA95F,KACAn0D,EAAAA,GAAAvhH,EAAA4mP,mBACA5mP,EAAAuhH,WACAm0D,EAAA1lE,EAAA/7D,KAAAyhI,EAAAn0D,GACAA,EAAA,IAEAiuJ,GAAA,GAKAF,EAAA,KAAA55F,EAAAn0D,GAAA,EAAAiuJ,EACA,EAGA5rJ,EAAA/qI,UAAA4Q,QAAA,SAAAisL,GACA,OAAA45F,EAAA,KAAA55F,EAAA,WACA,EA6DA9xD,EAAA/qI,UAAA9D,SAAA,WACA,gBAAAq4R,eAAAoB,OACA,EAGA5qJ,EAAA/qI,UAAAq3R,YAAA,SAAAvxI,GACAomH,IAAAA,EAAsClmI,EAAA,OAAA5yG,GACtC,IAAAq2O,EAAA,IAAAyC,EAAApmH,GACA,KAAAyuI,eAAA9qB,QAAAA,EAEA,KAAA8qB,eAAA7rJ,SAAA,KAAA6rJ,eAAA9qB,QAAA/gI,SAKA,IAFA,IAAAp6G,EAAA,KAAAimQ,eAAA1qO,OAAA/hB,KACAiuC,EAAA,GACA,OAAAznD,GACAynD,GAAA0zL,EAAA7qJ,MAAAtwF,EAAAqqB,MACArqB,EAAAA,EAAAxwB,KAKA,OAHA,KAAAy2R,eAAA1qO,OAAAixC,QACA,KAAA/kB,GAAA,KAAAw+M,eAAA1qO,OAAA3xD,KAAA69E,GACA,KAAAw+M,eAAA5/R,OAAAohF,EAAAphF,OACA,IACA,EAGA,IAAA2iS,EAAA,WAqBA,SAAAC,EAAApnQ,EAAAhJ,GACA,OAAAgJ,GAAA,OAAAhJ,EAAAxyB,QAAAwyB,EAAAwrN,MAAA,EACAxrN,EAAAouQ,WAAA,EACAplQ,IAAAA,EAEAhJ,EAAAwuQ,SAAAxuQ,EAAAxyB,OAAAwyB,EAAA0iC,OAAA/hB,KAAA6Q,KAAAhkD,OAA4EwyB,EAAAxyB,QAG5Ew7B,EAAAhJ,EAAAktQ,gBAAAltQ,EAAAktQ,cA5BA,SAAAlkQ,GAeA,OAdAA,GAAAmnQ,EAEAnnQ,EAAAmnQ,GAIAnnQ,IACAA,GAAAA,IAAA,EACAA,GAAAA,IAAA,EACAA,GAAAA,IAAA,EACAA,GAAAA,IAAA,EACAA,GAAAA,IAAA,GACAA,KAEAA,CACA,CAYAqnQ,CAAArnQ,IACAA,GAAAhJ,EAAAxyB,OAAAw7B,EAEAhJ,EAAAwrN,MAIAxrN,EAAAxyB,QAHAwyB,EAAA4uQ,cAAA,EACA,GAGA,CA6HA,SAAAa,EAAA1vJ,GACA,IAAA//G,EAAA+/G,EAAAqtJ,eACAl/L,EAAA,eAAAluE,EAAA4uQ,aAAA5uQ,EAAA6uQ,iBACA7uQ,EAAA4uQ,cAAA,EACA5uQ,EAAA6uQ,kBACA3gM,EAAA,eAAAluE,EAAAwuQ,SACAxuQ,EAAA6uQ,iBAAA,EACI14J,EAAOivG,SAAAsqD,EAAA3vJ,GAEX,CACA,SAAA2vJ,EAAA3vJ,GACA,IAAA//G,EAAA+/G,EAAAqtJ,eACAl/L,EAAA,gBAAAluE,EAAAqtQ,UAAArtQ,EAAAxyB,OAAAwyB,EAAAwrN,OACAxrN,EAAAqtQ,YAAArtQ,EAAAxyB,SAAAwyB,EAAAwrN,QACAzrG,EAAAtvE,KAAA,YACAzwC,EAAA6uQ,iBAAA,GASA7uQ,EAAA4uQ,cAAA5uQ,EAAAwuQ,UAAAxuQ,EAAAwrN,OAAAxrN,EAAAxyB,QAAAwyB,EAAAktQ,cACA1kD,EAAAzoG,EACA,CAQA,SAAAgwJ,EAAAhwJ,EAAA//G,GACAA,EAAAovQ,cACApvQ,EAAAovQ,aAAA,EACIj5J,EAAOivG,SAAAkrD,EAAAvwJ,EAAA//G,GAEX,CACA,SAAAswQ,EAAAvwJ,EAAA//G,GAwBA,MAAAA,EAAA0uQ,UAAA1uQ,EAAAwrN,QAAAxrN,EAAAxyB,OAAAwyB,EAAAktQ,eAAAltQ,EAAAwuQ,SAAA,IAAAxuQ,EAAAxyB,SAAA,CACA,IAAA6gC,EAAArO,EAAAxyB,OAGA,GAFA0gG,EAAA,wBACA6xC,EAAAroB,KAAA,GACArpF,IAAArO,EAAAxyB,OAEA,KACA,CACAwyB,EAAAovQ,aAAA,CACA,CAgPA,SAAAmB,EAAAt9R,GACA,IAAA+sB,EAAA/sB,EAAAm6R,eACAptQ,EAAA8uQ,kBAAA77R,EAAAioQ,cAAA,cACAl7O,EAAA+uQ,kBAAA/uQ,EAAAgvQ,OAGAhvQ,EAAAwuQ,SAAA,EAGIv7R,EAAAioQ,cAAA,WACJjoQ,EAAAgnD,QAEA,CACA,SAAAu2O,EAAAv9R,GACAi7F,EAAA,4BACAj7F,EAAAykH,KAAA,EACA,CAuBA,SAAA+4K,EAAA1wJ,EAAA//G,GACAkuE,EAAA,SAAAluE,EAAA0uQ,SACA1uQ,EAAA0uQ,SACA3uJ,EAAAroB,KAAA,GAEA13F,EAAA+uQ,iBAAA,EACAhvJ,EAAAtvE,KAAA,UACA+3K,EAAAzoG,GACA//G,EAAAwuQ,UAAAxuQ,EAAA0uQ,SAAA3uJ,EAAAroB,KAAA,EACA,CAWA,SAAA8wH,EAAAzoG,GACA,IAAA//G,EAAA+/G,EAAAqtJ,eAEA,IADAl/L,EAAA,OAAAluE,EAAAwuQ,SACAxuQ,EAAAwuQ,SAAA,OAAAzuJ,EAAAroB,SACA,CAmHA,SAAA2vI,EAAAr+N,EAAAhJ,GAEA,WAAAA,EAAAxyB,OAAA,MAEAwyB,EAAAouQ,WAAAp4R,EAAAgqB,EAAA0iC,OAAAhoC,SAAmDsO,GAAAA,GAAAhJ,EAAAxyB,QAEnDwI,EAAAgqB,EAAAsiP,QAAAtiP,EAAA0iC,OAAA9wC,KAAA,IAAmD,IAAAoO,EAAA0iC,OAAAl1D,OAAAwyB,EAAA0iC,OAAAuP,QAA+DjyC,EAAA0iC,OAAAv4C,OAAA6V,EAAAxyB,QAClHwyB,EAAA0iC,OAAAixC,SAGA39F,EAAAgqB,EAAA0iC,OAAAguO,QAAA1nQ,EAAAhJ,EAAAsiP,SAEAtsQ,GATA,IAAAA,CAUA,CACA,SAAA26R,EAAA5wJ,GACA,IAAA//G,EAAA+/G,EAAAqtJ,eACAl/L,EAAA,cAAAluE,EAAAyuQ,YACAzuQ,EAAAyuQ,aACAzuQ,EAAAwrN,OAAA,EACIr1G,EAAOivG,SAAAwrD,EAAA5wQ,EAAA+/G,GAEX,CACA,SAAA6wJ,EAAA5wQ,EAAA+/G,GAIA,GAHA7xC,EAAA,gBAAAluE,EAAAyuQ,WAAAzuQ,EAAAxyB,SAGAwyB,EAAAyuQ,YAAA,IAAAzuQ,EAAAxyB,SACAwyB,EAAAyuQ,YAAA,EACA1uJ,EAAA8qJ,UAAA,EACA9qJ,EAAAtvE,KAAA,OACAzwC,EAAAkvQ,aAAA,CAGA,IAAA2B,EAAA9wJ,EAAAwrG,iBACAslD,GAAAA,EAAA3B,aAAA2B,EAAAz5P,WACA2oG,EAAApyE,SAEA,CAEA,CASA,SAAA9sD,EAAA6pG,EAAAvlG,GACA,QAAA5X,EAAA,EAAAsxE,EAAA6rC,EAAAl9G,OAAiCD,EAAAsxE,EAAOtxE,IACxC,GAAAm9G,EAAAn9G,KAAA4X,EAAA,OAAA5X,EAEA,QACA,CA1pBAq2I,EAAA/qI,UAAA6+G,KAAA,SAAA1uF,GACAklE,EAAA,OAAAllE,GACAA,EAAA91B,SAAA81B,EAAA,IACA,IAAAhJ,EAAA,KAAAotQ,eACA0D,EAAA9nQ,EAMA,GALA,IAAAA,IAAAhJ,EAAA6uQ,iBAAA,GAKA,IAAA7lQ,GAAAhJ,EAAA4uQ,gBAAA,IAAA5uQ,EAAAktQ,cAAAltQ,EAAAxyB,QAAAwyB,EAAAktQ,cAAAltQ,EAAAxyB,OAAA,IAAAwyB,EAAAwrN,OAGA,OAFAt9I,EAAA,qBAAAluE,EAAAxyB,OAAAwyB,EAAAwrN,OACA,IAAAxrN,EAAAxyB,QAAAwyB,EAAAwrN,MAAAmlD,EAAA,MAA6DlB,EAAA,MAC7D,KAKA,QAHAzmQ,EAAAonQ,EAAApnQ,EAAAhJ,KAGAA,EAAAwrN,MAEA,OADA,IAAAxrN,EAAAxyB,QAAAmjS,EAAA,MACA,KA0BA,IA2BA36R,EA3BA+6R,EAAA/wQ,EAAA4uQ,aA6CA,OA5CA1gM,EAAA,gBAAA6iM,IAGA,IAAA/wQ,EAAAxyB,QAAAwyB,EAAAxyB,OAAAw7B,EAAAhJ,EAAAktQ,gBAEAh/L,EAAA,6BADA6iM,GAAA,GAMA/wQ,EAAAwrN,OAAAxrN,EAAA0uQ,QAEAxgM,EAAA,mBADA6iM,GAAA,GAEIA,IACJ7iM,EAAA,WACAluE,EAAA0uQ,SAAA,EACA1uQ,EAAA2uQ,MAAA,EAEA,IAAA3uQ,EAAAxyB,SAAAwyB,EAAA4uQ,cAAA,GAEA,KAAAxrJ,MAAApjH,EAAAktQ,eACAltQ,EAAA2uQ,MAAA,EAGA3uQ,EAAA0uQ,UAAA1lQ,EAAAonQ,EAAAU,EAAA9wQ,KAIA,QADAhqB,EAAAgzB,EAAA,EAAAq+N,EAAAr+N,EAAAhJ,GAAsC,OAEtCA,EAAA4uQ,aAAA5uQ,EAAAxyB,QAAAwyB,EAAAktQ,cACAlkQ,EAAA,IAEAhJ,EAAAxyB,QAAAw7B,EACAhJ,EAAAmvQ,WAAA,GAEA,IAAAnvQ,EAAAxyB,SAGAwyB,EAAAwrN,QAAAxrN,EAAA4uQ,cAAA,GAGAkC,IAAA9nQ,GAAAhJ,EAAAwrN,OAAAmlD,EAAA,OAEA,OAAA36R,GAAA,KAAAy6D,KAAA,OAAAz6D,GACAA,CACA,EA6GA4tI,EAAA/qI,UAAAuqI,MAAA,SAAAp6G,GACAilQ,EAAA,SAAAF,EAAA,WACA,EACAnqJ,EAAA/qI,UAAA2uN,KAAA,SAAAlmN,EAAA0vR,GACA,IAAAzvR,EAAA,KACAye,EAAA,KAAAotQ,eACA,OAAAptQ,EAAAuuQ,YACA,OACAvuQ,EAAAsuQ,MAAAhtR,EACA,MACA,OACA0e,EAAAsuQ,MAAA,CAAAtuQ,EAAAsuQ,MAAAhtR,GACA,MACA,QACA0e,EAAAsuQ,MAAAv9R,KAAAuQ,GAGA0e,EAAAuuQ,YAAA,EACArgM,EAAA,wBAAAluE,EAAAuuQ,WAAAyC,GACA,IACAC,EADAD,IAAA,IAAAA,EAAAzjR,KAAAjM,IAAgE60H,EAAO+6J,QAAA5vR,IAAoB60H,EAAO84F,OAClGkiE,EAAArG,EAGA,SAAAsG,EAAAvG,EAAAwG,GACAnjM,EAAA,YACA28L,IAAAtpR,GACA8vR,IAAA,IAAAA,EAAAC,aACAD,EAAAC,YAAA,EAkBApjM,EAAA,WAEA5sF,EAAAonO,eAAA,QAAAokD,GACAxrR,EAAAonO,eAAA,SAAA6oD,GACAjwR,EAAAonO,eAAA,QAAAkkD,GACAtrR,EAAAonO,eAAA,QAAAtjL,GACA9jD,EAAAonO,eAAA,SAAA0oD,GACA7vR,EAAAmnO,eAAA,MAAAoiD,GACAvpR,EAAAmnO,eAAA,MAAAyoD,GACA5vR,EAAAmnO,eAAA,OAAAikD,GACA6E,GAAA,GAOAxxQ,EAAAmvQ,YAAA7tR,EAAAiqO,iBAAAjqO,EAAAiqO,eAAAE,WAAAmhD,IA/BA,CACA,SAAA9B,IACA58L,EAAA,SACA5sF,EAAAiM,KACA,CAdAyS,EAAAyuQ,WAAwBt4J,EAAOivG,SAAA6rD,GAAiB1vR,EAAA4vM,KAAA,MAAA8/E,GAChD3vR,EAAAqtC,GAAA,SAAAyiP,GAmBA,IAAAxE,EAgFA,SAAArrR,GACA,kBACA,IAAAye,EAAAze,EAAA6rR,eACAl/L,EAAA,cAAAluE,EAAAmvQ,YACAnvQ,EAAAmvQ,YAAAnvQ,EAAAmvQ,aACA,IAAAnvQ,EAAAmvQ,YAAA5B,EAAAhsR,EAAA,UACAye,EAAAwuQ,SAAA,EACAhmD,EAAAjnO,GAEA,CACA,CA1FAkwR,CAAAlwR,GACAD,EAAAqtC,GAAA,QAAAi+O,GACA,IAAA4E,GAAA,EAsBA,SAAA7E,EAAAj3F,GACAxnG,EAAA,UACA,IAAAl4F,EAAAsL,EAAAm2G,MAAAi+E,GACAxnG,EAAA,aAAAl4F,IACA,IAAAA,KAKA,IAAAgqB,EAAAuuQ,YAAAvuQ,EAAAsuQ,QAAAhtR,GAAA0e,EAAAuuQ,WAAA,QAAA1tR,EAAAmf,EAAAsuQ,MAAAhtR,MAAAkwR,IACAtjM,EAAA,8BAAAluE,EAAAmvQ,YACAnvQ,EAAAmvQ,cAEA5tR,EAAA3R,QAEA,CAIA,SAAAw1D,EAAA6sC,GACA/D,EAAA,UAAA+D,GACAk/L,IACA7vR,EAAAonO,eAAA,QAAAtjL,GACA,IAAAmoO,EAAAjsR,EAAA,UAAA2sR,EAAA3sR,EAAA2wF,EACA,CAMA,SAAA66L,IACAxrR,EAAAonO,eAAA,SAAA6oD,GACAJ,GACA,CAEA,SAAAI,IACArjM,EAAA,YACA5sF,EAAAonO,eAAA,QAAAokD,GACAqE,GACA,CAEA,SAAAA,IACAjjM,EAAA,UACA3sF,EAAA4vR,OAAA7vR,EACA,CAUA,OAvDAC,EAAAotC,GAAA,OAAAg+O,GAniBA,SAAA9yB,EAAAhuP,EAAAiiD,GAGA,uBAAA+rM,EAAA6B,gBAAA,OAAA7B,EAAA6B,gBAAA7vP,EAAAiiD,GAMA+rM,EAAA/mD,SAAA+mD,EAAA/mD,QAAAjnM,GAAyEyQ,MAAA44C,QAAA2kM,EAAA/mD,QAAAjnM,IAAAguP,EAAA/mD,QAAAjnM,GAAApC,QAAAqkD,GAAmF+rM,EAAA/mD,QAAAjnM,GAAA,CAAAiiD,EAAA+rM,EAAA/mD,QAAAjnM,IAA5JguP,EAAAlrN,GAAA9iC,EAAAiiD,EACA,CAqjBA4tM,CAAAp6P,EAAA,QAAA8jD,GAOA9jD,EAAA6vM,KAAA,QAAA27E,GAMAxrR,EAAA6vM,KAAA,SAAAogF,GAOAjwR,EAAAmvD,KAAA,OAAAlvD,GAGAye,EAAAwuQ,UACAtgM,EAAA,eACA3sF,EAAA04C,UAEA34C,CACA,EAYAsiI,EAAA/qI,UAAAs4R,OAAA,SAAA7vR,GACA,IAAA0e,EAAA,KAAAotQ,eACAiE,EAAA,CACAC,YAAA,GAIA,OAAAtxQ,EAAAuuQ,WAAA,YAGA,OAAAvuQ,EAAAuuQ,WAEA,OAAAjtR,GAAAA,IAAA0e,EAAAsuQ,QACAhtR,IAAAA,EAAA0e,EAAAsuQ,OAGAtuQ,EAAAsuQ,MAAA,KACAtuQ,EAAAuuQ,WAAA,EACAvuQ,EAAAwuQ,SAAA,EACAltR,GAAAA,EAAAmvD,KAAA,cAAA4gO,IAPA,KAaA,IAAA/vR,EAAA,CAEA,IAAAowR,EAAA1xQ,EAAAsuQ,MACAjgQ,EAAArO,EAAAuuQ,WACAvuQ,EAAAsuQ,MAAA,KACAtuQ,EAAAuuQ,WAAA,EACAvuQ,EAAAwuQ,SAAA,EACA,QAAAjhS,EAAA,EAAoBA,EAAA8gC,EAAS9gC,IAAAmkS,EAAAnkS,GAAAkjE,KAAA,eAC7B6gO,YAAA,IAEA,WACA,CAGA,IAAA3vR,EAAAd,EAAAmf,EAAAsuQ,MAAAhtR,GACA,WAAAK,IACAqe,EAAAsuQ,MAAAp/P,OAAAvtB,EAAA,GACAqe,EAAAuuQ,YAAA,EACA,IAAAvuQ,EAAAuuQ,aAAAvuQ,EAAAsuQ,MAAAtuQ,EAAAsuQ,MAAA,IACAhtR,EAAAmvD,KAAA,cAAA4gO,IAJA,IAMA,EAIAztJ,EAAA/qI,UAAA81C,GAAA,SAAAj4C,EAAAo3D,GACA,IAAA7c,EAAAi0O,EAAArsR,UAAA81C,GAAAyV,KAAA,KAAA1tD,EAAAo3D,GACA9tC,EAAA,KAAAotQ,eAqBA,MApBA,SAAA12R,GAGAspB,EAAA8uQ,kBAAA,KAAA5zB,cAAA,eAGA,IAAAl7O,EAAAwuQ,SAAA,KAAAv0O,UACI,aAAAvjD,IACJspB,EAAAyuQ,YAAAzuQ,EAAA8uQ,oBACA9uQ,EAAA8uQ,kBAAA9uQ,EAAA4uQ,cAAA,EACA5uQ,EAAAwuQ,SAAA,EACAxuQ,EAAA6uQ,iBAAA,EACA3gM,EAAA,cAAAluE,EAAAxyB,OAAAwyB,EAAA0uQ,SACA1uQ,EAAAxyB,OACAiiS,EAAA,MACQzvQ,EAAA0uQ,SACAv4J,EAAOivG,SAAAorD,EAAA,QAIfv/O,CACA,EACA2yF,EAAA/qI,UAAA4iQ,YAAA73H,EAAA/qI,UAAA81C,GACAi1F,EAAA/qI,UAAA6vO,eAAA,SAAAhyO,EAAAo3D,GACA,IAAA7c,EAAAi0O,EAAArsR,UAAA6vO,eAAAtkL,KAAA,KAAA1tD,EAAAo3D,GAUA,MATA,aAAAp3D,GAOIy/H,EAAOivG,SAAAmrD,EAAA,MAEXt/O,CACA,EACA2yF,EAAA/qI,UAAAkjQ,mBAAA,SAAArlQ,GACA,IAAAu6C,EAAAi0O,EAAArsR,UAAAkjQ,mBAAAx3I,MAAA,KAAA/nC,WAUA,MATA,aAAA9lF,QAAAnI,IAAAmI,GAOIy/H,EAAOivG,SAAAmrD,EAAA,MAEXt/O,CACA,EAqBA2yF,EAAA/qI,UAAAohD,OAAA,WACA,IAAAj6B,EAAA,KAAAotQ,eAUA,OATAptQ,EAAAwuQ,UACAtgM,EAAA,UAIAluE,EAAAwuQ,SAAAxuQ,EAAA8uQ,kBAMA,SAAA/uJ,EAAA//G,GACAA,EAAA+uQ,kBACA/uQ,EAAA+uQ,iBAAA,EACI54J,EAAOivG,SAAAqrD,EAAA1wJ,EAAA//G,GAEX,CAVAi6B,CAAA,KAAAj6B,IAEAA,EAAAgvQ,QAAA,EACA,IACA,EAiBAprJ,EAAA/qI,UAAAjJ,MAAA,WAQA,OAPAs+F,EAAA,6BAAAk/L,eAAAoB,UACA,SAAApB,eAAAoB,UACAtgM,EAAA,SACA,KAAAk/L,eAAAoB,SAAA,EACA,KAAA/9N,KAAA,UAEA,KAAA28N,eAAA4B,QAAA,EACA,IACA,EAUAprJ,EAAA/qI,UAAAiD,KAAA,SAAAikI,GACA,IAAA3lB,EAAA,KACAp6F,EAAA,KAAAotQ,eACA4B,GAAA,EAwBA,QAAAzhS,KAvBAwyI,EAAApxF,GAAA,kBAEA,GADAu/C,EAAA,eACAluE,EAAAsiP,UAAAtiP,EAAAwrN,MAAA,CACA,IAAA91C,EAAA11K,EAAAsiP,QAAA/0P,MACAmoL,GAAAA,EAAAloM,QAAA4sH,EAAArpH,KAAA2kM,EACA,CACAt7E,EAAArpH,KAAA,KACA,IACAgvI,EAAApxF,GAAA,iBAAA+mJ,GACAxnG,EAAA,gBACAluE,EAAAsiP,UAAA5sE,EAAA11K,EAAAsiP,QAAA7qJ,MAAAi+E,MAGA11K,EAAAouQ,YAAA,OAAA14F,QAAAnnM,IAAAmnM,KAA4E11K,EAAAouQ,YAAA14F,GAAAA,EAAAloM,UAC5E4sH,EAAArpH,KAAA2kM,KAEAs5F,GAAA,EACAjvJ,EAAAnwI,SAEA,IAIAmwI,OACAxxI,IAAA,KAAAhB,IAAA,oBAAAwyI,EAAAxyI,KACA,KAAAA,GAAA,SAAAujP,GACA,kBACA,OAAA/wG,EAAA+wG,GAAAvsH,MAAAwb,EAAAvjD,UACA,CACA,CAJA,CAIOjvF,IAKP,QAAAy7B,EAAA,EAAkBA,EAAAklQ,EAAA1gS,OAAyBw7B,IAC3C+2G,EAAApxF,GAAAu/O,EAAAllQ,GAAA,KAAAynC,KAAAvhD,KAAA,KAAAg/Q,EAAAllQ,KAYA,OAPA,KAAAo6G,MAAA,SAAAp6G,GACAklE,EAAA,gBAAAllE,GACAgmQ,IACAA,GAAA,EACAjvJ,EAAA9lF,SAEA,EACA,IACA,EACA,oBAAAkqE,SACAyf,EAAA/qI,UAAAsrH,OAAAwtK,eAAA,WAIA,YAHApjS,IAAAo/R,IACAA,EAA0C9uJ,EAAQ,QAElD8uJ,EAAA,KACA,GAEAriS,OAAAglH,eAAAszB,EAAA/qI,UAAA,yBAIAg4G,YAAA,EACA6R,IAAA,WACA,YAAA0qK,eAAAF,aACA,IAEA5hS,OAAAglH,eAAAszB,EAAA/qI,UAAA,kBAIAg4G,YAAA,EACA6R,IAAA,WACA,YAAA0qK,gBAAA,KAAAA,eAAA1qO,MACA,IAEAp3D,OAAAglH,eAAAszB,EAAA/qI,UAAA,mBAIAg4G,YAAA,EACA6R,IAAA,WACA,YAAA0qK,eAAAoB,OACA,EACA/rK,IAAA,SAAAziG,GACA,KAAAotQ,iBACA,KAAAA,eAAAoB,QAAAxuQ,EAEA,IAIA4jH,EAAAguJ,UAAAvqC,EACA/7P,OAAAglH,eAAAszB,EAAA/qI,UAAA,kBAIAg4G,YAAA,EACA6R,IAAA,WACA,YAAA0qK,eAAA5/R,MACA,IA+CA,oBAAA22H,SACAyf,EAAA3vE,KAAA,SAAA69D,EAAAhoD,GAIA,YAHAv7E,IAAA0lE,IACAA,EAAa4qE,EAAQ,QAErB5qE,EAAA2vE,EAAA9R,EAAAhoD,EACA,uCC17BAj9E,EAAAC,QAAAwrO,EACA,IAAA9P,EAAqB3pF,EAAA,OAAA9yG,EACrBgiQ,EAAAvlE,EAAAulE,2BACA8D,EAAArpE,EAAAqpE,sBACAC,EAAAtpE,EAAAspE,mCACAC,EAAAvpE,EAAAupE,4BACAvF,EAAa3tJ,EAAQ,OAErB,SAAAmzJ,EAAA//L,EAAAzgD,GACA,IAAAkuB,EAAA,KAAAuyN,gBACAvyN,EAAAwyN,cAAA,EACA,IAAAxmD,EAAAhsK,EAAAyyN,QACA,UAAAzmD,EACA,YAAAj7K,KAAA,YAAAohO,GAEAnyN,EAAA0yN,WAAA,KACA1yN,EAAAyyN,QAAA,KACA,MAAA3gP,GAEA,KAAAzgD,KAAAygD,GACAk6L,EAAAz5I,GACA,IAAAogM,EAAA,KAAAjF,eACAiF,EAAA3D,SAAA,GACA2D,EAAAzD,cAAAyD,EAAA7kS,OAAA6kS,EAAAnF,gBACA,KAAA9pJ,MAAAivJ,EAAAnF,cAEA,CACA,SAAA50D,EAAAlrO,GACA,qBAAAkrO,GAAA,WAAAA,EAAAlrO,GACAo/R,EAAApoO,KAAA,KAAAh3D,GACA,KAAA6kS,gBAAA,CACAD,eAAAA,EAAA9iR,KAAA,MACAojR,eAAA,EACAJ,cAAA,EACAC,QAAA,KACAC,WAAA,KACAG,cAAA,MAIA,KAAAnF,eAAAwB,cAAA,EAKA,KAAAxB,eAAAuB,MAAA,EACAvhS,IACA,oBAAAA,EAAA+oG,YAAA,KAAAk1I,WAAAj+O,EAAA+oG,WACA,oBAAA/oG,EAAAk2I,QAAA,KAAA44E,OAAA9uN,EAAAk2I,QAIA,KAAA30F,GAAA,YAAA6jP,EACA,CACA,SAAAA,IACA,IAAAp4K,EAAA,KACA,yBAAA8hG,QAAA,KAAAkxE,eAAAC,UAKAx5P,EAAA,gBAJA,KAAAqoL,QAAA,SAAAjqH,EAAAzgD,GACA3d,EAAAumF,EAAAnoB,EAAAzgD,EACA,GAIA,CAiDA,SAAA3d,EAAAksG,EAAA9tC,EAAAzgD,GACA,GAAAygD,EAAA,OAAA8tC,EAAAtvE,KAAA,QAAAwhC,GAQA,GAPA,MAAAzgD,GAEAuuF,EAAAhvI,KAAAygD,GAKAuuF,EAAAwrG,eAAA/9O,OAAA,UAAAukS,EACA,GAAAhyJ,EAAAkyJ,gBAAAC,aAAA,UAAAJ,EACA,OAAA/xJ,EAAAhvI,KAAA,KACA,CArHA8tI,EAAQ,MAARA,CAAkBy5F,EAAAk0D,GAyDlBl0D,EAAAz/N,UAAA9H,KAAA,SAAA2kM,EAAAn0D,GAEA,OADA,KAAA0wJ,gBAAAK,eAAA,EACA9F,EAAA3zR,UAAA9H,KAAAqzD,KAAA,KAAAsxI,EAAAn0D,EACA,EAYA+2F,EAAAz/N,UAAAwyO,WAAA,SAAA31C,EAAAn0D,EAAAmqG,GACAA,EAAA,IAAAqiD,EAAA,gBACA,EACAz1D,EAAAz/N,UAAAq9L,OAAA,SAAAR,EAAAn0D,EAAAmqG,GACA,IAAAhsK,EAAA,KAAAuyN,gBAIA,GAHAvyN,EAAAyyN,QAAAzmD,EACAhsK,EAAA0yN,WAAA18F,EACAh2H,EAAA6yN,cAAAhxJ,GACA7hE,EAAAwyN,aAAA,CACA,IAAAG,EAAA,KAAAjF,gBACA1tN,EAAA4yN,eAAAD,EAAAzD,cAAAyD,EAAA7kS,OAAA6kS,EAAAnF,gBAAA,KAAA9pJ,MAAAivJ,EAAAnF,cACA,CACA,EAKA50D,EAAAz/N,UAAAuqI,MAAA,SAAAp6G,GACA,IAAA02C,EAAA,KAAAuyN,gBACA,OAAAvyN,EAAA0yN,YAAA1yN,EAAAwyN,aAMAxyN,EAAA4yN,eAAA,GALA5yN,EAAAwyN,cAAA,EACA,KAAA7mD,WAAA3rK,EAAA0yN,WAAA1yN,EAAA6yN,cAAA7yN,EAAAsyN,gBAMA,EACA15D,EAAAz/N,UAAAw2R,SAAA,SAAAt0Q,EAAA2wN,GACA8gD,EAAA3zR,UAAAw2R,SAAAjrO,KAAA,KAAArpC,GAAA,SAAA03Q,GACA/mD,EAAA+mD,EACA,GACA,0CC9HAjG,YAXA,SAAAkG,EAAA1yQ,GACA,IAAAo6F,EAAA,KACA,KAAAzjH,KAAA,KACA,KAAAmuF,MAAA,KACA,KAAA/2C,OAAA,YA6iBA,SAAA4kP,EAAA3yQ,EAAAjF,GACA,IAAA+pE,EAAA6tM,EAAA7tM,MAEA,IADA6tM,EAAA7tM,MAAA,KACAA,GAAA,CACA,IAAA4mJ,EAAA5mJ,EAAAxrF,SACA0mB,EAAA4yQ,YACAlnD,EAAA3wN,GACA+pE,EAAAA,EAAAnuF,IACA,CAGAqpB,EAAA6yQ,mBAAAl8R,KAAAg8R,CACA,CAxjBAG,CAAA14K,EAAAp6F,EACA,CACA,CAnBAnzB,EAAAC,QAAAy/R,EA0BAA,EAAAwG,cAAAA,EAGA,IA+JAC,EA/JAC,EAAA,CACAC,UAAar0J,EAAQ,QAKrBqmJ,EAAarmJ,EAAQ,OAGrB7O,EAAa6O,EAAA,OAAA7O,OACbw9J,GAAuC,qBAAX3uJ,EAAAhxG,EAAyBgxG,EAAAhxG,EAAM,qBAAA5xB,OAAAA,OAAA,qBAAAhJ,KAAAA,KAAG,CAAH,GAAmFwxD,YAAA,aAO9ImpO,EAAkB/uJ,EAAQ,OAE1BgvJ,EADehvJ,EAAQ,OACvBgvJ,iBACArlE,EAAqB3pF,EAAA,OAAA9yG,EACrBmnH,EAAAs1E,EAAAt1E,qBACA66I,EAAAvlE,EAAAulE,2BACA8D,EAAArpE,EAAAqpE,sBACAsB,EAAA3qE,EAAA2qE,uBACAC,EAAA5qE,EAAA4qE,qBACAC,EAAA7qE,EAAA6qE,uBACAC,EAAA9qE,EAAA8qE,2BACAC,EAAA/qE,EAAA+qE,qBACAtF,EAAAL,EAAAK,eAEA,SAAAuF,IAAA,CACA,SAAAT,EAAA3lS,EAAA2yI,EAAAouJ,GACA3B,EAAAA,GAAqB3tJ,EAAQ,OAC7BzxI,EAAAA,GAAA,GAOA,mBAAA+gS,IAAAA,EAAApuJ,aAAAysJ,GAIA,KAAA4B,aAAAhhS,EAAAghS,WACAD,IAAA,KAAAC,WAAA,KAAAA,cAAAhhS,EAAAqmS,oBAKA,KAAAvG,cAAAW,EAAA,KAAAzgS,EAAA,wBAAA+gS,GAGA,KAAAuF,aAAA,EAGA,KAAAjoD,WAAA,EAEA,KAAA51M,QAAA,EAEA,KAAA21M,OAAA,EAEA,KAAAp0M,UAAA,EAGA,KAAAi2P,WAAA,EAKA,IAAAsG,GAAA,IAAAvmS,EAAAu+Q,cACA,KAAAA,eAAAgoB,EAKA,KAAA/sB,gBAAAx5Q,EAAAw5Q,iBAAA,OAKA,KAAAp5Q,OAAA,EAGA,KAAAomS,SAAA,EAGA,KAAAC,OAAA,EAMA,KAAAlF,MAAA,EAKA,KAAAmF,kBAAA,EAGA,KAAAC,QAAA,SAAA9hM,IAsQA,SAAA8tC,EAAA9tC,GACA,IAAAjyE,EAAA+/G,EAAAwrG,eACAojD,EAAA3uQ,EAAA2uQ,KACAjjD,EAAA1rN,EAAAmyQ,QACA,uBAAAzmD,EAAA,UAAAmmD,EAEA,GAZA,SAAA7xQ,GACAA,EAAA4zQ,SAAA,EACA5zQ,EAAAmyQ,QAAA,KACAnyQ,EAAAxyB,QAAAwyB,EAAAg0Q,SACAh0Q,EAAAg0Q,SAAA,CACA,CAMAC,CAAAj0Q,GACAiyE,GAlCA,SAAA8tC,EAAA//G,EAAA2uQ,EAAA18L,EAAAy5I,KACA1rN,EAAA4yQ,UACAjE,GAGIx4J,EAAOivG,SAAAsG,EAAAz5I,GAGPkkC,EAAOivG,SAAA8uD,EAAAn0J,EAAA//G,GACX+/G,EAAAwrG,eAAA4oD,cAAA,EACAlG,EAAAluJ,EAAA9tC,KAIAy5I,EAAAz5I,GACA8tC,EAAAwrG,eAAA4oD,cAAA,EACAlG,EAAAluJ,EAAA9tC,GAGAiiM,EAAAn0J,EAAA//G,GAEA,CAaAo0Q,CAAAr0J,EAAA//G,EAAA2uQ,EAAA18L,EAAAy5I,OAAyD,CAEzD,IAAAt0M,EAAAi9P,EAAAr0Q,IAAA+/G,EAAAstJ,UACAj2P,GAAApX,EAAA6zQ,QAAA7zQ,EAAA8zQ,mBAAA9zQ,EAAAs0Q,iBACAC,EAAAx0J,EAAA//G,GAEA2uQ,EACMx4J,EAAOivG,SAAAovD,EAAAz0J,EAAA//G,EAAAoX,EAAAs0M,GAEb8oD,EAAAz0J,EAAA//G,EAAAoX,EAAAs0M,EAEA,CACA,CAvRAqoD,CAAAh0J,EAAA9tC,EACA,EAGA,KAAAkgM,QAAA,KAGA,KAAA6B,SAAA,EACA,KAAAM,gBAAA,KACA,KAAAG,oBAAA,KAIA,KAAA7B,UAAA,EAIA,KAAA8B,aAAA,EAGA,KAAAP,cAAA,EAGA,KAAAlF,WAAA,IAAA7hS,EAAA6hS,UAGA,KAAAC,cAAA9hS,EAAA8hS,YAGA,KAAAyF,qBAAA,EAIA,KAAA9B,mBAAA,IAAAH,EAAA,KACA,CAqCA,SAAAnG,EAAAn/R,GAaA,IAAA+gS,EAAA,gBAZA3B,EAAAA,GAAqB3tJ,EAAQ,QAa7B,IAAAsvJ,IAAA6E,EAAA5uO,KAAAmoO,EAAA,iBAAAA,EAAAn/R,GACA,KAAAm+O,eAAA,IAAAwnD,EAAA3lS,EAAA,KAAA+gS,GAGA,KAAAn9K,UAAA,EACA5jH,IACA,oBAAAA,EAAAqqH,QAAA,KAAAy+E,OAAA9oM,EAAAqqH,OACA,oBAAArqH,EAAAwnS,SAAA,KAAAC,QAAAznS,EAAAwnS,QACA,oBAAAxnS,EAAAugE,UAAA,KAAA0hO,SAAAjiS,EAAAugE,SACA,oBAAAvgE,EAAA0nS,QAAA,KAAAC,OAAA3nS,EAAA0nS,QAEA5P,EAAA9gO,KAAA,KACA,CAgIA,SAAA4wO,EAAAj1J,EAAA//G,EAAA40Q,EAAAvmQ,EAAAqnK,EAAAn0D,EAAAmqG,GACA1rN,EAAAg0Q,SAAA3lQ,EACArO,EAAAmyQ,QAAAzmD,EACA1rN,EAAA4zQ,SAAA,EACA5zQ,EAAA2uQ,MAAA,EACA3uQ,EAAAqtQ,UAAArtQ,EAAA+zQ,QAAA,IAAAX,EAAA,UAAwEwB,EAAA70J,EAAA80J,QAAAn/F,EAAA11K,EAAA+zQ,SAAsDh0J,EAAAm2D,OAAAR,EAAAn0D,EAAAvhH,EAAA+zQ,SAC9H/zQ,EAAA2uQ,MAAA,CACA,CAgDA,SAAA6F,EAAAz0J,EAAA//G,EAAAoX,EAAAs0M,GACAt0M,GASA,SAAA2oG,EAAA//G,GACA,IAAAA,EAAAxyB,QAAAwyB,EAAAyrN,YACAzrN,EAAAyrN,WAAA,EACA1rG,EAAAtvE,KAAA,SAEA,CAdAwkO,CAAAl1J,EAAA//G,GACAA,EAAA4yQ,YACAlnD,IACAwoD,EAAAn0J,EAAA//G,EACA,CAaA,SAAAu0Q,EAAAx0J,EAAA//G,GACAA,EAAA8zQ,kBAAA,EACA,IAAAhvM,EAAA9kE,EAAAs0Q,gBACA,GAAAv0J,EAAA80J,SAAA/vM,GAAAA,EAAAnuF,KAAA,CAEA,IAAAkoE,EAAA7+C,EAAA20Q,qBACAjyO,EAAA,IAAApmC,MAAAuiD,GACAq2N,EAAAl1Q,EAAA6yQ,mBACAqC,EAAApwM,MAAAA,EAGA,IAFA,IAAAv/C,EAAA,EACA4vP,GAAA,EACArwM,GACApiC,EAAAnd,GAAAu/C,EACAA,EAAAswM,QAAAD,GAAA,GACArwM,EAAAA,EAAAnuF,KACA4uC,GAAA,EAEAmd,EAAAyyO,WAAAA,EACAH,EAAAj1J,EAAA//G,GAAA,EAAAA,EAAAxyB,OAAAk1D,EAAA,GAAAwyO,EAAAnnP,QAIA/tB,EAAA4yQ,YACA5yQ,EAAAy0Q,oBAAA,KACAS,EAAAv+R,MACAqpB,EAAA6yQ,mBAAAqC,EAAAv+R,KACAu+R,EAAAv+R,KAAA,MAEAqpB,EAAA6yQ,mBAAA,IAAAH,EAAA1yQ,GAEAA,EAAA20Q,qBAAA,CACA,KAAI,CAEJ,KAAA7vM,GAAA,CACA,IAAA4wG,EAAA5wG,EAAA4wG,MACAn0D,EAAAz8C,EAAAy8C,SACAmqG,EAAA5mJ,EAAAxrF,SASA,GAPA07R,EAAAj1J,EAAA//G,GAAA,EADAA,EAAAouQ,WAAA,EAAA14F,EAAAloM,OACAkoM,EAAAn0D,EAAAmqG,GACA5mJ,EAAAA,EAAAnuF,KACAqpB,EAAA20Q,uBAKA30Q,EAAA4zQ,QACA,KAEA,CACA,OAAA9uM,IAAA9kE,EAAAy0Q,oBAAA,KACA,CACAz0Q,EAAAs0Q,gBAAAxvM,EACA9kE,EAAA8zQ,kBAAA,CACA,CAoCA,SAAAO,EAAAr0Q,GACA,OAAAA,EAAA6V,QAAA,IAAA7V,EAAAxyB,QAAA,OAAAwyB,EAAAs0Q,kBAAAt0Q,EAAAoX,WAAApX,EAAA4zQ,OACA,CACA,SAAAyB,EAAAt1J,EAAA//G,GACA+/G,EAAAg1J,QAAA,SAAAh6Q,GACAiF,EAAA4yQ,YACA73Q,GACAkzQ,EAAAluJ,EAAAhlH,GAEAiF,EAAA00Q,aAAA,EACA30J,EAAAtvE,KAAA,aACAyjO,EAAAn0J,EAAA//G,EACA,GACA,CAaA,SAAAk0Q,EAAAn0J,EAAA//G,GACA,IAAAs1Q,EAAAjB,EAAAr0Q,GACA,GAAAs1Q,IAdA,SAAAv1J,EAAA//G,GACAA,EAAA00Q,aAAA10Q,EAAA0zQ,cACA,oBAAA3zJ,EAAAg1J,QAAA/0Q,EAAAqtQ,WAKArtQ,EAAA00Q,aAAA,EACA30J,EAAAtvE,KAAA,eALAzwC,EAAA4yQ,YACA5yQ,EAAA0zQ,aAAA,EACMv9J,EAAOivG,SAAAiwD,EAAAt1J,EAAA//G,IAMb,CAIAwyQ,CAAAzyJ,EAAA//G,GACA,IAAAA,EAAA4yQ,YACA5yQ,EAAAoX,UAAA,EACA2oG,EAAAtvE,KAAA,UACAzwC,EAAAkvQ,cAAA,CAGA,IAAAqG,EAAAx1J,EAAAqtJ,iBACAmI,GAAAA,EAAArG,aAAAqG,EAAA9G,aACA1uJ,EAAApyE,SAEA,CAGA,OAAA2nO,CACA,CAxfAz2J,EAAQ,MAARA,CAAkB0tJ,EAAArH,GA4GlB6N,EAAAl6R,UAAAs0R,UAAA,WAGA,IAFA,IAAAv0O,EAAA,KAAA07O,gBACA17P,EAAA,GACAggB,GACAhgB,EAAA7nC,KAAA6nD,GACAA,EAAAA,EAAAjiD,KAEA,OAAAiiC,CACA,EACA,WACA,IACAttC,OAAAglH,eAAAyiL,EAAAl6R,UAAA,UACA6pH,IAAAuwK,EAAAC,WAAA,WACA,YAAA/F,WACA,GAAS,6EAAmF,YAE5F,CAAI,MAAA71L,GAAA,CACH,CARD,GAaA,oBAAA6sB,QAAAA,OAAAqxK,aAAA,oBAAAhqK,SAAA3yH,UAAAsrH,OAAAqxK,cACAxC,EAAAxnK,SAAA3yH,UAAAsrH,OAAAqxK,aACAlqS,OAAAglH,eAAAi8K,EAAApoK,OAAAqxK,YAAA,CACA1xR,MAAA,SAAAgiH,GACA,QAAAktK,EAAA5uO,KAAA,KAAA0hE,IACA,OAAAymK,GACAzmK,GAAAA,EAAAylH,0BAAAwnD,CACA,KAGAC,EAAA,SAAAltK,GACA,OAAAA,aAAA,IACA,EA+BAymK,EAAA1zR,UAAA2uN,KAAA,WACAymE,EAAA,SAAAkF,EACA,EAyBA5G,EAAA1zR,UAAA4+G,MAAA,SAAAi+E,EAAAn0D,EAAAmqG,GACA,IAzNAztM,EAyNAje,EAAA,KAAAurN,eACAv1O,GAAA,EACAo/R,GAAAp1Q,EAAAouQ,aA3NAnwP,EA2NAy3J,EA1NA1lE,EAAAhL,SAAA/mF,IAAAA,aAAAuvP,GAwOA,OAbA4H,IAAAplK,EAAAhL,SAAA0wE,KACAA,EAhOA,SAAAA,GACA,OAAA1lE,EAAA/7D,KAAAyhI,EACA,CA8NAm6F,CAAAn6F,IAEA,oBAAAn0D,IACAmqG,EAAAnqG,EACAA,EAAA,MAEA6zJ,EAAA7zJ,EAAA,SAAiCA,IAAAA,EAAAvhH,EAAA4mP,iBACjC,oBAAAl7B,IAAAA,EAAA8nD,GACAxzQ,EAAA6V,OArCA,SAAAkqG,EAAA2rG,GACA,IAAAz5I,EAAA,IAAAqhM,EAEArF,EAAAluJ,EAAA9tC,GACEkkC,EAAOivG,SAAAsG,EAAAz5I,EACT,CAgCAwjM,CAAA,KAAA/pD,IAA4C0pD,GA3B5C,SAAAr1J,EAAA//G,EAAA01K,EAAAg2C,GACA,IAAAz5I,EAMA,OALA,OAAAyjG,EACAzjG,EAAA,IAAAohM,EACI,kBAAA39F,GAAA11K,EAAAouQ,aACJn8L,EAAA,IAAAihD,EAAA,4BAAAwiD,KAEAzjG,IACAg8L,EAAAluJ,EAAA9tC,GACIkkC,EAAOivG,SAAAsG,EAAAz5I,IACX,EAGA,CAc4CyjM,CAAA,KAAA11Q,EAAA01K,EAAAg2C,MAC5C1rN,EAAA4yQ,YACA58R,EAiDA,SAAA+pI,EAAA//G,EAAAo1Q,EAAA1/F,EAAAn0D,EAAAmqG,GACA,IAAA0pD,EAAA,CACA,IAAAO,EArBA,SAAA31Q,EAAA01K,EAAAn0D,GAIA,OAHAvhH,EAAAouQ,aAAA,IAAApuQ,EAAA2rP,eAAA,kBAAAj2E,IACAA,EAAA1lE,EAAA/7D,KAAAyhI,EAAAn0D,IAEAm0D,CACA,CAgBAkgG,CAAA51Q,EAAA01K,EAAAn0D,GACAm0D,IAAAigG,IACAP,GAAA,EACA7zJ,EAAA,SACAm0D,EAAAigG,EAEA,CACA,IAAAtnQ,EAAArO,EAAAouQ,WAAA,EAAA14F,EAAAloM,OACAwyB,EAAAxyB,QAAA6gC,EACA,IAAAr4B,EAAAgqB,EAAAxyB,OAAAwyB,EAAAktQ,cAGA,GADAl3R,IAAAgqB,EAAAyrN,WAAA,GACAzrN,EAAA4zQ,SAAA5zQ,EAAA6zQ,OAAA,CACA,IAAAv5Q,EAAA0F,EAAAy0Q,oBACAz0Q,EAAAy0Q,oBAAA,CACA/+F,MAAAA,EACAn0D,SAAAA,EACA6zJ,MAAAA,EACA97R,SAAAoyO,EACA/0O,KAAA,MAEA2jB,EACAA,EAAA3jB,KAAAqpB,EAAAy0Q,oBAEAz0Q,EAAAs0Q,gBAAAt0Q,EAAAy0Q,oBAEAz0Q,EAAA20Q,sBAAA,CACA,MACAK,EAAAj1J,EAAA//G,GAAA,EAAAqO,EAAAqnK,EAAAn0D,EAAAmqG,GAEA,OAAA11O,CACA,CAlFA6/R,CAAA,KAAA71Q,EAAAo1Q,EAAA1/F,EAAAn0D,EAAAmqG,IAEA11O,CACA,EACAu2R,EAAA1zR,UAAAi9R,KAAA,WACA,KAAAvqD,eAAAsoD,QACA,EACAtH,EAAA1zR,UAAAk9R,OAAA,WACA,IAAA/1Q,EAAA,KAAAurN,eACAvrN,EAAA6zQ,SACA7zQ,EAAA6zQ,SACA7zQ,EAAA4zQ,SAAA5zQ,EAAA6zQ,QAAA7zQ,EAAA8zQ,mBAAA9zQ,EAAAs0Q,iBAAAC,EAAA,KAAAv0Q,GAEA,EACAusQ,EAAA1zR,UAAAm9R,mBAAA,SAAAz0J,GAGA,GADA,kBAAAA,IAAAA,EAAAA,EAAArhI,iBACA,2FAAAW,SAAA0gI,EAAA,IAAArhI,gBAAA,aAAAqzR,EAAAhyJ,GAEA,OADA,KAAAgqG,eAAAq7B,gBAAArlI,EACA,IACA,EACAj2I,OAAAglH,eAAAi8K,EAAA1zR,UAAA,kBAIAg4G,YAAA,EACA6R,IAAA,WACA,YAAA6oH,gBAAA,KAAAA,eAAA4hD,WACA,IAQA7hS,OAAAglH,eAAAi8K,EAAA1zR,UAAA,yBAIAg4G,YAAA,EACA6R,IAAA,WACA,YAAA6oH,eAAA2hD,aACA,IAuKAX,EAAA1zR,UAAAq9L,OAAA,SAAAR,EAAAn0D,EAAAmqG,GACAA,EAAA,IAAAqiD,EAAA,YACA,EACAxB,EAAA1zR,UAAAg8R,QAAA,KACAtI,EAAA1zR,UAAA0U,IAAA,SAAAmoL,EAAAn0D,EAAAmqG,GACA,IAAA1rN,EAAA,KAAAurN,eAmBA,MAlBA,oBAAA71C,GACAg2C,EAAAh2C,EACAA,EAAA,KACAn0D,EAAA,MACI,oBAAAA,IACJmqG,EAAAnqG,EACAA,EAAA,MAEA,OAAAm0D,QAAAnnM,IAAAmnM,GAAA,KAAAj+E,MAAAi+E,EAAAn0D,GAGAvhH,EAAA6zQ,SACA7zQ,EAAA6zQ,OAAA,EACA,KAAAkC,UAIA/1Q,EAAA6V,QAyDA,SAAAkqG,EAAA//G,EAAA0rN,GACA1rN,EAAA6V,QAAA,EACAq+P,EAAAn0J,EAAA//G,GACA0rN,IACA1rN,EAAAoX,SAAwB++F,EAAOivG,SAAAsG,GAAc3rG,EAAAoxE,KAAA,SAAAu6B,IAE7C1rN,EAAAwrN,OAAA,EACAzrG,EAAA/uB,UAAA,CACA,CAjEAilL,CAAA,KAAAj2Q,EAAA0rN,GACA,IACA,EACApgP,OAAAglH,eAAAi8K,EAAA1zR,UAAA,kBAIAg4G,YAAA,EACA6R,IAAA,WACA,YAAA6oH,eAAA/9O,MACA,IAqEAlC,OAAAglH,eAAAi8K,EAAA1zR,UAAA,aAIAg4G,YAAA,EACA6R,IAAA,WACA,YAAAn0H,IAAA,KAAAg9O,gBAGA,KAAAA,eAAA8hD,SACA,EACA5qK,IAAA,SAAA3+G,GAGA,KAAAynO,iBAMA,KAAAA,eAAA8hD,UAAAvpR,EACA,IAEAyoR,EAAA1zR,UAAA80D,QAAAigO,EAAAjgO,QACA4+N,EAAA1zR,UAAAm3R,WAAApC,EAAAqC,UACA1D,EAAA1zR,UAAAw2R,SAAA,SAAAt0Q,EAAA2wN,GACAA,EAAA3wN,EACA,0CC9nBAm7Q,YACA,SAAA94H,EAAAn/H,EAAAxyC,EAAAqY,GAA+N,OAAnLrY,EAC5C,SAAA8qI,GAA+B,IAAA9qI,EAC/B,SAAAue,EAAAxF,GAAqC,qBAAAwF,GAAA,OAAAA,EAAA,OAAAA,EAA+D,IAAAspG,EAAAtpG,EAAAm6G,OAAAgkB,aAAsC,QAAA55I,IAAA+kH,EAAA,CAA0B,IAAAriE,EAAAqiE,EAAAlvD,KAAAp6C,EAAAxF,GAAA,WAA+C,qBAAAysC,EAAA,OAAAA,EAAyC,MAAM,IAANkwE,UAAA,gDAAuE,kBAAA38G,EAAAk4E,OAAAojB,QAAA91F,EAAA,CADpSo+H,CAAA7R,EAAA,UAAuC,wBAAA9qI,EAAAA,EAAAixF,OAAAjxF,EAAA,CAD1By8I,CAAAz8I,MAA2BwyC,EAAkB3yC,OAAAglH,eAAAryE,EAAAxyC,EAAA,CAAkCqY,MAAAA,EAAA+sG,YAAA,EAAAC,cAAA,EAAAE,UAAA,IAAgF/yE,EAAAxyC,GAAAqY,EAAoBm6B,CAAA,CAG/N,IAAA7G,EAAeynG,EAAQ,OACvBs3J,EAAAhyK,OAAA,eACAiyK,EAAAjyK,OAAA,cACAkyK,EAAAlyK,OAAA,SACAmyK,EAAAnyK,OAAA,SACAoyK,EAAApyK,OAAA,eACAqyK,EAAAryK,OAAA,iBACAsyK,EAAAtyK,OAAA,UACA,SAAAuyK,EAAA5yR,EAAA+vB,GACA,OACA/vB,MAAAA,EACA+vB,KAAAA,EAEA,CACA,SAAA8iQ,EAAAC,GACA,IAAArgS,EAAAqgS,EAAAT,GACA,UAAA5/R,EAAA,CACA,IAAAi7C,EAAAolP,EAAAH,GAAA/+K,OAIA,OAAAlmE,IACAolP,EAAAL,GAAA,KACAK,EAAAT,GAAA,KACAS,EAAAR,GAAA,KACA7/R,EAAAmgS,EAAAllP,GAAA,IAEA,CACA,CACA,SAAAqlP,EAAAD,GAGEzgK,EAAOivG,SAAAuxD,EAAAC,EACT,CAYA,IAAAE,EAAAxrS,OAAAuoI,gBAAA,eACAkjK,EAAAzrS,OAAAk9I,gBAmDC40B,EAnDD84H,EAAA,CACA,UAAAn2J,GACA,YAAA02J,EACA,EACA9/R,KAAA,WACA,IAAAyjH,EAAA,KAGA1oG,EAAA,KAAA2kR,GACA,UAAA3kR,EACA,OAAApb,QAAA4nD,OAAAxsC,GAEA,QAAA4kR,GACA,OAAAhgS,QAAAC,QAAAmgS,OAAAnoS,GAAA,IAEA,QAAAkoS,GAAApJ,UAKA,WAAA/2R,SAAA,SAAAC,EAAA2nD,GACQi4E,EAAOivG,UAAA,WACfhrH,EAAAi8K,GACAn4O,EAAAk8D,EAAAi8K,IAEA9/R,EAAAmgS,OAAAnoS,GAAA,GAEA,GACA,IAOA,IACA4H,EADA6gS,EAAA,KAAAT,GAEA,GAAAS,EACA7gS,EAAA,IAAAG,QAlDA,SAAA0gS,EAAAJ,GACA,gBAAArgS,EAAA2nD,GACA84O,EAAA3gS,MAAA,WACAugS,EAAAN,GACA//R,EAAAmgS,OAAAnoS,GAAA,IAGAqoS,EAAAJ,GAAAjgS,EAAA2nD,EACA,GAAKA,EACL,CACA,CAwCA+4O,CAAAD,EAAA,WACM,CAGN,IAAAxlP,EAAA,KAAAilP,GAAA/+K,OACA,UAAAlmE,EACA,OAAAl7C,QAAAC,QAAAmgS,EAAAllP,GAAA,IAEAr7C,EAAA,IAAAG,QAAA,KAAAkgS,GACA,CAEA,OADA,KAAAD,GAAApgS,EACAA,CACA,GACCguH,OAAAwtK,eAAE,WACH,WACA,IAACv0H,EAAA84H,EAAA,qBACD,IAAAx5H,EAAA,KAIA,WAAApmK,SAAA,SAAAC,EAAA2nD,GACAw+G,EAAA+5H,GAAA9oO,QAAA,eAAA5yC,GACAA,EACAmjC,EAAAnjC,GAGAxkB,EAAAmgS,OAAAnoS,GAAA,GACA,GACA,GACA,IAAC2nS,GAAAY,GA4DDjqS,EAAAC,QA3DA,SAAAizI,GACA,IAAAm3J,EACA99H,EAAA9tK,OAAAynB,OAAAgkR,GAAyF35H,EAAzF85H,EAAA,GAAyFT,EAAE,CAC3F3yR,MAAAi8H,EACA/uB,UAAA,IACGosD,EAAA85H,EAAAf,EAAA,CACHryR,MAAA,KACAktG,UAAA,IACGosD,EAAA85H,EAAAd,EAAA,CACHtyR,MAAA,KACAktG,UAAA,IACGosD,EAAA85H,EAAAb,EAAA,CACHvyR,MAAA,KACAktG,UAAA,IACGosD,EAAA85H,EAAAZ,EAAA,CACHxyR,MAAAi8H,EAAAqtJ,eAAAqB,WACAz9K,UAAA,IACGosD,EAAA85H,EAAAV,EAAA,CACH1yR,MAAA,SAAAvN,EAAA2nD,GACA,IAAA1M,EAAA4nH,EAAAq9H,GAAA/+K,OACAlmE,GACA4nH,EAAAm9H,GAAA,KACAn9H,EAAA+8H,GAAA,KACA/8H,EAAAg9H,GAAA,KACA7/R,EAAAmgS,EAAAllP,GAAA,MAEA4nH,EAAA+8H,GAAA5/R,EACA6iK,EAAAg9H,GAAAl4O,EAEA,EACA8yD,UAAA,IACGkmL,IA0BH,OAzBA99H,EAAAm9H,GAAA,KACAn/P,EAAA2oG,GAAA,SAAAhlH,GACA,GAAAA,GAAA,+BAAAA,EAAAo3H,KAAA,CACA,IAAAj0F,EAAAk7G,EAAAg9H,GAUA,OAPA,OAAAl4O,IACAk7G,EAAAm9H,GAAA,KACAn9H,EAAA+8H,GAAA,KACA/8H,EAAAg9H,GAAA,KACAl4O,EAAAnjC,SAEAq+I,EAAAi9H,GAAAt7Q,EAEA,CACA,IAAAxkB,EAAA6iK,EAAA+8H,GACA,OAAA5/R,IACA6iK,EAAAm9H,GAAA,KACAn9H,EAAA+8H,GAAA,KACA/8H,EAAAg9H,GAAA,KACA7/R,EAAAmgS,OAAAnoS,GAAA,KAEA6qK,EAAAk9H,IAAA,CACA,IACAv2J,EAAApxF,GAAA,WAAAkoP,EAAA3nR,KAAA,KAAAkqJ,IACAA,CACA,oDC/HA,SAAA+9H,EAAAlkS,EAAA8nB,GACAq8Q,EAAAnkS,EAAA8nB,GACAmvN,EAAAj3O,EACA,CACA,SAAAi3O,EAAAj3O,GACAA,EAAAs4O,iBAAAt4O,EAAAs4O,eAAA0jD,WACAh8R,EAAAm6R,iBAAAn6R,EAAAm6R,eAAA6B,WACAh8R,EAAAw9D,KAAA,QACA,CAkBA,SAAA2mO,EAAAnkS,EAAA8nB,GACA9nB,EAAAw9D,KAAA,QAAA11C,EACA,CAYAluB,EAAAC,QAAA,CACA6gE,QAzFA,SAAA5yC,EAAA2wN,GACA,IAAAtxH,EAAA,KACAi9K,EAAA,KAAAjK,gBAAA,KAAAA,eAAAC,UACAiK,EAAA,KAAA/rD,gBAAA,KAAAA,eAAA8hD,UACA,OAAAgK,GAAAC,GACA5rD,EACAA,EAAA3wN,GACMA,IACN,KAAAwwN,eAEQ,KAAAA,eAAA4oD,eACR,KAAA5oD,eAAA4oD,cAAA,EACQh+J,EAAOivG,SAAAgyD,EAAA,KAAAr8Q,IAHPo7G,EAAOivG,SAAAgyD,EAAA,KAAAr8Q,IAMf,OAMA,KAAAqyQ,iBACA,KAAAA,eAAAC,WAAA,GAIA,KAAA9hD,iBACA,KAAAA,eAAA8hD,WAAA,GAEA,KAAAgC,SAAAt0Q,GAAA,eAAAA,IACA2wN,GAAA3wN,EACAq/F,EAAAmxH,eAEQnxH,EAAAmxH,eAAA4oD,aAIAh+J,EAAOivG,SAAA8E,EAAA9vH,IAHfA,EAAAmxH,eAAA4oD,cAAA,EACQh+J,EAAOivG,SAAA+xD,EAAA/8K,EAAAr/F,IAHPo7G,EAAOivG,SAAA+xD,EAAA/8K,EAAAr/F,GAOT2wN,GACAv1G,EAAOivG,SAAA8E,EAAA9vH,GACbsxH,EAAA3wN,IAEMo7G,EAAOivG,SAAA8E,EAAA9vH,EAEb,IACA,KACA,EA2CA61K,UAjCA,WACA,KAAA7C,iBACA,KAAAA,eAAAC,WAAA,EACA,KAAAD,eAAAsB,SAAA,EACA,KAAAtB,eAAA5hD,OAAA,EACA,KAAA4hD,eAAAqB,YAAA,GAEA,KAAAljD,iBACA,KAAAA,eAAA8hD,WAAA,EACA,KAAA9hD,eAAAC,OAAA,EACA,KAAAD,eAAA11M,QAAA,EACA,KAAA01M,eAAAmoD,aAAA,EACA,KAAAnoD,eAAAmpD,aAAA,EACA,KAAAnpD,eAAAn0M,UAAA,EACA,KAAAm0M,eAAA4oD,cAAA,EAEA,EAkBAlG,eAdA,SAAAluJ,EAAAhlH,GAOA,IAAAw6Q,EAAAx1J,EAAAqtJ,eACAyD,EAAA9wJ,EAAAwrG,eACAgqD,GAAAA,EAAArG,aAAA2B,GAAAA,EAAA3B,YAAAnvJ,EAAApyE,QAAA5yC,GAAwFglH,EAAAtvE,KAAA,QAAA11C,EACxF,uCCrFA,IAAAw8Q,EAAiC14J,EAAA,OAAA9yG,EAAgCwrQ,2BAYjE,SAAArlK,IAAA,CAoEArlI,EAAAC,QAhEA,SAAA0qS,EAAAz3J,EAAAj2D,EAAAxwE,GACA,uBAAAwwE,EAAA,OAAA0tN,EAAAz3J,EAAA,KAAAj2D,GACAA,IAAAA,EAAA,IACAxwE,EAlBA,SAAAA,GACA,IAAA04O,GAAA,EACA,kBACA,IAAAA,EAAA,CACAA,GAAA,EACA,QAAAloC,EAAAttH,UAAAhvF,OAAA8D,EAAA,IAAAgrB,MAAAwtL,GAAAhuD,EAAA,EAAwEA,EAAAguD,EAAahuD,IACrFxqJ,EAAAwqJ,GAAAt/D,UAAAs/D,GAEAxiJ,EAAAirH,MAAA,KAAAjzH,EALA,CAMA,CACA,CAQA6/M,CAAA73M,GAAA44H,GACA,IAAA24J,EAAA/gN,EAAA+gN,WAAA,IAAA/gN,EAAA+gN,UAAA9qJ,EAAA8qJ,SACA75K,EAAAlnC,EAAAknC,WAAA,IAAAlnC,EAAAknC,UAAA+uB,EAAA/uB,SACAymL,EAAA,WACA13J,EAAA/uB,UAAAugL,GACA,EACAmG,EAAA33J,EAAAwrG,gBAAAxrG,EAAAwrG,eAAAn0M,SACAm6P,EAAA,WACAvgL,GAAA,EACA0mL,GAAA,EACA7M,GAAAvxR,EAAA8qD,KAAA27E,EACA,EACA43J,EAAA53J,EAAAqtJ,gBAAArtJ,EAAAqtJ,eAAAqB,WACA3D,EAAA,WACAD,GAAA,EACA8M,GAAA,EACA3mL,GAAA13G,EAAA8qD,KAAA27E,EACA,EACA36E,EAAA,SAAArqC,GACAzhB,EAAA8qD,KAAA27E,EAAAhlH,EACA,EACA+xQ,EAAA,WACA,IAAA/xQ,EACA,OAAA8vQ,IAAA8M,GACA53J,EAAAqtJ,gBAAArtJ,EAAAqtJ,eAAA5hD,QAAAzwN,EAAA,IAAAw8Q,GACAj+R,EAAA8qD,KAAA27E,EAAAhlH,IAEAi2F,IAAA0mL,GACA33J,EAAAwrG,gBAAAxrG,EAAAwrG,eAAAC,QAAAzwN,EAAA,IAAAw8Q,GACAj+R,EAAA8qD,KAAA27E,EAAAhlH,SAFA,CAIA,EACA68Q,EAAA,WACA73J,EAAA+rG,IAAAn9L,GAAA,SAAA4iP,EACA,EAcA,OAtDA,SAAAxxJ,GACA,OAAAA,EAAA83J,WAAA,oBAAA93J,EAAA+3J,KACA,CAuCAC,CAAAh4J,IACAA,EAAApxF,GAAA,WAAA4iP,GACAxxJ,EAAApxF,GAAA,QAAAm+O,GACA/sJ,EAAA+rG,IAAA8rD,IAAgC73J,EAAApxF,GAAA,UAAAipP,IAC5B5mL,IAAA+uB,EAAAwrG,iBAEJxrG,EAAApxF,GAAA,MAAA8oP,GACA13J,EAAApxF,GAAA,QAAA8oP,IAEA13J,EAAApxF,GAAA,MAAAm8O,GACA/qJ,EAAApxF,GAAA,SAAA4iP,IACA,IAAAznN,EAAAp4D,OAAAquH,EAAApxF,GAAA,QAAAyW,GACA26E,EAAApxF,GAAA,QAAAm+O,GACA,WACA/sJ,EAAA2oG,eAAA,WAAA6oD,GACAxxJ,EAAA2oG,eAAA,QAAAokD,GACA/sJ,EAAA2oG,eAAA,UAAAkvD,GACA73J,EAAA+rG,KAAA/rG,EAAA+rG,IAAApD,eAAA,SAAA6oD,GACAxxJ,EAAA2oG,eAAA,MAAA+uD,GACA13J,EAAA2oG,eAAA,QAAA+uD,GACA13J,EAAA2oG,eAAA,SAAA6oD,GACAxxJ,EAAA2oG,eAAA,MAAAoiD,GACA/qJ,EAAA2oG,eAAA,QAAAtjL,GACA26E,EAAA2oG,eAAA,QAAAokD,EACA,CACA,qBCpFAjgS,EAAAC,QAAA,WACA,UAAAutD,MAAA,gDACA,sCCGA,IAAAm9O,EASAhvE,EAAqB3pF,EAAA,OAAA9yG,EACrB88L,EAAAL,EAAAK,iBACAuqE,EAAA5qE,EAAA4qE,qBACA,SAAAlhK,EAAAn3G,GAEA,GAAAA,EAAA,MAAAA,CACA,CA+BA,SAAAqpC,EAAA0J,GACAA,GACA,CACA,SAAA05J,EAAAvzJ,EAAAz5C,GACA,OAAAy5C,EAAAuzJ,KAAAhtM,EACA,CA6BA3tB,EAAAC,QAvBA,WACA,QAAAg9M,EAAAttH,UAAAhvF,OAAA89Q,EAAA,IAAAhvP,MAAAwtL,GAAAhuD,EAAA,EAAyEA,EAAAguD,EAAahuD,IACtFwvH,EAAAxvH,GAAAt/D,UAAAs/D,GAEA,IAKApqI,EALApY,EATA,SAAAgyQ,GACA,OAAAA,EAAA99Q,OACA,oBAAA89Q,EAAAA,EAAA99Q,OAAA,GAAA0kI,EACAo5I,EAAA/uP,MAFA21G,CAGA,CAKA8lK,CAAA1sB,GAEA,GADAhvP,MAAA44C,QAAAo2M,EAAA,MAAAA,EAAAA,EAAA,IACAA,EAAA99Q,OAAA,EACA,UAAAq7N,EAAA,WAGA,IAAAovE,EAAA3sB,EAAAnyN,KAAA,SAAA4mF,EAAAxyI,GACA,IAAAmhS,EAAAnhS,EAAA+9Q,EAAA99Q,OAAA,EAEA,OAnDA,SAAAuyI,EAAA2uJ,EAAAkF,EAAAt6R,GACAA,EAnBA,SAAAA,GACA,IAAA04O,GAAA,EACA,kBACAA,IACAA,GAAA,EACA14O,EAAAirH,WAAA,EAAA/nC,WACA,CACA,CAYA20H,CAAA73M,GACA,IAAAksR,GAAA,EACAzlJ,EAAApxF,GAAA,oBACA62O,GAAA,CACA,SACAj3R,IAAAipS,IAAAA,EAA+B34J,EAAQ,QACvC24J,EAAAz3J,EAAA,CACA8qJ,SAAA6D,EACA19K,SAAA4iL,IACK,SAAF74Q,GACH,GAAAA,EAAA,OAAAzhB,EAAAyhB,GACAyqQ,GAAA,EACAlsR,GACA,IACA,IAAA+zR,GAAA,EACA,gBAAAtyQ,GACA,IAAAyqQ,IACA6H,EAIA,OAHAA,GAAA,EAtBA,SAAAttJ,GACA,OAAAA,EAAA83J,WAAA,oBAAA93J,EAAA+3J,KACA,CAuBAC,CAAAh4J,GAAAA,EAAA+3J,QACA,oBAAA/3J,EAAApyE,QAAAoyE,EAAApyE,eACAr0D,EAAAyhB,GAAA,IAAAq4Q,EAAA,QACA,CACA,CAyBA8E,CAAAn4J,EAAA2uJ,EADAnhS,EAAA,GACA,SAAAwtB,GACArJ,IAAAA,EAAAqJ,GACAA,GAAAk9Q,EAAAzsS,QAAA44D,GACAsqO,IACAuJ,EAAAzsS,QAAA44D,GACA9qD,EAAAoY,GACA,GACA,IACA,OAAA45P,EAAAjwK,OAAAmsH,EACA,sCClFA,IAAA2wE,EAA4Bt5J,EAAA,OAAA9yG,EAAgCosQ,sBAiB5DtrS,EAAAC,QAAA,CACA+gS,iBAdA,SAAA7tQ,EAAA5yB,EAAAgrS,EAAAjK,GACA,IAAAkK,EAJA,SAAAjrS,EAAA+gS,EAAAiK,GACA,aAAAhrS,EAAA8/R,cAAA9/R,EAAA8/R,cAAAiB,EAAA/gS,EAAAgrS,GAAA,IACA,CAEAE,CAAAlrS,EAAA+gS,EAAAiK,GACA,SAAAC,EAAA,CACA,IAAA93K,SAAA83K,IAAA7iS,KAAAwC,MAAAqgS,KAAAA,GAAAA,EAAA,EAEA,UAAAF,EADAhK,EAAAiK,EAAA,gBACAC,GAEA,OAAA7iS,KAAAwC,MAAAqgS,EACA,CAGA,OAAAr4Q,EAAAouQ,WAAA,QACA,0BClBAvhS,EAAAC,QAAA+xI,EAAA,OAAAk0E,iDCyBA,IAAA/iF,EAAa6O,EAAA,OAAA7O,OAGbkZ,EAAAlZ,EAAAkZ,YAAA,SAAA3H,GAEA,QADAA,EAAA,GAAAA,IACAA,EAAArhI,eACA,qIACA,SACA,QACA,SAEA,EA0CA,SAAA6kQ,EAAAxjI,GAEA,IAAAs8B,EACA,OAFA,KAAAt8B,SAXA,SAAAod,GACA,IAAA45I,EA/BA,SAAA55I,GACA,IAAAA,EAAA,aAEA,IADA,IAAA65I,IAEA,OAAA75I,GACA,WACA,YACA,aACA,WACA,YACA,cACA,eACA,gBACA,aACA,aACA,eACA,aACA,YACA,UACA,OAAAA,EACA,QACA,GAAA65I,EAAA,OACA75I,GAAA,GAAAA,GAAAz+I,cACAs4R,GAAA,EAGA,CAKAC,CAAA95I,GACA,qBAAA45I,IAAAvoK,EAAAkZ,aAAAA,IAAAA,EAAAyV,IAAA,UAAAtkG,MAAA,qBAAAskG,GACA,OAAA45I,GAAA55I,CACA,CAOA+5I,CAAAn3J,GAEA,KAAAA,UACA,cACA,KAAAjtH,KAAAqkR,EACA,KAAAprR,IAAAqrR,EACA/6H,EAAA,EACA,MACA,WACA,KAAAg7H,SAAAC,EACAj7H,EAAA,EACA,MACA,aACA,KAAAvpJ,KAAAykR,EACA,KAAAxrR,IAAAyrR,EACAn7H,EAAA,EACA,MACA,QAGA,OAFA,KAAApmD,MAAAwhL,OACA,KAAA1rR,IAAA2rR,GAGA,KAAAC,SAAA,EACA,KAAAC,UAAA,EACA,KAAArmG,SAAA/iE,EAAAC,YAAA4tC,EACA,CAmCA,SAAAw7H,EAAA73J,GACA,OAAAA,GAAA,MAA6BA,GAAA,QAAsCA,GAAA,SAAsCA,GAAA,SACzGA,GAAA,WACA,CA0DA,SAAAs3J,EAAA33J,GACA,IAAAh6G,EAAA,KAAAiyQ,UAAA,KAAAD,SACAh7M,EAtBA,SAAAlrF,EAAAkuI,EAAAh6G,GACA,cAAAg6G,EAAA,IAEA,OADAluI,EAAAkmS,SAAA,EACA,SAEA,GAAAlmS,EAAAkmS,SAAA,GAAAh4J,EAAA3zI,OAAA,GACA,cAAA2zI,EAAA,IAEA,OADAluI,EAAAkmS,SAAA,EACA,SAEA,GAAAlmS,EAAAkmS,SAAA,GAAAh4J,EAAA3zI,OAAA,GACA,WAAA2zI,EAAA,IAEA,OADAluI,EAAAkmS,SAAA,EACA,QAGA,CACA,CAKAG,CAAA,KAAAn4J,GACA,YAAA5yI,IAAA4vF,EAAAA,EACA,KAAAg7M,UAAAh4J,EAAA3zI,QACA2zI,EAAA9/H,KAAA,KAAA0xL,SAAA5rK,EAAA,OAAAgyQ,UACA,KAAApmG,SAAAtiJ,SAAA,KAAA8wF,SAAA,OAAA63J,aAEAj4J,EAAA9/H,KAAA,KAAA0xL,SAAA5rK,EAAA,EAAAg6G,EAAA3zI,aACA,KAAA2rS,UAAAh4J,EAAA3zI,QACA,CA0BA,SAAAmrS,EAAAx3J,EAAA5zI,GACA,IAAA4zI,EAAA3zI,OAAAD,GAAA,OACA,IAAA4wF,EAAAgjD,EAAA1wF,SAAA,UAAAljD,GACA,GAAA4wF,EAAA,CACA,IAAAxwD,EAAAwwD,EAAA/jD,WAAA+jD,EAAA3wF,OAAA,GACA,GAAAmgC,GAAA,OAAAA,GAAA,MAKA,OAJA,KAAAwrQ,SAAA,EACA,KAAAC,UAAA,EACA,KAAArmG,SAAA,GAAA5xD,EAAAA,EAAA3zI,OAAA,GACA,KAAAulM,SAAA,GAAA5xD,EAAAA,EAAA3zI,OAAA,GACA2wF,EAAA/+C,MAAA,KAEA,CACA,OAAA++C,CACA,CAIA,OAHA,KAAAg7M,SAAA,EACA,KAAAC,UAAA,EACA,KAAArmG,SAAA,GAAA5xD,EAAAA,EAAA3zI,OAAA,GACA2zI,EAAA1wF,SAAA,UAAAljD,EAAA4zI,EAAA3zI,OAAA,EACA,CAIA,SAAAorS,EAAAz3J,GACA,IAAAhjD,EAAAgjD,GAAAA,EAAA3zI,OAAA,KAAAiqH,MAAA0pB,GAAA,GACA,QAAAg4J,SAAA,CACA,IAAA5rR,EAAA,KAAA6rR,UAAA,KAAAD,SACA,OAAAh7M,EAAA,KAAA40G,SAAAtiJ,SAAA,YAAAljC,EACA,CACA,OAAA4wE,CACA,CAEA,SAAA46M,EAAA53J,EAAA5zI,GACA,IAAAy7B,GAAAm4G,EAAA3zI,OAAAD,GAAA,EACA,WAAAy7B,EAAAm4G,EAAA1wF,SAAA,SAAAljD,IACA,KAAA4rS,SAAA,EAAAnwQ,EACA,KAAAowQ,UAAA,EACA,IAAApwQ,EACA,KAAA+pK,SAAA,GAAA5xD,EAAAA,EAAA3zI,OAAA,IAEA,KAAAulM,SAAA,GAAA5xD,EAAAA,EAAA3zI,OAAA,GACA,KAAAulM,SAAA,GAAA5xD,EAAAA,EAAA3zI,OAAA,IAEA2zI,EAAA1wF,SAAA,SAAAljD,EAAA4zI,EAAA3zI,OAAAw7B,GACA,CAEA,SAAAgwQ,EAAA73J,GACA,IAAAhjD,EAAAgjD,GAAAA,EAAA3zI,OAAA,KAAAiqH,MAAA0pB,GAAA,GACA,YAAAg4J,SAAAh7M,EAAA,KAAA40G,SAAAtiJ,SAAA,kBAAA0oP,UACAh7M,CACA,CAGA,SAAA86M,EAAA93J,GACA,OAAAA,EAAA1wF,SAAA,KAAA8wF,SACA,CAEA,SAAA23J,EAAA/3J,GACA,OAAAA,GAAAA,EAAA3zI,OAAA,KAAAiqH,MAAA0pB,GAAA,EACA,CA1NAr0I,EAAAm/B,EAAqB84O,EA6BrBA,EAAAlsQ,UAAA4+G,MAAA,SAAA0pB,GACA,OAAAA,EAAA3zI,OAAA,SACA,IAAA2wF,EACA5wF,EACA,QAAA4rS,SAAA,CAEA,QAAA5qS,KADA4vF,EAAA,KAAA06M,SAAA13J,IACA,SACA5zI,EAAA,KAAA4rS,SACA,KAAAA,SAAA,CACA,MACA5rS,EAAA,EAEA,OAAAA,EAAA4zI,EAAA3zI,OAAA2wF,EAAAA,EAAA,KAAA7pE,KAAA6sH,EAAA5zI,GAAA,KAAA+mB,KAAA6sH,EAAA5zI,GACA4wF,GAAA,EACA,EAEA4mL,EAAAlsQ,UAAA0U,IAwGA,SAAA4zH,GACA,IAAAhjD,EAAAgjD,GAAAA,EAAA3zI,OAAA,KAAAiqH,MAAA0pB,GAAA,GACA,YAAAg4J,SAAAh7M,EAAA,SACAA,CACA,EAzGA4mL,EAAAlsQ,UAAAyb,KA0FA,SAAA6sH,EAAA5zI,GACA,IAAAm1C,EArEA,SAAAzvC,EAAAkuI,EAAA5zI,GACA,IAAAwN,EAAAomI,EAAA3zI,OAAA,EACA,GAAAuN,EAAAxN,EAAA,SACA,IAAAswK,EAAAw7H,EAAAl4J,EAAApmI,IACA,OAAA8iK,GAAA,GACAA,EAAA,IAAA5qK,EAAAkmS,SAAAt7H,EAAA,GACAA,KAEA9iK,EAAAxN,IAAA,IAAAswK,EAAA,GACAA,EAAAw7H,EAAAl4J,EAAApmI,MACA,GACA8iK,EAAA,IAAA5qK,EAAAkmS,SAAAt7H,EAAA,GACAA,KAEA9iK,EAAAxN,IAAA,IAAAswK,EAAA,GACAA,EAAAw7H,EAAAl4J,EAAApmI,MACA,GACA8iK,EAAA,IACA,IAAAA,EAAAA,EAAA,EAA2B5qK,EAAAkmS,SAAAt7H,EAAA,GAE3BA,GAEA,CACA,CA8CA07H,CAAA,KAAAp4J,EAAA5zI,GACA,SAAA4rS,SAAA,OAAAh4J,EAAA1wF,SAAA,OAAAljD,GACA,KAAA6rS,UAAA12P,EACA,IAAAn1B,EAAA4zH,EAAA3zI,QAAAk1C,EAAA,KAAAy2P,UAEA,OADAh4J,EAAA9/H,KAAA,KAAA0xL,SAAA,EAAAxlL,GACA4zH,EAAA1wF,SAAA,OAAAljD,EAAAggB,EACA,EA9FAw3P,EAAAlsQ,UAAAggS,SAAA,SAAA13J,GACA,QAAAg4J,UAAAh4J,EAAA3zI,OAEA,OADA2zI,EAAA9/H,KAAA,KAAA0xL,SAAA,KAAAqmG,UAAA,KAAAD,SAAA,OAAAA,UACA,KAAApmG,SAAAtiJ,SAAA,KAAA8wF,SAAA,OAAA63J,WAEAj4J,EAAA9/H,KAAA,KAAA0xL,SAAA,KAAAqmG,UAAA,KAAAD,SAAA,EAAAh4J,EAAA3zI,QACA,KAAA2rS,UAAAh4J,EAAA3zI,MACA,oBCvIA,IAAAgsS,EAAA,EACAC,GAAA,EAEA,SAAAC,IACA,KAAAtgL,MAAA,IAAAq8B,YAAA,IACA,KAAAkkJ,MAAA,IAAAlkJ,YAAA,IACA,CAEA,SAAAmkJ,EAAA7kR,EAAAzT,GACA,KAAAyT,OAAAA,EACA,KAAA8kR,YAAA,EACA,KAAAjyK,IAAA,EACA,KAAAkyK,SAAA,EAEA,KAAAx4R,KAAAA,EACA,KAAAy4R,QAAA,EAEA,KAAA3Y,MAAA,IAAAsY,EACA,KAAArY,MAAA,IAAAqY,CACA,CAMA,IAAAM,EAAA,IAAAN,EACAO,EAAA,IAAAP,EAGAQ,EAAA,IAAAz1O,WAAA,IACA01O,EAAA,IAAA1kJ,YAAA,IAGA2kJ,EAAA,IAAA31O,WAAA,IACA41O,EAAA,IAAA5kJ,YAAA,IAGA6kJ,EAAA,IAAA71O,WAAA,CACA,mBACA,oBACA,UAIA81O,EAAA,IAAAb,EACAc,EAAA,IAAA/1O,WAAA,KAOA,SAAAg2O,EAAAvpP,EAAAgzF,EAAAjpG,EAAAg3B,GACA,IAAA1kE,EAAA2vE,EAGA,IAAA3vE,EAAA,EAAcA,EAAA0tC,IAAW1tC,EAAA2jD,EAAA3jD,GAAA,EACzB,IAAAA,EAAA,EAAcA,EAAA,GAAA0tC,IAAgB1tC,EAAA2jD,EAAA3jD,EAAA0tC,GAAA1tC,EAAA0tC,EAAA,EAG9B,IAAAiiC,EAAAjL,EAAA1kE,EAAA,EAA2BA,EAAA,KAAQA,EACnC22I,EAAA32I,GAAA2vE,EACAA,GAAA,GAAAhsB,EAAA3jD,EAEA,CA2BA,IAAA+wR,EAAA,IAAA7oI,YAAA,IAEA,SAAAilJ,EAAA1oR,EAAAwoR,EAAA1+B,EAAAxjQ,GACA,IAAA/K,EAAA2vE,EAGA,IAAA3vE,EAAA,EAAcA,EAAA,KAAQA,EAAAykB,EAAAonG,MAAA7rH,GAAA,EAGtB,IAAAA,EAAA,EAAcA,EAAA+K,IAAS/K,EAAAykB,EAAAonG,MAAAohL,EAAA1+B,EAAAvuQ,MAKvB,IAHAykB,EAAAonG,MAAA,KAGAl8C,EAAA,EAAA3vE,EAAA,EAAuBA,EAAA,KAAQA,EAC/B+wR,EAAA/wR,GAAA2vE,EACAA,GAAAlrD,EAAAonG,MAAA7rH,GAIA,IAAAA,EAAA,EAAcA,EAAA+K,IAAS/K,EACvBitS,EAAA1+B,EAAAvuQ,KAAAykB,EAAA2nR,MAAArb,EAAAkc,EAAA1+B,EAAAvuQ,OAAAA,EAEA,CAOA,SAAAotS,EAAAvlR,GAEAA,EAAA0kR,aAEA1kR,EAAAwyG,IAAAxyG,EAAAL,OAAAK,EAAAykR,eACAzkR,EAAA0kR,SAAA,GAIA,IAAAc,EAAA,EAAAxlR,EAAAwyG,IAGA,OAFAxyG,EAAAwyG,OAAA,EAEAgzK,CACA,CAGA,SAAAC,EAAAzlR,EAAA9c,EAAA4rI,GACA,IAAA5rI,EACA,OAAA4rI,EAEA,KAAA9uH,EAAA0kR,SAAA,IACA1kR,EAAAwyG,KAAAxyG,EAAAL,OAAAK,EAAAykR,gBAAAzkR,EAAA0kR,SACA1kR,EAAA0kR,UAAA,EAGA,IAAAv6K,EAAAnqG,EAAAwyG,IAAA,WAAAtvH,EAGA,OAFA8c,EAAAwyG,OAAAtvH,EACA8c,EAAA0kR,UAAAxhS,EACAinH,EAAA2kB,CACA,CAGA,SAAA42J,EAAA1lR,EAAApD,GACA,KAAAoD,EAAA0kR,SAAA,IACA1kR,EAAAwyG,KAAAxyG,EAAAL,OAAAK,EAAAykR,gBAAAzkR,EAAA0kR,SACA1kR,EAAA0kR,UAAA,EAGA,IAAA58N,EAAA,EAAAm5I,EAAA,EAAAhoL,EAAA,EACAu5F,EAAAxyG,EAAAwyG,IAGA,GACAyuF,EAAA,EAAAA,GAAA,EAAAzuF,GACAA,KAAA,IACAv5F,EAEA6uC,GAAAlrD,EAAAonG,MAAA/qF,GACAgoL,GAAArkM,EAAAonG,MAAA/qF,SACIgoL,GAAA,GAKJ,OAHAjhM,EAAAwyG,IAAAA,EACAxyG,EAAA0kR,UAAAzrQ,EAEArc,EAAA2nR,MAAAz8N,EAAAm5I,EACA,CAGA,SAAA0kF,EAAA3lR,EAAA4N,EAAAm6J,GACA,IAAA69G,EAAAC,EAAAC,EACA3tS,EAAA+K,EAAA9K,EAWA,IARAwtS,EAAAH,EAAAzlR,EAAA,OAGA6lR,EAAAJ,EAAAzlR,EAAA,KAGA8lR,EAAAL,EAAAzlR,EAAA,KAEA7nB,EAAA,EAAcA,EAAA,KAAQA,EAAAitS,EAAAjtS,GAAA,EAGtB,IAAAA,EAAA,EAAcA,EAAA2tS,IAAW3tS,EAAA,CAEzB,IAAA4tS,EAAAN,EAAAzlR,EAAA,KACAolR,EAAAF,EAAA/sS,IAAA4tS,CACA,CAMA,IAHAT,EAAAH,EAAAC,EAAA,MAGAliS,EAAA,EAAgBA,EAAA0iS,EAAAC,GAAmB,CACnC,IAAA5oJ,EAAAyoJ,EAAA1lR,EAAAmlR,GAEA,OAAAloJ,GACA,QAEA,IAAAjtE,EAAAo1N,EAAAliS,EAAA,GACA,IAAA9K,EAAAqtS,EAAAzlR,EAAA,KAA+C5nB,IAAQA,EACvDgtS,EAAAliS,KAAA8sE,EAEA,MACA,QAEA,IAAA53E,EAAAqtS,EAAAzlR,EAAA,KAA+C5nB,IAAQA,EACvDgtS,EAAAliS,KAAA,EAEA,MACA,QAEA,IAAA9K,EAAAqtS,EAAAzlR,EAAA,MAAgD5nB,IAAQA,EACxDgtS,EAAAliS,KAAA,EAEA,MACA,QAEAkiS,EAAAliS,KAAA+5I,EAGA,CAGAqoJ,EAAA13Q,EAAAw3Q,EAAA,EAAAQ,GACAN,EAAAv9G,EAAAq9G,EAAAQ,EAAAC,EACA,CAOA,SAAAG,EAAAhmR,EAAA4N,EAAAm6J,GACA,QACA,IAUA3vL,EAAAgpG,EAAA8nL,EACA/wR,EAXA8kJ,EAAAyoJ,EAAA1lR,EAAA4N,GAGA,SAAAqvH,EACA,OAAAmnJ,EAGA,GAAAnnJ,EAAA,IACAj9H,EAAA9T,KAAA8T,EAAA2kR,WAAA1nJ,OAgBA,IARA7kJ,EAAAqtS,EAAAzlR,EAAA8kR,EAHA7nJ,GAAA,KAGA8nJ,EAAA9nJ,IAEA77C,EAAAskM,EAAA1lR,EAAA+nK,GAMA5vL,EAHA+wR,EAAAlpQ,EAAA2kR,QAAAc,EAAAzlR,EAAAglR,EAAA5jM,GAAA6jM,EAAA7jM,IAGqBjpG,EAAA+wR,EAAA9wR,IAAmBD,EACxC6nB,EAAA9T,KAAA8T,EAAA2kR,WAAA3kR,EAAA9T,KAAA/T,EAGA,CACA,CAGA,SAAA8tS,EAAAjmR,GAKA,IAJA,IAAA5nB,EACAD,EAGA6nB,EAAA0kR,SAAA,GACA1kR,EAAAykR,cACAzkR,EAAA0kR,UAAA,EAYA,IAPAtsS,EAAA,KADAA,EAAA4nB,EAAAL,OAAAK,EAAAykR,YAAA,IACAzkR,EAAAL,OAAAK,EAAAykR,iBAOA,QAHA,IADAzkR,EAAAL,OAAAK,EAAAykR,YAAA,GACAzkR,EAAAL,OAAAK,EAAAykR,YAAA,KAIA,OAAAJ,EAKA,IAHArkR,EAAAykR,aAAA,EAGAtsS,EAAAC,EAAmBD,IAAGA,EACtB6nB,EAAA9T,KAAA8T,EAAA2kR,WAAA3kR,EAAAL,OAAAK,EAAAykR,eAKA,OAFAzkR,EAAA0kR,SAAA,EAEAN,CACA,EApPA,SAAAx2Q,EAAAm6J,GACA,IAAA5vL,EAGA,IAAAA,EAAA,EAAcA,EAAA,IAAOA,EAAAy1B,EAAAo2F,MAAA7rH,GAAA,EAMrB,IAJAy1B,EAAAo2F,MAAA,MACAp2F,EAAAo2F,MAAA,OACAp2F,EAAAo2F,MAAA,OAEA7rH,EAAA,EAAcA,EAAA,KAAQA,EAAAy1B,EAAA22Q,MAAApsS,GAAA,IAAAA,EACtB,IAAAA,EAAA,EAAcA,EAAA,MAASA,EAAAy1B,EAAA22Q,MAAA,GAAApsS,GAAAA,EACvB,IAAAA,EAAA,EAAcA,EAAA,IAAOA,EAAAy1B,EAAA22Q,MAAA,IAAApsS,GAAA,IAAAA,EACrB,IAAAA,EAAA,EAAcA,EAAA,MAASA,EAAAy1B,EAAA22Q,MAAA,IAAApsS,GAAA,IAAAA,EAGvB,IAAAA,EAAA,EAAcA,EAAA,IAAOA,EAAA4vL,EAAA/jE,MAAA7rH,GAAA,EAIrB,IAFA4vL,EAAA/jE,MAAA,MAEA7rH,EAAA,EAAcA,EAAA,KAAQA,EAAA4vL,EAAAw8G,MAAApsS,GAAAA,CACtB,CAoRA+tS,CAAAtB,EAAAC,GAGAQ,EAAAP,EAAAC,EAAA,KACAM,EAAAL,EAAAC,EAAA,KAGAH,EAAA,MACAC,EAAA,QAEAttS,EAAAC,QA5DA,SAAAioB,EAAAzT,GACA,IACAi6R,EAAAtqP,EADA77B,EAAA,IAAAwkR,EAAA7kR,EAAAzT,GAGA,GAQA,OANAi6R,EAAAZ,EAAAvlR,GAGAylR,EAAAzlR,EAAA,MAIA,OAEA67B,EAAAoqP,EAAAjmR,GACA,MACA,OAEA67B,EAAAmqP,EAAAhmR,EAAA4kR,EAAAC,GACA,MACA,OAEAc,EAAA3lR,EAAAA,EAAAgsQ,MAAAhsQ,EAAAisQ,OACApwO,EAAAmqP,EAAAhmR,EAAAA,EAAAgsQ,MAAAhsQ,EAAAisQ,OACA,MACA,QACApwO,EAAAwoP,EAGA,GAAAxoP,IAAAuoP,EACA,UAAAn/O,MAAA,aAEA,QAAIkhP,GAEJ,OAAAnmR,EAAA2kR,QAAA3kR,EAAA9T,KAAA9T,OACA,oBAAA4nB,EAAA9T,KAAA89B,MACAhqB,EAAA9T,KAAA89B,MAAA,EAAAhqB,EAAA2kR,SAEA3kR,EAAA9T,KAAAgtI,SAAA,EAAAl5H,EAAA2kR,SAGA3kR,EAAA9T,IACA,yBC7SA,SAAAk6R,EAAAxrS,GAEA,IACA,IAAS6uI,EAAAhxG,EAAM4tQ,aAAA,QACf,CAAI,MAAAnkM,GACJ,QACA,CACA,IAAAioB,EAAYsf,EAAAhxG,EAAM4tQ,aAAAzrS,GAClB,aAAAuvH,GACA,SAAA7iC,OAAA6iC,GAAAr/G,aACA,CA7DArT,EAAAC,QAoBA,SAAAghE,EAAAl9D,GACA,GAAA4qS,EAAA,iBACA,OAAA1tO,EAGA,IAAAw7J,GAAA,EAeA,OAdA,WACA,IAAAA,EAAA,CACA,GAAAkyE,EAAA,oBACA,UAAAnhP,MAAAzpD,GACQ4qS,EAAA,oBACR7yR,QAAA+yR,MAAA9qS,GAEA+X,QAAAuQ,KAAAtoB,GAEA04N,GAAA,CACA,CACA,OAAAx7J,EAAAy2D,MAAA,KAAA/nC,UACA,CAGA,qBC9CA3vF,EAAAC,QAAA,SAAAypI,GACA,OAAAA,GAAA,kBAAAA,GACA,oBAAAA,EAAAl1H,MACA,oBAAAk1H,EAAArgD,MACA,oBAAAqgD,EAAAqL,SACA,sCCAA,IAAA+5J,EAAwB98J,EAAQ,OAChC+8J,EAA0B/8J,EAAQ,OAClCmvI,EAAsBnvI,EAAQ,OAC9B3Z,EAAmB2Z,EAAQ,OAE3B,SAAA4X,EAAA7oH,GACA,OAAAA,EAAAw2B,KAAAl1C,KAAA0e,EACA,CAEA,IAAAiuQ,EAAA,qBAAA/tJ,OACAguJ,EAAA,qBAAA33K,OAEA43K,EAAAtlJ,EAAAnrJ,OAAAuN,UAAA43C,UAEAurP,EAAAvlJ,EAAA32C,OAAAjnG,UAAA23H,SACAyrK,EAAAxlJ,EAAA/5D,OAAA7jF,UAAA23H,SACA0rK,EAAAzlJ,EAAAxX,QAAApmI,UAAA23H,SAEA,GAAAqrK,EACA,IAAAM,EAAA1lJ,EAAA3I,OAAAj1I,UAAA23H,SAGA,GAAAsrK,EACA,IAAAM,EAAA3lJ,EAAAtyB,OAAAtrH,UAAA23H,SAGA,SAAA6rK,EAAAv4R,EAAAw4R,GACA,qBAAAx4R,EACA,SAEA,IAEA,OADAw4R,EAAAx4R,IACA,CACA,CAAI,MAAAvH,GACJ,QACA,CACA,CA4FA,SAAAggS,EAAAz4R,GACA,uBAAAi4R,EAAAj4R,EACA,CAiBA,SAAA04R,EAAA14R,GACA,uBAAAi4R,EAAAj4R,EACA,CAgBA,SAAA24R,EAAA34R,GACA,2BAAAi4R,EAAAj4R,EACA,CAgBA,SAAA44R,EAAA54R,GACA,2BAAAi4R,EAAAj4R,EACA,CAUA,SAAA64R,EAAA74R,GACA,+BAAAi4R,EAAAj4R,EACA,CAKA,SAAAwjP,EAAAxjP,GACA,2BAAAo/C,cAIAy5O,EAAAC,QACAD,EAAA74R,GACAA,aAAAo/C,YACA,CAGA,SAAA25O,EAAA/4R,GACA,4BAAAi4R,EAAAj4R,EACA,CAMA,SAAAg5R,EAAAh5R,GACA,2BAAAs/C,WAIAy5O,EAAAD,QACAC,EAAA/4R,GACAA,aAAAs/C,SACA,CA/LAt2D,EAAA6uS,kBAAyBA,EACzB7uS,EAAA8uS,oBAA2BA,EAC3B9uS,EAAAo4H,aAAoBA,EAkBpBp4H,EAAA+sD,UAdA,SAAA7vC,GACA,MAEA,qBAAA1T,SACA0T,aAAA1T,SAGA,OAAA0T,GACA,kBAAAA,GACA,oBAAAA,EAAA3T,MACA,oBAAA2T,EAAA+1C,KAGA,EAaAjzD,EAAAglO,kBAVA,SAAAhuN,GACA,2BAAAo/C,aAAAA,YAAAkmF,OACAlmF,YAAAkmF,OAAAtlI,GAIAohH,EAAAphH,IACAg5R,EAAAh5R,EAEA,EAOAhX,EAAAiwS,aAHA,SAAAj5R,GACA,qBAAAkqQ,EAAAlqQ,EACA,EAMAhX,EAAAkwS,oBAHA,SAAAl5R,GACA,4BAAAkqQ,EAAAlqQ,EACA,EAMAhX,EAAAmwS,cAHA,SAAAn5R,GACA,sBAAAkqQ,EAAAlqQ,EACA,EAMAhX,EAAAowS,cAHA,SAAAp5R,GACA,sBAAAkqQ,EAAAlqQ,EACA,EAMAhX,EAAAqwS,YAHA,SAAAr5R,GACA,oBAAAkqQ,EAAAlqQ,EACA,EAMAhX,EAAAswS,aAHA,SAAAt5R,GACA,qBAAAkqQ,EAAAlqQ,EACA,EAMAhX,EAAAuwS,aAHA,SAAAv5R,GACA,qBAAAkqQ,EAAAlqQ,EACA,EAMAhX,EAAAylO,eAHA,SAAAzuN,GACA,uBAAAkqQ,EAAAlqQ,EACA,EAMAhX,EAAA0lO,eAHA,SAAA1uN,GACA,uBAAAkqQ,EAAAlqQ,EACA,EAMAhX,EAAAwwS,gBAHA,SAAAx5R,GACA,wBAAAkqQ,EAAAlqQ,EACA,EAMAhX,EAAAywS,iBAHA,SAAAz5R,GACA,yBAAAkqQ,EAAAlqQ,EACA,EAMAy4R,EAAAK,QACA,qBAAA35K,KACAs5K,EAAA,IAAAt5K,KAYAn2H,EAAAk6H,MATA,SAAAljH,GACA,2BAAAm/G,MAIAs5K,EAAAK,QACAL,EAAAz4R,GACAA,aAAAm/G,IACA,EAMAu5K,EAAAI,QACA,qBAAAp5K,KACAg5K,EAAA,IAAAh5K,KAWA12H,EAAAo6H,MATA,SAAApjH,GACA,2BAAA0/G,MAIAg5K,EAAAI,QACAJ,EAAA14R,GACAA,aAAA0/G,IACA,EAMAi5K,EAAAG,QACA,qBAAAx4K,SACAq4K,EAAA,IAAAr4K,SAWAt3H,EAAA0wS,UATA,SAAA15R,GACA,2BAAAsgH,UAIAq4K,EAAAG,QACAH,EAAA34R,GACAA,aAAAsgH,QACA,EAMAs4K,EAAAE,QACA,qBAAAl+B,SACAg+B,EAAA,IAAAh+B,SAKA5xQ,EAAA2wS,UAHA,SAAA35R,GACA,OAAA44R,EAAA54R,EACA,EAMA64R,EAAAC,QACA,qBAAA15O,aACAy5O,EAAA,IAAAz5O,aAWAp2D,EAAAw6P,cAAqBA,EAKrBu1C,EAAAD,QACA,qBAAA15O,aACA,qBAAAE,UACAy5O,EAAA,IAAAz5O,SAAA,IAAAF,YAAA,SAWAp2D,EAAAgwS,WAAkBA,EAGlB,IAAAY,EAAA,qBAAAh0J,kBAAAA,uBAAAn7I,EACA,SAAAovS,EAAA75R,GACA,qCAAAi4R,EAAAj4R,EACA,CACA,SAAA85R,EAAA95R,GACA,2BAAA45R,IAIA,qBAAAC,EAAAf,UACAe,EAAAf,QAAAe,EAAA,IAAAD,IAGAC,EAAAf,QACAe,EAAA75R,GACAA,aAAA45R,EACA,CA4BA,SAAAxrE,EAAApuN,GACA,OAAAu4R,EAAAv4R,EAAAk4R,EACA,CAGA,SAAA7pE,EAAAruN,GACA,OAAAu4R,EAAAv4R,EAAAm4R,EACA,CAGA,SAAA7pE,EAAAtuN,GACA,OAAAu4R,EAAAv4R,EAAAo4R,EACA,CAGA,SAAA7pE,EAAAvuN,GACA,OAAA+3R,GAAAQ,EAAAv4R,EAAAq4R,EACA,CAGA,SAAA7pE,EAAAxuN,GACA,OAAAg4R,GAAAO,EAAAv4R,EAAAs4R,EACA,CAjDAtvS,EAAA8wS,oBAA2BA,EAK3B9wS,EAAA+wS,gBAHA,SAAA/5R,GACA,iCAAAi4R,EAAAj4R,EACA,EAMAhX,EAAAgxS,cAHA,SAAAh6R,GACA,gCAAAi4R,EAAAj4R,EACA,EAMAhX,EAAAixS,cAHA,SAAAj6R,GACA,gCAAAi4R,EAAAj4R,EACA,EAMAhX,EAAAkxS,kBAHA,SAAAl6R,GACA,6BAAAi4R,EAAAj4R,EACA,EAMAhX,EAAAmxS,4BAHA,SAAAn6R,GACA,sCAAAi4R,EAAAj4R,EACA,EAMAhX,EAAAolO,eAAsBA,EAKtBplO,EAAAqlO,eAAsBA,EAKtBrlO,EAAAslO,gBAAuBA,EAKvBtlO,EAAAulO,eAAsBA,EAKtBvlO,EAAAwlO,eAAsBA,EAWtBxlO,EAAAmlO,iBATA,SAAAnuN,GACA,OACAouN,EAAApuN,IACAquN,EAAAruN,IACAsuN,EAAAtuN,IACAuuN,EAAAvuN,IACAwuN,EAAAxuN,EAEA,EASAhX,EAAA+kO,iBANA,SAAA/tN,GACA,2BAAA2gD,aACA6iM,EAAAxjP,IACA85R,EAAA95R,GAEA,EAGA,CAAC,UAAW,aAAc,2BAA1BtY,SAAA,SAAAslP,GACAxlP,OAAAglH,eAAAxjH,EAAAgkP,EAAA,CACAjgI,YAAA,EACA/sG,MAAA,WACA,UAAAu2C,MAAAy2L,EAAA,gCACA,GAEA,wCCxTAzzE,EAAA/xK,OAAA+xK,2BACA,SAAAp/H,GAGA,IAFA,IAAA1yC,EAAAD,OAAAC,KAAA0yC,GACAigQ,EAAA,GACA3wS,EAAA,EAAoBA,EAAAhC,EAAAiC,OAAiBD,IACrC2wS,EAAA3yS,EAAAgC,IAAAjC,OAAAklH,yBAAAvyE,EAAA1yC,EAAAgC,IAEA,OAAA2wS,CACA,EAEAC,EAAA,WACArxS,EAAA6vB,OAAiB,SAAHiR,GACd,IAAA6sG,EAAA7sG,GAAA,CAEA,IADA,IAAAwwQ,EAAA,GACA7wS,EAAA,EAAoBA,EAAAivF,UAAAhvF,OAAsBD,IAC1C6wS,EAAArtS,KAAA+yI,EAAAtnD,UAAAjvF,KAEA,OAAA6wS,EAAAxsR,KAAA,IACA,CAEArkB,EAAA,EAmBA,IAnBA,IACA+D,EAAAkrF,UACAnuD,EAAA/8B,EAAA9D,OACA2gB,EAAAuuE,OAAA9uD,GAAAnd,QAAA0tR,GAAA,SAAAh5R,GACA,UAAAA,EAAA,UACA,GAAA5X,GAAA8gC,EAAA,OAAAlpB,EACA,OAAAA,GACA,gBAAAu3E,OAAAprF,EAAA/D,MACA,gBAAAuyG,OAAAxuG,EAAA/D,MACA,SACA,IACA,OAAAoS,KAAAC,UAAAtO,EAAA/D,KACA,CAAU,MAAA+pG,GACV,kBACA,CACA,QACA,OAAAnyF,EAEA,IACAA,EAAA7T,EAAA/D,GAAwBA,EAAA8gC,EAASlpB,EAAA7T,IAAA/D,GACjC8wS,EAAAl5R,KAAA8hH,EAAA9hH,GACAgJ,GAAA,IAAAhJ,EAEAgJ,GAAA,IAAA21H,EAAA3+H,GAGA,OAAAgJ,CACA,EAMArhB,EAAAomS,UAAoB,SAAHplO,EAAAl9D,GACjB,GAAyB,qBAAZulI,IAAkC,IAAPA,EAAOmoK,cAC/C,OAAAxwO,EAIA,GAAyB,qBAAZqoE,EACb,kBACA,OAAArpI,EAAAomS,UAAAplO,EAAAl9D,GAAA2zH,MAAA,KAAA/nC,UACA,EAGA,IAAA8sI,GAAA,EAeA,OAdA,WACA,IAAAA,EAAA,CACA,GAAUnzF,EAAOooK,iBACjB,UAAAlkP,MAAAzpD,GACiBulI,EAAOqoK,iBACxB71R,QAAA+yR,MAAA9qS,GAEA+X,QAAA+I,MAAA9gB,GAEA04N,GAAA,CACA,CACA,OAAAx7J,EAAAy2D,MAAA,KAAA/nC,UACA,CAGA,EAGA,IAAAiiN,EAAA,GACAC,EAAA,KAEA,GAAIvoK,EAAO8tJ,IAAA0a,WAAA,CACX,IAAAC,EAAiBzoK,EAAO8tJ,IAAA0a,WACxBC,EAAAA,EAAAnuR,QAAA,qBAAqC,QACrCA,QAAA,YACAA,QAAA,YACAmc,cACA8xQ,EAAA,IAAAtuR,OAAA,IAAAwuR,EAAA,QACA,CA0BA,SAAA96J,EAAA7lG,EAAA6rC,GAEA,IAAAk2D,EAAA,CACA1Q,KAAA,GACAuvK,QAAAC,GAkBA,OAfAtiN,UAAAhvF,QAAA,IAAAwyI,EAAAz9B,MAAA/lB,UAAA,IACAA,UAAAhvF,QAAA,IAAAwyI,EAAA3hD,OAAA7B,UAAA,IACAuiN,EAAAj1N,GAEAk2D,EAAA/nB,WAAAnuC,EACIA,GAEJh9E,EAAAkyS,QAAAh/J,EAAAl2D,GAGA63B,EAAAq+B,EAAA/nB,cAAA+nB,EAAA/nB,YAAA,GACAtW,EAAAq+B,EAAAz9B,SAAAy9B,EAAAz9B,MAAA,GACAZ,EAAAq+B,EAAA3hD,UAAA2hD,EAAA3hD,QAAA,GACAsjB,EAAAq+B,EAAA89B,iBAAA99B,EAAA89B,eAAA,GACA99B,EAAA3hD,SAAA2hD,EAAA6+J,QAAAI,GACAC,EAAAl/J,EAAA/hG,EAAA+hG,EAAAz9B,MACA,CAmCA,SAAA08L,EAAA9wR,EAAAgxR,GACA,IAAAvxS,EAAAk2I,EAAA1tC,OAAA+oM,GAEA,OAAAvxS,EACA,QAAAk2I,EAAAzlD,OAAAzwF,GAAA,OAAAugB,EACA,QAAA21H,EAAAzlD,OAAAzwF,GAAA,OAEAugB,CAEA,CAGA,SAAA2wR,EAAA3wR,EAAAgxR,GACA,OAAAhxR,CACA,CAcA,SAAA+wR,EAAAl/J,EAAAl8H,EAAA0sN,GAGA,GAAAxwF,EAAA89B,eACAh6J,GACAsyG,EAAAtyG,EAAAggI,UAEAhgI,EAAAggI,UAAAh3I,EAAAg3I,WAEAhgI,EAAAqxD,aAAArxD,EAAAqxD,YAAAt8D,YAAAiL,GAAA,CACA,IAAA9N,EAAA8N,EAAAggI,QAAA0sF,EAAAxwF,GAIA,OAHAvF,EAAAzkI,KACAA,EAAAkpS,EAAAl/J,EAAAhqI,EAAAw6N,IAEAx6N,CACA,CAGA,IAAAopS,EA+FA,SAAAp/J,EAAAl8H,GACA,GAAA69F,EAAA79F,GACA,OAAAk8H,EAAA6+J,QAAA,yBACA,GAAApkK,EAAA32H,GAAA,CACA,IAAAu/O,EAAA,IAAA1jP,KAAAC,UAAAkE,GAAA2M,QAAA,aACAA,QAAA,YACAA,QAAA,gBACA,OAAAuvH,EAAA6+J,QAAAx7C,EAAA,SACA,CACA,OAAAlrN,EAAAr0B,GACAk8H,EAAA6+J,QAAA,GAAA/6R,EAAA,UACAi7R,EAAAj7R,GACAk8H,EAAA6+J,QAAA,GAAA/6R,EAAA,WAEAu6R,EAAAv6R,GACAk8H,EAAA6+J,QAAA,oBADA,CAEA,CA/GAQ,CAAAr/J,EAAAl8H,GACA,GAAAs7R,EACA,OAAAA,EAIA,IAAA7zS,EAAAD,OAAAC,KAAAuY,GACAw7R,EApCA,SAAA96K,GACA,IAAAz8G,EAAA,GAMA,OAJAy8G,EAAAh5H,SAAA,SAAA+zH,EAAAijG,GACAz6M,EAAAw3G,IAAA,CACA,IAEAx3G,CACA,CA4BAw3R,CAAAh0S,GAQA,GANAy0I,EAAA/nB,aACA1sH,EAAAD,OAAA2rJ,oBAAAnzI,IAKA07R,EAAA17R,KACAvY,EAAAsV,QAAA,eAAAtV,EAAAsV,QAAA,mBACA,OAAA4+R,EAAA37R,GAIA,OAAAvY,EAAAiC,OAAA,CACA,GAAA4oH,EAAAtyG,GAAA,CACA,IAAA9T,EAAA8T,EAAA9T,KAAA,KAAA8T,EAAA9T,KAAA,GACA,OAAAgwI,EAAA6+J,QAAA,YAAA7uS,EAAA,cACA,CACA,GAAAg5N,EAAAllN,GACA,OAAAk8H,EAAA6+J,QAAAzuR,OAAAvX,UAAA43C,SAAA2T,KAAAtgD,GAAA,UAEA,GAAAiuN,EAAAjuN,GACA,OAAAk8H,EAAA6+J,QAAAjoK,KAAA/9H,UAAA43C,SAAA2T,KAAAtgD,GAAA,QAEA,GAAA07R,EAAA17R,GACA,OAAA27R,EAAA37R,EAEA,CAEA,IA2CA1K,EA3CA8qI,EAAA,GAAA1f,GAAA,EAAAk7K,EAAA,KAA4C,KA6B5C,OA1BAxqO,EAAApxD,KACA0gH,GAAA,EACAk7K,EAAA,WAIAtpL,EAAAtyG,KAEAogI,EAAA,cADApgI,EAAA9T,KAAA,KAAA8T,EAAA9T,KAAA,IACA,KAIAg5N,EAAAllN,KACAogI,EAAA,IAAA9zH,OAAAvX,UAAA43C,SAAA2T,KAAAtgD,IAIAiuN,EAAAjuN,KACAogI,EAAA,IAAAtN,KAAA/9H,UAAA8mS,YAAAv7O,KAAAtgD,IAIA07R,EAAA17R,KACAogI,EAAA,IAAAu7J,EAAA37R,IAGA,IAAAvY,EAAAiC,QAAAg3H,GAAA,GAAA1gH,EAAAtW,OAIAgjO,EAAA,EACAxH,EAAAllN,GACAk8H,EAAA6+J,QAAAzuR,OAAAvX,UAAA43C,SAAA2T,KAAAtgD,GAAA,UAEAk8H,EAAA6+J,QAAA,uBAIA7+J,EAAA1Q,KAAAv+H,KAAA+S,GAIA1K,EADAorH,EAsCA,SAAAwb,EAAAl8H,EAAA0sN,EAAA8uE,EAAA/zS,GAEA,IADA,IAAA6N,EAAA,GACA7L,EAAA,EAAAsxE,EAAA/6D,EAAAtW,OAAoCD,EAAAsxE,IAAOtxE,EAC3C4O,EAAA2H,EAAA44E,OAAAnvF,IACA6L,EAAArI,KAAA6uS,EAAA5/J,EAAAl8H,EAAA0sN,EAAA8uE,EACA5iN,OAAAnvF,IAAA,IAEA6L,EAAArI,KAAA,IASA,OANAxF,EAAAC,SAAA,SAAAC,GACAA,EAAA4U,MAAA,UACAjH,EAAArI,KAAA6uS,EAAA5/J,EAAAl8H,EAAA0sN,EAAA8uE,EACA7zS,GAAA,GAEA,IACA2N,CACA,CAtDAymS,CAAA7/J,EAAAl8H,EAAA0sN,EAAA8uE,EAAA/zS,GAEAA,EAAA4tD,KAAA,SAAA1tD,GACA,OAAAm0S,EAAA5/J,EAAAl8H,EAAA0sN,EAAA8uE,EAAA7zS,EAAA+4H,EACA,IAGAwb,EAAA1Q,KAAA/yG,MA6GA,SAAAnjB,EAAA8qI,EAAAw7J,GACA,IACAlyS,EAAA4L,EAAAiiG,QAAA,SAAAj2B,EAAAixI,GAGA,OADAA,EAAAx1M,QAAA,MACAukE,EAAAixI,EAAA5lM,QAAA,sBAAAjjB,OAAA,CACA,GAAK,GAEL,OAAAA,EAAA,GACAkyS,EAAA,IACA,KAAAx7J,EAAA,GAAAA,EAAA,OACA,IACA9qI,EAAAwY,KAAA,SACA,IACA8tR,EAAA,GAGAA,EAAA,GAAAx7J,EAAA,IAAA9qI,EAAAwY,KAAA,UAAA8tR,EAAA,EACA,CA7HAI,CAAA1mS,EAAA8qI,EAAAw7J,IAxBAA,EAAA,GAAAx7J,EAAAw7J,EAAA,EAyBA,CAsBA,SAAAD,EAAA37R,GACA,UAAAu2C,MAAAxhD,UAAA43C,SAAA2T,KAAAtgD,GAAA,GACA,CAuBA,SAAA87R,EAAA5/J,EAAAl8H,EAAA0sN,EAAA8uE,EAAA7zS,EAAA+4H,GACA,IAAAx0H,EAAAme,EAAAymP,EAsCA,IArCAA,EAAAtpQ,OAAAklH,yBAAA1sG,EAAArY,IAAA,CAA0DqY,MAAAA,EAAArY,KAC1Di3H,IAEAv0G,EADAymP,EAAAnyI,IACAud,EAAA6+J,QAAA,6BAEA7+J,EAAA6+J,QAAA,sBAGAjqC,EAAAnyI,MACAt0G,EAAA6xH,EAAA6+J,QAAA,uBAGA1iS,EAAAmjS,EAAA7zS,KACAuE,EAAA,IAAAvE,EAAA,KAEA0iB,IACA6xH,EAAA1Q,KAAAzuH,QAAA+zP,EAAA9wP,OAAA,GAEAqK,EADAkwR,EAAA7tE,GACA0uE,EAAAl/J,EAAA40H,EAAA9wP,MAAA,MAEAo7R,EAAAl/J,EAAA40H,EAAA9wP,MAAA0sN,EAAA,IAEA3vN,QAAA,WAEAsN,EADAq2G,EACAr2G,EAAA5V,MAAA,MAAA4gD,KAAA,SAAA/pD,GACA,WAAAA,CACA,IAAWwiB,KAAA,MAAAwtB,MAAA,GAEX,KAAAjxB,EAAA5V,MAAA,MAAA4gD,KAAA,SAAA/pD,GACA,YAAAA,CACA,IAAWwiB,KAAA,OAIXzD,EAAA6xH,EAAA6+J,QAAA,yBAGAl9L,EAAA3xG,GAAA,CACA,GAAAw0H,GAAA/4H,EAAA4U,MAAA,SACA,OAAA8N,GAEAne,EAAA2P,KAAAC,UAAA,GAAAnU,IACA4U,MAAA,iCACArQ,EAAAA,EAAAovC,MAAA,MACApvC,EAAAgwI,EAAA6+J,QAAA7uS,EAAA,UAEAA,EAAAA,EAAAygB,QAAA,YACAA,QAAA,YACAA,QAAA,gBACAzgB,EAAAgwI,EAAA6+J,QAAA7uS,EAAA,UAEA,CAEA,OAAAA,EAAA,KAAAme,CACA,CA4BA,SAAA+mD,EAAAq5F,GACA,OAAAjyI,MAAA44C,QAAAq5F,EACA,CAGA,SAAAwwI,EAAAxoK,GACA,yBAAAA,CACA,CAGA,SAAA8nK,EAAA9nK,GACA,cAAAA,CACA,CAQA,SAAAp+F,EAAAo+F,GACA,wBAAAA,CACA,CAGA,SAAAkE,EAAAlE,GACA,wBAAAA,CACA,CAQA,SAAA50B,EAAA40B,GACA,gBAAAA,CACA,CAGA,SAAAyyF,EAAArnG,GACA,OAAAsF,EAAAtF,IAAA,oBAAA2H,EAAA3H,EACA,CAIA,SAAAsF,EAAAsP,GACA,wBAAAA,GAAA,OAAAA,CACA,CAGA,SAAAw7F,EAAA38M,GACA,OAAA6xG,EAAA7xG,IAAA,kBAAAk0G,EAAAl0G,EACA,CAIA,SAAAoqR,EAAAjjS,GACA,OAAA0qH,EAAA1qH,KACA,mBAAA+sH,EAAA/sH,IAAAA,aAAA89C,MACA,CAIA,SAAA+7D,EAAAmgB,GACA,0BAAAA,CACA,CAeA,SAAAjN,EAAA7sC,GACA,OAAAnxF,OAAAuN,UAAA43C,SAAA2T,KAAAq4B,EACA,CAGA,SAAAyV,EAAAlpE,GACA,OAAAA,EAAA,OAAAA,EAAAynB,SAAA,IAAAznB,EAAAynB,SAAA,GACA,CAxbA3jD,EAAA4gS,SAAmB,SAAHjrK,GAEhB,GADAA,EAAAA,EAAA71F,eACA6xQ,EAAAh8K,GACA,GAAAi8K,EAAAruR,KAAAoyG,GAAA,CACA,IAAAs9K,EAAgB5pK,EAAO4pK,IACvBtB,EAAAh8K,GAAA,WACA,IAAA7xH,EAAA9D,EAAA6vB,OAAA4nG,MAAAz3H,EAAA0vF,WACA7zE,QAAA+I,MAAA,YAAA+wG,EAAAs9K,EAAAnvS,EACA,CACA,MACA6tS,EAAAh8K,GAAA,aAGA,OAAAg8K,EAAAh8K,EACA,EAmCA31H,EAAAg3I,QAAeA,EAIfA,EAAAzlD,OAAA,CACA,YACA,cACA,iBACA,eACA,cACA,aACA,cACA,aACA,aACA,cACA,gBACA,YACA,gBAIAylD,EAAA1tC,OAAA,CACA,eACA,gBACA,iBACA,iBACA,YACA,eACA,eAEA,cA+QAtpG,EAAAupI,MAAAwI,EAAA,OAKA/xI,EAAAooE,QAAeA,EAKfpoE,EAAAiyS,UAAiBA,EAKjBjyS,EAAAuxS,OAAcA,EAKdvxS,EAAAkzS,kBAHA,SAAAzpK,GACA,aAAAA,CACA,EAMAzpI,EAAAqrC,SAAgBA,EAKhBrrC,EAAA2tI,SAAgBA,EAKhB3tI,EAAAy7H,SAHA,SAAAgO,GACA,wBAAAA,CACA,EAMAzpI,EAAA60G,YAAmBA,EAKnB70G,EAAAk8N,SAAgBA,EAChBl8N,EAAAupI,MAAA2yF,SAAsBA,EAKtBl8N,EAAAm6H,SAAgBA,EAKhBn6H,EAAAilO,OAAcA,EACdjlO,EAAAupI,MAAA07F,OAAoBA,EAMpBjlO,EAAA0yS,QAAeA,EACf1yS,EAAAupI,MAAA27F,cAA2BwtE,EAK3B1yS,EAAAspH,WAAkBA,EAUlBtpH,EAAAmzS,YARA,SAAA1pK,GACA,cAAAA,GACA,mBAAAA,GACA,kBAAAA,GACA,kBAAAA,GACA,kBAAAA,GACA,qBAAAA,CACA,EAGAzpI,EAAAk4H,SAAA6Z,EAAA,OAYA,IAAAqhK,EAAA,uDACA,mBA6CA,SAAA/jS,EAAA8hC,EAAAz8B,GACA,OAAAlW,OAAAuN,UAAAsD,eAAAioD,KAAAnmB,EAAAz8B,EACA,CAlCA1U,EAAA8b,IAAc,WACdD,QAAAC,IAAA,UAXA,WACA,IAAAwM,EAAA,IAAAwhH,KACAlwH,EAAA,CAAAwrF,EAAA98E,EAAA+qR,YACAjuM,EAAA98E,EAAAgrR,cACAluM,EAAA98E,EAAAirR,eAAAzuR,KAAA,KACA,OAAAwD,EAAAkrR,UAAAJ,EAAA9qR,EAAAmrR,YAAA75R,GAAAkL,KAAA,IACA,CAKAjc,GAAA7I,EAAA6vB,OAAA4nG,MAAAz3H,EAAA0vF,WACA,EAgBA1vF,EAAAi0L,SAAAliD,EAAA,OAEA/xI,EAAAkyS,QAAkB,SAAHrsN,EAAA34B,GAEf,IAAAA,IAAAitE,EAAAjtE,GAAA,OAAA24B,EAIA,IAFA,IAAApnF,EAAAD,OAAAC,KAAAyuD,GACAzsD,EAAAhC,EAAAiC,OACAD,KACAolF,EAAApnF,EAAAgC,IAAAysD,EAAAzuD,EAAAgC,IAEA,OAAAolF,CACA,EAMA,IAAA6tN,EAAA,qBAAAr8K,OAAAA,OAAA,8BAAA51H,EA0DA,SAAAkyS,EAAAt7P,EAAAumM,GAKA,IAAAvmM,EAAA,CACA,IAAAu7P,EAAA,IAAArmP,MAAA,2CACAqmP,EAAAv7P,OAAAA,EACAA,EAAAu7P,CACA,CACA,OAAAh1D,EAAAvmM,EACA,CAnEAr4C,EAAA6zS,UAAoB,SAAHC,GACjB,uBAAAA,EACA,UAAAz/K,UAAA,oDAEA,GAAAq/K,GAAAI,EAAAJ,GAAA,CACA,IAAA1yO,EACA,uBADAA,EAAA8yO,EAAAJ,IAEA,UAAAr/K,UAAA,iEAKA,OAHA71H,OAAAglH,eAAAxiD,EAAA0yO,EAAA,CACA18R,MAAAgqD,EAAA+iD,YAAA,EAAAG,UAAA,EAAAF,cAAA,IAEAhjD,CACA,CAEA,SAAAA,IAQA,IAPA,IAAAs/L,EAAAyzC,EACA1qS,EAAA,IAAAG,SAAA,SAAAC,EAAA2nD,GACAkvM,EAAA72P,EACAsqS,EAAA3iP,CACA,IAEA5sD,EAAA,GACA/D,EAAA,EAAoBA,EAAAivF,UAAAhvF,OAAsBD,IAC1C+D,EAAAP,KAAAyrF,UAAAjvF,IAEA+D,EAAAP,MAAA,SAAAgqB,EAAAjX,GACAiX,EACA8lR,EAAA9lR,GAEAqyO,EAAAtpP,EAEA,IAEA,IACA88R,EAAAr8K,MAAA,KAAAjzH,EACA,CAAM,MAAAypB,GACN8lR,EAAA9lR,EACA,CAEA,OAAA5kB,CACA,CAOA,OALA7K,OAAAk9I,eAAA16E,EAAAxiE,OAAAuoI,eAAA+sK,IAEAJ,GAAAl1S,OAAAglH,eAAAxiD,EAAA0yO,EAAA,CACA18R,MAAAgqD,EAAA+iD,YAAA,EAAAG,UAAA,EAAAF,cAAA,IAEAxlH,OAAA40I,iBACApyE,EACAuvG,EAAAujI,GAEA,EAEA9zS,EAAA6zS,UAAArjI,OAAwBkjI,EAiDxB1zS,EAAAg0S,YAlCA,SAAAF,GACA,uBAAAA,EACA,UAAAz/K,UAAA,oDAMA,SAAA4/K,IAEA,IADA,IAAAzvS,EAAA,GACA/D,EAAA,EAAoBA,EAAAivF,UAAAhvF,OAAsBD,IAC1C+D,EAAAP,KAAAyrF,UAAAjvF,IAGA,IAAAyzS,EAAA1vS,EAAAirB,MACA,uBAAAykR,EACA,UAAA7/K,UAAA,8CAEA,IAAAluH,EAAA,KACAy4O,EAAA,WACA,OAAAs1D,EAAAz8K,MAAAtxH,EAAAupF,UACA,EAGAokN,EAAAr8K,MAAA,KAAAjzH,GACA+E,MAAA,SAAAL,GAA4BmgI,EAAOivG,SAAAsG,EAAAx8N,KAAA,UAAAlZ,GAAA,IACnC,SAAAirS,GAA4B9qK,EAAOivG,SAAAq7D,EAAAvxR,KAAA,KAAA+xR,EAAAv1D,GAAA,GACnC,CAKA,OAHApgP,OAAAk9I,eAAAu4J,EAAAz1S,OAAAuoI,eAAA+sK,IACAt1S,OAAA40I,iBAAA6gK,EACA1jI,EAAAujI,IACAG,CACA,sCCvsBA,IAAAv1S,EAAcqzI,EAAQ,OACtBqiK,EAA2BriK,EAAQ,OACnCutG,EAAevtG,EAAQ,OACvBwtI,EAAgBxtI,EAAQ,OACxBtuB,EAAWsuB,EAAQ,OAEnBiyH,EAAAub,EAAA,6BACAD,EAAqBvtI,EAAQ,MAARA,GAErBhxG,EAAA,qBAAAq1H,WAA4CrkB,EAAAhxG,EAAMq1H,WAClDi+I,EAAAD,IAEAE,EAAA/0B,EAAA,0BACAx4I,EAAAvoI,OAAAuoI,eAEAw4G,EAAAggC,EAAA,+BAAoI,SAAA7nJ,EAAA1gH,GACpI,QAAAvW,EAAA,EAAiBA,EAAAi3H,EAAAh3H,OAAkBD,GAAA,EACnC,GAAAi3H,EAAAj3H,KAAAuW,EACA,OAAAvW,EAGA,QACA,EAKAmiI,EAAA,CAAc+Y,UAAA,MAEdj9I,EAAA21S,EADA/0B,GAAA77J,GAAAsjB,EACA,SAAApD,GACA,IAAAp2H,EAAA,IAAAwzB,EAAA4iG,GACA,GAAAtM,OAAAqF,eAAAnvH,EAAA,CACA,IAAA8tH,EAAA0L,EAAAx5H,GAEA4tI,EAAA13B,EAAA4X,EAAAhE,OAAAqF,aACA,IAAAye,EAAA,CACA,IAAAo5J,EAAAxtK,EAAA1L,GAEA8f,EAAA13B,EAAA8wL,EAAAl9K,OAAAqF,YACA,CAEAkG,EAAA,IAAAe,GAAA27G,EAAAnkG,EAAAvlB,IACA,CACA,EAEA,SAAA+N,GACA,IAAAp2H,EAAA,IAAAwzB,EAAA4iG,GACA3iE,EAAAzzD,EAAA+kC,OAAA/kC,EAAAooH,IACA30D,IAEA4hE,EAAA,IAAAe,GAAA27G,EAAAt+K,GAEA,GA2CAjhE,EAAAC,QAAA,SAAAgX,GACA,IAAAA,GAAA,kBAAAA,EAA4C,OAAO,EACnD,IAAAsoQ,EAAA,CACA,IAAAxkJ,EAAAw5K,EAAAtwC,EAAAhtP,GAAA,MACA,OAAAuoO,EAAA80D,EAAAv5K,IAAA,EACAA,EAEA,WAAAA,GA1BA,SAAA9jH,GACsC,IAAAqd,GAAA,EActC,OAbA31B,EAEkBkkI,GACwD,SAAAs4H,EAAAh4P,GAC1E,IAAAmxB,EACA,IAEA6mO,EAAAlkP,GACAqd,EAAAigR,EAAApxS,EAAA,EACA,CAAM,MAAAuM,GAAgB,CAEtB,IAEA4kB,CACA,CAcAmgR,CAAAx9R,EACA,CACA,OAAAysG,EApDA,SAAAzsG,GAC2C,IAAAqd,GAAA,EAe3C,OAdA31B,EAE6EkkI,GACH,SAAAs4H,EAAAv3H,GAC1E,IAAAtvG,EACA,IAEA,IAAA6mO,EAAAlkP,KAAA2sH,IACAtvG,EAAAigR,EAAA3wK,EAAA,GAEA,CAAM,MAAAl0H,GAAgB,CAEtB,IAEA4kB,CACA,CAoCAogR,CAAAz9R,GADqB,IAErB,yBC9GAjX,EAAAC,QAAA+xI,EAAA,+BCFA,WACA,IAAAgmJ,EAEA,GAEAh4R,EAAAC,UACK+xI,EAAAhxG,EAAM2zQ,oBAGX3c,EAAUhmJ,EAAQ,YAKlB,KAFAgmJ,EAAA,KAAAA,KAIA,UAAAxqO,MACA,mFASA,SAAAonP,EAAA75K,EAAAhO,GAGA,IAAAA,EAAA,CACA,IAAA8nL,EAAAC,EAAAA,EAAAn0S,OAAA,GAEAk0S,EAAA9nL,SACAA,EAAA8nL,EAAA9nL,OAEA,CAEA,KAAA5pH,KAAA43H,EAAA53H,KACA,KAAA2/B,KAAAi4F,EAAAlkC,WACA,KAAA67B,IAAA,GACA,KAAAxiH,SAAA,GACA,KAAA40C,WAAA,KACA,KAAA6/C,UAAA,KAGA,KAAApiG,KAAAwqH,EAAAA,EAAAxqH,KAAA,KACA,KAAAqqB,OAAAmgG,EAAAA,EAAAngG,OAAA,KACA,KAAA5qB,SAAA+qH,EAAAA,EAAA/qH,SAAA,KACA,KAAAk4R,iBAAAntK,EAAAA,EAAAmtK,iBAAA,IACA,CA0LA,SAAA6a,EAAAttR,GACA,KAAAA,KAAAA,CACA,CAUA,SAAAutR,EAAAja,GACA,KAAAA,MAAAA,CACA,CAUA,SAAAka,EAAAzlR,GACA,KAAAA,QAAAA,CACA,CAqBA,SAAA0lR,EAAArmH,GAGA,GAFAA,IAAAA,EAAAA,EAAAjrI,WAAAxX,SAEAyiJ,EAAA,UAAArhI,MAAA,oBA4CA,IAAAu/D,EAzCA,KAAAmuK,QAAA,GAGA,KAAAnuK,OAAAirK,EAAAjrK,QAAA,IAsCAA,EArCA,KAAAA,QAsCAooL,UAAAC,EACAroL,EAAAsoL,WAAAC,EACAvoL,EAAAwoL,OAAAC,EACAzoL,EAAA0oL,QAAAC,EACA3oL,EAAA4oL,UAAAC,EACA7oL,EAAA8oL,UAAAC,EACA/oL,EAAAx0D,QAAAw9O,EAvCAjB,EAAA,OAEA,IACA,KAAA/nL,OAAAnC,MAAAikE,EACA,gBAEA,KAAA9hE,MACA,CACA,CA5PA6nL,EAAA5oS,UAAAi0E,UAAA,SAAAha,GAEA,KAAA/1D,SAAAhM,KAAA+hE,GAGA,KAAAnhB,aAAA,KAAAA,WAAAmhB,GACA,KAAA0+B,UAAA1+B,CACA,EAIA2uO,EAAA5oS,UAAAgqS,SAAA,SAAAj7K,GACA,IAAA90D,EAAA,IAAA2uO,EAAA75K,GAEA,KAAA96C,UAAAha,GAEA6uO,EAAAl4R,QAAAqpD,EACA,EAEA2uO,EAAA5oS,UAAAiqS,UAAA,WACAnB,EAAAjnR,OACA,EAEA+mR,EAAA5oS,UAAA06M,MAAA,SAAAj/L,GACA,0BAAAvX,WAEA,KAAAwiH,KAAAjrG,EAEA,KAAAw4D,UAAA,IAAA80N,EAAAttR,IACA,EAEAmtR,EAAA5oS,UAAAkqS,OAAA,SAAAnb,GACA,KAAAroK,KAAAqoK,EAEA,KAAA96M,UAAA,IAAA+0N,EAAAja,GACA,EAEA6Z,EAAA5oS,UAAAmqS,SAAA,SAAA3mR,GACA,0BAAAtf,UAEA,KAAA+vE,UAAA,IAAAg1N,EAAAzlR,GACA,EAEAolR,EAAA5oS,UAAAitO,OAAA,SAAA/qN,GACA,MAAAA,CACA,EAIA0mR,EAAA5oS,UAAAoqS,UAAA,SAAA7pI,EAAAoiG,GACA,QAAAjuQ,EAAA,EAAAsxE,EAAA,KAAA9hE,SAAAvP,OAA8CD,EAAAsxE,EAAOtxE,IACrD,oBAAAwP,SAAAxP,GAAA+G,OAEA,IAAA8kK,EAAAh1G,KAAAo3M,EAAA,KAAAz+P,SAAAxP,GAAAA,EAAA,KAAAwP,UAEA,MACA,EAEA0kS,EAAA5oS,UAAAqqS,WAAA,SAAAlzS,GACA,QAAAzC,EAAA,EAAAsxE,EAAA,KAAA9hE,SAAAvP,OAA8CD,EAAAsxE,EAAOtxE,IAAA,CACrD,IAAAulE,EAAA,KAAA/1D,SAAAxP,GACA,GAAAulE,EAAA9iE,OAAAA,EAAA,OAAA8iE,CACA,CAEA,EAEA2uO,EAAA5oS,UAAAsqS,cAAA,SAAAnzS,GAGA,IAFA,IAAA0oR,EAAA,GAEAnrR,EAAA,EAAAsxE,EAAA,KAAA9hE,SAAAvP,OAA8CD,EAAAsxE,EAAOtxE,IACrD,KAAAwP,SAAAxP,GAAAyC,OAAAA,GAAA0oR,EAAA3nR,KAAA,KAAAgM,SAAAxP,IAEA,OAAAmrR,CACA,EAEA+oB,EAAA5oS,UAAAuqS,mBAAA,SAAApzS,EAAA8T,GACA,QAAAvW,EAAA,EAAAsxE,EAAA,KAAA9hE,SAAAvP,OAA8CD,EAAAsxE,EAAOtxE,IAAA,CACrD,IAAAulE,EAAA,KAAA/1D,SAAAxP,GACA,GACA,YAAAulE,EAAAx+D,OACAwP,GAAAgvD,EAAAnjC,KAAA3/B,KAAA8T,IAAAA,GAAAgvD,EAAAnjC,KAAA3/B,IAEA,OAAA8iE,CACA,CAEA,EAEA2uO,EAAA5oS,UAAAwqS,iBAAA,SAAArzS,GAGA,IAFA,IAAA0oR,EAAA,GAEAnrR,EAAA,EAAAsxE,EAAA,KAAA9hE,SAAAvP,OAA8CD,EAAAsxE,EAAOtxE,IAAA,CACrD,IAAAulE,EAAA,KAAA/1D,SAAAxP,GACA,YAAAulE,EAAAx+D,OACAw+D,EAAA9iE,OAAAA,GAAA0oR,EAAA3nR,KAAA+hE,GACA4lN,EAAAA,EAAAvuQ,OAAA2oD,EAAAuwO,iBAAArzS,IAEA,CAEA,OAAA0oR,CACA,EAEA+oB,EAAA5oS,UAAAyqS,mBAAA,SAAA7vN,GAIA,IAHA,IAAA8vN,EAAA,KACAtwL,EAAAx/B,EAAAl7E,MAAA,KAEAhL,EAAA,EAAAsxE,EAAAo0C,EAAAzlH,OAA2CD,EAAAsxE,EAAOtxE,IAClD,KAAAg2S,GAAA,YAAAA,EAAAjvS,KAEA,OADAivS,EAAAA,EAAAL,WAAAjwL,EAAA1lH,GACA,CAEA,OAAAg2S,CACA,EAEA9B,EAAA5oS,UAAA2qS,cAAA,SAAA/vN,GACA,IAAAw/B,EAAAx/B,EAAAl7E,MAAA,KACAgrS,EAAA,KAAAD,mBAAArwL,EAAA,IACA,OAAAswL,EACAtwL,EAAAzlH,OAAA,EACA+1S,EAAA5zQ,KAAAsjF,EAAA,IACAswL,EAAAhkL,SACA,CACA,EAIAkiL,EAAA5oS,UAAA43C,SAAA,SAAArjD,GACA,YAAAq2S,mBAAA,GAAAr2S,EACA,EAEAq0S,EAAA5oS,UAAA4qS,mBAAA,SAAA7yF,EAAAxjN,GACA,IAAA8d,EAAA0lM,EAAA,SAAA5gN,KACA0zS,EAAAt2S,GAAAA,EAAAu2S,WAAA,QAGA,QAAA3zS,KAFA5C,GAAAA,EAAAw2S,mBAEA,KAAAj0Q,KACArkC,OAAAuN,UAAAsD,eAAAioD,KAAA,KAAAz0B,KAAA3/B,KACAkb,GAAA,IAAAlb,EAAA,KAAA6zS,EAAA,KAAAl0Q,KAAA3/B,IAAA,KAEA,YAAA+M,SAAAvP,QAAA,iBAAAuP,SAAA,GAAAzI,KACA4W,GAAA,SAAAnO,SAAA,GAAA0zC,SAAArjD,GAAA,UAAA4C,KAAA,SACM,QAAA+M,SAAAvP,OAAA,CACN0d,GAAA,IAAAw4R,EAIA,IAFA,IAAAI,EAAAlzF,GAAAxjN,GAAAA,EAAAu2S,WAAA,SAEAp2S,EAAA,EAAAsxE,EAAA,KAAA9hE,SAAAvP,OAAgDD,EAAAsxE,EAAOtxE,IACvD2d,GACA,KAAAnO,SAAAxP,GAAAk2S,mBAAAK,EAAA12S,GAAAs2S,EAGAx4R,GAAA0lM,EAAA,UAAA5gN,KAAA,GACA,MAAM5C,GAAAA,EAAAguD,MAoBN,IAnBA,CACA,OACA,OACA,KACA,MACA,QACA,QACA,KACA,MACA,QACA,SACA,OACA,WACA,OACA,QACA,SACA,QACA,OAEAv6C,QAAA,KAAA7Q,MAAAkb,GAAA,KACAA,GAAA,WAAAlb,KAAA,IAEAkb,GAAA,KAGA,OAAAA,CACA,EAQA02R,EAAA/oS,UAAA43C,SAAA,SAAArjD,GACA,OAAA22S,EAAAF,EAAA,KAAAvvR,MAAAlnB,EACA,EAEAw0S,EAAA/oS,UAAA4qS,mBAAA,SAAA7yF,EAAAxjN,GACA,OAAAwjN,EAAA,KAAAngK,SAAArjD,EACA,EAMAy0S,EAAAhpS,UAAA43C,SAAA,SAAArjD,GACA,kBAAA22S,EAAA,KAAAnc,MAAAx6R,GAAA,KACA,EAEAy0S,EAAAhpS,UAAA4qS,mBAAA,SAAA7yF,EAAAxjN,GACA,OAAAwjN,EAAA,KAAAngK,SAAArjD,EACA,EAMA00S,EAAAjpS,UAAA43C,SAAA,SAAArjD,GACA,gBAAA22S,EAAAF,EAAA,KAAAxnR,SAAAjvB,GAAA,QACA,EAEA00S,EAAAjpS,UAAA4qS,mBAAA,SAAA7yF,EAAAxjN,GACA,OAAAwjN,EAAA,KAAAngK,SAAArjD,EACA,EAIAq0S,EAAA5oS,UAAAvE,KAAA,UACAstS,EAAA/oS,UAAAvE,KAAA,OACAutS,EAAAhpS,UAAAvE,KAAA,QACAwtS,EAAAjpS,UAAAvE,KAAA,UAuFA,SAAA0gB,EAAAD,GACA,QAAAvT,KAAAuT,EACAA,EAAA5Y,eAAAqF,KAAAwT,EAAAxT,GAAAuT,EAAAvT,GACA,CA1DA0vG,CAAA6wL,EAAAlpS,UAAA4oS,EAAA5oS,WAEAkpS,EAAAlpS,UAAAgqS,SAAA,SAAAj7K,GACA,0BAAA7qH,SAEA0kS,EAAAr9O,KAAA,KAAAwjE,GAEA65K,EAAA5oS,UAAAgqS,SAAAt+K,MAAA,KAAA/nC,UACA,EAEAulN,EAAAlpS,UAAAmrS,SAAA,SAAAjc,GACA,KAAAA,SAAAA,CACA,EAGA,IAAA4Z,EAAA,KAiBA,SAAAM,IACAN,EAAA,IAAAA,EAAA,GAAAkB,SAAAt+K,MAAAo9K,EAAA,GAAAnlN,UACA,CACA,SAAA2lN,IACAR,EAAA,IAAAA,EAAA,GAAAmB,UAAAv+K,MAAAo9K,EAAA,GAAAnlN,UACA,CACA,SAAA6lN,IACAV,EAAA,IAAAA,EAAA,GAAApuF,MAAAhvF,MAAAo9K,EAAA,GAAAnlN,UACA,CACA,SAAA+lN,IACAZ,EAAA,IAAAA,EAAA,GAAAoB,OAAAx+K,MAAAo9K,EAAA,GAAAnlN,UACA,CACA,SAAAimN,IACAd,EAAA,IAAAA,EAAA,GAAAqB,SAAAz+K,MAAAo9K,EAAA,GAAAnlN,UACA,CACA,SAAAmmN,IACAhB,EAAA,IAAAA,EAAA,GAAAqC,SAAAz/K,MAAAo9K,EAAA,GAAAnlN,UACA,CACA,SAAAomN,IACAjB,EAAA,IAAAA,EAAA,GAAA77D,OAAAvhH,MAAAo9K,EAAA,GAAAnlN,UACA,CASA,SAAAqnN,EAAA//R,GACA,OAAAA,EACA2sC,WACAhgC,QAAA,cACAA,QAAA,aACAA,QAAA,aACAA,QAAA,eACAA,QAAA,cACA,CAGA,SAAAszR,EAAAzvR,EAAAlnB,GACA,IAAA62S,EAAA3vR,EAUA,OARAlnB,GAAAA,EAAA82S,SAAA5vR,EAAA9mB,OAAA,KACAy2S,EAAAA,EAAAxoS,UAAA,MAAAw9B,OAAA,UAGA7rC,GAAAA,EAAAw2S,qBACAK,EAAAA,EAAAhrQ,QAGAgrQ,CACA,CAKAp3S,EAAAC,UACK+xI,EAAAhxG,EAAM2zQ,qBAEP30S,EAAAC,QAAAi1S,YAA0BA,EAC1Bl1S,EAAAC,QAAA20S,WAAyBA,EACzB50S,EAAAC,QAAA80S,YAA0BA,EAC1B/0S,EAAAC,QAAA+0S,aAA2BA,EAC3Bh1S,EAAAC,QAAAg1S,eAA6BA,IAEjC,KAAAC,YAAAA,EACA,KAAAN,WAAAA,EACA,KAAAG,YAAAA,EACA,KAAAC,aAAAA,EACA,KAAAC,eAAAA,EAEC,CA5ZD,sCCqDA,SAAAqC,EAAArqI,GACA,KAAAA,GAAAA,EACA,KAAAsqI,UAAA,EACA,CArDA,qBAAAnoS,QAAAA,OAAA3F,SACCuoI,EAAQ,OAETA,EAAQ,OAoDRslK,EAAAtrS,UAAAtC,QAAA,SAAAmuD,EAAA2/O,GACA,SAAAD,UAAA1/O,GAAA,CACA,IAAA01D,EAAA,KACA,KAAAgqL,UAAA1/O,GAAA,IAAApuD,SAAA,SAAAC,EAAA2nD,GACA,IAAAwG,EAAAxkD,cAAAW,QAAA,iBAAA6jD,EAAAxkD,cAAAW,QAAA,WACAu5G,EAAA0/C,GAAAuqD,WAAA3/J,GAEAnuD,IAzDA,SAAAmuD,EAAA2/O,GACA,WAAA/tS,SAAA,SAAAC,EAAA2nD,GACA,IAAA0G,EAAA,IAAAC,eAEA,QAAAy/O,KADA1/O,EAAAG,KAAA,MAAAL,GAAA,GACA2/O,EACAz/O,EAAA2/O,iBAAAD,EAAAD,EAAAC,IAEA1/O,EAAAI,aAAA,cAEAJ,EAAA4/O,mBAAA,WACA,IAAA5/O,EAAA6/O,aAIA7/O,EAAA7K,QAAA,KAAA6K,EAAA7K,OAAA,KAEAziD,YAAA,WACA4mD,EAAA,IAAAijE,UAAA,0BAAAz8D,EAAA,MACA,GAAO,GAEP,EAEAE,EAAAK,OAAA,WACAL,EAAA7K,QAAA,KAAA6K,EAAA7K,OAAA,KAEAxjD,EAAAquD,EAAA1K,SAEA,EAEA0K,EAAAQ,QAAA,WACA9tD,YAAA,WACA4mD,EAAA,IAAAijE,UAAA,iCAAAz8D,EAAA,MACA,GAAM,EACN,EAEAE,EAAA8/O,UAAA,WACAptS,YAAA,WACA4mD,EAAA,IAAAijE,UAAA,iCAAAz8D,EAAA,MACA,GAAM,EACN,EAEAE,EAAAS,MACA,GACA,CAgBAs/O,CAAAjgP,EAAA2/O,GAAAhuS,MAAA,SAAAqsD,GACA03D,EAAA0/C,GAAA8qI,cAAAlgP,EAAAhC,GACAnsD,GACA,IAAQ,SAAFC,GACN0nD,EAAA1nD,EACA,IAIAD,GAEA,GACA,CAEA,YAAA6tS,UAAA1/O,EACA,EAEAy/O,EAAAtrS,UAAAgsS,SAAA,WACA,IAAAzqL,EAAA,KACA,WAAA9jH,SAAA,SAAAC,EAAA2nD,GACA5nD,QAAA6lB,IAAA7wB,OAAAw2G,OAAAsY,EAAAgqL,YAAA/tS,MAAA,WACAE,GACA,IAAK,SAAFC,GACH0nD,EAAA1nD,EACA,GACA,GACA,EAEA3J,EAAAC,QAAAq3S,4DC7FA/tL,EAAiByoB,EAAA,OAAAzoB,WACjBzU,EAAkBk9B,EAAA,OAAAl9B,YAGlBmjM,GAFajmK,EAAA,OAAAw/J,OACGx/J,EAAQ,OACxBimK,QAEAC,EAAA,CACAC,OAAA,CACAhtH,OAAA,qBACAx/D,KAAA,oBACAG,QAAA,oBACAssL,YAAA,4BAIA,SAAAC,EAAAC,EAAAC,EAAAjvR,EAAAkvR,GACA,KAAAF,cAAAA,EACA,KAAAC,aAAAA,GAAA,KACA,KAAAjvR,MAAAA,GAAA4uR,EACA,KAAAM,IAAAA,CACA,CAeAH,EAAArsS,UAAAysS,WAAA,SAAAl4S,EAAAs+O,GACA,IAAA65D,EAAA,SAAA7gP,GACA,wBAAAA,EACA,CAAYA,IAAAA,EAAAA,IAAA2/O,QAAA3/O,EAAA2/O,SAGZ,CAAW3/O,IAAAA,EAAA2/O,QAAA,GACX,EAEAj3S,EAAAA,GAAA,GACA,KAAAg4S,eACAh4S,EAAAg4S,aAAA,KAAAA,cAGA,IAEAI,EAAA,IAFkB3mK,EAAQ,OAE1B,MAAA1oH,OAGA,GAFC0oH,EAAA,OAAA4mK,OAAoB,KAAAJ,MAErBjvL,EAAAs1H,GAGA,OAFA85D,EAAAE,qBAAA,KAAAP,cAAA/3S,GAKA,IACAu4S,EAAA,IAD0B9mK,EAAQ,MAClC,CAA0CA,EAAQ,QAElD,QAAA/0H,KAAA,KAAAqM,MACA,QAAAA,MAAAha,eAAA2N,GAAA,CACA,QAAAqM,MAAArM,GAAAkuK,OACA,GAAA17J,MAAA44C,QAAA,KAAA/+C,MAAArM,GAAAkuK,QAAA,CACA,IAAAtzH,EAAA6gP,EAAA,KAAApvR,MAAArM,GAAAkuK,OAAA,IACA2tH,EAAApvS,QAAAmuD,EAAAA,IAAAA,EAAA2/O,SACA,KAAAluR,MAAArM,GAAAkuK,OAAA,GAAAtzH,EAAAA,GACA,MACAA,EAAA6gP,EAAA,KAAApvR,MAAArM,GAAAkuK,QACA2tH,EAAApvS,QAAAmuD,EAAAA,IAAAA,EAAA2/O,SACA,KAAAluR,MAAArM,GAAAkuK,OAAAtzH,EAAAA,IAGA,KAAAvuC,MAAArM,GAAA0uG,OACAl8F,MAAA44C,QAAA,KAAA/+C,MAAArM,GAAA0uG,OACA9zD,EAAA6gP,EAAA,KAAApvR,MAAArM,GAAA0uG,KAAA,IACAmtL,EAAApvS,QAAAmuD,EAAAA,IAAAA,EAAA2/O,SACA,KAAAluR,MAAArM,GAAA0uG,KAAA,GAAA9zD,EAAAA,MAEAA,EAAA6gP,EAAA,KAAApvR,MAAArM,GAAA0uG,MACAmtL,EAAApvS,QAAAmuD,EAAAA,IAAAA,EAAA2/O,SACA,KAAAluR,MAAArM,GAAA0uG,KAAA9zD,EAAAA,MAGA,KAAAvuC,MAAArM,GAAA6uG,UACAr8F,MAAA44C,QAAA,KAAA/+C,MAAArM,GAAA6uG,UACAj0D,EAAA6gP,EAAA,KAAApvR,MAAArM,GAAA6uG,QAAA,IACAgtL,EAAApvS,QAAAmuD,EAAAA,IAAAA,EAAA2/O,SACA,KAAAluR,MAAArM,GAAA6uG,QAAA,GAAAj0D,EAAAA,MAEAA,EAAA6gP,EAAA,KAAApvR,MAAArM,GAAA6uG,SACAgtL,EAAApvS,QAAAmuD,EAAAA,IAAAA,EAAA2/O,SACA,KAAAluR,MAAArM,GAAA6uG,QAAAj0D,EAAAA,MAGA,KAAAvuC,MAAArM,GAAAm7R,cACA3oR,MAAA44C,QAAA,KAAA/+C,MAAArM,GAAAm7R,cACAvgP,EAAA6gP,EAAA,KAAApvR,MAAArM,GAAAm7R,YAAA,IACAU,EAAApvS,QAAAmuD,EAAAA,IAAAA,EAAA2/O,SACA,KAAAluR,MAAArM,GAAAm7R,YAAA,GAAAvgP,EAAAA,MAEAA,EAAA6gP,EAAA,KAAApvR,MAAArM,GAAAm7R,aACAU,EAAApvS,QAAAmuD,EAAAA,IAAAA,EAAA2/O,SACA,KAAAluR,MAAArM,GAAAm7R,YAAAvgP,EAAAA,KAGA,CAGA,QAAAygP,cAAA1kL,OACA,QAAAzC,KAAA,KAAAmnL,cAAA1kL,OACA,KAAA0kL,cAAA1kL,OAAAtkH,eAAA6hH,KACAt5D,EAAA6gP,EAAA,KAAAJ,cAAA1kL,OAAAzC,IACA2nL,EAAApvS,QAAAmuD,EAAAA,IAAAA,EAAA2/O,SACA,KAAAc,cAAA1kL,OAAAzC,GAAAt5D,EAAAA,KAKA,IAAA01D,EAAA,KAEAurL,EAAAd,WAAAxuS,MAAA,WACA,IAAAsoK,EAAA6mI,EAAAE,qBAAAtrL,EAAA+qL,cAAA/3S,GAEAs+O,EAAA/sE,EACA,IAAI,SAAFnoK,GACF,MAAAA,CACA,GACA,EAEA0uS,EAAArsS,UAAA+sS,UAAA,SAAAjnI,EAAArlK,GACA,IACA9C,EADAq1Q,EAAA,GAGAltG,EAAAhwH,GAAA,uBAEA,IADA,IAAA+mJ,EACA,QAAAA,EAAA/2B,EAAAjnD,KAAA,oBACAm0J,EAAA96Q,KAAA2kM,EAEA,IACA/2B,EAAAhwH,GAAA,kBACAn4C,EAAWw5H,EAAM7lH,OAAA0hQ,GACjBvyQ,EAAA9C,EAAAmoK,EAAAknI,cACA,IACAlnI,EAAApxJ,KACA,EAEA23R,EAAArsS,UAAAitS,UAAA,SAAA14S,EAAAs+O,GACA,IAAAA,EACA,kEAEA,IAAAtxH,EAAA,KAEA,KAAAkrL,WAAAl4S,GAAA,SAAAuxK,GACAvkD,EAAAwrL,UAAAjnI,GAAA,SAAAonI,EAAA7sF,GACAwyB,EAAAxyB,EACA,GACA,GACA,EAEAgsF,EAAArsS,UAAAmtS,cAAA,SAAAtjP,GACA,IAAAujP,EACA,IACAA,EAAA,IAAAviP,KAAA,CAAAhB,GAAA,CAA8BpuD,KAAA,mBAC9B,CAAG,MAAAiI,GAEH,yBAAAA,EAAAvM,KAAA,CACA,IAAAq7I,EAAA,IAAA5mF,WAAA/B,GACAujP,EAAA,IAAAviP,KAAA,CAAA2nF,EAAA3oF,QAAA,CAAyCpuD,KAAA,mBACzC,CACA,CAEA,IAAA2xS,EACA,+BAGA,OAAAA,CACA,EAEAf,EAAArsS,UAAAqtS,YAAA,WAGA,IAAAC,EAAAlqS,OAAA8oD,KAAA,aACA,UAAAohP,EACA,iDAGA,OAAAA,CACA,EAEAjB,EAAArsS,UAAAutS,SAAA,SAAAh5S,EAAA+4S,GACAA,IACAA,EAAA,KAAAD,eAEA,IACA,KAAAG,SAAA,SAAA7vS,GACA,IACA8vS,GADArqS,OAAA4mD,KAAA5mD,OAAAsqS,WACAzjP,gBAAAtsD,GACA2vS,EAAA9gD,SAAA3zM,KAAA40P,CAWA,GAAGl5S,EACH,CAAG,MAAAmP,GAEH,MADA4pS,EAAA7tQ,QACA/7B,CACA,CACA,EAEA2oS,EAAArsS,UAAAksD,KAAA,SAAA33D,EAAA+4S,IACA/4S,EAAAA,GAAA,IACAo5S,WAAA,EACAL,EAAAA,GAAA,KAEA,KAAAC,SAAAh5S,EAAA+4S,EACA,EAGAjB,EAAArsS,UAAA2jB,MAAA,SAAApvB,EAAA+4S,IACA/4S,EAAAA,GAAA,IACAo5S,WAAA,EACAL,EAAAA,GAAA,KAEA,KAAAC,SAAAh5S,EAAA+4S,EACA,EAOAjB,EAAArsS,UAAAwpD,SAAA,SAAAokP,EAAA/6D,EAAAt+O,GACAgpH,EAAAqwL,KACA9kM,EAAA+pI,KACAt+O,EAAAs+O,GAEAA,EAAA+6D,EACAA,EAAA,MAGAA,EAAAA,GAAA,WACA,KAAAJ,SAAA,SAAA7vS,GACAsuS,EAAAtuS,EAAAiwS,GAEArwL,EAAAs1H,IACAA,GAEA,GAAEt+O,EACF,EAEA83S,EAAArsS,UAAA6tS,UAAA,SAAAh7D,EAAAt+O,GACA,IAAAs+O,EACA,kEAEA,KAAAyhD,WAAA,SAAAzqO,GACAgpL,EAAAhpL,EAAAjS,SAAA,UACA,GAAErjD,EACF,EAEA83S,EAAArsS,UAAA8tS,WAAA,SAAAj7D,EAAAt+O,GACA,IAAAs+O,EACA,mEAEA,KAAAyhD,WAAA,SAAAzqO,GACAgpL,EAAA,+BAA2BhpL,EAAAjS,SAAA,UAC3B,GAAErjD,EACF,EAEA83S,EAAArsS,UAAAwtS,QAAA,SAAA36D,EAAAt+O,GACA,IAAAs+O,EACA,gEAEA,IAAAyE,EAAA,KACA,KAAAg9C,WAAA,SAAA32R,GACA,IAAAyvS,EAAA91D,EAAA61D,cAAAxvS,GACAk1O,EAAAu6D,EACA,GAAE74S,EACF,EAEA83S,EAAArsS,UAAAs0R,UAAA,SAAAzhD,EAAAt+O,GACA,IAAAs+O,EACA,kEAGA,IAAAtxH,EAAA,KAEA,KAAAkrL,WAAAl4S,GAAA,SAAAuxK,GACAvkD,EAAAwrL,UAAAjnI,GAAA,SAAAj8G,GACAgpL,EAAAhpL,EACA,GACA,GACA,EAEAwiP,EAAArsS,UAAA+tS,UAAA,SAAAx5S,EAAAs+O,GACA,IAAAt1H,EAAAs1H,GAEA,OADA,KAAA45D,WAAAl4S,GAIA,KAAAk4S,WAAAl4S,GAAA,SAAAuxK,GACA+sE,EAAA/sE,EACA,GACA,EAEA9xK,EAAAC,QAAA,CACA+5S,UAAA,SAAA1B,EAAAC,EAAAjvR,EAAAkvR,GACA,IAtSA,WAEA,IACA,IAAAhrS,EAAA,IAAAoqD,WAAA,GACA0jE,EAAA,CAAgBskB,IAAA,WAAmB,OAAO,EAAP,GAGnC,OAFAnhJ,OAAAk9I,eAAArgB,EAAA1jE,WAAA5rD,WACAvN,OAAAk9I,eAAAnuI,EAAA8tH,GACA,KAAA9tH,EAAAoyI,KACA,CAAG,MAAAlwI,GACH,QACA,CACA,CA2RAuqS,GACA,iEAEA,WAAA5B,EACAC,EACAC,GAAmBvmK,EAAAhxG,EAAMk5Q,QAAA3B,aACzBjvR,GAAY0oH,EAAAhxG,EAAMk5Q,QAAA5wR,MAClBkvR,GAAUxmK,EAAAhxG,EAAMk5Q,QAAA1B,IAEhB,6DCrUA,SAAA2B,IACA,KAAAC,WAAA,GACA,KAAAC,WAAA,EACA,CAqCA,SAAAC,EAAA1lL,GASA,OARqC,IAArCA,EAAA5gH,eACA4gH,EAAAA,EAAAhmH,UAAgCowM,IAGhC,IAAApqF,EAAA5gH,QAAA,OACA4gH,EAAAA,EAAAhmH,UAAA,IAGAgmH,CACA,CA7CAulL,EAAAnuS,UAAAwrN,WAAA,SAAA5iG,GAEA,OADAA,EAAA0lL,EAAA1lL,GACA,0BAAAwlL,WAAAxlL,IACA,0BAAAylL,WAAAzlL,EACA,EAEAulL,EAAAnuS,UAAAuiK,aAAA,SAAA35C,EAAAr0H,GACAq0H,EAAA0lL,EAAA1lL,GAEA,IAAA2lL,EAAA,KAAAF,WAAAzlL,GACA,qBAAA2lL,GAAA,SAAAh6S,EACA,OAAAg6S,EAGA,GAAAA,EACA,WAAap3K,EAAMo3K,EAAA,kBAAAA,EAAA,cAAA74S,GAGnB,IAAAqgF,EAAA,KAAAq4N,WAAAxlL,GACA,GAAA7yC,EACA,OAAAA,EAGA,cAAA6yC,EAAA,oCACA,EAEAulL,EAAAnuS,UAAA+rS,cAAA,SAAAnjL,EAAA7yC,GACA,KAAAq4N,WAAAE,EAAA1lL,IAAA7yC,CACA,EAEAo4N,EAAAnuS,UAAA4sS,OAAA,SAAAj0P,GACA,KAAA01P,WAAA11P,GAAA,EACA,EAeA3kD,EAAAC,QAAA,IAAAk6S,sCCpDA,IAAAvsK,EAAeoE,EAAA,OAAApE,SAqFf,SAAA4sK,EAAA5tR,GACA,eAAAA,EAAAjqB,KACA,CAEA,SAAA83S,EAAA7tR,GACA,cAAAA,EAAAjqB,YAAAjB,IAAAkrB,EAAAjqB,OAAA,MAAAiqB,EAAAjqB,OAAA,SAAAiqB,EAAAjqB,KACA,CAqCA3C,EAAAC,QAAA,CACAy6S,kBA/HA,SAAAz2F,EAAA02F,GACA,IAAAC,EAAA,GACAC,EAAA,EAAAC,EAAA,EACAC,EAAA,GACAC,EAAA,EACAC,EAAA,EACAC,EAAA,GACAC,EAAAR,EAEA12F,EAAAtlN,SAAA,SAAAiuB,GACA4tR,EAAA5tR,IACAguR,EAAA12S,KAAA0oB,GACAiuR,GAAAjuR,EAAAwuR,UACAN,GAAAluR,EAAAyuR,WACIZ,EAAA7tR,IACJmuR,EAAA72S,KAAA0oB,GACAouR,EAAAryS,KAAAoB,IAAAixS,EAAApuR,EAAAwuR,WACAH,EAAAtyS,KAAAoB,IAAAkxS,EAAAruR,EAAAyuR,YAEAH,EAAAh3S,KAAA0oB,EAEA,IAEAsuR,EAAAv8S,SAAA,SAAAqwK,GAEAphC,EAAAohC,EAAArsK,QAAA,OAAA6gB,KAAAwrJ,EAAArsK,SACAqsK,EAAArsK,MAAA8jB,WAAAuoJ,EAAArsK,OAAAw4S,EAAA,KAEAnsI,EAAArsK,MAAAqsK,EAAAosI,WAAApsI,EAAAssI,aACAtsI,EAAAusI,WAAAvsI,EAAAosI,UAEApsI,EAAAusI,WAAAvsI,EAAArsK,MAGAg4S,GAAA3rI,EAAAusI,UACA,IAKA,IAAAC,EAAAX,EAAAG,EAAAD,EAAAp6S,OACA86S,EAAAX,EAAAG,EAAAF,EAAAp6S,OACA,GAAA66S,GAAAb,EAKAC,EAAAj8S,SAAA,SAAAqwK,GACAA,EAAAusI,WAAAvsI,EAAAosI,SACA,IAEAL,EAAAp8S,SAAA,SAAAqwK,GACAA,EAAAusI,WAAAP,CACA,QACG,CACH,GAAAS,EAAAd,EAEAC,EAAAj8S,SAAA,SAAAqwK,GACAA,EAAAusI,WAAAvsI,EAAAqsI,UACAV,GAAA3rI,EAAAusI,UACA,QACI,CAEJ,IAAA97Q,EAAAk7Q,EAAAa,EACAv8Q,EAAAw8Q,EAAAD,EAEAZ,EAAAj8S,SAAA,SAAAqwK,GACA,IAAAzmJ,EAAAymJ,EAAAqsI,UAAArsI,EAAAosI,UACApsI,EAAAusI,WAAAvsI,EAAAosI,UAAA7yR,EAAAkX,EAAAR,EACA07Q,GAAA3rI,EAAAusI,UACA,GACA,CAEA,GAAAR,EAAAp6S,OAAA,GACA,IAAA+6S,EAAAf,EAAAI,EAAAp6S,OAEAo6S,EAAAp8S,SAAA,SAAAqwK,GACAA,EAAAusI,WAAAG,CACA,GACA,CACA,CACA,EA+CAC,cApCA,SAAA13F,GAMA,IALA,IAAAt6M,EAAA,CAAgB0O,IAAA,EAAAtO,IAAA,GAEhB6xS,EAAA,CAAiBvjS,IAAA,EAAAtO,IAAA,GACjB8xS,EAAA,EAEAn7S,EAAA,EAAAsxE,EAAAiyI,EAAAtjN,OAAqCD,EAAAsxE,EAAOtxE,IAAA,CAC5C,IAAAogC,EAAAmjL,EAAAvjN,GAEA+5S,EAAA35Q,IACA86Q,EAAAvjS,IAAA1P,KAAAoB,IAAA6xS,EAAAvjS,IAAAyoB,EAAAs6Q,WACAQ,EAAA7xS,IAAApB,KAAAoB,IAAA6xS,EAAA7xS,IAAA+2B,EAAAu6Q,WACAQ,KACIrB,EAAA15Q,IACJn3B,EAAA0O,KAAAyoB,EAAAs6Q,UACAzxS,EAAAI,KAAA+2B,EAAAu6Q,YAEA1xS,EAAA0O,UAAA3W,IAAAo/B,EAAAn+B,OAAAm+B,EAAAn+B,OAAAm+B,EAAAs6Q,UACAzxS,EAAAI,UAAArI,IAAAo/B,EAAAn+B,OAAAm+B,EAAAn+B,OAAAm+B,EAAAu6Q,UAEA,CAOA,OALAQ,IACAlyS,EAAA0O,KAAAwjS,EAAAD,EAAAvjS,IACA1O,EAAAI,KAAA8xS,EAAAD,EAAA7xS,KAGAJ,CACA,EASA6wS,aAAAA,EACAC,aAAAA,uCClIA,IAAAqB,EAAgB9pK,EAAQ,OACxB+pK,EAAwB/pK,EAAQ,OAChCgqK,EAAuBhqK,EAAQ,OAC/BpE,EAAeoE,EAAA,OAAApE,SACftiG,EAAe0mG,EAAA,OAAA1mG,SACf8uF,EAAe4X,EAAA,OAAA5X,SACf/xD,EAAc2pE,EAAA,OAAA3pE,QACd4zO,EAAoBjqK,EAAA,OAAAiqK,cACpBC,EAAgBlqK,EAAA,OAAAkqK,UAChBzwJ,EAAWzZ,EAAA,OAAAyZ,KACX0wJ,EAAgBnqK,EAAQ,OAKxB,SAAAoqK,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAlE,EAAA3kL,GACA,KAAA8oL,UAAA,IAAAZ,EAAAO,GACA,KAAAM,WAAA,IAAAZ,EAAAO,EAAAC,GACA,KAAAC,aAAAA,EACA,KAAAC,WAAAA,EACA,KAAAlE,aAAAA,EACA,KAAA3kL,OAAAA,EACA,KAAAgpL,eAAA,CACA,CAQAR,EAAApwS,UAAA6wS,gBAAA,SAAAC,GACA,YAAAC,YAAAD,EACA,EAEAV,EAAApwS,UAAA+wS,YAAA,SAAAxwM,GAEA,IAAAnmG,EAAA,KAEA,YAAAu2S,WAAAK,KAAAzwM,GAAA,WAIA,GAFAA,EAAA0wM,QAwCA,WAEA,SAAAC,EAAA3wM,EAAA4wM,GACA,OAAA5wM,EAAAvwB,YAAAuwB,EAAAtwB,WAAAswB,EAAAzf,aAAAyf,EAAAjwB,aACA,CACAiwB,EAAAvwB,YAAAmhO,EAAA,MACA5wM,EAAAtwB,WAAAkhO,EAAA,MACA5wM,EAAAzf,aAAAqwN,EAAA,MACA5wM,EAAAjwB,cAAA6gO,EAAA,OAGAA,CACA,CAEA,SAAAC,EAAAprL,GAEA,IADA,IAAAqrL,EAAA,GACA38S,EAAAsxH,EAAArxH,OAAA,EAAuCD,GAAA,EAAQA,IAAA,CAC/C,IAAA48S,EAAAtrL,EAAAtxH,GACAK,EAAAqF,EAAAu2S,WAAAL,gBAAAgB,GACA,QAAA1+S,KAAAmC,EACAA,EAAAuO,eAAA1Q,KACAy+S,EAAAz+S,GAAAmC,EAAAnC,GAGA,CACA,OAAAy+S,CACA,CAEA,SAAAE,EAAAx7M,GAQA,OAPAz2D,EAAAy2D,GACAA,EAAA,CAAAA,EAAAA,EAAAA,EAAAA,GACK15B,EAAA05B,IACL,IAAAA,EAAAphG,SACAohG,EAAA,CAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,KAGAA,CACA,CAEA,IAAAA,EAAA,MAAArgG,OAAAA,OAAAA,OAAAA,GAEA,GAAA6qG,EAAAxrG,MAAA,CACA,IACAy8S,EAAAJ,EADA/0O,EAAAkkC,EAAAxrG,OAAAwrG,EAAAxrG,MAAA,CAAAwrG,EAAAxrG,QAGAy8S,IACAz7M,EAAAm7M,EAAAM,EAAAz7M,IAGAy7M,EAAAz7M,SACAA,EAAAw7M,EAAAC,EAAAz7M,QAEA,CAQA,OANAA,EAAAm7M,EAAA3wM,EAAAxK,GAEAwK,EAAAxK,SACAA,EAAAw7M,EAAAhxM,EAAAxK,cAGArgG,IAAAqgG,EAAA,SAAArgG,IAAAqgG,EAAA,SAAArgG,IAAAqgG,EAAA,SAAArgG,IAAAqgG,EAAA,GACA,KAEAA,CAEA,CAzGA07M,GAEAlxM,EAAA03G,QACA,OAAAy5F,EAAAt3S,EAAAu3S,eAAApxM,IACI,GAAAA,EAAAtB,MACJ,OAAAyyM,EAAAt3S,EAAAw3S,yBAAArxM,IACI,GAAAA,EAAAiT,GACJ,OAAAk+L,EAAAt3S,EAAAy3S,qBAAAtxM,IACI,GAAAA,EAAAuxM,GACJ,OAAAJ,EAAAt3S,EAAA23S,mBAAAxxM,IACI,GAAAA,EAAAggB,MACJ,OAAAmxL,EAAAt3S,EAAA43S,aAAAzxM,IACI,QAAA7qG,IAAA6qG,EAAA9kF,KACJ,OAAAi2R,EAAAt3S,EAAA63S,YAAA1xM,IACI,GAAAA,EAAA2xM,IACJ,OAAAR,EAAAt3S,EAAA+3S,WAAA5xM,IACI,GAAAA,EAAA4kB,MACJ,OAAAusL,EAAAt3S,EAAAg4S,aAAA7xM,IACI,GAAAA,EAAA5V,IACJ,OAAA+mN,EAAAt3S,EAAAi4S,WAAA9xM,IACI,GAAAA,EAAAukB,OACJ,OAAA4sL,EAAAt3S,EAAAk4S,cAAA/xM,IACI,GAAAA,EAAAgyM,GACJ,OAAAb,EAAAt3S,EAAAo4S,UAAAjyM,IAEA,yCAAAz5F,KAAAC,UAAAw5F,EAAA0vM,EAEA,IAEA,SAAAyB,EAAAnxM,GACA,IAAAxK,EAAAwK,EAAA0wM,QAOA,OALAl7M,IACAwK,EAAA6uM,WAAAr5M,EAAA,GAAAA,EAAA,GACAwK,EAAA8uM,WAAAt5M,EAAA,GAAAA,EAAA,IAGAwK,CACA,CAoEA,EAEA6vM,EAAApwS,UAAAyyS,qBAAA,SAAAlyM,GACA,yCAAkC/oF,KAAA+oF,EAAA4kB,OAAA,CAClC,IAAAx/E,EAAA,mBAAAirQ,iBACA,KAAAhpL,OAAAjiF,GAAA46D,EAAA4kB,MACA5kB,EAAA4kB,MAAAx/E,CACA,CACA,EAEAyqQ,EAAApwS,UAAA0yS,2BAAA,SAAAnyM,EAAAigG,GACA,GAAAjgG,EAAAo/G,IAAA,CACA,IAAAxpK,EAAAqqJ,EAAA7pM,MAAA6pM,EAAA5pM,OAAA2pG,EAAAo/G,IAAA,GAAAp/G,EAAAo/G,IAAA,GAAAp/G,EAAAo/G,IAAA,GAAAnf,EAAA7pM,MAAA4pG,EAAAo/G,IAAA,GAAAnf,EAAA5pM,OACA2pG,EAAAoyM,OAAApyM,EAAA6uM,UAAA7uM,EAAA8uM,UAAA7uG,EAAA7pM,MAAAw/C,EACAoqD,EAAAqyM,QAAApyG,EAAA5pM,OAAAu/C,CACA,MAAGoqD,EAAAs/G,OACHt/G,EAAAoyM,OAAApyM,EAAA6uM,UAAA7uM,EAAA8uM,UAAA9uM,EAAAs/G,MAAAlpN,MACA4pG,EAAAqyM,QAAAryM,EAAAsyM,WAAAtyM,EAAAuyM,WAAAvyM,EAAAs/G,MAAAjpN,SAEA2pG,EAAAoyM,OAAApyM,EAAA6uM,UAAA7uM,EAAA8uM,UAAA9uM,EAAA5pG,OAAA6pM,EAAA7pM,MACA4pG,EAAAqyM,QAAAryM,EAAA3pG,QAAA4pM,EAAA5pM,OAAA2pG,EAAAoyM,OAAAnyG,EAAA7pM,MAEA2oC,EAAAihE,EAAA9uB,WAAA8uB,EAAA9uB,SAAA8uB,EAAAoyM,SACApyM,EAAAoyM,OAAApyM,EAAA6uM,UAAA7uM,EAAA8uM,UAAA9uM,EAAA9uB,SACA8uB,EAAAqyM,QAAAryM,EAAAoyM,OAAAnyG,EAAA5pM,OAAA4pM,EAAA7pM,OAGA2oC,EAAAihE,EAAA1pB,YAAA0pB,EAAA1pB,UAAA0pB,EAAAqyM,UACAryM,EAAAqyM,QAAAryM,EAAA1pB,UACA0pB,EAAAoyM,OAAApyM,EAAA6uM,UAAA7uM,EAAA8uM,UAAA9uM,EAAAqyM,QAAApyG,EAAA7pM,MAAA6pM,EAAA5pM,QAGA0oC,EAAAihE,EAAAn0D,WAAAm0D,EAAAn0D,SAAAm0D,EAAAoyM,SACApyM,EAAAoyM,OAAApyM,EAAA6uM,UAAA7uM,EAAA8uM,UAAA9uM,EAAAn0D,SACAm0D,EAAAqyM,QAAAryM,EAAAoyM,OAAAnyG,EAAA5pM,OAAA4pM,EAAA7pM,OAGA2oC,EAAAihE,EAAAwyM,YAAAxyM,EAAAwyM,UAAAxyM,EAAAqyM,UACAryM,EAAAqyM,QAAAryM,EAAAwyM,UACAxyM,EAAAoyM,OAAApyM,EAAA6uM,UAAA7uM,EAAA8uM,UAAA9uM,EAAAqyM,QAAApyG,EAAA7pM,MAAA6pM,EAAA5pM,SAIA2pG,EAAAyyM,WAAA,KAAArC,WAAAv4L,YAAA,YACA,EAEAg4L,EAAApwS,UAAAoyS,aAAA,SAAA7xM,GACA,KAAAqnB,QACA,KAAA6qL,qBAAAlyM,GAGA,IAAAigG,EAAA,KAAAgwG,aAAA4B,aAAA7xM,EAAA4kB,OAIA,OAFA,KAAAutL,2BAAAnyM,EAAAigG,GAEAjgG,CACA,EAEA6vM,EAAApwS,UAAAqyS,WAAA,SAAA9xM,GAEA,IAAAigG,EAAA,KAAAiwG,WAAA4B,WAAA9xM,EAAA5V,KAYA,OAVA,KAAA+nN,2BAAAnyM,EAAAigG,GAEAjgG,EAAAtvF,KAAA,KAAA0/R,WAAAv4L,YAAA,QAGA7X,EAAA5V,IAAA,KAAA8lN,WAAAwC,gBAAA1yM,EAAA5V,IAAA,CACAh0F,MAAA4pG,EAAAoyM,OACA/7S,OAAA2pG,EAAAqyM,UAGAryM,CACA,EAEA6vM,EAAApwS,UAAAiyS,YAAA,SAAA1xM,GAEAA,EAAA2yM,UAAA3yM,EAAA2yM,SAAAC,aAAA13R,OACA8kF,EAAA9kF,KAAA8kF,EAAA2yM,SAAAC,aAAA13R,MAKA,IAAAk1R,EAAA,KAAAA,WAAAt0R,QACAs0R,EAAAz4S,KAAAqoG,GAEA,IAAA5nD,EAAA,KAAA+3P,UAAA0C,aAAA7yM,EAAA9kF,KAAAk1R,GAMA,OAJApwM,EAAA8yM,SAAA16P,EAAA2yF,MACA/qC,EAAA6uM,UAAAz2P,EAAAvM,SACAm0D,EAAA8uM,UAAA12P,EAAA84B,SAEA8uB,CACA,EAEA6vM,EAAApwS,UAAAmyS,WAAA,SAAA5xM,GAKA,GAJAA,EAAA2xM,IAAA9xS,QACAmgG,EAAA2xM,IAAA9xS,MAAA,KAAA2wS,YAAAxwM,EAAA2xM,IAAA9xS,QAGAmgG,EAAA2xM,IAAA/2G,OAAAxmM,OAAA,GAKA,IAJA,IAAAuQ,EAAA,GACAouS,EAAA/yM,EAAA2xM,IAAAoB,WAAA,GACAC,EAAAhzM,EAAA2xM,IAAAqB,aAAAD,EACAE,EAAAjzM,EAAA2xM,IAAAsB,YAAA,UACA9+S,EAAA,EAAAsxE,EAAAu6B,EAAA2xM,IAAA/2G,OAAAxmM,OAA8CD,EAAAsxE,EAAOtxE,IAAA,CACrD,IAAAw/C,EAAAqsD,EAAA2xM,IAAA/2G,OAAAzmM,GACA++S,EAAAv/P,EAAAi/P,aAAAO,UAAAJ,EACAK,EAAAz/P,EAAAi/P,aAAAS,WAAAJ,EACAK,EAAA3/P,EAAAi/P,aAAAW,gBAAAP,EACAp3R,EAAA+zR,EAAAh8P,EAAA6/P,UACA7uS,EAAAhN,KAAA,CACA,CAAMujB,KAAAy4B,EAAAi/P,aAAA13R,KAAA6pG,kBAAAnpG,EAAAk3F,UAAA,OAAAt+G,MAAA0+S,EAAA19M,OAAA49M,GACN,CAAMl4R,KAAA,QAAA6pG,kBAAAnpG,EAAAk3F,UAAA,QAAA2gM,YAAA9/P,EAAA6/P,SAAAh/S,MAAA8+S,EAAA99M,OAAA,GAAA49M,EAAA,KAAAA,EAAA,MAEN,CAGApzM,EAAA2xM,IAAA+B,OAAA,CACA1zL,MAAA,CACA2zL,eAAA,EACA9uS,OAAA,aACAF,KAAAA,GAEAwhF,OAAA,aAGA6Z,EAAA2xM,IAAA+B,OAAA,KAAAlD,YAAAxwM,EAAA2xM,IAAA+B,OACA,CAEA,OAAA1zM,CACA,EAEA6vM,EAAApwS,UAAA4xS,yBAAA,SAAArxM,GACA,IAAA+qC,EAAA/qC,EAAAtB,MAEAsB,EAAA6uM,UAAA,EACA7uM,EAAA8uM,UAAA,EAEA,QAAA36S,EAAA,EAAAsxE,EAAAslE,EAAA32I,OAAmCD,EAAAsxE,EAAOtxE,IAC1C42I,EAAA52I,GAAA,KAAAq8S,YAAAzlK,EAAA52I,IAEA6rG,EAAA6uM,UAAAzyS,KAAAoB,IAAAwiG,EAAA6uM,UAAA9jK,EAAA52I,GAAA06S,WACA7uM,EAAA8uM,UAAA1yS,KAAAoB,IAAAwiG,EAAA8uM,UAAA/jK,EAAA52I,GAAA26S,WAGA,OAAA9uM,CACA,EAEA6vM,EAAApwS,UAAAm0S,eAAA,WACA,YAAAzD,UAAA0D,aAAA,WAAAzD,WACA,EAEAP,EAAApwS,UAAAq0S,qBAAA,SAAA1D,EAAA2D,EAAA74S,GA8CA,IAAA4/E,EACAnwD,EAAAylR,EAAAv4L,YAAA,gBAAAu4L,EAAAv4L,YAAA,kBAEA,OAAA38G,GACA,aACA4/E,EApBA,SAAAi5N,EAAAppR,GAEA,IAAA6kL,EAAAukG,EAAAt0L,SAAA,EACA,OACA8E,OAAA,EACAx4G,EAAAyjM,EACAzzK,EAAAg4Q,EAAA19S,OAAA09S,EAAA38F,WAAA28F,EAAA9sH,UAAA8sH,EAAAt0L,SAAA,EACAmqF,GAAA4F,EACA3c,GAAA2c,EACAt0M,KAAA,UACAspH,UAAA75F,IAGA,CAOAqpR,CAAAD,EAAAppR,GACA,MAEA,aACAmwD,EAvCA,SAAAi5N,EAAAppR,GAEA,IAAAtL,EAAA00R,EAAAt0L,SAAA,EACA,OACA8E,OAAA,EACAx4G,EAAA,EACAgwB,EAAAg4Q,EAAA19S,OAAA09S,EAAA38F,WAAA28F,EAAA9sH,UAAA8sH,EAAAt0L,SAAA,EAAApgG,EAAA,EACApF,EAAAoF,EACAnT,EAAAmT,EACAnkB,KAAA,OACAyvB,MAAAA,IAGA,CA0BAspR,CAAAF,EAAAppR,GACA,MAEA,WACAmwD,EAAA,GACA,MAGA,QACAA,EA/DA,SAAAi5N,EAAAppR,GAEA,IAAA6kL,EAAAukG,EAAAt0L,SAAA,EACA,OACA8E,OAAA,EACAx4G,EAAAyjM,EACAzzK,EAAAg4Q,EAAA19S,OAAA09S,EAAA38F,WAAA28F,EAAA9sH,UAAA8sH,EAAAt0L,SAAA,EACAmqF,GAAA4F,EACA3c,GAAA2c,EACAt0M,KAAA,UACAyvB,MAAAA,IAGA,CAkDAupR,CAAAH,EAAAppR,GAOA,OAHAmwD,EAAA+zN,UAAA/zN,EAAAg0N,UAAAiF,EAAA39S,MACA0kF,EAAAw3N,WAAAx3N,EAAAy3N,WAAAwB,EAAA19S,OAEAykF,CACA,EAEA+0N,EAAApwS,UAAA00S,mBAAA,SAAAp7P,EAAAq3P,EAAAl1S,EAAAksC,GACA,SAAAgtQ,EAAAr7P,GAKA,OAAAA,EAAA,EACAA,EAAA1B,WALA,SAAAg9P,EAAAn1S,GACA,OAAAA,GAAA,GAAAm1S,GAAAn1S,EAAA,0CAAAA,EAAA,KACA,CAMAm1S,CAAAt7P,EAAA,EACA,CAEA,SAAAu7P,EAAAv7P,GACA,GAAAA,EAAA,GAAAA,EAAA,KACA,OAAAA,EAAA1B,WAEA,IACoHljD,EADpH+K,EAAA65C,EACAwkL,EAAA,CAAiBx+K,EAAA,IAAA6kF,GAAA,IAAAlxG,EAAA,IAAA6hR,GAAA,IAAA9hR,EAAA,IAAA+hR,GAAA,GAAAx2H,EAAA,GAAAy2H,GAAA,GAAAl3Q,EAAA,GAAAm3Q,GAAA,EAAAv2H,EAAA,EAAA9qB,GAAA,EAAAxgI,EAAA,GAAmG8hR,EAAA,GACpH,IAAAxgT,KAAAopO,EACA,KAAAr+N,GAAAq+N,EAAAppO,IACAwgT,GAAAxgT,EACA+K,GAAAq+N,EAAAppO,GAGA,OAAAwgT,CACA,CAMA,IAAAC,EACA,OAAA15S,GACA,WACA05S,EAAA,KACA,MAEA,kBACAA,EAAAR,EAAAr7P,GAAAvlB,cACA,MAEA,kBACAohR,EAAAR,EAAAr7P,GACA,MAEA,kBACA67P,EAAAN,EAAAv7P,GACA,MAEA,kBACA67P,EAAAN,EAAAv7P,GAAAjyC,cACA,MAGA,QACA8tS,EA5BA,SAAA77P,GACA,OAAAA,EAAA1B,UACA,CA0BAw9P,CAAA97P,GAIA,UAAA67P,EACA,SAGAxtQ,IACA00B,EAAA10B,IACAA,EAAA,KACAwtQ,EAAAxtQ,EAAA,GAAAwtQ,GAGAxtQ,EAAA,KACAwtQ,GAAAxtQ,EAAA,IAEAwtQ,GAAA,KAEAA,GAAAxtQ,EAAA,KAIA,IAAA0tQ,EAAA,CAAmB55R,KAAA05R,GACnBG,EAAA3E,EAAAv4L,YAAA,eAKA,OAJAk9L,IACAD,EAAAnqR,MAAAoqR,GAGA,CAAUjC,SAAA,KAAA3C,UAAA0C,aAAAiC,EAAA1E,GAAArlK,MACV,EAEA8kK,EAAApwS,UAAA6xS,qBAAA,SAAAtxM,GACA,IAAAxrG,EAAA,KAAA47S,WAAAt0R,QACAivH,EAAA/qC,EAAAiT,GACAjT,EAAA9kG,KAAA8kG,EAAA9kG,MAAA,OACA8kG,EAAAg1M,SAAA,KAAApB,iBACA5zM,EAAA6uM,UAAA,EACA7uM,EAAA8uM,UAAA,EAEA,QAAA36S,EAAA,EAAAsxE,EAAAslE,EAAA32I,OAAmCD,EAAAsxE,EAAOtxE,IAAA,CAC1C,IAAAw/C,EAAAo3F,EAAA52I,GAAA,KAAAq8S,YAAAzlK,EAAA52I,IAEAw/C,EAAA49P,IAAA59P,EAAAs/D,KACAt/D,EAAAshQ,WAAA,KAAAnB,qBAAAt/S,EAAAwrG,EAAAg1M,SAAArhQ,EAAAqnK,UAAAh7G,EAAA9kG,OAGA8kG,EAAA6uM,UAAAzyS,KAAAoB,IAAAwiG,EAAA6uM,UAAA9jK,EAAA52I,GAAA06S,UAAA7uM,EAAAg1M,SAAA5+S,OACA4pG,EAAA8uM,UAAA1yS,KAAAoB,IAAAwiG,EAAA8uM,UAAA/jK,EAAA52I,GAAA26S,UAAA9uM,EAAAg1M,SAAA5+S,MACA,CAEA,OAAA4pG,CACA,EAEA6vM,EAAApwS,UAAA+xS,mBAAA,SAAAxxM,GACA,IAAAxrG,EAAA,KAAA47S,WAAAt0R,QACAivH,EAAA/qC,EAAAuxM,GACAvxM,EAAA9kG,KAAA8kG,EAAA9kG,MAAA,UACA8kG,EAAA54D,UAAA44D,EAAA54D,WAAA,IACA44D,EAAAb,SAAAa,EAAAb,WAAA,EACApgE,EAAAihE,EAAA1pG,SACA0pG,EAAA1pG,MAAA0pG,EAAAb,SAAA4rC,EAAA32I,OAAA,GAEA4rG,EAAAg1M,SAAA,KAAApB,iBACA5zM,EAAA6uM,UAAA,EACA7uM,EAAA8uM,UAAA,EAGA,IADA,IAAA/1P,EAAAinD,EAAA1pG,MACAnC,EAAA,EAAAsxE,EAAAslE,EAAA32I,OAAmCD,EAAAsxE,EAAOtxE,IAAA,CAG1C,KAFAw/C,EAAAo3F,EAAA52I,GAAA,KAAAq8S,YAAAzlK,EAAA52I,KAEAo9S,KAAA59P,EAAAs/D,GAAA,CACA,IAAAiiM,EAAAn2Q,EAAA4U,EAAAoF,SAAApF,EAAAoF,QAAAA,EACApF,EAAAshQ,WAAA,KAAAd,mBAAAe,EAAA1gT,EAAAm/C,EAAAqnK,UAAAh7G,EAAA9kG,KAAA8kG,EAAA54D,WACAuM,EAAAshQ,WAAAnC,WACA9yM,EAAAg1M,SAAA5+S,MAAAgG,KAAAoB,IAAAwiG,EAAAg1M,SAAA5+S,MAAAu9C,EAAAshQ,WAAAnC,SAAA,GAAA18S,OAEA,CAEA4pG,EAAA6uM,UAAAzyS,KAAAoB,IAAAwiG,EAAA6uM,UAAA9jK,EAAA52I,GAAA06S,WACA7uM,EAAA8uM,UAAA1yS,KAAAoB,IAAAwiG,EAAA8uM,UAAA/jK,EAAA52I,GAAA26S,WAEA9uM,EAAAb,SACApmD,IAEAA,GAEA,CAKA,IAHAinD,EAAA6uM,WAAA7uM,EAAAg1M,SAAA5+S,MACA4pG,EAAA8uM,WAAA9uM,EAAAg1M,SAAA5+S,MAEAjC,EAAA,EAAAsxE,EAAAslE,EAAA32I,OAAmCD,EAAAsxE,EAAOtxE,IAAA,CAC1C,IAAAw/C,KAAAo3F,EAAA52I,IACAo9S,IAAA59P,EAAAs/D,KACAt/D,EAAAshQ,WAAApG,UAAAl7P,EAAAshQ,WAAAnG,UAAA9uM,EAAAg1M,SAAA5+S,MAEA,CAEA,OAAA4pG,CACA,EAEA6vM,EAAApwS,UAAA2xS,eAAA,SAAApxM,GACA,IAAA03G,EAAA13G,EAAA03G,QACA13G,EAAAm1M,KAAA,KAAA/E,WAAAv4L,YAAA,gBAEA,QAAA1jH,EAAA,EAAAsxE,EAAAiyI,EAAAtjN,OAAqCD,EAAAsxE,EAAOtxE,IAC5CujN,EAAAvjN,GAAA,KAAAq8S,YAAA94F,EAAAvjN,IAGA,IAAAmN,EAAAmuS,EAAAL,cAAA13F,GAEA09F,EAAA19F,EAAAtjN,OAAA,EAAAsjN,EAAAtjN,OAAA,IAIA,OAHA4rG,EAAA6uM,UAAAvtS,EAAAwK,IAAAk0F,EAAAm1M,KAAAC,EACAp1M,EAAA8uM,UAAAxtS,EAAA9D,IAAAwiG,EAAAm1M,KAAAC,EAEAp1M,CACA,EAEA6vM,EAAApwS,UAAAgyS,aAAA,SAAAzxM,IAiMA,SAAAA,GAKA,GAJAA,EAAAggB,MAAAn7G,SACAm7F,EAAAggB,MAAAn7G,OAAA,QAGAw8H,EAAArhC,EAAAggB,MAAAn7G,QAGA,IAFAm7F,EAAAggB,MAAAn7G,OAAA,CAAAm7F,EAAAggB,MAAAn7G,QAEAm7F,EAAAggB,MAAAn7G,OAAAzQ,OAAA4rG,EAAAggB,MAAAr7G,KAAA,GAAAvQ,QACA4rG,EAAAggB,MAAAn7G,OAAAlN,KAAAqoG,EAAAggB,MAAAn7G,OAAAm7F,EAAAggB,MAAAn7G,OAAAzQ,OAAA,IAIA,QAAAD,EAAA,EAAAsxE,EAAAu6B,EAAAggB,MAAAn7G,OAAAzQ,OAAgDD,EAAAsxE,EAAOtxE,IAAA,CACvD,IAAA+X,EAAA8zF,EAAAggB,MAAAn7G,OAAA1Q,IACA4qC,EAAA7yB,IAAAm1H,EAAAn1H,MACA8zF,EAAAggB,MAAAn7G,OAAA1Q,GAAA,CAA6BiC,MAAA8V,GAE7B,CACA,CAnNAmpS,CAAAr1M,GACAA,EAAAs1M,QA2DA,SAAAtJ,GACA,IAAA7lN,EAAA6Z,EAAA7Z,OA8CA,OA5CAk7C,EAAAl7C,KACAA,EAAA6lN,EAAA7lN,IA2CA+4D,EAxCA,CACAq2J,WAAA,SAAAphT,EAAA6rG,GACA,QACA,EACAw1M,WAAA,SAAArhT,EAAA6rG,GACA,QACA,EACAy1M,WAAA,SAAAthT,EAAA6rG,GACA,aACA,EACA01M,WAAA,SAAAvhT,EAAA6rG,GACA,aACA,EACA21M,WAAA,SAAAxhT,EAAA6rG,GACA,WACA,EACA41M,WAAA,SAAAzhT,EAAA6rG,GACA,WACA,EACA/qB,YAAA,SAAA9gF,EAAA6rG,GACA,QACA,EACA61M,aAAA,SAAA1hT,EAAA6rG,GACA,QACA,EACA81M,WAAA,SAAA3hT,EAAA6rG,GACA,QACA,EACAlU,cAAA,SAAA33F,EAAA6rG,GACA,QACA,EACAkgB,UAAA,SAAA/rH,EAAA6rG,GACA,WACA,EACAiiF,YAAA,SAAA9tL,EAAA6rG,GACA,QACA,EACA+1M,eAAA,GAGA5vN,EACA,CA3GA6vN,CAAA,KAAAhK,cACAhsM,EAAAmtH,SA4GA,SAAAhnI,GAKA,IAJA,IAAA8vN,EAAA,GACAC,EAAA,EACAC,EAAA,EAEAhiT,EAAA,EAAAsxE,EAAAu6B,EAAAggB,MAAAn7G,OAAAzQ,OAAgDD,EAAAsxE,EAAOtxE,IAAA,CACvD,IAAAiiT,EAAAD,EAAAhwN,EAAAqvN,WAAArhT,EAAA6rG,GAAA7Z,EAAAlR,YAAA9gF,EAAA6rG,GACAi2M,EAAAt+S,KAAAy+S,GACAF,GAAAE,EACAD,EAAAhwN,EAAA0vN,aAAA1hT,EAAA6rG,EACA,CAIA,OACA12D,MAHA4sQ,GAAAC,EAAAhwN,EAAAqvN,WAAAx1M,EAAAggB,MAAAn7G,OAAAzQ,OAAA4rG,GAIAi2M,QAAAA,EAEA,CA9HAI,CAAAr2M,EAAAs1M,SAEA,IACA7yI,EAAAxrF,EAAAq/N,EAAA9mO,EADA+mO,EAAA,GAGA,IAAA9zI,EAAA,EAAA6zI,EAAAt2M,EAAAggB,MAAAr7G,KAAA,GAAAvQ,OAAiDquK,EAAA6zI,EAAY7zI,IAAA,CAC7D,IAAAluI,EAAAyrE,EAAAggB,MAAAn7G,OAAA49J,GAIA,IAHAluI,EAAAs6Q,UAAA,EACAt6Q,EAAAu6Q,UAAA,EAEA73N,EAAA,EAAAzH,EAAAwwB,EAAAggB,MAAAr7G,KAAAvQ,OAA+C6iF,EAAAzH,EAAYyH,IAAA,CAC3D,IAAAu/N,EAAAx2M,EAAAggB,MAAAr7G,KAAAsyE,GACA7+B,EAAAo+P,EAAA/zI,GACA,QAAAttK,IAAAijD,EAEA,MADA7oC,QAAA+I,MAAA,uBAAAk+R,EAAA,WAAAx2M,GACA,4CAEA,OAAA5nD,IACAA,EAAA,IAGAA,EAAAq+P,SACAr+P,EAAAo+P,EAAA/zI,GAAA,KAAA2tI,WAAAK,KAAAr4P,EAAAs+P,EAAA,KAAAt+P,KAEA4pE,SAAA5pE,EAAA4pE,QAAA,GACA20L,EAAAH,EAAA/zI,EAAArqH,EAAA4pE,SACAu0L,EAAA5+S,KAAA,CAAqB8qK,IAAAA,EAAAm0I,KAAAx+P,EAAA4pE,QAAAn2E,SAAAuM,EAAAy2P,UAAA39N,SAAA94B,EAAA02P,cAErBv6Q,EAAAs6Q,UAAAzyS,KAAAoB,IAAA+2B,EAAAs6Q,UAAAz2P,EAAAy2P,WACAt6Q,EAAAu6Q,UAAA1yS,KAAAoB,IAAA+2B,EAAAu6Q,UAAA12P,EAAA02P,aAIA12P,EAAA6pE,SAAA7pE,EAAA6pE,QAAA,GACA40L,EAAA72M,EAAAggB,MAAA/oC,EAAAwrF,EAAArqH,EAAA6pE,QAEA,CACA,EA2FA,WAGA,IAFA,IAAAi8D,EAAAv8K,EAEAxN,EAAA,EAAAsxE,EAAA8wO,EAAAniT,OAAuCD,EAAAsxE,EAAOtxE,IAAA,CAC9C,IAAAyiT,EAAAL,EAAApiT,GAEA2iT,EAAAC,EAAAH,EAAAn0I,IAAAm0I,EAAAA,KAAA52M,EAAAmtH,UACA6pF,EAAAJ,EAAA/qQ,SAAAirQ,EAAAjrQ,SACAorQ,EAAAL,EAAA1lO,SAAA4lO,EAAA5lO,SAEA,GAAA8lO,EAAA,EAGA,IAFA94H,EAAA84H,EAAAJ,EAAAA,KAEAj1S,EAAA,EAAgBA,EAAAi1S,EAAAA,KAAej1S,IAC/Bq+F,EAAAggB,MAAAn7G,OAAA+xS,EAAAn0I,IAAA9gK,GAAAktS,WAAA3wH,EAIA,GAAA+4H,EAAA,EAGA,IAFA/4H,EAAA+4H,EAAAL,EAAAA,KAEAj1S,EAAA,EAAgBA,EAAAi1S,EAAAA,KAAej1S,IAC/Bq+F,EAAAggB,MAAAn7G,OAAA+xS,EAAAn0I,IAAA9gK,GAAAmtS,WAAA5wH,CAGA,CACA,CAnHAg5H,GAEA,IAAA51S,EAAAmuS,EAAAL,cAAApvM,EAAAggB,MAAAn7G,QAKA,OAHAm7F,EAAA6uM,UAAAvtS,EAAAwK,IAAAk0F,EAAAmtH,SAAA7jL,MACA02D,EAAA8uM,UAAAxtS,EAAA9D,IAAAwiG,EAAAmtH,SAAA7jL,MAEA02D,EAEA,SAAA02M,EAAA11L,EAAA5oE,GACA,kBAKA,OAJAy1E,EAAAz1E,KACAA,EAAA8nE,UAAAc,EAAAovL,WAAAv4L,YAAA,aACAz/D,EAAA6pI,YAAAjhE,EAAAovL,WAAAv4L,YAAA,gBAEAmJ,EAAAwvL,YAAAp4P,EACA,CACA,CAoGA,SAAA2+P,EAAAt0I,EAAAm0I,EAAAX,GAGA,IAFA,IAAA74S,EAAA,CAAiByuC,SAAA,EAAAqlC,SAAA,GAEjB/8E,EAAA,EAAkBA,EAAAyiT,EAAUziT,IAC5BiJ,EAAAyuC,UAAAm0D,EAAAggB,MAAAn7G,OAAA49J,EAAAtuK,GAAA06S,WAAA16S,EAAA8hT,EAAAA,QAAAxzI,EAAAtuK,GAAA,GACAiJ,EAAA8zE,UAAA8uB,EAAAggB,MAAAn7G,OAAA49J,EAAAtuK,GAAA26S,WAAA36S,EAAA8hT,EAAAA,QAAAxzI,EAAAtuK,GAAA,GAGA,OAAAiJ,CACA,CAEA,SAAAu5S,EAAAH,EAAA/zI,EAAAm0I,GACA,QAAAziT,EAAA,EAAkBA,EAAAyiT,EAAUziT,IAC5BqiT,EAAA/zI,EAAAtuK,GAAA,CACAsiT,OAAA,EACA5H,UAAA,EACAC,UAAA,EACA7sL,QAAAu0L,EAAA/zI,GAAAxgD,QAGA,CAEA,SAAA40L,EAAA72L,EAAA/oC,EAAAwrF,EAAAm0I,GACA,QAAAziT,EAAA,EAAkBA,EAAAyiT,EAAUziT,IAC5B6rH,EAAAr7G,KAAAsyE,EAAA9iF,GAAAsuK,GAAA,CACAg0I,OAAA,EACA5H,UAAA,EACAC,UAAA,EACA5uL,UAAAF,EAAAr7G,KAAAsyE,GAAAwrF,GAAAviD,UACA+hE,YAAAjiE,EAAAr7G,KAAAsyE,GAAAwrF,GAAAwf,YAGA,CAsBA,EAEA4tH,EAAApwS,UAAAsyS,cAAA,SAAA/xM,GAGA,IAFA,IAAA9zF,EAAA,EAAA+N,EAAA,EAEA9lB,EAAA,EAAAsxE,EAAAu6B,EAAAukB,OAAAnwH,OAAyCD,EAAAsxE,EAAOtxE,IAAA,CAChD,IAAAgjT,EAAAn3M,EAAAukB,OAAApwH,GAEA,OAAAgjT,EAAAj8S,MACA,cACAgR,EAAA9P,KAAAoB,IAAA0O,EAAAirS,EAAAprS,EAAAorS,EAAAvtG,IACA3vL,EAAA7d,KAAAoB,IAAAyc,EAAAk9R,EAAAp7Q,EAAAo7Q,EAAAtkH,IACA,MACA,WACA3mL,EAAA9P,KAAAoB,IAAA0O,EAAAirS,EAAAprS,EAAAorS,EAAAjrS,GACA+N,EAAA7d,KAAAoB,IAAAyc,EAAAk9R,EAAAp7Q,EAAAo7Q,EAAAl9R,GACA,MACA,WACA/N,EAAA9P,KAAAoB,IAAA0O,EAAAirS,EAAAtqP,GAAAsqP,EAAAnqP,IACA/yC,EAAA7d,KAAAoB,IAAAyc,EAAAk9R,EAAA16N,GAAA06N,EAAAz6N,IACA,MACA,eACA,QAAA75D,EAAA,EAAA+nK,EAAAusH,EAAAhtR,OAAA/1B,OAAgDyuB,EAAA+nK,EAAS/nK,IACzD3W,EAAA9P,KAAAoB,IAAA0O,EAAAirS,EAAAhtR,OAAAtH,GAAA9W,GACAkO,EAAA7d,KAAAoB,IAAAyc,EAAAk9R,EAAAhtR,OAAAtH,GAAAkZ,GAIA,CAMA,OAJAikE,EAAA6uM,UAAA7uM,EAAA8uM,UAAA5iS,EACA8zF,EAAAsyM,WAAAtyM,EAAAuyM,WAAAt4R,EACA+lF,EAAAyyM,WAAA,KAAArC,WAAAv4L,YAAA,aAEA7X,CACA,EAEA6vM,EAAApwS,UAAAwyS,UAAA,SAAAjyM,GAGA,OAFAA,EAAA4vM,EAAAxtS,QAAA49F,IACAyyM,WAAA,KAAArC,WAAAv4L,YAAA,aACA7X,CACA,EAEAvsG,EAAAC,QAAAm8S,4DCvyBAxuK,EAAeoE,EAAA,OAAApE,SACftiG,EAAe0mG,EAAA,OAAA1mG,SACf4mQ,EAAgBlgK,EAAA,OAAAkgK,UAChB7pO,EAAc2pE,EAAA,OAAA3pE,QACdysC,EAAkBk9B,EAAA,OAAAl9B,YAClBmnM,EAAoBjqK,EAAA,OAAAiqK,cAEpB,SAAA0H,IAEA,CAEAA,EAAA33S,UAAA43S,mBAAA,SAAA9G,GAIA,OAHA,KAAAvsS,WAAA,KACA,KAAAszS,KAAA,GACA,KAAAC,eAAA,GACA,KAAAC,eAAAjH,EACA,EAEA6G,EAAA33S,UAAA+3S,eAAA,SAAAx3M,GAgBA,GAdAlkC,EAAAkkC,GACAA,EAAA,CAAWtB,MAAAsB,GACRqhC,EAAArhC,GACHA,EAAA,CAAW9kF,KAAA8kF,GACRjhE,EAAAihE,IAAA2lM,EAAA3lM,GACHA,EAAA,CAAW9kF,KAAA8kF,EAAA3oD,iBACRliD,IAAA6qG,GAAA,OAAAA,GAEA,IAAA9tG,OAAAC,KAAA6tG,GAAA5rG,OADH4rG,EAAA,CAAW9kF,KAAA,MAGR,SAAA8kF,SAAA7qG,IAAA6qG,EAAA9kF,MAAA,OAAA8kF,EAAA9kF,OACH8kF,EAAA9kF,KAAA,IAGA8kF,EAAA03G,QACA,YAAA+/F,kBAAAz3M,GACG,GAAAA,EAAAtB,MACH,YAAAg5M,4BAAA13M,GACG,GAAAA,EAAAiT,GACH,YAAA0kM,eAAA33M,GACG,GAAAA,EAAAuxM,GACH,YAAAoG,eAAA33M,GACG,GAAAA,EAAAggB,MACH,YAAA43L,gBAAA53M,GACG,QAAA7qG,IAAA6qG,EAAA9kF,KACH,YAAA28R,eAAA73M,GACG,GAAAA,EAAA2xM,IACH,YAAAmG,cAAA93M,GACG,GAAAA,EAAA4kB,MACH,YAAAmzL,gBAAA/3M,GACG,GAAAA,EAAA5V,IACH,YAAA4tN,cAAAh4M,GACG,GAAAA,EAAAukB,OACH,YAAA0zL,iBAAAj4M,GACG,GAAAA,EAAAgyM,GACH,YAAAkG,aAAAl4M,GACG,GAAAA,EAAAm4M,eAAAn4M,EAAAo4M,cACH,YAAAP,eAAA73M,GAEA,yCAAAz5F,KAAAC,UAAAw5F,EAAA0vM,EAEA,EAEA0H,EAAA33S,UAAAg4S,kBAAA,SAAAz3M,GAGA,IAFA,IAAA03G,EAAA13G,EAAA03G,QAEAvjN,EAAA,EAAAsxE,EAAAiyI,EAAAtjN,OAAqCD,EAAAsxE,EAAOtxE,IAC5CujN,EAAAvjN,GAAA,KAAAqjT,eAAA9/F,EAAAvjN,IAGA,OAAA6rG,CACA,EAEAo3M,EAAA33S,UAAAi4S,4BAAA,SAAA13M,GAGA,IAFA,IAAA+qC,EAAA/qC,EAAAtB,MAEAvqG,EAAA,EAAAsxE,EAAAslE,EAAA32I,OAAmCD,EAAAsxE,EAAOtxE,IAC1C42I,EAAA52I,GAAA,KAAAqjT,eAAAzsK,EAAA52I,IAGA,OAAA6rG,CACA,EAEAo3M,EAAA33S,UAAAk4S,eAAA,SAAA33M,GAGA,IAFA,IAAA+qC,EAAA/qC,EAAAiT,IAAAjT,EAAAuxM,GAEAp9S,EAAA,EAAAsxE,EAAAslE,EAAA32I,OAAmCD,EAAAsxE,EAAOtxE,IAC1C42I,EAAA52I,GAAA,KAAAqjT,eAAAzsK,EAAA52I,IAGA,OAAA6rG,CACA,EAEAo3M,EAAA33S,UAAAm4S,gBAAA,SAAA53M,GACA,IAAAyiE,EAAAxrF,EAAAq/N,EAAA9mO,EAEA,IAAAizF,EAAA,EAAA6zI,EAAAt2M,EAAAggB,MAAAr7G,KAAA,GAAAvQ,OAAiDquK,EAAA6zI,EAAY7zI,IAC7D,IAAAxrF,EAAA,EAAAzH,EAAAwwB,EAAAggB,MAAAr7G,KAAAvQ,OAA+C6iF,EAAAzH,EAAYyH,IAAA,CAC3D,IAAAu/N,EAAAx2M,EAAAggB,MAAAr7G,KAAAsyE,GACA7+B,EAAAo+P,EAAA/zI,QACAttK,IAAAijD,IACA,OAAAA,IACAA,EAAA,IAEAA,EAAAq+P,QACAD,EAAA/zI,GAAA,KAAA+0I,eAAAp/P,IAGA,CAGA,OAAA4nD,CACA,EAEAo3M,EAAA33S,UAAAo4S,eAAA,SAAA73M,GACA,GAAAA,EAAAq4M,QAAA,CACAv8O,EAAAkkC,EAAAq4M,WACAr4M,EAAAq4M,QAAA,CAAAr4M,EAAAq4M,UAGA,QAAAlkT,EAAA,EAAAsxE,EAAAu6B,EAAAq4M,QAAAjkT,OAA2CD,EAAAsxE,EAAOtxE,IAAA,CAClDktI,EAAArhC,EAAAq4M,QAAAlkT,MACA6rG,EAAAq4M,QAAAlkT,GAAA,aAGA,IAAAmkT,EAAAt4M,EAAAq4M,QAAAlkT,GAEA,KAAAmjT,KAAAgB,KACA,KAAAhB,KAAAgB,GAAA,CAA6B3G,IAAA,CAAO/2G,OAAA,GAAA29G,SAAA,KAGpCv4M,EAAArgG,KACAqgG,EAAArgG,GAAA,OAAA24S,EAAA,SAAAhB,KAAAgB,GAAA3G,IAAA/2G,OAAAxmM,QAGA,IAAAokT,EAAA,CACAhF,SAAA,KAAAiF,mBAAAz4M,GACA4yM,aAAA5yM,GAEA,KAAAs3M,KAAAgB,GAAA3G,IAAA/2G,OAAAjjM,KAAA6gT,EACA,CACA,CAEA,GAAAx4M,EAAArgG,GACA,QAAA43S,eAAAv3M,EAAArgG,IAAA,CACA,SAAA43S,eAAAv3M,EAAArgG,IAAA44S,QACA,iBAAAv4M,EAAArgG,GAAA,mBAGA,KAAA43S,eAAAv3M,EAAArgG,IAAA6zS,SAAA,KAAAiF,mBAAAz4M,GACA,KAAAu3M,eAAAv3M,EAAArgG,IAAAizS,aAAA5yM,EACA,KAAAu3M,eAAAv3M,EAAArgG,IAAA44S,SAAA,CACA,MACA,KAAAhB,eAAAv3M,EAAArgG,IAAA,CACA6zS,SAAA,KAAAiF,mBAAAz4M,GACA4yM,aAAA5yM,GA4BA,GAvBAA,EAAAm4M,gBACA,KAAAZ,eAAAv3M,EAAAm4M,iBACA,KAAAZ,eAAAv3M,EAAAm4M,eAAA,CACA3E,SAAA,GACAZ,aAAA,GACA2F,SAAA,IAGAv4M,EAAA9kF,KAAA,QACA8kF,EAAA+kB,kBAAA/kB,EAAAm4M,cACAn4M,EAAA04M,SAAA,KAAAnB,eAAAv3M,EAAAm4M,gBAGAn4M,EAAAo4M,gBACA,KAAAb,eAAAv3M,EAAAo4M,iBACA,KAAAb,eAAAv3M,EAAAo4M,eAAA,CAA+C5E,SAAA,GAAY+E,SAAA,IAG3Dv4M,EAAA9kF,KAAA,GACA8kF,EAAA+kB,kBAAA/kB,EAAAo4M,cACAp4M,EAAA2yM,SAAA,KAAA4E,eAAAv3M,EAAAo4M,gBAGAp4M,EAAA9kF,MAAA8kF,EAAA9kF,KAAAA,KACA8kF,EAAA9kF,KAAA,MAAAs8R,eAAAx3M,EAAA9kF,YACG,GAAA4gD,EAAAkkC,EAAA9kF,MAAA,CACH,IAAAy9R,GAAA,EAMA,IALA,YAAA30S,aACA,KAAAA,WAAAg8F,EACA24M,GAAA,GAGAxkT,EAAA,EAAAsxE,EAAAu6B,EAAA9kF,KAAA9mB,OAAwCD,EAAAsxE,EAAOtxE,IAC/C6rG,EAAA9kF,KAAA/mB,GAAA,KAAAqjT,eAAAx3M,EAAA9kF,KAAA/mB,IAGAwkT,IACA,KAAA30S,WAAA,KAEA,CAEA,OAAAg8F,CACA,EAEAo3M,EAAA33S,UAAAq4S,cAAA,SAAA93M,GAQA,GAPAA,EAAA2xM,IAAAhyS,KACAqgG,EAAA2xM,IAAAhyS,GAAA,aAGAqgG,EAAA2xM,IAAA9xS,MAAAmgG,EAAA2xM,IAAA9xS,MAAA,KAAA23S,eAAAx3M,EAAA2xM,IAAA9xS,OAAA,KACAmgG,EAAA2xM,IAAA/2G,OAAA,GAEA,KAAA08G,KAAAt3M,EAAA2xM,IAAAhyS,IAAA,CACA,SAAA23S,KAAAt3M,EAAA2xM,IAAAhyS,IAAAgyS,IAAA4G,QACA,aAAAv4M,EAAA2xM,IAAAhyS,GAAA,mBAGAqgG,EAAA2xM,IAAA/2G,OAAA,KAAA08G,KAAAt3M,EAAA2xM,IAAAhyS,IAAAgyS,IAAA/2G,MACA,CAIA,OAFA,KAAA08G,KAAAt3M,EAAA2xM,IAAAhyS,IAAAqgG,EAEAA,CACA,EAEAo3M,EAAA33S,UAAAs4S,gBAAA,SAAA/3M,GAIA,OAHAuI,EAAAvI,EAAA4kB,MAAA1pH,OAAAqtG,EAAAvI,EAAA4kB,MAAAxsE,OAAA,WAAA4nD,EAAA4kB,MAAA1pH,OAAA4gE,EAAAkkC,EAAA4kB,MAAAxsE,QACA4nD,EAAA4kB,MAAegS,EAAM/7D,KAAAmlC,EAAA4kB,MAAAxsE,OAErB4nD,CACA,EAEAo3M,EAAA33S,UAAAu4S,cAAA,SAAAh4M,GACA,OAAAA,CACA,EAEAo3M,EAAA33S,UAAAw4S,iBAAA,SAAAj4M,GACA,OAAAA,CACA,EAEAo3M,EAAA33S,UAAAy4S,aAAA,SAAAl4M,GACA,OAAAA,CACA,EAEAo3M,EAAA33S,UAAAg5S,mBAAA,SAAAz4M,GACA,YAAAh8F,WACA,KAAAA,WAGAg8F,CACA,EAEAvsG,EAAAC,QAAA0jT,sCC5PA,IAAAwB,EAAuBnzK,EAAQ,MAC/BpE,EAAeoE,EAAA,OAAApE,SAMf,SAAAw3K,EAAAC,EAAAC,GACA,KAAAj5F,MAAA,GAEA,KAAAi5F,YAAAA,EAEA,KAAAhtS,EAAAgtS,EAAA7iT,KACA,KAAAk4S,eAAA0K,EAAA1iT,MAAA2iT,EAAA7iT,KAAA6iT,EAAArrR,MACA,KAAAsrR,gBAAA,EACA,KAAAn5H,MAAA,EAEA,KAAAo5H,UAAA,GAEA,KAAAC,WAAA,KAEA,KAAAC,QAAA,IAAAP,EAEA,KAAAQ,iBAAA,GAEA,KAAAvrF,QAAAirF,EACA,CAEAD,EAAAp5S,UAAA45S,iBAAA,WACA,KAAAJ,UAAAthT,KAAA,CACAoU,EAAA,KAAAA,EACAgwB,EAAA,KAAAA,EACAi9Q,gBAAA,KAAAA,gBACA5K,eAAA,KAAAA,eACAvuH,KAAA,KAAAA,KACAy5H,WAAA,CACAvtS,EAAA,KAAAA,EACAgwB,EAAA,KAAAA,EACAi9Q,gBAAA,KAAAA,gBACA5K,eAAA,KAAAA,eACAvuH,KAAA,KAAAA,MAEAq5H,WAAA,KAAAA,WACAK,gBAAA,KAAAA,kBAGA,KAAAA,gBAAA,CACA,EAEAV,EAAAp5S,UAAA+5S,YAAA,SAAApjT,EAAA4yD,EAAAkwP,GACA,IAAAO,EAAA,KAAAR,UAAA,KAAAA,UAAA7kT,OAAA,GAEA,KAAAslT,oBAAAD,GAEA,KAAAP,WAAAA,EACA,KAAAr5H,KAAA45H,EAAA55H,KACA,KAAA9zK,EAAA,KAAAA,EAAA,KAAAwtS,iBAAAvwP,GAAA,GACA,KAAAjtB,EAAA09Q,EAAA19Q,EACA,KAAAqyQ,eAAAh4S,EACA,KAAA4iT,gBAAAS,EAAAT,gBAEA,KAAAO,gBAAAnjT,CACA,EAEAyiT,EAAAp5S,UAAAi6S,oBAAA,SAAAC,GACA,KAAAT,YACA,KAAAU,wBAAA,KAAAV,YACA,KAAAA,WAAA,MAEAS,EAAAL,WA8NA,SAAAO,EAAAzmD,GACA,IAAAruK,EAUA,OACA86F,MARA96F,EADA80N,EAAAh6H,KAAAuzE,EAAAvzE,KACAg6H,EACGzmD,EAAAvzE,KAAAg6H,EAAAh6H,KACHuzE,EAEAymD,EAAA99Q,EAAAq3N,EAAAr3N,EAAA89Q,EAAAzmD,GAIAvzE,KACA9zK,EAAAg5E,EAAAh5E,EACAgwB,EAAAgpD,EAAAhpD,EACAi9Q,gBAAAj0N,EAAAi0N,gBACA5K,eAAArpN,EAAAqpN,eAEA,CAhPA0L,CAAA,KAAAH,EAAAL,WAEA,EAEAT,EAAAp5S,UAAAs6S,WAAA,SAAAb,GACA,KAAAr5H,KAAAq5H,EAAAc,qBAAAn6H,KACA,KAAA9zK,EAAAmtS,EAAAc,qBAAAjuS,EACA,KAAAgwB,EAAAm9Q,EAAAc,qBAAAj+Q,EACA,KAAAqyQ,eAAA8K,EAAAc,qBAAA5L,eACA,KAAA4K,gBAAAE,EAAAc,qBAAAhB,gBACA,KAAAO,gBAAAL,EAAAc,qBAAAT,eACA,EAEAV,EAAAp5S,UAAAm6S,wBAAA,SAAAV,GACAA,EAAAc,qBAAA,CACAn6H,KAAA,KAAAA,KACA9zK,EAAA,KAAAA,EACAgwB,EAAA,KAAAA,EACAi9Q,gBAAA,KAAAA,gBACA5K,eAAA,KAAAA,eACAmL,gBAAA,KAAAA,gBAEA,EAEAV,EAAAp5S,UAAAw6S,oBAAA,SAAA5jT,GACA,IAAAojT,EAAA,KAAAR,UAAA91R,MAEA,KAAAu2R,oBAAAD,GAEA,KAAAP,WAAA,KACA,KAAAntS,EAAA0tS,EAAA1tS,EAEA,IAAAgwB,EAAA09Q,EAAAH,WAAAv9Q,EACA1lC,IACAojT,EAAA55H,OAAA45H,EAAAH,WAAAz5H,KACA45H,EAAA19Q,EAAA1lC,EAAA0lC,IACAA,EAAA09Q,EAAA19Q,EAAA1lC,GAGA0lC,GAAA1lC,GAIA,KAAA0lC,EAAAA,EACA,KAAA8jJ,KAAA45H,EAAAH,WAAAz5H,KACA,KAAAuuH,eAAAqL,EAAArL,eACA,KAAA4K,gBAAAS,EAAAH,WAAAN,gBACA3iT,IACA,KAAA2iT,iBAAAj9Q,EAAA09Q,EAAAH,WAAAv9Q,GAEA,KAAAw9Q,gBAAAE,EAAAF,eACA,EAEAV,EAAAp5S,UAAAy6S,UAAA,SAAAhkT,EAAAw3B,GACA,KAAA3hB,GAAA7V,EACA,KAAAk4S,gBAAAl4S,GAAAw3B,GAAA,EACA,EAEAmrR,EAAAp5S,UAAAw6M,SAAA,SAAAjxJ,GAIA,OAHA,KAAAjtB,GAAAitB,EACA,KAAAgwP,iBAAAhwP,EAEA,KAAAgwP,gBAAA,CACA,EAEAH,EAAAp5S,UAAA06S,eAAA,WACA,KAAAp+Q,EAAA,KAAAg9Q,YAAA5iT,IACA,KAAA6iT,gBAAA,KAAAoB,iBAAAtB,SAAAziT,OAAA,KAAA0iT,YAAA5iT,IAAA,KAAA4iT,YAAA39S,OACA,KAAAi/S,eAAAjM,eAAA,KAAAgM,iBAAAtB,SAAA1iT,MAAA,KAAA2iT,YAAA7iT,KAAA,KAAA6iT,YAAArrR,KACA,EAEAmrR,EAAAp5S,UAAA46S,aAAA,WACA,YAAApB,UAAA,GACA,KAAAA,UAAA,GAEA,IAEA,EAEAJ,EAAAp5S,UAAAotL,OAAA,SAAA9gL,EAAAgwB,QACA5mC,IAAA4W,GAAA,OAAAA,IACA,KAAAA,EAAAA,EACA,KAAAqiS,eAAA,KAAAgM,iBAAAtB,SAAA1iT,MAAA,KAAA2V,EAAA,KAAAgtS,YAAArrR,YAEAv4B,IAAA4mC,GAAA,OAAAA,IACA,KAAAA,EAAAA,EACA,KAAAi9Q,gBAAA,KAAAoB,iBAAAtB,SAAAziT,OAAA,KAAA0lC,EAAA,KAAAg9Q,YAAA39S,OAEA,EAEAy9S,EAAAp5S,UAAA66S,eAAA,SAAAvuS,EAAAgwB,QACA5mC,IAAA4W,GAAA,OAAAA,IACA,KAAAA,EAAA,KAAAA,EAAAA,QAEA5W,IAAA4mC,GAAA,OAAAA,IACA,KAAAA,EAAA,KAAAA,EAAAA,EAEA,EAEA88Q,EAAAp5S,UAAA86S,mBAAA,WACA,KAAAtB,UAAAthT,KAAA,CACAoU,EAAA,KAAAA,EACAgwB,EAAA,KAAAA,EACAi9Q,gBAAA,KAAAA,gBACA5K,eAAA,KAAAA,eACAvuH,KAAA,KAAAA,KACAq5H,WAAA,KAAAA,WACAK,gBAAA,KAAAA,iBAEA,EAEAV,EAAAp5S,UAAA+6S,iBAAA,WACA,IAAAf,EAAA,KAAAR,UAAA91R,MAEA,KAAApX,EAAA0tS,EAAA1tS,EACA,KAAAgwB,EAAA09Q,EAAA19Q,EACA,KAAAqyQ,eAAAqL,EAAArL,eACA,KAAA4K,gBAAAS,EAAAT,gBACA,KAAAn5H,KAAA45H,EAAA55H,KACA,KAAAq5H,WAAAO,EAAAP,WACA,KAAAK,gBAAAE,EAAAF,eACA,EAYA,IAAAkB,EAAA,SAAAC,EAAAC,GAVA,IAAAC,EAAAC,EAcA,OAdAD,EAYAD,EAZAE,EAYAH,EAAA5B,SAAAgC,aAAAH,OAXAxlT,IAAAylT,EACAC,EACGx5K,EAAAu5K,IAAA,cAAAA,EAAA9zS,cACH,YAEA,cAQA4zS,EAAA5B,SAAAgC,YACA,CACAA,YAAAH,EACAvkT,MAAAskT,EAAA5B,SAAAziT,OACAA,OAAAqkT,EAAA5B,SAAA1iT,OAGA,CACA0kT,YAAAJ,EAAA5B,SAAAgC,YACA1kT,MAAAskT,EAAA5B,SAAA1iT,MACAC,OAAAqkT,EAAA5B,SAAAziT,OAIA,EAGAwiT,EAAAp5S,UAAAs7S,eAAA,SAAAC,GACA,IAAAC,EAAA,KAAAp7H,KAAA,EAEAq7H,EAAA,KAAAr7H,KACArsE,EAAA,KAAAz3E,EAEAo/Q,EAAAF,GAAA,KAAAn7F,MAAA1rN,OACA,GAAA+mT,EAAA,CACA,IAAAC,EAAA,KAAAhN,eACAyM,EAAA,KAAAT,iBAAAtB,SAAAgC,YAEAhC,EAAA2B,EAAA,KAAAL,iBAAAY,GACA,KAAAntF,QAAAirF,GAEA+B,IAAA/B,EAAAgC,cACA,KAAA1M,eAAAgN,EAEA,MACA,KAAAv7H,KAAAo7H,EACA,KAAAd,iBAGA,OACAkB,eAAAF,EACAD,SAAAA,EACA1nM,MAAAA,EACAz3E,EAAA,KAAAA,EAEA,EAGA88Q,EAAAp5S,UAAAouN,QAAA,SAAAirF,GACA,IAAAj5H,EAAA,CAAc90C,MAAA,GAAA+tK,SAAAA,GAQd,OAPA,KAAAh5F,MAAAnoN,KAAAkoL,GACA,KAAAu5H,iBAAAzhT,KAAA,GACA,KAAAkoL,KAAA,KAAAigC,MAAA1rN,OAAA,EACA,KAAA+lT,iBAEA,KAAAhB,QAAA9hP,KAAA,aAEAwoH,CACA,EAEAg5H,EAAAp5S,UAAA26S,eAAA,WACA,YAAAv6H,KAAA,QAAAA,MAAA,KAAAigC,MAAA1rN,OACA,KAGA,KAAA0rN,MAAA,KAAAjgC,KACA,EAEAg5H,EAAAp5S,UAAA67S,mBAAA,WACA,IAAAxC,EAAA,KAAAsB,iBAAAtB,SACAyC,EAAAzC,EAAAziT,OAAA,KAAA0iT,YAAA5iT,IAAA,KAAA4iT,YAAA39S,OACA0H,EAAAg2S,EAAA1iT,MAAA,KAAA2iT,YAAA7iT,KAAA,KAAA6iT,YAAArrR,MAEA,OACA8tR,WAAA,KAAA37H,KAAA,EACAm7H,gBAAAlC,EAAAgC,YACAW,gBAAAF,EACAG,eAAA54S,EACA5M,KAAA,KAAA6V,EACA5V,IAAA,KAAA4lC,EACA4/Q,eAAA,KAAA5/Q,EAAA,KAAAg9Q,YAAA5iT,KAAAolT,EACAK,iBAAA,KAAA7vS,EAAA,KAAAgtS,YAAA7iT,MAAA4M,EAEA,EAsBArP,EAAAC,QAAAmlT,sCCvTA,IAAAgD,EAAWp2K,EAAQ,OACnB1mG,EAAe0mG,EAAA,OAAA1mG,SACfmgH,EAAWzZ,EAAA,OAAAyZ,KACX48J,EAAmBr2K,EAAA,OAAAq2K,aACnBjD,EAAsBpzK,EAAQ,OAM9B,SAAAs2K,EAAA35C,EAAA+2C,GACA,KAAA/2C,QAAAA,EACA,KAAA45C,aAAA,GACA,KAAA7C,QAAAA,CACA,CAEA,SAAA8C,EAAAp8H,EAAAlsI,EAAAprC,GACA,OAAAA,QAAApT,IAAAoT,GAAAA,EAAA,GAAAA,EAAAs3K,EAAA90C,MAAA32I,OACAyrL,EAAA90C,MAAApzI,KAAAg8C,GAEAksI,EAAA90C,MAAAj1G,OAAAvtB,EAAA,EAAAorC,EAEA,CAEAooQ,EAAAt8S,UAAAy8S,QAAA,SAAAlmT,EAAAmmT,EAAA5zS,GACA,IAAAlS,EAAAL,EAAAomT,YACAh6C,EAAA,KAAAA,QACAviF,EAAAuiF,EAAAg4C,iBACA3kT,EAAA,KAAA4mT,2BAEA,QAAAj6C,EAAA42C,gBAAA3iT,IAAAwpL,KAIA7pL,EAAA+V,EAAAq2P,EAAAr2P,GAAA/V,EAAA+V,GAAA,GACA/V,EAAA+lC,EAAAqmO,EAAArmO,GAAA/lC,EAAA+lC,GAAA,GAEA,KAAAugR,UAAAtmT,GAEAimT,EAAAp8H,EAAA,CACA3kL,KAAA,OACAy4C,KAAA39C,GACEuS,GACF,KAAA4wS,QAAA9hP,KAAA,YAAArhE,GAEAmmT,GACA/5C,EAAAnoD,SAAA5jN,GAGAZ,EACA,EAEAsmT,EAAAt8S,UAAA68S,UAAA,SAAAtmT,GACA,IAAAI,EAAA,KAAAgsQ,QAAAgsC,eACAzkQ,EAAA3zC,EAAAkgF,WAEA48B,EAAA98G,EAAAumT,SAAAvmT,EAAAumT,QAAAnoT,OAAA,GAAA4B,EAAAumT,QAAA,GAAAzpM,UAEA9pD,EAAA,EACA,OAAA8pD,GACA,YACA9pD,EAAA5yD,EAAAuzC,EACA,MACA,aACAqf,GAAA5yD,EAAAuzC,GAAA,EAQA,GAJAqf,IACAhzD,EAAA+V,GAAA/V,EAAA+V,GAAA,GAAAi9C,GAGA,YAAA8pD,IACA98G,EAAAwmT,gBACAxmT,EAAAymT,qBACAzmT,EAAAumT,QAAAnoT,OAAA,EAGA,IAFA,IAAAsoT,GAAAtmT,EAAAuzC,IAAA3zC,EAAAumT,QAAAnoT,OAAA,GAEAD,EAAA,EAAAsxE,EAAAzvE,EAAAumT,QAAAnoT,OAA2CD,EAAAsxE,EAAOtxE,IAClD60D,EAAA70D,EAAAuoT,EAEA1mT,EAAAumT,QAAApoT,GAAA4X,GAAAi9C,EACAhzD,EAAAumT,QAAApoT,GAAAwoT,aAAAD,CAGA,EAEAX,EAAAt8S,UAAAm9S,SAAA,SAAAh4L,EAAAr8G,EAAArN,GACA,IAAAknQ,EAAA,KAAAA,QACAviF,EAAAuiF,EAAAg4C,iBACA3kT,EAAA,KAAA4mT,2BAEA,SAAAx8H,QAAA1qL,IAAAyvH,EAAAi4L,kBAAAz6C,EAAA42C,gBAAAp0L,EAAAytL,SAAAxyH,EAAA90C,MAAA32I,OAAA,UAIAe,IAAAyvH,EAAAylE,KACAzlE,EAAAylE,GAAAzlE,EAAA74G,GAAA,GAGA64G,EAAA74G,EAAAq2P,EAAAr2P,EAAA64G,EAAAylE,GACAzlE,EAAA7oF,EAAAqmO,EAAArmO,EAEA,KAAA+gR,WAAAl4L,GAEAq3L,EAAAp8H,EAAA,CACA3kL,KAAAA,GAAA,QACAy4C,KAAAixE,GACEr8G,GAEF65P,EAAAnoD,SAAAr1F,EAAAytL,SAEA58S,EACA,EAEAsmT,EAAAt8S,UAAAs9S,OAAA,SAAAn4L,EAAAr8G,GACA,YAAAq0S,SAAAh4L,EAAAr8G,EAAA,MACA,EAEAwzS,EAAAt8S,UAAAu9S,MAAA,SAAAhL,EAAAzpS,GACA,IAAA65P,EAAA,KAAAA,QACAviF,EAAAuiF,EAAAg4C,iBACA3kT,EAAA,KAAA4mT,2BAEA,IAAAx8H,QAAA1qL,IAAA68S,EAAA6K,kBAAAz6C,EAAA42C,gBAAAhH,EAAAK,QACA,cAGAl9S,IAAA68S,EAAA3nH,KACA2nH,EAAA3nH,GAAA2nH,EAAAjmS,GAAA,GAGAimS,EAAAjmS,EAAAq2P,EAAAr2P,EAAAimS,EAAA3nH,GACA2nH,EAAAj2Q,EAAAqmO,EAAArmO,EAEA,KAAA+gR,WAAA9K,GAEA,QAAA79S,EAAA,EAAAsxE,EAAAusO,EAAAiL,QAAA7oT,OAAwCD,EAAAsxE,EAAOtxE,IAAA,CAC/C,IAAAgjT,EAAAnF,EAAAiL,QAAA9oT,GACAgjT,EAAAprS,GAAAimS,EAAAjmS,EACAorS,EAAAp7Q,GAAAi2Q,EAAAj2Q,EACA,KAAAmhR,UAAA/F,GAAA,KAAA5uS,EACA,CAIA,OAFA65P,EAAAnoD,SAAA+3F,EAAAK,SAEA58S,CACA,EAEAsmT,EAAAt8S,UAAAq9S,WAAA,SAAAl4L,GACA,IAAAxuH,EAAA,KAAAgsQ,QAAAgsC,eACA+O,EAAAv4L,EAAAiqL,UACA7lP,EAAA,EACA,OAAA47D,EAAA6tL,YACA,YACAzpP,EAAA5yD,EAAA+mT,EACA,MACA,aACAn0P,GAAA5yD,EAAA+mT,GAAA,EAIAn0P,IACA47D,EAAA74G,GAAA64G,EAAA74G,GAAA,GAAAi9C,EAEA,EAEA+yP,EAAAt8S,UAAA29S,YAAA,SAAAp9M,GACA,IAAA5pG,EAAA,KAAAgsQ,QAAAgsC,eACAiP,EAAAr9M,EAAA6uM,UACA7lP,EAAA,EACA,OAAAg3C,EAAAyyM,YACA,YACAzpP,EAAA5yD,EAAAinT,EACA,MACA,aACAr0P,GAAA5yD,EAAAinT,GAAA,EAGAr0P,GACAg3C,EAAAukB,OAAAnyH,SAAA,SAAA+kT,GACA2E,EAAA3E,EAAAnuP,EAAA,EACA,GAEA,EAEA+yP,EAAAt8S,UAAAy9S,UAAA,SAAA/F,EAAAmG,EAAAC,EAAAh1S,GACA,IAAA65P,EAAA,KAAAA,QACAviF,EAAAuiF,EAAAg4C,iBACA3kT,EAAA,KAAA4mT,2BAEA,GAAAx8H,EAMA,OALAi8H,EAAA3E,EAAAmG,EAAA,EAAAl7C,EAAAr2P,EAAAwxS,EAAA,EAAAn7C,EAAArmO,GACAkgR,EAAAp8H,EAAA,CACA3kL,KAAA,SACAy4C,KAAAwjQ,GACG5uS,GACH9S,CAEA,EAEAsmT,EAAAt8S,UAAA+9S,UAAA,SAAApnT,EAAAC,GACA,IAAAuwI,EAAA,KAAAw7H,QAMA,OALAx7H,EAAAwzK,iBACArvK,MAAApzI,KAAA,CACAuD,KAAA,YACAy4C,KAAA,CAAU5nC,EAAA66H,EAAA76H,EAAAgwB,EAAA6qG,EAAA7qG,EAAA3lC,MAAAA,EAAAC,OAAAA,MAEV,CACA,EAEA0lT,EAAAt8S,UAAAg+S,QAAA,WAMA,OALA,KAAAr7C,QACAg4C,iBACArvK,MAAApzI,KAAA,CACAuD,KAAA,aAEA,CACA,EAcA6gT,EAAAt8S,UAAAi+S,YAAA,SAAAl2J,EAAAm2J,EAAAC,EAAAzB,GACA,IAAAv1K,EAAA,KAAAw7H,QACAviF,EAAAj5C,EAAAwzK,iBAEA,SAAAuD,GAAAn2J,EAAAnxJ,OAAAuwI,EAAAoyK,mBAIAxxJ,EAAAzc,MAAA34I,SAAA,SAAAuhD,GACA,OAAAA,EAAAz4C,MACA,WACA,IAAAuqE,EAvBA,SAAAzvE,GACA,IAAAoH,EAAA,IAAAy+S,EAAA7lT,EAAAk7E,UAEA,QAAA7+E,KAAA2D,EACAA,EAAA+M,eAAA1Q,KACA+K,EAAA/K,GAAA2D,EAAA3D,IAIA,OAAA+K,CACA,CAaAyT,CAAA8iC,EAAAA,MAEA8xB,EAAAo4O,QACAp4O,EAAAo4O,MAAAzqG,UAAA,GAAAooG,WAAA50K,EAAAi5C,KAAA,GAEAp6G,EAAA15D,GAAA05D,EAAA15D,GAAA,IAAA4xS,EAAAn2J,EAAA+/B,SAAA,EAAA3gD,EAAA76H,GACA05D,EAAA1pC,GAAA0pC,EAAA1pC,GAAA,IAAA6hR,EAAAp2J,EAAAl4D,SAAA,EAAAs3C,EAAA7qG,GAEA8jJ,EAAA90C,MAAApzI,KAAA,CACAuD,KAAA,OACAy4C,KAAA8xB,IAEA,MAEA,aACA,IAAAh8D,EAAAy1I,EAAAvrG,EAAAA,MAEAmoQ,EAAAryS,EAAAk0S,EAAAn2J,EAAA+/B,SAAA,EAAA3gD,EAAA76H,EAAA6xS,EAAAp2J,EAAAl4D,SAAA,EAAAs3C,EAAA7qG,GACA8jJ,EAAA90C,MAAApzI,KAAA,CACAuD,KAAA,SACAy4C,KAAAlqC,IAEA,MAEA,YACA,UACA,IAAAq0S,EAAA5+J,EAAAvrG,EAAAA,MAEAmqQ,EAAA/xS,GAAA+xS,EAAA/xS,GAAA,IAAA4xS,EAAAn2J,EAAA+/B,SAAA,EAAA3gD,EAAA76H,GACA+xS,EAAA/hR,GAAA+hR,EAAA/hR,GAAA,IAAA6hR,EAAAp2J,EAAAl4D,SAAA,EAAAs3C,EAAA7qG,GAEA8jJ,EAAA90C,MAAApzI,KAAA,CACAuD,KAAAy4C,EAAAz4C,KACAy4C,KAAAmqQ,IAIA,IAEA3B,GACAv1K,EAAAqzE,SAAAzyD,EAAAnxJ,SAGA,EACA,EASA0lT,EAAAt8S,UAAAs+S,YAAA,SAAAC,EAAA3nT,QACAlB,IAAA6oT,IACA3nT,EAAA,KAAA+rQ,QAAAg4C,iBAAA/jT,OAAA,KAAA+rQ,QAAA22C,YAAA5iT,IAAA,KAAAisQ,QAAA22C,YAAA39S,OACA4iT,EAAA,KAAA57C,QAAAgsC,gBAGArvQ,EAAAi/Q,KACAA,EAAA,IAAAnF,EAAA,CAAyCziT,MAAA4nT,EAAA3nT,OAAAA,GAAyC,CAAEH,KAAA,EAAAw3B,MAAA,EAAAv3B,IAAA,EAAAiF,OAAA,KAGpF,KAAA4gT,aAAArkT,KAAA,KAAAyqQ,SACA,KAAAA,QAAA47C,CACA,EAEAjC,EAAAt8S,UAAAw+S,WAAA,WACA,KAAA77C,QAAA,KAAA45C,aAAA74R,KACA,EAEA44R,EAAAt8S,UAAA48S,yBAAA,WACA,YAAAL,aAAA,SAAA55C,SAAAk5C,oBACA,EAGA7nT,EAAAC,QAAAqoT,sCC/TA,IAAAjgP,EAAc2pE,EAAA,OAAA3pE,QAcd,SAAAoiP,EAAAC,EAAAC,GAKA,QAAA1tS,KAJA,KAAAqM,MAAA,GACA,KAAAqhS,UAAAA,EACA,KAAAC,UAAA,GAEAF,EACA,GAAAA,EAAAp7S,eAAA2N,GAAA,CACA,IAAA4tS,EAAAH,EAAAztS,GAEA,KAAAqM,MAAArM,GAAA,CACAkuK,OAAA0/H,EAAA1/H,OACAx/D,KAAAk/L,EAAAl/L,KACAG,QAAA++L,EAAA/+L,QACAssL,YAAAyS,EAAAzS,YAEA,CAEA,CAEAqS,EAAAz+S,UAAA8+S,YAAA,SAAAn/L,EAAAG,GACA,OAhCA,SAAAH,EAAAG,GACA,IAAArkH,EAAA,SAQA,OAPAkkH,GAAAG,EACArkH,EAAA,cACGkkH,EACHlkH,EAAA,OACGqkH,IACHrkH,EAAA,WAEAA,CACA,CAsBAsjT,CAAAp/L,EAAAG,EACA,EAEA2+L,EAAAz+S,UAAAg/S,YAAA,SAAAC,EAAAt/L,EAAAG,GACA,IAAArkH,EAAA,KAAAqjT,YAAAn/L,EAAAG,GACA,YAAAxiG,MAAA2hS,IAAA,KAAA3hS,MAAA2hS,GAAAxjT,GAIA,KAAA6hB,MAAA2hS,GAAAxjT,GAHA,IAIA,EAEAgjT,EAAAz+S,UAAAk/S,YAAA,SAAAD,EAAAt/L,EAAAG,GACA,IAAArkH,EAAA,KAAAqjT,YAAAn/L,EAAAG,GACA,eAAAk/L,YAAAC,EAAAt/L,EAAAG,GACA,UAAAt+D,MAAA,SAAAy9P,EAAA,eAAAxjT,EAAA,oEAKA,GAFA,KAAAmjT,UAAAK,GAAA,KAAAL,UAAAK,IAAA,IAEA,KAAAL,UAAAK,GAAAxjT,GAAA,CACA,IAAA8hE,EAAA,KAAAjgD,MAAA2hS,GAAAxjT,GACA4gE,EAAAkB,KACAA,EAAA,CAAAA,IAEA,KAAAqhP,UAAAK,GAAAxjT,GAAA,KAAAkjT,UAAA1tS,KAAAy6G,MAAA,KAAAizL,UAAAphP,GAAAw5H,KACA,CAEA,YAAA6nH,UAAAK,GAAAxjT,EACA,EAEAzH,EAAAC,QAAAwqT,kCCrDA,SAAApiP,EAAA8iP,GACA,OAAA17R,MAAA44C,QAAA8iP,EACA,CA8FAnrT,EAAAC,QAAA,CACA2tI,SA7GA,SAAAu9K,GACA,wBAAAA,GAAAA,aAAAt7N,MACA,EA4GAvkD,SA1GA,SAAA6/Q,GACA,wBAAAA,GAAAA,aAAAl4M,MACA,EAyGAi/L,UAvGA,SAAAiZ,GACA,yBAAAA,CACA,EAsGA9iP,QAAAA,EACAkhD,WAjGA,SAAA4hM,GACA,0BAAAA,CACA,EAgGA/wL,SA9FA,SAAA+wL,GACA,cAAAA,GAAA,kBAAAA,CACA,EA6FA3Z,OA3FA,SAAA2Z,GACA,cAAAA,CACA,EA0FAr2M,YAxFA,SAAAq2M,GACA,YAAAzpT,IAAAypT,CACA,EAuFA1/J,KArFA,WAGA,IAFA,IAAA9hJ,EAAA,GAEAjJ,EAAA,EAAAsxE,EAAA2d,UAAAhvF,OAAuCD,EAAAsxE,EAAOtxE,IAAA,CAC9C,IAAA0wC,EAAAu+C,UAAAjvF,GAEA,GAAA0wC,EACA,QAAAxyC,KAAAwyC,EACAA,EAAA9hC,eAAA1Q,KACA+K,EAAA/K,GAAAwyC,EAAAxyC,GAIA,CAEA,OAAA+K,CACA,EAsEAsyS,cA9CA,SAAAr9S,EAAA8zH,GACA,eAAA9zH,EACA,OAEA8zH,CACA,EA0CA21L,aArEA,SAAA3E,EAAAprS,EAAAgwB,GACA,OAAAo7Q,EAAAj8S,MACA,cACA,WACAi8S,EAAAprS,GAAAA,EACAorS,EAAAp7Q,GAAAA,EACA,MACA,WACAo7Q,EAAAtqP,IAAA9gD,EACAorS,EAAAnqP,IAAAjhD,EACAorS,EAAA16N,IAAA1gD,EACAo7Q,EAAAz6N,IAAA3gD,EACA,MACA,eACA,QAAA5nC,EAAA,EAAAsxE,EAAA0xO,EAAAhtR,OAAA/1B,OAA6CD,EAAAsxE,EAAOtxE,IACpDgjT,EAAAhtR,OAAAh2B,GAAA4X,GAAAA,EACAorS,EAAAhtR,OAAAh2B,GAAA4nC,GAAAA,EAIA,EAkDA4zQ,UAzCA,SAAAA,EAAA3vM,GACA,GAAAA,EAAArgG,GACA,OAAAqgG,EAAArgG,GAGA,GAAAm8D,EAAAkkC,EAAA9kF,MACA,QAAA/mB,EAAA,EAAAsxE,EAAAu6B,EAAA9kF,KAAA9mB,OAAwCD,EAAAsxE,EAAOtxE,IAAA,CAC/C,IACA0qT,EAAAlP,EADA3vM,EAAA9kF,KAAA/mB,IAEA,GAAA0qT,EACA,OAAAA,CAEA,CAGA,WACA,EA0BAC,UAxBA,SAAAn0R,GACA,OAAAmxC,EAAAnxC,IAAA,IAAAA,EAAAv2B,MACA,EAuBA2qT,WAlBA,SAAAp0R,EAAAs1J,GACA,OAAAA,EAAAt1J,EAAA,IAAAA,EAAA,GACA,6DC1GA+1I,EAASj7B,EAAQ,OAEjB,SAAAu5K,EAAAZ,EAAAa,GACA,KAAAb,UAAAA,EACA,KAAAa,gBAAAA,GAAA,EACA,CAEAD,EAAAv/S,UAAAoyS,aAAA,SAAA1pS,GACA,IAAAy8G,EACAmyH,EAAA,KAEA,QAAAqnE,UAAAv/F,eAAA12M,GAYAy8G,EAAA,KAAAw5L,UAAAv/F,eAAA12M,OAZA,CACA,IAEA,GADAy8G,EAAA,KAAAw5L,UAAAnsH,UAeA,SAAA9pL,GACA,IAAA21S,EAAA/mE,EAAAkoE,gBAAA92S,GAEA,IAAA21S,EACA,OAAA31S,EAGA,GAAAu4J,EAAAuqD,WAAA6yF,GACA,OAAAp9I,EAAAsB,aAAA87I,GAGA,IAAAv1S,EAAAu1S,EAAAr2S,QAAA,WACA,OAAAc,EAAA,EACAwuO,EAAAkoE,gBAAA92S,GAGSyuH,EAAM/7D,KAAAijP,EAAAz7S,UAAAkG,EAAA,YACf,CAhCA22S,CAAA/2S,KACAy8G,EACA,eAEA,CAAI,MAAAtsG,GACJ,uBAAAA,EAAA++B,WAAA,qFACA,CACAutE,EAAA3sE,MAAA,KAAAmmQ,WACA,KAAAA,UAAAv/F,eAAA12M,GAAAy8G,CACA,CAIA,OAAUxuH,MAAAwuH,EAAAxuH,MAAAC,OAAAuuH,EAAAvuH,OAoBV,EAEA5C,EAAAC,QAAAsrT,sCChDA,IAAApG,EAAuBnzK,EAAQ,MAC/B2xK,EAAsB3xK,EAAQ,OAC9BoqK,EAAiBpqK,EAAQ,OACzBozK,EAAsBpzK,EAAQ,OAC9B05K,EAAwB15K,EAAQ,OAChCgqK,EAAuBhqK,EAAQ,OAC/B25K,EAAqB35K,EAAQ,OAC7Bo2K,EAAWp2K,EAAQ,OACnBpE,EAAeoE,EAAA,OAAApE,SACfvlE,EAAc2pE,EAAA,OAAA3pE,QACdysC,EAAkBk9B,EAAA,OAAAl9B,YAClB08L,EAAax/J,EAAA,OAAAw/J,OACb/lJ,EAAWzZ,EAAA,OAAAyZ,KACX48J,EAAmBr2K,EAAA,OAAAq2K,aACnBpM,EAAoBjqK,EAAA,OAAAiqK,cACpBC,EAAgBlqK,EAAA,OAAAkqK,UAChB3yL,EAAiByoB,EAAA,OAAAzoB,WACjBuyL,EAAgB9pK,EAAQ,OACxB+pK,EAAwB/pK,EAAQ,OAChC1mG,EAAe0mG,EAAA,OAAA1mG,SAEf,SAAAsgR,EAAAzlT,EAAA0lT,GACAA,EAAAltT,SAAA,SAAAuhD,GACA/5C,EAAAjC,KAAAg8C,EACA,GACA,CASA,SAAA4rQ,EAAAzG,EAAAC,EAAA9I,EAAAC,GACA,KAAA4I,SAAAA,EACA,KAAAC,YAAAA,EACA,KAAAI,QAAA,IAAAP,EACA,KAAA3I,aAAAA,EACA,KAAAC,WAAAA,EACA,KAAAlE,aAAA,EACA,CAEAuT,EAAA9/S,UAAA+/S,qBAAA,SAAAxT,GACA,KAAAA,aAAA9sJ,EAAA,KAAA8sJ,aAAAA,EACA,EAYAuT,EAAA9/S,UAAAggT,eAAA,SAAAlP,EAAAT,EAAAC,EAAAC,EAAAl7O,EAAAv1D,EAAAiuB,EAAA65F,EAAAq4L,EAAAC,GAEA,SAAAC,EAAAC,EAAA//F,GAEA,IAAA9iG,EAAA2iM,GACA,SAGAE,EAAAA,EAAA17Q,QAAA,SAAA67D,GACA,OAAAA,EAAAozG,UAAAh/M,OAAA,CACA,IAEAyrT,EAAAztT,SAAA,SAAA4tG,GACA,IAAA8/M,EAAA,GACA,CACA,oEACA,sDACA,kBACA1tT,SAAA,SAAAC,QACA8C,IAAA6qG,EAAA3tG,KACAytT,EAAAztT,GAAA2tG,EAAA3tG,GAEA,IACAytT,EAAAC,cAAA//M,EAAAozG,UAAA,GACA0sG,EAAAE,YAAA98R,MAAA23C,KAAA,IAAAuvD,IAAApqB,EAAAozG,UAAArzJ,KAAA,SAAAigD,GAAkF,OAAAA,EAAAw7M,UAAA,MAClFsE,EAAAhgG,MAAAA,EAAA1rN,OACA0rT,EAAAphN,MAAA5iC,EAAAkkC,EAAAtB,OAEAsB,EAAA8/M,SAAAA,CACA,IAEA,QAAAv3S,EAAA,EAAsBA,EAAAs3S,EAAAzrT,OAA+BmU,IAAA,CACrD,IAAAy3F,EAAA6/M,EAAAt3S,GACA,cAAAy3F,EAAAigN,YAAAjgN,EAAAkgN,oBAAA,CACAlgN,EAAAkgN,qBAAA,EACA,IAAA1E,EAAAx7M,EAAA8/M,SAAAE,YAAA,GACAG,EAAA,GACAC,EAAA,GACAC,EAAA,GACA,GAAAV,EAAAvrT,OAAA,EACA,QAAA6D,EAAAsQ,EAAA,EAAAk9D,EAAAo6O,EAAAzrT,OAAyD6D,EAAAwtE,EAAQxtE,IACjE4nT,EAAA5nT,GAAA6nT,SAAAE,YAAAv4S,QAAA+zS,IAAA,GACA2E,EAAAxoT,KAAAkoT,EAAA5nT,GAAA6nT,UAEAH,EAAAvrT,OAAA,GAAAyrT,EAAA5nT,GAAA6nT,SAAAE,YAAAv4S,QAAA+zS,EAAA,OACA4E,EAAAzoT,KAAAkoT,EAAA5nT,GAAA6nT,UAIA,GAAAH,EAAAvrT,OAAA,EACA,IAAA6D,EAAA,EAAsBA,EAAAsQ,EAAYtQ,IAClC4nT,EAAA5nT,GAAA6nT,SAAAE,YAAAv4S,QAAA+zS,IAAA,GACA6E,EAAA1oT,KAAAkoT,EAAA5nT,GAAA6nT,UAIA,GAAAH,EAAA3/M,EAAA8/M,SAAAK,EAAAC,EAAAC,GAEA,OADArgN,EAAAigN,UAAA,UACA,CAEA,CACA,CAEA,QACA,CAMA,SAAAK,EAAAljT,GACAA,EAAAyiT,eAAAztT,SAAA,SAAA4tG,GACAA,EAAAugN,SACA,GACA,CARA,KAAAC,gBAAA,IAAApJ,EACA,KAAAqJ,WAAA,IAAA5Q,EAAAC,EAAAC,EAAAC,EAAA,KAAAC,aAAA,KAAAC,WAAA,KAAAlE,aAAA3kL,GAUA,IADA,IAAAjqH,EAAA,KAAAsjT,kBAAAnQ,EAAAT,EAAAC,EAAAC,EAAAl7O,EAAAv1D,EAAAiuB,EAAA65F,EAAAq4L,GACAE,EAAAxiT,EAAAyiT,eAAAziT,EAAA0iN,QACAwgG,EAAAljT,GACAA,EAAA,KAAAsjT,kBAAAnQ,EAAAT,EAAAC,EAAAC,EAAAl7O,EAAAv1D,EAAAiuB,EAAA65F,EAAAq4L,GAGA,OAAAtiT,EAAA0iN,KACA,EAEAy/F,EAAA9/S,UAAAihT,kBAAA,SAAAnQ,EAAAT,EAAAC,EAAAC,EAAAl7O,EAAAv1D,EAAAiuB,EAAA65F,EAAAq4L,EAAAC,GAEA,KAAAE,eAAA,GACAtP,EAAA,KAAAiQ,gBAAAnJ,mBAAA9G,GACAA,EAAA,KAAAkQ,WAAAnQ,gBAAAC,GAEA,KAAAoQ,OAAA,IAAAxB,EACA,IAAAtG,EAAA,KAAAC,SAAA,KAAAC,aAAA,KAAAI,SAEA,IAAAn4L,EAAA,KAYA,OAXA,KAAA2/L,OAAAv+C,UAAA+2C,QAAAyH,cAAA,wBACA5/L,EAAA6/L,cAAA/rP,EACA,IAEA,KAAA+rP,cAAA/rP,GACA,KAAAgsP,YAAAvQ,GACA,KAAAwQ,qBAAAxhT,EAAAiuB,GACA,MAAAkyR,GACA,KAAAsB,aAAAtB,EAAA5P,EAAAE,GAGA,CAAUlwF,MAAA,KAAA6gG,OAAAv+C,UAAAtiD,MAAA+/F,eAAA,KAAAA,eACV,EAGAN,EAAA9/S,UAAAohT,cAAA,SAAA/rP,GACA,IAAAmsP,EAAAjkM,EAAAloD,GAAAA,EAAA,WACA,OAAAA,CACA,EAEAstM,EAAA,KAAAu+C,OAAAv+C,UACA02C,EAAA12C,EAAAg4C,iBAAAtB,SAEAoI,EAAAD,EAAA7+C,EAAAviF,KAAA,EAAAi5H,GAEAoI,IACA,KAAAP,OAAAQ,sBAAArI,EAAA1iT,MAAA0iT,EAAAziT,QACA6qT,EAAA,KAAAV,gBAAAnJ,mBAAA6J,GACA,KAAAJ,YAAA,KAAAL,WAAAnQ,gBAAA4Q,IACA,KAAAP,OAAAS,uBAAA,KACAh/C,EAAAg3C,iBAAAh3C,EAAAviF,OAAAqhI,EAAA9tG,UAAAh/M,OAEA,EAEAmrT,EAAA9/S,UAAA4hT,oBAAA,SAAAC,EAAAC,GACA,KAAAC,sBAAA,WACA,OAAAj7S,KAAA7F,MAAA6F,KAAAC,UAAA86S,GACA,GAAEC,EACF,EAEAhC,EAAA9/S,UAAA+hT,qBAAA,SAAAC,EAAAF,GAGA,IAFA,IAEAG,EAAA,EAAAj8O,EAFA,KAAAk7O,OAAAv+C,UAAAtiD,MAEA1rN,OAA2CstT,EAAAj8O,EAAei8O,IAAA,CAC1D,KAAAf,OAAAv+C,UAAAviF,KAAA6hI,EAEA,IAAA1hN,EAAAyhN,EAAAC,EAAA,EAAAj8O,EAAA,KAAAk7O,OAAAv+C,UAAAtiD,MAAA4hG,GAAA5I,UAEA,GAAA94M,EAAA,CACA,IAAA2hN,EAAAJ,EAAA,KAAAZ,OAAAv+C,UAAAg4C,iBAAAtB,SAAA,KAAAC,aACA,KAAA4H,OAAAQ,sBAAAQ,EAAAvrT,MAAAurT,EAAAtrT,QACA2pG,EAAA,KAAAwgN,gBAAAnJ,mBAAAr3M,GACA,KAAA8gN,YAAA,KAAAL,WAAAnQ,gBAAAtwM,IACA,KAAA2gN,OAAAS,uBAAAO,EAAA51S,EAAA41S,EAAA5lR,EACA,CACA,CACA,EAEAwjR,EAAA9/S,UAAAshT,qBAAA,SAAAxhT,EAAAiuB,GACA,IAAAo0R,EAAA,SAAA9I,EAAAC,GACA,OACAhtS,EAAA,EACAgwB,EAAA,EACA3lC,MAAA0iT,EAAA1iT,MACAC,OAAA0iT,EAAA5iT,IAEA,EAEA0rT,EAAA,SAAA/I,EAAAC,GACA,OACAhtS,EAAA,EACAgwB,EAAA+8Q,EAAAziT,OAAA0iT,EAAA39S,OACAhF,MAAA0iT,EAAA1iT,MACAC,OAAA0iT,EAAA39S,OAEA,EAEA4hH,EAAAz9G,GACA,KAAAiiT,qBAAAjiT,EAAAqiT,GACGriT,GACH,KAAA8hT,oBAAA9hT,EAAAqiT,GAGA5kM,EAAAxvF,GACA,KAAAg0R,qBAAAh0R,EAAAq0R,GACGr0R,GACH,KAAA6zR,oBAAA7zR,EAAAq0R,EAEA,EAEAtC,EAAA9/S,UAAAuhT,aAAA,SAAAtB,EAAA5P,EAAAE,GAKA,GAJA3uK,EAAAq+K,KACAA,EAAA,CAAgB,KAAAA,IAGhBA,EAAAxkS,KAAA,CAIAwkS,EAAAhvS,KAAAgvS,EAAAhvS,MAAAs/R,EAAAt/R,MAAA,SACAgvS,EAAAjgM,SAAAigM,EAAAjgM,UAAA,OACAigM,EAAA/0R,MAAA+0R,EAAA/0R,OAAA,QACA+0R,EAAAr5L,QAAAtnF,EAAA2gR,EAAAr5L,SAAAq5L,EAAAr5L,QAAA,GACAq5L,EAAAtgM,KAAAsgM,EAAAtgM,OAAA,EACAsgM,EAAAngM,QAAAmgM,EAAAngM,UAAA,EACAmgM,EAAA1uG,MAAAzoG,EAAAm3M,EAAA1uG,QAAAi0F,EAAAya,EAAA1uG,OAAA,KAAA0uG,EAAA1uG,MAEA,OAAA0uG,EAAA1uG,QACA0uG,EAAA1uG,OAAA,IAAA50M,KAAA6tL,MAAA,KAAA6uH,SAAAziT,OAAA,KAAAyiT,SAAA1iT,OAAAgG,KAAA0oL,IAGA,SAAA46H,EAAAjgM,WACAigM,EAAAjgM,SAiCA,SAAAq5L,EAAA4G,EAAA5P,GAaA,IAZA,IAEAgS,EAFA3R,EAAA,IAAAZ,EAAAO,GACAiS,EAAA,IAAAvS,EAAA,MAAwD9+R,KAAAgvS,EAAAhvS,KAAA0uG,KAAAsgM,EAAAtgM,KAAAG,QAAAmgM,EAAAngM,UAQxD1wG,EAAA,EACAC,EAAA,IACAylB,GAAA1lB,EAAAC,GAAA,EACA1S,KAAA6sC,IAAAp6B,EAAAC,GAAA,GACAizS,EAAApqT,KAAA,CACA8nH,SAAAlrF,KAEAutR,EAAA3R,EAAA6R,kBAAAtC,EAAAxkS,KAAAwkS,EAAA1uG,MAAA+wG,IACA3rT,MAAA0iT,EAAA1iT,MAEAm+B,GAAA1lB,GADAC,EAAAylB,IACA,EACKutR,EAAA1rT,MAAA0iT,EAAA1iT,QAGLm+B,EAFAutR,EAAAzrT,OAAAyiT,EAAAziT,QAEAwY,GADAC,EAAAylB,IACA,IAEA1lB,EAAA0lB,GACAzlB,GAAA,GAGAizS,EAAA5+R,MAKA,OAAAoR,CACA,CArEA0tR,CAAA,KAAAnJ,SAAA4G,EAAA5P,IAGA,IAAAoS,EAAA,CACAhnS,KAAAwkS,EAAAxkS,KACAxK,KAAAo/R,EAAA6O,YAAAe,EAAAhvS,KAAAgvS,EAAAtgM,KAAAsgM,EAAAngM,SACAE,SAAAigM,EAAAjgM,SACA90F,MAAA+0R,EAAA/0R,MACA07F,QAAAq5L,EAAAr5L,QACA2qF,MAAA0uG,EAAA1uG,OAGAkxG,EAAAC,MAOA,SAAAzC,EAAA5P,GACA,IAAAK,EAAA,IAAAZ,EAAAO,GACAiS,EAAA,IAAAvS,EAAA,MAAwD9+R,KAAAgvS,EAAAhvS,KAAA0uG,KAAAsgM,EAAAtgM,KAAAG,QAAAmgM,EAAAngM,UAExDwiM,EAAApqT,KAAA,CACA8nH,SAAAigM,EAAAjgM,WAGA,IAAApgG,EAAA8wR,EAAA0D,aAAA6L,EAAAxkS,KAAA6mS,GACAD,EAAA3R,EAAA6R,kBAAAtC,EAAAxkS,KAAAwkS,EAAA1uG,MAAA+wG,GAEA,OAAW1iS,KAAAA,EAAAyiS,YAAAA,EACX,CAnBAM,CAAA1C,EAAA5P,GAGA,IADA,IAAAhwF,EAAA,KAAA6gG,OAAAv+C,UAAAtiD,MACA3rN,EAAA,EAAAsxE,EAAAq6I,EAAA1rN,OAAmCD,EAAAsxE,EAAOtxE,IAC1C2rN,EAAA3rN,GAAAurT,UAAAwC,CA/BA,CAqFA,EA+BA3C,EAAA9/S,UAAAqhT,YAAA,SAAA9gN,GACA,IAAAnmG,EAAA,KAEA,KAAAgmT,eAAAloT,KAAAqoG,GAhCA,SAAAA,GACA,IAAAj0F,EAAAi0F,EAAAj0F,EAAAgwB,EAAAikE,EAAAjkE,EACAikE,EAAAozG,UAAA,GAEAt3I,EAAAkkC,EAAAukB,SACAvkB,EAAAukB,OAAAnyH,SAAA,SAAA+kT,GACA,IAAAprS,EAAAorS,EAAAprS,EAAAgwB,EAAAo7Q,EAAAp7Q,EAAA8wB,EAAAsqP,EAAAtqP,GAAA4vB,EAAA06N,EAAA16N,GAAAzvB,EAAAmqP,EAAAnqP,GAAA0vB,EAAAy6N,EAAAz6N,GACAy6N,EAAAoJ,QAAA,WACApJ,EAAAprS,EAAAA,EACAorS,EAAAp7Q,EAAAA,EACAo7Q,EAAAtqP,GAAAA,EACAsqP,EAAA16N,GAAAA,EACA06N,EAAAnqP,GAAAA,EACAmqP,EAAAz6N,GAAAA,CACA,CACA,IAGAsjB,EAAAugN,QAAA,WACAvgN,EAAAj0F,EAAAA,EACAi0F,EAAAjkE,EAAAA,EACA+/B,EAAAkkC,EAAAukB,SACAvkB,EAAAukB,OAAAnyH,SAAA,SAAA+kT,GACAA,EAAAoJ,SACA,GAEA,CACA,CAMA8B,CAAAriN,GAuDA,SAAA9/F,GACA,IAAAs1F,EAAAwK,EAAA0wM,QAEA,WAAA1wM,EAAAigN,UACApmT,EAAA8mT,OAAA5F,eAAA/6M,EAAAg7M,iBACI,cAAAh7M,EAAAigN,WACJpmT,EAAA8mT,OAAA5F,eAAA/6M,EAAAg7M,kBACAnhT,EAAA8mT,OAAAv+C,UAAAviF,KAAA,UACAhmL,EAAA8mT,OAAA5F,eAAA/6M,EAAAg7M,kBAEI,eAAAh7M,EAAAigN,YACJpmT,EAAA8mT,OAAA5F,eAAA/6M,EAAAg7M,kBACAnhT,EAAA8mT,OAAAv+C,UAAAviF,KAAA,UACAhmL,EAAA8mT,OAAA5F,eAAA/6M,EAAAg7M,kBAIAxlN,IACA37F,EAAA8mT,OAAAv+C,UAAAnoD,SAAAzkH,EAAA,IACA37F,EAAA8mT,OAAAv+C,UAAA83C,UAAA1kN,EAAA,GAAAA,EAAA,KAGAt1F,IAEAs1F,IACA37F,EAAA8mT,OAAAv+C,UAAA83C,WAAA1kN,EAAA,IAAAA,EAAA,IACA37F,EAAA8mT,OAAAv+C,UAAAnoD,SAAAzkH,EAAA,KAGA,UAAAwK,EAAAigN,UACApmT,EAAA8mT,OAAA5F,eAAA/6M,EAAAg7M,iBACI,aAAAh7M,EAAAigN,WACJpmT,EAAA8mT,OAAA5F,eAAA/6M,EAAAg7M,kBACAnhT,EAAA8mT,OAAAv+C,UAAAviF,KAAA,UACAhmL,EAAA8mT,OAAA5F,eAAA/6M,EAAAg7M,kBAEI,cAAAh7M,EAAAigN,YACJpmT,EAAA8mT,OAAA5F,eAAA/6M,EAAAg7M,kBACAnhT,EAAA8mT,OAAAv+C,UAAAviF,KAAA,UACAhmL,EAAA8mT,OAAA5F,eAAA/6M,EAAAg7M,iBAGA,CA/FAsH,EAAA,WACA,IAAAC,EAAAviN,EAAAuiN,YACAA,GACA1oT,EAAA8mT,OAAAQ,wBAGA,IAAAqB,EAAAxiN,EAAA68M,iBACA2F,IACA3oT,EAAA8mT,OAAAv+C,UAAAm4C,qBACA1gT,EAAA8mT,OAAAv+C,UAAAv1E,OAAA21H,EAAAz2S,GAAA,EAAAy2S,EAAAzmR,GAAA,IAGA,IAAA0mR,EAAAziN,EAAA0iN,iBAMA,GALAD,IACA5oT,EAAA8mT,OAAAv+C,UAAAm4C,qBACA1gT,EAAA8mT,OAAAv+C,UAAAk4C,eAAAmI,EAAA12S,GAAA,EAAA02S,EAAA1mR,GAAA,IAGAikE,EAAAtB,MACA7kG,EAAA8oT,yBAAA3iN,QACI,GAAAA,EAAA03G,QACJ79M,EAAA+oT,eAAA5iN,QACI,GAAAA,EAAAiT,GACJp5G,EAAAgpT,aAAA,EAAA7iN,QACI,GAAAA,EAAAuxM,GACJ13S,EAAAgpT,aAAA,EAAA7iN,QACI,GAAAA,EAAAggB,MACJnmH,EAAAipT,aAAA9iN,QACI,QAAA7qG,IAAA6qG,EAAA9kF,KACJrhB,EAAAkpT,YAAA/iN,QACI,GAAAA,EAAA2xM,IACJ93S,EAAAmpT,WAAAhjN,QACI,GAAAA,EAAA4kB,MACJ/qH,EAAAopT,aAAAjjN,QACI,GAAAA,EAAA5V,IACJvwF,EAAAqpT,WAAAljN,QACI,GAAAA,EAAAukB,OACJ1qH,EAAAspT,cAAAnjN,QACI,GAAAA,EAAAgyM,GACJn4S,EAAAupT,UAAApjN,QACI,IAAAA,EAAAy2M,MACJ,yCAAAlwS,KAAAC,UAAAw5F,EAAA0vM,IAGA8S,GAAAC,IACA5oT,EAAA8mT,OAAAv+C,UAAAo4C,mBAGA+H,GACA1oT,EAAA8mT,OAAAS,wBAEA,GA6CA,EAGA7B,EAAA9/S,UAAAkjT,yBAAA,SAAA3iN,GACA,IAAAnmG,EAAA,KACAmmG,EAAAtB,MAAAtsG,SAAA,SAAAuhD,GACA95C,EAAAinT,YAAAntQ,GACA0rQ,EAAAr/M,EAAAozG,UAAAz/J,EAAAy/J,UAGA,GACA,EAGAmsG,EAAA9/S,UAAAmjT,eAAA,SAAAS,GACA,IAAA3rG,EAAA2rG,EAAA3rG,QACA02F,EAAA,KAAAuS,OAAAv+C,UAAAgsC,eACAkV,EAWA,SAAA9nS,GACA,IAAAA,EACA,YAGA,IAAA8nS,EAAA,GACAA,EAAA3rT,KAAA,GAEA,QAAAxD,EAAAujN,EAAAtjN,OAAA,EAAmCD,EAAA,EAAOA,IAC1CmvT,EAAA3rT,KAAA6jB,GAGA,OAAA8nS,CACA,CAxBAC,CAAAF,EAAAlO,MAEAmO,IACAlV,IAAAkV,EAAAlvT,OAAA,GAAAivT,EAAAlO,MAGA1F,EAAAtB,kBAAAz2F,EAAA02F,GACA,IAAAhxS,EAAA,KAAAomT,WAAA9rG,EAAAA,EAAA4rG,GACAjE,EAAAgE,EAAAjwG,UAAAh2M,EAAAg2M,UAiBA,EAEAmsG,EAAA9/S,UAAA+jT,WAAA,SAAA9rG,EAAA7yM,EAAAy+S,EAAAG,EAAAC,EAAArtT,GACA,IAAAwD,EAAA,KACA8pT,EAAA,GAAAvwG,EAAA,GA+BA,OA7BA,KAAA+lG,QAAA1I,KAAA,eA+BA,SAAAr4P,GAGA,IAFA,IAAAwrQ,EAEAzvT,EAAA,EAAAsxE,EAAAk+O,EAAAvvT,OAAyCD,EAAAsxE,EAAOtxE,IAAA,CAChD,IAAAqnQ,EAAAmoD,EAAAxvT,GACA,GAAAqnQ,EAAA0/C,WAAA9iQ,EAAA8iQ,SAAA,CACA0I,EAAApoD,EACA,KACA,CACA,CAEAooD,IACAA,EAAAxrQ,EACAurQ,EAAAhsT,KAAAisT,IAEAA,EAAApwM,MAAAp3G,KAAAoB,IAAAomT,EAAApwM,MAAAp7D,EAAAo7D,OACAowM,EAAA7nR,EAAA3/B,KAAA0P,IAAA83S,EAAA7nR,EAAAqc,EAAArc,EACA,IAhDA,WACAl3B,EAAAA,GAAA6yM,EAEA79M,EAAA8mT,OAAAv+C,UAAAi3C,mBAEA,QAAAllT,EAAA,EAAAsxE,EAAAiyI,EAAAtjN,OAAsCD,EAAAsxE,EAAOtxE,IAAA,CAC7C,IAAAksB,EAAAq3L,EAAAvjN,GACAiC,EAAAyO,EAAA1Q,GAAA66S,WACA6U,EAAAC,EAAA3vT,GAEA,GAAAksB,EAAA2hG,SAAA3hG,EAAA2hG,QAAA,EACA,QAAArgH,EAAA,EAAoBA,EAAA0e,EAAA2hG,QAAoBrgH,IACxCvL,GAAAyO,IAAA1Q,GAAA66S,WAAAsU,EAAAnvT,GAIA0F,EAAA8mT,OAAAv+C,UAAAo3C,YAAApjT,EAAAytT,EAAAE,EAAA1jS,EAAAlsB,IACAksB,EAAAo2R,MAGKp2R,EAAA25R,sBAELngT,EAAA8mT,OAAAv+C,UAAA23C,WAAA15R,IAJAxmB,EAAAinT,YAAAzgS,GACAg/R,EAAAjsG,EAAA/yL,EAAA+yL,WAKA,CAEAv5M,EAAA8mT,OAAAv+C,UAAA63C,oBAAA5jT,EACA,IAEA,CAAUstT,WAAAA,EAAAvwG,UAAAA,GAqBV,SAAA0wG,EAAA3vT,GACA,OAAAmvT,GAAAA,EAAAlvT,OAAAD,EACAmvT,EAAAnvT,GAEA,CACA,CAEA,SAAA4vT,EAAA1jS,EAAA2jS,GACA,GAAA3jS,EAAA4hG,SAAA5hG,EAAA4hG,QAAA,GACA,IAAAgiM,EAAAP,EAAArjS,EAAA4hG,QAAA,EACA,GAAAgiM,GAAAR,EAAArvT,OACA,4BAAA4vT,EAAA,qDAEA,OAAAP,EAAAQ,GAAAD,EACA,CAEA,WACA,CACA,EAGAzE,EAAA9/S,UAAAojT,YAAA,SAAAqB,EAAAlkN,GACA,IAMAmkN,EANAtqT,EAAA,KACAkxI,EAAAm5K,EAAAlkN,EAAAuxM,GAAAvxM,EAAAiT,GACA8gM,EAAA/zM,EAAAg1M,SAEA,KAAA2L,OAAAv+C,UAAA83C,UAAAnG,EAAA39S,OAGA,KAAA+iT,QAAA1I,KAAA,aAUA,SAAAz6S,GAGA,GAAAmuT,EAAA,CACA,IAAArpO,EAAAqpO,EAGA,GAFAA,EAAA,KAEArpO,EAAAypC,OAAA,CACA,IAAA4yL,EAAAr8N,EAAAypC,OAAA,GAEAu3L,EAAA3E,GAAAr8N,EAAA+zN,UAAA,GACAh1S,EAAA8mT,OAAAzD,UAAA/F,EACA,MAAK,GAAAr8N,EAAAg4N,SAAA,CACL,IAAAsR,EAAA,IAAAvI,EAAAhiT,EAAAi/S,SAAA1iT,OACAguT,EAAAC,UAAAvpO,EAAAg4N,SAAA,IACAsR,EAAAr4S,GAAA+uE,EAAA+zN,UACAuV,EAAAroR,EAAA/lC,EAAAsuT,oBAAAF,EAAAE,oBACAzqT,EAAA8mT,OAAAzE,QAAAkI,GAAA,EACA,CACA,CACA,IA9BA,WACAr5K,EAAA34I,SAAA,SAAAuhD,GACAwwQ,EAAAxwQ,EAAAshQ,WACAp7S,EAAAinT,YAAAntQ,GACA0rQ,EAAAr/M,EAAAozG,UAAAz/J,EAAAy/J,UACA,GACA,IAEA,KAAAutG,OAAAv+C,UAAA83C,WAAAnG,EAAA39S,MAuBA,EAGAmpT,EAAA9/S,UAAAqjT,aAAA,SAAAyB,GACA,IAAAC,EAAA,IAAApF,EAAAmF,GAEAC,EAAAC,WAAA,KAAA9D,QAGA,IADA,IAAA+D,EAAAH,EAAAvkM,MAAAkE,QACA/vH,EAAA,EAAAsxE,EAAA8+O,EAAAvkM,MAAAr7G,KAAAvQ,OAAkDD,EAAAsxE,EAAOtxE,IAAA,CAGzD,IAAAkC,EAFAmuT,EAAAG,SAAAxwT,EAAA,KAAAwsT,QAWA,UAPAtqT,EADA2mH,EAAA0nM,GACAA,EAAAvwT,GACI2nE,EAAA4oP,GACJA,EAAAvwT,GAEAuwT,KAIAruT,OAAAlB,GAGA,IAAAiI,EAAA,KAAAomT,WAAAe,EAAAvkM,MAAAr7G,KAAAxQ,GAAAowT,EAAAvkM,MAAAn7G,OAAA0/S,EAAAp3F,SAAA8oF,QAAAsO,EAAAvkM,MAAAr7G,KAAAxQ,EAAAkC,GACAgpT,EAAAkF,EAAAnxG,UAAAh2M,EAAAg2M,WAEAoxG,EAAAI,OAAAzwT,EAAA,KAAAwsT,OAAAvjT,EAAAumT,WACA,CAEAa,EAAAK,SAAA,KAAAlE,OACA,EAGApB,EAAA9/S,UAAAsjT,YAAA,SAAA/iN,GACA,IAAAhqG,EAAA,KAAA8uT,cAAA9kN,GACAhqG,IAAAgqG,EAAAq4M,SAAAr4M,EAAArgG,MACA3J,EAAA6nT,MAAA79M,GAEA,IAAA+kN,EAAA/uT,EAAAA,EAAAomT,YAAA,EACA9lO,EAAA0pB,EAAA1pB,YAAA,EAEA,GAAAtgF,EAAA,CACA,IAAA6oT,EAAAlP,EAAA3vM,GACA6+M,IACA7oT,EAAA2J,GAAAk/S,EAEA,CAUA,GARA7+M,EAAAyzM,cACAz9S,EAAAgvT,aAAAhlN,EAAAyzM,aAGAzzM,EAAA04M,WACA1iT,EAAAgvT,aAAAhlN,EAAA04M,SAAAlF,UAGAx9S,GAAAA,EAAAumT,SAAAzgP,EAAA9lE,EAAAumT,SACA,QAAApoT,EAAA,EAAAsxE,EAAAzvE,EAAAumT,QAAAnoT,OAA2CD,EAAAsxE,EAAOtxE,IAClD6B,EAAAumT,QAAApoT,GAAAs/S,cACAz9S,EAAAumT,QAAApoT,GAAA6wT,aAAAhvT,EAAAumT,QAAApoT,GAAAs/S,aAGAz9S,EAAAumT,QAAApoT,GAAAukT,WACA1iT,EAAAumT,QAAApoT,GAAA6wT,aAAAhvT,EAAAumT,QAAApoT,GAAAukT,SAAAlF,UAKA,KAAAx9S,KAAA,IAAAsgF,GAAAyuO,EAAAzuO,IAAA,CACA,IAAA88H,EAAA,KAAAutG,OAAAzE,QAAAlmT,GACAgqG,EAAAozG,UAAAz7M,KAAAy7M,IACAp9M,EAAA,KAAA8uT,cAAA9kN,MAEA+kN,GAAA/uT,EAAAomT,YAEA,CACA,EAEAmD,EAAA9/S,UAAAujT,WAAA,SAAAhjN,GACAA,EAAA2xM,IAAA9xS,OACA,KAAAihT,YAAA9gN,EAAA2xM,IAAA9xS,OAEAmgG,EAAA2xM,IAAA+B,QACA,KAAAoN,YAAA9gN,EAAA2xM,IAAA+B,OAEA,EAEA6L,EAAA9/S,UAAAqlT,cAAA,SAAAx3B,GAEA,SAAA23B,EAAAC,GACA,IAAAC,EAAAD,EAAAnpP,cACA,QAAA1pE,KAAA6yT,EACAC,EAAA9yT,GAAA6yT,EAAA7yT,GAEA,OAAA8yT,CACA,CAEA,IAAA73B,EAAAwlB,UAAA,IAAAxlB,EAAAwlB,SAAA1+S,OACA,YAOA,IAJA,IAAA4B,EAAA,IAAA6lT,EAAA,KAAA8E,OAAAv+C,UAAAgsC,gBACA+B,EAAA,IAAAZ,EAAA,MAEA6V,GAAA,EACA93B,EAAAwlB,UAAAxlB,EAAAwlB,SAAA1+S,OAAA,IACA4B,EAAAqvT,wBAAA/3B,EAAAwlB,SAAA,GAAAxlB,EAAAwlB,SAAA9sQ,MAAA,KAAAo/Q,IAAA,CACA,IAAAE,GAAA,EACAJ,EAAA53B,EAAAwlB,SAAAxxR,QAGA,GAFA8jS,GAAA,GAEAF,EAAAK,QAAAL,EAAAhqS,KAAA9mB,OAAA,GAAA8wT,EAAA9uT,MAAAJ,EAAAwvT,oBAAA,CACA,IAAAC,EAAAP,EAAA9uT,MAAA8uT,EAAAhqS,KAAA9mB,OACAsxT,EAAAtpT,KAAAwC,MAAA5I,EAAAwvT,oBAAAC,GAIA,GAHAC,EAAA,IACAA,EAAA,GAEAA,EAAAR,EAAAhqS,KAAA9mB,OAAA,CACA,IAAA+wT,EAAAF,EAAAC,GAEAC,EAAAjqS,KAAAgqS,EAAAhqS,KAAA4H,OAAA4iS,GACAR,EAAAhqS,KAAAgqS,EAAAhqS,KAAA4H,OAAA,EAAA4iS,GAEAP,EAAA/uT,MAAA+5S,EAAAh4F,cAAAgtG,EAAAjqS,KAAAiqS,EAAAz0S,KAAAy0S,EAAA1lM,SAAA0lM,EAAA1tG,iBAAA0tG,EAAAQ,cACAT,EAAA9uT,MAAA+5S,EAAAh4F,cAAA+sG,EAAAhqS,KAAAgqS,EAAAx0S,KAAAw0S,EAAAzlM,SAAAylM,EAAAztG,iBAAAytG,EAAAS,cAEAr4B,EAAAwlB,SAAAziS,QAAA80S,GACAG,GAAA,CACA,CACA,CAEAtvT,EAAAquT,UAAAa,GAEAE,EAAAF,EAAAU,YAAAN,CACA,CAIA,OAFAtvT,EAAAymT,oBAAA,IAAAnvB,EAAAwlB,SAAA1+S,OAEA4B,CACA,EAGAupT,EAAA9/S,UAAAwjT,aAAA,SAAAjjN,GACA,IAAAvqG,EAAA,KAAAkrT,OAAA/D,SAAA58M,GACAA,EAAAozG,UAAAz7M,KAAAlC,EACA,EAEA8pT,EAAA9/S,UAAAyjT,WAAA,SAAAljN,GACA,IAAAvqG,EAAA,KAAAkrT,OAAA5D,OAAA/8M,GACAA,EAAAozG,UAAAz7M,KAAAlC,EACA,EAEA8pT,EAAA9/S,UAAA0jT,cAAA,SAAAnjN,GACA,IAAA3pG,EAAA2pG,EAAAsyM,gBAEAn9S,IAAA6qG,EAAA68M,kBAAA,KAAA8D,OAAAv+C,UAAA42C,gBAAA3iT,GAIA,KAAAsqT,OAAA5F,iBAGA,KAAA4F,OAAAvD,YAAAp9M,GAEAA,EAAAukB,OAAAnyH,SAAA,SAAA+kT,GACA,IAAA1hT,EAAA,KAAAkrT,OAAAzD,UAAA/F,GACAn3M,EAAAozG,UAAAz7M,KAAAlC,EACA,GAAI6B,MAEJ,KAAAqpT,OAAAv+C,UAAAnoD,SAAA5jN,EACA,EAEAkpT,EAAA9/S,UAAA2jT,UAAA,SAAApjN,GACA,IAAAvqG,EAAA,KAAAkrT,OAAA3D,MAAAh9M,GACAA,EAAAozG,UAAAz7M,KAAAlC,EACA,EAEAhC,EAAAC,QAAA6rT,kCC7xBA,SAAA1D,EAAA3qO,GACA,KAAAA,SAAAA,EACA,KAAA20O,WAAA,EACA,KAAAC,YAAA,EACA,KAAAC,aAAA,EACA,KAAAxJ,QAAA,EACA,CAEAV,EAAAp8S,UAAA6kT,kBAAA,WACA,IAAAvoR,EAAA,EAKA,OAHA,KAAAwgR,QAAAnqT,SAAA,SAAA8yT,GACAnpR,EAAA3/B,KAAAoB,IAAAu+B,EAAAmpR,EAAAx0S,KAAAq2K,SAAA,IAAAm+H,EAAAzlM,SACA,IACA1jF,CACA,EAEA8/Q,EAAAp8S,UAAA4lT,wBAAA,SAAAH,EAAAc,GAGA,GAFAA,EAAAA,GAAA,GAEA,SAAAzJ,QAAAnoT,OACA,SAEA,QAAAooT,cACA,SAGA,IAAAyJ,EAAAf,EAAA9uT,MACA8vT,EAAAhB,EAAAY,aAAA,EACA,GAAAZ,EAAAU,UACA,QAAAzxT,EAAA,EAAAsxE,EAAAugP,EAAA5xT,OAA0CD,EAAAsxE,EAAOtxE,IAAA,CACjD,IAAAgyT,EAAAH,EAAA7xT,GAGA,GAFA8xT,GAAAE,EAAA/vT,MACA8vT,GAAAC,EAAAL,aAAA,GACAK,EAAAP,UACA,KAEA,CAGA,YAAAG,aAAAE,EAAA,KAAAJ,WAAAK,GAAA,KAAAh1O,QACA,EAEA2qO,EAAAp8S,UAAA4kT,UAAA,SAAAa,GACA,SAAA3I,QAAAnoT,SACA,KAAAyxT,WAAAX,EAAAW,YAAA,GAEA,KAAAC,YAAAZ,EAAAY,aAAA,EAEAZ,EAAAn5S,EAAA,KAAAg6S,aAAA,KAAAF,WAEA,KAAAtJ,QAAA5kT,KAAAutT,GACA,KAAAa,cAAAb,EAAA9uT,MAEA8uT,EAAAkB,UACA,KAAA5J,eAAA,EAEA,EAEAX,EAAAp8S,UAAAy2E,SAAA,WACA,YAAA6vO,aAAA,KAAAF,WAAA,KAAAC,WACA,EAEAjK,EAAAp8S,UAAA+lT,kBAAA,WACA,YAAAt0O,SAAA,KAAAgF,UACA,EAMA2lO,EAAAp8S,UAAA28S,UAAA,WACA,IAAA5+S,EAAA,EAMA,OAJA,KAAA++S,QAAAnqT,SAAA,SAAAuhD,GACAn2C,EAAApB,KAAAoB,IAAAA,EAAAm2C,EAAAt9C,QAAA,EACA,IAEAmH,CACA,EAEA/J,EAAAC,QAAAmoT,sCCxFA,IAAAtzM,EAAkBk9B,EAAA,OAAAl9B,YAClBwzM,EAAoBt2K,EAAQ,OAW5B,SAAA05K,EAAA/8C,EAAA+2C,GACA,KAAAkN,iBAAA,EACA,KAAAC,YAAA,GACA,KAAAnN,QAAAA,EACA,KAAAwH,OAAA,IAAA5E,EAAA35C,EAAA+2C,EACA,CAEA,SAAAoN,EAAA1sT,EAAA2sT,GACA,IAAA/wT,EAAA+wT,EAAA3sT,GAKA,OAJApE,IACAoE,EAAAkhT,iBACAtlT,EAAA+wT,EAAA3sT,IAEApE,CACA,CAEA0pT,EAAA1/S,UAAAy8S,QAAA,SAAAlmT,EAAAmmT,EAAA5zS,GACA,OAAAg+S,EAAA,eAAA1sT,GACA,OAAAA,EAAA8mT,OAAAzE,QAAAlmT,EAAAmmT,EAAA5zS,EACA,GACA,EAEA42S,EAAA1/S,UAAAm9S,SAAA,SAAAh4L,EAAAr8G,GACA,OAAAg+S,EAAA,eAAA1sT,GACA,OAAAA,EAAA8mT,OAAA/D,SAAAh4L,EAAAr8G,EACA,GACA,EAEA42S,EAAA1/S,UAAAs9S,OAAA,SAAAn4L,EAAAr8G,GACA,OAAAg+S,EAAA,eAAA1sT,GACA,OAAAA,EAAA8mT,OAAA5D,OAAAn4L,EAAAr8G,EACA,GACA,EAEA42S,EAAA1/S,UAAAu9S,MAAA,SAAAhL,EAAAzpS,GACA,OAAAg+S,EAAA,eAAA1sT,GACA,OAAAA,EAAA8mT,OAAA3D,MAAAhL,EAAAzpS,EACA,GACA,EAEA42S,EAAA1/S,UAAAy9S,UAAA,SAAA/F,EAAAmG,EAAAC,EAAAh1S,GACA,YAAAo4S,OAAAzD,UAAA/F,EAAAmG,EAAAC,EAAAh1S,EACA,EAEA42S,EAAA1/S,UAAA+9S,UAAA,SAAApnT,EAAAC,GACA,YAAAsqT,OAAAnD,UAAApnT,EAAAC,EACA,EAEA8oT,EAAA1/S,UAAAg+S,QAAA,WACA,YAAAkD,OAAAlD,SACA,EAEA0B,EAAA1/S,UAAA29S,YAAA,SAAAp9M,GACA,KAAA2gN,OAAAvD,YAAAp9M,EACA,EAEAm/M,EAAA1/S,UAAAi+S,YAAA,SAAA+I,EAAA9I,EAAAC,EAAAzB,GACA,KAAAwE,OAAAjD,YAAA+I,EAAA9I,EAAAC,EAAAzB,KACA,KAAApB,iBACA,KAAA4F,OAAAjD,YAAA+I,EAAA9I,EAAAC,EAAAzB,GAEA,EAEAgD,EAAA1/S,UAAAs7S,eAAA,SAAAC,GAEA,IAAA0L,EAAA,KAAA/F,OAAAv+C,QAAA24C,eAAAC,GAKA,KAAAsL,YAAAl0T,SAAA,SAAAu0T,GACAp+M,EAAAo+M,EAAAC,gBAAA,KAAAjG,OAAAv+C,QAAAviF,QACA8mI,EAAAC,gBAAA,KAAAjG,OAAAv+C,QAAAviF,OAAA,EACA,KAAA8gI,OAAAjD,YAAAiJ,GAAA,IAEA,KAAAhG,OAAAv+C,QAAAnoD,SAAA0sG,EAAAtwT,OAEA,GAAIiB,MAEJ,KAAAqpT,OAAAxH,QAAA9hP,KAAA,eACA6jP,SAAAwL,EAAAxL,SACA1nM,MAAAkzM,EAAAlzM,MACAz3E,EAAA,KAAA4kR,OAAAv+C,QAAArmO,GAEA,EAEAojR,EAAA1/S,UAAA0hT,sBAAA,SAAA/qT,EAAAC,GACA,SAAAgwT,qBACA,KAAAQ,UAAA,KAAAlG,OAAAv+C,QAAAr2P,EACA,KAAA40S,OAAA5C,YAAA3nT,EAAAC,GAEA,EAEA8oT,EAAA1/S,UAAA2hT,uBAAA,SAAA0F,EAAAC,GACA,cAAAV,iBAAA,CACA,IAAAW,EAAA,KAAArG,OAAAv+C,QACA,KAAAu+C,OAAA1C,aAEA,IAAAgJ,EAAAD,EAAAlnG,MAAA1rN,OACA,GAAA6yT,EAAA,GAEA,IAAAR,EAAAO,EAAAlnG,MAAA,GAKA,GAJA2mG,EAAAl/H,QAAAu/H,EACAL,EAAAn3N,QAAAy3N,EAGAE,EAAA,EAEA,QAAA9xT,IAAA2xT,QAAA3xT,IAAA4xT,EACAN,EAAApwT,OAAA2wT,EAAA5M,iBAAAtB,SAAAziT,OAAA2wT,EAAAjO,YAAA5iT,IAAA6wT,EAAAjO,YAAA39S,WACM,CACNqrT,EAAApwT,OAAA,KAAAsqT,OAAAv+C,QAAAg4C,iBAAAtB,SAAAziT,OAAA,KAAAsqT,OAAAv+C,QAAA22C,YAAA5iT,IAAA,KAAAwqT,OAAAv+C,QAAA22C,YAAA39S,OACA,QAAAjH,EAAA,EAAAsxE,EAAA,KAAA6gP,YAAAlyT,OAAkDD,EAAAsxE,EAAOtxE,IACzDsyT,EAAApwT,QAAA,KAAAiwT,YAAAnyT,GAAAkC,MAEA,MAEAowT,EAAApwT,OAAA2wT,EAAAjrR,OAGA5mC,IAAA2xT,QAAA3xT,IAAA4xT,EACA,KAAApG,OAAAjD,YAAA+I,GAAA,SAEA,KAAA/I,YAAA+I,EAEA,CACA,CACA,EAEAtH,EAAA1/S,UAAAynT,yBAAA,WACA,IAAAF,EAAA,KAAArG,OAAAv+C,QACAukD,EAAA,CAAa57K,MAAA,IAab,OAXAi8K,EAAAlnG,MAAA,GAAA/0E,MAAA34I,SAAA,SAAAuhD,GACAgzQ,EAAA57K,MAAApzI,KAAAg8C,EACA,IAEAgzQ,EAAAp/H,QAAA,KAAAs/H,UAGAF,EAAAtwT,OAAA2wT,EAAAjrR,EAEA4qR,EAAAC,gBAAA,GAEAD,CACA,EAEAxH,EAAA1/S,UAAA0nT,kBAAA,SAAAR,GACA,KAAAL,YAAA3uT,KAAAgvT,EACA,EAEAxH,EAAA1/S,UAAA2nT,mBAAA,WACA,KAAAd,YAAAnjS,KACA,EAEAg8R,EAAA1/S,UAAA2iQ,QAAA,WACA,YAAAu+C,OAAAv+C,OACA,EAEA3uQ,EAAAC,QAAAyrT,sCCvKA,IAJAzhN,EAIA2pN,GAJA3pN,EAI6B+nC,EAAQ,SAHrC,kBAAA/nC,GAAA,YAAAA,EAAAA,EAAA,QAAAA,EAcAjqG,EAAAC,QAAA,CACA4zT,kBAVA,WACA,OAAAD,CACA,EASAE,kBAPA,SAAAvzT,GAEA,WAAAqzT,EADArzT,EAAAA,GAAA,GAEA,uCCZA,IAAAwzT,EAAmB/hL,EAAQ,OAC3By4K,EAAmBz4K,EAAQ,OAC3B85K,EAAoB95K,EAAQ,OAC5Bk8K,EAAYl8K,EAAQ,OACpBu5K,EAAmBv5K,EAAQ,OAC3BgiL,EAAiBhiL,EAAQ,OACzBiiL,EAAoBjiL,EAAQ,OAC5B8pK,EAAgB9pK,EAAQ,OACxBzoB,EAAiByoB,EAAA,OAAAzoB,WACjBqkB,EAAeoE,EAAA,OAAApE,SACftiG,EAAe0mG,EAAA,OAAA1mG,SACf4mQ,EAAgBlgK,EAAA,OAAAkgK,UAChB7pO,EAAc2pE,EAAA,OAAA3pE,QACdysC,EAAkBk9B,EAAA,OAAAl9B,YAClBu2M,EAAgBr5K,EAAA,OAAAq5K,UAChBC,EAAiBt5K,EAAA,OAAAs5K,WACjBz5I,EAAe7/B,EAAQ,OAEvBkiL,EAAA,SAAA5qS,EAAA6qS,EAAA/wG,GACA,QAAA1iN,EAAA,EAAiBA,EAAAyzT,EAAAxzT,OAA0BD,IAAA,CAC3C,IAAA0zT,EAAAD,EAAAzzT,GAAA2S,cAEA,QAAA4J,KAAAqM,EACA,GAAArM,EAAA5J,gBAAA+gT,EACA,OAAAn3S,CAGA,CAEA,OAAAmmM,CACA,EAsBA,SAAAixG,EAAA3J,GACA,KAAAA,gBAAAA,CACA,CAyHA,SAAA4J,EAAAhc,GAKA,SAAAic,EAAA31T,GACA,IAEA41T,EAAA51T,EAAA+xH,OAAA,GAAA5wF,cAAAnhC,EAAA2zC,MAAA,GACA,WAHA,uCACA,yDAEAv+B,QAAAwgT,GACAA,EAGA51T,EAAAglB,QAAA,UACA,CAEA,IAAA2vB,EAAA,CACAumL,SAAA,UACAhB,QAAA,WAGA,GAAAw/E,EAAA/kQ,KACA,QAAA30C,KAAA05S,EAAA/kQ,KAAA,CACA,IAAAt8B,EAAAqhS,EAAA/kQ,KAAA30C,GACAqY,IAEAs8B,EADA30C,EAAA21T,EAAA31T,IACAqY,EAEA,CAEA,OAAAs8B,CACA,CAkEA,SAAAkhR,EAAA1yN,GACA,GAAAz2D,EAAAy2D,GACAA,EAAA,CAAat/F,KAAAs/F,EAAA9nE,MAAA8nE,EAAAr/F,IAAAq/F,EAAAp6F,OAAAo6F,QACV,GAAA15B,EAAA05B,GACH,OAAAA,EAAAphG,OACAohG,EAAA,CAAct/F,KAAAs/F,EAAA,GAAAr/F,IAAAq/F,EAAA,GAAA9nE,MAAA8nE,EAAA,GAAAp6F,OAAAo6F,EAAA,QACV,QAAAA,EAAAphG,OAGJ,sCAFAohG,EAAA,CAAct/F,KAAAs/F,EAAA,GAAAr/F,IAAAq/F,EAAA,GAAA9nE,MAAA8nE,EAAA,GAAAp6F,OAAAo6F,EAAA,GAGd,CAGA,OAAAA,CACA,CAsEA,SAAA2yN,EAAAzN,EAAA0D,GACA,IAAAgK,EAAAhK,EAAApqT,QAAAqrB,KAAA,GAAA++R,EAAApqT,QAAAqrB,KAAA,0BAEA,GAAAq7R,EAAA5B,SAAAgC,cAAAsN,EAAA,CACA,IAAAhyT,EAAAgoT,EAAApqT,QAAAqrB,KAAA,GACAhpB,EAAA+nT,EAAApqT,QAAAqrB,KAAA,GACA++R,EAAApqT,QAAAqrB,KAAA,CAAAhpB,EAAAD,EACA,CACA,CA+DA,SAAAiyT,EAAAtsR,EAAAmpR,GACA,IAAAjuJ,EAAAl7H,EAOA,OANAmpR,EAAAtoI,MACA3lB,GAAA,IAAAiuJ,EAAAzlM,UAEAylM,EAAAltK,MACAif,GAAA,IAAAiuJ,EAAAzlM,UAEAw3C,CACA,CAEA,SAAAqxJ,EAAAtyT,EAAA+V,EAAAgwB,EAAAkkJ,EAAAm+H,GACA,SAAAmK,EAAAvD,EAAAE,GACA,IAAAsD,EACAC,EACAtY,EAAA,IAAAZ,EAAA,MAEA,GAAAhnM,EAAAy8M,EAAA5xG,WACA,mCAGA,IAAAooG,EAAAwJ,EAAA5xG,UAAA,GAAAooG,WAAAnkQ,WAOA,OALA6tQ,EAAAhqS,KAAAsgS,EACAgN,EAAArY,EAAAh4F,cAAA+sG,EAAAhqS,KAAAgqS,EAAAx0S,KAAAw0S,EAAAzlM,SAAAylM,EAAAztG,iBAAAytG,EAAAS,cACA8C,EAAAvD,EAAA9uT,MAAAoyT,EACAtD,EAAA9uT,MAAAoyT,EAEAtD,EAAApyM,WACA,YACAoyM,EAAAn5S,GAAA08S,EACA,MACA,aACAvD,EAAAn5S,GAAA08S,EAAA,EAGA,CAEAzyT,EAAAgvT,cACAuD,EAAAvyT,EAAAgvT,aAAAhvT,EAAAumT,QAAA,IAGAxwS,EAAAA,GAAA,EACAgwB,EAAAA,GAAA,EAEA,IAAAq7K,EAAAphN,EAAAomT,YAEAlmH,EAAAkhB,EADAphN,EAAAsuT,oBAGAoD,EAAAgB,eAAA1yT,EAAA+V,EAAAgwB,EAAAkkJ,EAAAm+H,GAGA,QAAAjqT,EAAA,EAAAsxE,EAAAzvE,EAAAumT,QAAAnoT,OAA0CD,EAAAsxE,EAAOtxE,IAAA,CACjD,IAAA+wT,EAAAlvT,EAAAumT,QAAApoT,GACAw0T,EAAAvxG,EAAA8tG,EAAAx0S,KAAAq2K,SAAA,IAAAm+H,EAAAzlM,SAAAy2E,EAEAgvH,EAAAF,cACAuD,EAAArD,EAAAF,aAAAE,GAGA,IAAAlxT,EAAA,CACAioN,WAAA,EACArtI,UAAAs2O,EAAA9uT,MACAqhN,iBAAAytG,EAAAztG,iBACA4B,UAAA,EACAhhK,KAAA6sQ,EAAA7sQ,MAGA6sQ,EAAAngM,oBACA/wH,EAAAooN,KAAA8oG,EAAAngM,mBAGA/uH,EAAA2J,IAAA,IAAAxL,IACAH,EAAA4nB,YAAA5lB,EAAA2J,IAGAulT,EAAAS,eACA3xT,EAAA6/M,SAAAqxG,EAAAS,cAGA,IAAAt/L,EAAAtnF,EAAAmmR,EAAA7+L,SAAA6+L,EAAA7+L,QAAA,EACA+3L,EAAA/3L,QAAAA,GACA+3L,EAAAthO,KAAAooO,EAAAv6R,OAAA,SAEAyzR,EAAA5nH,MAAA0uH,EAAAx0S,KACA0tS,EAAA3+L,SAAAylM,EAAAzlM,UAEA,IAAAmpM,EAAAP,EAAAtsR,EAAA4sR,EAAAzD,GACA9G,EAAAljS,KAAAgqS,EAAAhqS,KAAAnP,EAAAm5S,EAAAn5S,EAAA68S,EAAA50T,GAEAkxT,EAAA2D,aACAzK,EAAAl/H,IAAA,CAA8BE,KAAA,SAAAnsJ,EAAA,OAAAP,EAAA,CAAAwyR,EAAA2D,WAAA,OAAyD10S,MACvFiqS,EAAA1+F,SAAA3zM,EAAAm5S,EAAAn5S,EAAA68S,EAAA1D,EAAA9uT,MAAA8uT,EAAA7uT,OAAA,CACAgpL,QAAA,OACAugC,KAAA,CAAAslG,EAAA2D,WAAA,0BAIA,CAEAnB,EAAAoB,gBAAA9yT,EAAA+V,EAAAgwB,EAAAqiR,EACA,CAEA,SAAA2K,EAAAlpI,EAAAu+H,GACA,IAAAsB,EAAA7/H,EAAA6/H,UAEAtB,EAAAthO,KAAA4iO,EAAA/0R,OACAyzR,EAAA/3L,QAAAq5L,EAAAr5L,SAEA+3L,EAAA9sH,OAEA8sH,EAAA5oH,OAAAkqH,EAAA1uG,MAAA,CAAqCz3H,OAAA,CAAA6kO,EAAAv+H,KAAAzpL,MAAA,EAAAgoT,EAAAv+H,KAAAxpL,OAAA,KAErC,IAAA0V,EAAAqyS,EAAAv+H,KAAAzpL,MAAA,EAAAspT,EAAAyC,MAAA9iS,KAAAjpB,MAAA,EACA2lC,EAAAqiR,EAAAv+H,KAAAxpL,OAAA,EAAAqpT,EAAAyC,MAAA9iS,KAAAhpB,OAAA,EAEA+nT,EAAA5nH,MAAAkpH,EAAAhvS,KACA0tS,EAAA3+L,SAAAigM,EAAAjgM,UACA2+L,EAAAljS,KAAAwkS,EAAAxkS,KAAAnP,EAAAgwB,EAAA,CAAwCkgL,WAAA,IAExCmiG,EAAA7sH,SACA,CAEA,SAAAy3H,EAAA7R,EAAAl3H,EAAAm+H,GAEAA,EAAAz0Q,UAAAwtQ,EAAAxtQ,WAAA,GACAwtQ,EAAAziH,KACA0pH,EAAA1pH,KAAAyiH,EAAAziH,KAAAtgM,OAAA,CAAuCyhF,MAAAshO,EAAAziH,KAAA7+G,OAAAshO,EAAAziH,KAAAtgM,OAAAugM,MAAAwiH,EAAAziH,KAAAC,OAAA,IAEvCypH,EAAAzvG,SAEAyvG,EAAA3pH,SAAA0iH,EAAA1iH,UAAA,SACA2pH,EAAAnqH,QAAAkjH,EAAAljH,SAAA,QAIA,IAAAg1H,EAAA,KAEA,OAAA9R,EAAAj8S,MACA,cACAkjT,EAAAjvG,QAAAgoG,EAAAprS,EAAAorS,EAAAp7Q,EAAAo7Q,EAAAvtG,GAAAutG,EAAAtkH,IAEAskH,EAAA3jH,iBACAy1H,EAAA7K,EAAA5qH,eAAA2jH,EAAAprS,EAAAorS,EAAAvtG,GAAAutG,EAAAp7Q,EAAAo7Q,EAAAprS,EAAAorS,EAAAvtG,GAAAutG,EAAAp7Q,IAEA,MACA,WACAo7Q,EAAApyN,EACAq5N,EAAAlvG,YAAAioG,EAAAprS,EAAAorS,EAAAp7Q,EAAAo7Q,EAAAjrS,EAAAirS,EAAAl9R,EAAAk9R,EAAApyN,GAEAq5N,EAAAl4N,KAAAixN,EAAAprS,EAAAorS,EAAAp7Q,EAAAo7Q,EAAAjrS,EAAAirS,EAAAl9R,GAGAk9R,EAAA3jH,iBACAy1H,EAAA7K,EAAA5qH,eAAA2jH,EAAAprS,EAAAorS,EAAAp7Q,EAAAo7Q,EAAAprS,EAAAorS,EAAAjrS,EAAAirS,EAAAp7Q,IAEA,MACA,WACAqiR,EAAAvxH,OAAAsqH,EAAAtqP,GAAAsqP,EAAA16N,IACA2hO,EAAAtxH,OAAAqqH,EAAAnqP,GAAAmqP,EAAAz6N,IACA,MACA,eACA,OAAAy6N,EAAAhtR,OAAA/1B,OACA,MAGAgqT,EAAAvxH,OAAAsqH,EAAAhtR,OAAA,GAAApe,EAAAorS,EAAAhtR,OAAA,GAAA4R,GACA,QAAA5nC,EAAA,EAAAsxE,EAAA0xO,EAAAhtR,OAAA/1B,OAA6CD,EAAAsxE,EAAOtxE,IACpDiqT,EAAAtxH,OAAAqqH,EAAAhtR,OAAAh2B,GAAA4X,EAAAorS,EAAAhtR,OAAAh2B,GAAA4nC,GAGA,GAAAo7Q,EAAAhtR,OAAA/1B,OAAA,GACA,IAAA82E,EAAAisO,EAAAhtR,OAAA,GACA++R,EAAA/R,EAAAhtR,OAAAgtR,EAAAhtR,OAAA/1B,OAAA,IAEA+iT,EAAAnqH,WAAA9hH,EAAAn/D,IAAAm9S,EAAAn9S,GAAAm/D,EAAAnvC,IAAAmtR,EAAAntR,IACAqiR,EAAApxH,WAEA,CACA,MACA,WACAoxH,EAAA/jO,KAAA88N,EAAAn7R,GAIA,GAAAm7R,EAAA3jH,gBAAAy1H,EAAA,CACA,IAAAj4N,EAAA,GAAAmmN,EAAA3jH,eAAAp/L,OAAA,GAEA,IAAAD,EAAA,EAAkBA,EAAAgjT,EAAA3jH,eAAAp/L,OAAkCD,IACpD80T,EAAA/zT,KAAAf,EAAA68F,EAAAmmN,EAAA3jH,eAAAr/L,IAGAgjT,EAAAxsR,MAAAs+R,CACA,CAEAnK,EAAA3H,EAAAxsR,SACAwsR,EAAAxsR,MAAAo0R,EAAA5H,EAAAxsR,MAAAs1J,IAGA,IAAAgC,EAAAljJ,EAAAo4Q,EAAAl1H,aAAAk1H,EAAAl1H,YAAA,EACAE,EAAApjJ,EAAAo4Q,EAAAh1H,eAAAg1H,EAAAh1H,cAAA,EAEAg1H,EAAAxsR,OAAAwsR,EAAA3yL,WACA45L,EAAAl+L,UAAAi3L,EAAAxsR,MAAAs3J,GACAm8H,EAAAh8H,YAAA+0H,EAAA3yL,UAAA29D,GACAi8H,EAAAvpH,iBACGsiH,EAAAxsR,OACHyzR,EAAAl+L,UAAAi3L,EAAAxsR,MAAAs3J,GACAm8H,EAAAthO,SAEAshO,EAAAh8H,YAAA+0H,EAAA3yL,WAAA,QAAA29D,GACAi8H,EAAAvhO,SAEA,CAEA,SAAAssO,EAAAvkM,EAAA74G,EAAAgwB,EAAAqiR,GACA,IAAA/3L,EAAAtnF,EAAA6lF,EAAAyB,SAAAzB,EAAAyB,QAAA,EAEA,GADA+3L,EAAA/3L,QAAAA,GACAzB,EAAA06F,MAAA,CACA,IAAAjrH,EAAAuwB,EAAA06F,MAAAjrH,OAAA,SACAmrH,EAAA56F,EAAA06F,MAAAE,QAAA,SACAppN,EAAAwuH,EAAA06F,MAAAlpN,MAAAwuH,EAAA06F,MAAAlpN,MAAAwuH,EAAAxuH,MACAC,EAAAuuH,EAAA06F,MAAAjpN,OAAAuuH,EAAA06F,MAAAjpN,OAAAuuH,EAAAvuH,OACA+nT,EAAA9sH,OACA8sH,EAAAl4N,KAAA0+B,EAAA74G,EAAA64G,EAAA7oF,EAAA3lC,EAAAC,GAAAqqL,OACA09H,EAAAx5L,MAAAA,EAAAA,MAAAA,EAAA74G,EAAA64G,EAAA7oF,EAAA,CAAmDujL,MAAA,CAAAlpN,EAAAC,GAAAg+F,MAAAA,EAAAmrH,OAAAA,IACnD4+F,EAAA7sH,SACA,MACA6sH,EAAAx5L,MAAAA,EAAAA,MAAAA,EAAA74G,EAAA64G,EAAA7oF,EAAA,CAAmD3lC,MAAAwuH,EAAAwtL,OAAA/7S,OAAAuuH,EAAAytL,UAEnDztL,EAAAvsE,MACA+lQ,EAAA/lQ,KAAAusE,EAAA74G,EAAA64G,EAAA7oF,EAAA6oF,EAAAwtL,OAAAxtL,EAAAytL,QAAAztL,EAAAvsE,MAEAusE,EAAAikM,aACAzK,EAAAl/H,IAAA,CAAkBE,KAAA,SAAAnsJ,EAAA,OAAAP,EAAA,CAAAkyF,EAAAikM,WAAA,OAAwD10S,MAC1EiqS,EAAA1+F,SAAA96F,EAAA74G,EAAA64G,EAAA7oF,EAAA6oF,EAAAwtL,OAAAxtL,EAAAytL,QAAA,CAAsEhzH,QAAA,OAAAugC,KAAA,CAAAh7F,EAAAikM,WAAA,2BAEtEjkM,EAAAG,mBACAq5L,EAAAhiG,KAAAx3F,EAAA74G,EAAA64G,EAAA7oF,EAAA6oF,EAAAwtL,OAAAxtL,EAAAytL,QAAAztL,EAAAG,kBAEA,CAEA,SAAAqkM,EAAAh/N,EAAAr+E,EAAAgwB,EAAAqiR,EAAAtO,GACA,IAAA97S,EAAA9B,OAAAo0I,OAAA,CAA+BlwI,MAAAg0F,EAAAgoN,OAAA/7S,OAAA+zF,EAAAioN,QAAAp4G,UAAA,GAAwD7vG,EAAAp2F,SACvFA,EAAAukM,aAAA,SAAA4B,EAAA/6E,EAAAg7E,GACA,IAAAivH,EAAAlvH,EAAAh7L,MAAA,KAAA4gD,KAAA,SAAAvrB,GAAyD,OAAAA,EAAAqL,OAAAxoB,QAAA,gBACzD3G,EAAAi3S,EAAA7X,EAAA/yR,MAAAssS,EAAAj/N,EAAA15E,MAAA,UAEA6jM,EAAAu7F,EAAA2O,YAAA/tS,EAAA0uG,EAAAg7E,GACA,UAAAma,EAAA,CACA,IAAAr5M,EAAA40S,EAAAyO,YAAAn/L,EAAAg7E,GACA,UAAAn5I,MAAA,SAAAvwC,EAAA,eAAAxV,EAAA,mEACA,CAEA,OAAAq5M,CACA,EAEAjvC,EAAA84I,EAAAh0N,EAAAA,IAAAA,EAAAr+E,EAAAq+E,EAAAruD,EAAA/nC,EACA,CAEA,SAAAwpT,EAAAt3N,EAAAk4N,GACAA,EAAA9sH,OACA8sH,EAAA59H,WAAAt6F,EAAAn6E,EAAA,IAAAm6E,EAAAnqD,EAAA,IAAAmqD,EAAA9vF,MAAA,IAAA8vF,EAAA7vF,OAAA,OACA+nT,EAAA19H,MACA,CAEA,SAAA+8H,EAAAW,GACAA,EAAA7sH,SACA,CA5kBAu2H,EAAAroT,UAAA6sS,qBAAA,SAAAP,EAAA/3S,GACAA,EAAAA,GAAA,GAEA+3S,EAAAr6S,QAAAq6S,EAAAr6S,SAAA,MACAq6S,EAAA3vG,UAAAupG,EAAAoG,EAAA3vG,WAAA2vG,EAAA3vG,SACA2vG,EAAA1kL,OAAA0kL,EAAA1kL,QAAA,GACA0kL,EAAAgN,iBAAA5jT,IAAA42S,EAAAgN,aAAA,OAAAhN,EAAAgN,YAAAhN,EAAAgN,YAAA,GAEA,IAAAD,EAsIA,SAAAA,EAAAkC,GACA,SAAAsO,EAAAtO,GACA,QAAA35K,EAAA25K,KAEA,cADAA,EAAAA,EAAAl0S,gBACAuY,EAAAjpB,MAAAipB,EAAAhpB,QACA,cAAA2kT,GAAA37R,EAAAjpB,MAAAipB,EAAAhpB,OAGA,CAGAyiT,GAAA,SAAAA,EAAAziT,SACAyiT,EAAAziT,OAAA8jJ,KAGA,IAAA96H,EAgFA,SAAAy5R,GACA,GAAAz3K,EAAAy3K,GAAA,CACA,IAAAz5R,EAAAsiS,EAAA7I,EAAAtlR,eACA,IAAAnU,EACA,kBAAAy5R,EAAA,kBAEA,OAAW1iT,MAAAipB,EAAA,GAAAhpB,OAAAgpB,EAAA,GACX,CAEA,OAAAy5R,CACA,CA1FAyQ,CAAAzQ,GAAA,MAKA,OAJAwQ,EAAAtO,KACA37R,EAAA,CAAWjpB,MAAAipB,EAAAhpB,OAAAA,OAAAgpB,EAAAjpB,QAEXipB,EAAAy7R,YAAAz7R,EAAAjpB,MAAAipB,EAAAhpB,OAAA,uBACAgpB,CACA,CA3JAmqS,CAAAzd,EAAA+M,SAAA/M,EAAAiP,iBAEAyO,EAAA,CACApqS,KAAA,CAAAy5R,EAAA1iT,MAAA0iT,EAAAziT,QACA6sM,WAAA6oG,EAAAr6S,QACA0qM,SAAA2vG,EAAA3vG,SACAuG,aAAAopG,EAAAppG,aACAD,cAAAqpG,EAAArpG,cACAY,YAAAyoG,EAAAzoG,YACA9lB,KAAAuuH,EAAA2d,SACA/1G,iBAAAgyF,EAAA3xS,EAAA2/M,kBAAA3/M,EAAA2/M,gBACAma,YAAA95N,EAAA85N,cAAA,EACAF,eAAA,EACA5mL,KAAA+gR,EAAAhc,GACAr7R,KAAA,MAGA,KAAA0tS,UAAAoJ,EAAAD,kBAAAkC,GAEA,KAAA3Z,aAAA,IAAAoO,EAAA,KAAAC,gBAAA,KAAAC,WAEA,IAAAuL,EAAA,IAAApK,EAAAzG,EAAAoP,EAAAnc,EAAAgN,aAAA,IAAAiG,EAAA,KAAAZ,UAAArS,EAAA1kL,QAAA,IAAAogM,GAEAkC,EAuJAnK,qBAAA,CACAoK,UAAA,CACArU,WAAA,SAAAphT,GACA,QACA,EACAqhT,WAAA,SAAArhT,GACA,QACA,EACA8gF,YAAA,SAAA9gF,GACA,OAAAA,EAAA,GACA,EACA0hT,aAAA,SAAA1hT,EAAA6rG,GACA,OAAA7rG,EAAA6rG,EAAAggB,MAAAn7G,OAAAzQ,OAAA,KACA,GAEAy1T,eAAA,CACAtU,WAAA,SAAAphT,EAAA6rG,GACA,WAAA7rG,GAAAA,IAAA6rG,EAAAggB,MAAAr7G,KAAAvQ,OACA,EAEAD,IAAA6rG,EAAAggB,MAAA8pM,WAAA,GACA,EACAtU,WAAA,SAAArhT,GACA,QACA,EACA8gF,YAAA,SAAA9gF,GACA,WAAAA,EAAA,GACA,EACA0hT,aAAA,SAAA1hT,EAAA6rG,GACA,OAAA7rG,IAAA6rG,EAAAggB,MAAAn7G,OAAAzQ,OAAA,KACA,GAEA21T,qBAAA,CACAxU,WAAA,SAAAphT,EAAA6rG,GACA,WAAA7rG,GAAAA,IAAA6rG,EAAAggB,MAAAr7G,KAAAvQ,OACA,EAEAD,IAAA6rG,EAAAggB,MAAA8pM,WAAA,GACA,EACAtU,WAAA,SAAArhT,GACA,QACA,EACAshT,WAAA,SAAAthT,GACA,WAAAA,EAAA,cACA,EACA8gF,YAAA,SAAA9gF,GACA,WAAAA,EAAA,GACA,EACA0hT,aAAA,SAAA1hT,EAAA6rG,GACA,OAAA7rG,IAAA6rG,EAAAggB,MAAAn7G,OAAAzQ,OAAA,KACA,KAxMAJ,EAAAg4S,cACA2d,EAAAnK,qBAAAxrT,EAAAg4S,cAGA,IAAAlsF,EAAA6pG,EAAAlK,eAAA1T,EAAAv2N,QAAA,KAAAs6N,aAAA/D,EAAA/uM,QAAA,GAAwG+uM,EAAAiE,cAAA,CACxGvwL,SAAA,GACA/uG,KAAA,UACEq7R,EAAAj3O,WAAAi3O,EAAAxsS,OAAAwsS,EAAAv+Q,OAAAu+Q,EAAA1kL,OAAA0kL,EAAA2T,UAAA3T,EAAAie,iBACFC,EAAAle,EAAAme,iBAAA,EAOA,GANAnrR,EAAAkrR,IAAAA,GAAA,IACAnqG,EAAAA,EAAA95K,MAAA,EAAAikR,IAKAnR,EAAAziT,SAAA8jJ,IAAA,CACA,IAAAgwK,EAqDA,SAAArqG,EAAA9f,GACA,SAAAoqH,EAAAz2Q,GACA,OAAAqpE,EAAArpE,EAAAA,KAAAyoQ,WACAzoQ,EAAAA,KAAAyoQ,YACIzoQ,EAAAA,KAAA0+P,QACJ1+P,EAAAA,KAAA0+P,QACI,WAAA1+P,EAAAz4C,KACJ,qBAAAy4C,EAAAA,KAAA8oC,GACA9oC,EAAAA,KAAA8oC,GAAA9oC,EAAAA,KAAA+oC,GAAA/oC,EAAAA,KAAA8oC,GAAA9oC,EAAAA,KAAA+oC,GAEA/oC,EAAAA,KAAA15B,EAIA,CAEA,CAEA,SAAAowS,EAAA12Q,GAGA,OAFAA,EAAAA,KAAA5X,GAAA,GACAquR,EAAAz2Q,EAEA,CAEA,IAAA22Q,EAAApC,EAAAloH,GAAA,IACA3pM,EAAAi0T,EAAAn0T,IAaA,OAXA2pN,EAAA1tN,SAAA,SAAAytL,GACAA,EAAA90C,MAAA34I,SAAA,SAAAuhD,GACA,IAAA42Q,EAAAF,EAAA12Q,GACA42Q,EAAAl0T,IACAA,EAAAk0T,EAEA,GACA,IAEAl0T,GAAAi0T,EAAAlvT,MAGA,CA5FAovT,CAAA1qG,EAAAisF,EAAAgN,aACA,KAAAqF,UAAApqT,QAAAqrB,KAAA,CAAAy5R,EAAA1iT,MAAA+zT,EACA,CAEA,IAAAlqI,EA0hBA,SAAAwqI,EAAArM,GACA,IAAAn+H,EAAA,GAKA,OAJA/tL,OAAAC,KAAAs4T,GAAAr4T,SAAA,SAAA27B,GACA,IAAAhS,EAAA0uS,EAAA18R,GACAkyJ,EAAAlyJ,GAAAqwR,EAAAriS,QAAAA,EAAA2uS,YAAA3uS,EAAAguL,MAAAhuL,EAAAiuL,MAAAjuL,EAAAA,QAAAA,EAAA4uS,QACA,IACA1qI,CACA,CAjiBA2qI,CAAA7e,EAAA9rH,UAAA,GAA6D3oL,KAAF8mT,WAI3D,GA2MA,SAAAt+F,EAAAgwF,EAAAsO,EAAAn+H,EAAA4qI,GACAzM,EAAA3R,cAAA3sF,EACAs+F,EAAAvwF,UAEA,IAAAi9F,EAAA,EACAD,GACA/qG,EAAA1tN,SAAA,SAAAytL,GACAirI,GAAAjrI,EAAA90C,MAAA32I,MACA,IAGA,IAAA22T,EAAA,EACAF,EAAAA,GAAA,WACA,EAEA,QAAA12T,EAAA,EAAiBA,EAAA2rN,EAAA1rN,OAAkBD,IAAA,CACnCA,EAAA,IACAg0T,EAAAroG,EAAA3rN,GAAAiqT,GACAA,EAAAvwF,QAAAuwF,EAAApqT,UAIA,IADA,IAAA6rL,EAAAigC,EAAA3rN,GACA8D,EAAA,EAAAk5G,EAAA0uE,EAAA90C,MAAA32I,OAA2C6D,EAAAk5G,EAASl5G,IAAA,CACpD,IAAA07C,EAAAksI,EAAA90C,MAAA9yI,GACA,OAAA07C,EAAAz4C,MACA,aACA8tT,EAAAr1Q,EAAAA,KAAAssI,EAAAm+H,GACA,MACA,WACAkK,EAAA30Q,EAAAA,KAAAA,EAAAA,KAAA5nC,EAAA4nC,EAAAA,KAAA5X,EAAAkkJ,EAAAm+H,GACA,MACA,YACA+K,EAAAx1Q,EAAAA,KAAAA,EAAAA,KAAA5nC,EAAA4nC,EAAAA,KAAA5X,EAAAqiR,GACA,MACA,UACAgL,EAAAz1Q,EAAAA,KAAAA,EAAAA,KAAA5nC,EAAA4nC,EAAAA,KAAA5X,EAAAqiR,EAAAtO,GACA,MACA,gBACA0N,EAAA7pQ,EAAAA,KAAAyqQ,GACA,MACA,cACAX,EAAAW,GAIAyM,IADAE,EACAD,EACA,CACAjrI,EAAA6/H,WACAqJ,EAAAlpI,EAAAu+H,EAEA,CACA,CAhQA4M,CAAAlrG,EAAA,KAAAgwF,aAAA,KAAAsO,UAAAn+H,EAAAjsL,EAAA62T,kBAEA72T,EAAAo5S,UAAA,CACA,IAAA6d,EAAA,KAAA7M,UAAAl/H,IAAA,CACAE,KAAA,SACAnsJ,EAAA,QACAH,EAAA,UAEA,KAAAsrR,UAAAh+G,MAAAhoJ,KAAA8yQ,WAAAD,EACAA,EAAA92S,KACA,CACA,YAAAiqS,SACA,EAqhBA3qT,EAAAC,QAAAo0T,kCCtnBA,IA1DA,IAAAqD,EAAA,CACA,KACA,4BACA,iCACA,iCACA,iCACA,iCACA,iCACA,oCACA,oCACA,oCACA,oCACA,qCACA,sCACA,sCACA,yCACA,0CACA,0CACA,0CACA,0CACA,0CACA,0CACA,6CACA,6CACA,8CACA,+CACA,+CACA,+CACA,+CACA,kDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,uDACA,uDACA,uDACA,uDACA,uDACA,wDAIAC,EAAA,EAAAC,EAAA,EAAAC,EAAA,EAGAC,EAAA,QACAC,EAAA,2BACAC,EAAA,wBAGAC,EAAA,EAAAC,EAAA,EAAAC,EAAA,EAAAC,EAAA,EAIAC,EAAA,GAAAC,EAAA,KACA53T,EAAA,EAAAsV,EAAA,EAAuBtV,EAAA,MAASA,EAChC23T,EAAAn0T,KAAA8R,GACAsiT,EAAAtiT,GAAAtV,EACAsV,EAAA,EAAAA,GAAAA,GAAA,WAUA,IAAAuiT,EAAA,KACA,IAAA73T,EAAA,EAAgBA,EAAA,KAAQA,EAAA,CAExB,IADA,IAAA83T,EAAAD,EAAA73T,GAAA+3T,EAAA,GACAvqT,EAAA,EAAiBA,GAAAxN,IAAQwN,EAAA,CACzB,IAAAkN,EAAAlN,EAAAxN,EAAA23T,EAAAG,EAAAtqT,IAAA,EACAmN,EAAAg9S,GAAA33T,GAAA83T,EAAAtqT,EAAA,aACAuqT,EAAAv0T,KAAAo0T,EAAAl9S,EAAAC,GACA,CACAk9S,EAAAr0T,KAAAu0T,EACA,CAGA,IAAAC,EAAA,GACA,IAAAh4T,EAAA,EAAgBA,EAAA,KAAQA,EACxBg4T,EAAA,gDAAA/nM,OAAAjwH,IAAAA,EAMA,IAAAi4T,EAAA,CACA,SAAAj4T,EAAAwN,GACA,OAAAxN,EAAAwN,GAAA,KACA,EACA,SAAAxN,EAAAwN,GACA,OAAAxN,EAAA,KACA,EACA,SAAAA,EAAAwN,GACA,OAAAA,EAAA,KACA,EACA,SAAAxN,EAAAwN,GACA,OAAAxN,EAAAwN,GAAA,KACA,EACA,SAAAxN,EAAAwN,GACA,QAAAxN,EAAA,MAAAwN,EAAA,WACA,EACA,SAAAxN,EAAAwN,GACA,OAAAxN,EAAAwN,EAAA,EAAAxN,EAAAwN,EAAA,KACA,EACA,SAAAxN,EAAAwN,GACA,OAAAxN,EAAAwN,EAAA,EAAAxN,EAAAwN,EAAA,QACA,EACA,SAAAxN,EAAAwN,GACA,QAAAxN,EAAAwN,GAAA,EAAAxN,EAAAwN,EAAA,QACA,GAGA0qT,EAAA,SAAAC,GACA,OAAAA,EAAA,CACA,EAsDAC,EAAA,SAAAD,EAAAE,GACA,IAAAnsF,GAAA,EA/CA,SAAAisF,GAkCA,IAAA7iT,EAAA0hT,EAAAmB,GACAjsF,EAAA,GAAAisF,EAAAA,EAAA,IAAAA,EAAA,GAMA,OALAD,EAAAC,KACAjsF,GAAA,IACA52N,EAAA,GAAArV,SACAisO,GAAA,GAAA52N,EAAA,GAAArV,OAAAqV,EAAA,GAAArV,OAAA,GAAAqV,EAAA,GAAArV,OAAA,IAEAisO,CACA,CAKAosF,CAAAH,GACA7iT,EAAA0hT,EAAAmB,GAEA,OADAjsF,GAAA,EAAA52N,EAAA,GAAA+iT,GAAA/iT,EAAA,GAAA+iT,EAEA,EAIAE,EAAA,SAAAJ,EAAAvlT,GACA,OAAAA,GACA,KAAAqkT,EACA,OAAAkB,EAAA,MAAAA,EAAA,SACA,KAAAjB,EACA,OAAAiB,EAAA,KAAAA,EAAA,SACA,KAAAhB,EACA,OAAAgB,EAAA,QACA,KAlJA,EAmJA,OAAAA,EAAA,KAAAA,EAAA,SAEA,EAGAK,EAAA,SAAAL,EAAAvlT,EAAAylT,GACA,IAAAnsF,EAAAksF,EAAAD,EAAAE,GAAA,EAAAE,EAAAJ,EAAAvlT,GACA,OAAAA,GACA,KAAAqkT,EACA,UAAA/qF,EAAA,OAAAA,EAAA,OAAAA,EAAA,UACA,KAAAgrF,EACA,UAAAhrF,EAAA,OAAAA,EAAA,UACA,KAAAirF,EACA,OAAAjrF,EAAA,IACA,KAjKA,EAkKA,OAAAA,EAAA,KAEA,EAQAusF,EAAA,SAAA7lT,EAAAqxC,GACA,OAAArxC,GACA,KAAAqkT,EACA,OAAAhzQ,EAAAnxC,MAAAskT,GAEAnzQ,EADA,KAGA,KAAAizQ,EACA,OAAAjzQ,EAAAnxC,MAAAukT,GAEApzQ,EAAA5kB,cADA,KAGA,KAAA83R,EACA,qBAAAlzQ,EAAA,CAEA,IADA,IAAAy0Q,EAAA,GACA14T,EAAA,EAAoBA,EAAAikD,EAAAhkD,SAAiBD,EAAA,CACrC,IAAAonC,EAAA6c,EAAApX,WAAA7sC,GACAonC,EAAA,IACAsxR,EAAAl1T,KAAA4jC,GACOA,EAAA,KACPsxR,EAAAl1T,KAAA,IAAA4jC,GAAA,EACA,OAAAA,GACOA,EAAA,MACPsxR,EAAAl1T,KAAA,IAAA4jC,GAAA,GACA,IAAAA,GAAA,KACA,OAAAA,GAEAsxR,EAAAl1T,KAAA,IAAA4jC,GAAA,GACA,IAAAA,GAAA,MACA,IAAAA,GAAA,KACA,OAAAA,EAEA,CACA,OAAAsxR,CACA,CACA,OAAAz0Q,EAGA,EA4EA00Q,EAAA,SAAAZ,EAAAa,GAGA,IAFA,IAAAC,EAAAd,EAAAlmR,MAAA,GACAinR,EAAAf,EAAA93T,OAAA84T,EAAAH,EAAA34T,OACAD,EAAA,EAAiBA,EAAA+4T,IAAgB/4T,EACjC64T,EAAAr1T,KAAA,GACA,IAAAxD,EAAA,EAAiBA,EAAA84T,GAAa,CAC9B,IAAAE,EAAApB,EAAAiB,EAAA74T,MACA,GAAAg5T,GAAA,EACA,QAAAxrT,EAAA,EAAmBA,EAAAurT,IAAgBvrT,EACnCqrT,EAAA74T,EAAAwN,IAAAmqT,GAAAqB,EAAAJ,EAAAprT,IAAA,IAGA,CACA,OAAAqrT,EAAAhnR,MAAAinR,EACA,EAqDAG,EAAA,SAAAlB,EAAAn+R,EAAAg/R,EAAA7uI,GAEA,IADA,IAAA8uI,EAAAd,GAAAhuI,EACA/pL,EAAA45B,EAAA,EAAqB55B,GAAA,IAAQA,EAC7B64T,GAAA9uI,EAAA/pL,EAAA,IACA64T,GAAAD,GAAA54T,GAEA,OAAA+3T,GAAAhuI,EAAA8uI,CACA,EA0FAK,EAAA,SAAAlsI,EAAAmsI,EAAAzuJ,GAGA,IAFA,IAAA0uJ,EAAAnB,EAAAvtJ,GACAjvI,EAAAuxJ,EAAA/sL,OACAD,EAAA,EAAiBA,EAAAy7B,IAAOz7B,EACxB,QAAAwN,EAAA,EAAkBA,EAAAiuB,IAAOjuB,EACzB2rT,EAAAn5T,GAAAwN,KACAw/K,EAAAhtL,GAAAwN,IAAA4rT,EAAAp5T,EAAAwN,IAGA,OAAAw/K,CACA,EAGAqsI,EAAA,SAAArsI,EAAAmsI,EAAAd,EAAA3tJ,GAGA,IAFA,IAAAjvI,EAAAuxJ,EAAA/sL,OACA2kJ,EAAA,MAAAq0K,EAAAZ,GAAA,EAAA3tJ,EAAA,WACA1qK,EAAA,EAAiBA,EAAA,KAAQA,EAAA,CACzB,IACAogC,EAAA,CAAA3E,EAAA,EAAAA,EAAA,EAAAA,EAAA,EAAAA,EAAA,EAAAA,EAAA,EAAAA,EAAA,EAAAA,EAAA,EAAAA,EAAA,iBAAAz7B,GACAgtL,EAFA,iBAAAvxJ,EAAA,EAAAA,EAAA,EAAAA,EAAA,EAAAA,EAAA,EAAAA,EAAA,EAAAA,EAAA,EAAAA,EAAA,GAAAz7B,IAEA,GAAAgtL,EAAA,GAAA5sJ,GAAAwkH,GAAA5kJ,EAAA,CAGA,CACA,OAAAgtL,CACA,EAYAssI,EAAA,SAAAtsI,GAkCA,IA/BA,IAYAusI,EAAA,SAAA1iE,GAEA,IADA,IAAA2iE,EAAA,EACAx5T,EAAA,EAAkBA,EAAA62P,EAAA52P,SAAmBD,EACrC62P,EAAA72P,IAAA,IACAw5T,GAAA3iE,EAAA72P,GAAA,EAhBA,GAkBA,IAAAA,EAAA,EAAkBA,EAAA62P,EAAA52P,OAAmBD,GAAA,GACrC,IAAA45B,EAAAi9N,EAAA72P,GACA62P,EAAA72P,EAAA,IAAA45B,GAAAi9N,EAAA72P,EAAA,MAAA45B,GAAAi9N,EAAA72P,EAAA,IAAA45B,GACAi9N,EAAA72P,EAAA,IAAA45B,IAAAi9N,EAAA72P,EAAA,MAAA45B,GAAAi9N,EAAA72P,EAAA,MAAA45B,KAEA4/R,GAhBA,GAkBA,CACA,OAAAA,CACA,EAEA/9R,EAAAuxJ,EAAA/sL,OACAu5T,EAAA,EAAAC,EAAA,EACAz5T,EAAA,EAAiBA,EAAAy7B,IAAOz7B,EAAA,CACxB,IACA62P,EADA/zK,EAAAkqG,EAAAhtL,GAIA62P,EAAA,IACA,QAAArpP,EAAA,EAAkBA,EAAAiuB,GAAO,CAEzB,IAAAhuB,EAAA,EAAeD,EAAAiuB,GAAAqnD,EAAAt1E,KAAiBC,IAChCD,EAEA,IADAqpP,EAAArzP,KAAAiK,GACAA,EAAA,EAAeD,EAAAiuB,IAAAqnD,EAAAt1E,KAAkBC,IACjCD,EACAqpP,EAAArzP,KAAAiK,EACA,CAKA,IAJA+rT,GAAAD,EAAA1iE,GAGAA,EAAA,IACArpP,EAAA,EAAkBA,EAAAiuB,GAAO,CACzB,IAAAhuB,EACA,IAAAA,EAAA,EAAeD,EAAAiuB,GAAAuxJ,EAAAx/K,GAAAxN,KAAuByN,IACtCD,EAEA,IADAqpP,EAAArzP,KAAAiK,GACAA,EAAA,EAAeD,EAAAiuB,IAAAuxJ,EAAAx/K,GAAAxN,KAAwByN,IACvCD,EACAqpP,EAAArzP,KAAAiK,EACA,CACA+rT,GAAAD,EAAA1iE,GAGA,IAAA6iE,EAAA1sI,EAAAhtL,EAAA,OAEA,IADAy5T,GAAA32O,EAAA,GACAt1E,EAAA,EAAkBA,EAAAiuB,IAAOjuB,EAAA,CACzB,IAAAosB,EAAAkpD,EAAAt1E,GACAisT,GAAA7/R,EAEAkpD,EAAAt1E,EAAA,IAAAosB,GAAA8/R,EAAAlsT,KAAAosB,GAAA8/R,EAAAlsT,EAAA,KAAAosB,IACA4/R,GAlEA,EAoEA,CACA,CAGA,OADAA,GAhEA,IAgEAvxT,KAAA6sC,IAAA2kR,EAAAh+R,EAAAA,EAAA,UAEA,EAIAgtD,EAAA,SAAAxkC,EAAAk0Q,EAAAvlT,EAAAylT,EAAA3tJ,GACA,IAAAp1J,EAAA0hT,EAAAmB,GACAvkL,EApWA,SAAAukL,EAAAvlT,EAAAqxC,EAAA01Q,GACA,IAAA/lL,EAAA,GACAjwF,EAAA,EAAA4G,EAAA,EACAqvQ,EAAA31Q,EAAAhkD,OAGA8qJ,EAAA,SAAAnzI,EAAA6jB,GACA,GAAAA,GAAA8uB,EAAA,CAEA,IADAqpF,EAAApwI,KAAAmgD,EAAA/rC,IAAA6jB,GAAA8uB,IACA9uB,GAAA,GACAm4G,EAAApwI,KAAAoU,IAAA6jB,GAAA,QACAkoB,EAAA,EACA4G,EAAA,CACA,CACA9uB,EAAA,IACAkoB,IAAA/rC,GAAA,GAAA6jB,GAAA,KAAA8uB,GAAA9uB,GACA,EAEAo+R,EAAAtB,EAAAJ,EAAAvlT,GAIA,OAHAm4I,EAAAn4I,EAAA,GACAm4I,EAAA6uK,EAAAC,GAEAjnT,GACA,KAAAqkT,EACA,QAAAj3T,EAAA,EAAmBA,EAAA45T,EAAa55T,GAAA,EAChC+qJ,EAAAplJ,SAAAs+C,EAAA/1C,UAAAlO,EAAA,EAAAA,EAAA,WAEA+qJ,EAAAplJ,SAAAs+C,EAAA/1C,UAAAlO,EAAA,eAAA45T,EAAA,IACA,MAEA,KAAA1C,EACA,IAAAl3T,EAAA,EAAmBA,EAAA45T,EAAa55T,GAAA,EAChC+qJ,EAAA,GAAAitK,EAAA/zQ,EAAAgsE,OAAAjwH,EAAA,IACAg4T,EAAA/zQ,EAAAgsE,OAAAjwH,IAAA,IAEA45T,EAAA,MACA7uK,EAAAitK,EAAA/zQ,EAAAgsE,OAAAjwH,EAAA,OAEA,MAEA,KAAAm3T,EACA,IAAAn3T,EAAA,EAAmBA,EAAA45T,IAAa55T,EAChC+qJ,EAAA9mG,EAAAjkD,GAAA,GAeA,IANA+qJ,EA3QA,EA2QA,GACAxgG,EAAA,GACAqpF,EAAApwI,KAAAmgD,GAIAiwF,EAAA3zI,OAAA,EAAA05T,GACA/lL,EAAApwI,KAAA,QAGA,OAFAowI,EAAA3zI,OAAA05T,GACA/lL,EAAApwI,KAAA,KACAowI,CACA,CAsSAloH,CAAAysS,EAAAvlT,EAAAqxC,EAAAm0Q,EAAAD,EAAAE,IAAA,GACAzkL,EAvQA,SAAAmkL,EAAA+B,EAAAlB,GAIA,IAHA,IAAAmB,EAAA,GACAC,EAAAjC,EAAA93T,OAAA65T,EAAA,EAAAG,EAAA,EACAC,EAAAJ,EAAA/B,EAAA93T,OAAA65T,EACA95T,EAAA,EAAiBA,EAAAk6T,IAAWl6T,EAC5B+5T,EAAAv2T,KAAAy2T,GACAA,GAAAD,EAEA,IAAAh6T,EAAAk6T,EAAqBl6T,EAAA85T,IAAa95T,EAClC+5T,EAAAv2T,KAAAy2T,GACAA,GAAAD,EAAA,EAEAD,EAAAv2T,KAAAy2T,GAEA,IAAAE,EAAA,GACA,IAAAn6T,EAAA,EAAiBA,EAAA85T,IAAa95T,EAC9Bm6T,EAAA32T,KAAAm1T,EAAAZ,EAAAlmR,MAAAkoR,EAAA/5T,GAAA+5T,EAAA/5T,EAAA,IAAA44T,IAGA,IAAA3vT,EAAA,GACAmxT,EAAArC,EAAA93T,OAAA65T,EAAA,EACA,IAAA95T,EAAA,EAAiBA,EAAAo6T,IAAoBp6T,EACrC,QAAAwN,EAAA,EAAkBA,EAAAssT,IAAatsT,EAC/BvE,EAAAzF,KAAAu0T,EAAAgC,EAAAvsT,GAAAxN,IAGA,IAAAwN,EAAA0sT,EAAqB1sT,EAAAssT,IAAatsT,EAClCvE,EAAAzF,KAAAu0T,EAAAgC,EAAAvsT,EAAA,OAEA,IAAAxN,EAAA,EAAiBA,EAAA44T,EAAA34T,SAAoBD,EACrC,IAAAwN,EAAA,EAAkBA,EAAAssT,IAAatsT,EAC/BvE,EAAAzF,KAAA22T,EAAA3sT,GAAAxN,IAGA,OAAAiJ,CACA,CAoOAoxT,CAAAzmL,EAAAt+H,EAAA,GAAA+iT,GAAAR,EAAAviT,EAAA,GAAA+iT,KAEA,IAAApvT,EA7MA,SAAAkvT,GAGA,IAFA,IAAA7iT,EAAA0hT,EAAAmB,GAAA18R,EApSA,SAAA08R,GACA,SAAAA,EAAA,EACA,CAkSAmC,CAAAnC,GACAnrI,EAAA,GAAAmsI,EAAA,GACAn5T,EAAA,EAAiBA,EAAAy7B,IAAOz7B,EACxBgtL,EAAAxpL,KAAA,IACA21T,EAAA31T,KAAA,IAGA,IAAA+2T,EAAA,SAAA3yR,EAAAhwB,EAAAkO,EAAA/N,EAAA4rC,GACA,QAAA3jD,EAAA,EAAkBA,EAAA8lB,IAAO9lB,EACzB,QAAAwN,EAAA,EAAmBA,EAAAuK,IAAOvK,EAC1Bw/K,EAAAplJ,EAAA5nC,GAAA4X,EAAApK,GAAAm2C,EAAA3jD,IAAAwN,EAAA,EACA2rT,EAAAvxR,EAAA5nC,GAAA4X,EAAApK,GAAA,CAGA,EASA,IALA+sT,EAAA,uCACAA,EAAA9+R,EAAA,sCACA8+R,EAAA,EAAA9+R,EAAA,yCAGAz7B,EAAA,EAAiBA,EAAAy7B,EAAA,IAAWz7B,EAC5BgtL,EAAA,GAAAhtL,GAAAgtL,EAAAhtL,GAAA,MAAAA,EACAm5T,EAAA,GAAAn5T,GAAAm5T,EAAAn5T,GAAA,KAIA,IAAAw6T,EAAAllT,EAAA,GAAAu1C,EAAA2vQ,EAAAv6T,OACA,IAAAD,EAAA,EAAiBA,EAAA6qD,IAAO7qD,EAExB,IADA,IAAAy6T,EAAA,IAAAz6T,EAAA6qD,EAAA,EAAAA,EACAr9C,EADA,IAAAxN,GAAAA,IAAA6qD,EAAA,MACqBr9C,EAAAitT,IAAUjtT,EAC/B+sT,EAAAC,EAAAx6T,GAAAw6T,EAAAhtT,GAAA,sBAKA,GAAA0qT,EAAAC,GACA,KAAAvzK,EAAAq0K,EAAAd,EAAA,WACA1qT,EAAA,EACA,IAAAzN,EAAA,EAAkBA,EAAA,IAAOA,EACzB,IAAAwN,EAAA,EAAmBA,EAAA,IAAOA,EAC1Bw/K,EAAAhtL,GAAAy7B,EAAA,GAAAjuB,GAAAw/K,EAAAvxJ,EAAA,GAAAjuB,GAAAxN,GAAA4kJ,GAAAn3I,IAAA,EACA0rT,EAAAn5T,GAAAy7B,EAAA,GAAAjuB,GAAA2rT,EAAA19R,EAAA,GAAAjuB,GAAAxN,GAAA,CALA,CAUA,OAASgtL,OAAAA,EAAAmsI,SAAAA,EACT,CA0JAuB,CAAAvC,GACAnrI,EAAA/jL,EAAA+jL,OAAAmsI,EAAAlwT,EAAAkwT,SAGA,GAzJA,SAAAnsI,EAAAmsI,EAAAvlL,GAGA,IAFA,IAAAn4G,EAAAuxJ,EAAA/sL,OACAwN,EAAA,EAAAgoE,GAAA,EACAz1E,EAAAy7B,EAAA,EAAqBz7B,GAAA,EAAQA,GAAA,GAC7B,GAAAA,KACAA,EAEA,IADA,IAAAqF,EAAAowE,EAAA,EAAAh6C,EAAA,IACAjuB,EAAA,EAAkBA,EAAAiuB,IAAOjuB,EAAA,CACzB,QAAA1J,EAAA9D,EAAoB8D,EAAA9D,EAAA,IAAY8D,EAChCq1T,EAAA9zT,GAAAvB,KAGAkpL,EAAA3nL,GAAAvB,GAAA8vI,EAAAnmI,GAAA,QAAAA,GAAA,IACAA,GAGApI,GAAAowE,CACA,CACAA,GAAAA,CACA,CAEA,CAkIAklP,CAAA3tI,EAAAmsI,EAAAvlL,GAEA82B,EAAA,GAEAwuJ,EAAAlsI,EAAAmsI,EAAA,GACAE,EAAArsI,EAAAmsI,EAAAd,EAAA,GACA,IAAAuC,EAAA,EAAAC,EAAAvB,EAAAtsI,GAEA,IADAksI,EAAAlsI,EAAAmsI,EAAA,GACAzuJ,EAAA,EAAiBA,EAAA,IAAUA,EAAA,CAC3BwuJ,EAAAlsI,EAAAmsI,EAAAzuJ,GACA2uJ,EAAArsI,EAAAmsI,EAAAd,EAAA3tJ,GACA,IAAA8uJ,EAAAF,EAAAtsI,GACA6tI,EAAArB,IACAqB,EAAArB,EACAoB,EAAAlwJ,GAEAwuJ,EAAAlsI,EAAAmsI,EAAAzuJ,EACA,CACAA,EAAAkwJ,CACA,CAIA,OAFA1B,EAAAlsI,EAAAmsI,EAAAzuJ,GACA2uJ,EAAArsI,EAAAmsI,EAAAd,EAAA3tJ,GACAsiB,CACA,EA0EA,SAAA8tI,EAAA72Q,EAAApkD,GAEA,IAAAuwH,EAAA,GACAzvD,EAAA9gE,EAAA8gE,YAAA,OACAo6P,EAAAl7T,EAAAk7T,YAAA,OACA13Q,EAAAxjD,EAAAwjD,SAAA,EAEA2pI,EArEA,SAAA/oI,EAAApkD,GACA,IAAAm7T,EAAA,CAAc,QAAA/D,EAAA,aAAAC,EACd,MAAAC,GACA8D,EAAA,CAAkB,EAAA1D,EAAA,EAAAC,EAAA,EAAAC,EAClB,EAAAC,GAGAS,GADAt4T,EAAAA,GAAA,IACAtC,UAAA,EACA86T,EAAA4C,GAAAp7T,EAAAq7T,UAAA,KAAA77R,eACAzsB,EAAA/S,EAAA+S,KAAAooT,EAAAn7T,EAAA+S,KAAAD,gBAAA,EACA+3J,EAAA,SAAA7qK,EAAAA,EAAA6qK,MAAA,EAEA,GAAA93J,EAAA,EAGAA,EAFA,kBAAAqxC,EACAA,EAAAnxC,MAAAskT,GACAH,EACKhzQ,EAAAnxC,MAAAwkT,GAELJ,EAEAC,EAGAA,OAEG,GAAAvkT,GAAAqkT,GAAArkT,GAAAskT,GACHtkT,GAAAukT,EACA,mCAIA,WADAlzQ,EAAAw0Q,EAAA7lT,EAAAqxC,IAEA,2BAEA,GAAAo0Q,EAAA,GAAAA,EAAA,EACA,yBAEA,GAAAF,EAAA,GACA,IAAAA,EAAA,EAAgBA,GAAA,MAChBl0Q,EAAAhkD,QAAAu4T,EAAAL,EAAAvlT,EAAAylT,MAD2BF,GAI3B,GAAAA,EAAA,GACA,uCACA,MAAG,GAAAA,EAAA,GAAAA,EAAA,GACH,sDAGA,OAAAztJ,IAAAA,EAAA,GAAAA,EAAA,GACA,oBAEA,OAAAjiF,EAAAxkC,EAAAk0Q,EAAAvlT,EAAAylT,EAAA3tJ,EACA,CAiBAywJ,CAAAl3Q,EAAApkD,GACA47B,EAAAuxJ,EAAA/sL,OACAm7T,EAAAnzT,KAAAwC,MAAA5K,EAAAorN,IAAAprN,EAAAorN,IAAAxvL,EAAA,GACAvQ,EAAAuQ,EAAA2/R,EAAAA,EAAA/3Q,EAAA,EACAg4Q,EAAAD,EAAA/3Q,EAEA+sE,EAAA5sH,KAAA,CACAuD,KAAA,OACA6Q,EAAA,EAAAgwB,EAAA,EAAA7vB,EAAAmT,EAAApF,EAAAoF,EAAAsqB,UAAA,EAAAhf,MAAAmqC,IAGA,QAAA3gE,EAAA,EAAiBA,EAAAy7B,IAAOz7B,EACxB,QAAAwN,EAAA,EAAkBA,EAAAiuB,IAAOjuB,EACzBw/K,EAAAhtL,GAAAwN,IACA4iH,EAAA5sH,KAAA,CACAuD,KAAA,OACA6Q,EAAAwjT,EAAA5tT,EAAA6tT,EACAzzR,EAAAwzR,EAAAp7T,EAAAq7T,EACAtjT,EAAAqjT,EACAt1S,EAAAs1S,EACA5lR,UAAA,EACAhf,MAAAukS,IAMA,OACA3qM,OAAAA,EACAllG,KAAAA,EAGA,CASA5rB,EAAAC,QAAA,CACA0O,QARA,SAAA49F,GACA,IAAAyvN,EAAAR,EAAAjvN,EAAAgyM,GAAAhyM,GAGA,OAFAA,EAAAi9M,QAAAwS,EAAAlrM,OACAvkB,EAAAoyM,OAAApyM,EAAAqyM,QAAAryM,EAAA6uM,UAAA7uM,EAAA8uM,UAAA9uM,EAAAsyM,WAAAtyM,EAAAuyM,WAAAkd,EAAApwS,KACA2gF,CACA,mCChxBAvsG,EAAAC,QAAA,CACA,wBACA,wBACAwpM,GAAA,kBACAC,GAAA,kBACAC,GAAA,kBACA/e,GAAA,iBACAC,GAAA,gBACA+e,GAAA,gBACAC,GAAA,gBACAC,GAAA,gBACAC,GAAA,eACAC,GAAA,eACAC,IAAA,cACAC,GAAA,kBACAC,GAAA,kBACAl6D,GAAA,kBACAm6D,GAAA,kBACAC,GAAA,iBACAC,GAAA,eACAC,GAAA,eACAC,GAAA,gBACAC,GAAA,gBACAC,GAAA,gBACAC,IAAA,eACAC,GAAA,kBACAC,GAAA,kBACAC,GAAA,kBACAC,GAAA,iBACAC,GAAA,gBACAC,GAAA,gBACAC,GAAA,gBACAC,GAAA,gBACAC,GAAA,gBACAC,GAAA,gBACAC,IAAA,eACAC,IAAA,iBACAC,IAAA,iBACAC,IAAA,iBACAC,IAAA,gBACAC,IAAA,gBACAC,KAAA,kBACAC,KAAA,kBACAC,KAAA,kBACAC,KAAA,iBACAC,KAAA,eACAC,UAAA,aACAC,MAAA,UACAC,MAAA,WACAC,OAAA,UACAC,QAAA,gDClDA,IAAAz+D,EAAeoE,EAAA,OAAApE,SACfvlE,EAAc2pE,EAAA,OAAA3pE,QACdysC,EAAkBk9B,EAAA,OAAAl9B,YAClB08L,EAAax/J,EAAA,OAAAw/J,OAUb,SAAAuK,EAAAO,EAAAC,GACA,KAAAA,aAAAA,GAAA,GACA,KAAAD,gBAAAA,EACA,KAAA2f,eAAA,EACA,CAMAlgB,EAAA/vS,UAAAqc,MAAA,WACA,IAAA4iF,EAAA,IAAA8wM,EAAA,KAAAO,gBAAA,KAAAC,cAMA,OAJA,KAAA0f,eAAAt9T,SAAA,SAAAuhD,GACA+qD,EAAAgxN,eAAA/3T,KAAAg8C,EACA,IAEA+qD,CACA,EAQA8wM,EAAA/vS,UAAA9H,KAAA,SAAAg4T,GACA,KAAAD,eAAA/3T,KAAAg4T,EACA,EAQAngB,EAAA/vS,UAAA0jB,IAAA,SAAAysS,GAGA,IAFAA,EAAAA,GAAA,EAEAA,KAAA,GACA,KAAAF,eAAAvsS,KAEA,EAUAqsR,EAAA/vS,UAAAowT,SAAA,SAAAl8Q,GACA,GAAA0tF,EAAA1tF,GACA,SAGA,IAAAm8Q,EAAA,GAEAn8Q,EAAAn/C,QAEAs7T,EADAh0P,EAAAnoB,EAAAn/C,OACAm/C,EAAAn/C,MAEA,CAAAm/C,EAAAn/C,QAIA,QAAAL,EAAA,EAAAsxE,EAAAqqP,EAAA17T,OAAwCD,EAAAsxE,EAAOtxE,IAC/C,KAAAwD,KAAAm4T,EAAA37T,IAGA,IA6BA47T,EAAA,GACAC,GAAA,EAaA,MA3CA,CACA,OACA,WACA,eACA,OACA,UACA,YACA,QACA,YACA,YACA,cACA,aACA,kBACA,kBACA,aACA,aACA,mBACA,SACA,cACA,gBACA,MACA,OAWA59T,SAAA,SAAAC,GACAk2G,EAAA50D,EAAAthD,KAAA4yS,EAAAtxP,EAAAthD,MACA09T,EAAA19T,GAAAshD,EAAAthD,GACA29T,GAAA,EAEA,IAEAA,GACA,KAAAr4T,KAAAo4T,GAGAD,EAAA17T,QAAA47T,EAAA,IACA,EAUAxgB,EAAA/vS,UAAAgxS,KAAA,SAAA98P,EAAAzzC,GACA,IAAA+vT,EAAA,KAAAJ,SAAAl8Q,GACAv2C,EAAA8C,IAMA,OAJA+vT,EAAA,GACA,KAAA9sS,IAAA8sS,GAGA7yT,CACA,EAQAoyS,EAAA/vS,UAAAo4G,YAAA,SAAAh8F,GACA,QAAA6zS,eACA,QAAAv7T,EAAA,KAAAu7T,eAAAt7T,OAAA,EAA+CD,GAAA,EAAQA,IAAA,CACvD,IAAAw/C,EAAA,KAAA+7Q,eAAAv7T,GAEA,GAAAktI,EAAA1tF,GAAA,CAEA,IAAAn/C,EAAA,KAAAu7S,gBAAAp8P,GACA,GAAAn/C,IAAA+zG,EAAA/zG,EAAAqnB,MAAAopR,EAAAzwS,EAAAqnB,IACA,OAAArnB,EAAAqnB,EAEA,MAAK,IAAA0sF,EAAA50D,EAAA93B,MAAAopR,EAAAtxP,EAAA93B,IAEL,OAAA83B,EAAA93B,EAEA,CAGA,YAAAm0R,cAAA,KAAAA,aAAAn0R,EACA,EAEApoB,EAAAC,QAAA87S,sCChLA,IAAA0gB,EAAazqL,EAAQ,OAGrB,SAAA0qL,EAAAC,GACA,IAAAxgS,EAAA1V,WAAAk2S,GACA,qBAAAxgS,IAAAtI,MAAAsI,GAGA,OAAAA,CACA,CAGA,SAAAygS,EAAAC,GACA,IAAA/qJ,EAEA,IACAA,EAAA,IAAA2qJ,EAAAvnB,YAAA2nB,EACA,CAAG,MAAA3uS,GACH,UAAAs/B,MAAA,eAAAt/B,EACA,CAEA,WAAA4jJ,EAAA3uK,KACA,UAAAqqD,MAAA,uCAGA,OAAAskH,CACA,CAEA,SAAAkiJ,IACA,CAEAA,EAAAhoT,UAAAqyS,WAAA,SAAAwe,GAEA,IAAA/qJ,EAAA8qJ,EAAAC,GAEAC,EAAAJ,EAAA5qJ,EAAAhvI,KAAAngC,OACAo6T,EAAAL,EAAA5qJ,EAAAhvI,KAAAlgC,QAEA,SAAAlB,GAAAo7T,QAAAp7T,GAAAq7T,IAAA,iBAAAjrJ,EAAAhvI,KAAAw1D,QAAA,CACA,IAAA0kO,EAAAlrJ,EAAAhvI,KAAAw1D,QAAA5sF,MAAA,UACA,OAAAsxT,EAAAr8T,OACA,UAAA6sD,MAAA,oEAAAskH,EAAAhvI,KAAAw1D,QAAA,UAEA52F,GAAAo7T,IACAA,EAAAJ,EAAAM,EAAA,UAEAt7T,GAAAq7T,IACAA,EAAAL,EAAAM,EAAA,IAEA,CAEA,OACAr6T,MAAAm6T,EACAl6T,OAAAm6T,EAEA,EAEA/I,EAAAhoT,UAAAizS,gBAAA,SAAA4d,EAAArwH,GAEA,IAAA16B,EAAA8qJ,EAAAC,GAKA,OAHA/qJ,EAAAhvI,KAAAngC,MAAA,GAAA6pM,EAAA7pM,MACAmvK,EAAAhvI,KAAAlgC,OAAA,GAAA4pM,EAAA5pM,OAEAkvK,EAAAluH,UACA,EAEA5jD,EAAAC,QAAA+zT,sCCnEA,IAAAhY,EAAuBhqK,EAAQ,OAC/BzoB,EAAiByoB,EAAA,OAAAzoB,WACjBj+E,EAAe0mG,EAAA,OAAA1mG,SAEf,SAAAqgR,EAAAmF,GACA,KAAAA,UAAAA,CACA,CAEAnF,EAAA3/S,UAAAglT,WAAA,SAAA9D,GACA,IAAA4D,EACAnW,EACAv0S,EAAA,KAcA,GAZA0qT,EAAA,KAAAA,UACA,KAAAtO,QAAAsO,EAAAp3F,SACA,KAAAhnI,OAAAo+N,EAAAjP,QAEAlH,EAAAuS,EAAAv+C,UAAAgsC,eAAA,KAAA6H,QAAA3sQ,MACAmmQ,EAAAtB,kBAAAoW,EAAAvkM,MAAAn7G,OAAAupS,GAEA,KAAA9qL,WAAAihM,EAAAp3F,SAAA7jL,MAqBA,WACA,IAAAlzC,EAAA,EAMA,OAJAmuT,EAAAvkM,MAAAn7G,OAAAzS,SAAA,SAAA8Z,GACA9V,GAAA8V,EAAA8iS,UACA,IAEA54S,CACA,CA7BAs6T,GACA,KAAAC,YA8BA,WACA,IAAAC,EAAA,GACA7kT,EAAA,EACA8kT,EAAA,EAEAD,EAAAj5T,KAAA,CAAazB,KAAA,EAAA+rH,QAAA,IAEb,QAAA9tH,EAAA,EAAAsxE,EAAA5rE,EAAA0qT,UAAAvkM,MAAAr7G,KAAA,GAAAvQ,OAA2DD,EAAAsxE,EAAOtxE,IAGlE08T,EAFAh3T,EAAAssF,OAAAlR,YAAA9gF,EAAA0F,EAAA0qT,WAAA1qT,EAAAssF,OAAA0vN,aAAA1hT,EAAA0F,EAAA0qT,WACA1qT,EAAAssF,OAAAqvN,WAAArhT,EAAA0F,EAAA0qT,WACA1qT,EAAA0qT,UAAAvkM,MAAAn7G,OAAA1Q,GAAA66S,WACA4hB,EAAAA,EAAAx8T,OAAA,GAAAgC,MAAAy6T,EACA9kT,GAAA8kT,EACAD,EAAAj5T,KAAA,CAAczB,KAAA6V,EAAAk2G,QAAA,EAAA7rH,MAAA,IAGd,OAAAw6T,CACA,CA/CAE,GACA,KAAAC,oBAAA,EAEA,KAAAjH,WAAAvF,EAAAvkM,MAAA8pM,YAAA,EACA,KAAAA,WAAAvF,EAAAvkM,MAAAr7G,KAAAvQ,OACA,UAAA6sD,MAAA,oEAAAlwC,OAAsFzZ,KAAAwyT,WAAA,oBAAA/4S,OAAkCwzS,EAAAvkM,MAAAr7G,KAAAvQ,SAGxH,KAAA48T,qBAAA,KAAAlH,YAAAvF,EAAAvkM,MAAAixM,oBAAA,GACA,KAAAtd,cAAA4Q,EAAAvkM,MAAA2zL,gBAAA,EAEA,KAAAqd,sBACArQ,EAAAQ,wBA0CA,SAAAx8S,GACA,QAAA+8G,EAAA,EAAyBA,EAAA/8G,EAAAvQ,OAAwBstH,IAGjD,IAFA,IAAAzqC,EAAAtyE,EAAA+8G,GAEAwvM,EAAA,EAA0BA,EAAAj6O,EAAA7iF,OAAuB88T,IAAA,CACjD,IAAAnvM,EAAA9qC,EAAAi6O,GAEA,GAAAnvM,EAAAwE,OAAA,CAIA,IAHA,IAAAtE,EAAAF,EAAAE,SAAA,EACAD,EAAAD,EAAAC,SAAA,EAEAmvM,EAAA,EAA6BA,EAAAlvM,EAAqBkvM,SAElDh8T,IAAA4sH,EAAAwE,OAAA,IAAA4qM,EAAA,GACAC,EAAA1vM,EAAAyvM,EAAAD,EAAA,EAAAnvM,EAAAwE,OAAA,SAIApxH,IAAA4sH,EAAAwE,OAAA,IACA6qM,EAAA1vM,EAAAyvM,EAAAD,EAAAlvM,EAAA,IAAAD,EAAAwE,OAAA,IAIA,QAAA8qM,EAAA,EAA6BA,EAAArvM,EAAqBqvM,SAElDl8T,IAAA4sH,EAAAwE,OAAA,IAAA8qM,EAAA,GACAD,EAAA1vM,EAAAwvM,EAAAG,EAAA,EAAAtvM,EAAAwE,OAAA,SAIApxH,IAAA4sH,EAAAwE,OAAA,IACA6qM,EAAA1vM,EAAAO,EAAA,EAAAivM,EAAAG,EAAA,EAAAtvM,EAAAwE,OAAA,GAGA,CACA,CAIA,SAAA6qM,EAAA1vM,EAAAwvM,EAAAI,EAAAC,GACA,IAAAxvM,EAAAp9G,EAAA+8G,GAAAwvM,GACAnvM,EAAAwE,OAAAxE,EAAAwE,QAAA,GACAxE,EAAAwE,OAAA+qM,GAAAC,CACA,CACA,CAlFAC,CAAA,KAAAjN,UAAAvkM,MAAAr7G,MAEA,KAAA8sT,mBAAA,EAAA9Q,EAiFA,EAEAvB,EAAA3/S,UAAAiyT,WAAA,SAAAhwM,EAAAi/L,GACA,IAAA9mT,EAAA,KACA,kBACA,IAAAmvD,EAAAnvD,EAAA83T,eAAA93T,EAAAiwT,WAAA,EAAAjwT,EAAA+3T,cACAjR,EAAAv+C,UAAA42C,iBAAAn/S,EAAAg4T,iBACAlR,EAAAv+C,UAAAnoD,SAAAjxJ,EACA,CACA,EAEAo2P,EAAA3/S,UAAAklT,SAAA,SAAAjjM,EAAAi/L,GACA,KAAAiR,aAAA,KAAAzrO,OAAAovN,WAAA7zL,EAAA,KAAA6iM,WACA,KAAAoN,cAAA,KAAAxrO,OAAA2vN,WAAAp0L,EAAA,KAAA6iM,WACA,KAAAuN,gBAAA,KAAA3rO,OAAAovN,WAAA7zL,EAAA,OAAA6iM,WACA,KAAAwN,iBAAA,KAAA5rO,OAAA2F,cAAA41B,EAAA,KAAA6iM,WAEA,KAAAyN,YAAA,KAAAN,WAAAhwM,EAAAi/L,GACAA,EAAAxH,QAAAyH,cAAA,mBAAAoR,aACA,KAAAre,eACAgN,EAAAQ,wBAEA,KAAA8Q,QAAAtR,EAAAv+C,UAAArmO,EACA,KAAA81R,iBAAA,KAAAC,gBAAA,KAAAC,iBAEApR,EAAAv+C,UAAA42C,iBAAA,KAAA6Y,iBAEAlR,EAAAv+C,UAAAnoD,SAAA,KAAA03G,cACA,EAEAvS,EAAA3/S,UAAAgyT,mBAAA,SAAArxS,EAAAugS,EAAAuR,GACA,IAAAvoR,EAAA,KAAAw8C,OAAAovN,WAAAn1R,EAAA,KAAAmkS,WACA,GAAA56Q,EAAA,CACA,IACA+qJ,EADAlgM,EAAA,KAAA2xF,OAAAwvN,WAAAv1R,EAAA,KAAAmkS,WAEA/vT,GAAAA,EAAAkgM,OACAA,EAAAlgM,EAAAkgM,MAUA,IAPA,IAGAy9H,EACAC,EACAC,EALArpQ,EAAArf,EAAA,EACAluC,EAAA,KACAkJ,EAAA,KAAA4/S,UAAAvkM,MAAAr7G,KAKAxQ,EAAA,EAAAsxE,EAAA,KAAAkrP,YAAAv8T,OAA+CD,EAAAsxE,EAAOtxE,IAAA,CACtD,IAAAikD,EAAA,KAAAu4Q,YAAAx8T,GACAm+T,GAAAl6Q,EAAA6pE,QACAuE,EAAA,KAIA,GAAA8rM,GAAAn+T,EAAAsxE,EAAA,GACA,IAAA8sP,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAGAryS,EAAA,IAEAoyS,GADAL,EAAAxtT,EAAAyb,EAAA,GAAAjsB,IACAoyH,OAAA4rM,EAAA5rM,OAAA,QAAApgC,OAAA4vN,gBACAoc,EAAA3rM,cACAA,EAAA2rM,EAAA3rM,YAAA,IAKApmG,EAAAzb,EAAAvQ,SAEAm+T,GADAH,EAAAztT,EAAAyb,GAAAjsB,IACAoyH,OAAA6rM,EAAA7rM,OAAA,QAAApgC,OAAA4vN,gBACA,MAAAvvL,GAAA4rM,EAAA5rM,cACAA,EAAA4rM,EAAA5rM,YAAA,IAIA8rM,EAAAC,GAAAC,CACA,CAkBA,GAhBAL,GAAAA,EAAAO,wBAEAD,GADAJ,EAAA1tT,EAAAyb,EAAA,EAAA+xS,EAAAO,uBAAAv+T,KACAk+T,EAAA9rM,OAAA8rM,EAAA9rM,OAAA,QAAApgC,OAAA4vN,gBACAsc,GAAAA,EAAA7rM,cACAA,EAAA6rM,EAAA7rM,YAAA,IAIA,MAAAA,IACAA,EAAAxJ,EAAA,KAAA72B,OAAAsvN,YAAA,KAAAtvN,OAAAsvN,WAAAr1R,EAAA,KAAAmkS,UAAApwT,GAAA,KAAAgyF,OAAAsvN,aAGAh6S,GAAA62T,IACA72T,EAAA,CAAoBvF,KAAAkiD,EAAAliD,KAAAE,MAAA,IAGpBk8T,EAAA,CACA,IAAAK,EAAA,EACA,GAAAN,GAAAA,EAAArwM,SAAAywM,EAAA,CACA,KAAAJ,EAAArwM,QAAA2wM,GACAl3T,EAAArF,OAAA,KAAAu6T,YAAAx8T,EAAAw+T,KAAAv8T,OAAA,EAEAjC,GAAAw+T,EAAA,CACA,MAAM,GAAAR,GAAAA,EAAAnwM,SAAAwwM,EAAA,CACN,KAAAL,EAAAnwM,QAAA2wM,GACAl3T,EAAArF,OAAA,KAAAu6T,YAAAx8T,EAAAw+T,KAAAv8T,OAAA,EAEAjC,GAAAw+T,EAAA,CACA,MAAM,GAAAP,GAAAA,EAAApwM,SAAAuwM,EAAA,CACN,KAAAH,EAAApwM,QAAA2wM,GACAl3T,EAAArF,OAAA,KAAAu6T,YAAAx8T,EAAAw+T,KAAAv8T,OAAA,EAEAjC,GAAAw+T,EAAA,CACA,MACAl3T,EAAArF,OAAA,KAAAu6T,YAAAx8T,GAAAiC,OAAA,CAEA,CAEA,IAAA2lC,GAAAm2R,GAAA,GAAAlpQ,EAGAspQ,GACA72T,GAAAA,EAAArF,QACAuqT,EAAAzD,UAAA,CACAhiT,KAAA,OACA2xD,GAAApxD,EAAAvF,KACA82D,GAAAvxD,EAAAvF,KAAAuF,EAAArF,MACAqmF,GAAA1gD,EACA2gD,GAAA3gD,EACA4N,UAAAA,EACA+qJ,KAAAA,EACAlwE,UAAAgC,IACQ,EAAF0rM,GACNz2T,EAAA,KACA+qH,EAAA,KACA2rM,EAAA,KACAC,EAAA,KACAC,EAAA,KAGA,CAEA1R,EAAAv+C,UAAAnoD,SAAAtwK,EACA,CACA,EAEAy1Q,EAAA3/S,UAAAmzT,iBAAA,SAAA7mT,EAAAu2J,EAAA7lF,EAAAo2O,EAAAlS,EAAAmS,EAAAC,GACA,IAAA38T,EAAA,KAAA+vF,OAAAqvN,WAAAqd,EAAA,KAAAtO,WACA,OAAAnuT,EAAA,CAGA,IACAs+L,EADAlgM,EAAA,KAAA2xF,OAAAyvN,WAAAid,EAAA,KAAAtO,WAEA/vT,GAAAA,EAAAkgM,OACAA,EAAAlgM,EAAAkgM,MAGA,IACAs+H,EACAZ,EACA5rM,EAHA7hH,EAAA,KAAA4/S,UAAAvkM,MAAAr7G,KAyBA,GAnBAkuT,EAAA,IACAG,EAAAruT,EAAAmuT,GAAAC,KACAC,EAAAxsM,cACAwsM,EAAAzsM,OAAAysM,EAAAzsM,OAAA,QAAApgC,OAAA4vN,iBACAvvL,EAAAwsM,EAAAxsM,YAAA,IAMA,MAAAA,GAAAqsM,EAAAluT,EAAAvQ,SACAg+T,EAAAztT,EAAAmuT,GAAAD,KACAT,EAAA5rM,cACA4rM,EAAA7rM,OAAA6rM,EAAA7rM,OAAA,QAAApgC,OAAA4vN,iBACAvvL,EAAA4rM,EAAA5rM,YAAA,IAKA,MAAAA,GAAAwsM,GAAAA,EAAAN,sBAAA,CACA,IAAAO,EAAAtuT,EAAAmuT,EAAAE,EAAAN,uBAAAK,GACAE,EAAAzsM,cACAysM,EAAA1sM,OAAA0sM,EAAA1sM,OAAA,QAAApgC,OAAA4vN,iBACAvvL,EAAAysM,EAAAzsM,YAAA,GAGA,CAEA,SAAAA,GAAA4rM,GAAAA,EAAAM,sBAAA,CACA,IAAAQ,EAAAvuT,EAAAmuT,EAAAV,EAAAM,uBAAAG,GACAK,EAAA1sM,cACA0sM,EAAA3sM,OAAA2sM,EAAA3sM,OAAA,QAAApgC,OAAA4vN,iBACAvvL,EAAA0sM,EAAA1sM,YAAA,GAGA,CAEA,MAAAA,IACAA,EAAAxJ,EAAA,KAAA72B,OAAAuvN,YAAA,KAAAvvN,OAAAuvN,WAAAmd,EAAA,KAAAtO,UAAAuO,GAAA,KAAA3sO,OAAAuvN,YAEAiL,EAAAzD,UAAA,CACAhiT,KAAA,OACA2xD,GAAA9gD,EAAA3V,EAAA,EACA42D,GAAAjhD,EAAA3V,EAAA,EACAqmF,GAAA6lF,EACA5lF,GAAAD,EACA9yC,UAAAvzC,EACAs+L,KAAAA,EACAlwE,UAAAgC,IACI,GAAO,GACXwsM,EAAA,KACAZ,EAAA,KACA5rM,EAAA,IAjEA,CAkEA,EAEA44L,EAAA3/S,UAAAolT,SAAA,SAAAlE,GACA,KAAAoQ,oBACApQ,EAAAyG,oBAEA,EAEAhI,EAAA3/S,UAAAmlT,OAAA,SAAAljM,EAAAi/L,EAAAgD,GACA,IAAAl+O,EAAAtxE,EACA0F,EAAA,KACA8mT,EAAAxH,QAAAga,aAAA,mBAAAnB,aACArR,EAAAv+C,UAAAnoD,SAAA,KAAA9zH,OAAA2F,cAAA41B,EAAA,KAAA6iM,YACA5D,EAAAv+C,UAAA42C,iBAAA,KAAA6Y,iBAEA,IAAAuB,EAAAzS,EAAAv+C,UAAAviF,KACAwzI,EAAA1S,EAAAv+C,UAAArmO,EAEAu1E,EA6LA,WAIA,IAHA,IAAAl0G,EAAA,GACAk5S,EAAA,EAEAniT,EAAA,EAAAsxE,EAAA5rE,EAAA0qT,UAAAvkM,MAAAr7G,KAAA+8G,GAAAttH,OAAkED,EAAAsxE,EAAOtxE,IAAA,CACzE,IAAAmiT,EAAA,CACAl5S,EAAAzF,KAAA,CAAkBoU,EAAAlS,EAAA82T,YAAAx8T,GAAA+B,KAAAqS,MAAApU,IAElB,IAAAw/C,EAAA95C,EAAA0qT,UAAAvkM,MAAAr7G,KAAA+8G,GAAAvtH,GACAmiT,EAAA3iQ,EAAA2/Q,UAAA3/Q,EAAAquE,SAAA,CACA,CACAs0L,EAAA,GACAA,GAEA,CAIA,OAFAl5S,EAAAzF,KAAA,CAAgBoU,EAAAlS,EAAA82T,YAAA92T,EAAA82T,YAAAv8T,OAAA,GAAA8B,KAAAqS,MAAA1O,EAAA82T,YAAAv8T,OAAA,IAEhBgJ,CACA,CAhNAm2T,GAEAC,EAAA,GAEAC,EAAA9P,GAAAA,EAAAvvT,OAAA,EACAuQ,EAAA,KAAA4/S,UAAAvkM,MAAAr7G,KAOA,GALA6uT,EAAA77T,KAAA,CACA2qK,GAAA,KAAA2vJ,QACApyI,KAAA4zI,EAAA9P,EAAA,GAAAzI,SAAAkY,IAGAK,EACA,IAAAt/T,EAAA,EAAAsxE,EAAAk+O,EAAAvvT,OAAqCD,EAAAsxE,EAAOtxE,IAAA,CAC5C,IAAA8rT,EAAA0D,EAAAxvT,GACAq/T,EAAAA,EAAAp/T,OAAA,GAAAqoF,GAAAwjO,EAAAzsM,MAEAggN,EAAA77T,KAAA,CAAa2qK,GAAA29I,EAAAlkR,EAAA8jJ,KAAAogI,EAAA/E,SAAA,GACb,CAGAsY,EAAAA,EAAAp/T,OAAA,GAAAqoF,GAAA42O,EAGA,IADA,IACAK,EADAF,EAAA,GAAA/2O,GAAA+2O,EAAA,GAAAlxJ,KAAA,KAAAqvJ,cACA,IAAAgC,EAAAH,EAAAp/T,OAA6Ds/T,EAAAC,EAASD,IAAA,CACtE,IAAAE,EAAAF,EAAAF,EAAAp/T,OAAA,EACAy/T,EAAAH,EAAA,SAAA5J,WACAgK,EAAAD,EAAA,OAAAjC,aACAn1O,EAAA+2O,EAAAE,GAAApxJ,GACA5lF,EAAA82O,EAAAE,GAAAj3O,GAcA,IAZAm3O,IACAl3O,GAAA,KAAAq1O,kBAGApR,EAAAv+C,UAAAviF,MAAA2zI,EAAAE,GAAA7zI,OACA8gI,EAAAv+C,UAAAviF,KAAA2zI,EAAAE,GAAA7zI,KAIA,KAAAgyI,iBAAA,GAGA19T,EAAA,EAAAsxE,EAAA6rC,EAAAl9G,OAA6BD,EAAAsxE,EAAOtxE,IAAA,CACpC,IAmBA4tH,EAnBAgyM,GAAA,EACAC,GAAA,EACA9C,EAAA5/M,EAAAn9G,GAAAoU,MAyBA,GAtBA2oT,EAAAvsT,EAAA+8G,GAAAttH,SAEA2/T,GADAhyM,EAAAp9G,EAAA+8G,GAAAwvM,IACA3qM,OAAAxE,EAAAwE,OAAA,QAAApgC,OAAA4vN,cACAie,EAAAjyM,EAAAwE,OAAAxE,EAAAwE,OAAA,QAAApgC,OAAA4vN,eAIAmb,EAAA,IAAA6C,IAEAA,GADAhyM,EAAAp9G,EAAA+8G,GAAAwvM,EAAA,IACA3qM,OAAAxE,EAAAwE,OAAA,QAAApgC,OAAA4vN,eAIAmb,EAAA,EAAAvsT,EAAA+8G,GAAAttH,SAAA4/T,IAEAA,GADAjyM,EAAAp9G,EAAA+8G,GAAAwvM,EAAA,IACA3qM,OAAAxE,EAAAwE,OAAA,QAAApgC,OAAA4vN,eAGAge,GACA,KAAAnB,iBAAAthN,EAAAn9G,GAAA4X,EAAA0wE,EAAAq3O,EAAAp3O,EAAA,KAAAo1O,gBAAAxgN,EAAAn9G,GAAAoU,MAAAo4S,EAAAj/L,EAAApQ,EAAAn9G,EAAA,GAAAm9G,EAAAn9G,EAAA,GAAAoU,MAAA,MAGApU,EAAAsxE,EAAA,GACA,IAAAy6C,EAAAv7G,EAAA+8G,GAAAwvM,GAAAhxM,UACA+hE,EAAAt9K,EAAA+8G,GAAAwvM,GAAAjvI,YACA/hE,IACAA,EAAAlD,EAAA,KAAA72B,OAAA+5B,WAAA,KAAA/5B,OAAA+5B,UAAAwB,EAAA,KAAA6iM,UAAA2M,GAAA,KAAA/qO,OAAA+5B,WAEAnhF,EAAAkjJ,KACAA,EAAAjlE,EAAA,KAAA72B,OAAA87F,aAAA,KAAA97F,OAAA87F,YAAAvgE,EAAA,KAAA6iM,UAAA2M,GAAA,KAAA/qO,OAAA87F,aAEA,IAAAgyI,EAAAtvT,EAAA+8G,GAAAwvM,GAAA+C,eACAC,EAAAvvT,EAAA+8G,GAAAwvM,GAAAgD,eACA,GAAAh0M,GAAA+zM,EAAA,CACA,IACAE,EADAC,EAAAL,EAAA,KAAA5tO,OAAAqvN,WAAA0b,EAAA,KAAA3M,WAAA,EAKA4P,EAHA,IAAAjD,GAAAA,EAAA,GAAAvsT,EAAA+8G,GAAAttH,QAAA4/T,EAEOA,EACP,KAAA7tO,OAAAqvN,WAAA0b,EAAA,OAAA3M,WAAA,EAEA,EAJA,KAAAp+N,OAAAqvN,WAAA0b,EAAA,OAAA3M,WAOA,IAAA8P,EAAA,KAAA1gB,cAAAriM,EAAAn9G,GAAA4X,EAAAqoT,EAAA9iN,EAAAn9G,GAAA4X,EAAAqoT,EAAA,EACAE,EAAA,KAAA3gB,cAAAl3N,EAAAA,EAAAq3O,EAAA,EAGAS,EAFAjjN,EAAAn9G,EAAA,GAAA4X,EAAAooT,EAEAE,EACAG,GAFA,KAAA7gB,cAAAj3N,EAAA,KAAAo1O,gBAAAp1O,EAAA,KAAAo1O,gBAAA,GAEAwC,EACAp0M,GACAygM,EAAAzD,UAAA,CACAhiT,KAAA,OACA6Q,EAAAsoT,EACAt4R,EAAAu4R,EACApoT,EAAAqoT,EACAt6S,EAAAu6S,EACA7qR,UAAA,EACAhf,MAAAu1F,EACA+hE,YAAAA,IACS,GAAO,EAAT0+H,EAAAv+C,UAAAg3C,iBAAAuH,EAAAv+C,UAAAviF,OAGPo0I,GACAtT,EAAAzD,UAAA,CACAhiT,KAAA,OACA6Q,EAAAsoT,EACAt4R,EAAAu4R,EACApoT,EAAAqoT,EACAt6S,EAAAu6S,EACA7qR,UAAA,EACAhf,MAAAspS,EACAhyI,YAAAiyI,IACS,GAAO,EAEhB,CACA,CACA,CAEAN,IAAA,SAAAztO,OAAAsuO,iBACA,KAAAhD,mBAAA/vM,EAAA,EAAAi/L,EAAAjkO,GAEAm3O,IAAA,SAAA1tO,OAAAsuO,iBACA,KAAAhD,mBAAA/vM,EAAAi/L,EAAAlkO,EAEA,CAEAkkO,EAAAv+C,UAAAviF,KAAAuzI,EACAzS,EAAAv+C,UAAArmO,EAAAs3R,EAEA,IAAAp8O,EAAA,KAAAstO,UAAAvkM,MAAAr7G,KAAA+8G,GACA,IAAAvtH,EAAA,EAAAsxE,EAAAwR,EAAA7iF,OAA6BD,EAAAsxE,EAAOtxE,IAAA,CACpC,GAAA8iF,EAAA9iF,GAAA8tH,QAAA,CAIA,GAHA,KAAA0uM,YAAAx8T,GAAA8tH,QAAAhrC,EAAA9iF,GAAA8tH,QAGAhrC,EAAA9iF,GAAA6tH,SAAA/qC,EAAA9iF,GAAA6tH,QAAA,EACA,QAAArgH,EAAA,EAAoBA,EAAAs1E,EAAA9iF,GAAA8tH,QAAoBtgH,IACxC,KAAA4iT,UAAAvkM,MAAAr7G,KAAA+8G,EAAA//G,GAAAxN,GAAAm/T,SAAAr8O,EAAA9iF,GAAA6tH,QAIA,GAAA/qC,EAAA9iF,GAAA8tH,SAAAhrC,EAAA9iF,GAAA8tH,QAAA,EACA,IAAAtgH,EAAA,EAAoBA,EAAAs1E,EAAA9iF,GAAA8tH,QAAoBtgH,IACxC,KAAA4iT,UAAAvkM,MAAAr7G,KAAA+8G,EAAA//G,GAAAxN,GAAAu+T,sBAAA/wT,CAGA,CAEA,KAAAgvT,YAAAx8T,GAAA8tH,QAAA,GACA,KAAA0uM,YAAAx8T,GAAA8tH,SAEA,CAEA,KAAAwvM,mBAAA/vM,EAAA,EAAAi/L,GAEA,KAAAmJ,YAAApoM,IAAA,KAAAooM,WAAA,IACA,KAAA4K,iBAAA/T,EAAAuG,4BAGA,KAAAvT,eACAgN,EAAAxH,QAAA1I,KAAA,eACA,WACA52S,EAAAiwT,aAAA,IAAAjwT,EAAAssF,OAAAsuO,iBACA56T,EAAA43T,mBAAA/vM,EAAAi/L,EAEA,IACA,WACAA,EAAAS,wBACA,KAIA,KAAAsT,kBAAAhzM,IAAA,KAAAsvM,qBAAA,GAAAtvM,IAAA,KAAA6iM,UAAAvkM,MAAAr7G,KAAAvQ,OAAA,IACAusT,EAAAS,yBACAT,EAAAwG,kBAAA,KAAAuN,kBACA,KAAA3D,oBAAA,EACA,KAAA2D,iBAAA,KAuBA,EAEAjhU,EAAAC,QAAA0rT,sCCljBA,IAAAtjP,EAAc2pE,EAAA,OAAA3pE,QACdgjP,EAAgBr5K,EAAA,OAAAq5K,UAChBC,EAAiBt5K,EAAA,OAAAs5K,WAsCjB,SAAA4V,EAAAttT,EAAA0E,EAAAgwB,EAAAqiR,GAiBA,IAAAwW,EAAAvtT,EAAAk1S,QAAA,GACAsY,EAjBA,WAEA,IADA,IAAAr3T,EAAA,EACArJ,EAAA,EAAAsxE,EAAAp+D,EAAAk1S,QAAAnoT,OAA4CD,EAAAsxE,EAAOtxE,IAEnDqJ,EADA6J,EAAAk1S,QAAApoT,GACAsrH,SAAAjiH,EAAArJ,EAAAqJ,EAEA,OAAA6J,EAAAk1S,QAAA/+S,EACA,CAUAs3T,GACA9gO,EAVA,WAEA,IADA,IAAAlwB,EAAA,EACA3vE,EAAA,EAAAsxE,EAAAp+D,EAAAk1S,QAAAnoT,OAA4CD,EAAAsxE,EAAOtxE,IAAA,CACnD,IAAAwoT,EAAAt1S,EAAAk1S,QAAApoT,GAAAwoT,cAAA,EACA74O,GAAAz8D,EAAAk1S,QAAApoT,GAAAiC,MAAAumT,CACA,CACA,OAAA74O,CACA,CAGA1tE,GACA2+T,EAAA1tT,EAAArR,KAAAsuT,oBACAvuH,EAAA8+H,EAAAnkT,KAAAq2K,SAAA,IAAA8tI,EAAAp1M,SAEAy2E,EADA2+H,EAAAx+T,OACA0/L,EAEAi/H,EAAA,OAAA54T,KAAAwC,MAAAxC,KAAAoB,IAAAq3T,EAAAp1M,SAAA,QAEA,OAAAp4G,EAAA8X,YACA,gBACA4c,GAAAg5R,EAAA,IAAA7+H,EACA,MACA,eACAn6J,GAAAg5R,EAAA,IAAAh/H,EACA,MACA,kBACAh6J,GAAAg5R,EAAA,IAAAh/H,EACA,MACA,QACA,6BAAA1uL,EAAA8X,WAIA,GAFAi/R,EAAA9sH,OAEA,WAAAjqL,EAAA4tT,gBAAA,CACA,IAAAz5S,EAAApf,KAAAoB,IAAA,KAAAw3T,GACA5W,EAAAl+L,UAAA74G,EAAA6tT,iBACAhvO,KAAAn6E,EAAA6oT,EAAA7oT,EAAAgwB,EAAAi5R,EAAA,EAAAhhO,EAAAghO,EAAA,GAAAl4O,OACAoJ,KAAAn6E,EAAA6oT,EAAA7oT,EAAAgwB,EAAAvgB,EAAAw5S,EAAA,EAAAhhO,EAAAghO,EAAA,GAAAl4O,MACA,MAAG,cAAAz1E,EAAA4tT,gBAAA,CACH,IAAAE,EAAA/4T,KAAA6kC,KAAA+yD,EAAA,KACAohO,EAAArpT,EAAA6oT,EAAA7oT,EACAqyS,EAAAl4N,KAAAkvO,EAAAr5R,EAAAi4D,EAAAghO,GAAAt0I,OACA09H,EAAAl+L,UAAA74G,EAAA6tT,iBACA,QAAA/gU,EAAA,EAAkBA,EAAAghU,EAAchhU,IAChCiqT,EAAAl4N,KAAAkvO,EAAAr5R,EAAAi5R,EAAA,OAAAA,GAAAl4O,OACAs4O,GAAA,GAEA,MAAG,cAAA/tT,EAAA4tT,gBAAA,CACH,IAAAI,EAAAj5T,KAAA6kC,KAAA+yD,GAAA,EAAAghO,IACAjpI,EAAAhgL,EAAA6oT,EAAA7oT,EACAqyS,EAAAl4N,KAAA6lG,EAAAhwJ,EAAAi4D,EAAAghO,GAAAt0I,OACA09H,EAAAl+L,UAAA74G,EAAA6tT,iBACA,QAAAj9T,EAAA,EAAmBA,EAAAo9T,EAAap9T,IAChCmmT,EAAAl4N,KAAA6lG,EAAAhwJ,EAAAi5R,EAAA,EAAAA,EAAAA,GAAAl4O,OACAivG,GAAA,EAAAipI,CAEA,MAAG,YAAA3tT,EAAA4tT,gBAAA,CACH,IAAAK,EAAA,GACAC,EAAAn5T,KAAA6kC,KAAA+yD,EAAA,OACAwhO,EAAAzpT,EAAA6oT,EAAA7oT,EAAA,EACAqyS,EAAAl4N,KAAAn6E,EAAA6oT,EAAA7oT,EAAAgwB,EAHA,EAGAi4D,EAAAj4D,EAHA,GAGA2kJ,OACA09H,EAAAz0Q,UAAA,KACAy0Q,EAAAvxH,OAAA2oI,EAAAz5R,GACA,QAAAq8B,EAAA,EAAoBA,EAAAm9P,EAAen9P,IACnCgmP,EAAArxH,cAAAyoI,EAAAF,EAAAv5R,EAPA,EAOAy5R,EAAAF,IAAAv5R,EAPA,EAOAy5R,EAAA,EAAAF,EAAAv5R,GACAgxJ,cAAAyoI,EAAAF,IAAAv5R,EARA,EAQAy5R,EAAAF,IAAAv5R,EARA,EAQAy5R,EAAA,EAAAF,EAAAv5R,GACAy5R,GAAA,EAAAF,EAEAlX,EAAAvhO,OAAAx1E,EAAA6tT,gBACA,MACA9W,EAAAl+L,UAAA74G,EAAA6tT,iBACAhvO,KAAAn6E,EAAA6oT,EAAA7oT,EAAAgwB,EAAAi5R,EAAA,EAAAhhO,EAAAghO,GACAl4O,OAEAshO,EAAA7sH,SACA,CA2BA99L,EAAAC,QAAA,CACAg1T,eAnBA,SAAA1yT,EAAA+V,EAAAgwB,EAAAkkJ,EAAAm+H,GAEA,IADA,IAAA/nT,EAAAL,EAAAomT,YACAjoT,EAAA,EAAAsxE,EAAAzvE,EAAAumT,QAAAnoT,OAA0CD,EAAAsxE,EAAOtxE,IAAA,CACjD,IAAA+wT,EAAAlvT,EAAAumT,QAAApoT,GACA,GAAA+wT,EAAApwP,WAAA,CAGA,IAAAnqC,EAAAu6R,EAAApwP,WACAgqP,EAAAoG,EAAApwP,cACAnqC,EAAAo0R,EAAAmG,EAAApwP,WAAAmrH,IAEA,IAAA08H,EAAAuI,EAAAvI,cAAA,EACAyB,EAAAl+L,UAAAv1F,GACAu7D,KAAAn6E,EAAAm5S,EAAAn5S,EAAA4wS,EAAA5gR,EAAAmpR,EAAA9uT,MAAAumT,EAAAtmT,GACAymF,MARA,CASA,CACA,EAIAgsO,gBA3BA,SAAA9yT,EAAA+V,EAAAgwB,EAAAqiR,GAEA,IADA,IAAApzD,EA3HA,SAAAh1P,GAEA,IADA,IAAAg1P,EAAA,GAAAvuJ,EAAA,KACAtoG,EAAA,EAAAsxE,EAAAzvE,EAAAumT,QAAAnoT,OAA0CD,EAAAsxE,EAAOtxE,IAAA,CACjD,IAAA+wT,EAAAlvT,EAAAumT,QAAApoT,GACAgrB,EAAA+lS,EAAA/lS,WACA,GAAAA,EAAA,CAIA28C,EAAA38C,KACAA,EAAA,CAAAA,IAIA,IAFA,IAAAwL,EAAAu6R,EAAAgQ,iBAAAhQ,EAAAv6R,OAAA,QACAn2B,EAAA0wT,EAAA+P,iBAAA,QACAh9T,EAAA,EAAA4mE,EAAA1/C,EAAA/qB,OAA2C6D,EAAA4mE,EAAS5mE,IAAA,CACpD,IAAAw9T,EAAAt2S,EAAAlnB,GACAwkG,GAAAg5N,IAAAh5N,EAAAt9E,YACA3qB,IAAAioG,EAAAw4N,iBAAAtqS,IAAA8xE,EAAAy4N,gBAWAz4N,EAAA8/M,QAAA5kT,KAAAutT,IATAzoN,EAAA,CACAzmG,KAAAA,EACAmpB,WAAAs2S,EACAP,gBAAAvqS,EACAsqS,gBAAAzgU,EACA+nT,QAAA,CAAA2I,IAEAl6D,EAAArzP,KAAA8kG,GAIA,CAtBA,MAFAA,EAAA,IAyBA,CAEA,OAAAuuJ,CACA,CAyFA0qE,CAAA1/T,GACA7B,EAAA,EAAAsxE,EAAAulL,EAAA52P,OAAoCD,EAAAsxE,EAAOtxE,IAC3CwgU,EAAA3pE,EAAA72P,GAAA4X,EAAAgwB,EAAAqiR,EAEA,uCCnIA,IAAA/8K,EAAeoE,EAAA,OAAApE,SACftiG,EAAe0mG,EAAA,OAAA1mG,SACf8uF,EAAe4X,EAAA,OAAA5X,SACf/xD,EAAc2pE,EAAA,OAAA3pE,QACdysC,EAAkBk9B,EAAA,OAAAl9B,YAClBotN,EAAkBlwL,EAAQ,OAE1BmwL,EAAA,UACAC,EAAA,UAQA,SAAAtmB,EAAAO,GACA,KAAAA,aAAAA,CACA,CAoGA,SAAAgmB,EAAA56S,EAAAqqS,GACA,IAAAt/P,EAAA,GAGA,GAFA/qC,EAAAA,EAAA7D,QAAA,cAEAkuS,EAEA,OADAt/P,EAAAtuD,KAAA,CAAiBujB,KAAAA,IACjB+qC,EAOA,IAJA,IAEAmyJ,EAFAC,EAAA,IAAAs9G,EAAAz6S,GACAgG,EAAA,EAGAk3L,EAAAC,EAAAG,aAAA,CACA,IAAA33L,EAAA3F,EAAA8qB,MAAA9kB,EAAAk3L,EAAA3iN,UAEA2iN,EAAAW,UAAAl4L,EAAA5Z,MAAA,eACA4Z,EAAAA,EAAAxJ,QAAA,iBACA4uC,EAAAtuD,KAAA,CAAkBujB,KAAA2F,EAAAulS,SAAA,KAElBngQ,EAAAtuD,KAAA,CAAkBujB,KAAA2F,IAGlBK,EAAAk3L,EAAA3iN,QACA,CAEA,OAAAwwD,CACA,CAEA,SAAA8vQ,EAAAp6S,EAAAC,GAIA,QAAAvpB,KAHAupB,EAAAA,GAAA,GACAD,EAAAA,GAAA,GAGA,QAAAtpB,GAAAspB,EAAA5Y,eAAA1Q,KACAupB,EAAAvpB,GAAAspB,EAAAtpB,IAIA,OAAAupB,CACA,CA0FA,SAAAo6S,EAAAtrT,GACA,YAAAvV,IAAAuV,GAAA,OAAAA,EACA,GACGq0B,EAAAr0B,GACHA,EAAA2sC,WACGgqF,EAAA32H,GACHA,EAEAA,EAAA2sC,UAEA,CAEA,SAAA4+Q,EAAAtiR,EAAAouQ,EAAAlmS,EAAA2jH,GACA,IAAA90H,EAEA,YAAAvV,IAAAw+C,EAAA93B,IAAA,OAAA83B,EAAA93B,GAEA83B,EAAA93B,GAGAkmS,GAIAA,EAAAtR,KAAA98P,GAAA,WACAjpC,EAAAq3S,EAAAlqM,YAAAh8F,EACA,IAEA,OAAAnR,QAAAvV,IAAAuV,EACAA,EAEA80H,GAVAA,CAYA,CAqFA,SAAA24E,EAAAj9L,EAAAxK,EAAA+uG,EAAAg4F,EAAAkuG,GACA,OAAAj1S,EAAAynM,cAAAj9L,EAAAukG,EAAAkmM,IAAAluG,GAAA,IAAAv8L,EAAA9mB,OAAA,EACA,CApVAm7S,EAAA9vS,UAAAozS,aAAA,SAAAiC,EAAAiN,GACA,IAIAmU,EAJAC,EA8PA,SAAArmB,EAAAgF,EAAAiN,GACA,IAAAqU,EA5HA,SAAAhrM,EAAA22L,GACA,SAAAh6S,EAAAqjH,GACA,OAAAA,EAAAnpB,QAAA,SAAAj2B,EAAAixI,GACA,IAAAz9J,EAAAsc,EAAAmhJ,EAAA/hM,MAAAnT,EAAAk1M,EAAA/hM,MAAA+hM,EACAu/D,EAAA,GAAAzrQ,OAAAyuC,GAAA2iE,KAAAj/F,MAAA44C,SACA,OAAAkQ,EAAAj7D,OAAAyrQ,EAAAz0Q,EAAAy3C,GAAAA,EACA,GAAK,GACL,CAEA,SAAA62Q,EAAA9tT,EAAAkY,EAAA8kS,GACA,GAAAh9M,EAAA9nF,EAAAlY,IACA,YAGA,GAAAkY,EAAAlY,GAAA69S,QACA,YAGA,IAAAvlS,EAAAJ,EAAAlY,GAAA2S,KAEA,GAAAqqS,EAAA,CACA,IAAA+Q,EAAAR,EAAAE,EAAAn1S,IAAA,GACA,GAAA0nF,EAAA+tN,EAAAA,EAAAliU,OAAA,IACA,YAEAysB,EAAAy1S,EAAAA,EAAAliU,OAAA,GAAA8mB,IACA,CAEA,OAAA2F,CACA,CAEA,IAAAolC,EAAA,GAEA6V,EAAAsvD,KACAA,EAAA,CAAAA,IAGAA,EAAArjH,EAAAqjH,GAGA,IADA,IAAAmrM,EAAA,KACApiU,EAAA,EAAAsxE,EAAA2lD,EAAAh3H,OAAmCD,EAAAsxE,EAAOtxE,IAAA,CAC1C,IAEAssB,EAFAkzB,EAAAy3E,EAAAj3H,GACAK,EAAA,KAGA+wT,EAAA0Q,EAAAtiR,GAAA,GAA0CouQ,EAAE,UAAF,GAC1Cl0L,EAAAl6E,IACAA,EAAAg/P,UAAAh/P,EAAAg/P,SAAAC,aAAA13R,OACAy4B,EAAAz4B,KAAAy4B,EAAAg/P,SAAAC,aAAA13R,MAEAuF,EAAAq1S,EAAAE,EAAAriR,EAAAz4B,MAAAqqS,GACA/wT,EAAAuhU,EAAApiR,IAEAlzB,EAAAq1S,EAAAE,EAAAriR,GAAA4xQ,GAGAgR,GAAA91S,EAAArsB,QAIA,IADA0hU,EAAAE,EAAAO,EAFAF,EAAA,EAAA51S,EAAA8kS,KAEA,GACAnxT,SACA6xD,EAAAA,EAAA7xD,OAAA,GAAAwxT,WAAA,GAIA,QAAA/iS,EAAA,EAAA+nK,EAAAnqK,EAAArsB,OAAsCyuB,EAAA+nK,EAAS/nK,IAAA,CAC/C,IAAAzlB,EAAA,CACA8d,KAAAuF,EAAAoC,GAAA3H,MAGAuF,EAAAoC,GAAAujS,UACAhpT,EAAAgpT,SAAA,GAGA2P,EAAAvhU,EAAA4I,GAEA6oD,EAAAtuD,KAAAyF,EACA,CAEAm5T,EAAA,KACApiU,EAAA,EAAAsxE,IACA8wP,EAAAF,EAAA51S,EAAArsB,OAAA,EAAAqsB,EAAA8kS,GAEA,CAEA,OAAAt/P,CACA,CAsCAuwQ,CAAA1hB,EAAAiN,GAEA,GAAAqU,EAAAhiU,OAAA,CACA,IAAAqiU,EAAAR,EAAAG,EAAA,GAAArU,EAAA,mBAEA0U,IACAL,EAAA,GAAAvQ,YAAA4Q,EACAL,EAAA,GAAAK,cAAAA,EAEA,CAsEA,OApEAL,EAAAhkU,SAAA,SAAAuhD,GACA,IAAA+iR,EAAAT,EAAAtiR,EAAAouQ,EAAA,iBACAtiM,EAAAw2M,EAAAtiR,EAAAouQ,EAAA,eACA4D,EAAAsQ,EAAAtiR,EAAAouQ,EAAA,qBACA3iM,EAAA62M,EAAAtiR,EAAAouQ,EAAA,WACAxiM,EAAA02M,EAAAtiR,EAAAouQ,EAAA,cACAp3R,EAAAsrS,EAAAtiR,EAAAouQ,EAAA,iBACA5iS,EAAA82S,EAAAtiR,EAAAouQ,EAAA,mBACAmT,EAAAe,EAAAtiR,EAAAouQ,EAAA,wBACAkT,EAAAgB,EAAAtiR,EAAAouQ,EAAA,wBACAjtP,EAAAmhQ,EAAAtiR,EAAAouQ,EAAA,mBACA3qG,EAAA6+G,EAAAtiR,EAAAouQ,EAAA,gBACAtqG,EAAAw+G,EAAAtiR,EAAAouQ,EAAA,sBACA1pQ,EAAA49Q,EAAAtiR,EAAAouQ,EAAA,aACA8G,EAAAoN,EAAAtiR,EAAAouQ,EAAA,mBACAh9L,EAAAkxM,EAAAtiR,EAAAouQ,EAAA,0BACAwD,EAAA0Q,EAAAtiR,EAAAouQ,EAAA,eACAp9L,EAAAsxM,EAAAtiR,EAAAouQ,EAAA,4BACA4U,EAAAV,EAAAtiR,EAAAouQ,EAAA,6BACA17L,EAAA4vM,EAAAtiR,EAAAouQ,EAAA,aACAnlI,EAAAq5I,EAAAtiR,EAAAouQ,EAAA,UACA/pK,EAAAi+K,EAAAtiR,EAAAouQ,EAAA,WAEAnlI,GAAA5kC,SAAA7iJ,IAAAw+C,EAAA8rE,WAEAA,GAAA,KAGA,IASAm3M,EAKAC,EAdAnmT,EAAAo/R,EAAA6O,YAAA+X,EAAAt3M,EAAAG,GAEA5rE,EAAAv9C,MAAA+hN,EAAAxkK,EAAAz4B,KAAAxK,EAAA+uG,EAAAg4F,EAAAkuG,GACAhyQ,EAAAt9C,OAAAqa,EAAA0mM,WAAA33F,GAAA23F,EAEAzjK,EAAAkyQ,aACAlyQ,EAAAkyQ,WAAA,IAIAlhM,IAAAiyM,EAAAjjR,EAAAz4B,KAAAjU,MAAA2uT,MACAjiR,EAAAkyQ,YAAA1tG,EAAAy+G,EAAA,GAAAlmT,EAAA+uG,EAAAg4F,EAAAkuG,KAIAgR,IAAAE,EAAAljR,EAAAz4B,KAAAjU,MAAA4uT,IACAliR,EAAAmyQ,YAAA3tG,EAAA0+G,EAAA,GAAAnmT,EAAA+uG,EAAAg4F,EAAAkuG,GAEAhyQ,EAAAmyQ,YAAA,EAGAnyQ,EAAAm/D,UAAAmjN,EAAAtiR,EAAAouQ,EAAA,oBACApuQ,EAAAjjC,KAAAA,EACAijC,EAAA8rE,SAAAA,EACA9rE,EAAAgyQ,aAAAA,EACAhyQ,EAAA8jK,iBAAAA,EACA9jK,EAAAhpB,MAAAA,EACAgpB,EAAAx0B,WAAAA,EACAw0B,EAAAuhR,gBAAAA,EACAvhR,EAAAshR,gBAAAA,EACAthR,EAAAmhB,WAAAA,EACAnhB,EAAA0E,KAAAA,EACA1E,EAAAk1Q,WAAAA,EACAl1Q,EAAAoxE,kBAAAA,EACApxE,EAAA4xQ,OAAAA,EACA5xQ,EAAA0yE,QAAAA,EACA1yE,EAAAipI,IAAAA,EACAjpI,EAAAqkG,IAAAA,CACA,IAEAo+K,CACA,CA/UAh0T,CAAA,KAAA0tS,aAAAgF,EAAAiN,GAEAl2Q,EAAA,EACAqlC,EAAA,EAwBA,OArBAilP,EAAA/jU,SAAA,SAAA8yT,GA2BA,IAAAvxQ,EA1BA9H,EAAAzvC,KAAAoB,IAAAquC,EAAAq5Q,EAAA9uT,MAAA8uT,EAAAW,WAAAX,EAAAY,aAEAoQ,IACAA,EAAA,CAAwB9/T,MAAA,EAAAyvT,WAAAX,EAAAW,WAAAC,YAAA,IAGxBoQ,EAAA9/T,OAAA8uT,EAAA9uT,MACA8/T,EAAApQ,YAAAZ,EAAAY,YAEA50O,EAAA90E,KAAAoB,IAAA0zE,GAiBAv9B,EAjBAuiR,EAkBA95T,KAAAoB,IAAA,EAAAm2C,EAAAv9C,MAAAu9C,EAAAkyQ,WAAAlyQ,EAAAmyQ,eAhBAZ,EAAAkB,UACA8P,EAAA,KAEA,IAEAD,EAAA,GAAwBlU,EAAE,UAAF,KACxBl2Q,EAAAqlC,GAGA,CACA65D,MAAAorL,EACAtqR,SAAAA,EACAqlC,SAAAA,EAMA,EAQAq+N,EAAA9vS,UAAAo0S,aAAA,SAAA34R,EAAA6mS,GACA7mS,EAAAA,EAAAA,EAAAm8B,WAAAhgC,QAAA,iBAGA,IAAAq/S,EAAAT,EAAA,GAAmClU,EAAE,OAAF,UACnCtiM,EAAAw2M,EAAA,GAAmClU,EAAE,WAAF,IACnC4D,EAAAsQ,EAAA,GAAuClU,EAAE,eAAF,MACvC3iM,EAAA62M,EAAA,GAA+BlU,EAAE,QAAF,GAC/BxiM,EAAA02M,EAAA,GAAkClU,EAAE,WAAF,GAClC3qG,EAAA6+G,EAAA,GAAqClU,EAAE,aAAF,GACrCtqG,EAAAw+G,EAAA,GAA2ClU,EAAE,mBAAF,GAE3CrxS,EAAA,KAAAo/R,aAAA6O,YAAA+X,EAAAt3M,EAAAG,GAEA,OACAnpH,MAAA+hN,EAAAj9L,EAAAxK,EAAA+uG,EAAAg4F,EAAAkuG,GACAtvT,OAAAqa,EAAA0mM,WAAA33F,GAAA23F,EACA33F,SAAAA,EACA23F,WAAAA,EACArwB,SAAAr2K,EAAAq2K,SAAA,IAAAtnE,EACAwnE,UAAAv2K,EAAAu2K,UAAA,IAAAxnE,EAEA,EAUA8vL,EAAA9vS,UAAAuiT,kBAAA,SAAA9mS,EAAA81L,EAAA+wG,GACA,IAAA+U,EAAA9lH,EAAA50M,KAAA0oL,IAAA,IACAzlK,EAAA,KAAAw0R,aAAA34R,EAAA6mS,GACA,OACA3rT,MAAAgG,KAAA6sC,IAAA5pB,EAAAhpB,OAAA+F,KAAA6yJ,IAAA6nK,IAAA16T,KAAA6sC,IAAA5pB,EAAAjpB,MAAAgG,KAAA2oL,IAAA+xI,IACAzgU,OAAA+F,KAAA6sC,IAAA5pB,EAAAjpB,MAAAgG,KAAA6yJ,IAAA6nK,IAAA16T,KAAA6sC,IAAA5pB,EAAAhpB,OAAA+F,KAAA2oL,IAAA+xI,IAEA,EAEAvnB,EAAA9vS,UAAA04M,cAAA,SAAAj9L,EAAAxK,EAAA+uG,EAAAg4F,EAAAkuG,GACA,OAAAxtG,EAAAj9L,EAAAxK,EAAA+uG,EAAAg4F,EAAAkuG,EACA,EA8PAlyT,EAAAC,QAAA67S,iCClXA,SAAAqJ,IACA,KAAAx+R,OAAA,EACA,CAEAw+R,EAAAn5S,UAAAmhT,cAAA,SAAAnuS,EAAAvS,GACA,IAAA62T,EAAA,KAAA38S,OAAA3H,KAAA,KAAA2H,OAAA3H,GAAA,IAEAskT,EAAAtvT,QAAAvH,GAAA,GACA62T,EAAAp/T,KAAAuI,EAEA,EAEA04S,EAAAn5S,UAAA0zT,aAAA,SAAA1gT,EAAAvS,GACA,IAAA62T,EAAA,KAAA38S,OAAA3H,GAEA,GAAAskT,EAAA,CAIA,IAAAxuT,EAAAwuT,EAAAtvT,QAAAvH,GACAqI,GAAA,GACAwuT,EAAAjhS,OAAAvtB,EAAA,EAJA,CAMA,EAEAqwS,EAAAn5S,UAAA43D,KAAA,SAAA5kD,GACA,IAAAva,EAAAgrB,MAAAzjB,UAAAumC,MAAAglB,KAAAo4B,UAAA,GACA2zO,EAAA,KAAA38S,OAAA3H,GAEAskT,GAIAA,EAAA3kU,SAAA,SAAA8N,GACAA,EAAAirH,MAAA,KAAAjzH,EACA,GACA,EAEA0gT,EAAAn5S,UAAAgxS,KAAA,SAAAh+R,EAAAvS,EAAA82T,GACA,KAAApW,cAAAnuS,EAAAvS,GACA82T,IACA,KAAA7D,aAAA1gT,EAAAvS,EACA,EAEAzM,EAAAC,QAAAklT,kGC5BA,SAAS9pS,EAAKD,EAAMC,GAAM,MACJ,oBAATA,EAAsBA,EAAO,CAAEmoT,SAAS,GAC1B,iBAATnoT,IACdS,QAAQuQ,KAAK,sDACbhR,EAAO,CAAEmoT,SAAUnoT,IAKjBA,EAAKmoT,SAAW,6EAA6EhgT,KAAKpI,EAAK3T,MAClG,IAAIovD,KAAK,CAAC,SAA6Bz7C,GAAO,CAAE3T,KAAM2T,EAAK3T,OAE7D2T,CACR,CAED,SAAS0lB,EAAU1lB,EAAKC,EAAMylB,GAC5B,IAAIvY,EAAM,IAAIyvC,eACdzvC,EAAI2vC,KAAK,MAAO98C,GAChBmN,EAAI4vC,aAAe,OACnB5vC,EAAI6vC,OAAS,WACXp3B,EAAOzY,EAAI8kC,SAAUhyC,EAAMylB,EAC5B,EACDvY,EAAIgwC,QAAU,WACZz8C,QAAQ+I,MAAM,0BACf,EACD0D,EAAIiwC,MACL,CAED,SAASjwC,EAAanN,GACpB,IAAIC,EAAM,IAAI28C,eAEd38C,EAAI68C,KAAK,OAAQ98C,GAAjB,GACA,IACEC,EAAIm9C,MACL,CAAC,MAAOp9C,GAAK,CACd,OAAqB,KAAdC,EAAI6xC,QAA+B,KAAd7xC,EAAI6xC,MACjC,CAGD,SAASx9C,EAAO0L,GACd,IACEA,EAAKkJ,cAAc,IAAIm/S,WAAW,SACnC,CAAC,MAAO3iS,GACP,IAAIzlB,EAAMxZ,SAASwd,YAAY,eAC/BhE,EAAIqoT,eAAe,SAAnB,KAAwCt0T,OAAQ,EAAG,EAAG,EAAG,GACnC,IADtB,WACsD,EAAG,MACzDgM,EAAKkJ,cAAcjJ,EACpB,CACF,KAtDG0lB,EAA4B,iBAAX3xB,QAAuBA,OAAOA,SAAWA,OAC1DA,OAAyB,iBAAThJ,MAAqBA,KAAKA,OAASA,KACnDA,KAAyB,iBAAX4rI,EAAAhxG,GAAuBgxG,EAAAhxG,EAAOylG,SAAWuL,EAAAhxG,EACvDgxG,EAAAhxG,OADO,EAyDP5lB,EAAiB2lB,EAAQm+B,WAAa,YAAY17C,KAAK07C,UAAU2nC,YAAc,cAAcrjF,KAAK07C,UAAU2nC,aAAe,SAASrjF,KAAK07C,UAAU2nC,WAEnJ7lE,EAASD,EAAQk3Q,SAEA,iBAAX7oS,QAAuBA,SAAW2xB,EACtC,WAAiC,EAGH,qBAA/B4iS,mBACD,aAAAA,kBACiC33T,YACzBoP,EAAA,SAASC,EAAA2lB,EAAAxa,GAAA,IAAc9lB,EAAvBqgC,EACRi1B,KAAej1B,EAAK24Q,UAAQxrS,EAAArM,SAE1BC,cACF,KAAQk/B,EAAAA,GAAA3lB,EAKYlY,MAAA,WAAT+K,EAXwBsnD,SAAAx0B,EAc5B9yB,EAAC01T,IAAA,WAAW,iBACFvoT,GAACnN,EAAH22C,KACCxpC,EAAAnN,EAAA43E,SACG0yK,SAAS1yK,OAjBOp2E,EAuBjCxB,GAAEqa,EAAAra,EAAO22C,MAAI/jB,EAAAzlB,EAAA2lB,EAAAxa,GAAA9W,EAAJxB,EAAAA,EACT/H,OAAA,YAAW+H,EAAY22C,KAAMnkD,EAAAu1D,gBAAkB56C,GAAO5Q,YACtD,WAAW/J,EAAAyhE,gBAKbj0D,EAAA22C,KAAA,QAAAp6C,YAAsB,WACtBiF,EAAAxB,EAAiB,GAAM,GAAvB,EAGA,qBAF4BgxD,UAER,SAAhBn+B,EAAAC,EAAOxa,GAUT,GAAAwa,EAAAA,GAASD,EAAC59B,MAAA,WAAoB,iBAT1B49B,EAAYm+B,UACN2kQ,iBAEAxoT,EAAA0lB,EAAQva,GAACwa,QAAA,GAATzY,EAAuBwY,GAA/BD,EACCC,EAACC,EAAAxa,OACA,KAAF9lB,EAAWmB,SACXC,cAAW,KAAApB,EAAcmkD,KAAf9jB,EAKfrgC,EAGCyF,OAAA,SAAAsE,YAGiB,WAASiF,EAAAhP,EAAL,GACjB,CAKJ,WAJQ2a,EAANkN,EAAe7Y,EAAAsxB,GACf,IAAMA,EAAAA,GAAAk3B,KAAS,GAAK,aAAYl3B,EAAAn/B,SAAAuK,MAGd40B,EAAAn/B,SAAhBqP,KAA0B6nF,UAAe,kBAEnB,iBAAA19E,EAAA,OAATylB,EAAAzlB,EACbkN,EAAW7Y,GAAA,IAAA8W,EAAA,6BAAoDnL,EAAA5T,KAC/D/G,EAAc,eAAe8iB,KAAKud,EAAA0sB,cAAU1sB,EAAA+iS,OAE3C51T,EAAW,eAAoEsV,KAAA07C,UAAf2nC,WAArE,IAEE34F,GAAUsY,GAAG9lB,GAAI0a,IAAA,oBACE2oT,WACjB,CAAI,IAAY51T,EAAC,IAAA41T,WACa51T,EAAA61T,UAAQ,WAAgB,IAAA5oT,EAAAjN,EAAAxE,OAAAyR,EAAAlN,EAAAkN,EAAAA,EAFzBwI,QAGZ,eACZ,yBAGAod,EAAAA,EAAAw3N,SAVT3zM,KAWOzpC,EACDo9O,SAAqBp9O,EAAQ4lB,EAAA,MAAA7yB,EAC7B81T,cAAU5oT,EAAA,KAAJ,CAFL,IAGW22D,EAACjxC,EAAAi1B,KAANj1B,EAHN24Q,UAISnuP,EAAAymB,EAAT/b,gBAEL56C,GAAA2lB,EAAWA,EAAAw3N,SAAcjtM,EAAIitM,SAAA3zM,KAAA0G,EAAgBvqB,EAAM,KAAzCv2B,YAKR,WAASunE,EAAgB7P,gBAE7B5W,EAAA,GAAO,QAAAxqB,EACTk3Q,OAAOj3Q,EAAAi3Q,OAAUj3Q,EAAAhhC,EAAAC,QAAA+gC,CAAA,0EC3GnBypE,oBACA,SAAA0wC,EAAAh1I,EAAAg1H,GAA4C,IAAK,IAALz6H,EAAA,EAAgBA,EAAAy6H,EAAAx6H,OAAkBD,IAAA,CAAO,IAAA06I,EAAAjgB,EAAAz6H,GAA2B06I,EAAAp3B,WAAAo3B,EAAAp3B,aAAA,EAAwDo3B,EAAAn3B,cAAA,EAAoC,UAAJm3B,IAAAA,EAAAj3B,UAAA,GAAuD1lH,OAAAglH,eAAAt9G,EAAAk1I,EAAAD,EAAAx8I,KAAAw8I,EAAA,EAC/P,SAAAogF,EAAA11E,EAAAC,EAAAC,GAAwQ,OAA1MD,GAAA5K,EAAA2K,EAAA95I,UAAA+5I,GAAsEC,GAAA7K,EAAA2K,EAAAE,GAA8DvnJ,OAAAglH,eAAAqiC,EAAA,aAAkD3hC,UAAA,IAAoB2hC,CAAA,CACxQ,SAAAzK,EAAAl2H,GAA6B,IAAAzkB,EAC7B,SAAAykB,EAAAmsE,GAA8B,GAAI,iBAAJnsE,IAAAA,EAAA,OAAAA,EAA0C,IAAAzV,EAAAyV,EAAAmyG,OAAAgkB,aAA+B,QAAI,IAAJ5rI,EAAA,CAAoB,IAAAhP,EAAAgP,EAAA6nD,KAAApyC,EAAAmsE,GAAA,WAAmC,GAAI,iBAAJ5wF,EAAA,OAAAA,EAAoC,MAAM,IAAN4zH,UAAA,gDAAuE,OAAQ,WAARhjC,EAAAzB,OAAAojB,QAAA9tF,EAAA,CAD5Oo2H,CAAAp2H,EAAA,UAAmC,MAAO,iBAAPzkB,EAAAA,EAAAmvF,OAAAnvF,EAAA,CAEhE,SAAAwjU,EAAAt+K,EAAAC,GAAgDD,EAAA55I,UAAAvN,OAAAynB,OAAA2/H,EAAA75I,WAA0D45I,EAAA55I,UAAAs8D,YAAAs9E,EAA2ClK,EAAAkK,EAAAC,EAAA,CACrJ,SAAAnK,EAAA9rD,EAAAt1D,GAAyK,OAAxIohH,EAAAj9I,OAAAk9I,eAAAl9I,OAAAk9I,eAAAt5H,OAAA,SAAAutE,EAAAt1D,GAA2H,OAAjBs1D,EAAAgsD,UAAAthH,EAAiBs1D,CAAA,EAAa8rD,EAAA9rD,EAAAt1D,EAAA,CACzK,SAAAq5G,EAAA/jD,EAAAu0O,GAA8D,IAAA5iO,EAAA,qBAAA+1B,QAAA1nC,EAAA0nC,OAAAi1C,WAAA38E,EAAA,cAAiF,GAAA2R,EAAA,OAAAA,EAAAA,EAAAhqC,KAAAq4B,IAAA9lF,KAAAuY,KAAAk/E,GAAgD,GAAA9xE,MAAA44C,QAAAunB,KAAA2R,EAC/L,SAAA3R,EAAA20I,GAAkD,GAAA30I,EAAA,CAAgB,qBAAAA,EAAA,OAAA40I,EAAA50I,EAAA20I,GAAgE,IAAApoM,EAAA19B,OAAAuN,UAAA43C,SAAA2T,KAAAq4B,GAAAr9C,MAAA,MAAqH,MAA7D,WAAApW,GAAAyzD,EAAAtnB,cAAAnsC,EAAAyzD,EAAAtnB,YAAAnlE,MAA6D,QAAAg5B,GAAA,QAAAA,EAAA1M,MAAA23C,KAAAwoB,GAAsD,cAAAzzD,GAAA,2CAAA3Y,KAAA2Y,GAAAqoM,EAAA50I,EAAA20I,QAAA,CAA3P,CAA2P,CAD9GE,CAAA70I,KAAAu0O,GAAAv0O,GAAA,kBAAAA,EAAAjvF,OAAA,CAAwH4gG,IAAA3R,EAAA2R,GAAgB,IAAA7gG,EAAA,EAAW,OAAO,WAAc,OAAAA,GAAAkvF,EAAAjvF,OAAA,CAA4BqmC,MAAA,GAAqB,CAAEA,MAAA,EAAA/vB,MAAA24E,EAAAlvF,KAAA,EAAmC,MAAM,IAAN4zH,UAAA,yIAE7b,SAAAkwG,EAAAh3N,EAAAg0B,IAAuC,MAAAA,GAAAA,EAAAh0B,EAAA7M,UAAA6gC,EAAAh0B,EAAA7M,QAAuD,IAAK,IAALD,EAAA,EAAA+M,EAAA,IAAAgiB,MAAA+R,GAAuC9gC,EAAA8gC,EAAS9gC,IAAA+M,EAAA/M,GAAA8M,EAAA9M,GAAuB,OAAA+M,CAAA,CACrK,SAAA22T,EAAAn6N,GACA,OAAAA,GAAA,kBAAAA,GAAA,YAAAA,EAAAA,EAAA,QAAAA,CACA,CAxEA+nC,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,MACRA,EAAQ,MACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,MACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,MACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,MACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,MACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,MACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OAcR,IAAA1gD,EAAA8yO,EAAwBpyL,EAAQ,QAChCU,EAAYV,EAAQ,OACpB6+C,EAAAuzI,EAA8BpyL,EAAQ,QACtC2hD,EAAAywI,EAA8BpyL,EAAQ,QACtCq/B,EAAA+yJ,EAAkCpyL,EAAQ,QAC1Ci6B,EAAAm4J,EAAmCpyL,EAAQ,QAC3Ct9B,EAAA0vN,EAAgCpyL,EAAQ,QACxC08B,EAAA01J,EAA8BpyL,EAAQ,OACtCqyL,EAAAD,EAA6BpyL,EAAQ,QACrCi7B,EAASj7B,EAAQ,OACjBsyL,EAAA,CACAA,WAAA,GACAC,EAAA,GA8CA,SAAAh0J,EAAAn/H,EAAAxyC,EAAAqY,GAWA,OAVArY,KAAAwyC,EACA3yC,OAAAglH,eAAAryE,EAAAxyC,EAAA,CACAqY,MAAAA,EACA+sG,YAAA,EACAC,cAAA,EACAE,UAAA,IAGA/yE,EAAAxyC,GAAAqY,EAEAm6B,CACA,CACA,SAAAozR,EAAAr+T,EAAAiiB,EAAAq8S,EAAArpL,EAAAuzH,GACA,IAAA5G,EAAA,GAoBA,OAnBAtpQ,OAAAC,KAAA08I,GAAAz8I,SAAA,SAAAC,GACAmpQ,EAAAnpQ,GAAAw8I,EAAAx8I,EACA,IACAmpQ,EAAA/jJ,aAAA+jJ,EAAA/jJ,WACA+jJ,EAAA9jJ,eAAA8jJ,EAAA9jJ,cACA,UAAA8jJ,GAAAA,EAAA28D,eACA38D,EAAA5jJ,UAAA,GAEA4jJ,EAAA08D,EAAAlyR,QAAAwhE,UAAAvF,QAAA,SAAAu5J,EAAA48D,GACA,OAAAA,EAAAx+T,EAAAiiB,EAAA2/O,IAAAA,CACA,GAAGA,GACH4G,QAAA,IAAA5G,EAAA28D,cACA38D,EAAA9wP,MAAA8wP,EAAA28D,YAAA38D,EAAA28D,YAAAntQ,KAAAo3M,QAAA,EACA5G,EAAA28D,iBAAAhjU,QAEA,IAAAqmQ,EAAA28D,cACAjmU,OAAAglH,eAAAt9G,EAAAiiB,EAAA2/O,GACAA,EAAA,MAEAA,CACA,CAOA,SAAAllI,EAAA18H,EAAAvH,EAAAw8I,GACA,GAAAA,EAAAvlB,IAAA,CACA,IAAAA,EAAAulB,EAAAvlB,IACAulB,EAAAvlB,IAAA,WACA,IAAA5+G,EAAA4+G,EAAAt+D,KAAA,MAIA,OAHA94D,OAAAglH,eAAA,KAAA7kH,EAAA,CACAqY,MAAAA,IAEAA,CACA,CACA,MAAI,uBAAAmkI,EAAAnkI,MAAA,CACJ,IAAAgqD,EAAAm6E,EAAAnkI,MACA,OACA4+G,IAAA,WACA,IAAAgN,EAAA,IAAAzM,IACA,SAAA8W,IACA,QAAA+vE,EAAAttH,UAAAhvF,OAAA8D,EAAA,IAAAgrB,MAAAwtL,GAAAhuD,EAAA,EAA8EA,EAAAguD,EAAahuD,IAC3FxqJ,EAAAwqJ,GAAAt/D,UAAAs/D,GAEA,IAAArwJ,EAAA6F,EAAA9D,OAAA,EAAA8D,EAAA,WACA,GAAAo+H,EAAAz3B,IAAAxsG,GACA,OAAAikI,EAAAhN,IAAAj3H,GAEA,IAAA+K,EAAAs3D,EAAAy2D,MAAA,KAAAjzH,GAEA,OADAo+H,EAAAjN,IAAAh3H,EAAA+K,GACAA,CACA,CAIA,OAHAlL,OAAAglH,eAAA,KAAA7kH,EAAA,CACAqY,MAAAi2H,IAEAA,CACA,EAEA,CACA,CAzHAo3L,EAAAM,eAAA,SAAA90S,GACAy0S,EAAArgU,KAAA4rB,EACA,EACAw0S,EAAAO,SAAA,SAAAjwM,EAAAorF,GACA,IAAAnqJ,EAAAo3G,EAAAsB,aAAA35C,GACA,OAAA0vM,EAAAp+S,OAAA2vC,EAAAmqJ,EACA,EACAskH,EAAApsQ,KAAA,SAAA08D,EAAAorF,EAAAvzM,GACA,oBAAAuzM,IACAvzM,EAAAuzM,EACAA,EAAA,MAEA/yC,EAAAmB,SAAAx5C,GAAA,SAAA1mG,EAAA2nC,GACA,GAAA3nC,EACA,OAAAzhB,EAAAyhB,GAEA,IACA,IAAAjR,EAAAqnT,EAAAp+S,OAAA2vC,EAAAmqJ,EACA,CAAM,MAAAtwM,GACN,OAAAjD,EAAAiD,EACA,CACA,OAAAjD,EAAA,KAAAwQ,EACA,GAEA,EACAqnT,EAAAp+S,OAAA,SAAA2vC,EAAAmqJ,GACA,QAAAt/M,EAAA,EAAkBA,EAAA6jU,EAAA5jU,OAAoBD,IAAA,CACtC,IAAAovB,EAAAy0S,EAAA7jU,GACA,GAAAovB,EAAAg1S,MAAAjvQ,GAAA,CACA,IAAA54C,EAAA,IAAA6S,EAAA,IAAAwhE,EAAA2gD,aAAAp8E,IACA,OAAAmqJ,EACA/iM,EAAA8nT,QAAA/kH,GAEA/iM,CACA,CACA,CACA,UAAAuwC,MAAA,sBACA,EACA82Q,EAAAU,gBAAA,KACAV,EAAAW,mBAAA,SAAAl7I,QACA,IAAAA,IACAA,EAAA,MAEAu6I,EAAAU,gBAAAj7I,CACA,EA8EA,IAAAm7I,EAAA,IAAA5zO,EAAAkhD,OAAA,CACA2yL,UAAA7zO,EAAAqmD,OACAytL,WAAA9zO,EAAAqmD,OACA0tL,QAAA/zO,EAAA+mD,MACAitL,cAAAh0O,EAAAqmD,SAEA4tL,EAAA,IAAAj0O,EAAAkhD,OAAA,CACAgzL,cAAAl0O,EAAA2mD,OACAwtL,YAAAn0O,EAAA2mD,OACAytL,QAAAp0O,EAAA2mD,SAEA0tL,EAAA,IAAAr0O,EAAAkhD,OAAA,CACAozL,kBAAAt0O,EAAAwmD,OACA+tL,gBAAAv0O,EAAAmmD,QAEAquL,EAAA,IAAAx0O,EAAAkhD,OAAA,CACAuzL,aAAAz0O,EAAAwmD,OACA4tL,QAAAp0O,EAAAqmD,SAEAquL,EAAA,IAAA10O,EAAA7hE,MAAAk2S,EAAAr0O,EAAA2mD,QACAguL,EAAA,IAAA30O,EAAA7hE,MAAAq2S,EAAAx0O,EAAA2mD,QACAiuL,EAAA,IAAA50O,EAAAkhD,OAAA,CACA2zL,YAAA70O,EAAAwmD,OACAsuL,WAAA,IAAA90O,EAAAshD,QAAAthD,EAAA2mD,OAAA+tL,EAAA,CACAv+T,KAAA,WAEA4+T,cAAA,IAAA/0O,EAAAshD,QAAAthD,EAAA2mD,OAAAguL,EAAA,CACAx+T,KAAA,aAGA6+T,EAAA,IAAAh1O,EAAAmhD,gBAAAnhD,EAAAqmD,OAAA,CACA,GAEAh3I,OAAA2wF,EAAAqmD,OAEAs+K,SAAA3kO,EAAAqmD,OAEA4uL,QAAA,IAAAj1O,EAAA4gD,UAAA5gD,EAAAmmD,MAAA,MAEA,GAEA92I,OAAA2wF,EAAAqmD,OACAs+K,SAAA3kO,EAAAqmD,OACA6uL,cAAA,IAAAl1O,EAAA7hE,MAAA6hE,EAAAqmD,OAAA,KACA8uL,eAAA,SAAAthT,GACA,OAAAxc,KAAAoB,IAAA2tH,MAAA/uH,KAAAwc,EAAAqhT,cACA,EACAE,WAAA,IAAAp1O,EAAA4gD,UAAAgzL,EAAA,kBACAyB,gBAAA,IAAAr1O,EAAA4gD,UAAA5gD,EAAAqmD,OAAA,mBAEA,GAEAh3I,OAAA2wF,EAAAqmD,OAEAs+K,SAAA3kO,EAAAqmD,OAEAivL,WAAAt1O,EAAAqmD,OACAkvL,SAAA,SAAA1hT,GACA,OAAAA,EAAAyhT,YAAA,CACA,EACAE,YAAAx1O,EAAAqmD,OACAovL,cAAAz1O,EAAAqmD,OACAqvL,WAAA11O,EAAAqmD,OACAsvL,QAAA,IAAA31O,EAAA4gD,UAAA5gD,EAAAqmD,OAAA,YACAuvL,YAAA,IAAA51O,EAAAihD,SAAAjhD,EAAAqmD,QAEAwvL,UAAA,IAAA71O,EAAA4gD,UAAA5gD,EAAAqmD,OAAA,YACA0tL,QAAA,IAAA/zO,EAAA4gD,UAAA5gD,EAAA+mD,MAAA,YACAitL,cAAA,IAAAh0O,EAAA4gD,UAAA5gD,EAAAqmD,OAAA,YACAgvL,gBAAA,IAAAr1O,EAAA4gD,UAAA5gD,EAAAqmD,QAAA,SAAAxyH,GACA,OAAAA,EAAAxkB,OAAAwkB,EAAAouH,gBAAA,CACA,KAEA,GAEA5yI,OAAA2wF,EAAAqmD,OACAs+K,SAAA3kO,EAAAqmD,OACAwtL,UAAA7zO,EAAAqmD,OACAytL,WAAA9zO,EAAAqmD,OACAyvL,aAAA,IAAA91O,EAAA4gD,UAAA5gD,EAAAqmD,OAAA,eAEA,GAEAkiL,SAAA,IAAAvoO,EAAAihD,SAAAjhD,EAAAqmD,QACAh3I,OAAA2wF,EAAA2mD,OACAg+K,SAAA3kO,EAAAqmD,OACA0vL,KAAA,IAAA/1O,EAAA4gD,UAAA5gD,EAAAmmD,MAAA,MACA6vL,QAAAh2O,EAAA2mD,OACAs/G,OAAA,IAAAjmK,EAAA4gD,UAAAqzL,EAAA,YAEA,IAEA1L,SAAA,IAAAvoO,EAAAihD,SAAAjhD,EAAAqmD,QACAh3I,OAAA2wF,EAAA2mD,OACAg+K,SAAA3kO,EAAA2mD,OACAktL,UAAA7zO,EAAA2mD,OACAmtL,WAAA9zO,EAAA2mD,OACAmvL,aAAA,IAAA91O,EAAA4gD,UAAA5gD,EAAAqmD,OAAA,aAEA,IAEAkiL,SAAA,IAAAvoO,EAAAihD,SAAAjhD,EAAAqmD,QACAh3I,OAAA2wF,EAAA2mD,OACAg+K,SAAA3kO,EAAA2mD,OACAqvL,QAAAh2O,EAAA2mD,OACAs/G,OAAA,IAAAjmK,EAAA4gD,UAAAqzL,EAAA,YAEA,IAEA1L,SAAA,IAAAvoO,EAAAihD,SAAAjhD,EAAAqmD,QACAh3I,OAAA2wF,EAAA2mD,OACAg+K,SAAA3kO,EAAA2mD,OACAqvL,QAAAh2O,EAAA2mD,OACAs/G,OAAA,IAAAjmK,EAAA4gD,UAAAqzL,EAAA,YAEA,IAEA5kU,OAAA2wF,EAAA2mD,OACAsvL,WAAAj2O,EAAA2mD,OACAuvL,aAAA,IAAAl2O,EAAA4gD,UAAAg0L,EAAA,iBAGAuB,EAAA,IAAAn2O,EAAAkhD,OAAA,CACAk1L,WAAAp2O,EAAAqmD,OAEAgwL,WAAAr2O,EAAAqmD,OAEAprB,MAAA,IAAAj7B,EAAAshD,QAAAthD,EAAA2mD,OAAAquL,EAAA,CACA7+T,KAAA,SACAwyI,MAAA,MAIA6oE,EAAA,IAAAxxH,EAAAkhD,OAAA,CACAv0I,QAAAqzF,EAAAqmD,OACAiwL,aAAAt2O,EAAAqmD,OACA+1F,OAAA,IAAAp8I,EAAA7hE,MAAAg4S,EAAA,kBAEA3zR,EAAA,IAAAw9C,EAAAkhD,OAAA,CACAv0I,QAAAqzF,EAAAqnD,MAEAkvL,SAAAv2O,EAAAqnD,MAEAmvL,mBAAAx2O,EAAA2mD,OACA8vL,YAAAz2O,EAAA2mD,OAEA/D,MAAA5iD,EAAAqmD,OACAsoE,WAAA3uH,EAAAqmD,OAEAqwL,QAAA,IAAA12O,EAAA7hE,MAAA6hE,EAAAqnD,MAAA,GACAsvL,SAAA,IAAA32O,EAAA7hE,MAAA6hE,EAAAqnD,MAAA,GACAuvL,KAAA52O,EAAA+mD,MAEA8vL,KAAA72O,EAAA+mD,MAEA+vL,KAAA92O,EAAA+mD,MAEAgwL,KAAA/2O,EAAA+mD,MAEA+oE,SAAA,IAAA9vH,EAAA6gD,SAAA7gD,EAAAqmD,OAAA,yEACA2wL,cAAAh3O,EAAAqmD,OAEA4wL,kBAAAj3O,EAAA+mD,MACAmwL,iBAAAl3O,EAAA+mD,MAEAowL,gBAAAn3O,EAAA+mD,QAEAqwL,EAAA,IAAAp3O,EAAAkhD,OAAA,CACAv0I,QAAAqzF,EAAAqnD,MACA2pD,OAAAhxG,EAAA+mD,MAEAoqD,QAAAnxG,EAAA+mD,MAEAimE,QAAAhtH,EAAA+mD,MAEAswL,gBAAAr3O,EAAAqmD,OAEAixL,mBAAAt3O,EAAA+mD,MAEAwwL,oBAAAv3O,EAAA+mD,MAEAywL,WAAAx3O,EAAA+mD,MACA0wL,eAAAz3O,EAAA+mD,MAEA2wL,cAAA13O,EAAA+mD,MAEA4wL,YAAA33O,EAAA+mD,MAEAwhL,SAAA,IAAAvoO,EAAAihD,SAAAjhD,EAAA+mD,MAAA,GACA6wL,iBAAA53O,EAAA+mD,MAEA8wL,gBAAA73O,EAAAqmD,SAEAyxL,EAAA,IAAA93O,EAAAkhD,OAAA,CACAi3E,QAAAn4H,EAAAqmD,OACA0xL,QAAA/3O,EAAA+mD,QAEAixL,EAAA,IAAAh4O,EAAAkhD,OAAA,CACA+2L,QAAA,IAAAj4O,EAAA4gD,UAAAk3L,GAAA,SAAAjkT,GACA,OAAAA,EAAAs/B,OAAAikR,KAAAS,eACA,IACAK,SAAA,IAAAl4O,EAAA4gD,UAAA5gD,EAAA+mD,OAAA,SAAAlzH,GACA,OAAAA,EAAAs/B,OAAAglR,KAAAC,UAAAvkT,EAAAs/B,OAAAikR,KAAAS,eACA,MAEAM,EAAA,IAAAn4O,EAAAkhD,OAAA,CACAv0I,QAAAqzF,EAAAqnD,MACA+wL,UAAAp4O,EAAAqmD,OAEAgyL,UAAAr4O,EAAAqmD,OAEAiyL,YAAAt4O,EAAAqmD,OAEAkyL,mBAAAv4O,EAAAqmD,OAEAmyL,qBAAAx4O,EAAAqmD,OAEAoyL,SAAAz4O,EAAAqmD,OAEAqyL,kBAAA14O,EAAAqmD,OAEAsyL,WAAA34O,EAAAqmD,OAEAuyL,gBAAA54O,EAAAqmD,OAEAwyL,mBAAA74O,EAAAqmD,OAEAyyL,iBAAA94O,EAAAqmD,OAEA0yL,sBAAA/4O,EAAAqmD,OAEA2yL,qBAAAh5O,EAAAqmD,OAEA4yL,kBAAAj5O,EAAAqmD,SAOA,SAAA6yL,EAAA9C,EAAAC,EAAA8C,GAIA,YAHA,IAAAA,IACAA,EAAA,GAEA,IAAA/C,GAAAgD,EAAAD,GACAC,EAAAD,GAEAE,EAAAjD,GAAAC,EACA,CAEA,IAAAgD,EAAA,CAEA,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,WAoBxD,CAAC,WAAY,YAAa,OAAQ,SAAU,aAAc,aAAc,WAAY,cAAe,SAAU,aAAc,WAAY,WAAY,QAAS,UAAW,QAAS,SAAU,UAAW,YAAa,YAAa,UAAW,QAAS,UAAW,UAAW,WAAY,WAAY,aAAc,UAAW,YAAa,OAAQ,cAAe,aAAc,UAE5W,CAAC,SAGD,CAAC,SAAU,UAAW,YAAa,UAAW,OAAQ,UAAW,QAAS,KAAM,KAAM,KAAM,YAG5FD,EAAA,CACA,gBACA,gBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,gBACA,gBACA,iBACA,iBACA,iBACA,eAEA,iBAGAE,EAAA,CAEA,GAAI,CAEJ,OACA,QACA,QACA,QACA,OACA,QACA,QACA,QACA,OACA,QACA,QACA,QACA,OACA,QACA,QACA,QACA,OACA,WACA,QACA,QACA,OACA,QACA,QACA,SACA,OACA,QACA,QACA,SACA,OACA,QACA,QACA,SACA,OACA,QACA,QACA,SACA,OACA,QACA,QACA,SACA,QACA,QACA,QACA,SACA,QACA,QACA,QACA,SACA,QACA,QACA,QACA,SACA,QACA,QACA,QACA,SACA,QACA,QACA,QACA,SACA,QACA,QACA,QACA,SACA,QACA,QACA,QACA,SACA,QACA,QACA,QACA,SACA,QACA,QACA,QACA,SACA,aACA,aACA,QACA,SACA,QACA,aACA,QACA,SACA,QACA,QACA,QACA,SACA,QACA,QACA,QACA,SACA,QACA,QACA,QACA,SACA,QACA,QACA,aACA,SACA,QACA,QACA,QACA,iBACA,QACA,QACA,QACA,SACA,QACA,WACA,QACA,SACA,QACA,QACA,QACA,SACA,QACA,QACA,SAGA,GAAI,CAEJ,UACA,cACA,UACA,UACA,UACA,aACA,UACA,UACA,WACA,aACA,WACA,UACA,UACA,cACA,UACA,UACA,aACA,aACA,UACA,cACA,cACA,cACA,UACA,cACA,UACA,cACA,UACA,cACA,aACA,aACA,UACA,aACA,cACA,cACA,WACA,aACA,cACA,aACA,UACA,aACA,cACA,UACA,UACA,cACA,aACA,cACA,aACA,cACA,WACA,UACA,UACA,aACA,aACA,UACA,UACA,cACA,cACA,WACA,UACA,aACA,aACA,UACA,UACA,cACA,cACA,aACA,WACA,aACA,WACA,aACA,UACA,cACA,cACA,UACA,WACA,cACA,aACA,aACA,UACA,cACA,UACA,aACA,aACA,UACA,UACA,aACA,UACA,UACA,eACA,UACA,UACA,cACA,UACA,UACA,UACA,cACA,UACA,UACA,UACA,aACA,UACA,aACA,UACA,aACA,UACA,UACA,UACA,UACA,UACA,aACA,UACA,WACA,aACA,aACA,UACA,UACA,eACA,aACA,aACA,WACA,UACA,UACA,UACA,UACA,UACA,UACA,aACA,UACA,UACA,UACA,aACA,UACA,UACA,UACA,UACA,UACA,aACA,UACA,UACA,UACA,aACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aACA,UACA,WACA,UACA,aACA,UACA,cACA,UACA,UACA,UACA,WACA,WACA,UACA,UACA,aACA,UACA,aACA,eACA,UACA,eACA,UACA,UACA,aACA,UACA,UACA,UACA,WACA,UACA,WACA,UACA,cACA,UACA,UACA,UACA,WACA,UACA,aACA,aACA,UACA,WACA,UACA,UACA,kBACA,UACA,aACA,UACA,UACA,UACA,cACA,UACA,kBACA,aACA,UACA,eACA,cACA,WACA,aAEAC,EAAA,IAAAv5O,EAAAkhD,OAAA,CACAk1L,WAAAp2O,EAAAqmD,OACAgwL,WAAAr2O,EAAAqmD,OACA8yL,WAAAn5O,EAAAqmD,OACAmzL,OAAAx5O,EAAAqmD,OACAh3I,OAAA2wF,EAAAqmD,OACA9V,OAAA,IAAAvwC,EAAAshD,QAAAthD,EAAAqmD,OAAA,IAAArmD,EAAAzB,OAAA,mBAAA1qE,GACA,OAAAqlT,EAAArlT,EAAAuiT,WAAAviT,EAAAwiT,WAAAxiT,EAAAslT,WACA,IAAM,CACNhjU,KAAA,SACAyyI,WAAA,SAAA/G,GACA,OAAAA,EAAA1uF,OAAAsmR,YACA,EACAhxL,WAAA,MAGAixL,EAAA,IAAA15O,EAAAkhD,OAAA,CACA7xI,OAAA2wF,EAAAqmD,OACA5c,IAAA,IAAAzpC,EAAAshD,QAAAthD,EAAAqmD,OAAA,IAAArmD,EAAAzB,OAA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","sources":["../node_modules/abcjs/index.js","../node_modules/abcjs/src/api/abc_animation.js","../node_modules/abcjs/src/api/abc_tablatures.js","../node_modules/abcjs/src/api/abc_timing_callbacks.js","../node_modules/abcjs/src/api/abc_tunebook.js","../node_modules/abcjs/src/api/abc_tunebook_svg.js","../node_modules/abcjs/src/api/tune-metrics.js","../node_modules/abcjs/src/const/key-accidentals.js","../node_modules/abcjs/src/const/relative-major.js","../node_modules/abcjs/src/data/abc_tune.js","../node_modules/abcjs/src/data/deline-tune.js","../node_modules/abcjs/src/edit/abc_editarea.js","../node_modules/abcjs/src/edit/abc_editor.js","../node_modules/abcjs/src/midi/abc_midi_create.js","../node_modules/abcjs/src/parse/abc_common.js","../node_modules/abcjs/src/parse/abc_parse.js","../node_modules/abcjs/src/parse/abc_parse_book.js","../node_modules/abcjs/src/parse/abc_parse_directive.js","../node_modules/abcjs/src/parse/abc_parse_header.js","../node_modules/abcjs/src/parse/abc_parse_key_voice.js","../node_modules/abcjs/src/parse/abc_parse_music.js","../node_modules/abcjs/src/parse/abc_parse_settings.js","../node_modules/abcjs/src/parse/abc_tokenizer.js","../node_modules/abcjs/src/parse/abc_transpose.js","../node_modules/abcjs/src/parse/all-notes.js","../node_modules/abcjs/src/parse/transpose-chord.js","../node_modules/abcjs/src/parse/tune-builder.js","../node_modules/abcjs/src/parse/wrap_lines.js","../node_modules/abcjs/src/str/output.js","../node_modules/abcjs/src/synth/abc_midi_flattener.js","../node_modules/abcjs/src/synth/abc_midi_renderer.js","../node_modules/abcjs/src/synth/abc_midi_sequencer.js","../node_modules/abcjs/src/synth/active-audio-context.js","../node_modules/abcjs/src/synth/cents-to-factor.js","../node_modules/abcjs/src/synth/chord-track.js","../node_modules/abcjs/src/synth/create-note-map.js","../node_modules/abcjs/src/synth/create-synth-control.js","../node_modules/abcjs/src/synth/create-synth.js","../node_modules/abcjs/src/synth/download-buffer.js","../node_modules/abcjs/src/synth/get-midi-file.js","../node_modules/abcjs/src/synth/images/loading.svg.js","../node_modules/abcjs/src/synth/images/loop.svg.js","../node_modules/abcjs/src/synth/images/pause.svg.js","../node_modules/abcjs/src/synth/images/play.svg.js","../node_modules/abcjs/src/synth/images/reset.svg.js","../node_modules/abcjs/src/synth/instrument-index-to-name.js","../node_modules/abcjs/src/synth/load-note.js","../node_modules/abcjs/src/synth/note-to-midi.js","../node_modules/abcjs/src/synth/pitch-to-note-name.js","../node_modules/abcjs/src/synth/pitches-to-perc.js","../node_modules/abcjs/src/synth/place-note.js","../node_modules/abcjs/src/synth/play-event.js","../node_modules/abcjs/src/synth/register-audio-context.js","../node_modules/abcjs/src/synth/sounds-cache.js","../node_modules/abcjs/src/synth/supports-audio.js","../node_modules/abcjs/src/synth/synth-controller.js","../node_modules/abcjs/src/synth/synth-sequence.js","../node_modules/abcjs/src/tablatures/instruments/string-patterns.js","../node_modules/abcjs/src/tablatures/instruments/string-tablature.js","../node_modules/abcjs/src/tablatures/instruments/tab-note.js","../node_modules/abcjs/src/tablatures/instruments/tab-notes.js","../node_modules/abcjs/src/tablatures/instruments/tab-string-patterns.js","../node_modules/abcjs/src/tablatures/instruments/tab-string.js","../node_modules/abcjs/src/tablatures/tab-absolute-elements.js","../node_modules/abcjs/src/tablatures/tab-common.js","../node_modules/abcjs/src/tablatures/tab-renderer.js","../node_modules/abcjs/src/write/creation/abstract-engraver.js","../node_modules/abcjs/src/write/creation/add-chord.js","../node_modules/abcjs/src/write/creation/add-text-if.js","../node_modules/abcjs/src/write/creation/calc-height.js","../node_modules/abcjs/src/write/creation/create-clef.js","../node_modules/abcjs/src/write/creation/create-key-signature.js","../node_modules/abcjs/src/write/creation/create-note-head.js","../node_modules/abcjs/src/write/creation/create-time-signature.js","../node_modules/abcjs/src/write/creation/decoration.js","../node_modules/abcjs/src/write/creation/elements/absolute-element.js","../node_modules/abcjs/src/write/creation/elements/beam-element.js","../node_modules/abcjs/src/write/creation/elements/bottom-text.js","../node_modules/abcjs/src/write/creation/elements/brace-element.js","../node_modules/abcjs/src/write/creation/elements/crescendo-element.js","../node_modules/abcjs/src/write/creation/elements/dynamic-decoration.js","../node_modules/abcjs/src/write/creation/elements/ending-element.js","../node_modules/abcjs/src/write/creation/elements/free-text.js","../node_modules/abcjs/src/write/creation/elements/glissando-element.js","../node_modules/abcjs/src/write/creation/elements/relative-element.js","../node_modules/abcjs/src/write/creation/elements/rich-text.js","../node_modules/abcjs/src/write/creation/elements/separator.js","../node_modules/abcjs/src/write/creation/elements/staff-group-element.js","../node_modules/abcjs/src/write/creation/elements/subtitle.js","../node_modules/abcjs/src/write/creation/elements/tempo-element.js","../node_modules/abcjs/src/write/creation/elements/tie-element.js","../node_modules/abcjs/src/write/creation/elements/top-text.js","../node_modules/abcjs/src/write/creation/elements/triplet-element.js","../node_modules/abcjs/src/write/creation/elements/voice-element.js","../node_modules/abcjs/src/write/creation/glyphs.js","../node_modules/abcjs/src/write/creation/translate-chord.js","../node_modules/abcjs/src/write/draw/absolute.js","../node_modules/abcjs/src/write/draw/beam.js","../node_modules/abcjs/src/write/draw/brace.js","../node_modules/abcjs/src/write/draw/crescendo.js","../node_modules/abcjs/src/write/draw/debug-box.js","../node_modules/abcjs/src/write/draw/draw.js","../node_modules/abcjs/src/write/draw/dynamics.js","../node_modules/abcjs/src/write/draw/ending.js","../node_modules/abcjs/src/write/draw/glissando.js","../node_modules/abcjs/src/write/draw/group-elements.js","../node_modules/abcjs/src/write/draw/non-music.js","../node_modules/abcjs/src/write/draw/print-line.js","../node_modules/abcjs/src/write/draw/print-path.js","../node_modules/abcjs/src/write/draw/print-stem.js","../node_modules/abcjs/src/write/draw/print-symbol.js","../node_modules/abcjs/src/write/draw/relative.js","../node_modules/abcjs/src/write/draw/round-number.js","../node_modules/abcjs/src/write/draw/selectables.js","../node_modules/abcjs/src/write/draw/separator.js","../node_modules/abcjs/src/write/draw/set-paper-size.js","../node_modules/abcjs/src/write/draw/sprintf.js","../node_modules/abcjs/src/write/draw/staff-group.js","../node_modules/abcjs/src/write/draw/staff-line.js","../node_modules/abcjs/src/write/draw/staff.js","../node_modules/abcjs/src/write/draw/tempo.js","../node_modules/abcjs/src/write/draw/text.js","../node_modules/abcjs/src/write/draw/tie.js","../node_modules/abcjs/src/write/draw/triplet.js","../node_modules/abcjs/src/write/draw/voice.js","../node_modules/abcjs/src/write/engraver-controller.js","../node_modules/abcjs/src/write/helpers/classes.js","../node_modules/abcjs/src/write/helpers/get-font-and-attr.js","../node_modules/abcjs/src/write/helpers/get-text-size.js","../node_modules/abcjs/src/write/helpers/set-class.js","../node_modules/abcjs/src/write/helpers/spacing.js","../node_modules/abcjs/src/write/interactive/create-analysis.js","../node_modules/abcjs/src/write/interactive/find-selectable-element.js","../node_modules/abcjs/src/write/interactive/highlight.js","../node_modules/abcjs/src/write/interactive/selection.js","../node_modules/abcjs/src/write/interactive/unhighlight.js","../node_modules/abcjs/src/write/layout/beam.js","../node_modules/abcjs/src/write/layout/get-bar-y-at.js","../node_modules/abcjs/src/write/layout/get-left-edge-of-staff.js","../node_modules/abcjs/src/write/layout/layout-in-grid.js","../node_modules/abcjs/src/write/layout/layout.js","../node_modules/abcjs/src/write/layout/set-upper-and-lower-elements.js","../node_modules/abcjs/src/write/layout/staff-group.js","../node_modules/abcjs/src/write/layout/triplet.js","../node_modules/abcjs/src/write/layout/voice-elements.js","../node_modules/abcjs/src/write/layout/voice.js","../node_modules/abcjs/src/write/renderer.js","../node_modules/abcjs/src/write/svg.js","../node_modules/abcjs/version.js","../node_modules/dagre/index.js","../node_modules/dagre/lib/acyclic.js","../node_modules/dagre/lib/add-border-segments.js","../node_modules/dagre/lib/coordinate-system.js","../node_modules/dagre/lib/data/list.js","../node_modules/dagre/lib/debug.js","../node_modules/dagre/lib/graphlib.js","../node_modules/dagre/lib/greedy-fas.js","../node_modules/dagre/lib/layout.js","../node_modules/dagre/lib/lodash.js","../node_modules/dagre/lib/nesting-graph.js","../node_modules/dagre/lib/normalize.js","../node_modules/dagre/lib/order/add-subgraph-constraints.js","../node_modules/dagre/lib/order/barycenter.js","../node_modules/dagre/lib/order/build-layer-graph.js","../node_modules/dagre/lib/order/cross-count.js","../node_modules/dagre/lib/order/index.js","../node_modules/dagre/lib/order/init-order.js","../node_modules/dagre/lib/order/resolve-conflicts.js","../node_modules/dagre/lib/order/sort-subgraph.js","../node_modules/dagre/lib/order/sort.js","../node_modules/dagre/lib/parent-dummy-chains.js","../node_modules/dagre/lib/position/bk.js","../node_modules/dagre/lib/position/index.js","../node_modules/dagre/lib/rank/feasible-tree.js","../node_modules/dagre/lib/rank/index.js","../node_modules/dagre/lib/rank/network-simplex.js","../node_modules/dagre/lib/rank/util.js","../node_modules/dagre/lib/util.js","../node_modules/dagre/lib/version.js","../node_modules/extend/index.js","../node_modules/graphlib/index.js","../node_modules/graphlib/lib/alg/components.js","../node_modules/graphlib/lib/alg/dfs.js","../node_modules/graphlib/lib/alg/dijkstra-all.js","../node_modules/graphlib/lib/alg/dijkstra.js","../node_modules/graphlib/lib/alg/find-cycles.js","../node_modules/graphlib/lib/alg/floyd-warshall.js","../node_modules/graphlib/lib/alg/index.js","../node_modules/graphlib/lib/alg/is-acyclic.js","../node_modules/graphlib/lib/alg/postorder.js","../node_modules/graphlib/lib/alg/preorder.js","../node_modules/graphlib/lib/alg/prim.js","../node_modules/graphlib/lib/alg/tarjan.js","../node_modules/graphlib/lib/alg/topsort.js","../node_modules/graphlib/lib/data/priority-queue.js","../node_modules/graphlib/lib/graph.js","../node_modules/graphlib/lib/index.js","../node_modules/graphlib/lib/json.js","../node_modules/graphlib/lib/lodash.js","../node_modules/graphlib/lib/version.js","../node_modules/html-to-pdfmake/index.js","../node_modules/inline-style-parser/index.js","../node_modules/lodash/_DataView.js","../node_modules/lodash/_Hash.js","../node_modules/lodash/_ListCache.js","../node_modules/lodash/_Map.js","../node_modules/lodash/_MapCache.js","../node_modules/lodash/_Promise.js","../node_modules/lodash/_Set.js","../node_modules/lodash/_SetCache.js","../node_modules/lodash/_Stack.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_Uint8Array.js","../node_modules/lodash/_WeakMap.js","../node_modules/lodash/_apply.js","../node_modules/lodash/_arrayEach.js","../node_modules/lodash/_arrayFilter.js","../node_modules/lodash/_arrayIncludes.js","../node_modules/lodash/_arrayIncludesWith.js","../node_modules/lodash/_arrayLikeKeys.js","../node_modules/lodash/_arrayMap.js","../node_modules/lodash/_arrayPush.js","../node_modules/lodash/_arrayReduce.js","../node_modules/lodash/_arraySome.js","../node_modules/lodash/_asciiSize.js","../node_modules/lodash/_assignMergeValue.js","../node_modules/lodash/_assignValue.js","../node_modules/lodash/_assocIndexOf.js","../node_modules/lodash/_baseAssign.js","../node_modules/lodash/_baseAssignIn.js","../node_modules/lodash/_baseAssignValue.js","../node_modules/lodash/_baseClone.js","../node_modules/lodash/_baseCreate.js","../node_modules/lodash/_baseEach.js","../node_modules/lodash/_baseExtremum.js","../node_modules/lodash/_baseFilter.js","../node_modules/lodash/_baseFindIndex.js","../node_modules/lodash/_baseFlatten.js","../node_modules/lodash/_baseFor.js","../node_modules/lodash/_baseForOwn.js","../node_modules/lodash/_baseGet.js","../node_modules/lodash/_baseGetAllKeys.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/_baseGt.js","../node_modules/lodash/_baseHas.js","../node_modules/lodash/_baseHasIn.js","../node_modules/lodash/_baseIndexOf.js","../node_modules/lodash/_baseIsArguments.js","../node_modules/lodash/_baseIsEqual.js","../node_modules/lodash/_baseIsEqualDeep.js","../node_modules/lodash/_baseIsMap.js","../node_modules/lodash/_baseIsMatch.js","../node_modules/lodash/_baseIsNaN.js","../node_modules/lodash/_baseIsNative.js","../node_modules/lodash/_baseIsSet.js","../node_modules/lodash/_baseIsTypedArray.js","../node_modules/lodash/_baseIteratee.js","../node_modules/lodash/_baseKeys.js","../node_modules/lodash/_baseKeysIn.js","../node_modules/lodash/_baseLt.js","../node_modules/lodash/_baseMap.js","../node_modules/lodash/_baseMatches.js","../node_modules/lodash/_baseMatchesProperty.js","../node_modules/lodash/_baseMerge.js","../node_modules/lodash/_baseMergeDeep.js","../node_modules/lodash/_baseOrderBy.js","../node_modules/lodash/_basePick.js","../node_modules/lodash/_basePickBy.js","../node_modules/lodash/_baseProperty.js","../node_modules/lodash/_basePropertyDeep.js","../node_modules/lodash/_baseRange.js","../node_modules/lodash/_baseReduce.js","../node_modules/lodash/_baseRest.js","../node_modules/lodash/_baseSet.js","../node_modules/lodash/_baseSetToString.js","../node_modules/lodash/_baseSortBy.js","../node_modules/lodash/_baseTimes.js","../node_modules/lodash/_baseToString.js","../node_modules/lodash/_baseTrim.js","../node_modules/lodash/_baseUnary.js","../node_modules/lodash/_baseUniq.js","../node_modules/lodash/_baseValues.js","../node_modules/lodash/_baseZipObject.js","../node_modules/lodash/_cacheHas.js","../node_modules/lodash/_castFunction.js","../node_modules/lodash/_castPath.js","../node_modules/lodash/_cloneArrayBuffer.js","../node_modules/lodash/_cloneBuffer.js","../node_modules/lodash/_cloneDataView.js","../node_modules/lodash/_cloneRegExp.js","../node_modules/lodash/_cloneSymbol.js","../node_modules/lodash/_cloneTypedArray.js","../node_modules/lodash/_compareAscending.js","../node_modules/lodash/_compareMultiple.js","../node_modules/lodash/_copyArray.js","../node_modules/lodash/_copyObject.js","../node_modules/lodash/_copySymbols.js","../node_modules/lodash/_copySymbolsIn.js","../node_modules/lodash/_coreJsData.js","../node_modules/lodash/_createAssigner.js","../node_modules/lodash/_createBaseEach.js","../node_modules/lodash/_createBaseFor.js","../node_modules/lodash/_createFind.js","../node_modules/lodash/_createRange.js","../node_modules/lodash/_createSet.js","../node_modules/lodash/_defineProperty.js","../node_modules/lodash/_equalArrays.js","../node_modules/lodash/_equalByTag.js","../node_modules/lodash/_equalObjects.js","../node_modules/lodash/_flatRest.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_getAllKeys.js","../node_modules/lodash/_getAllKeysIn.js","../node_modules/lodash/_getMapData.js","../node_modules/lodash/_getMatchData.js","../node_modules/lodash/_getNative.js","../node_modules/lodash/_getPrototype.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_getSymbols.js","../node_modules/lodash/_getSymbolsIn.js","../node_modules/lodash/_getTag.js","../node_modules/lodash/_getValue.js","../node_modules/lodash/_hasPath.js","../node_modules/lodash/_hasUnicode.js","../node_modules/lodash/_hashClear.js","../node_modules/lodash/_hashDelete.js","../node_modules/lodash/_hashGet.js","../node_modules/lodash/_hashHas.js","../node_modules/lodash/_hashSet.js","../node_modules/lodash/_initCloneArray.js","../node_modules/lodash/_initCloneByTag.js","../node_modules/lodash/_initCloneObject.js","../node_modules/lodash/_isFlattenable.js","../node_modules/lodash/_isIndex.js","../node_modules/lodash/_isIterateeCall.js","../node_modules/lodash/_isKey.js","../node_modules/lodash/_isKeyable.js","../node_modules/lodash/_isMasked.js","../node_modules/lodash/_isPrototype.js","../node_modules/lodash/_isStrictComparable.js","../node_modules/lodash/_listCacheClear.js","../node_modules/lodash/_listCacheDelete.js","../node_modules/lodash/_listCacheGet.js","../node_modules/lodash/_listCacheHas.js","../node_modules/lodash/_listCacheSet.js","../node_modules/lodash/_mapCacheClear.js","../node_modules/lodash/_mapCacheDelete.js","../node_modules/lodash/_mapCacheGet.js","../node_modules/lodash/_mapCacheHas.js","../node_modules/lodash/_mapCacheSet.js","../node_modules/lodash/_mapToArray.js","../node_modules/lodash/_matchesStrictComparable.js","../node_modules/lodash/_memoizeCapped.js","../node_modules/lodash/_nativeCreate.js","../node_modules/lodash/_nativeKeys.js","../node_modules/lodash/_nativeKeysIn.js","../node_modules/lodash/_nodeUtil.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_overArg.js","../node_modules/lodash/_overRest.js","../node_modules/lodash/_root.js","../node_modules/lodash/_safeGet.js","../node_modules/lodash/_setCacheAdd.js","../node_modules/lodash/_setCacheHas.js","../node_modules/lodash/_setToArray.js","../node_modules/lodash/_setToString.js","../node_modules/lodash/_shortOut.js","../node_modules/lodash/_stackClear.js","../node_modules/lodash/_stackDelete.js","../node_modules/lodash/_stackGet.js","../node_modules/lodash/_stackHas.js","../node_modules/lodash/_stackSet.js","../node_modules/lodash/_strictIndexOf.js","../node_modules/lodash/_stringSize.js","../node_modules/lodash/_stringToPath.js","../node_modules/lodash/_toKey.js","../node_modules/lodash/_toSource.js","../node_modules/lodash/_trimmedEndIndex.js","../node_modules/lodash/_unicodeSize.js","../node_modules/lodash/clone.js","../node_modules/lodash/cloneDeep.js","../node_modules/lodash/constant.js","../node_modules/lodash/defaults.js","../node_modules/lodash/each.js","../node_modules/lodash/eq.js","../node_modules/lodash/filter.js","../node_modules/lodash/find.js","../node_modules/lodash/findIndex.js","../node_modules/lodash/flatten.js","../node_modules/lodash/forEach.js","../node_modules/lodash/forIn.js","../node_modules/lodash/get.js","../node_modules/lodash/has.js","../node_modules/lodash/hasIn.js","../node_modules/lodash/identity.js","../node_modules/lodash/isArguments.js","../node_modules/lodash/isArray.js","../node_modules/lodash/isArrayLike.js","../node_modules/lodash/isArrayLikeObject.js","../node_modules/lodash/isBuffer.js","../node_modules/lodash/isEmpty.js","../node_modules/lodash/isFunction.js","../node_modules/lodash/isLength.js","../node_modules/lodash/isMap.js","../node_modules/lodash/isObject.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/isPlainObject.js","../node_modules/lodash/isSet.js","../node_modules/lodash/isString.js","../node_modules/lodash/isSymbol.js","../node_modules/lodash/isTypedArray.js","../node_modules/lodash/isUndefined.js","../node_modules/lodash/keys.js","../node_modules/lodash/keysIn.js","../node_modules/lodash/last.js","../node_modules/lodash/map.js","../node_modules/lodash/mapValues.js","../node_modules/lodash/max.js","../node_modules/lodash/memoize.js","../node_modules/lodash/merge.js","../node_modules/lodash/min.js","../node_modules/lodash/minBy.js","../node_modules/lodash/noop.js","../node_modules/lodash/now.js","../node_modules/lodash/pick.js","../node_modules/lodash/property.js","../node_modules/lodash/range.js","../node_modules/lodash/reduce.js","../node_modules/lodash/size.js","../node_modules/lodash/sortBy.js","../node_modules/lodash/stubArray.js","../node_modules/lodash/stubFalse.js","../node_modules/lodash/toFinite.js","../node_modules/lodash/toInteger.js","../node_modules/lodash/toNumber.js","../node_modules/lodash/toPlainObject.js","../node_modules/lodash/toString.js","../node_modules/lodash/transform.js","../node_modules/lodash/union.js","../node_modules/lodash/uniqueId.js","../node_modules/lodash/values.js","../node_modules/lodash/zipObject.js","../pdfmake/webpack/universalModuleDefinition","../pdfmake/node_modules/@foliojs-fork/linebreak/src/classes.js","../pdfmake/node_modules/@foliojs-fork/linebreak/src/pairs.js","../pdfmake/node_modules/@foliojs-fork/restructure/index.js","../pdfmake/node_modules/@foliojs-fork/restructure/src/Array.js","../pdfmake/node_modules/@foliojs-fork/restructure/src/Bitfield.js","../pdfmake/node_modules/@foliojs-fork/restructure/src/Boolean.js","../pdfmake/node_modules/@foliojs-fork/restructure/src/Buffer.js","../pdfmake/node_modules/@foliojs-fork/restructure/src/DecodeStream.js","../pdfmake/node_modules/@foliojs-fork/restructure/src/EncodeStream.js","../pdfmake/node_modules/@foliojs-fork/restructure/src/Enum.js","../pdfmake/node_modules/@foliojs-fork/restructure/src/LazyArray.js","../pdfmake/node_modules/@foliojs-fork/restructure/src/Number.js","../pdfmake/node_modules/@foliojs-fork/restructure/src/Optional.js","../pdfmake/node_modules/@foliojs-fork/restructure/src/Pointer.js","../pdfmake/node_modules/@foliojs-fork/restructure/src/Reserved.js","../pdfmake/node_modules/@foliojs-fork/restructure/src/String.js","../pdfmake/node_modules/@foliojs-fork/restructure/src/Struct.js","../pdfmake/node_modules/@foliojs-fork/restructure/src/VersionedStruct.js","../pdfmake/node_modules/@foliojs-fork/restructure/src/utils.js","../pdfmake/node_modules/buffer/index.js","../pdfmake/node_modules/core-js/internals/array-buffer-native.js","../pdfmake/node_modules/core-js/internals/array-buffer-view-core.js","../pdfmake/node_modules/core-js/internals/array-buffer.js","../pdfmake/node_modules/core-js/modules/es.array-buffer.constructor.js","../pdfmake/node_modules/crypto-js/aes.js","../pdfmake/node_modules/crypto-js/blowfish.js","../pdfmake/node_modules/crypto-js/cipher-core.js","../pdfmake/node_modules/crypto-js/core.js","../pdfmake/node_modules/crypto-js/enc-base64.js","../pdfmake/node_modules/crypto-js/enc-base64url.js","../pdfmake/node_modules/crypto-js/enc-utf16.js","../pdfmake/node_modules/crypto-js/evpkdf.js","../pdfmake/node_modules/crypto-js/format-hex.js","../pdfmake/node_modules/crypto-js/hmac.js","../pdfmake/node_modules/crypto-js/index.js","../pdfmake/node_modules/crypto-js/lib-typedarrays.js","../pdfmake/node_modules/crypto-js/md5.js","../pdfmake/node_modules/crypto-js/mode-cfb.js","../pdfmake/node_modules/crypto-js/mode-ctr-gladman.js","../pdfmake/node_modules/crypto-js/mode-ctr.js","../pdfmake/node_modules/crypto-js/mode-ecb.js","../pdfmake/node_modules/crypto-js/mode-ofb.js","../pdfmake/node_modules/crypto-js/pad-ansix923.js","../pdfmake/node_modules/crypto-js/pad-iso10126.js","../pdfmake/node_modules/crypto-js/pad-iso97971.js","../pdfmake/node_modules/crypto-js/pad-nopadding.js","../pdfmake/node_modules/crypto-js/pad-zeropadding.js","../pdfmake/node_modules/crypto-js/pbkdf2.js","../pdfmake/node_modules/crypto-js/rabbit-legacy.js","../pdfmake/node_modules/crypto-js/rabbit.js","../pdfmake/node_modules/crypto-js/rc4.js","../pdfmake/node_modules/crypto-js/ripemd160.js","../pdfmake/node_modules/crypto-js/sha1.js","../pdfmake/node_modules/crypto-js/sha224.js","../pdfmake/node_modules/crypto-js/sha256.js","../pdfmake/node_modules/crypto-js/sha3.js","../pdfmake/node_modules/crypto-js/sha384.js","../pdfmake/node_modules/crypto-js/sha512.js","../pdfmake/node_modules/crypto-js/tripledes.js","../pdfmake/node_modules/crypto-js/x64-core.js","../pdfmake/node_modules/dfa/src/StateMachine.js","../pdfmake/node_modules/png-js/png-node.js","../pdfmake/node_modules/safer-buffer/safer.js","../pdfmake/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/buffer_list.js","../pdfmake/node_modules/string_decoder/node_modules/safe-buffer/index.js","../pdfmake/node_modules/unicode-trie/index.js","../pdfmake/node_modules/unicode-trie/swap.js","../pdfmake/src/3rd-party/svg-to-pdfkit.js","../pdfmake/src/3rd-party/svg-to-pdfkit/source.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/abstract_reference.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/tree.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/object.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/reference.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/page.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/name_tree.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/saslprep/lib/util.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/saslprep/lib/code-points.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/saslprep/index.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/security.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/path.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/gradient.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/pattern.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/mixins/color.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/mixins/vector.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/font/afm.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/font.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/font/standard.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/font/embedded.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/font_factory.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/mixins/fonts.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/line_wrapper.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/mixins/text.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/image/jpeg.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/image/png.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/image.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/mixins/images.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/mixins/annotations.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/outline.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/mixins/outline.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/structure_content.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/structure_element.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/number_tree.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/mixins/markings.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/mixins/acroform.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/mixins/attachments.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/mixins/pdfa.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/mixins/subsets.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/metadata.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/mixins/metadata.js","../pdfmake/node_modules/@foliojs-fork/pdfkit/lib/document.js","../pdfmake/src/browser-extensions/pdfMake-exposed.js","../pdfmake/node_modules/assert/build/assert.js","../pdfmake/node_modules/assert/build/internal/assert/assertion_error.js","../pdfmake/node_modules/assert/build/internal/errors.js","../pdfmake/node_modules/assert/build/internal/util/comparisons.js","../pdfmake/node_modules/base64-js/index.js","../pdfmake/node_modules/brotli/dec/bit_reader.js","../pdfmake/node_modules/brotli/dec/context.js","../pdfmake/node_modules/brotli/dec/decode.js","../pdfmake/node_modules/brotli/dec/dictionary-browser.js","../pdfmake/node_modules/brotli/dec/dictionary.bin.js","../pdfmake/node_modules/brotli/dec/dictionary.js","../pdfmake/node_modules/brotli/dec/huffman.js","../pdfmake/node_modules/brotli/dec/prefix.js","../pdfmake/node_modules/brotli/dec/streams.js","../pdfmake/node_modules/brotli/dec/transform.js","../pdfmake/node_modules/brotli/decompress.js","../pdfmake/node_modules/browserify-zlib/lib/binding.js","../pdfmake/node_modules/browserify-zlib/lib/index.js","../pdfmake/node_modules/call-bind/callBound.js","../pdfmake/node_modules/call-bind/index.js","../pdfmake/node_modules/clone/clone.js","../pdfmake/node_modules/core-js/es/object/values.js","../pdfmake/node_modules/core-js/es/promise/index.js","../pdfmake/node_modules/core-js/features/promise/index.js","../pdfmake/node_modules/core-js/internals/a-callable.js","../pdfmake/node_modules/core-js/internals/a-constructor.js","../pdfmake/node_modules/core-js/internals/a-possible-prototype.js","../pdfmake/node_modules/core-js/internals/add-to-unscopables.js","../pdfmake/node_modules/core-js/internals/advance-string-index.js","../pdfmake/node_modules/core-js/internals/an-instance.js","../pdfmake/node_modules/core-js/internals/an-object.js","../pdfmake/node_modules/core-js/internals/array-copy-within.js","../pdfmake/node_modules/core-js/internals/array-fill.js","../pdfmake/node_modules/core-js/internals/array-for-each.js","../pdfmake/node_modules/core-js/internals/array-from-constructor-and-list.js","../pdfmake/node_modules/core-js/internals/array-from.js","../pdfmake/node_modules/core-js/internals/array-includes.js","../pdfmake/node_modules/core-js/internals/array-iteration.js","../pdfmake/node_modules/core-js/internals/array-last-index-of.js","../pdfmake/node_modules/core-js/internals/array-method-has-species-support.js","../pdfmake/node_modules/core-js/internals/array-method-is-strict.js","../pdfmake/node_modules/core-js/internals/array-reduce.js","../pdfmake/node_modules/core-js/internals/array-slice.js","../pdfmake/node_modules/core-js/internals/array-sort.js","../pdfmake/node_modules/core-js/internals/array-species-constructor.js","../pdfmake/node_modules/core-js/internals/array-species-create.js","../pdfmake/node_modules/core-js/internals/call-with-safe-iteration-closing.js","../pdfmake/node_modules/core-js/internals/check-correctness-of-iteration.js","../pdfmake/node_modules/core-js/internals/classof-raw.js","../pdfmake/node_modules/core-js/internals/classof.js","../pdfmake/node_modules/core-js/internals/clear-error-stack.js","../pdfmake/node_modules/core-js/internals/collection-strong.js","../pdfmake/node_modules/core-js/internals/collection.js","../pdfmake/node_modules/core-js/internals/copy-constructor-properties.js","../pdfmake/node_modules/core-js/internals/correct-is-regexp-logic.js","../pdfmake/node_modules/core-js/internals/correct-prototype-getter.js","../pdfmake/node_modules/core-js/internals/create-html.js","../pdfmake/node_modules/core-js/internals/create-iterator-constructor.js","../pdfmake/node_modules/core-js/internals/create-non-enumerable-property.js","../pdfmake/node_modules/core-js/internals/create-property-descriptor.js","../pdfmake/node_modules/core-js/internals/create-property.js","../pdfmake/node_modules/core-js/internals/date-to-primitive.js","../pdfmake/node_modules/core-js/internals/define-iterator.js","../pdfmake/node_modules/core-js/internals/define-well-known-symbol.js","../pdfmake/node_modules/core-js/internals/descriptors.js","../pdfmake/node_modules/core-js/internals/document-create-element.js","../pdfmake/node_modules/core-js/internals/dom-iterables.js","../pdfmake/node_modules/core-js/internals/dom-token-list-prototype.js","../pdfmake/node_modules/core-js/internals/engine-ff-version.js","../pdfmake/node_modules/core-js/internals/engine-is-browser.js","../pdfmake/node_modules/core-js/internals/engine-is-ie-or-edge.js","../pdfmake/node_modules/core-js/internals/engine-is-ios-pebble.js","../pdfmake/node_modules/core-js/internals/engine-is-ios.js","../pdfmake/node_modules/core-js/internals/engine-is-node.js","../pdfmake/node_modules/core-js/internals/engine-is-webos-webkit.js","../pdfmake/node_modules/core-js/internals/engine-user-agent.js","../pdfmake/node_modules/core-js/internals/engine-v8-version.js","../pdfmake/node_modules/core-js/internals/engine-webkit-version.js","../pdfmake/node_modules/core-js/internals/enum-bug-keys.js","../pdfmake/node_modules/core-js/internals/error-stack-installable.js","../pdfmake/node_modules/core-js/internals/export.js","../pdfmake/node_modules/core-js/internals/fails.js","../pdfmake/node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js","../pdfmake/node_modules/core-js/internals/freezing.js","../pdfmake/node_modules/core-js/internals/function-apply.js","../pdfmake/node_modules/core-js/internals/function-bind-context.js","../pdfmake/node_modules/core-js/internals/function-bind.js","../pdfmake/node_modules/core-js/internals/function-call.js","../pdfmake/node_modules/core-js/internals/function-name.js","../pdfmake/node_modules/core-js/internals/function-uncurry-this.js","../pdfmake/node_modules/core-js/internals/get-built-in.js","../pdfmake/node_modules/core-js/internals/get-iterator-method.js","../pdfmake/node_modules/core-js/internals/get-iterator.js","../pdfmake/node_modules/core-js/internals/get-method.js","../pdfmake/node_modules/core-js/internals/get-substitution.js","../pdfmake/node_modules/core-js/internals/global.js","../pdfmake/node_modules/core-js/internals/has-own-property.js","../pdfmake/node_modules/core-js/internals/hidden-keys.js","../pdfmake/node_modules/core-js/internals/host-report-errors.js","../pdfmake/node_modules/core-js/internals/html.js","../pdfmake/node_modules/core-js/internals/ie8-dom-define.js","../pdfmake/node_modules/core-js/internals/ieee754.js","../pdfmake/node_modules/core-js/internals/indexed-object.js","../pdfmake/node_modules/core-js/internals/inherit-if-required.js","../pdfmake/node_modules/core-js/internals/inspect-source.js","../pdfmake/node_modules/core-js/internals/install-error-cause.js","../pdfmake/node_modules/core-js/internals/internal-metadata.js","../pdfmake/node_modules/core-js/internals/internal-state.js","../pdfmake/node_modules/core-js/internals/is-array-iterator-method.js","../pdfmake/node_modules/core-js/internals/is-array.js","../pdfmake/node_modules/core-js/internals/is-callable.js","../pdfmake/node_modules/core-js/internals/is-constructor.js","../pdfmake/node_modules/core-js/internals/is-forced.js","../pdfmake/node_modules/core-js/internals/is-integral-number.js","../pdfmake/node_modules/core-js/internals/is-object.js","../pdfmake/node_modules/core-js/internals/is-pure.js","../pdfmake/node_modules/core-js/internals/is-regexp.js","../pdfmake/node_modules/core-js/internals/is-symbol.js","../pdfmake/node_modules/core-js/internals/iterate.js","../pdfmake/node_modules/core-js/internals/iterator-close.js","../pdfmake/node_modules/core-js/internals/iterators-core.js","../pdfmake/node_modules/core-js/internals/iterators.js","../pdfmake/node_modules/core-js/internals/length-of-array-like.js","../pdfmake/node_modules/core-js/internals/microtask.js","../pdfmake/node_modules/core-js/internals/native-promise-constructor.js","../pdfmake/node_modules/core-js/internals/native-symbol.js","../pdfmake/node_modules/core-js/internals/native-weak-map.js","../pdfmake/node_modules/core-js/internals/new-promise-capability.js","../pdfmake/node_modules/core-js/internals/normalize-string-argument.js","../pdfmake/node_modules/core-js/internals/not-a-regexp.js","../pdfmake/node_modules/core-js/internals/number-is-finite.js","../pdfmake/node_modules/core-js/internals/object-assign.js","../pdfmake/node_modules/core-js/internals/object-create.js","../pdfmake/node_modules/core-js/internals/object-define-properties.js","../pdfmake/node_modules/core-js/internals/object-define-property.js","../pdfmake/node_modules/core-js/internals/object-get-own-property-descriptor.js","../pdfmake/node_modules/core-js/internals/object-get-own-property-names-external.js","../pdfmake/node_modules/core-js/internals/object-get-own-property-names.js","../pdfmake/node_modules/core-js/internals/object-get-own-property-symbols.js","../pdfmake/node_modules/core-js/internals/object-get-prototype-of.js","../pdfmake/node_modules/core-js/internals/object-is-prototype-of.js","../pdfmake/node_modules/core-js/internals/object-keys-internal.js","../pdfmake/node_modules/core-js/internals/object-keys.js","../pdfmake/node_modules/core-js/internals/object-property-is-enumerable.js","../pdfmake/node_modules/core-js/internals/object-set-prototype-of.js","../pdfmake/node_modules/core-js/internals/object-to-array.js","../pdfmake/node_modules/core-js/internals/object-to-string.js","../pdfmake/node_modules/core-js/internals/ordinary-to-primitive.js","../pdfmake/node_modules/core-js/internals/own-keys.js","../pdfmake/node_modules/core-js/internals/path.js","../pdfmake/node_modules/core-js/internals/perform.js","../pdfmake/node_modules/core-js/internals/promise-resolve.js","../pdfmake/node_modules/core-js/internals/redefine-all.js","../pdfmake/node_modules/core-js/internals/redefine.js","../pdfmake/node_modules/core-js/internals/regexp-exec-abstract.js","../pdfmake/node_modules/core-js/internals/regexp-exec.js","../pdfmake/node_modules/core-js/internals/regexp-flags.js","../pdfmake/node_modules/core-js/internals/regexp-sticky-helpers.js","../pdfmake/node_modules/core-js/internals/regexp-unsupported-dot-all.js","../pdfmake/node_modules/core-js/internals/regexp-unsupported-ncg.js","../pdfmake/node_modules/core-js/internals/require-object-coercible.js","../pdfmake/node_modules/core-js/internals/set-global.js","../pdfmake/node_modules/core-js/internals/set-species.js","../pdfmake/node_modules/core-js/internals/set-to-string-tag.js","../pdfmake/node_modules/core-js/internals/shared-key.js","../pdfmake/node_modules/core-js/internals/shared-store.js","../pdfmake/node_modules/core-js/internals/shared.js","../pdfmake/node_modules/core-js/internals/species-constructor.js","../pdfmake/node_modules/core-js/internals/string-html-forced.js","../pdfmake/node_modules/core-js/internals/string-multibyte.js","../pdfmake/node_modules/core-js/internals/string-repeat.js","../pdfmake/node_modules/core-js/internals/string-trim-forced.js","../pdfmake/node_modules/core-js/internals/string-trim.js","../pdfmake/node_modules/core-js/internals/task.js","../pdfmake/node_modules/core-js/internals/this-number-value.js","../pdfmake/node_modules/core-js/internals/to-absolute-index.js","../pdfmake/node_modules/core-js/internals/to-index.js","../pdfmake/node_modules/core-js/internals/to-indexed-object.js","../pdfmake/node_modules/core-js/internals/to-integer-or-infinity.js","../pdfmake/node_modules/core-js/internals/to-length.js","../pdfmake/node_modules/core-js/internals/to-object.js","../pdfmake/node_modules/core-js/internals/to-offset.js","../pdfmake/node_modules/core-js/internals/to-positive-integer.js","../pdfmake/node_modules/core-js/internals/to-primitive.js","../pdfmake/node_modules/core-js/internals/to-property-key.js","../pdfmake/node_modules/core-js/internals/to-string-tag-support.js","../pdfmake/node_modules/core-js/internals/to-string.js","../pdfmake/node_modules/core-js/internals/try-to-string.js","../pdfmake/node_modules/core-js/internals/typed-array-constructor.js","../pdfmake/node_modules/core-js/internals/typed-array-constructors-require-wrappers.js","../pdfmake/node_modules/core-js/internals/typed-array-from-species-and-list.js","../pdfmake/node_modules/core-js/internals/typed-array-from.js","../pdfmake/node_modules/core-js/internals/typed-array-species-constructor.js","../pdfmake/node_modules/core-js/internals/uid.js","../pdfmake/node_modules/core-js/internals/use-symbol-as-uid.js","../pdfmake/node_modules/core-js/internals/well-known-symbol-wrapped.js","../pdfmake/node_modules/core-js/internals/well-known-symbol.js","../pdfmake/node_modules/core-js/internals/whitespaces.js","../pdfmake/node_modules/core-js/modules/es.aggregate-error.js","../pdfmake/node_modules/core-js/modules/es.array.concat.js","../pdfmake/node_modules/core-js/modules/es.array.copy-within.js","../pdfmake/node_modules/core-js/modules/es.array.fill.js","../pdfmake/node_modules/core-js/modules/es.array.filter.js","../pdfmake/node_modules/core-js/modules/es.array.from.js","../pdfmake/node_modules/core-js/modules/es.array.includes.js","../pdfmake/node_modules/core-js/modules/es.array.iterator.js","../pdfmake/node_modules/core-js/modules/es.array.join.js","../pdfmake/node_modules/core-js/modules/es.array.map.js","../pdfmake/node_modules/core-js/modules/es.array.slice.js","../pdfmake/node_modules/core-js/modules/es.array.sort.js","../pdfmake/node_modules/core-js/modules/es.array.splice.js","../pdfmake/node_modules/core-js/modules/es.date.to-primitive.js","../pdfmake/node_modules/core-js/modules/es.function.name.js","../pdfmake/node_modules/core-js/modules/es.global-this.js","../pdfmake/node_modules/core-js/modules/es.json.to-string-tag.js","../pdfmake/node_modules/core-js/modules/es.map.js","../pdfmake/node_modules/core-js/modules/es.math.to-string-tag.js","../pdfmake/node_modules/core-js/modules/es.number.constructor.js","../pdfmake/node_modules/core-js/modules/es.number.epsilon.js","../pdfmake/node_modules/core-js/modules/es.number.is-finite.js","../pdfmake/node_modules/core-js/modules/es.number.is-integer.js","../pdfmake/node_modules/core-js/modules/es.number.to-fixed.js","../pdfmake/node_modules/core-js/modules/es.object.assign.js","../pdfmake/node_modules/core-js/modules/es.object.freeze.js","../pdfmake/node_modules/core-js/modules/es.object.get-own-property-descriptor.js","../pdfmake/node_modules/core-js/modules/es.object.get-own-property-descriptors.js","../pdfmake/node_modules/core-js/modules/es.object.get-prototype-of.js","../pdfmake/node_modules/core-js/modules/es.object.keys.js","../pdfmake/node_modules/core-js/modules/es.object.to-string.js","../pdfmake/node_modules/core-js/modules/es.object.values.js","../pdfmake/node_modules/core-js/modules/es.promise.all-settled.js","../pdfmake/node_modules/core-js/modules/es.promise.any.js","../pdfmake/node_modules/core-js/modules/es.promise.finally.js","../pdfmake/node_modules/core-js/modules/es.promise.js","../pdfmake/node_modules/core-js/modules/es.reflect.construct.js","../pdfmake/node_modules/core-js/modules/es.regexp.exec.js","../pdfmake/node_modules/core-js/modules/es.regexp.flags.js","../pdfmake/node_modules/core-js/modules/es.regexp.to-string.js","../pdfmake/node_modules/core-js/modules/es.set.js","../pdfmake/node_modules/core-js/modules/es.string.code-point-at.js","../pdfmake/node_modules/core-js/modules/es.string.from-code-point.js","../pdfmake/node_modules/core-js/modules/es.string.includes.js","../pdfmake/node_modules/core-js/modules/es.string.italics.js","../pdfmake/node_modules/core-js/modules/es.string.iterator.js","../pdfmake/node_modules/core-js/modules/es.string.link.js","../pdfmake/node_modules/core-js/modules/es.string.match-all.js","../pdfmake/node_modules/core-js/modules/es.string.match.js","../pdfmake/node_modules/core-js/modules/es.string.repeat.js","../pdfmake/node_modules/core-js/modules/es.string.replace.js","../pdfmake/node_modules/core-js/modules/es.string.split.js","../pdfmake/node_modules/core-js/modules/es.string.strike.js","../pdfmake/node_modules/core-js/modules/es.string.trim.js","../pdfmake/node_modules/core-js/modules/es.symbol.async-iterator.js","../pdfmake/node_modules/core-js/modules/es.symbol.description.js","../pdfmake/node_modules/core-js/modules/es.symbol.iterator.js","../pdfmake/node_modules/core-js/modules/es.symbol.js","../pdfmake/node_modules/core-js/modules/es.symbol.to-primitive.js","../pdfmake/node_modules/core-js/modules/es.symbol.to-string-tag.js","../pdfmake/node_modules/core-js/modules/es.typed-array.copy-within.js","../pdfmake/node_modules/core-js/modules/es.typed-array.every.js","../pdfmake/node_modules/core-js/modules/es.typed-array.fill.js","../pdfmake/node_modules/core-js/modules/es.typed-array.filter.js","../pdfmake/node_modules/core-js/modules/es.typed-array.find-index.js","../pdfmake/node_modules/core-js/modules/es.typed-array.find.js","../pdfmake/node_modules/core-js/modules/es.typed-array.float32-array.js","../pdfmake/node_modules/core-js/modules/es.typed-array.float64-array.js","../pdfmake/node_modules/core-js/modules/es.typed-array.for-each.js","../pdfmake/node_modules/core-js/modules/es.typed-array.from.js","../pdfmake/node_modules/core-js/modules/es.typed-array.includes.js","../pdfmake/node_modules/core-js/modules/es.typed-array.index-of.js","../pdfmake/node_modules/core-js/modules/es.typed-array.int16-array.js","../pdfmake/node_modules/core-js/modules/es.typed-array.int32-array.js","../pdfmake/node_modules/core-js/modules/es.typed-array.int8-array.js","../pdfmake/node_modules/core-js/modules/es.typed-array.iterator.js","../pdfmake/node_modules/core-js/modules/es.typed-array.join.js","../pdfmake/node_modules/core-js/modules/es.typed-array.last-index-of.js","../pdfmake/node_modules/core-js/modules/es.typed-array.map.js","../pdfmake/node_modules/core-js/modules/es.typed-array.reduce-right.js","../pdfmake/node_modules/core-js/modules/es.typed-array.reduce.js","../pdfmake/node_modules/core-js/modules/es.typed-array.reverse.js","../pdfmake/node_modules/core-js/modules/es.typed-array.set.js","../pdfmake/node_modules/core-js/modules/es.typed-array.slice.js","../pdfmake/node_modules/core-js/modules/es.typed-array.some.js","../pdfmake/node_modules/core-js/modules/es.typed-array.sort.js","../pdfmake/node_modules/core-js/modules/es.typed-array.subarray.js","../pdfmake/node_modules/core-js/modules/es.typed-array.to-locale-string.js","../pdfmake/node_modules/core-js/modules/es.typed-array.to-string.js","../pdfmake/node_modules/core-js/modules/es.typed-array.uint16-array.js","../pdfmake/node_modules/core-js/modules/es.typed-array.uint32-array.js","../pdfmake/node_modules/core-js/modules/es.typed-array.uint8-array.js","../pdfmake/node_modules/core-js/modules/es.typed-array.uint8-clamped-array.js","../pdfmake/node_modules/core-js/modules/esnext.aggregate-error.js","../pdfmake/node_modules/core-js/modules/esnext.global-this.js","../pdfmake/node_modules/core-js/modules/esnext.promise.all-settled.js","../pdfmake/node_modules/core-js/modules/esnext.promise.any.js","../pdfmake/node_modules/core-js/modules/esnext.promise.try.js","../pdfmake/node_modules/core-js/modules/esnext.string.match-all.js","../pdfmake/node_modules/core-js/modules/web.dom-collections.for-each.js","../pdfmake/node_modules/core-js/modules/web.dom-collections.iterator.js","../pdfmake/node_modules/core-js/modules/web.url.to-json.js","../pdfmake/node_modules/core-js/stable/promise/index.js","../pdfmake/node_modules/deep-equal/index.js","../pdfmake/node_modules/define-data-property/index.js","../pdfmake/node_modules/define-properties/index.js","../pdfmake/node_modules/es-define-property/index.js","../pdfmake/node_modules/es-errors/eval.js","../pdfmake/node_modules/es-errors/index.js","../pdfmake/node_modules/es-errors/range.js","../pdfmake/node_modules/es-errors/ref.js","../pdfmake/node_modules/es-errors/syntax.js","../pdfmake/node_modules/es-errors/type.js","../pdfmake/node_modules/es-errors/uri.js","../pdfmake/node_modules/events/events.js","../pdfmake/node_modules/expose-loader/dist/runtime/getGlobalThis.js","../pdfmake/node_modules/for-each/index.js","../pdfmake/node_modules/function-bind/implementation.js","../pdfmake/node_modules/function-bind/index.js","../pdfmake/node_modules/functions-have-names/index.js","../pdfmake/node_modules/get-intrinsic/index.js","../pdfmake/node_modules/gopd/index.js","../pdfmake/node_modules/has-property-descriptors/index.js","../pdfmake/node_modules/has-proto/index.js","../pdfmake/node_modules/has-symbols/index.js","../pdfmake/node_modules/has-symbols/shams.js","../pdfmake/node_modules/has-tostringtag/shams.js","../pdfmake/node_modules/hasown/index.js","../pdfmake/node_modules/iconv-lite/encodings/dbcs-codec.js","../pdfmake/node_modules/iconv-lite/encodings/dbcs-data.js","../pdfmake/node_modules/iconv-lite/encodings/index.js","../pdfmake/node_modules/iconv-lite/encodings/internal.js","../pdfmake/node_modules/iconv-lite/encodings/sbcs-codec.js","../pdfmake/node_modules/iconv-lite/encodings/sbcs-data-generated.js","../pdfmake/node_modules/iconv-lite/encodings/sbcs-data.js","../pdfmake/node_modules/iconv-lite/encodings/utf16.js","../pdfmake/node_modules/iconv-lite/encodings/utf32.js","../pdfmake/node_modules/iconv-lite/encodings/utf7.js","../pdfmake/node_modules/iconv-lite/lib/bom-handling.js","../pdfmake/node_modules/iconv-lite/lib/index.js","../pdfmake/node_modules/iconv-lite/lib/streams.js","../pdfmake/node_modules/ieee754/index.js","../pdfmake/node_modules/inherits/inherits_browser.js","../pdfmake/node_modules/is-arguments/index.js","../pdfmake/node_modules/is-callable/index.js","../pdfmake/node_modules/is-date-object/index.js","../pdfmake/node_modules/is-generator-function/index.js","../pdfmake/node_modules/is-nan/implementation.js","../pdfmake/node_modules/is-nan/index.js","../pdfmake/node_modules/is-nan/polyfill.js","../pdfmake/node_modules/is-nan/shim.js","../pdfmake/node_modules/is-regex/index.js","../pdfmake/node_modules/is-typed-array/index.js","../pdfmake/node_modules/object-is/implementation.js","../pdfmake/node_modules/object-is/index.js","../pdfmake/node_modules/object-is/polyfill.js","../pdfmake/node_modules/object-is/shim.js","../pdfmake/node_modules/object-keys/implementation.js","../pdfmake/node_modules/object-keys/index.js","../pdfmake/node_modules/object-keys/isArguments.js","../pdfmake/node_modules/object.assign/implementation.js","../pdfmake/node_modules/object.assign/polyfill.js","../pdfmake/node_modules/pako/lib/utils/common.js","../pdfmake/node_modules/pako/lib/zlib/adler32.js","../pdfmake/node_modules/pako/lib/zlib/constants.js","../pdfmake/node_modules/pako/lib/zlib/crc32.js","../pdfmake/node_modules/pako/lib/zlib/deflate.js","../pdfmake/node_modules/pako/lib/zlib/inffast.js","../pdfmake/node_modules/pako/lib/zlib/inflate.js","../pdfmake/node_modules/pako/lib/zlib/inftrees.js","../pdfmake/node_modules/pako/lib/zlib/messages.js","../pdfmake/node_modules/pako/lib/zlib/trees.js","../pdfmake/node_modules/pako/lib/zlib/zstream.js","../pdfmake/node_modules/possible-typed-array-names/index.js","../pdfmake/node_modules/process/browser.js","../pdfmake/node_modules/regexp.prototype.flags/implementation.js","../pdfmake/node_modules/regexp.prototype.flags/index.js","../pdfmake/node_modules/regexp.prototype.flags/polyfill.js","../pdfmake/node_modules/regexp.prototype.flags/shim.js","../pdfmake/node_modules/sax/lib/sax.js","../pdfmake/node_modules/set-function-length/index.js","../pdfmake/node_modules/set-function-name/index.js","../pdfmake/node_modules/stream-browserify/index.js","../pdfmake/node_modules/stream-browserify/node_modules/readable-stream/errors-browser.js","../pdfmake/node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_duplex.js","../pdfmake/node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_passthrough.js","../pdfmake/node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_readable.js","../pdfmake/node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_transform.js","../pdfmake/node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_writable.js","../pdfmake/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/async_iterator.js","../pdfmake/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/destroy.js","../pdfmake/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","../pdfmake/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/from-browser.js","../pdfmake/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/pipeline.js","../pdfmake/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/state.js","../pdfmake/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/stream-browser.js","../pdfmake/node_modules/string_decoder/lib/string_decoder.js","../pdfmake/node_modules/tiny-inflate/index.js","../pdfmake/node_modules/util-deprecate/browser.js","../pdfmake/node_modules/util/support/isBufferBrowser.js","../pdfmake/node_modules/util/support/types.js","../pdfmake/node_modules/util/util.js","../pdfmake/node_modules/which-typed-array/index.js","../pdfmake/node_modules/xmldoc/index.js","../pdfmake/node_modules/xmldoc/lib/xmldoc.js","../pdfmake/src/browser-extensions/URLBrowserResolver.js","../pdfmake/src/browser-extensions/pdfMake.js","../pdfmake/src/browser-extensions/virtual-fs.js","../pdfmake/src/columnCalculator.js","../pdfmake/src/docMeasure.js","../pdfmake/src/docPreprocessor.js","../pdfmake/src/documentContext.js","../pdfmake/src/elementWriter.js","../pdfmake/src/fontProvider.js","../pdfmake/src/helpers.js","../pdfmake/src/imageMeasure.js","../pdfmake/src/layoutBuilder.js","../pdfmake/src/line.js","../pdfmake/src/pageElementWriter.js","../pdfmake/src/pdfKitEngine.js","../pdfmake/src/printer.js","../pdfmake/src/qrEnc.js","../pdfmake/src/standardPageSizes.js","../pdfmake/src/styleContextStack.js","../pdfmake/src/svgMeasure.js","../pdfmake/src/tableProcessor.js","../pdfmake/src/textDecorator.js","../pdfmake/src/textTools.js","../pdfmake/src/traversalTracker.js","../pdfmake/node_modules/file-saver/src/FileSaver.js","../pdfmake/node_modules/@foliojs-fork/fontkit/index.js","../pdfmake/node_modules/@foliojs-fork/linebreak/src/linebreaker.js","../pdfmake/node_modules/available-typed-arrays/index.js","../pdfmake/node_modules/unicode-properties/dist/data.json","../pdfmake/node_modules/unicode-properties/dist/index.js","../pdfmake/webpack/bootstrap","../pdfmake/webpack/runtime/global","../pdfmake/webpack/runtime/node module decorator","../pdfmake/webpack/startup","../node_modules/pdfmake/build/vfs_fonts.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/react-dom/client.js","../node_modules/react-dom/index.js","../node_modules/react-draggable/build/cjs/Draggable.js","../node_modules/react-draggable/build/cjs/DraggableCore.js","../node_modules/react-draggable/build/cjs/cjs.js","../node_modules/react-draggable/build/cjs/utils/domFns.js","../node_modules/react-draggable/build/cjs/utils/getPrefix.js","../node_modules/react-draggable/build/cjs/utils/log.js","../node_modules/react-draggable/build/cjs/utils/positionFns.js","../node_modules/react-draggable/build/cjs/utils/shims.js","../node_modules/react-draggable/node_modules/clsx/dist/clsx.m.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react/index.js","../node_modules/react/jsx-runtime.js","../node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/scheduler/index.js","../node_modules/shallowequal/index.js","../node_modules/style-to-object/src/index.ts","../webpack/bootstrap","../webpack/runtime/compat get default export","../webpack/runtime/create fake namespace object","../webpack/runtime/define property getters","../webpack/runtime/global","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/make namespace object","../webpack/runtime/node module decorator","../webpack/runtime/publicPath","../webpack/runtime/nonce","../node_modules/@remix-run/router/history.ts","../node_modules/@remix-run/router/utils.ts","../node_modules/@remix-run/router/router.ts","../node_modules/react-router/lib/context.ts","../node_modules/react-router/lib/hooks.tsx","../node_modules/react-router/lib/components.tsx","../node_modules/react-router-dom/dom.ts","../node_modules/react-router-dom/index.tsx","../node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js","../node_modules/styled-components/node_modules/tslib/tslib.es6.mjs","../node_modules/styled-components/node_modules/stylis/src/Enum.js","../node_modules/styled-components/node_modules/stylis/src/Utility.js","../node_modules/styled-components/node_modules/stylis/src/Tokenizer.js","../node_modules/styled-components/node_modules/stylis/src/Serializer.js","../node_modules/styled-components/node_modules/stylis/src/Prefixer.js","../node_modules/styled-components/node_modules/stylis/src/Middleware.js","../node_modules/styled-components/node_modules/stylis/src/Parser.js","../node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","../node_modules/styled-components/src/constants.ts","../node_modules/styled-components/src/utils/empties.ts","../node_modules/styled-components/src/utils/checkDynamicCreation.ts","../node_modules/styled-components/src/utils/determineTheme.ts","../node_modules/styled-components/src/utils/domElements.ts","../node_modules/styled-components/src/utils/escape.ts","../node_modules/styled-components/src/utils/generateAlphabeticName.ts","../node_modules/styled-components/src/utils/hash.ts","../node_modules/styled-components/src/utils/generateComponentId.ts","../node_modules/styled-components/src/utils/getComponentName.ts","../node_modules/styled-components/src/utils/isTag.ts","../node_modules/styled-components/src/utils/hoist.ts","../node_modules/styled-components/src/utils/isFunction.ts","../node_modules/styled-components/src/utils/isStyledComponent.ts","../node_modules/styled-components/src/utils/joinStrings.ts","../node_modules/styled-components/src/utils/isPlainObject.ts","../node_modules/styled-components/src/utils/mixinDeep.ts","../node_modules/styled-components/src/utils/setToString.ts","../node_modules/styled-components/src/utils/error.ts","../node_modules/styled-components/src/sheet/GroupedTag.ts","../node_modules/styled-components/src/sheet/GroupIDAllocator.ts","../node_modules/styled-components/src/sheet/Rehydration.ts","../node_modules/styled-components/src/utils/nonce.ts","../node_modules/styled-components/src/sheet/dom.ts","../node_modules/styled-components/src/sheet/Tag.ts","../node_modules/styled-components/src/sheet/Sheet.ts","../node_modules/styled-components/src/utils/stylis.ts","../node_modules/styled-components/src/models/StyleSheetManager.tsx","../node_modules/styled-components/src/models/Keyframes.ts","../node_modules/styled-components/src/utils/hyphenateStyleName.ts","../node_modules/styled-components/src/utils/flatten.ts","../node_modules/styled-components/src/utils/addUnitIfNeeded.ts","../node_modules/styled-components/src/utils/isStatelessFunction.ts","../node_modules/styled-components/src/utils/isStaticRules.ts","../node_modules/styled-components/src/models/ComponentStyle.ts","../node_modules/styled-components/src/models/ThemeProvider.tsx","../node_modules/styled-components/src/models/StyledComponent.ts","../node_modules/styled-components/src/utils/generateDisplayName.ts","../node_modules/styled-components/src/utils/interleave.ts","../node_modules/styled-components/src/constructors/css.ts","../node_modules/styled-components/src/constructors/constructWithOptions.ts","../node_modules/styled-components/src/constructors/styled.tsx","../node_modules/styled-components/src/models/GlobalStyle.ts","../node_modules/styled-components/src/constructors/keyframes.ts","../node_modules/styled-components/src/models/ServerStyleSheet.tsx","../node_modules/styled-components/src/base.ts","components/Navbar/Navbar.styles.ts","components/Navbar/Navbar.tsx","pages/HomePage/HomePage.styles.ts","pages/HomePage/HomePage.tsx","../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/utils.js","../node_modules/axios/lib/core/AxiosError.js","../node_modules/axios/lib/helpers/toFormData.js","../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/defaults/transitional.js","../node_modules/axios/lib/platform/browser/index.js","../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../node_modules/axios/lib/platform/browser/classes/FormData.js","../node_modules/axios/lib/platform/browser/classes/Blob.js","../node_modules/axios/lib/platform/common/utils.js","../node_modules/axios/lib/platform/index.js","../node_modules/axios/lib/helpers/formDataToJSON.js","../node_modules/axios/lib/defaults/index.js","../node_modules/axios/lib/helpers/toURLEncodedForm.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/core/AxiosHeaders.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/cancel/CanceledError.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/helpers/speedometer.js","../node_modules/axios/lib/helpers/throttle.js","../node_modules/axios/lib/helpers/progressEventReducer.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/helpers/resolveConfig.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/helpers/parseProtocol.js","../node_modules/axios/lib/helpers/composeSignals.js","../node_modules/axios/lib/helpers/trackStream.js","../node_modules/axios/lib/adapters/fetch.js","../node_modules/axios/lib/adapters/adapters.js","../node_modules/axios/lib/helpers/null.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/env/data.js","../node_modules/axios/lib/helpers/validator.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/helpers/HttpStatusCode.js","../node_modules/axios/lib/axios.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/isAxiosError.js","services/api.ts","../node_modules/zustand/esm/index.js","../node_modules/d3-dispatch/src/dispatch.js","../node_modules/d3-selection/src/selector.js","../node_modules/d3-selection/src/selectorAll.js","../node_modules/d3-selection/src/selection/selectAll.js","../node_modules/d3-selection/src/array.js","../node_modules/d3-selection/src/matcher.js","../node_modules/d3-selection/src/selection/selectChild.js","../node_modules/d3-selection/src/selection/selectChildren.js","../node_modules/d3-selection/src/selection/sparse.js","../node_modules/d3-selection/src/selection/enter.js","../node_modules/d3-selection/src/selection/data.js","../node_modules/d3-selection/src/selection/sort.js","../node_modules/d3-selection/src/namespaces.js","../node_modules/d3-selection/src/namespace.js","../node_modules/d3-selection/src/selection/attr.js","../node_modules/d3-selection/src/window.js","../node_modules/d3-selection/src/selection/style.js","../node_modules/d3-selection/src/selection/property.js","../node_modules/d3-selection/src/selection/classed.js","../node_modules/d3-selection/src/selection/text.js","../node_modules/d3-selection/src/selection/html.js","../node_modules/d3-selection/src/selection/raise.js","../node_modules/d3-selection/src/selection/lower.js","../node_modules/d3-selection/src/creator.js","../node_modules/d3-selection/src/selection/insert.js","../node_modules/d3-selection/src/selection/remove.js","../node_modules/d3-selection/src/selection/clone.js","../node_modules/d3-selection/src/selection/on.js","../node_modules/d3-selection/src/selection/dispatch.js","../node_modules/d3-selection/src/selection/index.js","../node_modules/d3-selection/src/selection/select.js","../node_modules/d3-selection/src/selection/filter.js","../node_modules/d3-selection/src/constant.js","../node_modules/d3-selection/src/selection/exit.js","../node_modules/d3-selection/src/selection/join.js","../node_modules/d3-selection/src/selection/merge.js","../node_modules/d3-selection/src/selection/order.js","../node_modules/d3-selection/src/selection/call.js","../node_modules/d3-selection/src/selection/nodes.js","../node_modules/d3-selection/src/selection/node.js","../node_modules/d3-selection/src/selection/size.js","../node_modules/d3-selection/src/selection/empty.js","../node_modules/d3-selection/src/selection/each.js","../node_modules/d3-selection/src/selection/append.js","../node_modules/d3-selection/src/selection/datum.js","../node_modules/d3-selection/src/selection/iterator.js","../node_modules/d3-selection/src/select.js","../node_modules/d3-drag/src/noevent.js","../node_modules/d3-drag/src/nodrag.js","../node_modules/d3-interpolate/src/zoom.js","../node_modules/d3-selection/src/pointer.js","../node_modules/d3-selection/src/sourceEvent.js","../node_modules/d3-timer/src/timer.js","../node_modules/d3-timer/src/timeout.js","../node_modules/d3-transition/src/transition/schedule.js","../node_modules/d3-transition/src/interrupt.js","../node_modules/d3-interpolate/src/number.js","../node_modules/d3-interpolate/src/transform/decompose.js","../node_modules/d3-interpolate/src/transform/parse.js","../node_modules/d3-interpolate/src/transform/index.js","../node_modules/d3-transition/src/transition/tween.js","../node_modules/d3-color/src/define.js","../node_modules/d3-color/src/color.js","../node_modules/d3-interpolate/src/basis.js","../node_modules/d3-interpolate/src/constant.js","../node_modules/d3-interpolate/src/color.js","../node_modules/d3-interpolate/src/rgb.js","../node_modules/d3-interpolate/src/basisClosed.js","../node_modules/d3-interpolate/src/string.js","../node_modules/d3-transition/src/transition/interpolate.js","../node_modules/d3-transition/src/transition/attr.js","../node_modules/d3-transition/src/transition/attrTween.js","../node_modules/d3-transition/src/transition/delay.js","../node_modules/d3-transition/src/transition/duration.js","../node_modules/d3-transition/src/transition/selection.js","../node_modules/d3-transition/src/transition/style.js","../node_modules/d3-transition/src/transition/index.js","../node_modules/d3-transition/src/transition/select.js","../node_modules/d3-transition/src/transition/selectAll.js","../node_modules/d3-transition/src/transition/filter.js","../node_modules/d3-transition/src/transition/merge.js","../node_modules/d3-transition/src/transition/transition.js","../node_modules/d3-transition/src/transition/on.js","../node_modules/d3-transition/src/transition/styleTween.js","../node_modules/d3-transition/src/transition/text.js","../node_modules/d3-transition/src/transition/textTween.js","../node_modules/d3-transition/src/transition/remove.js","../node_modules/d3-transition/src/transition/ease.js","../node_modules/d3-transition/src/transition/easeVarying.js","../node_modules/d3-transition/src/transition/end.js","../node_modules/d3-transition/src/selection/transition.js","../node_modules/d3-ease/src/cubic.js","../node_modules/d3-transition/src/selection/index.js","../node_modules/d3-transition/src/selection/interrupt.js","../node_modules/d3-zoom/src/constant.js","../node_modules/d3-zoom/src/event.js","../node_modules/d3-zoom/src/transform.js","../node_modules/d3-zoom/src/noevent.js","../node_modules/d3-zoom/src/zoom.js","../node_modules/react-flow-renderer/node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/react-flow-renderer/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../node_modules/react-flow-renderer/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../node_modules/react-flow-renderer/node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../node_modules/react-flow-renderer/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../node_modules/react-flow-renderer/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../node_modules/react-flow-renderer/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../node_modules/zustand/esm/context.js","../node_modules/classcat/index.js","../node_modules/zustand/esm/shallow.js","../node_modules/react-flow-renderer/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../node_modules/react-flow-renderer/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../node_modules/react-flow-renderer/node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../node_modules/react-flow-renderer/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../node_modules/react-flow-renderer/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../node_modules/react-flow-renderer/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/d3-drag/src/constant.js","../node_modules/d3-drag/src/event.js","../node_modules/d3-drag/src/drag.js","../node_modules/react-flow-renderer/node_modules/@babel/runtime/helpers/esm/typeof.js","components/Flow/CardNode.styles.ts","assets/add.svg","assets/close.svg","assets/copy.svg","assets/delete.svg","assets/done.svg","assets/edit.svg","assets/evaluate.svg","assets/execute.svg","assets/loading.svg","assets/open_new.svg","assets/refresh.svg","assets/review.svg","assets/warning.svg","assets/play.svg","assets/pause.svg","assets/download.svg","assets/execute_down.svg","components/Flow/CardNode.tsx","components/CardEdge/CardEdge.styles.ts","components/CardEdge/CardEdge.tsx","components/Flow/Flow.styles.ts","components/Flow/Flow.tsx","components/AddCardPopover/AddCardPopover.styles.ts","config/config.ts","components/AddCardPopover/AddCardPopover.tsx","pages/TaskDetailPage/TaskDetailPage.styles.ts","../node_modules/estree-util-is-identifier-name/lib/index.js","../node_modules/hast-util-whitespace/lib/index.js","../node_modules/property-information/lib/util/schema.js","../node_modules/property-information/lib/util/merge.js","../node_modules/property-information/lib/normalize.js","../node_modules/property-information/lib/util/info.js","../node_modules/property-information/lib/util/types.js","../node_modules/property-information/lib/util/defined-info.js","../node_modules/property-information/lib/util/create.js","../node_modules/property-information/lib/xlink.js","../node_modules/property-information/lib/xml.js","../node_modules/property-information/lib/util/case-sensitive-transform.js","../node_modules/property-information/lib/util/case-insensitive-transform.js","../node_modules/property-information/lib/xmlns.js","../node_modules/property-information/lib/aria.js","../node_modules/property-information/lib/html.js","../node_modules/property-information/lib/svg.js","../node_modules/property-information/index.js","../node_modules/property-information/lib/find.js","../node_modules/property-information/lib/hast-to-react.js","../node_modules/style-to-object/esm/index.mjs","../node_modules/unist-util-position/lib/index.js","../node_modules/unist-util-stringify-position/lib/index.js","../node_modules/vfile-message/lib/index.js","../node_modules/hast-util-to-jsx-runtime/lib/index.js","../node_modules/comma-separated-tokens/index.js","../node_modules/space-separated-tokens/index.js","../node_modules/html-url-attributes/lib/index.js","../node_modules/mdast-util-to-string/lib/index.js","../node_modules/micromark-util-chunked/index.js","../node_modules/micromark-util-subtokenize/lib/splice-buffer.js","../node_modules/micromark-util-subtokenize/index.js","../node_modules/micromark-util-combine-extensions/index.js","../node_modules/micromark-util-character/index.js","../node_modules/micromark-factory-space/index.js","../node_modules/micromark/lib/initialize/content.js","../node_modules/micromark/lib/initialize/document.js","../node_modules/micromark-core-commonmark/lib/blank-line.js","../node_modules/micromark-core-commonmark/lib/content.js","../node_modules/micromark/lib/initialize/flow.js","../node_modules/micromark/lib/initialize/text.js","../node_modules/micromark-util-resolve-all/index.js","../node_modules/micromark/lib/create-tokenizer.js","../node_modules/micromark-core-commonmark/lib/thematic-break.js","../node_modules/micromark-core-commonmark/lib/list.js","../node_modules/micromark-core-commonmark/lib/block-quote.js","../node_modules/micromark-factory-destination/index.js","../node_modules/micromark-factory-label/index.js","../node_modules/micromark-factory-title/index.js","../node_modules/micromark-factory-whitespace/index.js","../node_modules/micromark-util-normalize-identifier/index.js","../node_modules/micromark-core-commonmark/lib/definition.js","../node_modules/micromark-core-commonmark/lib/code-indented.js","../node_modules/micromark-core-commonmark/lib/heading-atx.js","../node_modules/micromark-core-commonmark/lib/setext-underline.js","../node_modules/micromark-util-html-tag-name/index.js","../node_modules/micromark-core-commonmark/lib/html-flow.js","../node_modules/micromark-core-commonmark/lib/code-fenced.js","../node_modules/decode-named-character-reference/index.dom.js","../node_modules/micromark-core-commonmark/lib/character-reference.js","../node_modules/micromark-core-commonmark/lib/character-escape.js","../node_modules/micromark-core-commonmark/lib/line-ending.js","../node_modules/micromark-core-commonmark/lib/label-end.js","../node_modules/micromark-core-commonmark/lib/label-start-image.js","../node_modules/micromark-util-classify-character/index.js","../node_modules/micromark-core-commonmark/lib/attention.js","../node_modules/micromark-core-commonmark/lib/autolink.js","../node_modules/micromark-core-commonmark/lib/html-text.js","../node_modules/micromark-core-commonmark/lib/label-start-link.js","../node_modules/micromark-core-commonmark/lib/hard-break-escape.js","../node_modules/micromark-core-commonmark/lib/code-text.js","../node_modules/micromark/lib/constructs.js","../node_modules/micromark/lib/parse.js","../node_modules/micromark/lib/preprocess.js","../node_modules/micromark-util-decode-numeric-character-reference/index.js","../node_modules/micromark-util-decode-string/index.js","../node_modules/mdast-util-from-markdown/lib/index.js","../node_modules/micromark/lib/postprocess.js","../node_modules/remark-parse/lib/index.js","../node_modules/@ungap/structured-clone/esm/types.js","../node_modules/@ungap/structured-clone/esm/deserialize.js","../node_modules/@ungap/structured-clone/esm/serialize.js","../node_modules/@ungap/structured-clone/esm/index.js","../node_modules/micromark-util-sanitize-uri/index.js","../node_modules/mdast-util-to-hast/lib/footer.js","../node_modules/unist-util-is/lib/index.js","../node_modules/unist-util-visit-parents/lib/index.js","../node_modules/unist-util-visit/lib/index.js","../node_modules/mdast-util-to-hast/lib/revert.js","../node_modules/mdast-util-to-hast/lib/handlers/list-item.js","../node_modules/trim-lines/index.js","../node_modules/mdast-util-to-hast/lib/handlers/index.js","../node_modules/mdast-util-to-hast/lib/handlers/blockquote.js","../node_modules/mdast-util-to-hast/lib/handlers/break.js","../node_modules/mdast-util-to-hast/lib/handlers/code.js","../node_modules/mdast-util-to-hast/lib/handlers/delete.js","../node_modules/mdast-util-to-hast/lib/handlers/emphasis.js","../node_modules/mdast-util-to-hast/lib/handlers/footnote-reference.js","../node_modules/mdast-util-to-hast/lib/handlers/heading.js","../node_modules/mdast-util-to-hast/lib/handlers/html.js","../node_modules/mdast-util-to-hast/lib/handlers/image-reference.js","../node_modules/mdast-util-to-hast/lib/handlers/image.js","../node_modules/mdast-util-to-hast/lib/handlers/inline-code.js","../node_modules/mdast-util-to-hast/lib/handlers/link-reference.js","../node_modules/mdast-util-to-hast/lib/handlers/link.js","../node_modules/mdast-util-to-hast/lib/handlers/list.js","../node_modules/mdast-util-to-hast/lib/handlers/paragraph.js","../node_modules/mdast-util-to-hast/lib/handlers/root.js","../node_modules/mdast-util-to-hast/lib/handlers/strong.js","../node_modules/mdast-util-to-hast/lib/handlers/table.js","../node_modules/mdast-util-to-hast/lib/handlers/table-cell.js","../node_modules/mdast-util-to-hast/lib/handlers/table-row.js","../node_modules/mdast-util-to-hast/lib/handlers/text.js","../node_modules/mdast-util-to-hast/lib/handlers/thematic-break.js","../node_modules/mdast-util-to-hast/lib/state.js","../node_modules/mdast-util-to-hast/lib/index.js","../node_modules/remark-rehype/lib/index.js","../node_modules/bail/index.js","../node_modules/unified/node_modules/is-plain-obj/index.js","../node_modules/trough/lib/index.js","../node_modules/vfile/lib/minpath.browser.js","../node_modules/vfile/lib/minproc.browser.js","../node_modules/vfile/lib/minurl.shared.js","../node_modules/vfile/lib/minurl.browser.js","../node_modules/vfile/lib/index.js","../node_modules/unified/lib/callable-instance.js","../node_modules/unified/lib/index.js","../node_modules/react-markdown/lib/index.js","components/DraggablePopover/DraggablePopover.styles.ts","components/PluginSelector/PluginSelector.styles.ts","components/PluginSelector/PluginSelector.tsx","components/PluginSection/PluginSection.styles.ts","components/PluginSection/PluginSection.tsx","components/DraggablePopover/DraggablePopover.tsx","components/InstructionsPopup/InstructionsPopup.styles.ts","components/InstructionsPopup/InstructionsPopup.tsx","components/DetailModal/DetailModal.styles.ts","components/OutputDetailContainer/OutputDetailContainer.styles.ts","components/OutputDetailContainer/OutputDetailContainer.tsx","components/GuitarTabsConverterPluginContainer/GuitarTabsConverterPluginContainer.styles.ts","components/GuitarTabsConverterPluginContainer/GuitarTabsConverterPluginContainer.tsx","components/ABCConverterPluginContainer/ABCConverterPluginContainer.styles.ts","components/ABCConverterPluginContainer/ABCConverterPluginContainer.tsx","components/PDFConverterContainer/PDFConverterContainer.styles.ts","../node_modules/@babel/runtime/helpers/esm/classPrivateMethodInitSpec.js","../node_modules/@babel/runtime/helpers/esm/checkPrivateRedeclaration.js","../node_modules/@babel/runtime/helpers/esm/assertClassBrand.js","../node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/marked/src/defaults.ts","../node_modules/marked/src/helpers.ts","../node_modules/marked/src/Tokenizer.ts","../node_modules/marked/src/rules.ts","../node_modules/marked/src/Lexer.ts","../node_modules/marked/src/Renderer.ts","../node_modules/marked/src/TextRenderer.ts","../node_modules/marked/src/Parser.ts","../node_modules/marked/src/Hooks.ts","../node_modules/marked/src/Instance.ts","../node_modules/marked/src/marked.ts","components/PDFConverterContainer/PDFConverterContainer.tsx","components/XMLConverterContainer/XMLConverterContainer.styles.ts","components/XMLConverterContainer/XMLConverterContainer.tsx","components/DetailModal/DetailModal.tsx","pages/TaskDetailPage/TaskDetailPage.tsx","containers/TaskContainer/TaskContainer.styles.ts","containers/TaskContainer/TaskContainer.tsx","pages/TasksPage/TasksPage.styles.ts","components/AddTaskPopover/AddTaskPopover.styles.ts","components/AddTaskPopover/AddTaskPopover.tsx","assets/info.svg","assets/list.svg","pages/TasksPage/TasksPage.tsx","App.tsx","styles/GobalStyles.styles.ts","../node_modules/styled-components/src/constructors/createGlobalStyle.ts","index.tsx"],"sourcesContent":["/**!\nCopyright (c) 2009-2023 Paul Rosen and Gregory Dyke\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n **This text is from: http://opensource.org/licenses/MIT**\n!**/\nvar version = require('./version');\nvar animation = require('./src/api/abc_animation');\nvar tuneBook = require('./src/api/abc_tunebook');\nvar sequence = require('./src/synth/abc_midi_sequencer');\nvar strTranspose = require('./src/str/output');\n\nvar abcjs = {};\n\nabcjs.signature = \"abcjs-basic v\" + version;\n\nObject.keys(animation).forEach(function (key) {\n\tabcjs[key] = animation[key];\n});\n\nObject.keys(tuneBook).forEach(function (key) {\n\tabcjs[key] = tuneBook[key];\n});\n\nabcjs.renderAbc = require('./src/api/abc_tunebook_svg');\nabcjs.tuneMetrics = require('./src/api/tune-metrics');\nabcjs.TimingCallbacks = require('./src/api/abc_timing_callbacks');\n\nvar glyphs = require('./src/write/creation/glyphs');\nabcjs.setGlyph = glyphs.setSymbol;\nabcjs.strTranspose = strTranspose;\n\nvar CreateSynth = require('./src/synth/create-synth');\nvar instrumentIndexToName = require('./src/synth/instrument-index-to-name');\nvar pitchToNoteName = require('./src/synth/pitch-to-note-name');\nvar SynthSequence = require('./src/synth/synth-sequence');\nvar CreateSynthControl = require('./src/synth/create-synth-control');\nvar registerAudioContext = require('./src/synth/register-audio-context');\nvar activeAudioContext = require('./src/synth/active-audio-context');\nvar supportsAudio = require('./src/synth/supports-audio');\nvar playEvent = require('./src/synth/play-event');\nvar SynthController = require('./src/synth/synth-controller');\nvar getMidiFile = require('./src/synth/get-midi-file');\nvar midiRenderer = require('./src/synth/abc_midi_renderer');\n\nabcjs.synth = {\n\tCreateSynth: CreateSynth,\n\tinstrumentIndexToName: instrumentIndexToName,\n\tpitchToNoteName: pitchToNoteName,\n\tSynthController: SynthController,\n\tSynthSequence: SynthSequence,\n\tCreateSynthControl: CreateSynthControl,\n\tregisterAudioContext: registerAudioContext,\n\tactiveAudioContext: activeAudioContext,\n\tsupportsAudio: supportsAudio,\n\tplayEvent: playEvent,\n\tgetMidiFile: getMidiFile,\n\tsequence: sequence,\n\tmidiRenderer: midiRenderer,\n};\n\nabcjs['Editor'] = require('./src/edit/abc_editor');\nabcjs['EditArea'] = require('./src/edit/abc_editarea');\n\nmodule.exports = abcjs;\n","//    abc_animation.js: handles animating the music in real time.\n\nvar TimingCallbacks = require('./abc_timing_callbacks');\n\nvar animation = {};\n\n(function() {\n\t\"use strict\";\n\n\tvar timer;\n\tvar cursor;\n\tanimation.startAnimation = function(paper, tune, options) {\n\t\t//options.bpm\n\t\t//options.showCursor\n\t\t//options.hideCurrentMeasure\n\t\t//options.hideFinishedMeasures\n\t\tif (timer) {\n\t\t\ttimer.stop();\n\t\t\ttimer = undefined;\n\t\t}\n\n\t\tif (options.showCursor) {\n\t\t\tcursor = paper.querySelector('.abcjs-cursor');\n\t\t\tif (!cursor) {\n\t\t\t\tcursor = document.createElement('DIV');\n\t\t\t\tcursor.className = 'abcjs-cursor cursor';\n\t\t\t\tcursor.style.position = 'absolute';\n\n\t\t\t\tpaper.appendChild(cursor);\n\t\t\t\tpaper.style.position = 'relative';\n\t\t\t}\n\t\t}\n\n\t\tfunction hideMeasures(elements) {\n\t\t\tfor (var i = 0; i < elements.length; i++) {\n\t\t\t\tvar element = elements[i];\n\t\t\t\tif (!element.classList.contains('abcjs-bar'))\n\t\t\t\t\telement.style.display = \"none\";\n\t\t\t}\n\t\t}\n\n\t\tvar lastMeasure;\n\t\tfunction disappearMeasuresAfter(selector) {\n\t\t\tif (lastMeasure) {\n\t\t\t\tvar elements = paper.querySelectorAll(lastMeasure);\n\t\t\t\thideMeasures(elements);\n\t\t\t}\n\t\t\tlastMeasure = selector;\n\t\t}\n\n\t\tfunction disappearMeasuresBefore(selector) {\n\t\t\tvar elements = paper.querySelectorAll(selector);\n\t\t\thideMeasures(elements);\n\t\t}\n\n\t\tfunction measureCallback(selector) {\n\t\t\tif (options.hideCurrentMeasure) {\n\t\t\t\tdisappearMeasuresBefore(selector);\n\t\t\t} else if (options.hideFinishedMeasures) {\n\t\t\t\tdisappearMeasuresAfter(selector);\n\t\t\t}\n\t\t}\n\n\t\tfunction getLineAndMeasure(element) {\n\t\t\treturn '.abcjs-l' + element.line + '.abcjs-m' + element.measureNumber;\n\t\t}\n\n\t\tfunction setCursor(range) {\n\t\t\tif (range) {\n\t\t\t\tif (range.measureStart) {\n\t\t\t\t\tvar selector = getLineAndMeasure(range);\n\t\t\t\t\tif (selector)\n\t\t\t\t\t\tmeasureCallback(selector);\n\t\t\t\t}\n\t\t\t\tif (cursor) {\n\t\t\t\t\tcursor.style.left = range.left + \"px\";\n\t\t\t\t\tcursor.style.top = range.top + \"px\";\n\t\t\t\t\tcursor.style.width = range.width + \"px\";\n\t\t\t\t\tcursor.style.height = range.height + \"px\";\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttimer.stop();\n\t\t\t\ttimer = undefined;\n\t\t\t}\n\t\t}\n\n\t\ttimer = new TimingCallbacks(tune, {\n\t\t\tqpm: options.bpm,\n\t\t\teventCallback: setCursor\n\t\t});\n\t\ttimer.start();\n\t};\n\n\tanimation.pauseAnimation = function(pause) {\n\t\tif (timer) {\n\t\t\tif (pause)\n\t\t\t\ttimer.pause();\n\t\t\telse\n\t\t\t\ttimer.start();\n\t\t}\n\t};\n\n\tanimation.stopAnimation = function() {\n\t\tif (timer) {\n\t\t\ttimer.stop();\n\t\t\ttimer = undefined;\n\t\t}\n\t};\n\n})();\n\nmodule.exports = animation;\n","/*\n * Tablature Plugins\n * tablature are defined dynamically and registered inside abcjs\n * by calling abcTablatures.register(plugin) \n * where plugin represents a plugin instance \n * \n */\nvar StringTablature = require('../tablatures/instruments/tab-string');\n\n/* extend the table below when adding a new instrument plugin */\n\n// Existing tab classes \nvar pluginTab = {\n  'violin': { name: 'StringTab', defaultTuning: ['G,', 'D', 'A', 'e'], isTabBig: false, tabSymbolOffset: 0},\n  'fiddle': { name: 'StringTab', defaultTuning: ['G,', 'D', 'A', 'e'], isTabBig: false, tabSymbolOffset: 0},\n  'mandolin': { name: 'StringTab', defaultTuning: ['G,', 'D', 'A', 'e'], isTabBig: false, tabSymbolOffset: 0},\n  'guitar': { name: 'StringTab', defaultTuning: ['E,', 'A,', 'D', 'G' , 'B' , 'e'], isTabBig: true, tabSymbolOffset: 0},\n  'fiveString': { name: 'StringTab', defaultTuning: ['C,', 'G,', 'D', 'A', 'e'], isTabBig: false, tabSymbolOffset: -.95},\n};\n\nvar abcTablatures = {\n\n  inited: false,\n  plugins: {},\n\n  \n  /**\n   * to be called once per plugin for registration \n   * @param {*} plugin \n   */\n  register: function (plugin) {\n    var name = plugin.name;\n    var tablature = plugin.tablature;\n    this.plugins[name] = tablature;\n  },\n\n  setError: function (tune, msg) {\n    if (tune.warnings) {\n      tune.warning.push(msg);\n    } else {\n      tune.warnings = [msg];\n    }\n  },\n\n  /**\n   * handle params for current processed score\n   * @param {*} tune current tune \n   * @param {*} tuneNumber number in tune list\n   * @param {*} params params to be processed for tablature\n   * @return prepared tablatures plugin instances for current tune\n   */\n  preparePlugins: function (tune, tuneNumber, params) {\n    var returned = null;\n    var nbPlugins = 0;\n    if (params.tablature) {\n      // validate requested plugins \n      var tabs = params.tablature;\n      returned = [];\n      for (var ii = 0; ii < tabs.length; ii++) {\n        var args = tabs[ii];\n        var instrument = args['instrument'];\n        if (instrument == null) {\n          this.setError(tune, \"tablature 'instrument' is missing\");\n          return returned;\n        }\n        var tabName = pluginTab[instrument];\n        var plugin = null;\n        if (tabName) {\n          plugin = this.plugins[tabName.name];\n        }\n        if (plugin) {\n          if (params.visualTranspose != 0) {\n            // populate transposition request to tabs\n            args.visualTranspose = params.visualTranspose;\n          }\n          args.abcSrc = params.tablature.abcSrc;\n          var pluginInstance = {\n            classz: plugin,\n            tuneNumber: tuneNumber,\n            params: args,\n            instance: null,\n            tabType: tabName,\n          };\n          // proceed with tab plugin  init \n          // plugin.init(tune, tuneNumber, args, ii);\n          returned.push(pluginInstance);\n          nbPlugins++;\n        } else if (instrument === '') {\n          // create a placeholder - there is no tab for this staff\n          returned.push(null)\n        } else {\n          // unknown tab plugin \n          //this.emit_error('Undefined tablature plugin: ' + tabName)\n          this.setError(tune, 'Undefined tablature plugin: ' + instrument);\n          return returned;\n        }\n      }\n    }\n    return returned;\n  },\n\n  /**\n   * Call requested plugin\n   * @param {*} renderer \n   * @param {*} abcTune \n   */\n  layoutTablatures: function layoutTablatures(renderer, abcTune) {\n    var tabs = abcTune.tablatures;\n\n    // chack tabs request for each staffs\n    var staffLineCount = 0;\n    \n    // Clear the suppression flag\n    if (tabs && (tabs.length > 0)){\n      var nTabs = tabs.length;\n      for (var kk=0;kk<nTabs;++kk){\n        if (tabs[kk] && tabs[kk].params.firstStaffOnly){\n          tabs[kk].params.suppress = false;\n        }\n      }\n    }\n\n    for (var ii = 0; ii < abcTune.lines.length; ii++) {\n      var line = abcTune.lines[ii];\n\n      if (line.staff){\n        staffLineCount++;\n      }\n      \n      // MAE 27Nov2023\n      // If tab param \"firstStaffOnly\", remove the tab label after the first staff\n      if (staffLineCount > 1){\n        if (tabs && (tabs.length > 0)){\n          var nTabs = tabs.length;\n          for (var kk=0;kk<nTabs;++kk){\n            if (tabs[kk].params.firstStaffOnly){\n              // Set the staff draw suppression flag\n              tabs[kk].params.suppress = true;\n            }\n          }\n        }\n      }\n\n      var curStaff = line.staff;\n      if (curStaff) {\n        var maxStaves = curStaff.length\n        for (var jj = 0; jj < curStaff.length; jj++) {\n\n          if (tabs[jj] && jj < maxStaves) {\n             // tablature requested for staff\n            var tabPlugin = tabs[jj];\n            if (tabPlugin.instance == null) {\n              tabPlugin.instance = new tabPlugin.classz();\n              // plugin.init(tune, tuneNumber, args, ii);\n              // call initer first\n              tabPlugin.instance.init(abcTune,\n                tabPlugin.tuneNumber,\n                tabPlugin.params,\n                jj,\n                tabPlugin.tabType\n              );\n            }\n            // render next\n            tabPlugin.instance.render(renderer, line, jj);\n          }\n        }\n      }  \n    }\n  },\n\n  /**\n   * called once internally to register internal plugins\n   */\n  init: function () {\n    // just register plugin hosted by abcjs \n    if (!this.inited) {\n      this.register(new StringTablature());\n      this.inited = true;\n    }\n  }\n};\n\n\nmodule.exports = abcTablatures ;\n","var TimingCallbacks = function(target, params) {\n\tvar self = this;\n\tif (!params) params = {};\n\tself.qpm = params.qpm ? parseInt(params.qpm, 10) : null;\n\tif (!self.qpm) {\n\t\tvar tempo = target.metaText ? target.metaText.tempo : null;\n\t\tself.qpm = target.getBpm(tempo);\n\t}\n\tself.extraMeasuresAtBeginning = params.extraMeasuresAtBeginning ? parseInt(params.extraMeasuresAtBeginning, 10) : 0;\n\tself.beatCallback = params.beatCallback; // This is called for each beat.\n\tself.eventCallback = params.eventCallback;   // This is called for each note or rest encountered.\n\tself.lineEndCallback = params.lineEndCallback;   // This is called when the end of a line is approaching.\n\tself.lineEndAnticipation = params.lineEndAnticipation ? parseInt(params.lineEndAnticipation, 10) : 0;   // How many milliseconds before the end should the call happen.\n\tself.beatSubdivisions = params.beatSubdivisions ? parseInt(params.beatSubdivisions, 10) : 1; // how many callbacks per beat is desired.\n\tself.joggerTimer = null;\n\n\tself.replaceTarget = function(newTarget) {\n\t\tself.noteTimings = newTarget.setTiming(self.qpm, self.extraMeasuresAtBeginning);\n\t\tif (newTarget.noteTimings.length === 0)\n\t\t\tself.noteTimings = newTarget.setTiming(0,0);\n\t\tif (self.lineEndCallback) {\n\t\t\tself.lineEndTimings = getLineEndTimings(newTarget.noteTimings, self.lineEndAnticipation);\n\t\t}\n\t\tself.startTime = null;\n\t\tself.currentBeat = 0;\n\t\tself.currentEvent = 0;\n\t\tself.currentLine = 0;\n\t\tself.currentTime = 0;\n\t\tself.isPaused = false;\n\t\tself.isRunning = false;\n\t\tself.pausedPercent = null;\n\t\tself.justUnpaused = false;\n\t\tself.newSeekPercent = 0;\n\t\tself.lastTimestamp = 0;\n\n\t\tif (self.noteTimings.length === 0)\n\t\t\treturn;\n\t\t// noteTimings contains an array of events sorted by time. Events that happen at the same time are in the same element of the array.\n\t\tself.millisecondsPerBeat = 1000 / (self.qpm / 60) / self.beatSubdivisions;\n\t\tself.lastMoment = self.noteTimings[self.noteTimings.length-1].milliseconds;\n\t\tself.totalBeats = Math.round(self.lastMoment / self.millisecondsPerBeat);\n\t};\n\n\tself.replaceTarget(target);\n\n\tself.doTiming = function (timestamp) {\n\t\t// This is called 60 times a second, that is, every 16 msecs.\n\t\t//console.log(\"doTiming\", timestamp, timestamp-self.lastTimestamp);\n\t\tif (self.lastTimestamp === timestamp)\n\t\t\treturn; // If there are multiple seeks or other calls, then we can easily get multiple callbacks for the same instant.\n\t\tself.lastTimestamp = timestamp;\n\t\tif (!self.startTime) {\n\t\t\tself.startTime = timestamp;\n\t\t}\n\n\t\tif (!self.isPaused && self.isRunning) {\n\t\t\tself.currentTime = timestamp - self.startTime;\n\t\t\tself.currentTime += 16; // Add a little slop because this function isn't called exactly.\n\t\t\twhile (self.noteTimings.length > self.currentEvent && self.noteTimings[self.currentEvent].milliseconds < self.currentTime) {\n\t\t\t\tif (self.eventCallback && self.noteTimings[self.currentEvent].type === 'event') {\n\t\t\t\t\tvar thisStartTime = self.startTime; // the event callback can call seek and change the position from beneath us.\n\t\t\t\t\tself.eventCallback(self.noteTimings[self.currentEvent]);\n\t\t\t\t\tif (thisStartTime !== self.startTime) {\n\t\t\t\t\t\tself.currentTime = timestamp - self.startTime;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tself.currentEvent++;\n\t\t\t}\n\t\t\tif (self.lineEndCallback && self.lineEndTimings.length > self.currentLine && self.lineEndTimings[self.currentLine].milliseconds < self.currentTime && self.currentEvent < self.noteTimings.length) {\n\t\t\t\tvar leftEvent = self.noteTimings[self.currentEvent].milliseconds === self.currentTime ? self.noteTimings[self.currentEvent] : self.noteTimings[self.currentEvent-1]\n\t\t\t\tself.lineEndCallback(self.lineEndTimings[self.currentLine], leftEvent, { line: self.currentLine, endTimings: self.lineEndTimings, currentTime: self.currentTime });\n\t\t\t\tself.currentLine++;\n\t\t\t}\n\t\t\tif (self.currentTime < self.lastMoment) {\n\t\t\t\trequestAnimationFrame(self.doTiming);\n\t\t\t\tif (self.currentBeat * self.millisecondsPerBeat < self.currentTime) {\n\t\t\t\t\tvar ret = self.doBeatCallback(timestamp);\n\t\t\t\t\tif (ret !== null)\n\t\t\t\t\t\tself.currentTime = ret;\n\t\t\t\t}\n\t\t\t} else if (self.currentBeat <= self.totalBeats) {\n\t\t\t\t// Because of timing issues (for instance, if the browser tab isn't active), the beat callbacks might not have happened when they are supposed to. To keep the client programs from having to deal with that, this will keep calling the loop until all of them have been sent.\n\t\t\t\tif (self.beatCallback) {\n\t\t\t\t\tvar ret2 = self.doBeatCallback(timestamp);\n\t\t\t\t\tif (ret2 !== null)\n\t\t\t\t\t\tself.currentTime = ret2;\n\t\t\t\t\trequestAnimationFrame(self.doTiming);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (self.currentTime >= self.lastMoment) {\n\t\t\t\tif (self.eventCallback) {\n\t\t\t\t\t// At the end, the event callback can return \"continue\" to keep from stopping.\n\t\t\t\t\t// The event callback can either be a promise or not.\n\t\t\t\t\tvar promise = self.eventCallback(null);\n\t\t\t\t\tself.shouldStop(promise).then(function(shouldStop) {\n\t\t\t\t\t\tif (shouldStop)\n\t\t\t\t\t\t\tself.stop();\n\t\t\t\t\t})\n\t\t\t\t} else\n\t\t\t\t\tself.stop();\n\t\t\t}\n\t\t}\n\t};\n\n\tself.shouldStop = function(promise) {\n\t\t// The return of the last event callback can be \"continue\" or a promise that returns \"continue\".\n\t\t// If it is then don't call stop. Any other value calls stop.\n\t\treturn new Promise(function (resolve) {\n\t\t\tif (!promise)\n\t\t\t\treturn resolve(true);\n\t\t\tif (promise === \"continue\")\n\t\t\t\treturn resolve(false);\n\t\t\tif (promise.then) {\n\t\t\t\tpromise.then(function (result) {\n\t\t\t\t\tresolve(result !== \"continue\");\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t};\n\n\tself.doBeatCallback = function(timestamp) {\n\t\tif (self.beatCallback) {\n\t\t\tvar next = self.currentEvent;\n\t\t\twhile (next < self.noteTimings.length && self.noteTimings[next].left === null)\n\t\t\t\tnext++;\n\t\t\tvar endMs;\n\t\t\tvar ev;\n\t\t\tif (next < self.noteTimings.length) {\n\t\t\t\tendMs = self.noteTimings[next].milliseconds;\n\t\t\t\tnext = Math.max(0, self.currentEvent - 1);\n\t\t\t\twhile (next >= 0 && self.noteTimings[next].left === null)\n\t\t\t\t\tnext--;\n\n\t\t\t\tev = self.noteTimings[next];\n\t\t\t}\n\n\t\t\tvar position = {};\n\t\t\tvar debugInfo = {};\n\t\t\tif (ev) {\n\t\t\t\tposition.top = ev.top;\n\t\t\t\tposition.height = ev.height;\n\n\t\t\t\t// timestamp = the time passed in from the animation timer\n\t\t\t\t// self.startTime = the time that the tune was started (if there was seeking or pausing, it is adjusted to keep the math the same)\n\t\t\t\t// ev = the event that is either happening now or has most recently passed.\n\t\t\t\t// ev.milliseconds = the time that the current event starts (relative to self.startTime)\n\t\t\t\t// endMs = the time that the next event starts\n\t\t\t\t// ev.endX = the x coordinate that the next event happens (or the end of the line or repeat measure)\n\t\t\t\t// ev.left = the x coordinate of the current event\n\t\t\t\t//\n\t\t\t\t// The output is the X coordinate of the current cursor location. It is calculated with the ratio of the length of the event and the width of it.\n\t\t\t\tvar offMs = Math.max(0, timestamp-self.startTime-ev.milliseconds); // Offset in time from the last beat\n\t\t\t\tvar gapMs = endMs - ev.milliseconds; // Length of this event in time\n\t\t\t\tvar gapPx = ev.endX - ev.left; // The length in pixels\n\t\t\t\tvar offPx = gapMs ? offMs * gapPx / gapMs : 0;\n\t\t\t\tposition.left = ev.left + offPx;\n\t\t\t\t// See if this is before the first event - that is the case where there are \"prep beats\"\n\t\t\t\tif (self.currentEvent === 0 && ev.milliseconds > timestamp-self.startTime)\n\t\t\t\t\tposition.left = undefined\n\t\t\t\t\n\t\t\t\tdebugInfo = {\n\t\t\t\t\ttimestamp: timestamp,\n\t\t\t\t\tstartTime: self.startTime,\n\t\t\t\t\tev: ev,\n\t\t\t\t\tendMs: endMs,\n\t\t\t\t\toffMs: offMs,\n\t\t\t\t\toffPx: offPx,\n\t\t\t\t\tgapMs: gapMs,\n\t\t\t\t\tgapPx: gapPx\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tdebugInfo = {\n\t\t\t\t\ttimestamp: timestamp,\n\t\t\t\t\tstartTime: self.startTime,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tvar thisStartTime = self.startTime; // the beat callback can call seek and change the position from beneath us.\n\t\t\tself.beatCallback(\n\t\t\t\tself.currentBeat / self.beatSubdivisions,\n\t\t\t\tself.totalBeats / self.beatSubdivisions,\n\t\t\t\tself.lastMoment,\n\t\t\t\tposition,\n\t\t\t\tdebugInfo);\n\t\t\tif (thisStartTime !== self.startTime) {\n\t\t\t\treturn timestamp - self.startTime;\n\t\t\t} else\n\t\t\t\tself.currentBeat++;\n\t\t}\n\t\treturn null;\n\t};\n\n\t// In general music doesn't need a timer at 60 fps because notes don't happen that fast.\n\t// For instance, at 120 beats per minute, a sixteenth note takes 125ms. So just as a\n\t// compromise value between performance and jank this is set about half that.\n\tvar JOGGING_INTERVAL = 60;\n\n\tself.animationJogger = function() {\n\t\t// There are some cases where the animation timer doesn't work: for instance when\n\t\t// this isn't running in a visible tab and sometimes on mobile devices. We compensate\n\t\t// by having a backup timer using setTimeout. This won't be accurate so the performance\n\t\t// will be jerky, but without it the requestAnimationFrame might be skipped and so\n\t\t// not called again.\n\t\tif (self.isRunning) {\n\t\t\tself.doTiming(performance.now());\n\t\t\tself.joggerTimer = setTimeout(self.animationJogger, JOGGING_INTERVAL);\n\t\t}\n\t};\n\n\tself.start = function(offsetPercent, units) {\n\t\tself.isRunning = true;\n\t\tif (self.isPaused) {\n\t\t\tself.isPaused = false;\n\t\t\tif (offsetPercent === undefined)\n\t\t\t\tself.justUnpaused = true;\n\t\t}\n\t\tif (offsetPercent) {\n\t\t\tself.setProgress(offsetPercent, units);\n\t\t} else if (offsetPercent === 0) {\n\t\t\tself.reset();\n\t\t} else if (self.pausedPercent !== null) {\n\t\t\tvar now = performance.now();\n\t\t\tself.currentTime = self.lastMoment * self.pausedPercent;\n\t\t\tself.startTime = now - self.currentTime;\n\t\t\tself.pausedPercent = null;\n\t\t\tself.reportNext = true;\n\t\t}\n\t\trequestAnimationFrame(self.doTiming);\n\t\tself.joggerTimer = setTimeout(self.animationJogger, JOGGING_INTERVAL);\n\t};\n\tself.pause = function() {\n\t\tself.isPaused = true;\n\t\tvar now = performance.now();\n\t\tself.pausedPercent = (now - self.startTime) / self.lastMoment;\n\t\tself.isRunning = false;\n\t\tif (self.joggerTimer) {\n\t\t\tclearTimeout(self.joggerTimer);\n\t\t\tself.joggerTimer = null;\n\t\t}\n\t};\n\tself.currentMillisecond = function() {\n\t\treturn self.currentTime;\n\t};\n\tself.reset = function() {\n\t\tself.currentBeat = 0;\n\t\tself.currentEvent = 0;\n\t\tself.currentLine = 0;\n\t\tself.startTime = null;\n\t\tself.pausedPercent = null;\n\t};\n\tself.stop = function() {\n\t\tself.pause();\n\t\tself.reset();\n\t};\n\tself.setProgress = function(position, units) {\n\t\t// the effect of this function is to move startTime so that the callbacks happen correctly for the new seek.\n\t\tvar percent;\n\t\tswitch (units) {\n\t\t\tcase \"seconds\":\n\t\t\t\tself.currentTime = position * 1000;\n\t\t\t\tif (self.currentTime < 0) self.currentTime = 0;\n\t\t\t\tif (self.currentTime > self.lastMoment) self.currentTime = self.lastMoment;\n\t\t\t\tpercent = self.currentTime / self.lastMoment;\n\t\t\t\tbreak;\n\t\t\tcase \"beats\":\n\t\t\t\tself.currentTime = position * self.millisecondsPerBeat * self.beatSubdivisions;\n\t\t\t\tif (self.currentTime < 0) self.currentTime = 0;\n\t\t\t\tif (self.currentTime > self.lastMoment) self.currentTime = self.lastMoment;\n\t\t\t\tpercent = self.currentTime / self.lastMoment;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// this is \"percent\" or any illegal value\n\t\t\t\t// this is passed a value between 0 and 1.\n\t\t\t\tpercent = position;\n\t\t\t\tif (percent < 0) percent = 0;\n\t\t\t\tif (percent > 1) percent = 1;\n\t\t\t\tself.currentTime = self.lastMoment * percent;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (!self.isRunning)\n\t\t\tself.pausedPercent = percent;\n\n\t\tvar now = performance.now();\n\t\tself.startTime = now - self.currentTime;\n\n\t\tvar oldEvent = self.currentEvent;\n\t\tself.currentEvent = 0;\n\t\twhile (self.noteTimings.length > self.currentEvent && self.noteTimings[self.currentEvent].milliseconds < self.currentTime) {\n\t\t\tself.currentEvent++;\n\t\t}\n\n\t\tif (self.lineEndCallback) {\n\t\t\tself.currentLine = 0;\n\t\t\twhile (self.lineEndTimings.length > self.currentLine && self.lineEndTimings[self.currentLine].milliseconds + self.lineEndAnticipation < self.currentTime) {\n\t\t\t\tself.currentLine++;\n\t\t\t}\n\t\t}\n\n\t\tvar oldBeat = self.currentBeat;\n\t\tself.currentBeat = Math.floor(self.currentTime / self.millisecondsPerBeat);\n\t\tif (self.beatCallback && oldBeat !== self.currentBeat) // If the movement caused the beat to change, then immediately report it to the client.\n\t\t\tself.doBeatCallback(self.startTime+self.currentTime);\n\n\t\tif (self.eventCallback && self.currentEvent >= 0 && self.noteTimings[self.currentEvent].type === 'event')\n\t\t\tself.eventCallback(self.noteTimings[self.currentEvent]);\n\t\tif (self.lineEndCallback)\n\t\t\tself.lineEndCallback(self.lineEndTimings[self.currentLine], self.noteTimings[self.currentEvent], { line: self.currentLine, endTimings: self.lineEndTimings });\n\n\t\tself.joggerTimer = setTimeout(self.animationJogger, JOGGING_INTERVAL);\n\t};\n};\n\nfunction getLineEndTimings(timings, anticipation) {\n\t// Returns an array of milliseconds to call the lineEndCallback.\n\t// This figures out the timing of the beginning of each line and subtracts the anticipation from it.\n\tvar callbackTimes = [];\n\tvar lastTop = null;\n\tfor (var i = 0; i < timings.length; i++) {\n\t\tvar timing = timings[i];\n\t\tif (timing.type !== 'end' && timing.top !== lastTop) {\n\t\t\tcallbackTimes.push({ measureNumber: timing.measureNumber, milliseconds: timing.milliseconds-anticipation, top: timing.top, bottom: timing.top+timing.height });\n\t\t\tlastTop = timing.top;\n\t\t}\n\t}\n\treturn callbackTimes;\n}\n\nmodule.exports = TimingCallbacks;\n\n","//    abc_tunebook.js: splits a string representing ABC Music Notation into individual tunes.\n\nvar Parse = require('../parse/abc_parse');\nvar bookParser = require('../parse/abc_parse_book');\nvar tablatures = require('./abc_tablatures');\n\n\nvar tunebook = {};\n\n(function() {\n\t\"use strict\";\n\n\ttunebook.numberOfTunes = function(abc) {\n\t\tvar tunes = abc.split(\"\\nX:\");\n\t\tvar num = tunes.length;\n\t\tif (num === 0) num = 1;\n\t\treturn num;\n\t};\n\n\tvar TuneBook = tunebook.TuneBook = function(book) {\n\t\tvar parsed = bookParser(book);\n\t\tthis.header = parsed.header;\n\t\tthis.tunes = parsed.tunes;\n\t};\n\n\tTuneBook.prototype.getTuneById = function(id) {\n\t\tfor (var i = 0; i < this.tunes.length; i++) {\n\t\t\tif (this.tunes[i].id === ''+id)\n\t\t\t\treturn this.tunes[i];\n\t\t}\n\t\treturn null;\n\t};\n\n\tTuneBook.prototype.getTuneByTitle = function(title) {\n\t\tfor (var i = 0; i < this.tunes.length; i++) {\n\t\t\tif (this.tunes[i].title === title)\n\t\t\t\treturn this.tunes[i];\n\t\t}\n\t\treturn null;\n\t};\n\n\ttunebook.parseOnly = function(abc, params) {\n\t\tvar numTunes = tunebook.numberOfTunes(abc);\n\n\t\t// this just needs to be passed in because this tells the engine how many tunes to process.\n\t\tvar output = [];\n\t\tfor (var i = 0; i < numTunes; i++) {\n\t\t\toutput.push(1);\n\t\t}\n\t\tfunction callback() {\n\t\t\t// Don't need to do anything with the parsed tunes.\n\t\t}\n\t\treturn tunebook.renderEngine(callback, output, abc, params);\n\t};\n\n\ttunebook.renderEngine = function (callback, output, abc, params) {\n\t\tvar ret = [];\n\t\tvar isArray = function(testObject) {\n\t\t\treturn testObject && !(testObject.propertyIsEnumerable('length')) && typeof testObject === 'object' && typeof testObject.length === 'number';\n\t\t};\n\n\t\t// check and normalize input parameters\n\t\tif (output === undefined || abc === undefined)\n\t\t\treturn;\n\t\tif (!isArray(output))\n\t\t\toutput = [ output ];\n\t\tif (params === undefined)\n\t\t\tparams = {};\n\t\tvar currentTune = params.startingTune ? parseInt(params.startingTune, 10) : 0;\n\n\t\t// parse the abc string\n\t\tvar book = new TuneBook(abc);\n\t\tvar abcParser = new Parse();\n\n\t\t// output each tune, if it exists. Otherwise clear the div.\n\t\tfor (var i = 0; i < output.length; i++) {\n\t\t\tvar div = output[i];\n\t\t\tif (div === \"*\") {\n\t\t\t\t// This is for \"headless\" rendering: doing the work but not showing the svg.\n\t\t\t} else if (typeof(div) === \"string\")\n\t\t\t\tdiv = document.getElementById(div);\n\t\t\tif (div) {\n\t\t\t\tif (currentTune >= 0 && currentTune < book.tunes.length) {\n\t\t\t\t\tabcParser.parse(book.tunes[currentTune].abc, params, book.tunes[currentTune].startPos - book.header.length);\n\t\t\t\t\tvar tune = abcParser.getTune();\n\t\t\t\t\t//\n\t\t\t\t\t// Init tablatures plugins\n\t\t\t\t\t//\n\t\t\t\t\tif (params.tablature) {\n\t\t\t\t\t\ttablatures.init();\n\t\t\t\t\t\ttune.tablatures = tablatures.preparePlugins(tune, currentTune, params);\n\t\t\t\t\t}\n\t\t\t\t\tvar warnings = abcParser.getWarnings();\n\t\t\t\t\tif (warnings)\n\t\t\t\t\t\ttune.warnings = warnings;\n\t\t\t\t\tvar override = callback(div, tune, i, book.tunes[currentTune].abc);\n\t\t\t\t\tret.push(override ? override : tune);\n\t\t\t\t} else {\n\t\t\t\t\tif (div['innerHTML'])\n\t\t\t\t\t\tdiv.innerHTML = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tcurrentTune++;\n\t\t}\n\t  return ret;\n\t};\n\n\tfunction flattenTune(tuneObj) {\n\t\t// This removes the line breaks and removes the non-music lines.\n\t\tvar staves = [];\n\t\tfor (var j = 0; j < tuneObj.lines.length; j++) {\n\t\t\tvar line = tuneObj.lines[j];\n\t\t\tif (line.staff) {\n\t\t\t\tfor (var k = 0; k < line.staff.length; k++) {\n\t\t\t\t\tvar staff = line.staff[k];\n\t\t\t\t\tif (!staves[k])\n\t\t\t\t\t\tstaves[k] = staff;\n\t\t\t\t\telse {\n\t\t\t\t\t\tfor (var i = 0; i < staff.voices.length; i++) {\n\t\t\t\t\t\t\tif (staves[k].voices[i])\n\t\t\t\t\t\t\t\tstaves[k].voices[i] = staves[k].voices[i].concat(staff.voices[i]);\n\t\t\t\t\t\t\t// TODO-PER: If staves[k].voices[i] doesn't exist, that means a voice appeared in the middle of the tune. That isn't handled yet.\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn staves;\n\t}\n\n\tfunction measuresParser(staff, tune) {\n\t\tvar voices = [];\n\t\tvar lastChord = null;\n\t\tvar measureStartChord = null;\n\t\tvar fragStart = null;\n\t\tvar hasNotes = false;\n\n\t\tfor (var i = 0; i < staff.voices.length; i++) {\n\t\t\tvar voice = staff.voices[i];\n\t\t\tvoices.push([]);\n\t\t\tfor (var j = 0; j < voice.length; j++) {\n\t\t\t\tvar elem = voice[j];\n\t\t\t\tif (fragStart === null && elem.startChar >= 0) {\n\t\t\t\t\tfragStart = elem.startChar;\n\t\t\t\t\tif (elem.chord === undefined)\n\t\t\t\t\t\tmeasureStartChord = lastChord;\n\t\t\t\t\telse\n\t\t\t\t\t\tmeasureStartChord = null;\n\t\t\t\t}\n\t\t\t\tif (elem.chord)\n\t\t\t\t\tlastChord = elem;\n\t\t\t\tif (elem.el_type === 'bar') {\n\t\t\t\t\tif (hasNotes) {\n\t\t\t\t\t\tvar frag = tune.abc.substring(fragStart, elem.endChar);\n\t\t\t\t\t\tvar measure = {abc: frag};\n\t\t\t\t\t\tlastChord = measureStartChord && measureStartChord.chord && measureStartChord.chord.length > 0 ? measureStartChord.chord[0].name : null;\n\t\t\t\t\t\tif (lastChord)\n\t\t\t\t\t\t\tmeasure.lastChord = lastChord;\n\t\t\t\t\t\tif (elem.startEnding)\n\t\t\t\t\t\t\tmeasure.startEnding = elem.startEnding;\n\t\t\t\t\t\tif (elem.endEnding)\n\t\t\t\t\t\t\tmeasure.endEnding = elem.endEnding;\n\t\t\t\t\t\tvoices[i].push(measure);\n\t\t\t\t\t\tfragStart = null;\n\t\t\t\t\t\thasNotes = false;\n\t\t\t\t\t}\n\t\t\t\t} else if (elem.el_type === 'note') {\n\t\t\t\t\thasNotes = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn voices;\n\t}\n\n\ttunebook.extractMeasures = function(abc) {\n\t\tvar tunes = [];\n\t\tvar book = new TuneBook(abc);\n\t\tfor (var i = 0; i < book.tunes.length; i++) {\n\t\t\tvar tune = book.tunes[i];\n\t\t\tvar arr = tune.abc.split(\"K:\");\n\t\t\tvar arr2 = arr[1].split(\"\\n\");\n\t\t\tvar header = arr[0] + \"K:\" + arr2[0] + \"\\n\";\n\t\t\tvar lastChord = null;\n\t\t\tvar measureStartChord = null;\n\t\t\tvar fragStart = null;\n\t\t\tvar measures = [];\n\t\t\tvar hasNotes = false;\n\t\t\tvar tuneObj = tunebook.parseOnly(tune.abc)[0];\n\t\t\tvar hasPickup = tuneObj.getPickupLength() > 0;\n\t\t\t// var staves = flattenTune(tuneObj);\n\t\t\t// for (var s = 0; s < staves.length; s++) {\n\t\t\t// \tvar voices = measuresParser(staves[s], tune);\n\t\t\t// \tif (s === 0)\n\t\t\t// \t\tmeasures = voices;\n\t\t\t// \telse {\n\t\t\t// \t\tfor (var ss = 0; ss < voices.length; ss++) {\n\t\t\t// \t\t\tvar voice = voices[ss];\n\t\t\t// \t\t\tif (measures.length <= ss)\n\t\t\t// \t\t\t\tmeasures.push([]);\n\t\t\t// \t\t\tvar measureVoice = measures[ss];\n\t\t\t// \t\t\tfor (var sss = 0; sss < voice.length; sss++) {\n\t\t\t// \t\t\t\tif (measureVoice.length > sss)\n\t\t\t// \t\t\t\t\tmeasureVoice[sss].abc += \"\\n\" + voice[sss].abc;\n\t\t\t// \t\t\t\telse\n\t\t\t// \t\t\t\t\tmeasures.push(voice[sss]);\n\t\t\t// \t\t\t}\n\t\t\t// \t\t}\n\t\t\t// \t}\n\t\t\t// \tconsole.log(voices);\n\t\t\t// }\n\t\t\t// measures = measures[0];\n\n\t\t\tfor (var j = 0; j < tuneObj.lines.length; j++) {\n\t\t\t\tvar line = tuneObj.lines[j];\n\t\t\t\tif (line.staff) {\n\t\t\t\t\tfor (var k = 0; k < 1 /*line.staff.length*/; k++) {\n\t\t\t\t\t\tvar staff = line.staff[k];\n\t\t\t\t\t\tfor (var kk = 0; kk < 1 /*staff.voices.length*/; kk++) {\n\t\t\t\t\t\t\tvar voice = staff.voices[kk];\n\t\t\t\t\t\t\tfor (var kkk = 0; kkk < voice.length; kkk++) {\n\t\t\t\t\t\t\t\tvar elem = voice[kkk];\n\t\t\t\t\t\t\t\tif (fragStart === null && elem.startChar >= 0) {\n\t\t\t\t\t\t\t\t\tfragStart = elem.startChar;\n\t\t\t\t\t\t\t\t\tif (elem.chord === undefined)\n\t\t\t\t\t\t\t\t\t\tmeasureStartChord = lastChord;\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\tmeasureStartChord = null;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (elem.chord)\n\t\t\t\t\t\t\t\t\tlastChord = elem;\n\t\t\t\t\t\t\t\tif (elem.el_type === 'bar') {\n\t\t\t\t\t\t\t\t\tif (hasNotes) {\n\t\t\t\t\t\t\t\t\t\tvar frag = tune.abc.substring(fragStart, elem.endChar);\n\t\t\t\t\t\t\t\t\t\tvar measure = {abc: frag};\n\t\t\t\t\t\t\t\t\t\tlastChord = measureStartChord && measureStartChord.chord && measureStartChord.chord.length > 0 ? measureStartChord.chord[0].name : null;\n\t\t\t\t\t\t\t\t\t\tif (lastChord)\n\t\t\t\t\t\t\t\t\t\t\tmeasure.lastChord = lastChord;\n\t\t\t\t\t\t\t\t\t\tif (elem.startEnding)\n\t\t\t\t\t\t\t\t\t\t\tmeasure.startEnding = elem.startEnding;\n\t\t\t\t\t\t\t\t\t\tif (elem.endEnding)\n\t\t\t\t\t\t\t\t\t\t\tmeasure.endEnding = elem.endEnding;\n\t\t\t\t\t\t\t\t\t\tmeasures.push(measure);\n\t\t\t\t\t\t\t\t\t\tfragStart = null;\n\t\t\t\t\t\t\t\t\t\thasNotes = false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (elem.el_type === 'note') {\n\t\t\t\t\t\t\t\t\thasNotes = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\ttunes.push({\n\t\t\t\theader: header,\n\t\t\t\tmeasures: measures,\n\t\t\t\thasPickup: hasPickup\n\t\t\t});\n\t\t}\n\t\treturn tunes;\n\t};\n})();\n\nmodule.exports = tunebook;\n","var tunebook = require('./abc_tunebook');\nvar Tune = require('../data/abc_tune');\n\nvar EngraverController = require('../write/engraver-controller');\nvar Parse = require('../parse/abc_parse');\nvar wrap = require('../parse/wrap_lines');\n// var tablatures = require('./abc_tablatures');\n\n\nvar resizeDivs = {};\nfunction resizeOuter() {\n    var width = window.innerWidth;\n    for (var id in resizeDivs) {\n        if (resizeDivs.hasOwnProperty(id)) {\n            var outer = resizeDivs[id];\n            var ofs = outer.offsetLeft;\n            width -= ofs * 2;\n            outer.style.width = width + \"px\";\n        }\n    }\n}\n\ntry {\n    window.addEventListener(\"resize\", resizeOuter);\n    window.addEventListener(\"orientationChange\", resizeOuter);\n} catch(e) {\n    // if we aren't in a browser, this code will crash, but it is not needed then either.\n}\n\nfunction renderOne(div, tune, params, tuneNumber, lineOffset) {\n    if (params.viewportHorizontal) {\n        // Create an inner div that holds the music, so that the passed in div will be the viewport.\n        div.innerHTML = '<div class=\"abcjs-inner\"></div>';\n        if (params.scrollHorizontal) {\n            div.style.overflowX = \"auto\";\n            div.style.overflowY = \"hidden\";\n        } else\n            div.style.overflow = \"hidden\";\n        resizeDivs[div.id] = div; // We use a hash on the element's id so that multiple calls won't keep adding to the list.\n        div = div.children[0]; // The music should be rendered in the inner div.\n    }\n    else if (params.viewportVertical) {\n        // Create an inner div that holds the music, so that the passed in div will be the viewport.\n        div.innerHTML = '<div class=\"abcjs-inner scroll-amount\"></div>';\n        div.style.overflowX = \"hidden\";\n        div.style.overflowY = \"auto\";\n        div = div.children[0]; // The music should be rendered in the inner div.\n    }\n    else\n\t    div.innerHTML = \"\";\n    var engraver_controller = new EngraverController(div, params);\n    engraver_controller.engraveABC(tune, tuneNumber, lineOffset);\n    tune.engraver = engraver_controller;\n    if (params.viewportVertical || params.viewportHorizontal) {\n        // If we added a wrapper around the div, then we need to size the wrapper, too.\n        var parent = div.parentNode;\n        parent.style.width = div.style.width;\n    }\n}\n\n// A quick way to render a tune from javascript when interactivity is not required.\n// This is used when a javascript routine has some abc text that it wants to render\n// in a div or collection of divs. One tune or many can be rendered.\n//\n// parameters:\n//      output: an array of divs that the individual tunes are rendered to.\n//          If the number of tunes exceeds the number of divs in the array, then\n//          only the first tunes are rendered. If the number of divs exceeds the number\n//          of tunes, then the unused divs are cleared. The divs can be passed as either\n//          elements or strings of ids. If ids are passed, then the div MUST exist already.\n//          (if a single element is passed, then it is an implied array of length one.)\n//          (if a null is passed for an element, or the element doesn't exist, then that tune is skipped.)\n//      abc: text representing a tune or an entire tune book in ABC notation.\n//      renderParams: hash of:\n//          startingTune: an index, starting at zero, representing which tune to start rendering at.\n//              (If this element is not present, then rendering starts at zero.)\n//          width: 800 by default. The width in pixels of the output paper\nvar renderAbc = function(output, abc, parserParams, engraverParams, renderParams) {\n    // Note: all parameters have been condensed into the first ones. It doesn't hurt anything to allow the old format, so just copy them here.\n    var params = {};\n    var key;\n    if (parserParams) {\n        for (key in parserParams) {\n            if (parserParams.hasOwnProperty(key)) {\n                params[key] = parserParams[key];\n            }\n        }\n        if (params.warnings_id && params.tablature) {\n            params.tablature.warning_id = params.warnings_id;\n        }\n    }\n    if (engraverParams) {\n        for (key in engraverParams) {\n            if (engraverParams.hasOwnProperty(key)) {\n\t            // There is a conflict with the name of the parameter \"listener\". If it is in the second parameter, then it is for click.\n\t            if (key === \"listener\") {\n\t            \tif (engraverParams[key].highlight)\n\t\t                params.clickListener = engraverParams[key].highlight;\n\t            } else\n                    params[key] = engraverParams[key];\n            }\n        }\n    }\n    if (renderParams) {\n        for (key in renderParams) {\n            if (renderParams.hasOwnProperty(key)) {\n                params[key] = renderParams[key];\n            }\n        }\n    }\n\n    function callback(div, tune, tuneNumber, abcString) {\n        var removeDiv = false;\n        if (div === \"*\") {\n            removeDiv = true;\n            div = document.createElement(\"div\");\n            div.setAttribute(\"style\", \"visibility: hidden;\");\n            document.body.appendChild(div);\n        }\n        if (!removeDiv && params.wrap && params.staffwidth) {\n            tune = doLineWrapping(div, tune, tuneNumber, abcString, params);\n\t        return tune;\n        }\n        if (params.afterParsing)\n            params.afterParsing(tune, tuneNumber, abcString);\n        renderOne(div, tune, params, tuneNumber, 0);\n        if (removeDiv)\n            div.parentNode.removeChild(div);\n        return null;\n    }\n\n    return tunebook.renderEngine(callback, output, abc, params);\n};\n\nfunction doLineWrapping(div, tune, tuneNumber, abcString, params) {\n\tvar engraver_controller = new EngraverController(div, params);\n\tvar widths = engraver_controller.getMeasureWidths(tune);\n\n\tvar ret = wrap.calcLineWraps(tune, widths, params);\n\tif (ret.reParse) {\n        var abcParser = new Parse();\n        abcParser.parse(abcString, ret.revisedParams);\n        tune = abcParser.getTune();\n        var warnings = abcParser.getWarnings();\n        if (warnings)\n            tune.warnings = warnings;\n    }\n    if (params.afterParsing)\n        params.afterParsing(tune, tuneNumber, abcString);\n    renderOne(div, tune, ret.revisedParams, tuneNumber, 0);\n\ttune.explanation = ret.explanation;\n\treturn tune;\n}\n\nmodule.exports = renderAbc;\n","var tunebook = require('./abc_tunebook');\nvar EngraverController = require('../write/engraver-controller');\n\nvar tuneMetrics = function(abc, params) {\n    function callback(div, tune, tuneNumber, abcString) {\n\t\tdiv = document.createElement(\"div\");\n\t\tdiv.setAttribute(\"style\", \"visibility: hidden;\");\n\t\tdocument.body.appendChild(div);\n\t\tvar engraver_controller = new EngraverController(div, params);\n\t\tvar widths = engraver_controller.getMeasureWidths(tune);\n            div.parentNode.removeChild(div);\n        return {sections: widths};\n    }\n\n    return tunebook.renderEngine(callback, \"*\", abc, params);\n};\n\nmodule.exports = tuneMetrics;\n","var { relativeMajor } = require(\"./relative-major\");\n\nvar key1sharp = { acc: 'sharp', note: 'f' };\nvar key2sharp = { acc: 'sharp', note: 'c' };\nvar key3sharp = { acc: 'sharp', note: 'g' };\nvar key4sharp = { acc: 'sharp', note: 'd' };\nvar key5sharp = { acc: 'sharp', note: 'A' };\nvar key6sharp = { acc: 'sharp', note: 'e' };\nvar key7sharp = { acc: 'sharp', note: 'B' };\nvar key1flat = { acc: 'flat', note: 'B' };\nvar key2flat = { acc: 'flat', note: 'e' };\nvar key3flat = { acc: 'flat', note: 'A' };\nvar key4flat = { acc: 'flat', note: 'd' };\nvar key5flat = { acc: 'flat', note: 'G' };\nvar key6flat = { acc: 'flat', note: 'c' };\nvar key7flat = { acc: 'flat', note: 'F' };\n\nvar keys = {\n\t'C#': [key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp, key7sharp],\n\t'F#': [key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp],\n\t'B': [key1sharp, key2sharp, key3sharp, key4sharp, key5sharp],\n\t'E': [key1sharp, key2sharp, key3sharp, key4sharp],\n\t'A': [key1sharp, key2sharp, key3sharp],\n\t'D': [key1sharp, key2sharp],\n\t'G': [key1sharp],\n\t'C': [],\n\t'F': [key1flat],\n\t'Bb': [key1flat, key2flat],\n\t'Eb': [key1flat, key2flat, key3flat],\n\t'Cm': [key1flat, key2flat, key3flat],\n\t'Ab': [key1flat, key2flat, key3flat, key4flat],\n\t'Db': [key1flat, key2flat, key3flat, key4flat, key5flat],\n\t'Gb': [key1flat, key2flat, key3flat, key4flat, key5flat, key6flat],\n\t'Cb': [key1flat, key2flat, key3flat, key4flat, key5flat, key6flat, key7flat],\n\n\t// The following are not in the 2.0 spec, but seem normal enough.\n\t// TODO-PER: These SOUND the same as what's written, but they aren't right\n\t'A#': [key1flat, key2flat],\n\t'B#': [],\n\t'D#': [key1flat, key2flat, key3flat],\n\t'E#': [key1flat],\n\t'G#': [key1flat, key2flat, key3flat, key4flat],\n\t'none': [],\n};\n\nfunction keyAccidentals(key) {\n\tvar newKey = keys[relativeMajor(key)]\n\tif (!newKey) // If we don't recognize the key then there is no change\n\t\treturn null\n\treturn JSON.parse(JSON.stringify(newKey))\n};\n\nmodule.exports = keyAccidentals;\n","// All these keys have the same number of accidentals\nvar keys = {\n\t'C': { modes: ['CMaj', 'Amin', 'Am', 'GMix', 'DDor', 'EPhr', 'FLyd', 'BLoc'], stepsFromC: 0 },\n\t'Db': { modes: ['DbMaj', 'Bbmin', 'Bbm', 'AbMix', 'EbDor', 'FPhr', 'GbLyd', 'CLoc'], stepsFromC: 1 },\n\t'D': { modes: ['DMaj', 'Bmin', 'Bm', 'AMix', 'EDor', 'F#Phr', 'GLyd', 'C#Loc'], stepsFromC: 2 },\n\t'Eb': { modes: ['EbMaj', 'Cmin', 'Cm', 'BbMix', 'FDor', 'GPhr', 'AbLyd', 'DLoc'], stepsFromC: 3 },\n\t'E': { modes: ['EMaj', 'C#min', 'C#m', 'BMix', 'F#Dor', 'G#Phr', 'ALyd', 'D#Loc'], stepsFromC: 4 },\n\t'F': { modes: ['FMaj', 'Dmin', 'Dm', 'CMix', 'GDor', 'APhr', 'BbLyd', 'ELoc'], stepsFromC: 5 },\n\t'Gb': { modes: ['GbMaj', 'Ebmin', 'Ebm', 'DbMix', 'AbDor', 'BbPhr', 'CbLyd', 'FLoc'], stepsFromC: 6 },\n\t'G': { modes: ['GMaj', 'Emin', 'Em', 'DMix', 'ADor', 'BPhr', 'CLyd', 'F#Loc'], stepsFromC: 7 },\n\t'Ab': { modes: ['AbMaj', 'Fmin', 'Fm', 'EbMix', 'BbDor', 'CPhr', 'DbLyd', 'GLoc'], stepsFromC: 8 },\n\t'A': { modes: ['AMaj', 'F#min', 'F#m', 'EMix', 'BDor', 'C#Phr', 'DLyd', 'G#Loc'], stepsFromC: 9 },\n\t'Bb': { modes: ['BbMaj', 'Gmin', 'Gm', 'FMix', 'CDor', 'DPhr', 'EbLyd', 'ALoc'], stepsFromC: 10 },\n\t'B': { modes: ['BMaj', 'G#min', 'G#m', 'F#Mix', 'C#Dor', 'D#Phr', 'ELyd', 'A#Loc'], stepsFromC: 11 },\n\t// Enharmonic keys\n\t'C#': { modes: ['C#Maj', 'A#min', 'A#m', 'G#Mix', 'D#Dor', 'E#Phr', 'F#Lyd', 'B#Loc'], stepsFromC: 1 },\n\t'F#': { modes: ['F#Maj', 'D#min', 'D#m', 'C#Mix', 'G#Dor', 'A#Phr', 'BLyd', 'E#Loc'], stepsFromC: 6 },\n\t'Cb': { modes: ['CbMaj', 'Abmin', 'Abm', 'GbMix', 'DbDor', 'EbPhr', 'FbLyd', 'BbLoc'], stepsFromC: 11 },\n}\n\nvar keyReverse = null\n\nfunction createKeyReverse() {\n\tkeyReverse = {}\n\tvar allKeys = Object.keys(keys)\n\tfor (var i = 0 ; i < allKeys.length; i++) {\n\t\tvar keyObj = keys[allKeys[i]]\n\t\tkeyReverse[allKeys[i].toLowerCase()] = allKeys[i];\n\t\tfor (var j = 0; j < keyObj.modes.length; j++) {\n\t\t\tvar mode = keyObj.modes[j].toLowerCase()\n\t\t\tkeyReverse[mode] = allKeys[i];\n\t\t}\n\t}\n}\n\nfunction relativeMajor(key) {\n\t// Translate a key to its relative major. If it doesn't exist, do the best we can\n\t// by just returning the original key.\n\t// There are alternate spellings of these - so the search needs to be case insensitive.\n\t// To make this efficient, the first time this is called the \"keys\" object is reversed so this search is fast in the future\n\tif (!keyReverse) {\n\t\tcreateKeyReverse()\n\t}\n\t// get the key portion itself - there might be other stuff, like extra sharps and flats, or the mode written out.\n\tvar mode = key.toLowerCase().match(/([a-g][b#]?)(maj|min|mix|dor|phr|lyd|loc|m)?/)\n\tif (!mode || !mode[2])\n\t\treturn key;\n\tmode = mode[1] + mode[2]\n\tvar maj = keyReverse[mode]\n\tif (maj)\n\t\treturn maj;\n\treturn key;\n}\n\nfunction relativeMode(majorKey, mode) {\n\t// The reverse of the relativeMajor. Translate it back to the original mode.\n\t// If it isn't a recognized mode or it is already major, then just return the major key.\n\tvar group = keys[majorKey]\n\tif (!group)\n\t\treturn majorKey;\n\tif (mode === '')\n\t\treturn majorKey;\n\tvar match = mode.toLowerCase().match(/^(maj|min|mix|dor|phr|lyd|loc|m)/)\t\n\tif (!match)\n\t\treturn majorKey\n\tvar regMode = match[1]\t\n\tfor (var i = 0; i < group.modes.length; i++) {\n\t\tvar thisMode = group.modes[i]\n\t\tvar ind = thisMode.toLowerCase().indexOf(regMode)\n\t\tif (ind !== -1 && ind === thisMode.length - regMode.length)\n\t\t\treturn thisMode.substring(0, thisMode.length - regMode.length)\n\t}\n\treturn majorKey;\n}\n\nfunction transposeKey(key, steps) {\n\t// This takes a major key and adds the desired steps.\n\t// It assigns each key a number that is the number of steps from C so that there can just be arithmetic.\n\tvar match = keys[key]\n\tif (!match)\n\t\treturn key;\n\twhile (steps < 0) steps += 12;\n\tvar fromC = (match.stepsFromC + steps) % 12;\n\tfor (var i = 0;  i < Object.keys(keys).length; i++) {\n\t\tvar k = Object.keys(keys)[i]\n\t\tif (keys[k].stepsFromC === fromC)\n\t\t\treturn k;\n\t}\n\treturn key;\n}\n\nmodule.exports = {relativeMajor: relativeMajor, relativeMode: relativeMode, transposeKey: transposeKey};\n","//    abc_tune.js: a computer usable internal structure representing one tune.\n\nvar parseCommon = require('../parse/abc_common');\nvar spacing = require('../write/helpers/spacing');\nvar sequence = require('../synth/abc_midi_sequencer');\nvar flatten = require('../synth/abc_midi_flattener');\nvar delineTune = require(\"./deline-tune\");\n\n/**\n * This is the data for a single ABC tune. It is created and populated by the window.ABCJS.parse.Parse class.\n * Also known as the ABCJS Abstract Syntax Tree\n * @alternateClassName ABCJS.Tune\n */\nvar Tune = function() {\n\tthis.reset = function () {\n\t\tthis.version = \"1.1.0\";\n\t\tthis.media = \"screen\";\n\t\tthis.metaText = {};\n\t\tthis.metaTextInfo = {};\n\t\tthis.formatting = {};\n\t\tthis.lines = [];\n\t\tthis.staffNum = 0;\n\t\tthis.voiceNum = 0;\n\t\tthis.lineNum = 0;\n\t\tthis.runningFonts = {};\n\t\tdelete this.visualTranspose;\n\t};\n\tthis.reset();\n\n\tfunction copy(dest, src, prop, attrs) {\n\t\tfor (var i = 0; i < attrs.length; i++)\n\t\t\tdest[prop][attrs[i]] = src[prop][attrs[i]];\n\t}\n\n\tthis.copyTopInfo = function(src) {\n\t\tvar attrs = ['tempo', 'title', 'header', 'rhythm', 'origin', 'composer', 'author', 'partOrder'];\n\t\tcopy(this, src, \"metaText\", attrs);\n\t\tcopy(this, src, \"metaTextInfo\", attrs);\n\t};\n\n\tthis.copyBottomInfo = function(src) {\n\t\tvar attrs = ['unalignedWords',\n\t\t\t'book',\n\t\t\t'source',\n\t\t\t'discography',\n\t\t\t'notes',\n\t\t\t'transcription',\n\t\t\t'history',\n\t\t\t'abc-copyright',\n\t\t\t'abc-creator',\n\t\t\t'abc-edited-by',\n\t\t\t'footer']\n\t\tcopy(this, src, \"metaText\", attrs);\n\t\tcopy(this, src, \"metaTextInfo\", attrs);\n\t};\n\n\t// The structure consists of a hash with the following two items:\n\t// metaText: a hash of {key, value}, where key is one of: title, author, rhythm, source, transcription, unalignedWords, etc...\n\t// tempo: { noteLength: number (e.g. .125), bpm: number }\n\t// lines: an array of elements, or one of the following:\n\t//\n\t// STAFF: array of elements\n\t// SUBTITLE: string\n\t//\n\t// TODO: actually, the start and end char should modify each part of the note type\n\t// The elements all have a type field and a start and end char\n\t// field. The rest of the fields depend on the type and are listed below:\n\t// REST: duration=1,2,4,8; chord: string\n\t// NOTE: accidental=none,dbl_flat,flat,natural,sharp,dbl_sharp\n\t//\t\tpitch: \"C\" is 0. The numbers refer to the pitch letter.\n\t//\t\tduration: .5 (sixteenth), .75 (dotted sixteenth), 1 (eighth), 1.5 (dotted eighth)\n\t//\t\t\t2 (quarter), 3 (dotted quarter), 4 (half), 6 (dotted half) 8 (whole)\n\t//\t\tchord: { name:chord, position: one of 'default', 'above', 'below' }\n\t//\t\tend_beam = true or undefined if this is the last note in a beam.\n\t//\t\tlyric: array of { syllable: xxx, divider: one of \" -_\" }\n\t//\t\tstartTie = true|undefined\n\t//\t\tendTie = true|undefined\n\t//\t\tstartTriplet = num <- that is the number to print\n\t//\t\tendTriplet = true|undefined (the last note of the triplet)\n\t// TODO: actually, decoration should be an array.\n\t//\t\tdecoration: upbow, downbow, accent\n\t// BAR: type=bar_thin, bar_thin_thick, bar_thin_thin, bar_thick_thin, bar_right_repeat, bar_left_repeat, bar_double_repeat\n\t//\tnumber: 1 or 2: if it is the start of a first or second ending\n\t// CLEF: type=treble,bass\n\t// KEY-SIG:\n\t//\t\taccidentals[]: { acc:sharp|dblsharp|natural|flat|dblflat,  note:a|b|c|d|e|f|g }\n\t// METER: type: common_time,cut_time,specified\n\t//\t\tif specified, { num: 99, den: 99 }\n\n\tthis.getBeatLength = function() {\n\t\t// This returns a fraction: for instance 1/4 for a quarter\n\t\t// There are two types of meters: compound and regular. Compound meter has 3 beats counted as one.\n\t\tvar meter = this.getMeterFraction();\n\t\tvar multiplier = 1;\n\t\tif (meter.num === 6 || meter.num === 9 || meter.num === 12)\n\t\t\tmultiplier = 3;\n\t\telse if (meter.num === 3 && meter.den === 8)\n\t\t\tmultiplier = 3;\n\n\t\treturn multiplier / meter.den;\n\t};\n\n\tfunction computePickupLength(lines, barLength) {\n\t\tvar pickupLength = 0;\n\t\tfor (var i = 0; i < lines.length; i++) {\n\t\t\tif (lines[i].staff) {\n\t\t\t\tfor (var j = 0; j < lines[i].staff.length; j++) {\n\t\t\t\t\tfor (var v = 0; v < lines[i].staff[j].voices.length; v++) {\n\t\t\t\t\t\tvar voice = lines[i].staff[j].voices[v];\n\t\t\t\t\t\tvar tripletMultiplier = 1;\n\t\t\t\t\t\tfor (var el = 0; el < voice.length; el++) {\n\t\t\t\t\t\t\tvar isSpacer = voice[el].rest && voice[el].rest.type === \"spacer\";\n\t\t\t\t\t\t\tif (voice[el].startTriplet)\n\t\t\t\t\t\t\t\ttripletMultiplier = voice[el].tripletMultiplier;\n\t\t\t\t\t\t\tif (voice[el].duration && !isSpacer && voice[el].el_type !== \"tempo\")\n\t\t\t\t\t\t\t\tpickupLength += voice[el].duration * tripletMultiplier;\n\t\t\t\t\t\t\tif (voice[el].endTriplet)\n\t\t\t\t\t\t\t\ttripletMultiplier = 1;\n\t\t\t\t\t\t\tif (pickupLength >= barLength)\n\t\t\t\t\t\t\t\tpickupLength -= barLength;\n\t\t\t\t\t\t\tif (voice[el].el_type === 'bar')\n\t\t\t\t\t\t\t\treturn pickupLength;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn pickupLength;\n\t}\n\tthis.getPickupLength = function() {\n\t\tvar barLength = this.getBarLength();\n\t\tvar pickupLength = computePickupLength(this.lines, barLength);\n\n\t\t// If computed pickup length is very close to 0 or the bar length, we assume\n\t\t// that we actually have a full bar and hence no pickup.\n\t\treturn (pickupLength < 1e-8 || barLength-pickupLength < 1e-8) ? 0 : pickupLength;\n\t};\n\n\tthis.getBarLength = function() {\n\t\tvar meter = this.getMeterFraction();\n\t\treturn meter.num / meter.den;\n\t};\n\n\tthis.getTotalTime = function() {\n\t\treturn this.totalTime;\n\t};\n\n\tthis.getTotalBeats = function() {\n\t\treturn this.totalBeats;\n\t};\n\n\tthis.millisecondsPerMeasure = function(bpmOverride) {\n\t\tvar bpm;\n\t\tif (bpmOverride) {\n\t\t\tbpm = bpmOverride;\n\t\t} else {\n\t\t\tvar tempo = this.metaText ? this.metaText.tempo : null;\n\t\t\tbpm = this.getBpm(tempo);\n\t\t}\n\t\tif (bpm <= 0)\n\t\t\tbpm = 1; // I don't think this can happen, but we don't want a possibility of dividing by zero.\n\n\t\tvar beatsPerMeasure = this.getBeatsPerMeasure();\n\n\t\tvar minutesPerMeasure = beatsPerMeasure / bpm;\n\t\treturn minutesPerMeasure * 60000;\n\t};\n\n\tthis.getBeatsPerMeasure = function() {\n\t\tvar beatLen = this.getBeatLength();\n\t\tvar barLen = this.getBarLength();\n\t\treturn barLen / beatLen;\n\t};\n\n\tthis.getMeter = function() {\n\t\tfor (var i = 0; i < this.lines.length; i++) {\n\t\t\tvar line = this.lines[i];\n\t\t\tif (line.staff) {\n\t\t\t\tfor (var j = 0; j < line.staff.length; j++) {\n\t\t\t\t\tvar meter = line.staff[j].meter;\n\t\t\t\t\tif (meter) {\n\t\t\t\t\t\treturn meter;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn { type: \"common_time\" };\n\t};\n\n\tthis.getMeterFraction = function() {\n\t\tvar meter = this.getMeter();\n\t\tvar num = 4;\n\t\tvar den = 4;\n\t\tif (meter) {\n\t\t\tif (meter.type === 'specified') {\n\t\t\t\tnum = parseInt(meter.value[0].num, 10);\n\t\t\t\tden = parseInt(meter.value[0].den,10);\n\t\t\t} else if (meter.type === 'cut_time') {\n\t\t\t\tnum = 2;\n\t\t\t\tden = 2;\n\t\t\t} else if (meter.type === 'common_time') {\n\t\t\t\tnum = 4;\n\t\t\t\tden = 4;\n\t\t\t}\n\t\t}\n\t\tthis.meter = { num: num, den: den };\n\t\treturn this.meter; // TODO-PER: is this saved value used anywhere? A get function shouldn't change state.\n\t};\n\n\tthis.getKeySignature = function() {\n\t\tfor (var i = 0; i < this.lines.length; i++) {\n\t\t\tvar line = this.lines[i];\n\t\t\tif (line.staff) {\n\t\t\t\tfor (var j = 0; j < line.staff.length; j++) {\n\t\t\t\t\tif (line.staff[j].key)\n\t\t\t\t\t\treturn line.staff[j].key;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn {  };\n\t};\n\n\tthis.getElementFromChar = function(char) {\n\t\tfor (var i = 0; i < this.lines.length; i++) {\n\t\t\tvar line = this.lines[i];\n\t\t\tif (line.staff) {\n\t\t\t\tfor (var j = 0; j < line.staff.length; j++) {\n\t\t\t\t\tvar staff = line.staff[j];\n\t\t\t\t\tfor (var k = 0; k < staff.voices.length; k++) {\n\t\t\t\t\t\tvar voice = staff.voices[k];\n\t\t\t\t\t\tfor (var ii = 0; ii < voice.length; ii++) {\n\t\t\t\t\t\t\tvar elem = voice[ii];\n\t\t\t\t\t\t\tif (elem.startChar && elem.endChar &&\n\t\t\t\t\t\t\t\telem.startChar <= char && elem.endChar > char)\n\t\t\t\t\t\t\t\treturn elem;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\n\tfunction addVerticalInfo(timingEvents) {\n\t\t// Add vertical info to the bar events: put the next event's top, and the event after the next measure's top.\n\t\tvar lastBarTop;\n\t\tvar lastBarBottom;\n\t\tvar lastEventTop;\n\t\tvar lastEventBottom;\n\t\tfor (var e = timingEvents.length - 1; e >= 0; e--) {\n\t\t\tvar ev = timingEvents[e];\n\t\t\tif (ev.type === 'bar') {\n\t\t\t\tev.top = lastEventTop;\n\t\t\t\tev.nextTop = lastBarTop;\n\t\t\t\tlastBarTop = lastEventTop;\n\n\t\t\t\tev.bottom = lastEventBottom;\n\t\t\t\tev.nextBottom = lastBarBottom;\n\t\t\t\tlastBarBottom = lastEventBottom;\n\t\t\t} else if (ev.type === 'event') {\n\t\t\t\tlastEventTop = ev.top;\n\t\t\t\tlastEventBottom = ev.top + ev.height;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction makeSortedArray(hash) {\n\t\tvar arr = [];\n\t\tfor (var k in hash) {\n\t\t\tif (hash.hasOwnProperty(k))\n\t\t\t\tarr.push(hash[k]);\n\t\t}\n\t\tarr = arr.sort(function (a, b) {\n\t\t\tvar diff = a.milliseconds - b.milliseconds;\n\t\t\t// if the events have the same time, make sure a bar comes before a note\n\t\t\tif (diff !== 0) {\n\t\t\t\treturn diff;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn a.type === \"bar\" ? -1 : 1;\n\t\t\t}\n\t\t});\n\t\treturn arr;\n\t}\n\n\tthis.addElementToEvents = function(eventHash, element, voiceTimeMilliseconds, top, height, line, measureNumber, timeDivider, isTiedState, nextIsBar) {\n\t\tif (element.hint)\n\t\t\treturn { isTiedState: undefined, duration: 0 };\n\t\tvar realDuration = element.durationClass ? element.durationClass : element.duration;\n\t\tif (element.abcelem.rest && element.abcelem.rest.type === \"spacer\")\n\t\t\trealDuration = 0;\n\t\tif (realDuration > 0) {\n\t\t\tvar es = [];\n\t\t\t// If there is an invisible rest, then there are not elements, so don't push a null one.\n\t\t\tfor (var i = 0; i < element.elemset.length; i++) {\n\t\t\t\tif (element.elemset[i] !== null)\n\t\t\t\t\tes.push(element.elemset[i]);\n\t\t\t}\n\t\t\tvar isTiedToNext = element.startTie;\n\t\t\tif (isTiedState !== undefined) {\n\t\t\t\teventHash[\"event\" + isTiedState].elements.push(es); // Add the tied note to the first note that it is tied to\n\t\t\t\tif (nextIsBar) {\n\t\t\t\t\tif (!eventHash[\"event\" + voiceTimeMilliseconds]) {\n\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds] = {\n\t\t\t\t\t\t\ttype: \"event\",\n\t\t\t\t\t\t\tmilliseconds: voiceTimeMilliseconds,\n\t\t\t\t\t\t\tline: line,\n\t\t\t\t\t\t\tmeasureNumber: measureNumber,\n\t\t\t\t\t\t\ttop: top,\n\t\t\t\t\t\t\theight: height,\n\t\t\t\t\t\t\tleft: null,\n\t\t\t\t\t\t\twidth: 0,\n\t\t\t\t\t\t\telements: [],\n\t\t\t\t\t\t\tstartChar: null,\n\t\t\t\t\t\t\tendChar: null,\n\t\t\t\t\t\t\tstartCharArray: [],\n\t\t\t\t\t\t\tendCharArray: []\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].measureStart = true;\n\t\t\t\t\tnextIsBar = false;\n\t\t\t\t}\n\t\t\t\tif (!isTiedToNext)\n\t\t\t\t\tisTiedState = undefined;\n\t\t\t} else {\n\t\t\t\t// the last note wasn't tied.\n\t\t\t\tif (!eventHash[\"event\" + voiceTimeMilliseconds]) {\n\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds] = {\n\t\t\t\t\t\ttype: \"event\",\n\t\t\t\t\t\tmilliseconds: voiceTimeMilliseconds,\n\t\t\t\t\t\tline: line,\n\t\t\t\t\t\tmeasureNumber: measureNumber,\n\t\t\t\t\t\ttop: top,\n\t\t\t\t\t\theight: height,\n\t\t\t\t\t\tleft: element.x,\n\t\t\t\t\t\twidth: element.w,\n\t\t\t\t\t\telements: [es],\n\t\t\t\t\t\tstartChar: element.abcelem.startChar,\n\t\t\t\t\t\tendChar: element.abcelem.endChar,\n\t\t\t\t\t\tstartCharArray: [element.abcelem.startChar],\n\t\t\t\t\t\tendCharArray: [element.abcelem.endChar],\n\t\t\t\t\t\tmidiPitches: element.abcelem.midiPitches ? parseCommon.cloneArray(element.abcelem.midiPitches) : []\n\t\t\t\t\t};\n\t\t\t\t\tif (element.abcelem.midiGraceNotePitches)\n\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].midiGraceNotePitches = parseCommon.cloneArray(element.abcelem.midiGraceNotePitches);\n\t\t\t\t} else {\n\t\t\t\t\t// If there is more than one voice then two notes can fall at the same time. Usually they would be lined up in the same place, but if it is a whole rest, then it is placed funny. In any case, the left most element wins.\n\t\t\t\t\tif (eventHash[\"event\" + voiceTimeMilliseconds].left)\n\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].left = Math.min(eventHash[\"event\" + voiceTimeMilliseconds].left, element.x);\n\t\t\t\t\telse\n\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].left = element.x;\n\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].elements.push(es);\n\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].startCharArray.push(element.abcelem.startChar);\n\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].endCharArray.push(element.abcelem.endChar);\n\t\t\t\t\tif (eventHash[\"event\" + voiceTimeMilliseconds].startChar === null)\n\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].startChar =element.abcelem.startChar;\n\t\t\t\t\tif (eventHash[\"event\" + voiceTimeMilliseconds].endChar === null)\n\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].endChar =element.abcelem.endChar;\n\t\t\t\t\tif (element.abcelem.midiPitches && element.abcelem.midiPitches.length) {\n\t\t\t\t\t\tif (!eventHash[\"event\" + voiceTimeMilliseconds].midiPitches)\n\t\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].midiPitches = [];\n\t\t\t\t\t\tfor (var i = 0; i < element.abcelem.midiPitches.length; i++)\n\t\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].midiPitches.push(element.abcelem.midiPitches[i]);\n\t\t\t\t\t}\n\t\t\t\t\tif (element.abcelem.midiGraceNotePitches && element.abcelem.midiGraceNotePitches.length) {\n\t\t\t\t\t\tif (!eventHash[\"event\" + voiceTimeMilliseconds].midiGraceNotePitches)\n\t\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].midiGraceNotePitches = [];\n\t\t\t\t\t\tfor (var j = 0; j < element.abcelem.midiGraceNotePitches.length; j++)\n\t\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].midiGraceNotePitches.push(element.abcelem.midiGraceNotePitches[j]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (nextIsBar) {\n\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].measureStart = true;\n\t\t\t\t\tnextIsBar = false;\n\t\t\t\t}\n\t\t\t\t// TODO-PER: There doesn't seem to be a harm in letting ties be two different notes and it fixes a bug when a tie goes to a new line. If there aren't other problems with this change, then the variable can be removed completely. \n\t\t\t\t// if (isTiedToNext)\n\t\t\t\t// \tisTiedState = voiceTimeMilliseconds;\n\t\t\t}\n\t\t}\n\t\treturn { isTiedState: isTiedState, duration: realDuration / timeDivider, nextIsBar: nextIsBar || element.type === 'bar' };\n\t};\n\n\tthis.makeVoicesArray = function() {\n\t\t// First make a new array that is arranged by voice so that the repeats that span different lines are handled correctly.\n\t\tvar voicesArr = [];\n\t\tvar measureNumber = [];\n\t\tvar tempos = {};\n\t\tfor (var line = 0; line < this.engraver.staffgroups.length; line++) {\n\t\t\tvar group = this.engraver.staffgroups[line];\n\t\t\tif (group && group.staffs && group.staffs.length > 0) {\n\t\t\t\tvar firstStaff = group.staffs[0];\n\t\t\t\tvar middleC = firstStaff.absoluteY;\n\t\t\t\tvar top = middleC - firstStaff.top * spacing.STEP;\n\t\t\t\tvar lastStaff = group.staffs[group.staffs.length - 1];\n\t\t\t\tmiddleC = lastStaff.absoluteY;\n\t\t\t\tvar bottom = middleC - lastStaff.bottom * spacing.STEP;\n\t\t\t\tvar height = bottom - top;\n\n\t\t\t\tvar voices = group.voices;\n\t\t\t\tfor (var v = 0; v < voices.length; v++) {\n\t\t\t\t\tif (voices[v].staff && voices[v].staff.isTabStaff)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tvar noteFound = false;\n\t\t\t\t\tif (!voicesArr[v])\n\t\t\t\t\t\tvoicesArr[v] = [];\n\t\t\t\t\tif (measureNumber[v] === undefined)\n\t\t\t\t\t\tmeasureNumber[v] = 0;\n\t\t\t\t\tvar elements = voices[v].children;\n\t\t\t\t\tfor (var elem = 0; elem < elements.length; elem++) {\n\t\t\t\t\t\tif (elements[elem].type === \"tempo\")\n\t\t\t\t\t\t\ttempos[measureNumber[v]] = this.getBpm(elements[elem].abcelem);\n\t\t\t\t\t\tvoicesArr[v].push({top: top, height: height, line: group.line, measureNumber: measureNumber[v], elem: elements[elem]});\n\t\t\t\t\t\tif (elements[elem].type === 'bar' && noteFound) // Count the measures by counting the bar lines, but skip a bar line that appears at the left of the music, before any notes.\n\t\t\t\t\t\t\tmeasureNumber[v]++;\n\t\t\t\t\t\tif (elements[elem].type === 'note' || elements[elem].type === 'rest')\n\t\t\t\t\t\t\tnoteFound = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.tempoLocations = tempos; // This should be passed back, but the function is accessible publicly so that would break the interface.\n\t\treturn voicesArr;\n\t};\n\n\tthis.setupEvents = function(startingDelay, timeDivider, startingBpm, warp) {\n\t\tif (!warp) warp = 1;\n\t\tvar timingEvents = [];\n\n\t\tvar eventHash = {};\n\t\t// The time is the number of seconds from the beginning of the piece.\n\t\t// The units we are scanning are in notation units (i.e. 0.25 is a quarter note)\n\t\tvar time = startingDelay;\n\t\tvar isTiedState;\n\t\tvar nextIsBar = true;\n\t\tvar voices = this.makeVoicesArray();\n\t\tvar maxVoiceTimeMilliseconds = 0;\n\t\tfor (var v = 0; v < voices.length; v++) {\n\t\t\tvar voiceTime = time;\n\t\t\tvar voiceTimeMilliseconds = Math.round(voiceTime * 1000);\n\t\t\tvar startingRepeatElem = 0;\n\t\t\tvar endingRepeatElem = -1;\n\t\t\tvar elements = voices[v];\n\t\t\tvar bpm = startingBpm;\n\t\t\ttimeDivider = this.getBeatLength() * bpm / 60;\n\t\t\tvar tempoDone = -1;\n\t\t\tfor (var elem = 0; elem < elements.length; elem++) {\n\t\t\t\tvar thisMeasure = elements[elem].measureNumber;\n\t\t\t\tif (tempoDone !== thisMeasure && this.tempoLocations[thisMeasure]) {\n\t\t\t\t\tbpm = this.tempoLocations[thisMeasure];\n\t\t\t\t\ttimeDivider = warp * this.getBeatLength() * bpm / 60;\n\t\t\t\t\ttempoDone = thisMeasure;\n\t\t\t\t}\n\t\t\t\tvar element = elements[elem].elem;\n\t\t\t\tvar ret = this.addElementToEvents(eventHash, element, voiceTimeMilliseconds, elements[elem].top, elements[elem].height, elements[elem].line, elements[elem].measureNumber, timeDivider, isTiedState, nextIsBar);\n\t\t\t\tisTiedState = ret.isTiedState;\n\t\t\t\tnextIsBar = ret.nextIsBar;\n\t\t\t\tvoiceTime += ret.duration;\n\t\t\t\tvar lastHash;\n\t\t\t\tif (element.duration > 0 && eventHash[\"event\" + voiceTimeMilliseconds]) // This won't exist if this is the end of a tie.\n\t\t\t\t\tlastHash = \"event\" + voiceTimeMilliseconds;\n\t\t\t\tvoiceTimeMilliseconds = Math.round(voiceTime * 1000);\n\t\t\t\tif (element.type === 'bar') {\n\t\t\t\t\tvar barType = element.abcelem.type;\n\t\t\t\t\tvar endRepeat = (barType === \"bar_right_repeat\" || barType === \"bar_dbl_repeat\");\n\t\t\t\t\tvar startEnding = (element.abcelem.startEnding === '1');\n\t\t\t\t\tvar startRepeat = (barType === \"bar_left_repeat\" || barType === \"bar_dbl_repeat\" || barType === \"bar_right_repeat\");\n\t\t\t\t\tif (endRepeat) {\n\t\t\t\t\t\t// Force the end of the previous note to the position of the measure - the cursor won't go past the end repeat\n\t\t\t\t\t\tif (elem > 0) {\n\t\t\t\t\t\t\teventHash[lastHash].endX = element.x;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (endingRepeatElem === -1)\n\t\t\t\t\t\t\tendingRepeatElem = elem;\n\t\t\t\t\t\tvar lastVoiceTimeMilliseconds = 0;\n\t\t\t\t\t\ttempoDone = -1;\n\t\t\t\t\t\tfor (var el2 = startingRepeatElem; el2 < endingRepeatElem; el2++) {\n\t\t\t\t\t\t\tthisMeasure = elements[el2].measureNumber;\n\t\t\t\t\t\t\tif (tempoDone !== thisMeasure && this.tempoLocations[thisMeasure]) {\n\t\t\t\t\t\t\t\tbpm = this.tempoLocations[thisMeasure];\n\t\t\t\t\t\t\t\ttimeDivider = warp * this.getBeatLength() * bpm / 60;\n\t\t\t\t\t\t\t\ttempoDone = thisMeasure;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvar element2 = elements[el2].elem;\n\t\t\t\t\t\t\tret = this.addElementToEvents(eventHash, element2, voiceTimeMilliseconds, elements[el2].top, elements[el2].height, elements[el2].line, elements[el2].measureNumber, timeDivider, isTiedState, nextIsBar);\n\t\t\t\t\t\t\tisTiedState = ret.isTiedState;\n\t\t\t\t\t\t\tnextIsBar = ret.nextIsBar;\n\t\t\t\t\t\t\tvoiceTime += ret.duration;\n\t\t\t\t\t\t\tlastVoiceTimeMilliseconds = voiceTimeMilliseconds;\n\t\t\t\t\t\t\tvoiceTimeMilliseconds = Math.round(voiceTime * 1000);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (eventHash[\"event\" + lastVoiceTimeMilliseconds]) // This won't exist if it is the beginning of the next line. That's ok because we will just count the end of the last line as the end.\n\t\t\t\t\t\t\teventHash[\"event\" + lastVoiceTimeMilliseconds].endX = elements[endingRepeatElem].elem.x;\n\t\t\t\t\t\tnextIsBar = true;\n\t\t\t\t\t\tendingRepeatElem = -1;\n\t\t\t\t\t}\n\t\t\t\t\tif (startEnding)\n\t\t\t\t\t\tendingRepeatElem = elem;\n\t\t\t\t\tif (startRepeat)\n\t\t\t\t\t\tstartingRepeatElem = elem;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmaxVoiceTimeMilliseconds = Math.max(maxVoiceTimeMilliseconds, voiceTimeMilliseconds)\n\t\t}\n\t\t// now we have all the events, but if there are multiple voices then there may be events out of order or duplicated, so normalize it.\n\t\ttimingEvents = makeSortedArray(eventHash);\n\t\taddVerticalInfo(timingEvents);\n\t\taddEndPoints(this.lines, timingEvents)\n\t\ttimingEvents.push({ type: \"end\", milliseconds: maxVoiceTimeMilliseconds });\n\t\tthis.addUsefulCallbackInfo(timingEvents, bpm*warp);\n\t\treturn timingEvents;\n\t};\n\n\tthis.addUsefulCallbackInfo = function(timingEvents, bpm) {\n\t\tvar millisecondsPerMeasure = this.millisecondsPerMeasure(bpm);\n\t\tfor (var i = 0; i < timingEvents.length; i++) {\n\t\t\tvar ev = timingEvents[i];\n\t\t\tev.millisecondsPerMeasure = millisecondsPerMeasure;\n\t\t}\n\t};\n\n\tfunction skipTies(elements, index) {\n\t\twhile (index < elements.length && elements[index].left === null)\n\t\t\tindex++;\n\t\treturn elements[index];\n\t}\n\tfunction addEndPoints(lines, elements) {\n\t\tif (elements.length < 1)\n\t\t\treturn;\n\t\tfor (var i = 0; i < elements.length-1; i++) {\n\t\t\tvar el = elements[i];\n\t\t\tvar next = skipTies(elements, i+1);\n\t\t\tif (el.left !== null) {\n\t\t\t\t// If there is no left element that is because this is a tie so it should be skipped.\n\t\t\t\tvar endX = (next && el.top === next.top) ? next.left : lines[el.line].staffGroup.w;\n\t\t\t\t// If this is already set, it is because the notes aren't sequential here, like the next thing is a repeat bar line.\n\t\t\t\t// In that case, the right-most position is passed in. There could still be an intervening note in another voice, so always look for the closest position.\n\t\t\t\t// If there is a repeat that stays on the same line, the endX set above won't be right because the next note will be before. In that case, use the endX that was calculated.\n\t\t\t\tif  (el.endX !== undefined) {\n\t\t\t\t\tif (endX > el.left)\n\t\t\t\t\t\tel.endX = Math.min(el.endX, endX);\n\t\t\t\t} else\n\t\t\t\t\tel.endX = endX;\n\t\t\t}\n\t\t}\n\t\tvar lastEl = elements[elements.length-1];\n\t\tlastEl.endX = lines[lastEl.line].staffGroup.w;\n\t}\n\n\tthis.getBpm = function(tempo) {\n\t\tvar bpm;\n\t\tif (tempo) {\n\t\t\tbpm = tempo.bpm;\n\t\t\tvar beatLength = this.getBeatLength();\n\t\t\tvar statedBeatLength = tempo.duration && tempo.duration.length > 0 ? tempo.duration[0] : beatLength;\n\t\t\tbpm = bpm * statedBeatLength / beatLength;\n\t\t}\n\t\tif (!bpm) {\n\t\t\tbpm = 180;\n\t\t\t// Compensate for compound meter, where the beat isn't a beat.\n\t\t\tvar meter = this.getMeterFraction();\n\t\t\tif (meter && meter.num !== 3 && (meter.num % 3 === 0)) {\n\t\t\t\tbpm = 120;\n\t\t\t}\n\t\t}\n\t\treturn bpm;\n\t};\n\n\tthis.setTiming = function (bpm, measuresOfDelay) {\n\t\tmeasuresOfDelay = measuresOfDelay || 0;\n\t\tif (!this.engraver || !this.engraver.staffgroups) {\n\t\t\tconsole.log(\"setTiming cannot be called before the tune is drawn.\");\n\t\t\tthis.noteTimings = [];\n\t\t\treturn this.noteTimings;\n\t\t}\n\n\t\tvar tempo = this.metaText ? this.metaText.tempo : null;\n\t\tvar naturalBpm = this.getBpm(tempo);\n\t\tvar warp = 1;\n\t\tif (bpm) {\n\t\t\tif (tempo)\n\t\t\t\twarp = bpm / naturalBpm;\n\t\t} else\n\t\t\tbpm = naturalBpm;\n\n\t\t// Calculate the basic midi data. We only care about the qpm variable here.\n\t\t//this.setUpAudio({qpm: bpm});\n\n\t\tvar beatLength = this.getBeatLength();\n\t\tvar beatsPerSecond = bpm / 60;\n\n\t\tvar measureLength = this.getBarLength();\n\n\t\tvar startingDelay = measureLength / beatLength * measuresOfDelay / beatsPerSecond;\n\t\tif (startingDelay)\n\t\t\tstartingDelay -= this.getPickupLength() / beatLength / beatsPerSecond;\n\t\tvar timeDivider = beatLength * beatsPerSecond;\n\n\t\tthis.noteTimings = this.setupEvents(startingDelay, timeDivider, bpm, warp);\n\t\tif (this.noteTimings.length > 0) {\n\t\t\tthis.totalTime = this.noteTimings[this.noteTimings.length - 1].milliseconds / 1000;\n\t\t\tthis.totalBeats = this.totalTime * beatsPerSecond;\n\t\t} else {\n\t\t\tthis.totalTime = undefined;\n\t\t\tthis.totalBeats = undefined;\n\t\t}\n\t\treturn this.noteTimings;\n\t};\n\n\tthis.setUpAudio = function(options) {\n\t\tif (!options) options = {};\n\t\tvar seq = sequence(this, options);\n\t\treturn flatten(seq, options, this.formatting.percmap, this.formatting.midi);\n\t};\n\tthis.deline = function(options) {\n\t\treturn delineTune(this.lines, options);\n\t}\n\tthis.findSelectableElement = function(target) {\n\t\tif (this.engraver && this.engraver.selectables)\n\t\t\treturn this.engraver.findSelectableElement(target)\n\t\treturn null\n\t}\n\tthis.getSelectableArray = function() {\n\t\tif (this.engraver && this.engraver.selectables)\n\t\t\treturn this.engraver.selectables\n\t\treturn []\n\t}\n};\n\nmodule.exports = Tune;\n","function delineTune(inputLines, options) {\n\tif (!options) options = {};\n\tvar lineBreaks = !!options.lineBreaks;\n\tvar outputLines = [];\n\tvar inMusicLine = false;\n\tvar currentMeter = [];\n\tvar currentKey = [];\n\tvar currentClef = [];\n\tvar currentVocalFont = [];\n\tvar currentGChordFont = [];\n\tvar currentTripletFont = [];\n\tvar currentAnnotationFont = [];\n\tfor (var i = 0; i < inputLines.length; i++) {\n\t\tvar inputLine = inputLines[i];\n\t\tif (inputLine.staff) {\n\t\t\tif (inMusicLine && !inputLine.vskip) {\n\t\t\t\tvar outputLine = outputLines[outputLines.length-1];\n\t\t\t\t//findMismatchKeys(inputLine, outputLine, [\"staff\", \"staffGroup\"], \"line\", i)\n\t\t\t\tfor (var s = 0; s < outputLine.staff.length; s++) {\n\t\t\t\t\tvar inputStaff = inputLine.staff[s];\n\t\t\t\t\tvar outputStaff = outputLine.staff[s];\n\t\t\t\t\tif (inputStaff) {\n\t\t\t\t\t\tif (!objEqual(inputStaff.meter, currentMeter[s])) {\n\t\t\t\t\t\t\t// The meter changed for this line, otherwise it wouldn't have been set\n\t\t\t\t\t\t\taddMeterToVoices(inputStaff.meter, inputStaff.voices)\n\t\t\t\t\t\t\tcurrentMeter[s] = inputStaff.meter;\n\t\t\t\t\t\t\tdelete inputStaff.meter;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!objEqual(inputStaff.key, currentKey[s])) {\n\t\t\t\t\t\t\taddKeyToVoices(inputStaff.key, inputStaff.voices);\n\t\t\t\t\t\t\tcurrentKey[s] = inputStaff.key;\n\t\t\t\t\t\t\tdelete inputStaff.key;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (inputStaff.title)\n\t\t\t\t\t\t\toutputStaff.abbrevTitle = inputStaff.title;\n\t\t\t\t\t\tif (!objEqual(inputStaff.clef, currentClef[s])) {\n\t\t\t\t\t\t\taddClefToVoices(inputStaff.clef, inputStaff.voices);\n\t\t\t\t\t\t\tcurrentClef[s] = inputStaff.clef;\n\t\t\t\t\t\t\tdelete inputStaff.clef;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!objEqual(inputStaff.vocalfont, currentVocalFont[s])) {\n\t\t\t\t\t\t\taddFontToVoices(inputStaff.vocalfont, inputStaff.voices, 'vocalfont')\n\t\t\t\t\t\t\tcurrentVocalFont[s] = inputStaff.vocalfont;\n\t\t\t\t\t\t\tdelete inputStaff.vocalfont;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!objEqual(inputStaff.gchordfont, currentGChordFont[s])) {\n\t\t\t\t\t\t\taddFontToVoices(inputStaff.gchordfont, inputStaff.voices, 'gchordfont')\n\t\t\t\t\t\t\tcurrentGChordFont[s] = inputStaff.gchordfont;\n\t\t\t\t\t\t\tdelete inputStaff.gchordfont;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!objEqual(inputStaff.tripletfont, currentTripletFont[s])) {\n\t\t\t\t\t\t\taddFontToVoices(inputStaff.tripletfont, inputStaff.voices, 'tripletfont')\n\t\t\t\t\t\t\tcurrentTripletFont[s] = inputStaff.tripletfont;\n\t\t\t\t\t\t\tdelete inputStaff.tripletfont;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!objEqual(inputStaff.annotationfont, currentAnnotationFont[s])) {\n\t\t\t\t\t\t\taddFontToVoices(inputStaff.annotationfont, inputStaff.voices, 'annotationfont')\n\t\t\t\t\t\t\tcurrentAnnotationFont[s] = inputStaff.annotationfont;\n\t\t\t\t\t\t\tdelete inputStaff.annotationfont;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//findMismatchKeys(inputStaff, outputStaff, [\"voices\", \"title\", \"abbrevTitle\", \"barNumber\", \"meter\", \"key\", \"clef\", \"vocalfont\", \"gchordfont\", \"tripletfont\", \"annotationfont\"], \"staff\", i + ' ' + s)\n\t\t\t\t\tif (inputStaff) {\n\t\t\t\t\t\tfor (var v = 0; v < outputStaff.voices.length; v++) {\n\t\t\t\t\t\t\tvar outputVoice = outputStaff.voices[v];\n\t\t\t\t\t\t\tvar inputVoice = inputStaff.voices[v];\n\t\t\t\t\t\t\tif (lineBreaks)\n\t\t\t\t\t\t\t\toutputVoice.push({el_type: \"break\"});\n\t\t\t\t\t\t\tif (inputVoice)\n\t\t\t\t\t\t\t\toutputStaff.voices[v] = outputVoice.concat(inputVoice)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (var ii = 0; ii < inputLine.staff.length; ii++) {\n\t\t\t\t\tcurrentKey[ii] = inputLine.staff[ii].key;\n\t\t\t\t\tcurrentMeter[ii] = inputLine.staff[ii].meter;\n\t\t\t\t\tcurrentClef[ii] = inputLine.staff[ii].clef;\n\t\t\t\t}\n\t\t\t\t// copy this because we are going to change it and we don't want to change the original.\n\t\t\t\toutputLines.push(cloneLine(inputLine));\n\t\t\t}\n\t\t\tinMusicLine = true;\n\t\t} else {\n\t\t\tinMusicLine = false;\n\t\t\toutputLines.push(inputLine);\n\t\t}\n\t}\n\treturn outputLines;\n}\n// function findMismatchKeys(input, output, ignore, context, context2) {\n// \tif (!input) {\n// \t\treturn;\n// \t}\n// \tvar outputKeys = Object.keys(output);\n// \tvar inputKeys = Object.keys(input);\n// \tfor (var ii = 0; ii < ignore.length; ii++) {\n// \t\tif (outputKeys.indexOf(ignore[ii]) >= 0) {\n// \t\t\toutputKeys.splice(outputKeys.indexOf(ignore[ii]), 1);\n// \t\t}\n// \t\tif (inputKeys.indexOf(ignore[ii]) >= 0) {\n// \t\t\tinputKeys.splice(inputKeys.indexOf(ignore[ii]), 1);\n// \t\t}\n// \t}\n// \tif (inputKeys.join(\",\") !== outputKeys.join(\",\")) {\n// \t\tconsole.log(\"keys mismatch \"+context + ' ' + context2, input, output);\n// \t}\n// \tfor (var k = 0; k < inputKeys.length; k++) {\n// \t\tvar key = inputKeys[k];\n// \t\tif (ignore.indexOf(key) < 0) {\n// \t\t\tvar inputValue = JSON.stringify(input[key], replacer);\n// \t\t\tvar outputValue = JSON.stringify(output[key], replacer);\n// \t\t\tif (inputValue !== outputValue)\n// \t\t\t\tconsole.log(\"value mismatch \"+context + ' ' + context2 + ' ' + key, inputValue, outputValue)\n// \t\t}\n// \t}\n// }\nfunction replacer(key, value) {\n\t// Filtering out properties\n\tif (key === 'abselem') {\n\t\treturn 'abselem';\n\t}\n\treturn value;\n}\n\nfunction addMeterToVoices(meter, voices) {\n\tmeter.el_type = \"meter\";\n\tmeter.startChar = -1;\n\tmeter.endChar = -1;\n\tfor (var i = 0; i < voices.length; i++) {\n\t\tvoices[i].unshift(meter);\n\t}\n}\n\nfunction addKeyToVoices(key, voices) {\n\tkey.el_type = \"key\";\n\tkey.startChar = -1;\n\tkey.endChar = -1;\n\tfor (var i = 0; i < voices.length; i++) {\n\t\tvoices[i].unshift(key);\n\t}\n}\n\nfunction addClefToVoices(clef, voices) {\n\tclef.el_type = \"clef\";\n\tclef.startChar = -1;\n\tclef.endChar = -1;\n\tfor (var i = 0; i < voices.length; i++) {\n\t\tvoices[i].unshift(clef);\n\t}\n}\n\nfunction addFontToVoices(font, voices, type) {\n\tfont.el_type = \"font\";\n\tfont.type = type;\n\tfont.startChar = -1;\n\tfont.endChar = -1;\n\tfor (var i = 0; i < voices.length; i++) {\n\t\tvoices[i].unshift(font);\n\t}\n}\n\nfunction objEqual(input, output) {\n\tif (!input)\n\t\treturn true; // the default is whatever the old output is.\n\tvar inputValue = JSON.stringify(input, replacer);\n\tvar outputValue = JSON.stringify(output, replacer);\n\treturn inputValue === outputValue;\n}\n\nfunction cloneLine(line) {\n\tvar output = {};\n\tvar keys = Object.keys(line);\n\tfor (var i = 0; i < keys.length; i++) {\n\t\tif (keys[i] !== \"staff\")\n\t\t\toutput[keys[i]] = line[keys[i]];\n\t\telse {\n\t\t\toutput.staff = [];\n\t\t\tfor (var j = 0; j < line.staff.length; j++) {\n\t\t\t\tvar staff = {};\n\t\t\t\tvar keys2 = Object.keys(line.staff[j]);\n\t\t\t\tfor (var k = 0; k < keys2.length; k++) {\n\t\t\t\t\tif (keys2[k] !== \"voices\")\n\t\t\t\t\t\tstaff[keys2[k]] = line.staff[j][keys2[k]];\n\t\t\t\t\telse {\n\t\t\t\t\t\tstaff.voices = [];\n\t\t\t\t\t\tfor (var v = 0; v < line.staff[j].voices.length; v++) {\n\t\t\t\t\t\t\tstaff.voices.push([].concat(line.staff[j].voices[v]));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\toutput.staff.push(staff)\n\t\t\t}\n\t\t}\n\t}\n\treturn output;\n}\n\nmodule.exports = delineTune;\n","// abc_editor.js\n\n// window.ABCJS.Editor is the interface class for the area that contains the ABC text. It is responsible for\n// holding the text of the tune and calling the parser and the rendering engines.\n//\n// EditArea is an example of using a textarea as the control that is shown to the user. As long as\n// the same interface is used, window.ABCJS.Editor can use a different type of object.\n//\n// EditArea:\n// - constructor(textareaid)\n//\t\tThis contains the id of a textarea control that will be used.\n// - addSelectionListener(listener)\n//\t\tA callback class that contains the entry point fireSelectionChanged()\n// - addChangeListener(listener)\n//\t\tA callback class that contains the entry point fireChanged()\n// - getSelection()\n//\t\treturns the object { start: , end: } with the current selection in characters\n// - setSelection(start, end)\n//\t\tstart and end are the character positions that should be selected.\n// - getString()\n//\t\treturns the ABC text that is currently displayed.\n// - setString(str)\n//\t\tsets the ABC text that is currently displayed, and resets the initialText variable\n// - getElem()\n//\t\treturns the textarea element\n// - string initialText\n//\t\tContains the starting text. This can be compared against the current text to see if anything changed.\n//\n\n// Polyfill for CustomEvent for old IE versions\ntry {\n\tif (typeof window.CustomEvent !== \"function\") {\n\t\tvar CustomEvent = function (event, params) {\n\t\t\tparams = params || {bubbles: false, cancelable: false, detail: undefined};\n\t\t\tvar evt = document.createEvent('CustomEvent');\n\t\t\tevt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n\t\t\treturn evt;\n\t\t};\n\t\tCustomEvent.prototype = window.Event.prototype;\n\t\twindow.CustomEvent = CustomEvent;\n\t}\n} catch (e) {\n\t// if we aren't in a browser, this code will crash, but it is not needed then either.\n}\n\nvar EditArea = function(textareaid) {\n  if (typeof textareaid === \"string\")\n    this.textarea = document.getElementById(textareaid);\n  else\n    this.textarea = textareaid;\n  this.initialText = this.textarea.value;\n  this.isDragging = false;\n}\n\nEditArea.prototype.addSelectionListener = function(listener) {\n  this.textarea.onmousemove = function(ev) {\n\t  if (this.isDragging)\n\t    listener.fireSelectionChanged();\n  };\n};\n\nEditArea.prototype.addChangeListener = function(listener) {\n  this.changelistener = listener;\n  this.textarea.onkeyup = function() {\n    listener.fireChanged();\n  };\n  this.textarea.onmousedown = function() {\n\tthis.isDragging = true;\n    listener.fireSelectionChanged();\n  };\n  this.textarea.onmouseup = function() {\n\tthis.isDragging = false;\n    listener.fireChanged();\n  };\n  this.textarea.onchange = function() {\n    listener.fireChanged();\n  };\n};\n\n//TODO won't work under IE?\nEditArea.prototype.getSelection = function() {\n  return {start: this.textarea.selectionStart, end: this.textarea.selectionEnd};\n};\n\nEditArea.prototype.setSelection = function(start, end) {\n\tif(this.textarea.setSelectionRange)\n\t   this.textarea.setSelectionRange(start, end);\n\telse if(this.textarea.createTextRange) {\n\t\t// For IE8\n\t   var e = this.textarea.createTextRange();\n\t   e.collapse(true);\n\t   e.moveEnd('character', end);\n\t   e.moveStart('character', start);\n\t   e.select();\n\t}\n  this.textarea.focus();\n};\n\nEditArea.prototype.getString = function() {\n  return this.textarea.value;\n};\n\nEditArea.prototype.setString = function(str) {\n  this.textarea.value = str;\n  this.initialText = this.getString();\n  if (this.changelistener) {\n    this.changelistener.fireChanged();\n  }\n};\n\nEditArea.prototype.getElem = function() {\n  return this.textarea;\n};\n\nmodule.exports = EditArea;\n","// window.ABCJS.Editor:\n//\n// constructor(editarea, params)\n//\t\tif editarea is a string, then it is an HTML id of a textarea control.\n//\t\tOtherwise, it should be an instantiation of an object that expresses the EditArea interface.\n//\n//\t\tparams is a hash of:\n//\t\tcanvas_id: or paper_id: HTML id to draw in. If not present, then the drawing happens just below the editor.\n//\t\tgenerate_midi: if present, then midi is generated.\n//\t\tmidi_id: if present, the HTML id to place the midi control. Otherwise it is placed in the same div as the paper.\n//\t\tmidi_download_id: if present, the HTML id to place the midi download link. Otherwise it is placed in the same div as the paper.\n//\t\tgenerate_warnings: if present, then parser warnings are displayed on the page.\n//\t\twarnings_id: if present, the HTML id to place the warnings. Otherwise they are placed in the same div as the paper.\n//\t\tonchange: if present, the callback function to call whenever there has been a change.\n//\t\tgui: if present, the paper can send changes back to the editor (presumably because the user changed something directly.)\n//\t\tparser_options: options to send to the parser engine.\n//\t\tmidi_options: options to send to the midi engine.\n//\t\trender_options: options to send to the render engine.\n//\t\tindicate_changed: the dirty flag is set if this is true.\n//\n// - setReadOnly(bool)\n//\t\tadds or removes the class abc_textarea_readonly, and adds or removes the attribute readonly=yes\n// - setDirtyStyle(bool)\n//\t\tadds or removes the class abc_textarea_dirty\n// - modelChanged()\n//\t\tCalled when the model has been changed to trigger re-rendering\n// - parseABC()\n//\t\tCalled internally by fireChanged()\n//\t\treturns true if there has been a change since last call.\n// - updateSelection()\n//\t\tCalled when the user has changed the selection. This calls the engraver to show the selection.\n// - fireSelectionChanged()\n//\t\tCalled by the textarea object when the user has changed the selection.\n// - paramChanged(engraverparams)\n//\t\tCalled to signal that the engraver params have changed, so re-rendering should occur.\n// - fireChanged()\n//\t\tCalled by the textarea object when the user has changed something.\n// - setNotDirty()\n//\t\tCalled by the client app to reset the dirty flag\n// - isDirty()\n//\t\tReturns true or false, whether the textarea contains the same text that it started with.\n// - highlight(abcelem)\n//\t\tCalled by the engraver to highlight an area.\n// - pause(bool)\n//\t\tStops the automatic rendering when the user is typing.\n//\nvar parseCommon = require('../parse/abc_common');\nvar SynthController = require('../synth/synth-controller');\nvar supportsAudio = require('../synth/supports-audio');\nvar renderAbc = require('../api/abc_tunebook_svg');\nvar EditArea = require('./abc_editarea');\n\nfunction gatherAbcParams(params) {\n\t// There used to be a bunch of ways parameters can be passed in. This just simplifies it.\n\tvar abcjsParams = {};\n\tvar key;\n\tif (params.abcjsParams) {\n\t\tfor (key in params.abcjsParams) {\n\t\t\tif (params.abcjsParams.hasOwnProperty(key)) {\n\t\t\t\tabcjsParams[key] = params.abcjsParams[key];\n\t\t\t}\n\t\t}\n\t}\n\tif (params.midi_options) {\n\t\tfor (key in params.midi_options) {\n\t\t\tif (params.midi_options.hasOwnProperty(key)) {\n\t\t\t\tabcjsParams[key] = params.midi_options[key];\n\t\t\t}\n\t\t}\n\t}\n\tif (params.parser_options) {\n\t\tfor (key in params.parser_options) {\n\t\t\tif (params.parser_options.hasOwnProperty(key)) {\n\t\t\t\tabcjsParams[key] = params.parser_options[key];\n\t\t\t}\n\t\t}\n\t}\n\tif (params.render_options) {\n\t\tfor (key in params.render_options) {\n\t\t\tif (params.render_options.hasOwnProperty(key)) {\n\t\t\t\tabcjsParams[key] = params.render_options[key];\n\t\t\t}\n\t\t}\n\t}\n\t/*\n\tif (params.tablature_options) {\n\t\tabcjsParams['tablatures'] = params.tablature_options;\n\t}\n\t*/\n\tif (abcjsParams.tablature) {\n\t\tif (params.warnings_id) {\n\t\t\t// store for plugin error handling\n\t\t\tabcjsParams.tablature.warnings_id = params.warnings_id;\n\t\t}\n\t}\n\treturn abcjsParams;\n}\n\nvar Editor = function(editarea, params) {\n\t// Copy all the options that will be passed through\n\tthis.abcjsParams = gatherAbcParams(params);\n\n\tif (params.indicate_changed)\n\t\tthis.indicate_changed = true;\n  if (typeof editarea === \"string\") {\n    this.editarea = new EditArea(editarea);\n  } else {\n    this.editarea = editarea;\n  }\n  this.editarea.addSelectionListener(this);\n  this.editarea.addChangeListener(this);\n\n  if (params.canvas_id) {\n    this.div = params.canvas_id;\n  } else if (params.paper_id) {\n    this.div = params.paper_id;\n  } else {\n    this.div = document.createElement(\"DIV\");\n    this.editarea.getElem().parentNode.insertBefore(this.div, this.editarea.getElem());\n  }\n  if (typeof this.div === 'string')\n\t  this.div = document.getElementById(this.div);\n\n  if (params.selectionChangeCallback) {\n  \tthis.selectionChangeCallback = params.selectionChangeCallback;\n  }\n\n  this.clientClickListener = this.abcjsParams.clickListener;\n  this.abcjsParams.clickListener = this.highlight.bind(this);\n\n  if (params.synth) {\n  \tif (supportsAudio()) {\n\t    this.synth = {\n\t\t    el: params.synth.el,\n\t\t    cursorControl: params.synth.cursorControl,\n\t\t    options: params.synth.options\n\t    };\n    }\n  }\n\t// If the user wants midi, then store the elements that it will be written to. The element could either be passed in as an id,\n\t// an element, or nothing. If nothing is passed in, then just put the midi on top of the generated music.\n\tif (params.generate_midi) {\n\t  \tthis.generate_midi = params.generate_midi;\n\t\tif (this.abcjsParams.generateDownload) {\n\t\t\tif (typeof params.midi_download_id === 'string')\n\t\t\t\tthis.downloadMidi = document.getElementById(params.midi_download_id);\n\t\t\telse if (params.midi_download_id) // assume, if the var is not a string it is an element. If not, it will crash soon enough.\n\t\t\t\tthis.downloadMidi = params.midi_download_id;\n\t\t}\n\t\tif (this.abcjsParams.generateInline !== false) { // The default for this is true, so undefined is also true.\n\t\t\tif (typeof params.midi_id === 'string')\n\t\t\t\tthis.inlineMidi = document.getElementById(params.midi_id);\n\t\t\telse if (params.midi_id) // assume, if the var is not a string it is an element. If not, it will crash soon enough.\n\t\t\t\tthis.inlineMidi = params.midi_id;\n\t\t}\n\t}\n\n  if (params.warnings_id) {\n  \tif (typeof(params.warnings_id) === \"string\")\n      this.warningsdiv = document.getElementById(params.warnings_id);\n  \telse\n\t\tthis.warningsdiv = params.warnings_id;\n  } else if (params.generate_warnings) {\n\t  this.warningsdiv = document.createElement(\"div\");\n\t  this.div.parentNode.insertBefore(this.warningsdiv, this.div);\n  }\n\n  this.onchangeCallback = params.onchange;\n\n  this.currentAbc = \"\";\n  this.tunes = [];\n  this.bReentry = false;\n  this.parseABC();\n  this.modelChanged();\n\n  this.addClassName = function(element, className) {\n    var hasClassName = function(element, className) {\n      var elementClassName = element.className;\n      return (elementClassName.length > 0 && (elementClassName === className ||\n        new RegExp(\"(^|\\\\s)\" + className + \"(\\\\s|$)\").test(elementClassName)));\n    };\n\n    if (!hasClassName(element, className))\n      element.className += (element.className ? ' ' : '') + className;\n    return element;\n  };\n\n  this.removeClassName = function(element, className) {\n    element.className = parseCommon.strip(element.className.replace(\n      new RegExp(\"(^|\\\\s+)\" + className + \"(\\\\s+|$)\"), ' '));\n    return element;\n  };\n\n  this.setReadOnly = function(readOnly) {\n\t  var readonlyClass = 'abc_textarea_readonly';\n\t  var el = this.editarea.getElem();\n    if (readOnly) {\n      el.setAttribute('readonly', 'yes');\n\t  this.addClassName(el, readonlyClass);\n\t} else {\n      el.removeAttribute('readonly');\n\t  this.removeClassName(el, readonlyClass);\n    }\n  };\n};\n\nEditor.prototype.redrawMidi = function() {\n\tif (this.generate_midi && !this.midiPause) {\n\t\tvar event = new window.CustomEvent(\"generateMidi\", {\n\t\t\tdetail: {\n\t\t\t\ttunes: this.tunes,\n\t\t\t\tabcjsParams: this.abcjsParams,\n\t\t\t\tdownloadMidiEl: this.downloadMidi,\n\t\t\t\tinlineMidiEl: this.inlineMidi,\n\t\t\t\tengravingEl: this.div\n\t\t\t}\n\t\t});\n\t\twindow.dispatchEvent(event);\n\t}\n\tif (this.synth) {\n\t\tvar userAction = this.synth.synthControl; // Can't really tell if there was a user action before drawing, but we assume that if the synthControl was created already there was a user action.\n\t\tif (!this.synth.synthControl) {\n\t\t\tthis.synth.synthControl = new SynthController();\n\t\t\tthis.synth.synthControl.load(this.synth.el, this.synth.cursorControl, this.synth.options);\n\t\t}\n\t\tthis.synth.synthControl.setTune(this.tunes[0], userAction, this.synth.options);\n\t}\n};\n\nEditor.prototype.modelChanged = function() {\n  if (this.bReentry)\n    return; // TODO is this likely? maybe, if we rewrite abc immediately w/ abc2abc\n\tthis.bReentry = true;\n\ttry {\n\t\tthis.timerId = null;\n\t\tif (this.synth && this.synth.synthControl)\n\t\t\tthis.synth.synthControl.disable(true);\n\n\t\tthis.tunes = renderAbc(this.div, this.currentAbc, this.abcjsParams);\n\t\tif (this.tunes.length > 0) {\n\t\t\tthis.warnings = this.tunes[0].warnings;\n\t\t}\n\t\tthis.redrawMidi();\n\t} catch(error) {\n\t\tconsole.error(\"ABCJS error: \", error);\n\t\tif (!this.warnings)\n\t\t\tthis.warnings = [];\n\t\tthis.warnings.push(error.message);\n\t}\n\n  if (this.warningsdiv) {\n    this.warningsdiv.innerHTML = (this.warnings) ? this.warnings.join(\"<br />\") : \"No errors\";\n  }\n  this.updateSelection();\n  this.bReentry = false;\n};\n\n// Call this to reparse in response to the client changing the parameters on the fly\nEditor.prototype.paramChanged = function(engraverParams) {\n\tif (engraverParams) {\n\t\tfor (var key in engraverParams) {\n\t\t\tif (engraverParams.hasOwnProperty(key)) {\n\t\t\t\tthis.abcjsParams[key] = engraverParams[key];\n\t\t\t}\n\t\t}\n\t}\n\tthis.currentAbc = \"\";\n\tthis.fireChanged();\n};\n\nEditor.prototype.synthParamChanged = function(options) {\n\tif (!this.synth)\n\t\treturn;\n\tthis.synth.options = {};\n\tif (options) {\n\t\tfor (var key in options) {\n\t\t\tif (options.hasOwnProperty(key)) {\n\t\t\t\tthis.synth.options[key] = options[key];\n\t\t\t}\n\t\t}\n\t}\n\tthis.currentAbc = \"\";\n\tthis.fireChanged();\n};\n\n// return true if the model has changed\nEditor.prototype.parseABC = function() {\n  var t = this.editarea.getString();\n  if (t===this.currentAbc) {\n    this.updateSelection();\n    return false;\n  }\n\n  this.currentAbc = t;\n  return true;\n};\n\nEditor.prototype.updateSelection = function() {\n  var selection = this.editarea.getSelection();\n  try {\n  \tif (this.tunes.length > 0 && this.tunes[0].engraver)\n\t  this.tunes[0].engraver.rangeHighlight(selection.start, selection.end);\n  } catch (e) {} // maybe printer isn't defined yet?\n\tif (this.selectionChangeCallback)\n\t\tthis.selectionChangeCallback(selection.start, selection.end);\n};\n\n// Called when the textarea's selection is in the process of changing (after mouse down, dragging, or keyboard arrows)\nEditor.prototype.fireSelectionChanged = function() {\n  this.updateSelection();\n};\n\nEditor.prototype.setDirtyStyle = function(isDirty) {\n\tif (this.indicate_changed === undefined)\n\t\treturn;\n  var addClassName = function(element, className) {\n    var hasClassName = function(element, className) {\n      var elementClassName = element.className;\n      return (elementClassName.length > 0 && (elementClassName === className ||\n        new RegExp(\"(^|\\\\s)\" + className + \"(\\\\s|$)\").test(elementClassName)));\n    };\n\n    if (!hasClassName(element, className))\n      element.className += (element.className ? ' ' : '') + className;\n    return element;\n  };\n\n  var removeClassName = function(element, className) {\n    element.className = parseCommon.strip(element.className.replace(\n      new RegExp(\"(^|\\\\s+)\" + className + \"(\\\\s+|$)\"), ' '));\n    return element;\n  };\n\n\tvar readonlyClass = 'abc_textarea_dirty';\n\tvar el = this.editarea.getElem();\n\tif (isDirty) {\n\t\taddClassName(el, readonlyClass);\n\t} else {\n\t\tremoveClassName(el, readonlyClass);\n    }\n};\n\n// call when the textarea alerts us that the abc text is changed and needs re-parsing\nEditor.prototype.fireChanged = function() {\n  if (this.bIsPaused)\n    return;\n  if (this.parseABC()) {\n    var self = this;\n    if (this.timerId)\t// If the user is still typing, cancel the update\n      clearTimeout(this.timerId);\n    this.timerId = setTimeout(function () {\n      self.modelChanged();\n    }, 300);\t// Is this a good compromise between responsiveness and not redrawing too much?\n\t  var isDirty = this.isDirty();\n\t  if (this.wasDirty !== isDirty) {\n\t\t  this.wasDirty = isDirty;\n\t\t  this.setDirtyStyle(isDirty);\n\t  }\n\t  if (this.onchangeCallback)\n\t\t  this.onchangeCallback(this);\n\t  }\n};\n\nEditor.prototype.setNotDirty = function() {\n\tthis.editarea.initialText = this.editarea.getString();\n\tthis.wasDirty = false;\n\tthis.setDirtyStyle(false);\n};\n\nEditor.prototype.isDirty = function() {\n\tif (this.indicate_changed === undefined)\n\t\treturn false;\n\treturn this.editarea.initialText !== this.editarea.getString();\n};\n\nEditor.prototype.highlight = function(abcelem, tuneNumber, classes, analysis, drag, mouseEvent) {\n\t// TODO-PER: The marker appears to get off by one for each tune parsed. I'm not sure why, but adding the tuneNumber in corrects it for the time being.\n//\tvar offset = (tuneNumber !== undefined) ? this.startPos[tuneNumber] + tuneNumber : 0;\n\n  this.editarea.setSelection(abcelem.startChar, abcelem.endChar);\n\tif (this.selectionChangeCallback)\n\t\tthis.selectionChangeCallback(abcelem.startChar, abcelem.endChar);\n\tif (this.clientClickListener)\n\t\tthis.clientClickListener(abcelem, tuneNumber, classes, analysis, drag, mouseEvent);\n};\n\nEditor.prototype.pause = function(shouldPause) {\n\tthis.bIsPaused = shouldPause;\n\tif (!shouldPause)\n\t\tthis.fireChanged();\n};\n\nEditor.prototype.millisecondsPerMeasure = function() {\n\tif (!this.synth || !this.synth.synthControl || !this.synth.synthControl.visualObj)\n\t\treturn 0;\n\treturn this.synth.synthControl.visualObj.millisecondsPerMeasure();\n};\n\nEditor.prototype.pauseMidi = function(shouldPause) {\n\tthis.midiPause = shouldPause;\n\tif (!shouldPause)\n\t\tthis.redrawMidi();\n};\n\nmodule.exports = Editor;\n","//    abc_midi_create.js: Turn a linear series of events into a midi file.\n\nvar rendererFactory = require('../synth/abc_midi_renderer');\n\nvar create;\n\n(function() {\n\t\"use strict\";\n\n\tvar baseDuration = 480*4; // nice and divisible, equals 1 whole note\n\n\tcreate = function(abcTune, options) {\n\t\tif (options === undefined) options = {};\n\t\tvar commands = abcTune.setUpAudio(options);\n\t\tvar midi = rendererFactory();\n\n\t\tvar title = abcTune.metaText ? abcTune.metaText.title : undefined;\n\t\tif (title && title.length > 128)\n\t\t\ttitle = title.substring(0,124) + '...';\n\t\tvar key = abcTune.getKeySignature();\n\t\tvar time = abcTune.getMeterFraction();\n\t\tvar beatsPerSecond = commands.tempo / 60;\n\t\t//var beatLength = abcTune.getBeatLength();\n\t\tmidi.setGlobalInfo(commands.tempo, title, key, time);\n\n\t\tfor (var i = 0; i < commands.tracks.length; i++) {\n\t\t\tmidi.startTrack();\n\t\t\tvar notePlacement = {};\n\t\t\tfor (var j = 0; j < commands.tracks[i].length; j++) {\n\t\t\t\tvar event = commands.tracks[i][j];\n\t\t\t\tswitch (event.cmd) {\n\t\t\t\t\tcase 'text':\n\t\t\t\t\t\tmidi.setText(event.type, event.text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'program':\n\t\t\t\t\t\tvar pan = 0;\n\t\t\t\t\t\tif (options.pan && options.pan.length > i)\n\t\t\t\t\t\t\tpan = options.pan[i];\n\t\t\t\t\t\tif (event.instrument === 128) {\n\t\t\t\t\t\t\t// If we're using the percussion voice, change to Channel 10\n\t\t\t\t\t\t\tmidi.setChannel(9, pan);\n\t\t\t\t\t\t\tmidi.setInstrument(0);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tmidi.setChannel(event.channel, pan);\n\t\t\t\t\t\t\tmidi.setInstrument(event.instrument);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'note':\n\t\t\t\t\t\tvar gapLengthInBeats = event.gap * beatsPerSecond;\n\t\t\t\t\t\tvar start = event.start;\n\t\t\t\t\t\t// The staccato and legato are indicated by event.gap.\n\t\t\t\t\t\t// event.gap is in seconds but the durations are in whole notes.\n\t\t\t\t\t\tvar end = start + event.duration - gapLengthInBeats;\n\t\t\t\t\t\tif (!notePlacement[start])\n\t\t\t\t\t\t\tnotePlacement[start] = [];\n\t\t\t\t\t\tnotePlacement[start].push({ pitch: event.pitch, volume: event.volume, cents: event.cents });\n\t\t\t\t\t\tif (!notePlacement[end])\n\t\t\t\t\t\t\tnotePlacement[end] = [];\n\t\t\t\t\t\tnotePlacement[end].push({ pitch: event.pitch, volume: 0 });\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.log(\"MIDI create Unknown: \" + event.cmd);\n\t\t\t\t}\n\t\t\t}\n\t\t\taddNotes(midi, notePlacement, baseDuration);\n\t\t\tmidi.endTrack();\n\t\t}\n\n\t\treturn midi.getData();\n\t};\n\n\tfunction addNotes(midi, notePlacement, baseDuration) {\n\t\tvar times = Object.keys(notePlacement);\n\t\tfor (var h = 0; h < times.length; h++)\n\t\t\ttimes[h] = parseFloat(times[h]);\n\t\ttimes.sort(function(a,b) {\n\t\t\treturn a - b;\n\t\t});\n\t\tvar lastTime = 0;\n\t\tfor (var i = 0; i < times.length; i++) {\n\t\t\tvar events = notePlacement[times[i]];\n\t\t\tif (times[i] > lastTime) {\n\t\t\t\tvar distance = (times[i] - lastTime) * baseDuration;\n\t\t\t\tmidi.addRest(distance);\n\t\t\t\tlastTime = times[i];\n\t\t\t}\n\t\t\tfor (var j = 0; j < events.length; j++) {\n\t\t\t\tvar event = events[j];\n\t\t\t\tif (event.volume) {\n\t\t\t\t\tmidi.startNote(event.pitch, event.volume, event.cents);\n\t\t\t\t} else {\n\t\t\t\t\tmidi.endNote(event.pitch);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n})();\n\nmodule.exports = create;\n","//    abc_parse.js: parses a string representing ABC Music Notation into a usable internal structure.\n\nvar parseCommon = {};\n\nparseCommon.clone = function(source) {\n\tvar destination = {};\n\tfor (var property in source)\n\t\tif (source.hasOwnProperty(property))\n\t\t\tdestination[property] = source[property];\n\treturn destination;\n};\n\nparseCommon.cloneArray = function(source) {\n\tvar destination = [];\n\tfor (var i = 0; i < source.length; i++) {\n\t\tdestination.push(parseCommon.clone(source[i]));\n\t}\n\treturn destination;\n};\n\nparseCommon.cloneHashOfHash = function(source) {\n\tvar destination = {};\n\tfor (var property in source)\n\t\tif (source.hasOwnProperty(property))\n\t\t\tdestination[property] = parseCommon.clone(source[property]);\n\treturn destination;\n};\n\nparseCommon.cloneHashOfArrayOfHash = function(source) {\n\tvar destination = {};\n\tfor (var property in source)\n\t\tif (source.hasOwnProperty(property))\n\t\t\tdestination[property] = parseCommon.cloneArray(source[property]);\n\treturn destination;\n};\n\nparseCommon.strip = function(str) {\n\treturn str.replace(/^\\s+/, '').replace(/\\s+$/, '');\n};\n\nparseCommon.startsWith = function(str, pattern) {\n\treturn str.indexOf(pattern) === 0;\n};\n\nparseCommon.endsWith = function(str, pattern) {\n\tvar d = str.length - pattern.length;\n\treturn d >= 0 && str.lastIndexOf(pattern) === d;\n};\n\nparseCommon.last = function(arr) {\n\tif (arr.length === 0)\n\t\treturn null;\n\treturn arr[arr.length-1];\n};\n\n\nmodule.exports = parseCommon;\n","//    abc_parse.js: parses a string representing ABC Music Notation into a usable internal structure.\n\nvar parseCommon = require('./abc_common');\nvar parseDirective = require('./abc_parse_directive');\nvar ParseHeader = require('./abc_parse_header');\nvar ParseMusic = require('./abc_parse_music');\nvar Tokenizer = require('./abc_tokenizer');\nvar wrap = require('./wrap_lines');\n\nvar Tune = require('../data/abc_tune');\nvar TuneBuilder = require('../parse/tune-builder');\n\nvar Parse = function() {\n\t\"use strict\";\n\tvar tune = new Tune();\n\tvar tuneBuilder = new TuneBuilder(tune);\n\tvar tokenizer;\n\tvar wordsContinuation = '';\n\tvar symbolContinuation = '';\n\n\tthis.getTune = function() {\n\t\tvar t = {\n\t\t\tformatting: tune.formatting,\n\t\t\tlines: tune.lines,\n\t\t\tmedia: tune.media,\n\t\t\tmetaText: tune.metaText,\n\t\t\tmetaTextInfo: tune.metaTextInfo,\n\t\t\tversion: tune.version,\n\n\t\t\taddElementToEvents: tune.addElementToEvents,\n\t\t\taddUsefulCallbackInfo: tune.addUsefulCallbackInfo,\n\t\t\tgetTotalTime: tune.getTotalTime,\n\t\t\tgetTotalBeats: tune.getTotalBeats,\n\t\t\tgetBarLength: tune.getBarLength,\n\t\t\tgetBeatLength: tune.getBeatLength,\n\t\t\tgetBeatsPerMeasure: tune.getBeatsPerMeasure,\n\t\t\tgetBpm: tune.getBpm,\n\t\t\tgetMeter: tune.getMeter,\n\t\t\tgetMeterFraction: tune.getMeterFraction,\n\t\t\tgetPickupLength: tune.getPickupLength,\n\t\t\tgetKeySignature: tune.getKeySignature,\n\t\t\tgetElementFromChar: tune.getElementFromChar,\n\t\t\tmakeVoicesArray: tune.makeVoicesArray,\n\t\t\tmillisecondsPerMeasure: tune.millisecondsPerMeasure,\n\t\t\tsetupEvents: tune.setupEvents,\n\t\t\tsetTiming: tune.setTiming,\n\t\t\tsetUpAudio: tune.setUpAudio,\n\t\t\tdeline: tune.deline,\n\t\t\tfindSelectableElement: tune.findSelectableElement,\n\t\t\tgetSelectableArray: tune.getSelectableArray,\n\t\t};\n\t\tif (tune.lineBreaks)\n\t\t\tt.lineBreaks = tune.lineBreaks;\n\t\tif (tune.visualTranspose)\n\t\t\tt.visualTranspose = tune.visualTranspose;\n\t\treturn t;\n\t};\n\n\tfunction addPositioning(el, type, value) {\n\t\tif (!el.positioning) el.positioning = {};\n\t\tel.positioning[type] = value;\n\t}\n\n\tfunction addFont(el, type, value) {\n\t\tif (!el.fonts) el.fonts = {};\n\t\tel.fonts[type] = value;\n\t}\n\n\tvar multilineVars = {\n\t\treset: function() {\n\t\t\tfor (var property in this) {\n\t\t\t\tif (this.hasOwnProperty(property) && typeof this[property] !== \"function\") {\n\t\t\t\t\tdelete this[property];\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.iChar = 0;\n\t\t\tthis.key = {accidentals: [], root: 'none', acc: '', mode: '' };\n\t\t\tthis.meter = null; // if no meter is specified, free meter is assumed\n\t\t\tthis.origMeter = null;\t// this is for new voices that are created after we set the meter.\n\t\t\tthis.hasMainTitle = false;\n\t\t\tthis.default_length = 0.125;\n\t\t\tthis.clef = { type: 'treble', verticalPos: 0 };\n\t\t\tthis.octave = 0;\n\t\t\tthis.next_note_duration = 0;\n\t\t\tthis.start_new_line = true;\n\t\t\tthis.is_in_header = true;\n\t\t\tthis.partForNextLine = {};\n\t\t\tthis.tempoForNextLine = [];\n\t\t\tthis.havent_set_length = true;\n\t\t\tthis.voices = {};\n\t\t\tthis.staves = [];\n\t\t\tthis.macros = {};\n\t\t\tthis.currBarNumber = 1;\n\t\t\tthis.barCounter = {};\n\t\t\tthis.ignoredDecorations = [];\n\t\t\tthis.score_is_present = false;\t// Can't have original V: lines when there is the score directive\n\t\t\tthis.inEnding = false;\n\t\t\tthis.inTie = [];\n\t\t\tthis.inTieChord = {};\n\t\t\tthis.vocalPosition = \"auto\";\n\t\t\tthis.dynamicPosition = \"auto\";\n\t\t\tthis.chordPosition = \"auto\";\n\t\t\tthis.ornamentPosition = \"auto\";\n\t\t\tthis.volumePosition = \"auto\";\n\t\t\tthis.openSlurs = [];\n\t\t\tthis.freegchord = false;\n\t\t\tthis.endingHoldOver = {};\n\t\t},\n\t\tdifferentFont: function(type, defaultFonts) {\n\t\t\tif (this[type].decoration !== defaultFonts[type].decoration) return true;\n\t\t\tif (this[type].face !== defaultFonts[type].face) return true;\n\t\t\tif (this[type].size !== defaultFonts[type].size) return true;\n\t\t\tif (this[type].style !== defaultFonts[type].style) return true;\n\t\t\tif (this[type].weight !== defaultFonts[type].weight) return true;\n\t\t\treturn false;\n\t\t},\n\t\taddFormattingOptions: function(el, defaultFonts, elType) {\n\t\t\tif (elType === 'note') {\n\t\t\t\tif (this.vocalPosition !== 'auto') addPositioning(el, 'vocalPosition', this.vocalPosition);\n\t\t\t\tif (this.dynamicPosition !== 'auto') addPositioning(el, 'dynamicPosition', this.dynamicPosition);\n\t\t\t\tif (this.chordPosition !== 'auto') addPositioning(el, 'chordPosition', this.chordPosition);\n\t\t\t\tif (this.ornamentPosition !== 'auto') addPositioning(el, 'ornamentPosition', this.ornamentPosition);\n\t\t\t\tif (this.volumePosition !== 'auto') addPositioning(el, 'volumePosition', this.volumePosition);\n\t\t\t\tif (this.differentFont(\"annotationfont\", defaultFonts)) addFont(el, 'annotationfont', this.annotationfont);\n\t\t\t\tif (this.differentFont(\"gchordfont\", defaultFonts)) addFont(el, 'gchordfont', this.gchordfont);\n\t\t\t\tif (this.differentFont(\"vocalfont\", defaultFonts)) addFont(el, 'vocalfont', this.vocalfont);\n\t\t\t\tif (this.differentFont(\"tripletfont\", defaultFonts)) addFont(el, 'tripletfont', this.tripletfont);\n\t\t\t} else if (elType === 'bar') {\n\t\t\t\tif (this.dynamicPosition !== 'auto') addPositioning(el, 'dynamicPosition', this.dynamicPosition);\n\t\t\t\tif (this.chordPosition !== 'auto') addPositioning(el, 'chordPosition', this.chordPosition);\n\t\t\t\tif (this.ornamentPosition !== 'auto') addPositioning(el, 'ornamentPosition', this.ornamentPosition);\n\t\t\t\tif (this.volumePosition !== 'auto') addPositioning(el, 'volumePosition', this.volumePosition);\n\t\t\t\tif (this.differentFont(\"measurefont\", defaultFonts)) addFont(el, 'measurefont', this.measurefont);\n\t\t\t\tif (this.differentFont(\"repeatfont\", defaultFonts)) addFont(el, 'repeatfont', this.repeatfont);\n\t\t\t}\n\t\t},\n\t\tduplicateStartEndingHoldOvers: function() {\n\t\t\tthis.endingHoldOver = {\n\t\t\t\tinTie: [],\n\t\t\t\tinTieChord: {}\n\t\t\t};\n\t\t\tfor (var i = 0; i < this.inTie.length; i++) {\n\t\t\t\tthis.endingHoldOver.inTie.push([]);\n\t\t\t\tif (this.inTie[i]) { // if a voice is suppressed there might be a gap in the array.\n\t\t\t\t\tfor (var j = 0; j < this.inTie[i].length; j++) {\n\t\t\t\t\t\tthis.endingHoldOver.inTie[i].push(this.inTie[i][j]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (var key in this.inTieChord) {\n\t\t\t\tif (this.inTieChord.hasOwnProperty(key))\n\t\t\t\t\tthis.endingHoldOver.inTieChord[key] = this.inTieChord[key];\n\t\t\t}\n\t\t},\n\t\trestoreStartEndingHoldOvers: function() {\n\t\t\tif (!this.endingHoldOver.inTie)\n\t\t\t\treturn;\n\t\t\tthis.inTie = [];\n\t\t\tthis.inTieChord = {};\n\t\t\tfor (var i = 0; i < this.endingHoldOver.inTie.length; i++) {\n\t\t\t\tthis.inTie.push([]);\n\t\t\t\tfor (var j = 0; j < this.endingHoldOver.inTie[i].length; j++) {\n\t\t\t\t\tthis.inTie[i].push(this.endingHoldOver.inTie[i][j]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (var key in this.endingHoldOver.inTieChord) {\n\t\t\t\tif (this.endingHoldOver.inTieChord.hasOwnProperty(key))\n\t\t\t\t\tthis.inTieChord[key] = this.endingHoldOver.inTieChord[key];\n\t\t\t}\n\t\t},\n\t};\n\n\tvar addWarning = function(str) {\n\t\tif (!multilineVars.warnings)\n\t\t\tmultilineVars.warnings = [];\n\t\tmultilineVars.warnings.push(str);\n\t};\n\n\tvar addWarningObject = function(warningObject) {\n\t\tif (!multilineVars.warningObjects)\n\t\t\tmultilineVars.warningObjects = [];\n\t\tmultilineVars.warningObjects.push(warningObject);\n\t};\n\n\tvar encode = function(str) {\n\t\tvar ret = str.replace(/\\x12/g, ' ');\n\t\tret = ret.replace(/&/g, '&amp;');\n\t\tret = ret.replace(/</g, '&lt;');\n\t\treturn ret.replace(/>/g, '&gt;');\n\t};\n\n\tvar warn = function(str, line, col_num) {\n\t\tif (!line) line = \" \";\n\t\tvar bad_char = line[col_num];\n\t\tif (bad_char === ' ' || !bad_char)\n\t\t\tbad_char = \"SPACE\";\n\t\tvar clean_line = encode(line.substring(col_num - 64, col_num)) + '<span style=\"text-decoration:underline;font-size:1.3em;font-weight:bold;\">' + bad_char + '</span>' + encode(line.substring(col_num + 1).substring(0,64));\n\t\taddWarning(\"Music Line:\" + tokenizer.lineIndex + \":\" + (col_num+1) + ': ' + str + \":  \" + clean_line);\n\t\taddWarningObject({message:str, line:line, startChar: multilineVars.iChar + col_num, column: col_num});\n\t};\n\n\tvar header;\n\tvar music;\n\n\tthis.getWarnings = function() {\n\t\treturn multilineVars.warnings;\n\t};\n\tthis.getWarningObjects = function() {\n\t\treturn multilineVars.warningObjects;\n\t};\n\n\tvar addWords = function(line, words) {\n\t\tif (words.indexOf('\\x12') >= 0) {\n\t\t\twordsContinuation += words\n\t\t\treturn\n\t\t}\n\t\twords = wordsContinuation + words\n\t\twordsContinuation = ''\n\n\t\tif (!line) { warn(\"Can't add words before the first line of music\", line, 0); return; }\n\t\twords = parseCommon.strip(words);\n\t\tif (words[words.length-1] !== '-')\n\t\t\twords = words + ' ';\t// Just makes it easier to parse below, since every word has a divider after it.\n\t\tvar word_list = [];\n\t\t// first make a list of words from the string we are passed. A word is divided on either a space or dash.\n\t\tvar last_divider = 0;\n\t\tvar replace = false;\n\t\tvar addWord = function(i) {\n\t\t\tvar word = parseCommon.strip(words.substring(last_divider, i));\n\t\t\tword = word.replace(/\\\\([-_*|~])/g, '$1')\n\t\t\tlast_divider = i+1;\n\t\t\tif (word.length > 0) {\n\t\t\t\tif (replace)\n\t\t\t\t\tword = word.replace(/~/g, ' ');\n\t\t\t\tvar div = words[i];\n\t\t\t\tif (div !== '_' && div !== '-')\n\t\t\t\t\tdiv = ' ';\n\t\t\t\tword_list.push({syllable: tokenizer.translateString(word), divider: div});\n\t\t\t\treplace = false;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t\tvar escNext = false;\n\t\tfor (var i = 0; i < words.length; i++) {\n\t\t\tswitch (words[i]) {\n\t\t\t\tcase ' ':\n\t\t\t\tcase '\\x12':\n\t\t\t\t\taddWord(i);\n\t\t\t\t\tbreak;\n\t\t\t\tcase '-':\n\t\t\t\t\tif (!escNext && !addWord(i) && word_list.length > 0) {\n\t\t\t\t\t\tparseCommon.last(word_list).divider = '-';\n\t\t\t\t\t\tword_list.push({skip: true, to: 'next'});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase '_':\n\t\t\t\t\tif (!escNext) {\n\t\t\t\t\t\taddWord(i);\n\t\t\t\t\t\tword_list.push({skip: true, to: 'slur'});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase '*':\n\t\t\t\t\tif (!escNext) {\n\t\t\t\t\t\taddWord(i);\n\t\t\t\t\t\tword_list.push({skip: true, to: 'next'});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase '|':\n\t\t\t\t\tif (!escNext) {\n\t\t\t\t\t\taddWord(i);\n\t\t\t\t\t\tword_list.push({skip: true, to: 'bar'});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase '~':\n\t\t\t\t\tif (!escNext) {\n\t\t\t\t\t\treplace = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tescNext = words[i] === '\\\\'\n\t\t}\n\n\t\tvar inSlur = false;\n\t\tline.forEach(function(el) {\n\t\t\tif (word_list.length !== 0) {\n\t\t\t\tif (word_list[0].skip) {\n\t\t\t\t\tswitch (word_list[0].to) {\n\t\t\t\t\t\tcase 'next': if (el.el_type === 'note' && el.pitches !== null && !inSlur) word_list.shift(); break;\n\t\t\t\t\t\tcase 'slur': if (el.el_type === 'note' && el.pitches !== null) word_list.shift(); break;\n\t\t\t\t\t\tcase 'bar': if (el.el_type === 'bar') word_list.shift(); break;\n\t\t\t\t\t}\n\t\t\t\t\tif (el.el_type !== 'bar') {\n\t\t\t\t\t\tif (el.lyric === undefined)\n\t\t\t\t\t\t\tel.lyric = [{syllable: \"\", divider: \" \"}];\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tel.lyric.push({syllable: \"\", divider: \" \"});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (el.el_type === 'note' && el.rest === undefined && !inSlur) {\n\t\t\t\t\t\tvar lyric = word_list.shift();\n\t\t\t\t\t\tif (lyric.syllable)\n\t\t\t\t\t\t\tlyric.syllable = lyric.syllable.replace(/ +/g,'\\xA0');\n\t\t\t\t\t\tif (el.lyric === undefined)\n\t\t\t\t\t\t\tel.lyric = [ lyric ];\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tel.lyric.push(lyric);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\n\tvar addSymbols = function(line, words) {\n\t\tif (words.indexOf('\\x12') >= 0) {\n\t\t\tsymbolContinuation += words\n\t\t\treturn\n\t\t}\n\t\twords = symbolContinuation + words\n\t\tsymbolContinuation = ''\n\n\t\t// TODO-PER: Currently copied from w: line. This needs to be read as symbols instead.\n\t\tif (!line) { warn(\"Can't add symbols before the first line of music\", line, 0); return; }\n\t\twords = parseCommon.strip(words);\n\t\tif (words[words.length-1] !== '-')\n\t\t\twords = words + ' ';\t// Just makes it easier to parse below, since every word has a divider after it.\n\t\tvar word_list = [];\n\t\t// first make a list of words from the string we are passed. A word is divided on either a space or dash.\n\t\tvar last_divider = 0;\n\t\tvar replace = false;\n\t\tvar addWord = function(i) {\n\t\t\tvar word = parseCommon.strip(words.substring(last_divider, i));\n\t\t\tlast_divider = i+1;\n\t\t\tif (word.length > 0) {\n\t\t\t\tif (replace)\n\t\t\t\t\tword = word.replace(/~/g, ' ');\n\t\t\t\tvar div = words[i];\n\t\t\t\tif (div !== '_' && div !== '-')\n\t\t\t\t\tdiv = ' ';\n\t\t\t\tword_list.push({syllable: tokenizer.translateString(word), divider: div});\n\t\t\t\treplace = false;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t\tfor (var i = 0; i < words.length; i++) {\n\t\t\tswitch (words[i]) {\n\t\t\t\tcase ' ':\n\t\t\t\tcase '\\x12':\n\t\t\t\t\taddWord(i);\n\t\t\t\t\tbreak;\n\t\t\t\tcase '-':\n\t\t\t\t\tif (!addWord(i) && word_list.length > 0) {\n\t\t\t\t\t\tparseCommon.last(word_list).divider = '-';\n\t\t\t\t\t\tword_list.push({skip: true, to: 'next'});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase '_':\n\t\t\t\t\taddWord(i);\n\t\t\t\t\tword_list.push({skip: true, to: 'slur'});\n\t\t\t\t\tbreak;\n\t\t\t\tcase '*':\n\t\t\t\t\taddWord(i);\n\t\t\t\t\tword_list.push({skip: true, to: 'next'});\n\t\t\t\t\tbreak;\n\t\t\t\tcase '|':\n\t\t\t\t\taddWord(i);\n\t\t\t\t\tword_list.push({skip: true, to: 'bar'});\n\t\t\t\t\tbreak;\n\t\t\t\tcase '~':\n\t\t\t\t\treplace = true;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tvar inSlur = false;\n\t\tline.forEach(function(el) {\n\t\t\tif (word_list.length !== 0) {\n\t\t\t\tif (word_list[0].skip) {\n\t\t\t\t\tswitch (word_list[0].to) {\n\t\t\t\t\t\tcase 'next': if (el.el_type === 'note' && el.pitches !== null && !inSlur) word_list.shift(); break;\n\t\t\t\t\t\tcase 'slur': if (el.el_type === 'note' && el.pitches !== null) word_list.shift(); break;\n\t\t\t\t\t\tcase 'bar': if (el.el_type === 'bar') word_list.shift(); break;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (el.el_type === 'note' && el.rest === undefined && !inSlur) {\n\t\t\t\t\t\tvar lyric = word_list.shift();\n\t\t\t\t\t\tif (el.lyric === undefined)\n\t\t\t\t\t\t\tel.lyric = [ lyric ];\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tel.lyric.push(lyric);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\n\tvar parseLine = function(line) {\n\t\tif (parseCommon.startsWith(line, '%%')) {\n\t\t\tvar err = parseDirective.addDirective(line.substring(2));\n\t\t\tif (err) warn(err, line, 2);\n\t\t\treturn;\n\t\t}\n\n\t\tvar i = line.indexOf('%');\n\t\tif (i >= 0)\n\t\t\tline = line.substring(0, i);\n\t\tline = line.replace(/\\s+$/, '');\n\n\t\tif (line.length === 0)\n\t\t\treturn;\n\n\t\tif (wordsContinuation) {\n\t\t\taddWords(tuneBuilder.getCurrentVoice(), line.substring(2));\n\t\t\treturn\n\t\t}\n\t\tif (symbolContinuation) {\n\t\t\taddSymbols(tuneBuilder.getCurrentVoice(), line.substring(2));\n\t\t\treturn\n\t\t}\n\t\tif (line.length < 2 || line[1] !== ':' || music.lineContinuation) {\n\t\t\tmusic.parseMusic(line);\n\t\t\treturn\n\t\t}\n\n\t\tvar ret = header.parseHeader(line);\n\t\tif (ret.regular)\n\t\t\tmusic.parseMusic(line);\n\t\tif (ret.newline)\n\t\t\tmusic.startNewLine();\n\t\tif (ret.words)\n\t\t\taddWords(tuneBuilder.getCurrentVoice(), line.substring(2));\n\t\tif (ret.symbols)\n\t\t\taddSymbols(tuneBuilder.getCurrentVoice(), line.substring(2));\n\t};\n\n\tfunction appendLastMeasure(voice, nextVoice) {\n\t\tvoice.push({\n\t\t\tel_type: 'hint'\n\t\t});\n\t\tfor (var i = 0; i < nextVoice.length; i++) {\n\t\t\tvar element = nextVoice[i];\n\t\t\tvar hint = parseCommon.clone(element);\n\t\t\tvoice.push(hint);\n\t\t\tif (element.el_type === 'bar')\n\t\t\t\t\treturn;\n\t\t}\n\t}\n\n\tfunction addHintMeasure(staff, nextStaff) {\n\t\tfor (var i = 0; i < staff.length; i++) {\n\t\t\tvar stave = staff[i];\n\t\t\tvar nextStave = nextStaff[i];\n\t\t\tif (nextStave) { // Be sure there is the same number of staves on the next line.\n\t\t\t\tfor (var j = 0; j < nextStave.voices.length; j++) {\n\t\t\t\t\tvar nextVoice = nextStave.voices[j];\n\t\t\t\t\tvar voice = stave.voices[j];\n\t\t\t\t\tif (voice) { // Be sure there are the same number of voices on the previous line.\n\t\t\t\t\t\tappendLastMeasure(voice, nextVoice);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction addHintMeasures() {\n\t\tfor (var i = 0; i < tune.lines.length; i++) {\n\t\t\tvar line = tune.lines[i].staff;\n\t\t\tif (line) {\n\t\t\t\tvar j = i+1;\n\t\t\t\twhile (j < tune.lines.length && tune.lines[j].staff === undefined)\n\t\t\t\t\tj++;\n\t\t\t\tif (j < tune.lines.length) {\n\t\t\t\t\tvar nextLine = tune.lines[j].staff;\n\t\t\t\t\taddHintMeasure(line, nextLine);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tthis.parse = function(strTune, switches, startPos) {\n\t\t// the switches are optional and cause a difference in the way the tune is parsed.\n\t\t// switches.header_only : stop parsing when the header is finished\n\t\t// switches.stop_on_warning : stop at the first warning encountered.\n\t\t// switches.print: format for the page instead of the browser.\n\t\t// switches.format: a hash of the desired formatting commands.\n\t\t// switches.hint_measures: put the next measure at the end of the current line.\n\t\t// switches.transpose: change the key signature, chords, and notes by a number of half-steps.\n\t\tif (!switches) switches = {};\n\t\tif (!startPos) startPos = 0;\n\t\ttune.reset();\n\n\t\t// Take care of whatever line endings come our way\n\t\t// Tack on newline temporarily to make the last line continuation work\n\t\tstrTune = strTune.replace(/\\r\\n?/g, '\\n') + '\\n';\n\n\t\t// get rid of latex commands. If a line starts with a backslash, then it is replaced by spaces to keep the character count the same.\n\t\tvar arr = strTune.split(\"\\n\\\\\");\n\t\tif (arr.length > 1) {\n\t\t\tfor (var i2 = 1; i2 < arr.length; i2++) {\n\t\t\t\twhile (arr[i2].length > 0 && arr[i2][0] !== \"\\n\") {\n\t\t\t\t\tarr[i2] = arr[i2].substr(1);\n\t\t\t\t\tarr[i2-1] += ' ';\n\t\t\t\t}\n\t\t\t}\n\t\t\tstrTune = arr.join(\"  \"); //. the split removed two characters, so this puts them back\n\t\t}\n\t\t// take care of line continuations right away, but keep the same number of characters\n\t\tstrTune = strTune.replace(/\\\\([ \\t]*)(%.*)*\\n/g, function(all, backslash, comment){\n\t\t\tvar padding = comment ? Array(comment.length +1).join(' ') : \"\";\n\t\t\treturn backslash + \"\\x12\" + padding + '\\n';\n\t\t});\n\t\tvar lines = strTune.split('\\n')\n\t\tif (parseCommon.last(lines).length === 0)\t// remove the blank line we added above.\n\t\t\tlines.pop();\n\t\ttokenizer = new Tokenizer(lines, multilineVars);\n\t\theader = new ParseHeader(tokenizer, warn, multilineVars, tune, tuneBuilder);\n\t\tmusic = new ParseMusic(tokenizer, warn, multilineVars, tune, tuneBuilder, header);\n\n\t\tif (switches.print)\n\t\t\ttune.media = 'print';\n\t\tmultilineVars.reset();\n\t\tmultilineVars.iChar = startPos;\n\t\tif (switches.visualTranspose) {\n\t\t\tmultilineVars.globalTranspose = parseInt(switches.visualTranspose);\n\t\t\tif (multilineVars.globalTranspose === 0)\n\t\t\t\tmultilineVars.globalTranspose = undefined;\n\t\t\telse\n\t\t\t\ttuneBuilder.setVisualTranspose(switches.visualTranspose);\n\t\t} else\n\t\t\tmultilineVars.globalTranspose = undefined;\n\t\tif (switches.lineBreaks) {\n\t\t\t// The line break numbers are 0-based and they reflect the last measure of the current line.\n\t\t\tmultilineVars.lineBreaks = switches.lineBreaks;\n\t\t\t//multilineVars.continueall = true;\n\t\t}\n\t\theader.reset(tokenizer, warn, multilineVars, tune);\n\n\t\ttry {\n\t\t\tif (switches.format) {\n\t\t\t\tparseDirective.globalFormatting(switches.format);\n\t\t\t}\n\t\t\tvar line = tokenizer.nextLine();\n\t\t\twhile (line) {\n\t\t\t\tif (switches.header_only && multilineVars.is_in_header === false)\n\t\t\t\t\tthrow \"normal_abort\";\n\t\t\t\tif (switches.stop_on_warning && multilineVars.warnings)\n\t\t\t\t\tthrow \"normal_abort\";\n\n\t\t\t\tvar wasInHeader = multilineVars.is_in_header;\n\t\t\t\tparseLine(line);\n\t\t\t\tif (wasInHeader && !multilineVars.is_in_header) {\n\t\t\t\t\ttuneBuilder.setRunningFont(\"annotationfont\", multilineVars.annotationfont);\n\t\t\t\t\ttuneBuilder.setRunningFont(\"gchordfont\", multilineVars.gchordfont);\n\t\t\t\t\ttuneBuilder.setRunningFont(\"tripletfont\", multilineVars.tripletfont);\n\t\t\t\t\ttuneBuilder.setRunningFont(\"vocalfont\", multilineVars.vocalfont);\n\t\t\t\t}\n\t\t\t\tline = tokenizer.nextLine();\n\t\t\t}\n\n\t\t\tif (wordsContinuation) {\n\t\t\t\taddWords(tuneBuilder.getCurrentVoice(), '');\n\t\t\t}\n\t\t\tif (symbolContinuation) {\n\t\t\t\taddSymbols(tuneBuilder.getCurrentVoice(), '');\n\t\t\t}\n\t\t\tmultilineVars.openSlurs = tuneBuilder.cleanUp(multilineVars.barsperstaff, multilineVars.staffnonote, multilineVars.openSlurs);\n\n\t\t} catch (err) {\n\t\t\tif (err !== \"normal_abort\")\n\t\t\t\tthrow err;\n\t\t}\n\n\t\tvar ph = 11*72;\n\t\tvar pl = 8.5*72;\n\t\tswitch (multilineVars.papersize) {\n\t\t\t//case \"letter\": ph = 11*72; pl = 8.5*72; break;\n\t\t\tcase \"legal\": ph = 14*72; pl = 8.5*72; break;\n\t\t\tcase \"A4\": ph = 11.7*72; pl = 8.3*72; break;\n\t\t}\n\t\tif (multilineVars.landscape) {\n\t\t\tvar x = ph;\n\t\t\tph = pl;\n\t\t\tpl = x;\n\t\t}\n\t\tif (!tune.formatting.pagewidth)\n\t\t\ttune.formatting.pagewidth = pl;\n\t\tif (!tune.formatting.pageheight)\n\t\t\ttune.formatting.pageheight = ph;\n\n\t\tif (switches.hint_measures) {\n\t\t\taddHintMeasures();\n\t\t}\n\n\t\twrap.wrapLines(tune, multilineVars.lineBreaks, multilineVars.barNumbers);\n\t};\n};\n\nmodule.exports = Parse;\n","//    abc_parse_book.js: parses a string representing ABC Music Notation into a usable internal structure.\n\nvar parseCommon = require('./abc_common');\n\nvar bookParser = function(book) {\n\t\"use strict\";\n\n\tvar directives = \"\";\n\tvar initialWhiteSpace = book.match(/(\\s*)/)\n\tbook = parseCommon.strip(book);\n\tvar tuneStrings = book.split(\"\\nX:\");\n\t// Put back the X: that we lost when splitting the tunes.\n\tfor (var i = 1; i < tuneStrings.length; i++)\n\t\ttuneStrings[i] = \"X:\" + tuneStrings[i];\n\t// Keep track of the character position each tune starts with. If the string starts with white space, count that, too.\n\tvar pos = initialWhiteSpace ? initialWhiteSpace[0].length : 0;\n\tvar tunes = [];\n\ttuneStrings.forEach(function(tune) {\n\t\ttunes.push({ abc: tune, startPos: pos});\n\t\tpos += tune.length + 1; // We also lost a newline when splitting, so count that.\n\t});\n\tif (tunes.length > 1 && !parseCommon.startsWith(tunes[0].abc, 'X:')) {\t// If there is only one tune, the X: might be missing, otherwise assume the top of the file is \"intertune\"\n\t\t// There could be file-wide directives in this, if so, we need to insert it into each tune. We can probably get away with\n\t\t// just looking for file-wide directives here (before the first tune) and inserting them at the bottom of each tune, since\n\t\t// the tune is parsed all at once. The directives will be seen before the engraver begins processing.\n\t\tvar dir = tunes.shift();\n\t\tvar arrDir = dir.abc.split('\\n');\n\t\tarrDir.forEach(function(line) {\n\t\t\tif (parseCommon.startsWith(line, '%%'))\n\t\t\t\tdirectives += line + '\\n';\n\t\t});\n\t}\n\tvar header = directives;\n\n\t// Now, the tune ends at a blank line, so truncate it if needed. There may be \"intertune\" stuff.\n\ttunes.forEach(function(tune) {\n\t\tvar end = tune.abc.indexOf('\\n\\n');\n\t\tif (end > 0)\n\t\t\ttune.abc = tune.abc.substring(0, end);\n\t\ttune.pure = tune.abc;\n\t\ttune.abc = directives + tune.abc;\n\n\t\t// for the user's convenience, parse and store the title separately. The title is between the first T: and the next \\n\n\t\ttune.title = \"\";\n\t\tvar title = tune.pure.split(\"T:\");\n\t\tif (title.length > 1) {\n\t\t\ttitle = title[1].split(\"\\n\");\n\t\t\ttune.title = parseCommon.strip(title[0]);\n\t\t}\n\n\t\t// for the user's convenience, parse and store the id separately. The id is between the first X: and the next \\n\n\t\tvar id = tune.pure.substring(2, tune.pure.indexOf(\"\\n\"));\n\t\ttune.id = parseCommon.strip(id);\n\t});\n\n\treturn {\n\t\theader: header,\n\t\ttunes: tunes\n\t};\n};\n\nmodule.exports = bookParser;\n\n","var parseCommon = require('./abc_common');\n\nvar parseDirective = {};\n\n(function() {\n\t\"use strict\";\n\tvar tokenizer;\n\tvar warn;\n\tvar multilineVars;\n\tvar tune;\n\tvar tuneBuilder;\n\tparseDirective.initialize = function(tokenizer_, warn_, multilineVars_, tune_, tuneBuilder_) {\n\t\ttokenizer = tokenizer_;\n\t\twarn = warn_;\n\t\tmultilineVars = multilineVars_;\n\t\ttune = tune_;\n\t\ttuneBuilder = tuneBuilder_;\n\t\tinitializeFonts();\n\t};\n\n\tfunction initializeFonts() {\n\t\tmultilineVars.annotationfont  = { face: \"Helvetica\", size: 12, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\tmultilineVars.gchordfont  = { face: \"Helvetica\", size: 12, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\tmultilineVars.historyfont  = { face: \"\\\"Times New Roman\\\"\", size: 16, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\tmultilineVars.infofont  = { face: \"\\\"Times New Roman\\\"\", size: 14, weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\tmultilineVars.measurefont  = { face: \"\\\"Times New Roman\\\"\", size: 14, weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\tmultilineVars.partsfont  = { face: \"\\\"Times New Roman\\\"\", size: 15, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\tmultilineVars.repeatfont  = { face: \"\\\"Times New Roman\\\"\", size: 13, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\tmultilineVars.textfont  = { face: \"\\\"Times New Roman\\\"\", size: 16, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\tmultilineVars.tripletfont = {face: \"Times\", size: 11, weight: \"normal\", style: \"italic\", decoration: \"none\"};\n\t\tmultilineVars.vocalfont  = { face: \"\\\"Times New Roman\\\"\", size: 13, weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\tmultilineVars.wordsfont  = { face: \"\\\"Times New Roman\\\"\", size: 16, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\n\t\t// These fonts are global for the entire tune.\n\t\ttune.formatting.composerfont  = { face: \"\\\"Times New Roman\\\"\", size: 14, weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\ttune.formatting.subtitlefont  = { face: \"\\\"Times New Roman\\\"\", size: 16, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\ttune.formatting.tempofont  = { face: \"\\\"Times New Roman\\\"\", size: 15, weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\ttune.formatting.titlefont  = { face: \"\\\"Times New Roman\\\"\", size: 20, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\ttune.formatting.footerfont  = { face: \"\\\"Times New Roman\\\"\", size: 12, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\ttune.formatting.headerfont  = { face: \"\\\"Times New Roman\\\"\", size: 12, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\ttune.formatting.voicefont  = { face: \"\\\"Times New Roman\\\"\", size: 13, weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\ttune.formatting.tablabelfont  = { face: \"\\\"Trebuchet MS\\\"\", size: 16, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\ttune.formatting.tabnumberfont = { face: \"\\\"Arial\\\"\", size: 11, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\ttune.formatting.tabgracefont = { face: \"\\\"Arial\\\"\", size: 8, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\n\t\t// these are the default fonts for these element types. In the printer, these fonts might change as the tune progresses.\n\t\ttune.formatting.annotationfont  = multilineVars.annotationfont;\n\t\ttune.formatting.gchordfont  = multilineVars.gchordfont;\n\t\ttune.formatting.historyfont  = multilineVars.historyfont;\n\t\ttune.formatting.infofont  = multilineVars.infofont;\n\t\ttune.formatting.measurefont  = multilineVars.measurefont;\n\t\ttune.formatting.partsfont  = multilineVars.partsfont;\n\t\ttune.formatting.repeatfont  = multilineVars.repeatfont;\n\t\ttune.formatting.textfont  = multilineVars.textfont;\n\t\ttune.formatting.tripletfont  = multilineVars.tripletfont;\n\t\ttune.formatting.vocalfont  = multilineVars.vocalfont;\n\t\ttune.formatting.wordsfont  = multilineVars.wordsfont;\n\t}\n\n\tvar fontTypeCanHaveBox = { gchordfont: true, measurefont: true, partsfont: true, annotationfont: true, composerfont: true, historyfont: true, infofont: true, subtitlefont: true, textfont: true, titlefont: true, voicefont: true  };\n\n\tvar fontTranslation = function(fontFace) {\n\t\t// This translates Postscript fonts for a web alternative.\n\t\t// Note that the postscript fonts contain italic and bold info in them, so what is returned is a hash.\n\n\t\tswitch (fontFace) {\n\t\t\tcase \"Arial-Italic\":\n\t\t\t\treturn { face: \"Arial\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Arial-Bold\":\n\t\t\t\treturn { face: \"Arial\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Bookman-Demi\":\n\t\t\t\treturn { face: \"Bookman,serif\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Bookman-DemiItalic\":\n\t\t\t\treturn { face: \"Bookman,serif\", weight: \"bold\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Bookman-Light\":\n\t\t\t\treturn { face: \"Bookman,serif\", weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Bookman-LightItalic\":\n\t\t\t\treturn { face: \"Bookman,serif\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Courier\":\n\t\t\t\treturn { face: \"\\\"Courier New\\\"\", weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Courier-Oblique\":\n\t\t\t\treturn { face: \"\\\"Courier New\\\"\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Courier-Bold\":\n\t\t\t\treturn { face: \"\\\"Courier New\\\"\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Courier-BoldOblique\":\n\t\t\t\treturn { face: \"\\\"Courier New\\\"\", weight: \"bold\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"AvantGarde-Book\":\n\t\t\t\treturn { face: \"AvantGarde,Arial\", weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"AvantGarde-BookOblique\":\n\t\t\t\treturn { face: \"AvantGarde,Arial\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"AvantGarde-Demi\":\n\t\t\tcase \"Avant-Garde-Demi\":\n\t\t\t\treturn { face: \"AvantGarde,Arial\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"AvantGarde-DemiOblique\":\n\t\t\t\treturn { face: \"AvantGarde,Arial\", weight: \"bold\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Helvetica-Oblique\":\n\t\t\t\treturn { face: \"Helvetica\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Helvetica-Bold\":\n\t\t\t\treturn { face: \"Helvetica\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Helvetica-BoldOblique\":\n\t\t\t\treturn { face: \"Helvetica\", weight: \"bold\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Helvetica-Narrow\":\n\t\t\t\treturn { face: \"\\\"Helvetica Narrow\\\",Helvetica\", weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Helvetica-Narrow-Oblique\":\n\t\t\t\treturn { face: \"\\\"Helvetica Narrow\\\",Helvetica\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Helvetica-Narrow-Bold\":\n\t\t\t\treturn { face: \"\\\"Helvetica Narrow\\\",Helvetica\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Helvetica-Narrow-BoldOblique\":\n\t\t\t\treturn { face: \"\\\"Helvetica Narrow\\\",Helvetica\", weight: \"bold\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Palatino-Roman\":\n\t\t\t\treturn { face: \"Palatino\", weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Palatino-Italic\":\n\t\t\t\treturn { face: \"Palatino\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Palatino-Bold\":\n\t\t\t\treturn { face: \"Palatino\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Palatino-BoldItalic\":\n\t\t\t\treturn { face: \"Palatino\", weight: \"bold\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"NewCenturySchlbk-Roman\":\n\t\t\t\treturn { face: \"\\\"New Century\\\",serif\", weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"NewCenturySchlbk-Italic\":\n\t\t\t\treturn { face: \"\\\"New Century\\\",serif\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"NewCenturySchlbk-Bold\":\n\t\t\t\treturn { face: \"\\\"New Century\\\",serif\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"NewCenturySchlbk-BoldItalic\":\n\t\t\t\treturn { face: \"\\\"New Century\\\",serif\", weight: \"bold\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Times\":\n\t\t\tcase \"Times-Roman\":\n\t\t\tcase \"Times-Narrow\":\n\t\t\tcase \"Times-Courier\":\n\t\t\tcase \"Times-New-Roman\":\n\t\t\t\treturn { face: \"\\\"Times New Roman\\\"\", weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Times-Italic\":\n\t\t\tcase \"Times-Italics\":\n\t\t\t\treturn { face: \"\\\"Times New Roman\\\"\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Times-Bold\":\n\t\t\t\treturn { face: \"\\\"Times New Roman\\\"\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Times-BoldItalic\":\n\t\t\t\treturn { face: \"\\\"Times New Roman\\\"\", weight: \"bold\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"ZapfChancery-MediumItalic\":\n\t\t\t\treturn { face: \"\\\"Zapf Chancery\\\",cursive,serif\", weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\t\tdefault:\n\t\t\t\treturn null;\n\t\t}\n\t};\n\n\tvar getFontParameter = function(tokens, currentSetting, str, position, cmd) {\n\t\t// Every font parameter has the following format:\n\t\t// <face> <utf8> <size> <modifiers> <box>\n\t\t// Where:\n\t\t// face: either a standard web font name, or a postscript font, enumerated in fontTranslation. This could also be an * or be missing if the face shouldn't change.\n\t\t// utf8: This is optional, and specifies utf8. That's all that is supported so the field is just silently ignored.\n\t\t// size: The size, in pixels. This may be omitted if the size is not changing.\n\t\t// modifiers: zero or more of \"bold\", \"italic\", \"underline\"\n\t\t// box: Only applies to the measure numbers, gchords, and the parts. If present, then a box is drawn around the characters.\n\t\t// If face is present, then all the modifiers are cleared. If face is absent, then the modifiers are illegal.\n\t\t// The face can be a single word, a set of words separated by hyphens, or a quoted string.\n\t\t//\n\t\t// So, in practicality, there are three types of font definitions: a number only, an asterisk and a number only, or the full definition (with an optional size).\n\t\tfunction processNumberOnly() {\n\t\t\tvar size = parseInt(tokens[0].token);\n\t\t\ttokens.shift();\n\t\t\tif (!currentSetting) {\n\t\t\t\twarn(\"Can't set just the size of the font since there is no default value.\", str, position);\n\t\t\t\treturn { face: \"\\\"Times New Roman\\\"\", weight: \"normal\", style: \"normal\", decoration: \"none\", size: size};\n\t\t\t}\n\t\t\tif (tokens.length === 0) {\n\t\t\t\treturn { face: currentSetting.face, weight: currentSetting.weight, style: currentSetting.style, decoration: currentSetting.decoration, size: size};\n\t\t\t}\n\t\t\tif (tokens.length === 1 && tokens[0].token === \"box\" && fontTypeCanHaveBox[cmd])\n\t\t\t\treturn { face: currentSetting.face, weight: currentSetting.weight, style: currentSetting.style, decoration: currentSetting.decoration, size: size, box: true};\n\t\t\twarn(\"Extra parameters in font definition.\", str, position);\n\t\t\treturn { face: currentSetting.face, weight: currentSetting.weight, style: currentSetting.style, decoration: currentSetting.decoration, size: size};\n\t\t}\n\n\t\t// format 1: asterisk and number only\n\t\tif (tokens[0].token === '*') {\n\t\t\ttokens.shift();\n\t\t\tif (tokens[0].type === 'number')\n\t\t\t\treturn processNumberOnly();\n\t\t\telse {\n\t\t\t\twarn(\"Expected font size number after *.\", str, position);\n\t\t\t}\n\t\t}\n\n\t\t// format 2: number only\n\t\tif (tokens[0].type === 'number') {\n\t\t\treturn processNumberOnly();\n\t\t}\n\n\t\t// format 3: whole definition\n\t\tvar face = [];\n\t\tvar size;\n\t\tvar weight = \"normal\";\n\t\tvar style = \"normal\";\n\t\tvar decoration = \"none\";\n\t\tvar box = false;\n\t\tvar state = 'face';\n\t\tvar hyphenLast = false;\n\t\twhile (tokens.length) {\n\t\t\tvar currToken = tokens.shift();\n\t\t\tvar word = currToken.token.toLowerCase();\n\t\t\tswitch (state) {\n\t\t\t\tcase 'face':\n\t\t\t\t\tif (hyphenLast || (word !== 'utf' && currToken.type !== 'number' && word !== \"bold\" && word !== \"italic\" && word !== \"underline\" && word !== \"box\")) {\n\t\t\t\t\t\tif (face.length > 0 && currToken.token === '-') {\n\t\t\t\t\t\t\thyphenLast = true;\n\t\t\t\t\t\t\tface[face.length-1] = face[face.length-1] + currToken.token;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tif (hyphenLast) {\n\t\t\t\t\t\t\t\thyphenLast = false;\n\t\t\t\t\t\t\t\tface[face.length-1] = face[face.length-1] + currToken.token;\n\t\t\t\t\t\t\t} else\n\t\t\t\t\t\t\t\tface.push(currToken.token);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (currToken.type === 'number') {\n\t\t\t\t\t\t\tif (size) {\n\t\t\t\t\t\t\t\twarn(\"Font size specified twice in font definition.\", str, position);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tsize = currToken.token;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstate = 'modifier';\n\t\t\t\t\t\t} else if (word === \"bold\")\n\t\t\t\t\t\t\tweight = \"bold\";\n\t\t\t\t\t\telse if (word === \"italic\")\n\t\t\t\t\t\t\tstyle = \"italic\";\n\t\t\t\t\t\telse if (word === \"underline\")\n\t\t\t\t\t\t\tdecoration = \"underline\";\n\t\t\t\t\t\telse if (word === \"box\") {\n\t\t\t\t\t\t\tif (fontTypeCanHaveBox[cmd])\n\t\t\t\t\t\t\t\tbox = true;\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\twarn(\"This font style doesn't support \\\"box\\\"\", str, position);\n\t\t\t\t\t\t\tstate = \"finished\";\n\t\t\t\t\t\t} else if (word === \"utf\") {\n\t\t\t\t\t\t\tcurrToken = tokens.shift(); // this gets rid of the \"8\" after \"utf\"\n\t\t\t\t\t\t\tstate = \"size\";\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\twarn(\"Unknown parameter \" + currToken.token + \" in font definition.\", str, position);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"size\":\n\t\t\t\t\tif (currToken.type === 'number') {\n\t\t\t\t\t\tif (size) {\n\t\t\t\t\t\t\twarn(\"Font size specified twice in font definition.\", str, position);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsize = currToken.token;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\twarn(\"Expected font size in font definition.\", str, position);\n\t\t\t\t\t}\n\t\t\t\t\tstate = 'modifier';\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"modifier\":\n\t\t\t\t\tif (word === \"bold\")\n\t\t\t\t\t\tweight = \"bold\";\n\t\t\t\t\telse if (word === \"italic\")\n\t\t\t\t\t\tstyle = \"italic\";\n\t\t\t\t\telse if (word === \"underline\")\n\t\t\t\t\t\tdecoration = \"underline\";\n\t\t\t\t\telse if (word === \"box\") {\n\t\t\t\t\t\tif (fontTypeCanHaveBox[cmd])\n\t\t\t\t\t\t\tbox = true;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\twarn(\"This font style doesn't support \\\"box\\\"\", str, position);\n\t\t\t\t\t\tstate = \"finished\";\n\t\t\t\t\t} else\n\t\t\t\t\t\twarn(\"Unknown parameter \" + currToken.token + \" in font definition.\", str, position);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"finished\":\n\t\t\t\t\twarn(\"Extra characters found after \\\"box\\\" in font definition.\", str, position);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (size === undefined) {\n\t\t\tif (!currentSetting) {\n\t\t\t\twarn(\"Must specify the size of the font since there is no default value.\", str, position);\n\t\t\t\tsize = 12;\n\t\t\t} else\n\t\t\t\tsize = currentSetting.size;\n\t\t} else\n\t\t\tsize = parseFloat(size);\n\n\t\tface = face.join(' ');\n\t\tif (face === '') {\n\t\t\tif (!currentSetting) {\n\t\t\t\twarn(\"Must specify the name of the font since there is no default value.\", str, position);\n\t\t\t\tface = \"sans-serif\";\n\t\t\t} else\n\t\t\t\tface = currentSetting.face;\n\t\t}\n\t\tvar psFont = fontTranslation(face);\n\t\tvar font = {};\n\t\tif (psFont) {\n\t\t\tfont.face = psFont.face;\n\t\t\tfont.weight = psFont.weight;\n\t\t\tfont.style = psFont.style;\n\t\t\tfont.decoration = psFont.decoration;\n\t\t\tfont.size = size;\n\t\t\tif (box)\n\t\t\t\tfont.box = true;\n\t\t\treturn font;\n\t\t}\n\t\tfont.face = face;\n\t\tfont.weight = weight;\n\t\tfont.style = style;\n\t\tfont.decoration = decoration;\n\t\tfont.size = size;\n\t\tif (box)\n\t\t\tfont.box = true;\n\t\treturn font;\n\t};\n\n\tvar getChangingFont = function(cmd, tokens, str) {\n\t\tif (tokens.length === 0)\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires a font as a parameter.\";\n\t\tmultilineVars[cmd] = getFontParameter(tokens, multilineVars[cmd], str, 0, cmd);\n\t\tif (multilineVars.is_in_header) // If the font appears in the header, then it becomes the default font.\n\t\t\ttune.formatting[cmd] = multilineVars[cmd];\n\t\treturn null;\n\t};\n\tvar getGlobalFont = function(cmd, tokens, str) {\n\t\tif (tokens.length === 0)\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires a font as a parameter.\";\n\t\ttune.formatting[cmd] = getFontParameter(tokens, tune.formatting[cmd], str, 0, cmd);\n\t\treturn null;\n\t};\n\n\tvar setScale = function(cmd, tokens) {\n\t\tvar scratch = \"\";\n\t\ttokens.forEach(function(tok) {\n\t\t\tscratch += tok.token;\n\t\t});\n\t\tvar num = parseFloat(scratch);\n\t\tif (isNaN(num) || num === 0)\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires a number as a parameter.\";\n\t\ttune.formatting.scale = num;\n\n\t};\n\t// starts at 35\n\tvar drumNames = [\n\t\t\"acoustic-bass-drum\",\n\t\t\"bass-drum-1\",\n\t\t\"side-stick\",\n\t\t\"acoustic-snare\",\n\t\t\"hand-clap\",\n\t\t\"electric-snare\",\n\t\t\"low-floor-tom\",\n\t\t\"closed-hi-hat\",\n\t\t\"high-floor-tom\",\n\t\t\"pedal-hi-hat\",\n\t\t\"low-tom\",\n\t\t\"open-hi-hat\",\n\t\t\"low-mid-tom\",\n\t\t\"hi-mid-tom\",\n\t\t\"crash-cymbal-1\",\n\t\t\"high-tom\",\n\t\t\"ride-cymbal-1\",\n\t\t\"chinese-cymbal\",\n\t\t\"ride-bell\",\n\t\t\"tambourine\",\n\t\t\"splash-cymbal\",\n\t\t\"cowbell\",\n\t\t\"crash-cymbal-2\",\n\t\t\"vibraslap\",\n\t\t\"ride-cymbal-2\",\n\t\t\"hi-bongo\",\n\t\t\"low-bongo\",\n\t\t\"mute-hi-conga\",\n\t\t\"open-hi-conga\",\n\t\t\"low-conga\",\n\t\t\"high-timbale\",\n\t\t\"low-timbale\",\n\t\t\"high-agogo\",\n\t\t\"low-agogo\",\n\t\t\"cabasa\",\n\t\t\"maracas\",\n\t\t\"short-whistle\",\n\t\t\"long-whistle\",\n\t\t\"short-guiro\",\n\t\t\"long-guiro\",\n\t\t\"claves\",\n\t\t\"hi-wood-block\",\n\t\t\"low-wood-block\",\n\t\t\"mute-cuica\",\n\t\t\"open-cuica\",\n\t\t\"mute-triangle\",\n\t\t\"open-triangle\",\n\t];\n\n\tvar interpretPercMap = function(restOfString) {\n\t\tvar tokens = restOfString.split(/\\s+/); // Allow multiple spaces.\n\t\tif (tokens.length !== 2 && tokens.length !== 3)\n\t\t\treturn { error: 'Expected parameters \"abc-note\", \"drum-sound\", and optionally \"note-head\"'};\n\t\tvar key = tokens[0];\n\t\t// The percussion sound can either be a MIDI number or a drum name. If it is not a number then check for a name.\n\t\tvar pitch = parseInt(tokens[1], 10);\n\t\tif ((isNaN(pitch) || pitch < 35 || pitch > 81) && tokens[1]) {\n\t\t\tpitch = drumNames.indexOf(tokens[1].toLowerCase()) + 35;\n\t\t}\n\t\tif ((isNaN(pitch) || pitch < 35 || pitch > 81))\n\t\t\treturn { error: 'Expected drum name, received \"' + tokens[1] + '\"' };\n\t\tvar value = { sound: pitch };\n\t\tif (tokens.length === 3)\n\t\t\tvalue.noteHead = tokens[2];\n\t\treturn { key: key, value: value };\n\t};\n\n\tvar getRequiredMeasurement = function(cmd, tokens) {\n\t\tvar points = tokenizer.getMeasurement(tokens);\n\t\tif (points.used === 0 || tokens.length !== 0)\n\t\t\treturn { error: \"Directive \\\"\" + cmd + \"\\\" requires a measurement as a parameter.\"};\n\t\treturn points.value;\n\t};\n\tvar oneParameterMeasurement = function(cmd, tokens) {\n\t\tvar points = tokenizer.getMeasurement(tokens);\n\t\tif (points.used === 0 || tokens.length !== 0)\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires a measurement as a parameter.\";\n\t\ttune.formatting[cmd] = points.value;\n\t\treturn null;\n\t};\n\n\tvar addMultilineVar = function(key, cmd, tokens, min, max) {\n\t\tif (tokens.length !== 1 || tokens[0].type !== 'number')\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires a number as a parameter.\";\n\t\tvar i = tokens[0].intt;\n\t\tif (min !== undefined && i < min)\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires a number greater than or equal to \" + min + \" as a parameter.\";\n\t\tif (max !== undefined && i > max)\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires a number less than or equal to \" + max + \" as a parameter.\";\n\t\tmultilineVars[key] = i;\n\t\treturn null;\n\t};\n\n\tvar addMultilineVarBool = function(key, cmd, tokens) {\n\t\tif (tokens.length === 1 && (tokens[0].token === 'true' || tokens[0].token === 'false')) {\n\t\t\tmultilineVars[key] = tokens[0].token === 'true';\n\t\t\treturn null;\n\t\t}\n\t\tvar str = addMultilineVar(key, cmd, tokens, 0, 1);\n\t\tif (str !== null) return str;\n\t\tmultilineVars[key] = (multilineVars[key] === 1);\n\t\treturn null;\n\t};\n\n\tvar addMultilineVarOneParamChoice = function(key, cmd, tokens, choices) {\n\t\tif (tokens.length !== 1)\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires one of [ \" + choices.join(\", \") + \" ] as a parameter.\";\n\t\tvar choice = tokens[0].token;\n\t\tvar found = false;\n\t\tfor (var i = 0; !found && i < choices.length; i++) {\n\t\t\tif (choices[i] === choice)\n\t\t\t\tfound = true;\n\t\t}\n\t\tif (!found)\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires one of [ \" + choices.join(\", \") + \" ] as a parameter.\";\n\t\tmultilineVars[key] = choice;\n\t\treturn null;\n\t};\n\n\tvar midiCmdParam0 = [\n\t\t\"nobarlines\",\n\t\t\"barlines\",\n\t\t\"beataccents\",\n\t\t\"nobeataccents\",\n\t\t\"droneon\",\n\t\t\"droneoff\",\n\t\t\"drumon\",\n\t\t\"drumoff\",\n\t\t\"fermatafixed\",\n\t\t\"fermataproportional\",\n\t\t\"gchordon\",\n\t\t\"gchordoff\",\n\t\t\"controlcombo\",\n\t\t\"temperamentnormal\",\n\t\t\"noportamento\"\n\t];\n\tvar midiCmdParam1String = [\n\t\t\"gchord\",\n\t\t\"ptstress\",\n\t\t\"beatstring\"\n\t];\n\tvar midiCmdParam1Integer = [\n\t\t\"bassvol\",\n\t\t\"chordvol\",\n\t\t\"bassprog\",\n\t\t\"chordprog\",\n\t\t\"c\",\n\t\t\"channel\",\n\t\t\"beatmod\",\n\t\t\"deltaloudness\",\n\t\t\"drumbars\",\n\t\t\"gracedivider\",\n\t\t\"makechordchannels\",\n\t\t\"randomchordattack\",\n\t\t\"chordattack\",\n\t\t\"stressmodel\",\n\t\t\"transpose\",\n\t\t\"rtranspose\",\n\t\t\"vol\",\n\t\t\"volinc\"\n\t];\n\tvar midiCmdParam1Integer1OptionalInteger = [\n\t\t\"program\"\n\t];\n\tvar midiCmdParam2Integer = [\n\t\t\"ratio\",\n\t\t\"snt\",\n\t\t\"bendvelocity\",\n\t\t\"pitchbend\",\n\t\t\"control\",\n\t\t\"temperamentlinear\"\n\t];\n\tvar midiCmdParam4Integer = [\n\t\t\"beat\"\n\t];\n\tvar midiCmdParam5Integer = [\n\t\t\"drone\"\n\t];\n\tvar midiCmdParam1String1Integer = [\n\t\t\"portamento\"\n\t];\n\tvar midiCmdParamFraction = [\n\t\t\"expand\",\n\t\t\"grace\",\n\t\t\"trim\"\n\t];\n\tvar midiCmdParam1StringVariableIntegers = [\n\t\t\"drum\",\n\t\t\"chordname\"\n\t];\n\n\tvar parseMidiCommand = function(midi, tune, restOfString) {\n\t\tvar midi_cmd = midi.shift().token;\n\t\tvar midi_params = [];\n\t\tif (midiCmdParam0.indexOf(midi_cmd) >= 0) {\n\t\t\t// NO PARAMETERS\n\t\t\tif (midi.length !== 0)\n\t\t\t\twarn(\"Unexpected parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t} else if (midiCmdParam1String.indexOf(midi_cmd) >= 0) {\n\t\t\t// ONE STRING PARAMETER\n\t\t\tif (midi.length !== 1)\n\t\t\t\twarn(\"Expected one parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse\n\t\t\t\tmidi_params.push(midi[0].token);\n\t\t} else if (midiCmdParam1Integer.indexOf(midi_cmd) >= 0) {\n\t\t\t// ONE INT PARAMETER\n\t\t\tif (midi.length !== 1)\n\t\t\t\twarn(\"Expected one parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"number\")\n\t\t\t\twarn(\"Expected one integer parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse\n\t\t\t\tmidi_params.push(midi[0].intt);\n\t\t} else if (midiCmdParam1Integer1OptionalInteger.indexOf(midi_cmd) >= 0) {\n\t\t\t// ONE INT PARAMETER, ONE OPTIONAL PARAMETER\n\t\t\tif (midi.length !== 1 && midi.length !== 2)\n\t\t\t\twarn(\"Expected one or two parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"number\")\n\t\t\t\twarn(\"Expected integer parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi.length === 2 && midi[1].type !== \"number\")\n\t\t\t\twarn(\"Expected integer parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse {\n\t\t\t\tmidi_params.push(midi[0].intt);\n\t\t\t\tif (midi.length === 2)\n\t\t\t\t\tmidi_params.push(midi[1].intt);\n\t\t\t}\n\t\t} else if (midiCmdParam2Integer.indexOf(midi_cmd) >= 0) {\n\t\t\t// TWO INT PARAMETERS\n\t\t\tif (midi.length !== 2)\n\t\t\t\twarn(\"Expected two parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"number\" || midi[1].type !== \"number\")\n\t\t\t\twarn(\"Expected two integer parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse {\n\t\t\t\tmidi_params.push(midi[0].intt);\n\t\t\t\tmidi_params.push(midi[1].intt);\n\t\t\t}\n\t\t} else if (midiCmdParam1String1Integer.indexOf(midi_cmd) >= 0) {\n\t\t\t// ONE STRING PARAMETER, ONE INT PARAMETER\n\t\t\tif (midi.length !== 2)\n\t\t\t\twarn(\"Expected two parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"alpha\" || midi[1].type !== \"number\")\n\t\t\t\twarn(\"Expected one string and one integer parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse {\n\t\t\t\tmidi_params.push(midi[0].token);\n\t\t\t\tmidi_params.push(midi[1].intt);\n\t\t\t}\n\t\t} else if (midi_cmd === 'drummap') {\n\t\t\t// BUILD AN OBJECT OF ABC NOTE => MIDI NOTE\n\t\t\tif (midi.length === 2 && midi[0].type === 'alpha' && midi[1].type === 'number') {\n\t\t\t\tif (!tune.formatting) tune.formatting = {};\n\t\t\t\tif (!tune.formatting.midi) tune.formatting.midi = {};\n\t\t\t\tif (!tune.formatting.midi.drummap) tune.formatting.midi.drummap = {};\n\t\t\t\ttune.formatting.midi.drummap[midi[0].token] = midi[1].intt;\n\t\t\t\tmidi_params = tune.formatting.midi.drummap;\n\t\t\t} else if (midi.length === 3 && midi[0].type === 'punct' && midi[1].type === 'alpha' && midi[2].type === 'number') {\n\t\t\t\tif (!tune.formatting) tune.formatting = {};\n\t\t\t\tif (!tune.formatting.midi) tune.formatting.midi = {};\n\t\t\t\tif (!tune.formatting.midi.drummap) tune.formatting.midi.drummap = {};\n\t\t\t\ttune.formatting.midi.drummap[midi[0].token+midi[1].token] = midi[2].intt;\n\t\t\t\tmidi_params = tune.formatting.midi.drummap;\n\t\t\t} else {\n\t\t\t\twarn(\"Expected one note name and one integer parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\t}\n\t\t} else if (midiCmdParamFraction.indexOf(midi_cmd) >= 0) {\n\t\t\t// ONE FRACTION PARAMETER\n\t\t\tif (midi.length !== 3)\n\t\t\t\twarn(\"Expected fraction parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"number\" || midi[1].token !== \"/\" || midi[2].type !== \"number\")\n\t\t\t\twarn(\"Expected fraction parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse {\n\t\t\t\tmidi_params.push(midi[0].intt);\n\t\t\t\tmidi_params.push(midi[2].intt);\n\t\t\t}\n\t\t} else if (midiCmdParam4Integer.indexOf(midi_cmd) >= 0) {\n\t\t\t// FOUR INT PARAMETERS\n\t\t\tif (midi.length !== 4)\n\t\t\t\twarn(\"Expected four parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"number\" || midi[1].type !== \"number\" || midi[2].type !== \"number\" || midi[3].type !== \"number\")\n\t\t\t\twarn(\"Expected four integer parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse {\n\t\t\t\tmidi_params.push(midi[0].intt);\n\t\t\t\tmidi_params.push(midi[1].intt);\n\t\t\t\tmidi_params.push(midi[2].intt);\n\t\t\t\tmidi_params.push(midi[3].intt);\n\t\t\t}\n\t\t} else if (midiCmdParam5Integer.indexOf(midi_cmd) >= 0) {\n\t\t\t// FIVE INT PARAMETERS\n\t\t\tif (midi.length !== 5)\n\t\t\t\twarn(\"Expected five parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"number\" || midi[1].type !== \"number\" || midi[2].type !== \"number\" || midi[3].type !== \"number\" || midi[4].type !== \"number\")\n\t\t\t\twarn(\"Expected five integer parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse {\n\t\t\t\tmidi_params.push(midi[0].intt);\n\t\t\t\tmidi_params.push(midi[1].intt);\n\t\t\t\tmidi_params.push(midi[2].intt);\n\t\t\t\tmidi_params.push(midi[3].intt);\n\t\t\t\tmidi_params.push(midi[4].intt);\n\t\t\t}\n\t\t} else if (midiCmdParam1Integer1OptionalInteger.indexOf(midi_cmd) >= 0) {\n\t\t\t// ONE INT PARAMETER, ONE OPTIONAL OCTAVE PARAMETER\n\t\t\tif (midi.length !== 1 || midi.length !== 4)\n\t\t\t\twarn(\"Expected one or two parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"number\")\n\t\t\t\twarn(\"Expected integer parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi.length === 4) {\n\t\t\t\tif (midi[1].token !== \"octave\")\n\t\t\t\t\twarn(\"Expected octave parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\t\tif (midi[2].token !== \"=\")\n\t\t\t\t\twarn(\"Expected octave parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\t\tif (midi[3].type !== \"number\")\n\t\t\t\t\twarn(\"Expected integer parameter for octave in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\t} else {\n\t\t\t\tmidi_params.push(midi[0].intt);\n\t\t\t\tif (midi.length === 4)\n\t\t\t\t\tmidi_params.push(midi[3].intt);\n\t\t\t}\n\t\t} else if (midiCmdParam1StringVariableIntegers.indexOf(midi_cmd) >= 0) {\n\t\t\t// ONE STRING, VARIABLE INT PARAMETERS\n\t\t\tif (midi.length < 2)\n\t\t\t\twarn(\"Expected string parameter and at least one integer parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"alpha\")\n\t\t\t\twarn(\"Expected string parameter and at least one integer parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse {\n\t\t\t\tvar p = midi.shift();\n\t\t\t\tmidi_params.push(p.token);\n\t\t\t\twhile (midi.length > 0) {\n\t\t\t\t\tp = midi.shift();\n\t\t\t\t\tif (p.type !== \"number\")\n\t\t\t\t\t\twarn(\"Expected integer parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\t\t\tmidi_params.push(p.intt);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (tuneBuilder.hasBeginMusic())\n\t\t\ttuneBuilder.appendElement('midi', -1, -1, { cmd: midi_cmd, params: midi_params });\n\t\telse {\n\t\t\tif (tune.formatting['midi'] === undefined)\n\t\t\t\ttune.formatting['midi'] = {};\n\t\t\ttune.formatting['midi'][midi_cmd] = midi_params;\n\t\t}\n\t};\n\n\tparseDirective.parseFontChangeLine = function(textstr) {\n\t\t// We don't want to match two dollar signs, so change those temporarily\n\t\ttextstr = textstr.replace(/\\$\\$/g,\"\\x03\")\n\t\tvar textParts = textstr.split('$');\n\t\tif (textParts.length > 1 && multilineVars.setfont) {\n\t\t\tvar textarr = [ ];\n\t\t\tif (textParts[0] !== '') // did the original string start with `$`?\n\t\t\t\ttextarr.push({ text: textParts[0] })\n\t\t\tfor (var i = 1; i < textParts.length; i++) {\n\t\t\t\tif (textParts[i][0] === '0')\n\t\t\t\t\ttextarr.push({ text: textParts[i].substring(1).replace(/\\x03/g,\"$$\") });\n\t\t\t\telse {\n\t\t\t\t\tvar whichFont = parseInt(textParts[i][0],10)\n\t\t\t\t\tif (multilineVars.setfont[whichFont])\n\t\t\t\t\t\ttextarr.push({font: multilineVars.setfont[whichFont], text: textParts[i].substring(1).replace(/\\x03/g,\"$$\") });\n\t\t\t\t\telse\n\t\t\t\t\t\ttextarr[textarr.length-1].text += '$' + textParts[i].replace(/\\x03/g,\"$$\");\n\t\t\t\t}\t\t\t\t\n\t\t\t}\n\t\t\treturn textarr;\n\t\t}\n\t\treturn textstr.replace(/\\x03/g,\"$$\");\n\t};\n\n\tvar positionChoices = [ 'auto', 'above', 'below', 'hidden' ];\n\tparseDirective.addDirective = function(str) {\n\t\tvar tokens = tokenizer.tokenize(str, 0, str.length);\t// 3 or more % in a row, or just spaces after %% is just a comment\n\t\tif (tokens.length === 0 || tokens[0].type !== 'alpha') return null;\n\t\tvar restOfString = str.substring(str.indexOf(tokens[0].token)+tokens[0].token.length);\n\t\trestOfString = tokenizer.stripComment(restOfString);\n\t\tvar cmd = tokens.shift().token.toLowerCase();\n\t\tvar scratch = \"\";\n\t\tvar line;\n\t\tswitch (cmd)\n\t\t{\n\t\t\t// The following directives were added to abc_parser_lint, but haven't been implemented here.\n\t\t\t// Most of them are direct translations from the directives that will be parsed in. See abcm2ps's format.txt for info on each of these.\n\t\t\t//\t\t\t\t\talignbars: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\taligncomposer: { type: \"string\", Enum: [ 'left', 'center','right' ], optional: true },\n\t\t\t//\t\t\t\t\tbstemdown: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\tcontinueall: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\tdynalign: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\texprabove: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\texprbelow: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\tgchordbox: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\tgracespacebefore: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tgracespaceinside: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tgracespaceafter: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tinfospace: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tlineskipfac: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tmaxshrink: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tmaxstaffsep: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tmaxsysstaffsep: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tnotespacingfactor: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tparskipfac: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tslurheight: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tsplittune: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\tsquarebreve: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\tstemheight: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tstraightflags: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\tstretchstaff: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\ttitleformat: { type: \"string\", optional: true },\n\t\t\tcase \"bagpipes\":tune.formatting.bagpipes = true;break;\n\t\t\tcase \"flatbeams\":tune.formatting.flatbeams = true;break;\n\t\t\tcase \"jazzchords\":tune.formatting.jazzchords = true;break;\n\t\t\tcase \"accentAbove\":tune.formatting.accentAbove = true;break;\n\t\t\tcase \"germanAlphabet\":tune.formatting.germanAlphabet = true;break;\n\t\t\tcase \"landscape\":multilineVars.landscape = true;break;\n\t\t\tcase \"papersize\":multilineVars.papersize = restOfString;break;\n\t\t\tcase \"graceslurs\":\n\t\t\t\tif (tokens.length !== 1)\n\t\t\t\t\treturn \"Directive graceslurs requires one parameter: 0 or 1\";\n\t\t\t\tif (tokens[0].token === '0' || tokens[0].token === 'false')\n\t\t\t\t\ttune.formatting.graceSlurs = false;\n\t\t\t\telse if (tokens[0].token === '1' || tokens[0].token === 'true')\n\t\t\t\t\ttune.formatting.graceSlurs = true;\n\t\t\t\telse\n\t\t\t\t\treturn \"Directive graceslurs requires one parameter: 0 or 1 (received \" + tokens[0].token + ')';\n\t\t\t\tbreak;\n\t\t\tcase \"lineThickness\":\n\t\t\t\tvar lt = parseStretchLast(tokens);\n\t\t\t\tif (lt.value !== undefined)\n\t\t\t\t\ttune.formatting.lineThickness = lt.value;\n\t\t\t\tif (lt.error)\n\t\t\t\t\treturn lt.error;\n\t\t\t\tbreak;\n\t\t\tcase \"stretchlast\":\n\t\t\t\tvar sl = parseStretchLast(tokens);\n\t\t\t\tif (sl.value !== undefined)\n\t\t\t\t\ttune.formatting.stretchlast = sl.value;\n\t\t\t\tif (sl.error)\n\t\t\t\t\treturn sl.error;\n\t\t\t\tbreak;\n\t\t\tcase \"titlecaps\":multilineVars.titlecaps = true;break;\n\t\t\tcase \"titleleft\":tune.formatting.titleleft = true;break;\n\t\t\tcase \"measurebox\":tune.formatting.measurebox = true;break;\n\n\t\t\tcase \"vocal\": return addMultilineVarOneParamChoice(\"vocalPosition\", cmd, tokens, positionChoices);\n\t\t\tcase \"dynamic\": return addMultilineVarOneParamChoice(\"dynamicPosition\", cmd, tokens, positionChoices);\n\t\t\tcase \"gchord\": return addMultilineVarOneParamChoice(\"chordPosition\", cmd, tokens, positionChoices);\n\t\t\tcase \"ornament\": return addMultilineVarOneParamChoice(\"ornamentPosition\", cmd, tokens, positionChoices);\n\t\t\tcase \"volume\": return addMultilineVarOneParamChoice(\"volumePosition\", cmd, tokens, positionChoices);\n\n\t\t\tcase \"botmargin\":\n\t\t\tcase \"botspace\":\n\t\t\tcase \"composerspace\":\n\t\t\tcase \"indent\":\n\t\t\tcase \"leftmargin\":\n\t\t\tcase \"linesep\":\n\t\t\tcase \"musicspace\":\n\t\t\tcase \"partsspace\":\n\t\t\tcase \"pageheight\":\n\t\t\tcase \"pagewidth\":\n\t\t\tcase \"rightmargin\":\n\t\t\tcase \"stafftopmargin\":\n\t\t\tcase \"staffsep\":\n\t\t\tcase \"staffwidth\":\n\t\t\tcase \"subtitlespace\":\n\t\t\tcase \"sysstaffsep\":\n\t\t\tcase \"systemsep\":\n\t\t\tcase \"textspace\":\n\t\t\tcase \"titlespace\":\n\t\t\tcase \"topmargin\":\n\t\t\tcase \"topspace\":\n\t\t\tcase \"vocalspace\":\n\t\t\tcase \"wordsspace\":\n\t\t\t\treturn oneParameterMeasurement(cmd, tokens);\n\t\t\tcase \"voicescale\":\n\t\t\t\tif (tokens.length !== 1 || tokens[0].type !== 'number')\n\t\t\t\t\treturn \"voicescale requires one float as a parameter\";\n\t\t\t\tvar voiceScale = tokens.shift();\n\t\t\t\tif (multilineVars.currentVoice) {\n\t\t\t\t\tmultilineVars.currentVoice.scale = voiceScale.floatt;\n\t\t\t\t\ttuneBuilder.changeVoiceScale(multilineVars.currentVoice.scale);\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\tcase \"voicecolor\":\n\t\t\t\tif (tokens.length !== 1) // this could either be of type alpha or quote, but it's ok if it is a number\n\t\t\t\t\treturn \"voicecolor requires one string as a parameter\";\n\t\t\t\tvar voiceColor = tokens.shift();\n\t\t\t\tif (multilineVars.currentVoice) {\n\t\t\t\t\tmultilineVars.currentVoice.color = voiceColor.token;\n\t\t\t\t\ttuneBuilder.changeVoiceColor(multilineVars.currentVoice.color);\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\tcase \"vskip\":\n\t\t\t\tvar vskip = Math.round(getRequiredMeasurement(cmd, tokens));\n\t\t\t\tif (vskip.error)\n\t\t\t\t\treturn vskip.error;\n\t\t\t\ttuneBuilder.addSpacing(vskip);\n\t\t\t\treturn null;\n\t\t\tcase \"scale\":\n\t\t\t\tsetScale(cmd, tokens);\n\t\t\t\tbreak;\n\t\t\tcase \"sep\":\n\t\t\t\tif (tokens.length === 0)\n\t\t\t\t\ttuneBuilder.addSeparator(14,14,85, { startChar: multilineVars.iChar, endChar: multilineVars.iChar+5}); // If no parameters are given, then there is a default size.\n\t\t\t\telse {\n\t\t\t\t\tvar points = tokenizer.getMeasurement(tokens);\n\t\t\t\t\tif (points.used === 0)\n\t\t\t\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires 3 numbers: space above, space below, length of line\";\n\t\t\t\t\tvar spaceAbove = points.value;\n\n\t\t\t\t\tpoints = tokenizer.getMeasurement(tokens);\n\t\t\t\t\tif (points.used === 0)\n\t\t\t\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires 3 numbers: space above, space below, length of line\";\n\t\t\t\t\tvar spaceBelow = points.value;\n\n\t\t\t\t\tpoints = tokenizer.getMeasurement(tokens);\n\t\t\t\t\tif (points.used === 0 || tokens.length !== 0)\n\t\t\t\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires 3 numbers: space above, space below, length of line\";\n\t\t\t\t\tvar lenLine = points.value;\n\t\t\t\t\ttuneBuilder.addSeparator(spaceAbove, spaceBelow, lenLine, { startChar: multilineVars.iChar, endChar: multilineVars.iChar+restOfString.length});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"barsperstaff\":\n\t\t\t\tscratch = addMultilineVar('barsperstaff', cmd, tokens);\n\t\t\t\tif (scratch !== null) return scratch;\n\t\t\t\tbreak;\n\t\t\tcase \"staffnonote\":\n\t\t\t\t// The sense of the boolean is opposite here. \"0\" means true.\n\t\t\t\tif (tokens.length !== 1)\n\t\t\t\t\treturn \"Directive staffnonote requires one parameter: 0 or 1\";\n\t\t\t\tif (tokens[0].token === '0')\n\t\t\t\t\tmultilineVars.staffnonote = true;\n\t\t\t\telse if (tokens[0].token === '1')\n\t\t\t\t\tmultilineVars.staffnonote = false;\n\t\t\t\telse\n\t\t\t\t\treturn \"Directive staffnonote requires one parameter: 0 or 1 (received \" + tokens[0].token + ')';\n\t\t\t\tbreak;\n\t\t\tcase \"printtempo\":\n\t\t\t\tscratch = addMultilineVarBool('printTempo', cmd, tokens);\n\t\t\t\tif (scratch !== null) return scratch;\n\t\t\t\tbreak;\n\t\t\tcase \"partsbox\":\n\t\t\t\tscratch = addMultilineVarBool('partsBox', cmd, tokens);\n\t\t\t\tif (scratch !== null) return scratch;\n\t\t\t\tmultilineVars.partsfont.box = multilineVars.partsBox;\n\t\t\t\tbreak;\n\t\t\tcase \"freegchord\":\n\t\t\t\tscratch = addMultilineVarBool('freegchord', cmd, tokens);\n\t\t\t\tif (scratch !== null) return scratch;\n\t\t\t\tbreak;\n\t\t\tcase \"measurenb\":\n\t\t\tcase \"barnumbers\":\n\t\t\t\tscratch = addMultilineVar('barNumbers', cmd, tokens);\n\t\t\t\tif (scratch !== null) return scratch;\n\t\t\t\tbreak;\n\t\t\tcase \"setbarnb\":\n\t\t\t\tif (tokens.length !== 1 || tokens[0].type !== 'number') {\n\t\t\t\t\treturn 'Directive setbarnb requires a number as a parameter.';\n\t\t\t\t}\n\t\t\t\tmultilineVars.currBarNumber = tuneBuilder.setBarNumberImmediate(tokens[0].intt);\n\t\t\t\tbreak;\n\t\t\tcase \"begintext\":\n\t\t\t\tvar textBlock = '';\n\t\t\t\tline = tokenizer.nextLine();\n\t\t\t\twhile(line && line.indexOf('%%endtext') !== 0) {\n\t\t\t\t\tif (parseCommon.startsWith(line, \"%%\"))\n\t\t\t\t\t\ttextBlock += line.substring(2) + \"\\n\";\n\t\t\t\t\telse\n\t\t\t\t\t\ttextBlock += line + \"\\n\";\n\t\t\t\t\tline = tokenizer.nextLine();\n\t\t\t\t}\n\t\t\t\ttuneBuilder.addText(textBlock, { startChar: multilineVars.iChar, endChar: multilineVars.iChar+textBlock.length+7});\n\t\t\t\tbreak;\n\t\t\tcase \"continueall\":\n\t\t\t\tmultilineVars.continueall = true;\n\t\t\t\tbreak;\n\t\t\tcase \"beginps\":\n\t\t\t\tline = tokenizer.nextLine();\n\t\t\t\twhile(line && line.indexOf('%%endps') !== 0) {\n\t\t\t\t\ttokenizer.nextLine();\n\t\t\t\t}\n\t\t\t\twarn(\"Postscript ignored\", str, 0);\n\t\t\t\tbreak;\n\t\t\tcase \"deco\":\n\t\t\t\tif (restOfString.length > 0)\n\t\t\t\t\tmultilineVars.ignoredDecorations.push(restOfString.substring(0, restOfString.indexOf(' ')));\n\t\t\t\twarn(\"Decoration redefinition ignored\", str, 0);\n\t\t\t\tbreak;\n\t\t\tcase \"text\":\n\t\t\t\tvar textstr = tokenizer.translateString(restOfString);\n\t\t\t\ttuneBuilder.addText(parseDirective.parseFontChangeLine(textstr), { startChar: multilineVars.iChar, endChar: multilineVars.iChar+restOfString.length+7});\n\t\t\t\tbreak;\n\t\t\tcase \"center\":\n\t\t\t\tvar centerstr = tokenizer.translateString(restOfString);\n\t\t\t\ttuneBuilder.addCentered(parseDirective.parseFontChangeLine(centerstr));\n\t\t\t\tbreak;\n\t\t\tcase \"font\":\n\t\t\t\t// don't need to do anything for this; it is a useless directive\n\t\t\t\tbreak;\n\t\t\tcase \"setfont\":\n\t\t\t\tvar sfTokens = tokenizer.tokenize(restOfString, 0, restOfString.length);\n//\t\t\t\tvar sfDone = false;\n\t\t\t\tif (sfTokens.length >= 4) {\n\t\t\t\t\tif (sfTokens[0].token === '-' && sfTokens[1].type === 'number') {\n\t\t\t\t\t\tvar sfNum = parseInt(sfTokens[1].token);\n\t\t\t\t\t\tif (sfNum >= 1 && sfNum <= 9) {\n\t\t\t\t\t\t\tif (!multilineVars.setfont)\n\t\t\t\t\t\t\t\tmultilineVars.setfont = [];\n\t\t\t\t\t\t\tsfTokens.shift();\n\t\t\t\t\t\t\tsfTokens.shift();\n\t\t\t\t\t\t\tmultilineVars.setfont[sfNum] = getFontParameter(sfTokens, multilineVars.setfont[sfNum], str, 0, 'setfont');\n//\t\t\t\t\t\t\tvar sfSize = sfTokens.pop();\n//\t\t\t\t\t\t\tif (sfSize.type === 'number') {\n//\t\t\t\t\t\t\t\tsfSize = parseInt(sfSize.token);\n//\t\t\t\t\t\t\t\tvar sfFontName = '';\n//\t\t\t\t\t\t\t\tfor (var sfi = 2; sfi < sfTokens.length; sfi++)\n//\t\t\t\t\t\t\t\t\tsfFontName += sfTokens[sfi].token;\n//\t\t\t\t\t\t\t\tmultilineVars.setfont[sfNum] = { face: sfFontName, size: sfSize };\n//\t\t\t\t\t\t\t\tsfDone = true;\n//\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n//\t\t\t\tif (!sfDone)\n//\t\t\t\t\treturn \"Bad parameters: \" + cmd;\n\t\t\t\tbreak;\n\t\t\tcase \"gchordfont\":\n\t\t\tcase \"partsfont\":\n\t\t\tcase \"tripletfont\":\n\t\t\tcase \"vocalfont\":\n\t\t\tcase \"textfont\":\n\t\t\tcase \"annotationfont\":\n\t\t\tcase \"historyfont\":\n\t\t\tcase \"infofont\":\n\t\t\tcase \"measurefont\":\n\t\t\tcase \"repeatfont\":\n\t\t\tcase \"wordsfont\":\n\t\t\t\treturn getChangingFont(cmd, tokens, str);\n\t\t\tcase \"composerfont\":\n\t\t\tcase \"subtitlefont\":\n\t\t\tcase \"tempofont\":\n\t\t\tcase \"titlefont\":\n\t\t\tcase \"voicefont\":\n\t\t\tcase \"footerfont\":\n\t\t\tcase \"headerfont\":\n\t\t\t\treturn getGlobalFont(cmd, tokens, str);\n\t\t\tcase \"barlabelfont\":\n\t\t\tcase \"barnumberfont\":\n\t\t\tcase \"barnumfont\":\n\t\t\t\treturn getChangingFont(\"measurefont\", tokens, str);\n\t\t\tcase \"staves\":\n\t\t\tcase \"score\":\n\t\t\t\tmultilineVars.score_is_present = true;\n\t\t\t\tvar addVoice = function(id, newStaff, bracket, brace, continueBar) {\n\t\t\t\t\tif (newStaff || multilineVars.staves.length === 0) {\n\t\t\t\t\t\tmultilineVars.staves.push({index: multilineVars.staves.length, numVoices: 0});\n\t\t\t\t\t}\n\t\t\t\t\tvar staff = parseCommon.last(multilineVars.staves);\n\t\t\t\t\tif (bracket !== undefined && staff.bracket === undefined) staff.bracket = bracket;\n\t\t\t\t\tif (brace !== undefined && staff.brace === undefined) staff.brace = brace;\n\t\t\t\t\tif (continueBar) staff.connectBarLines = 'end';\n\t\t\t\t\tif (multilineVars.voices[id] === undefined) {\n\t\t\t\t\t\tmultilineVars.voices[id] = {staffNum: staff.index, index: staff.numVoices};\n\t\t\t\t\t\tstaff.numVoices++;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tvar openParen = false;\n\t\t\t\tvar openBracket = false;\n\t\t\t\tvar openBrace = false;\n\t\t\t\tvar justOpenParen = false;\n\t\t\t\tvar justOpenBracket = false;\n\t\t\t\tvar justOpenBrace = false;\n\t\t\t\tvar continueBar = false;\n\t\t\t\tvar lastVoice;\n\t\t\t\tvar addContinueBar = function() {\n\t\t\t\t\tcontinueBar = true;\n\t\t\t\t\tif (lastVoice) {\n\t\t\t\t\t\tvar ty = 'start';\n\t\t\t\t\t\tif (lastVoice.staffNum > 0) {\n\t\t\t\t\t\t\tif (multilineVars.staves[lastVoice.staffNum-1].connectBarLines === 'start' ||\n\t\t\t\t\t\t\t\tmultilineVars.staves[lastVoice.staffNum-1].connectBarLines === 'continue')\n\t\t\t\t\t\t\t\tty = 'continue';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmultilineVars.staves[lastVoice.staffNum].connectBarLines = ty;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\twhile (tokens.length) {\n\t\t\t\t\tvar t = tokens.shift();\n\t\t\t\t\tswitch (t.token) {\n\t\t\t\t\t\tcase '(':\n\t\t\t\t\t\t\tif (openParen) warn(\"Can't nest parenthesis in %%score\", str, t.start);\n\t\t\t\t\t\t\telse {openParen = true;justOpenParen = true;}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase ')':\n\t\t\t\t\t\t\tif (!openParen || justOpenParen) warn(\"Unexpected close parenthesis in %%score\", str, t.start);\n\t\t\t\t\t\t\telse openParen = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase '[':\n\t\t\t\t\t\t\tif (openBracket) warn(\"Can't nest brackets in %%score\", str, t.start);\n\t\t\t\t\t\t\telse {openBracket = true;justOpenBracket = true;}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase ']':\n\t\t\t\t\t\t\tif (!openBracket || justOpenBracket) warn(\"Unexpected close bracket in %%score\", str, t.start);\n\t\t\t\t\t\t\telse {openBracket = false;multilineVars.staves[lastVoice.staffNum].bracket = 'end';}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase '{':\n\t\t\t\t\t\t\tif (openBrace ) warn(\"Can't nest braces in %%score\", str, t.start);\n\t\t\t\t\t\t\telse {openBrace = true;justOpenBrace = true;}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase '}':\n\t\t\t\t\t\t\tif (!openBrace || justOpenBrace) warn(\"Unexpected close brace in %%score\", str, t.start);\n\t\t\t\t\t\t\telse {openBrace = false;multilineVars.staves[lastVoice.staffNum].brace = 'end';}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase '|':\n\t\t\t\t\t\t\taddContinueBar();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tvar vc = \"\";\n\t\t\t\t\t\t\twhile (t.type === 'alpha' || t.type === 'number') {\n\t\t\t\t\t\t\t\tvc += t.token;\n\t\t\t\t\t\t\t\tif (t.continueId)\n\t\t\t\t\t\t\t\t\tt = tokens.shift();\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvar newStaff = !openParen || justOpenParen;\n\t\t\t\t\t\t\tvar bracket = justOpenBracket ? 'start' : openBracket ? 'continue' : undefined;\n\t\t\t\t\t\t\tvar brace = justOpenBrace ? 'start' : openBrace ? 'continue' : undefined;\n\t\t\t\t\t\t\taddVoice(vc, newStaff, bracket, brace, continueBar);\n\t\t\t\t\t\t\tjustOpenParen = false;\n\t\t\t\t\t\t\tjustOpenBracket = false;\n\t\t\t\t\t\t\tjustOpenBrace = false;\n\t\t\t\t\t\t\tcontinueBar = false;\n\t\t\t\t\t\t\tlastVoice = multilineVars.voices[vc];\n\t\t\t\t\t\t\tif (cmd === 'staves')\n\t\t\t\t\t\t\t\taddContinueBar();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"newpage\":\n\t\t\t\tvar pgNum = tokenizer.getInt(restOfString);\n\t\t\t\ttuneBuilder.addNewPage(pgNum.digits === 0 ? -1 : pgNum.value);\n\t\t\t\tbreak;\n\n\t\t\tcase \"abc\":\n\t\t\t\tvar arr = restOfString.split(' ');\n\t\t\t\tswitch (arr[0]) {\n\t\t\t\t\tcase \"-copyright\":\n\t\t\t\t\tcase \"-creator\":\n\t\t\t\t\tcase \"-edited-by\":\n\t\t\t\t\tcase \"-version\":\n\t\t\t\t\tcase \"-charset\":\n\t\t\t\t\t\tvar subCmd = arr.shift();\n\t\t\t\t\t\ttuneBuilder.addMetaText(cmd+subCmd, arr.join(' '), { startChar: multilineVars.iChar, endChar: multilineVars.iChar+restOfString.length+5});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn \"Unknown directive: \" + cmd+arr[0];\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"header\":\n\t\t\tcase \"footer\":\n\t\t\t\tvar footerStr = tokenizer.getMeat(restOfString, 0, restOfString.length);\n\t\t\t\tfooterStr = restOfString.substring(footerStr.start, footerStr.end);\n\t\t\t\tif (footerStr[0] === '\"' && footerStr[footerStr.length-1] === '\"' )\n\t\t\t\t\tfooterStr = footerStr.substring(1, footerStr.length-1);\n\t\t\t\tvar footerArr = footerStr.split('\\t');\n\t\t\t\tvar footer = {};\n\t\t\t\tif (footerArr.length === 1)\n\t\t\t\t\tfooter = { left: \"\", center: footerArr[0], right: \"\" };\n\t\t\t\telse if (footerArr.length === 2)\n\t\t\t\t\tfooter = { left: footerArr[0], center: footerArr[1], right: \"\" };\n\t\t\t\telse\n\t\t\t\t\tfooter = { left: footerArr[0], center: footerArr[1], right: footerArr[2] };\n\t\t\t\tif (footerArr.length > 3)\n\t\t\t\t\twarn(\"Too many tabs in \" + cmd + \": \" + footerArr.length + \" found.\", restOfString, 0);\n\n\t\t\t\ttuneBuilder.addMetaTextObj(cmd, footer, { startChar: multilineVars.iChar, endChar: multilineVars.iChar+str.length});\n\t\t\t\tbreak;\n\n\t\t\tcase \"midi\":\n\t\t\t\tvar midi = tokenizer.tokenize(restOfString, 0, restOfString.length, true);\n\t\t\t\tif (midi.length > 0 && midi[0].token === '=')\n\t\t\t\t\tmidi.shift();\n\t\t\t\tif (midi.length === 0)\n\t\t\t\t\twarn(\"Expected midi command\", restOfString, 0);\n\t\t\t\telse\n\t\t\t\t\tparseMidiCommand(midi, tune, restOfString);\n\t\t\t\tbreak;\n\t\t\tcase \"percmap\":\n\t\t\t\tvar percmap = interpretPercMap(restOfString);\n\t\t\t\tif (percmap.error)\n\t\t\t\t\twarn(percmap.error, str, 8);\n\t\t\t\telse {\n\t\t\t\t\tif (!tune.formatting.percmap)\n\t\t\t\t\t\ttune.formatting.percmap = {};\n\t\t\t\t\ttune.formatting.percmap[percmap.key] = percmap.value;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"map\":\n\t\t\tcase \"playtempo\":\n\t\t\tcase \"auquality\":\n\t\t\tcase \"continuous\":\n\t\t\tcase \"nobarcheck\":\n\t\t\t\t// TODO-PER: Actually handle the parameters of these\n\t\t\t\ttune.formatting[cmd] = restOfString;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn \"Unknown directive: \" + cmd;\n\t\t}\n\t\treturn null;\n\t};\n\tparseDirective.globalFormatting = function(formatHash) {\n\t\tfor (var cmd in formatHash) {\n\t\t\tif (formatHash.hasOwnProperty(cmd)) {\n\t\t\t\tvar value = ''+formatHash[cmd];\n\t\t\t\tvar tokens = tokenizer.tokenize(value, 0, value.length);\n\t\t\t\tvar scratch;\n\t\t\t\tswitch (cmd) {\n\t\t\t\t\tcase \"titlefont\":\n\t\t\t\t\tcase \"gchordfont\":\n\t\t\t\t\tcase \"composerfont\":\n\t\t\t\t\tcase \"footerfont\":\n\t\t\t\t\tcase \"headerfont\":\n\t\t\t\t\tcase \"historyfont\":\n\t\t\t\t\tcase \"infofont\":\n\t\t\t\t\tcase \"measurefont\":\n\t\t\t\t\tcase \"partsfont\":\n\t\t\t\t\tcase \"repeatfont\":\n\t\t\t\t\tcase \"subtitlefont\":\n\t\t\t\t\tcase \"tempofont\":\n\t\t\t\t\tcase \"textfont\":\n\t\t\t\t\tcase \"voicefont\":\n\t\t\t\t\tcase \"tripletfont\":\n\t\t\t\t\tcase \"vocalfont\":\n\t\t\t\t\tcase \"wordsfont\":\n\t\t\t\t\tcase \"annotationfont\":\n\t\t\t\t\tcase \"tablabelfont\":\n\t\t\t\t\tcase \"tabnumberfont\":\n\t\t\t\t\tcase \"tabgracefont\":\n\t\t\t\t\t\tgetChangingFont(cmd, tokens, value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"scale\":\n\t\t\t\t\t\tsetScale(cmd, tokens);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"partsbox\":\n\t\t\t\t\t\tscratch = addMultilineVarBool('partsBox', cmd, tokens);\n\t\t\t\t\t\tif (scratch !== null) warn(scratch);\n\t\t\t\t\t\tmultilineVars.partsfont.box = multilineVars.partsBox;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"freegchord\":\n\t\t\t\t\t\tscratch = addMultilineVarBool('freegchord', cmd, tokens);\n\t\t\t\t\t\tif (scratch !== null) warn(scratch);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"fontboxpadding\":\n\t\t\t\t\t\tif (tokens.length !== 1 || tokens[0].type !== 'number')\n\t\t\t\t\t\t\twarn(\"Directive \\\"\" + cmd + \"\\\" requires a number as a parameter.\");\n\t\t\t\t\t\ttune.formatting.fontboxpadding = tokens[0].floatt;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"stafftopmargin\":\n\t\t\t\t\t\tif (tokens.length !== 1 || tokens[0].type !== 'number')\n\t\t\t\t\t\t\twarn(\"Directive \\\"\" + cmd + \"\\\" requires a number as a parameter.\");\n\t\t\t\t\t\ttune.formatting.stafftopmargin = tokens[0].floatt;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"stretchlast\":\n\t\t\t\t\t\tvar sl = parseStretchLast(tokens);\n\t\t\t\t\t\tif (sl.value !== undefined)\n\t\t\t\t\t\t\ttune.formatting.stretchlast = sl.value;\n\t\t\t\t\t\tif (sl.error)\n\t\t\t\t\t\t\treturn sl.error;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\twarn(\"Formatting directive unrecognized: \", cmd, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tfunction parseStretchLast(tokens) {\n\t\tif (tokens.length === 0)\n\t\t\treturn { value: 1 }; // if there is no value then the presence of this is the same as \"true\"\n\t\telse if (tokens.length === 1) {\n\t\t\tif (tokens[0].type === \"number\") {\n\t\t\t\tif (tokens[0].floatt >= 0 || tokens[0].floatt <= 1)\n\t\t\t\t\treturn {value: tokens[0].floatt};\n\t\t\t} else if (tokens[0].token === 'false') {\n\t\t\t\treturn { value: 0 };\n\t\t\t} else if (tokens[0].token === 'true') {\n\t\t\t\treturn {value: 1};\n\t\t\t}\n\t\t}\n\t\treturn { error: \"Directive stretchlast requires zero or one parameter: false, true, or number between 0 and 1 (received \" + tokens[0].token + ')' };\n\t}\n})();\n\nmodule.exports = parseDirective;\n","//    abc_parse_header.js: parses a the header fields from a string representing ABC Music Notation into a usable internal structure.\n\nvar parseCommon = require('./abc_common');\nvar parseDirective = require('./abc_parse_directive');\nvar parseKeyVoice = require('./abc_parse_key_voice');\n\nvar ParseHeader = function(tokenizer, warn, multilineVars, tune, tuneBuilder) {\n\tthis.reset = function(tokenizer, warn, multilineVars, tune) {\n\t\tparseKeyVoice.initialize(tokenizer, warn, multilineVars, tune, tuneBuilder);\n\t\tparseDirective.initialize(tokenizer, warn, multilineVars, tune, tuneBuilder);\n\t};\n\tthis.reset(tokenizer, warn, multilineVars, tune);\n\n\tthis.setTitle = function(title, origSize) {\n\t\tif (multilineVars.hasMainTitle)\n\t\t\ttuneBuilder.addSubtitle(title, { startChar: multilineVars.iChar, endChar: multilineVars.iChar+origSize+2});\t// display secondary title\n\t\telse\n\t\t{\n\t\t\ttuneBuilder.addMetaText(\"title\", title, { startChar: multilineVars.iChar, endChar: multilineVars.iChar+origSize+2});\n\t\t\tmultilineVars.hasMainTitle = true;\n\t\t}\n\t};\n\n\tthis.setMeter = function(line) {\n\t\tline = tokenizer.stripComment(line);\n\t\tif (line === 'C') {\n\t\t\tif (multilineVars.havent_set_length === true) {\n\t\t\t\tmultilineVars.default_length = 0.125;\n\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t}\n\t\t\treturn {type: 'common_time'};\n\t\t} else if (line === 'C|') {\n\t\t\tif (multilineVars.havent_set_length === true) {\n\t\t\t\tmultilineVars.default_length = 0.125;\n\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t}\n\t\t\treturn {type: 'cut_time'};\n\t\t} else if (line === 'o') {\n\t\t\tif (multilineVars.havent_set_length === true) {\n\t\t\t\tmultilineVars.default_length = 0.125;\n\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t}\n\t\t\treturn {type: 'tempus_perfectum'};\n\t\t} else if (line === 'c') {\n\t\t\tif (multilineVars.havent_set_length === true) {\n\t\t\t\tmultilineVars.default_length = 0.125;\n\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t}\n\t\t\treturn {type: 'tempus_imperfectum'};\n\t\t} else if (line === 'o.') {\n\t\t\tif (multilineVars.havent_set_length === true) {\n\t\t\t\tmultilineVars.default_length = 0.125;\n\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t}\n\t\t\treturn {type: 'tempus_perfectum_prolatio'};\n\t\t} else if (line === 'c.') {\n\t\t\tif (multilineVars.havent_set_length === true) {\n\t\t\t\tmultilineVars.default_length = 0.125;\n\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t}\n\t\t\treturn {type: 'tempus_imperfectum_prolatio'};\n\t\t} else if (line.length === 0 || line.toLowerCase() === 'none') {\n\t\t\tif (multilineVars.havent_set_length === true) {\n\t\t\t\tmultilineVars.default_length = 0.125;\n\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tvar tokens = tokenizer.tokenize(line, 0, line.length);\n\t\t\t// the form is [open_paren] decimal [ plus|dot decimal ]... [close_paren] slash decimal [plus same_as_before]\n\t\t\ttry {\n\t\t\t\tvar parseNum = function() {\n\t\t\t\t\t// handles this much: [open_paren] decimal [ plus|dot decimal ]... [close_paren]\n\t\t\t\t\tvar ret = {value: 0, num: \"\"};\n\n\t\t\t\t\tvar tok = tokens.shift();\n\t\t\t\t\tif (tok.token === '(')\n\t\t\t\t\t\ttok = tokens.shift();\n\t\t\t\t\twhile (1) {\n\t\t\t\t\t\tif (tok.type !== 'number') throw \"Expected top number of meter\";\n\t\t\t\t\t\tret.value += parseInt(tok.token);\n\t\t\t\t\t\tret.num += tok.token;\n\t\t\t\t\t\tif (tokens.length === 0 || tokens[0].token === '/') return ret;\n\t\t\t\t\t\ttok = tokens.shift();\n\t\t\t\t\t\tif (tok.token === ')') {\n\t\t\t\t\t\t\tif (tokens.length === 0 || tokens[0].token === '/') return ret;\n\t\t\t\t\t\t\tthrow \"Unexpected paren in meter\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tok.token !== '.' && tok.token !== '+') throw \"Expected top number of meter\";\n\t\t\t\t\t\tret.num += tok.token;\n\t\t\t\t\t\tif (tokens.length === 0) throw \"Expected top number of meter\";\n\t\t\t\t\t\ttok = tokens.shift();\n\t\t\t\t\t}\n\t\t\t\t\treturn ret;\t// just to suppress warning\n\t\t\t\t};\n\n\t\t\t\tvar parseFraction = function() {\n\t\t\t\t\t// handles this much: parseNum slash decimal\n\t\t\t\t\tvar ret = parseNum();\n\t\t\t\t\tif (tokens.length === 0) return ret;\n\t\t\t\t\tvar tok = tokens.shift();\n\t\t\t\t\tif (tok.token !== '/') throw \"Expected slash in meter\";\n\t\t\t\t\ttok = tokens.shift();\n\t\t\t\t\tif (tok.type !== 'number') throw \"Expected bottom number of meter\";\n\t\t\t\t\tret.den = tok.token;\n\t\t\t\t\tret.value = ret.value / parseInt(ret.den);\n\t\t\t\t\treturn ret;\n\t\t\t\t};\n\n\t\t\t\tif (tokens.length === 0) throw \"Expected meter definition in M: line\";\n\t\t\t\tvar meter = {type: 'specified', value: [ ]};\n\t\t\t\tvar totalLength = 0;\n\t\t\t\twhile (1) {\n\t\t\t\t\tvar ret = parseFraction();\n\t\t\t\t\ttotalLength += ret.value;\n\t\t\t\t\tvar mv = { num: ret.num };\n\t\t\t\t\tif (ret.den !== undefined)\n\t\t\t\t\t\tmv.den = ret.den;\n\t\t\t\t\tmeter.value.push(mv);\n\t\t\t\t\tif (tokens.length === 0) break;\n\t\t\t\t\t//var tok = tokens.shift();\n\t\t\t\t\t//if (tok.token !== '+') throw \"Extra characters in M: line\";\n\t\t\t\t}\n\n\t\t\t\tif (multilineVars.havent_set_length === true) {\n\t\t\t\t\tmultilineVars.default_length = totalLength < 0.75 ? 0.0625 : 0.125;\n\t\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t\t}\n\t\t\t\treturn meter;\n\t\t\t} catch (e) {\n\t\t\t\twarn(e, line, 0);\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\n\tthis.calcTempo = function(relTempo) {\n\t\tvar dur = 1/4;\n\t\tif (multilineVars.meter && multilineVars.meter.type === 'specified') {\n\t\t\tdur = 1 / parseInt(multilineVars.meter.value[0].den);\n\t\t} else if (multilineVars.origMeter && multilineVars.origMeter.type === 'specified') {\n\t\t\tdur = 1 / parseInt(multilineVars.origMeter.value[0].den);\n\t\t}\n\t\t//var dur = multilineVars.default_length ? multilineVars.default_length : 1;\n\t\tfor (var i = 0; i < relTempo.duration; i++)\n\t\t\trelTempo.duration[i] = dur * relTempo.duration[i];\n\t\treturn relTempo;\n\t};\n\n\tthis.resolveTempo = function() {\n\t\tif (multilineVars.tempo) {\t// If there's a tempo waiting to be resolved\n\t\t\tthis.calcTempo(multilineVars.tempo);\n\t\t\ttune.metaText.tempo = multilineVars.tempo;\n\t\t\tdelete multilineVars.tempo;\n\t\t}\n\t};\n\n\tthis.addUserDefinition = function(line, start, end) {\n\t\tvar equals = line.indexOf('=', start);\n\t\tif (equals === -1) {\n\t\t\twarn(\"Need an = in a macro definition\", line, start);\n\t\t\treturn;\n\t\t}\n\n\t\tvar before = parseCommon.strip(line.substring(start, equals));\n\t\tvar after = parseCommon.strip(line.substring(equals+1));\n\n\t\tif (before.length !== 1) {\n\t\t\twarn(\"Macro definitions can only be one character\", line, start);\n\t\t\treturn;\n\t\t}\n\t\tvar legalChars = \"HIJKLMNOPQRSTUVWXYhijklmnopqrstuvw~\";\n\t\tif (legalChars.indexOf(before) === -1) {\n\t\t\twarn(\"Macro definitions must be H-Y, h-w, or tilde\", line, start);\n\t\t\treturn;\n\t\t}\n\t\tif (after.length === 0) {\n\t\t\twarn(\"Missing macro definition\", line, start);\n\t\t\treturn;\n\t\t}\n\t\tif (multilineVars.macros === undefined)\n\t\t\tmultilineVars.macros = {};\n\t\tmultilineVars.macros[before] = after;\n\t};\n\n\tthis.setDefaultLength = function(line, start, end) {\n\t\tvar len = line.substring(start, end).replace(/ /g, \"\");\n\t\tvar len_arr = len.split('/');\n\t\tif (len_arr.length === 2) {\n\t\t\tvar n = parseInt(len_arr[0]);\n\t\t\tvar d = parseInt(len_arr[1]);\n\t\t\tif (d > 0) {\n\t\t\t\tmultilineVars.default_length = n / d;\t// a whole note is 1\n\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t}\n\t\t} else if (len_arr.length === 1 && len_arr[0] === '1') {\n\t\t\tmultilineVars.default_length = 1;\n\t\t\tmultilineVars.havent_set_length = false;\n\t\t}\n\t};\n\n\n\tvar tempoString = {\n\n\t\tlarghissimo: 20,\n\t\tadagissimo: 24,\n\t\tsostenuto: 28,\n\t\tgrave: 32,\n\t\tlargo: 40,\n\t\tlento: 50,\n\t\tlarghetto: 60,\n\t\tadagio: 68,\n\t\tadagietto: 74,\n\t\tandante: 80,\n\t\tandantino: 88,\n\t\t\"marcia moderato\": 84,\n\t\t\"andante moderato\": 100,\n\t\tmoderato: 112,\n\t\tallegretto: 116,\n\t\t\"allegro moderato\": 120,\n\t\tallegro: 126,\n\t\tanimato: 132,\n\t\tagitato: 140,\n\t\tveloce: 148,\n\t\t\"mosso vivo\": 156,\n\t\tvivace: 164,\n\t\tvivacissimo: 172,\n\t\tallegrissimo: 176,\n\t\tpresto: 184,\n\t\tprestissimo: 210,\n\t};\n\n\tthis.setTempo = function(line, start, end, iChar) {\n\t\t//Q - tempo; can be used to specify the notes per minute, e.g. If\n\t\t//the meter denominator is a 4 note then Q:120 or Q:C=120\n\t\t//is 120 quarter notes per minute. Similarly  Q:C3=40 would be 40\n\t\t//dotted half notes per minute. An absolute tempo may also be\n\t\t//set, e.g. Q:1/8=120 is 120 eighth notes per minute,\n\t\t//irrespective of the meter's denominator.\n\t\t//\n\t\t// This is either a number, \"C=number\", \"Cnumber=number\", or fraction [fraction...]=number\n\t\t// It depends on the M: field, which may either not be present, or may appear after this.\n\t\t// If M: is not present, an eighth note is used.\n\t\t// That means that this field can't be calculated until the end, if it is the first three types, since we don't know if we'll see an M: field.\n\t\t// So, if it is the fourth type, set it here, otherwise, save the info in the multilineVars.\n\t\t// The temporary variables we keep are the duration and the bpm. In the first two forms, the duration is 1.\n\t\t// In addition, a quoted string may both precede and follow. If a quoted string is present, then the duration part is optional.\n\t\ttry {\n\t\t\tvar tokens = tokenizer.tokenize(line, start, end);\n\n\t\t\tif (tokens.length === 0) throw \"Missing parameter in Q: field\";\n\n\t\t\tvar tempo = { startChar: iChar+start-2, endChar: iChar+end };\n\t\t\tvar delaySet = true;\n\t\t\tvar token = tokens.shift();\n\t\t\tif (token.type === 'quote') {\n\t\t\t\ttempo.preString = token.token;\n\t\t\t\ttoken = tokens.shift();\n\t\t\t\tif (tokens.length === 0) {\t// It's ok to just get a string for the tempo\n\t\t\t\t\t// If the string is a well-known tempo, put in the bpm\n\t\t\t\t\tif (tempoString[tempo.preString.toLowerCase()]) {\n\t\t\t\t\t\ttempo.bpm = tempoString[tempo.preString.toLowerCase()];\n\t\t\t\t\t\ttempo.suppressBpm = true;\n\t\t\t\t\t}\n\t\t\t\t\treturn {type: 'immediate', tempo: tempo};\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (token.type === 'alpha' && token.token === 'C')\t { // either type 2 or type 3\n\t\t\t\tif (tokens.length === 0) throw \"Missing tempo after C in Q: field\";\n\t\t\t\ttoken = tokens.shift();\n\t\t\t\tif (token.type === 'punct' && token.token === '=') {\n\t\t\t\t\t// This is a type 2 format. The duration is an implied 1\n\t\t\t\t\tif (tokens.length === 0) throw \"Missing tempo after = in Q: field\";\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.type !== 'number') throw \"Expected number after = in Q: field\";\n\t\t\t\t\ttempo.duration = [1];\n\t\t\t\t\ttempo.bpm = parseInt(token.token);\n\t\t\t\t} else if (token.type === 'number') {\n\t\t\t\t\t// This is a type 3 format.\n\t\t\t\t\ttempo.duration = [parseInt(token.token)];\n\t\t\t\t\tif (tokens.length === 0) throw \"Missing = after duration in Q: field\";\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.type !== 'punct' || token.token !== '=') throw \"Expected = after duration in Q: field\";\n\t\t\t\t\tif (tokens.length === 0) throw \"Missing tempo after = in Q: field\";\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.type !== 'number') throw \"Expected number after = in Q: field\";\n\t\t\t\t\ttempo.bpm = parseInt(token.token);\n\t\t\t\t} else throw \"Expected number or equal after C in Q: field\";\n\n\t\t\t} else if (token.type === 'number') {\t// either type 1 or type 4\n\t\t\t\tvar num = parseInt(token.token);\n\t\t\t\tif (tokens.length === 0 || tokens[0].type === 'quote') {\n\t\t\t\t\t// This is type 1\n\t\t\t\t\ttempo.duration = [1];\n\t\t\t\t\ttempo.bpm = num;\n\t\t\t\t} else {\t// This is type 4\n\t\t\t\t\tdelaySet = false;\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.type !== 'punct' && token.token !== '/') throw \"Expected fraction in Q: field\";\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.type !== 'number') throw \"Expected fraction in Q: field\";\n\t\t\t\t\tvar den = parseInt(token.token);\n\t\t\t\t\ttempo.duration = [num/den];\n\t\t\t\t\t// We got the first fraction, keep getting more as long as we find them.\n\t\t\t\t\twhile (tokens.length > 0  && tokens[0].token !== '=' && tokens[0].type !== 'quote') {\n\t\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\t\tif (token.type !== 'number') throw \"Expected fraction in Q: field\";\n\t\t\t\t\t\tnum = parseInt(token.token);\n\t\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\t\tif (token.type !== 'punct' && token.token !== '/') throw \"Expected fraction in Q: field\";\n\t\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\t\tif (token.type !== 'number') throw \"Expected fraction in Q: field\";\n\t\t\t\t\t\tden = parseInt(token.token);\n\t\t\t\t\t\ttempo.duration.push(num/den);\n\t\t\t\t\t}\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.type !== 'punct' && token.token !== '=') throw \"Expected = in Q: field\";\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.type !== 'number') throw \"Expected tempo in Q: field\";\n\t\t\t\t\ttempo.bpm = parseInt(token.token);\n\t\t\t\t}\n\t\t\t} else throw \"Unknown value in Q: field\";\n\t\t\tif (tokens.length !== 0) {\n\t\t\t\ttoken = tokens.shift();\n\t\t\t\tif (token.type === 'quote') {\n\t\t\t\t\ttempo.postString = token.token;\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t}\n\t\t\t\tif (tokens.length !== 0) throw \"Unexpected string at end of Q: field\";\n\t\t\t}\n\t\t\tif (multilineVars.printTempo === false)\n\t\t\t\ttempo.suppress = true;\n\t\t\treturn {type: delaySet?'delaySet':'immediate', tempo: tempo};\n\t\t} catch (msg) {\n\t\t\twarn(msg, line, start);\n\t\t\treturn {type: 'none'};\n\t\t}\n\t};\n\n\tthis.letter_to_inline_header = function(line, i, startLine)\n\t{\n\t\tvar ws = tokenizer.eatWhiteSpace(line, i);\n\t\ti +=ws;\n\t\tif (line.length >= i+5 && line[i] === '[' && line[i+2] === ':') {\n\t\t\tvar e = line.indexOf(']', i);\n\t\t\tvar startChar = multilineVars.iChar + i;\n\t\t\tvar endChar = multilineVars.iChar + e + 1;\n\t\t\tswitch(line.substring(i, i+3))\n\t\t\t{\n\t\t\t\tcase \"[I:\":\n\t\t\t\t\tvar err = parseDirective.addDirective(line.substring(i+3, e));\n\t\t\t\t\tif (err) warn(err, line, i);\n\t\t\t\t\treturn [ e-i+1+ws ];\n\t\t\t\tcase \"[M:\":\n\t\t\t\t\tvar meter = this.setMeter(line.substring(i+3, e));\n\t\t\t\t\tif (tuneBuilder.hasBeginMusic() && meter)\n\t\t\t\t\t\ttuneBuilder.appendStartingElement('meter', startChar, endChar, meter);\n\t\t\t\t\telse\n\t\t\t\t\t\tmultilineVars.meter = meter;\n\t\t\t\t\treturn [ e-i+1+ws ];\n\t\t\t\tcase \"[K:\":\n\t\t\t\t\tvar result = parseKeyVoice.parseKey(line.substring(i+3, e), true);\n\t\t\t\t\tif (result.foundClef && tuneBuilder.hasBeginMusic())\n\t\t\t\t\t\ttuneBuilder.appendStartingElement('clef', startChar, endChar, multilineVars.clef);\n\t\t\t\t\tif (result.foundKey && tuneBuilder.hasBeginMusic())\n\t\t\t\t\t\ttuneBuilder.appendStartingElement('key', startChar, endChar, parseKeyVoice.fixKey(multilineVars.clef, multilineVars.key));\n\t\t\t\t\treturn [ e-i+1+ws ];\n\t\t\t\tcase \"[P:\":\n\t\t\t\t\tvar part = parseDirective.parseFontChangeLine(line.substring(i+3, e))\n\t\t\t\t\tif (startLine || tune.lines.length <= tune.lineNum)\n\t\t\t\t\t\tmultilineVars.partForNextLine = { title: part, startChar: startChar, endChar: endChar };\n\t\t\t\t\telse\n\t\t\t\t\t\ttuneBuilder.appendElement('part', startChar, endChar, {title: part});\n\t\t\t\t\treturn [ e-i+1+ws ];\n\t\t\t\tcase \"[L:\":\n\t\t\t\t\tthis.setDefaultLength(line, i+3, e);\n\t\t\t\t\treturn [ e-i+1+ws ];\n\t\t\t\tcase \"[Q:\":\n\t\t\t\t\tif (e > 0) {\n\t\t\t\t\t\tvar tempo = this.setTempo(line, i+3, e, multilineVars.iChar);\n\t\t\t\t\t\tif (tempo.type === 'delaySet') {\n\t\t\t\t\t\t\tif (tuneBuilder.hasBeginMusic())\n\t\t\t\t\t\t\t\ttuneBuilder.appendElement('tempo', startChar, endChar, this.calcTempo(tempo.tempo));\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tmultilineVars.tempoForNextLine = ['tempo', startChar, endChar, this.calcTempo(tempo.tempo)]\n\t\t\t\t\t\t} else if (tempo.type === 'immediate') {\n\t\t\t\t\t\t\tif (!startLine && tuneBuilder.hasBeginMusic())\n\t\t\t\t\t\t\t\ttuneBuilder.appendElement('tempo', startChar, endChar, tempo.tempo);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tmultilineVars.tempoForNextLine = ['tempo', startChar, endChar, tempo.tempo]\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn [ e-i+1+ws, line[i+1], line.substring(i+3, e)];\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"[V:\":\n\t\t\t\t\tif (e > 0) {\n\t\t\t\t\t\tparseKeyVoice.parseVoice(line, i+3, e);\n\t\t\t\t\t\t//startNewLine();\n\t\t\t\t\t\treturn [ e-i+1+ws, line[i+1], line.substring(i+3, e)];\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"[r:\":\n\t\t\t\t\treturn [ e-i+1+ws ];\n\n\t\t\t\tdefault:\n\t\t\t\t\t// TODO: complain about unhandled header\n\t\t\t}\n\t\t}\n\t\treturn [ 0 ];\n\t};\n\n\tthis.letter_to_body_header = function(line, i)\n\t{\n\t\tif (line.length >= i+3) {\n\t\t\tswitch(line.substring(i, i+2))\n\t\t\t{\n\t\t\t\tcase \"I:\":\n\t\t\t\t\tvar err = parseDirective.addDirective(line.substring(i+2));\n\t\t\t\t\tif (err) warn(err, line, i);\n\t\t\t\t\treturn [ line.length ];\n\t\t\t\tcase \"M:\":\n\t\t\t\t\tvar meter = this.setMeter(line.substring(i+2));\n\t\t\t\t\tif (tuneBuilder.hasBeginMusic() && meter)\n\t\t\t\t\t\ttuneBuilder.appendStartingElement('meter', multilineVars.iChar + i, multilineVars.iChar + line.length, meter);\n\t\t\t\t\treturn [ line.length ];\n\t\t\t\tcase \"K:\":\n\t\t\t\t\tvar result = parseKeyVoice.parseKey(line.substring(i+2), tuneBuilder.hasBeginMusic());\n\t\t\t\t\tif (result.foundClef && tuneBuilder.hasBeginMusic())\n\t\t\t\t\t\ttuneBuilder.appendStartingElement('clef', multilineVars.iChar + i, multilineVars.iChar + line.length, multilineVars.clef);\n\t\t\t\t\tif (result.foundKey && tuneBuilder.hasBeginMusic())\n\t\t\t\t\t\ttuneBuilder.appendStartingElement('key', multilineVars.iChar + i, multilineVars.iChar + line.length, parseKeyVoice.fixKey(multilineVars.clef, multilineVars.key));\n\t\t\t\t\treturn [ line.length ];\n\t\t\t\tcase \"P:\":\n\t\t\t\t\tif (tuneBuilder.hasBeginMusic())\n\t\t\t\t\t\ttuneBuilder.appendElement('part', multilineVars.iChar + i, multilineVars.iChar + line.length, {title: line.substring(i+2)});\n\t\t\t\t\treturn [ line.length ];\n\t\t\t\tcase \"L:\":\n\t\t\t\t\tthis.setDefaultLength(line, i+2, line.length);\n\t\t\t\t\treturn [ line.length ];\n\t\t\t\tcase \"Q:\":\n\t\t\t\t\tvar e = line.indexOf('\\x12', i+2);\n\t\t\t\t\tif (e === -1) e = line.length;\n\t\t\t\t\tvar tempo = this.setTempo(line, i+2, e, multilineVars.iChar);\n\t\t\t\t\tif (tempo.type === 'delaySet') tuneBuilder.appendElement('tempo', multilineVars.iChar + i, multilineVars.iChar + line.length, this.calcTempo(tempo.tempo));\n\t\t\t\t\telse if (tempo.type === 'immediate') tuneBuilder.appendElement('tempo', multilineVars.iChar + i, multilineVars.iChar + line.length, tempo.tempo);\n\t\t\t\treturn [ e, line[i], parseCommon.strip(line.substring(i+2))];\n\t\t\t\tcase \"V:\":\n\t\t\t\t\tparseKeyVoice.parseVoice(line, i+2, line.length);\n//\t\t\t\t\t\tstartNewLine();\n\t\t\t\t\treturn [ line.length, line[i], parseCommon.strip(line.substring(i+2))];\n\t\t\t\tdefault:\n\t\t\t\t\t// TODO: complain about unhandled header\n\t\t\t}\n\t\t}\n\t\treturn [ 0 ];\n\t};\n\n\tvar metaTextHeaders = {\n\t\tA: 'author',\n\t\tB: 'book',\n\t\tC: 'composer',\n\t\tD: 'discography',\n\t\tF: 'url',\n\t\tG: 'group',\n\t\tI: 'instruction',\n\t\tN: 'notes',\n\t\tO: 'origin',\n\t\tR: 'rhythm',\n\t\tS: 'source',\n\t\tW: 'unalignedWords',\n\t\tZ: 'transcription'\n\t};\n\n\tthis.parseHeader = function(line) {\n\t\tvar field = metaTextHeaders[line[0]];\n\t\tvar origSize = line.length-2\n\t\tvar restOfLine = tokenizer.translateString(tokenizer.stripComment(line.substring(2)))\n\t\tif (field === 'unalignedWords' || field === 'notes') {\n\t\t\t// These fields can be multi-line\n\t\t\ttuneBuilder.addMetaTextArray(field, parseDirective.parseFontChangeLine(restOfLine), { startChar: multilineVars.iChar, endChar: multilineVars.iChar+line.length});\n\t\t} else if (field !== undefined) {\n\t\t\t// these fields are single line\n\t\t\ttuneBuilder.addMetaText(field, parseDirective.parseFontChangeLine(restOfLine), { startChar: multilineVars.iChar, endChar: multilineVars.iChar+line.length});\n\t\t} else {\n\t\t\tvar startChar = multilineVars.iChar;\n\t\t\tvar endChar = startChar + line.length;\n\t\t\tswitch(line[0])\n\t\t\t{\n\t\t\t\tcase  'H':\n\t\t\t\t\t// History is a little different because once it starts it continues until another header field is encountered\n\t\t\t\t\ttuneBuilder.addMetaTextArray(\"history\", parseDirective.parseFontChangeLine(restOfLine), { startChar: multilineVars.iChar, endChar: multilineVars.iChar+line.length});\n\t\t\t\t\tline = tokenizer.peekLine()\n\t\t\t\t\twhile (line && line[1] !== ':') {\n\t\t\t\t\t\ttokenizer.nextLine()\n\t\t\t\t\t\ttuneBuilder.addMetaTextArray(\"history\", parseDirective.parseFontChangeLine(tokenizer.translateString(tokenizer.stripComment(line))), { startChar: multilineVars.iChar, endChar: multilineVars.iChar+line.length});\n\t\t\t\t\t\tline = tokenizer.peekLine()\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase  'K':\n\t\t\t\t\t// since the key is the last thing that can happen in the header, we can resolve the tempo now\n\t\t\t\t\tthis.resolveTempo();\n\t\t\t\t\tvar result = parseKeyVoice.parseKey(line.substring(2), false);\n\t\t\t\t\tif (!multilineVars.is_in_header && tuneBuilder.hasBeginMusic()) {\n\t\t\t\t\t\tif (result.foundClef)\n\t\t\t\t\t\t\ttuneBuilder.appendStartingElement('clef', startChar, endChar, multilineVars.clef);\n\t\t\t\t\t\tif (result.foundKey)\n\t\t\t\t\t\t\ttuneBuilder.appendStartingElement('key', startChar, endChar, parseKeyVoice.fixKey(multilineVars.clef, multilineVars.key));\n\t\t\t\t\t}\n\t\t\t\t\tmultilineVars.is_in_header = false;\t// The first key signifies the end of the header.\n\t\t\t\t\tbreak;\n\t\t\t\tcase  'L':\n\t\t\t\t\tthis.setDefaultLength(line, 2, line.length);\n\t\t\t\t\tbreak;\n\t\t\t\tcase  'M':\n\t\t\t\t\tmultilineVars.origMeter = multilineVars.meter = this.setMeter(line.substring(2));\n\t\t\t\t\tbreak;\n\t\t\t\tcase  'P':\n\t\t\t\t\t// TODO-PER: There is more to do with parts, but the writer doesn't care.\n\t\t\t\t\tif (multilineVars.is_in_header)\n\t\t\t\t\t\ttuneBuilder.addMetaText(\"partOrder\", parseDirective.parseFontChangeLine(restOfLine), { startChar: multilineVars.iChar, endChar: multilineVars.iChar+line.length});\n\t\t\t\t\telse\n\t\t\t\t\t\tmultilineVars.partForNextLine = { title: restOfLine, startChar: startChar, endChar: endChar};\n\t\t\t\t\tbreak;\n\t\t\t\tcase  'Q':\n\t\t\t\t\tvar tempo = this.setTempo(line, 2, line.length, multilineVars.iChar);\n\t\t\t\t\tif (tempo.type === 'delaySet') multilineVars.tempo = tempo.tempo;\n\t\t\t\t\telse if (tempo.type === 'immediate') {\n\t\t\t\t\t\tif (!tune.metaText.tempo)\n\t\t\t\t\t\t\ttune.metaText.tempo = tempo.tempo;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tmultilineVars.tempoForNextLine = ['tempo', startChar, endChar, tempo.tempo]\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase  'T':\n\t\t\t\t\tif (multilineVars.titlecaps)\n\t\t\t\t\t\trestOfLine = restOfLine.toUpperCase();\t\t\n\t\t\t\t\tthis.setTitle(parseDirective.parseFontChangeLine(tokenizer.theReverser(restOfLine)), origSize);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'U':\n\t\t\t\t\tthis.addUserDefinition(line, 2, line.length);\n\t\t\t\t\tbreak;\n\t\t\t\tcase  'V':\n\t\t\t\t\tparseKeyVoice.parseVoice(line, 2, line.length);\n\t\t\t\t\tif (!multilineVars.is_in_header)\n\t\t\t\t\t\treturn {newline: true};\n\t\t\t\t\tbreak;\n\t\t\t\tcase  's':\n\t\t\t\t\treturn {symbols: true};\n\t\t\t\tcase  'w':\n\t\t\t\t\treturn {words: true};\n\t\t\t\tcase 'X':\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'E':\n\t\t\t\tcase 'm':\n\t\t\t\t\twarn(\"Ignored header\", line, 0);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treturn {regular: true};\n\t\t\t}\n\t\t}\n\t\treturn {};\n\t};\n};\n\nmodule.exports = ParseHeader;\n","var parseCommon = require('./abc_common');\nvar parseDirective = require('./abc_parse_directive');\nvar transpose = require('./abc_transpose');\n\nvar parseKeyVoice = {};\n\n(function() {\n\tvar tokenizer;\n\tvar warn;\n\tvar multilineVars;\n\tvar tune;\n\tvar tuneBuilder;\n\tparseKeyVoice.initialize = function(tokenizer_, warn_, multilineVars_, tune_, tuneBuilder_) {\n\t\ttokenizer = tokenizer_;\n\t\twarn = warn_;\n\t\tmultilineVars = multilineVars_;\n\t\ttune = tune_;\n\t\ttuneBuilder = tuneBuilder_;\n\t};\n\n\tparseKeyVoice.standardKey = function(keyName, root, acc, localTranspose) {\n\t\treturn transpose.keySignature(multilineVars, keyName, root, acc, localTranspose);\n\t};\n\n\tvar clefLines = {\n\t\t'treble': { clef: 'treble', pitch: 4, mid: 0 },\n\t\t'treble+8': { clef: 'treble+8', pitch: 4, mid: 0 },\n\t\t'treble-8': { clef: 'treble-8', pitch: 4, mid: 0 },\n\t\t'treble^8': { clef: 'treble+8', pitch: 4, mid: 0 },\n\t\t'treble_8': { clef: 'treble-8', pitch: 4, mid: 0 },\n\t\t'treble1': { clef: 'treble', pitch: 2, mid: 2 },\n\t\t'treble2': { clef: 'treble', pitch: 4, mid: 0 },\n\t\t'treble3': { clef: 'treble', pitch: 6, mid: -2 },\n\t\t'treble4': { clef: 'treble', pitch: 8, mid: -4 },\n\t\t'treble5': { clef: 'treble', pitch: 10, mid: -6 },\n\t\t'perc': { clef: 'perc', pitch: 6, mid: 0 },\n\t\t'none': { clef: 'none', mid: 0 },\n\t\t'bass': { clef: 'bass', pitch: 8, mid: -12 },\n\t\t'bass+8': { clef: 'bass+8', pitch: 8, mid: -12 },\n\t\t'bass-8': { clef: 'bass-8', pitch: 8, mid: -12 },\n\t\t'bass^8': { clef: 'bass+8', pitch: 8, mid: -12 },\n\t\t'bass_8': { clef: 'bass-8', pitch: 8, mid: -12 },\n\t\t'bass+16': { clef: 'bass', pitch: 8, mid: -12 },\n\t\t'bass-16': { clef: 'bass', pitch: 8, mid: -12 },\n\t\t'bass^16': { clef: 'bass', pitch: 8, mid: -12 },\n\t\t'bass_16': { clef: 'bass', pitch: 8, mid: -12 },\n\t\t'bass1': { clef: 'bass', pitch: 2, mid: -6 },\n\t\t'bass2': { clef: 'bass', pitch: 4, mid: -8 },\n\t\t'bass3': { clef: 'bass', pitch: 6, mid: -10 },\n\t\t'bass4': { clef: 'bass', pitch: 8, mid: -12 },\n\t\t'bass5': { clef: 'bass', pitch: 10, mid: -14 },\n\t\t'tenor': { clef: 'alto', pitch: 8, mid: -8 },\n\t\t'tenor1': { clef: 'alto', pitch: 2, mid: -2 },\n\t\t'tenor2': { clef: 'alto', pitch: 4, mid: -4 },\n\t\t'tenor3': { clef: 'alto', pitch: 6, mid: -6 },\n\t\t'tenor4': { clef: 'alto', pitch: 8, mid: -8 },\n\t\t'tenor5': { clef: 'alto', pitch: 10, mid: -10 },\n\t\t'alto': { clef: 'alto', pitch: 6, mid: -6 },\n\t\t'alto1': { clef: 'alto', pitch: 2, mid: -2 },\n\t\t'alto2': { clef: 'alto', pitch: 4, mid: -4 },\n\t\t'alto3': { clef: 'alto', pitch: 6, mid: -6 },\n\t\t'alto4': { clef: 'alto', pitch: 8, mid: -8 },\n\t\t'alto5': { clef: 'alto', pitch: 10, mid: -10 },\n\t\t'alto+8': { clef: 'alto+8', pitch: 6, mid: -6 },\n\t\t'alto-8': { clef: 'alto-8', pitch: 6, mid: -6 },\n\t\t'alto^8': { clef: 'alto+8', pitch: 6, mid: -6 },\n\t\t'alto_8': { clef: 'alto-8', pitch: 6, mid: -6 }\n\t};\n\n\tvar calcMiddle = function(clef, oct) {\n\t\tvar value = clefLines[clef];\n\t\tvar mid = value ? value.mid : 0;\n\t\treturn mid+oct;\n\t};\n\n\tparseKeyVoice.fixClef = function(clef) {\n\t\tvar value = clefLines[clef.type];\n\t\tif (value) {\n\t\t\tclef.clefPos = value.pitch;\n\t\t\tclef.type = value.clef;\n\t\t}\n\t};\n\n\tparseKeyVoice.deepCopyKey = function(key) {\n\t\tvar ret = { accidentals: [], root: key.root, acc: key.acc, mode: key.mode };\n\t\tkey.accidentals.forEach(function(k) {\n\t\tret.accidentals.push(parseCommon.clone(k));\n\t\t});\n\t\treturn ret;\n\t};\n\n\tvar pitches = {A: 5, B: 6, C: 0, D: 1, E: 2, F: 3, G: 4, a: 12, b: 13, c: 7, d: 8, e: 9, f: 10, g: 11};\n\n\tparseKeyVoice.addPosToKey = function(clef, key) {\n\t\t// Shift the key signature from the treble positions to whatever position is needed for the clef.\n\t\t// This may put the key signature unnaturally high or low, so if it does, then shift it.\n\t\tvar mid = clef.verticalPos;\n\t\tkey.accidentals.forEach(function(acc) {\n\t\t\tvar pitch = pitches[acc.note];\n\t\t\tpitch = pitch - mid;\n\t\t\tacc.verticalPos = pitch;\n\t\t});\n\t\tif (key.impliedNaturals)\n\t\t\tkey.impliedNaturals.forEach(function(acc) {\n\t\t\t\tvar pitch = pitches[acc.note];\n\t\t\t\tpitch = pitch - mid;\n\t\t\t\tacc.verticalPos = pitch;\n\t\t\t});\n\n\t\tif (mid < -10) {\n\t\t\tkey.accidentals.forEach(function(acc) {\n\t\t\t\tacc.verticalPos -= 7;\n\t\t\t\tif (acc.verticalPos >= 11 || (acc.verticalPos === 10 && acc.acc === 'flat'))\n\t\t\t\t\tacc.verticalPos -= 7;\n\t\t\t\tif (acc.note === 'A' && acc.acc === 'sharp' )\n\t\t\t\t\tacc.verticalPos -=7;\n\t\t\t\tif ((acc.note === 'G' || acc.note === 'F') && acc.acc === 'flat' )\n\t\t\t\t\tacc.verticalPos -=7;\n\t\t\t});\n\t\t\tif (key.impliedNaturals)\n\t\t\t\tkey.impliedNaturals.forEach(function(acc) {\n\t\t\t\t\tacc.verticalPos -= 7;\n\t\t\t\t\tif (acc.verticalPos >= 11 || (acc.verticalPos === 10 && acc.acc === 'flat'))\n\t\t\t\t\t\tacc.verticalPos -= 7;\n\t\t\t\t\tif (acc.note === 'A' && acc.acc === 'sharp' )\n\t\t\t\t\t\tacc.verticalPos -=7;\n\t\t\t\t\tif ((acc.note === 'G' || acc.note === 'F') && acc.acc === 'flat' )\n\t\t\t\t\t\tacc.verticalPos -=7;\n\t\t\t\t});\n\t\t} else if (mid < -4) {\n\t\t\tkey.accidentals.forEach(function(acc) {\n\t\t\t\tacc.verticalPos -= 7;\n\t\t\t\tif (mid === -8 && (acc.note === 'f' || acc.note === 'g') && acc.acc === 'sharp' )\n\t\t\t\t\tacc.verticalPos -=7;\n\t\t\t});\n\t\t\tif (key.impliedNaturals)\n\t\t\t\tkey.impliedNaturals.forEach(function(acc) {\n\t\t\t\t\tacc.verticalPos -= 7;\n\t\t\t\t\tif (mid === -8 && (acc.note === 'f' || acc.note === 'g') && acc.acc === 'sharp' )\n\t\t\t\t\t\tacc.verticalPos -=7;\n\t\t\t\t});\n\t\t} else if (mid >= 7) {\n\t\t\tkey.accidentals.forEach(function(acc) {\n\t\t\t\tacc.verticalPos += 7;\n\t\t\t});\n\t\t\tif (key.impliedNaturals)\n\t\t\t\tkey.impliedNaturals.forEach(function(acc) {\n\t\t\t\t\tacc.verticalPos += 7;\n\t\t\t\t});\n\t\t}\n\t};\n\n\tparseKeyVoice.fixKey = function(clef, key) {\n\t\tvar fixedKey = parseCommon.clone(key);\n\t\tparseKeyVoice.addPosToKey(clef, fixedKey);\n\t\treturn fixedKey;\n\t};\n\n\tvar parseMiddle = function(str) {\n\t\tvar i = 0;\n\t\tvar p = str[i++];\n\t\tif (p === '^' || p === '_')\n\t\t\tp = str[i++];\n\t  var mid = pitches[p];\n\t\tif (mid === undefined)\n\t\t\tmid = 6; // If a legal middle note wasn't received, just ignore it.\n\t\tfor ( ; i < str.length; i++) {\n\t\t\tif (str[i] === ',') mid -= 7;\n\t\t\telse if (str[i] === \"'\") mid += 7;\n\t\t\telse break;\n\t\t}\n\t\treturn { mid: mid - 6, str: str.substring(i) };\t// We get the note in the middle of the staff. We want the note that appears as the first ledger line below the staff.\n\t};\n\n\tvar normalizeAccidentals = function(accs) {\n\t\tfor (var i = 0; i < accs.length; i++) {\n\t\t\tif (accs[i].note === 'b')\n\t\t\t\taccs[i].note = 'B';\n\t\t\telse if (accs[i].note === 'a')\n\t\t\t\taccs[i].note = 'A';\n\t\t\telse if (accs[i].note === 'F')\n\t\t\t\taccs[i].note = 'f';\n\t\t\telse if (accs[i].note === 'E')\n\t\t\t\taccs[i].note = 'e';\n\t\t\telse if (accs[i].note === 'D')\n\t\t\t\taccs[i].note = 'd';\n\t\t\telse if (accs[i].note === 'C')\n\t\t\t\taccs[i].note = 'c';\n\t\t\telse if (accs[i].note === 'G' && accs[i].acc === 'sharp')\n\t\t\t\taccs[i].note = 'g';\n\t\t\telse if (accs[i].note === 'g' && accs[i].acc === 'flat')\n\t\t\t\taccs[i].note = 'G';\n\t\t}\n\t};\n\n\tparseKeyVoice.parseKey = function(str, isInline)\t// (and clef)\n\t{\n\t\t// returns:\n\t\t//\t\t{ foundClef: true, foundKey: true }\n\t\t// Side effects:\n\t\t//\t\tcalls warn() when there is a syntax error\n\t\t//\t\tsets these members of multilineVars:\n\t\t//\t\t\tclef\n\t\t//\t\t\tkey\n\t\t//\t\t\tstyle\n\t\t//\n\t\t// The format is:\n\t\t// K: [⟨key⟩] [⟨modifiers⟩*]\n\t\t// modifiers are any of the following in any order:\n\t\t//  [⟨clef⟩] [middle=⟨pitch⟩] [transpose=[-]⟨number⟩] [stafflines=⟨number⟩] [staffscale=⟨number⟩][style=⟨style⟩]\n\t\t// key is none|HP|Hp|⟨specified_key⟩\n\t\t// clef is [clef=] [⟨clef type⟩] [⟨line number⟩] [+8|-8]\n\t\t// specified_key is ⟨pitch⟩[#|b][mode(first three chars are significant)][accidentals*]\n\t\tif (str.length === 0) {\n\t\t\t// an empty K: field is the same as K:none\n\t\t\tstr = 'none';\n\t\t}\n\t\tvar tokens = tokenizer.tokenize(str, 0, str.length);\n\t\tvar ret = {};\n\n\t\t// Be sure that a key was passed in\n\t\tif (tokens.length === 0) {\n\t\t\twarn(\"Must pass in key signature.\", str, 0);\n\t\t\treturn ret;\n\t\t}\n\n\t\t// first the key\n\t\tswitch (tokens[0].token) {\n\t\t\tcase 'HP':\n\t\t\t\tparseDirective.addDirective(\"bagpipes\");\n\t\t\t\tmultilineVars.key = { root: \"HP\", accidentals: [], acc: \"\", mode: \"\" };\n\t\t\t\tret.foundKey = true;\n\t\t\t\ttokens.shift();\n\t\t\t\tbreak;\n\t\t\tcase 'Hp':\n\t\t\t\tparseDirective.addDirective(\"bagpipes\");\n\t\t\t\tmultilineVars.key = { root: \"Hp\", accidentals: [{acc: 'natural', note: 'g'}, {acc: 'sharp', note: 'f'}, {acc: 'sharp', note: 'c'}], acc: \"\", mode: \"\" };\n\t\t\t\tret.foundKey = true;\n\t\t\t\ttokens.shift();\n\t\t\t\tbreak;\n\t\t\tcase 'none':\n\t\t\t\t// we got the none key - that's the same as C to us\n\t\t\t\tmultilineVars.key = { root: \"none\", accidentals: [], acc: \"\", mode: \"\" };\n\t\t\t\tret.foundKey = true;\n\t\t\t\ttokens.shift();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tvar retPitch = tokenizer.getKeyPitch(tokens[0].token);\n\t\t\t\tif (retPitch.len > 0) {\n\t\t\t\t\tret.foundKey = true;\n\t\t\t\t\tvar acc = \"\";\n\t\t\t\t\tvar mode = \"\";\n\t\t\t\t\t// The accidental and mode might be attached to the pitch, so we might want to just remove the first character.\n\t\t\t\t\tif (tokens[0].token.length > 1)\n\t\t\t\t\t\ttokens[0].token = tokens[0].token.substring(1);\n\t\t\t\t\telse\n\t\t\t\t\t\ttokens.shift();\n\t\t\t\t\tvar key = retPitch.token;\n\t\t\t\t\t// We got a pitch to start with, so we might also have an accidental and a mode\n\t\t\t\t\tif (tokens.length > 0) {\n\t\t\t\t\t\tvar retAcc = tokenizer.getSharpFlat(tokens[0].token);\n\t\t\t\t\t\tif (retAcc.len > 0) {\n\t\t\t\t\t\t\tif (tokens[0].token.length > 1)\n\t\t\t\t\t\t\t\ttokens[0].token = tokens[0].token.substring(1);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\ttokens.shift();\n\t\t\t\t\t\t\tkey += retAcc.token;\n\t\t\t\t\t\t\tacc = retAcc.token;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tokens.length > 0) {\n\t\t\t\t\t\t\tvar retMode = tokenizer.getMode(tokens[0].token);\n\t\t\t\t\t\t\tif (retMode.len > 0) {\n\t\t\t\t\t\t\t\ttokens.shift();\n\t\t\t\t\t\t\t\tkey += retMode.token;\n\t\t\t\t\t\t\t\tmode = retMode.token;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Be sure that the key specified is in the list: not all keys are physically possible, like Cbmin.\n\t\t\t\t\t\tif (parseKeyVoice.standardKey(key, retPitch.token, acc, 0) === undefined) {\n\t\t\t\t\t\t\twarn(\"Unsupported key signature: \" + key, str, 0);\n\t\t\t\t\t\t\treturn ret;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// We need to do a deep copy because we are going to modify it\n\t\t\t\t\tvar oldKey = parseKeyVoice.deepCopyKey(multilineVars.key);\n\t\t\t\t\t//TODO-PER: HACK! To get the local transpose to work, the transposition is done for each line. This caused the global transposition variable to be factored in twice, so, instead of rewriting that right now, I'm just subtracting one of them here.\n\t\t\t\t\tvar keyCompensate = !isInline && multilineVars.globalTranspose ? -multilineVars.globalTranspose : 0;\n\t\t\t\t\t//console.log(\"parse\", JSON.stringify(multilineVars), isInline)\n\t\t\t\t\tvar savedOrigKey;\n\t\t\t\t\tif (isInline)\n\t\t\t\t\t\tsavedOrigKey = multilineVars.globalTransposeOrigKeySig\n\t\t\t\t\tmultilineVars.key = parseKeyVoice.deepCopyKey(parseKeyVoice.standardKey(key, retPitch.token, acc, keyCompensate));\n\t\t\t\t\tif (isInline)\n\t\t\t\t\t\tmultilineVars.globalTransposeOrigKeySig = savedOrigKey\n\t\t\t\t\tmultilineVars.key.mode = mode;\n\t\t\t\t\tif (oldKey) {\n\t\t\t\t\t\t// Add natural in all places that the old key had an accidental.\n\t\t\t\t\t\tvar kk;\n\t\t\t\t\t\tfor (var k = 0; k < multilineVars.key.accidentals.length; k++) {\n\t\t\t\t\t\t\tfor (kk = 0; kk < oldKey.accidentals.length; kk++) {\n\t\t\t\t\t\t\t\tif (oldKey.accidentals[kk].note && multilineVars.key.accidentals[k].note.toLowerCase() === oldKey.accidentals[kk].note.toLowerCase())\n\t\t\t\t\t\t\t\t\toldKey.accidentals[kk].note = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (kk = 0; kk < oldKey.accidentals.length; kk++) {\n\t\t\t\t\t\t\tif (oldKey.accidentals[kk].note) {\n\t\t\t\t\t\t\t\tif (!multilineVars.key.impliedNaturals)\n\t\t\t\t\t\t\t\t\tmultilineVars.key.impliedNaturals = [];\n\t\t\t\t\t\t\t\tmultilineVars.key.impliedNaturals.push({ acc: 'natural', note: oldKey.accidentals[kk].note });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t\t// There are two special cases of deprecated syntax. Ignore them if they occur\n\t\tif (tokens.length === 0) return ret;\n\t\tif (tokens[0].token === 'exp') tokens.shift();\n\t\tif (tokens.length === 0) return ret;\n\t\tif (tokens[0].token === 'oct') tokens.shift();\n\n\t\t// now see if there are extra accidentals\n\t\tif (tokens.length === 0) return ret;\n\t\tvar accs = tokenizer.getKeyAccidentals2(tokens);\n\t\tif (accs.warn)\n\t\t\twarn(accs.warn, str, 0);\n\t\t// If we have extra accidentals, first replace ones that are of the same pitch before adding them to the end.\n\t\tif (accs.accs) {\n\t\t\tif (!ret.foundKey) {\t\t// if there are only extra accidentals, make sure this is set.\n\t\t\t\tret.foundKey = true;\n\t\t\t\tmultilineVars.key = { root: \"none\", acc: \"\", mode: \"\", accidentals: [] };\n\t\t\t}\n\t\t\tnormalizeAccidentals(accs.accs);\n\t\t\tfor (var i = 0; i < accs.accs.length; i++) {\n\t\t\t\tvar found = false;\n\t\t\t\tfor (var j = 0; j < multilineVars.key.accidentals.length && !found; j++) {\n\t\t\t\t\tif (multilineVars.key.accidentals[j].note === accs.accs[i].note) {\n\t\t\t\t\t\tfound = true;\n\t\t\t\t\t\tif (multilineVars.key.accidentals[j].acc !== accs.accs[i].acc) {\n\t\t\t\t\t\t\t// If the accidental is different, then replace it. If it is the same, then the declaration was redundant, so just ignore it.\n\t\t\t\t\t\t\tmultilineVars.key.accidentals[j].acc = accs.accs[i].acc;\n\t\t\t\t\t\t\tif (!multilineVars.key.explicitAccidentals)\n\t\t\t\t\t\t\t\tmultilineVars.key.explicitAccidentals = [];\n\t\t\t\t\t\t\tmultilineVars.key.explicitAccidentals.push(accs.accs[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!found) {\n\t\t\t\t\tif (!multilineVars.key.explicitAccidentals)\n\t\t\t\t\t\tmultilineVars.key.explicitAccidentals = [];\n\t\t\t\t\tmultilineVars.key.explicitAccidentals.push(accs.accs[i]);\n\t\t\t\t\tmultilineVars.key.accidentals.push(accs.accs[i]);\n\t\t\t\t\tif (multilineVars.key.impliedNaturals) {\n\t\t\t\t\t\tfor (var kkk = 0; kkk < multilineVars.key.impliedNaturals.length; kkk++) {\n\t\t\t\t\t\t\tif (multilineVars.key.impliedNaturals[kkk].note === accs.accs[i].note)\n\t\t\t\t\t\t\t\tmultilineVars.key.impliedNaturals.splice(kkk, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Now see if any optional parameters are present. They have the form \"key=value\", except that \"clef=\" is optional\n\t\tvar token;\n\t\twhile (tokens.length > 0) {\n\t\t\tswitch (tokens[0].token) {\n\t\t\t\tcase \"m\":\n\t\t\t\tcase \"middle\":\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected = after middle\", str, 0); return ret; }\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.token !== \"=\") { warn(\"Expected = after middle\", str, token.start); break; }\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected parameter after middle=\", str, 0); return ret; }\n\t\t\t\t\tvar pitch = tokenizer.getPitchFromTokens(tokens);\n\t\t\t\t\tif (pitch.warn)\n\t\t\t\t\t\twarn(pitch.warn, str, 0);\n\t\t\t\t\tif (pitch.position)\n\t\t\t\t\t\tmultilineVars.clef.verticalPos = pitch.position - 6;\t// we get the position from the middle line, but want to offset it to the first ledger line.\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"transpose\":\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected = after transpose\", str, 0); return ret; }\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.token !== \"=\") { warn(\"Expected = after transpose\", str, token.start); break; }\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected parameter after transpose=\", str, 0); return ret; }\n\t\t\t\t\tif (tokens[0].type !== 'number') { warn(\"Expected number after transpose\", str, tokens[0].start); break; }\n\t\t\t\t\tmultilineVars.clef.transpose = tokens[0].intt;\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"stafflines\":\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected = after stafflines\", str, 0); return ret; }\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.token !== \"=\") { warn(\"Expected = after stafflines\", str, token.start); break; }\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected parameter after stafflines=\", str, 0); return ret; }\n\t\t\t\t\tif (tokens[0].type !== 'number') { warn(\"Expected number after stafflines\", str, tokens[0].start); break; }\n\t\t\t\t\tmultilineVars.clef.stafflines = tokens[0].intt;\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"staffscale\":\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected = after staffscale\", str, 0); return ret; }\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.token !== \"=\") { warn(\"Expected = after staffscale\", str, token.start); break; }\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected parameter after staffscale=\", str, 0); return ret; }\n\t\t\t\t\tif (tokens[0].type !== 'number') { warn(\"Expected number after staffscale\", str, tokens[0].start); break; }\n\t\t\t\t\tmultilineVars.clef.staffscale = tokens[0].floatt;\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"octave\":\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected = after octave\", str, 0); return ret; }\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.token !== \"=\") { warn(\"Expected = after octave\", str, token.start); break; }\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected parameter after octave=\", str, 0); return ret; }\n\t\t\t\t\tif (tokens[0].type !== 'number') { warn(\"Expected number after octave\", str, tokens[0].start); break; }\n\t\t\t\t\tmultilineVars.octave = tokens[0].intt;\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"style\":\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected = after style\", str, 0); return ret; }\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.token !== \"=\") { warn(\"Expected = after style\", str, token.start); break; }\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected parameter after style=\", str, 0); return ret; }\n\t\t\t\t\tswitch (tokens[0].token) {\n\t\t\t\t\t\tcase \"normal\":\n\t\t\t\t\t\tcase \"harmonic\":\n\t\t\t\t\t\tcase \"rhythm\":\n\t\t\t\t\t\tcase \"x\":\n\t\t\t\t\t\tcase \"triangle\":\n\t\t\t\t\t\t\tmultilineVars.style = tokens[0].token;\n\t\t\t\t\t\t\ttokens.shift();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\twarn(\"error parsing style element: \" + tokens[0].token, str, tokens[0].start);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"clef\":\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected = after clef\", str, 0); return ret; }\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.token !== \"=\") { warn(\"Expected = after clef\", str, token.start); break; }\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected parameter after clef=\", str, 0); return ret; }\n\t\t\t\t\t//break; yes, we want to fall through. That allows \"clef=\" to be optional.\n\t\t\t\tcase \"treble\":\n\t\t\t\tcase \"bass\":\n\t\t\t\tcase \"alto\":\n\t\t\t\tcase \"tenor\":\n\t\t\t\tcase \"perc\":\n\t\t\t\tcase \"none\":\n\t\t\t\t\t// clef is [clef=] [⟨clef type⟩] [⟨line number⟩] [+8|-8]\n\t\t\t\t\tvar clef = tokens.shift();\n\t\t\t\t\tswitch (clef.token) {\n\t\t\t\t\t\tcase 'treble':\n\t\t\t\t\t\tcase 'tenor':\n\t\t\t\t\t\tcase 'alto':\n\t\t\t\t\t\tcase 'bass':\n\t\t\t\t\t\tcase 'perc':\n\t\t\t\t\t\tcase 'none':\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'C': clef.token = 'alto'; break;\n\t\t\t\t\t\tcase 'F': clef.token = 'bass'; break;\n\t\t\t\t\t\tcase 'G': clef.token = 'treble'; break;\n\t\t\t\t\t\tcase 'c': clef.token = 'alto'; break;\n\t\t\t\t\t\tcase 'f': clef.token = 'bass'; break;\n\t\t\t\t\t\tcase 'g': clef.token = 'treble'; break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\twarn(\"Expected clef name. Found \" + clef.token, str, clef.start);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (tokens.length > 0 && tokens[0].type === 'number') {\n\t\t\t\t\t\tclef.token += tokens[0].token;\n\t\t\t\t\t\ttokens.shift();\n\t\t\t\t\t}\n\t\t\t\t\tif (tokens.length > 1 && (tokens[0].token === '-' || tokens[0].token === '+' || tokens[0].token === '^' || tokens[0].token === '_') && tokens[1].token === '8') {\n\t\t\t\t\t\tclef.token += tokens[0].token + tokens[1].token;\n\t\t\t\t\t\ttokens.shift();\n\t\t\t\t\t\ttokens.shift();\n\t\t\t\t\t}\n\t\t\t\t\tmultilineVars.clef = {type: clef.token, verticalPos: calcMiddle(clef.token, 0)};\n\t\t\t\t\tif (multilineVars.currentVoice && multilineVars.currentVoice.transpose !== undefined)\n\t\t\t\t\t\tmultilineVars.clef.transpose = multilineVars.currentVoice.transpose;\n\t\t\t\t\tret.foundClef = true;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\twarn(\"Unknown parameter: \" + tokens[0].token, str, tokens[0].start);\n\t\t\t\t\ttokens.shift();\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t};\n\n\tvar setCurrentVoice = function(id) {\n\t\tmultilineVars.currentVoice = multilineVars.voices[id];\n\t\ttuneBuilder.setCurrentVoice(multilineVars.currentVoice.staffNum, multilineVars.currentVoice.index);\n\t};\n\n\tparseKeyVoice.parseVoice = function(line, i, e) {\n\t\t//First truncate the string to the first non-space character after V: through either the\n\t\t//end of the line or a % character. Then remove trailing spaces, too.\n\t\tvar ret = tokenizer.getMeat(line, i, e);\n\t\tvar start = ret.start;\n\t\tvar end = ret.end;\n\t\t//The first thing on the line is the ID. It can be any non-space string and terminates at the\n\t\t//first space.\n\t\tvar id = tokenizer.getToken(line, start, end);\n\t\tif (id.length === 0) {\n\t\t\twarn(\"Expected a voice id\", line, start);\n\t\t\treturn;\n\t\t}\n\t\tvar isNew = false;\n\t\tif (multilineVars.voices[id] === undefined) {\n\t\t\tmultilineVars.voices[id] = {};\n\t\t\tisNew = true;\n\t\t\tif (multilineVars.score_is_present)\n\t\t\t\twarn(\"Can't have an unknown V: id when the %score directive is present\", line, start);\n\t\t}\n\t\tstart += id.length;\n\t\tstart += tokenizer.eatWhiteSpace(line, start);\n\n\t\tvar staffInfo = {startStaff: isNew};\n\t\tvar addNextTokenToStaffInfo = function(name) {\n\t\t\tvar attr = tokenizer.getVoiceToken(line, start, end);\n\t\t\tif (attr.warn !== undefined)\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice: \" + attr.warn, line, start);\n\t\t\telse if (attr.err !== undefined)\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice: \" + attr.err, line, start);\n\t\t\telse if (attr.token.length === 0 && line[start] !== '\"')\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice\", line, start);\n\t\t\telse\n\t\t\t\tstaffInfo[name] = attr.token;\n\t\t\tstart += attr.len;\n\t\t};\n\t\tvar addNextTokenToVoiceInfo = function(id, name, type) {\n\t\t\tvar attr = tokenizer.getVoiceToken(line, start, end);\n\t\t\tif (attr.warn !== undefined)\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice: \" + attr.warn, line, start);\n\t\t\telse if (attr.err !== undefined)\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice: \" + attr.err, line, start);\n\t\t\telse if (attr.token.length === 0 && line[start] !== '\"')\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice\", line, start);\n\t\t\telse {\n\t\t\t\tif (type === 'number')\n\t\t\t\t\tattr.token = parseFloat(attr.token);\n\t\t\t\tmultilineVars.voices[id][name] = attr.token;\n\t\t\t}\n\t\t\tstart += attr.len;\n\t\t};\n\t\tvar getNextToken = function(name, type) {\n\t\t\tvar attr = tokenizer.getVoiceToken(line, start, end);\n\t\t\tif (attr.warn !== undefined)\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice: \" + attr.warn, line, start);\n\t\t\telse if (attr.err !== undefined)\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice: \" + attr.err, line, start);\n\t\t\telse if (attr.token.length === 0 && line[start] !== '\"')\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice\", line, start);\n\t\t\telse {\n\t\t\t\tif (type === 'number')\n\t\t\t\t\tattr.token = parseFloat(attr.token);\n\t\t\t\treturn attr.token;\n\t\t\t}\n\t\t\tstart += attr.len;\n\t\t};\n\t\tvar addNextNoteTokenToVoiceInfo = function(id, name) {\n\t\t\tvar noteToTransposition = {\n\t\t\t\t\"_B\": 2,\n\t\t\t\t\"_E\": 9,\n\t\t\t\t\"_b\": -10,\n\t\t\t\t\"_e\": -3\n\t\t\t};\n\t\t\tvar attr = tokenizer.getVoiceToken(line, start, end);\n\t\t\tif (attr.warn !== undefined)\n\t\t\t\twarn(\"Expected one of (_B, _E, _b, _e) for \" + name + \" in voice: \" + attr.warn, line, start);\n\t\t\telse if (attr.token.length === 0 && line[start] !== '\"')\n\t\t\t\twarn(\"Expected one of (_B, _E, _b, _e) for \" + name + \" in voice\", line, start);\n\t\t\telse {\n\t\t\t\tvar t = noteToTransposition[attr.token];\n\t\t\t\tif (!t)\n\t\t\t\t\twarn(\"Expected one of (_B, _E, _b, _e) for \" + name + \" in voice\", line, start);\n\t\t\t\telse\n\t\t\t\t\tmultilineVars.voices[id][name] = t;\n\t\t\t}\n\t\t\tstart += attr.len;\n\t\t};\n\n\t\t//Then the following items can occur in any order:\n\t\twhile (start < end) {\n\t\t\tvar token = tokenizer.getVoiceToken(line, start, end);\n\t\t\tstart += token.len;\n\n\t\t\tif (token.warn) {\n\t\t\t\twarn(\"Error parsing voice: \" + token.warn, line, start);\n\t\t\t} else {\n\t\t\t\tvar attr = null;\n\t\t\t\tswitch (token.token) {\n\t\t\t\t\tcase 'clef':\n\t\t\t\t\tcase 'cl':\n\t\t\t\t\t\taddNextTokenToStaffInfo('clef');\n\t\t\t\t\t\t// TODO-PER: check for a legal clef; do octavizing\n\t\t\t\t\t\tvar oct = 0;\n\t//\t\t\t\t\t\t\tfor (var ii = 0; ii < staffInfo.clef.length; ii++) {\n\t//\t\t\t\t\t\t\t\tif (staffInfo.clef[ii] === ',') oct -= 7;\n\t//\t\t\t\t\t\t\t\telse if (staffInfo.clef[ii] === \"'\") oct += 7;\n\t//\t\t\t\t\t\t\t}\n\t\t\t\t\t\tif (staffInfo.clef !== undefined) {\n\t\t\t\t\t\t  staffInfo.clef = staffInfo.clef.replace(/[',]/g, \"\"); //'//comment for emacs formatting of regexp\n\t\t\t\t\t\t\tif (staffInfo.clef.indexOf('+16') !== -1) {\n\t\t\t\t\t\t\t\toct += 14;\n\t\t\t\t\t\t\t\tstaffInfo.clef = staffInfo.clef.replace('+16', '');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstaffInfo.verticalPos = calcMiddle(staffInfo.clef, oct);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'treble':\n\t\t\t\t\tcase 'bass':\n\t\t\t\t\tcase 'tenor':\n\t\t\t\t\tcase 'alto':\n\t\t\t\t\tcase 'perc':\n\t\t\t\t\tcase 'none':\n\t\t\t\t\tcase 'treble\\'':\n\t\t\t\t\tcase 'bass\\'':\n\t\t\t\t\tcase 'tenor\\'':\n\t\t\t\t\tcase 'alto\\'':\n\t\t\t\t\tcase 'none\\'':\n\t\t\t\t\tcase 'treble\\'\\'':\n\t\t\t\t\tcase 'bass\\'\\'':\n\t\t\t\t\tcase 'tenor\\'\\'':\n\t\t\t\t\tcase 'alto\\'\\'':\n\t\t\t\t\tcase 'none\\'\\'':\n\t\t\t\t\tcase 'treble,':\n\t\t\t\t\tcase 'bass,':\n\t\t\t\t\tcase 'tenor,':\n\t\t\t\t\tcase 'alto,':\n\t\t\t\t\tcase 'none,':\n\t\t\t\t\tcase 'treble,,':\n\t\t\t\t\tcase 'bass,,':\n\t\t\t\t\tcase 'tenor,,':\n\t\t\t\t\tcase 'alto,,':\n\t\t\t\t\tcase 'none,,':\n\t\t\t\t\t\t// TODO-PER: handle the octave indicators on the clef by changing the middle property\n\t\t\t\t\t\tvar oct2 = 0;\n\t//\t\t\t\t\t\t\tfor (var iii = 0; iii < token.token.length; iii++) {\n\t//\t\t\t\t\t\t\t\tif (token.token[iii] === ',') oct2 -= 7;\n\t//\t\t\t\t\t\t\t\telse if (token.token[iii] === \"'\") oct2 += 7;\n\t//\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t  staffInfo.clef = token.token.replace(/[',]/g, \"\"); //'//comment for emacs formatting of regexp\n\t\t\t\t\t\tstaffInfo.verticalPos = calcMiddle(staffInfo.clef, oct2);\n\t\t\t\t\t\tmultilineVars.voices[id].clef = token.token;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'staves':\n\t\t\t\t\tcase 'stave':\n\t\t\t\t\tcase 'stv':\n\t\t\t\t\t\taddNextTokenToStaffInfo('staves');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'brace':\n\t\t\t\t\tcase 'brc':\n\t\t\t\t\t\taddNextTokenToStaffInfo('brace');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'bracket':\n\t\t\t\t\tcase 'brk':\n\t\t\t\t\t\taddNextTokenToStaffInfo('bracket');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'name':\n\t\t\t\t\tcase 'nm':\n\t\t\t\t\t\taddNextTokenToStaffInfo('name');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'subname':\n\t\t\t\t\tcase 'sname':\n\t\t\t\t\tcase 'snm':\n\t\t\t\t\t\taddNextTokenToStaffInfo('subname');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'merge':\n\t\t\t\t\t\tstaffInfo.startStaff = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'stem':\n\t\t\t\t\tcase 'stems':\n\t\t\t\t\t\tattr = tokenizer.getVoiceToken(line, start, end);\n\t\t\t\t\t\tif (attr.warn !== undefined)\n\t\t\t\t\t\t\twarn(\"Expected value for stems in voice: \" + attr.warn, line, start);\n\t\t\t\t\t\telse if (attr.err !== undefined)\n\t\t\t\t\t\t\twarn(\"Expected value for stems in voice: \" + attr.err, line, start);\n\t\t\t\t\t\telse if (attr.token === 'up' || attr.token === 'down')\n\t\t\t\t\t\t\tmultilineVars.voices[id].stem = attr.token;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\twarn(\"Expected up or down for voice stem\", line, start);\n\t\t\t\t\t\tstart += attr.len;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'up':\n\t\t\t\t\tcase 'down':\n\t\t\t\t\t\tmultilineVars.voices[id].stem = token.token;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'middle':\n\t\t\t\t\tcase 'm':\n\t\t\t\t\t\taddNextTokenToStaffInfo('verticalPos');\n\t\t\t\t\t\tstaffInfo.verticalPos = parseMiddle(staffInfo.verticalPos).mid;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'gchords':\n\t\t\t\t\tcase 'gch':\n\t\t\t\t\t\tmultilineVars.voices[id].suppressChords = true;\n\t\t\t\t\t\t// gchords can stand on its own, or it could be gchords=0.\n\t\t\t\t\t\tattr = tokenizer.getVoiceToken(line, start, end);\n\t\t\t\t\t\tif (attr.token === \"0\")\n\t\t\t\t\t\t\tstart = start + attr.len;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'space':\n\t\t\t\t\tcase 'spc':\n\t\t\t\t\t\taddNextTokenToStaffInfo('spacing');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\taddNextTokenToVoiceInfo(id, 'scale', 'number');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'score':\n\t\t\t\t\t\taddNextNoteTokenToVoiceInfo(id, 'scoreTranspose');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'transpose':\n\t\t\t\t\t\taddNextTokenToVoiceInfo(id, 'transpose', 'number');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'stafflines':\n\t\t\t\t\t\taddNextTokenToVoiceInfo(id, 'stafflines', 'number');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'staffscale':\n\t\t\t\t\t\t// TODO-PER: This is passed to the engraver, but the engraver ignores it.\n\t\t\t\t\t\taddNextTokenToVoiceInfo(id, 'staffscale', 'number');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'octave':\n\t\t\t\t\t\taddNextTokenToVoiceInfo(id, 'octave', 'number');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'volume':\n\t\t\t\t\t\t// TODO-PER: This is accepted, but not implemented, yet.\n\t\t\t\t\t\taddNextTokenToVoiceInfo(id, 'volume', 'number');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'cue':\n\t\t\t\t\t\t// TODO-PER: This is accepted, but not implemented, yet.\n\t\t\t\t\t\tvar cue = getNextToken('cue', 'string');\n\t\t\t\t\t\tif (cue === 'on')\n\t\t\t\t\t\t\tmultilineVars.voices[id].scale = 0.6;\n\t\t\t\t\t\telse multilineVars.voices[id].scale = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"style\":\n\t\t\t\t\t\tattr = tokenizer.getVoiceToken(line, start, end);\n\t\t\t\t\t\tif (attr.warn !== undefined)\n\t\t\t\t\t\t\twarn(\"Expected value for style in voice: \" + attr.warn, line, start);\n\t\t\t\t\t\telse if (attr.err !== undefined)\n\t\t\t\t\t\t\twarn(\"Expected value for style in voice: \" + attr.err, line, start);\n\t\t\t\t\t\telse if (attr.token === 'normal' || attr.token === 'harmonic' || attr.token === 'rhythm' || attr.token === 'x' || attr.token === 'triangle')\n\t\t\t\t\t\t\tmultilineVars.voices[id].style = attr.token;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\twarn(\"Expected one of [normal, harmonic, rhythm, x, triangle] for voice style\", line, start);\n\t\t\t\t\t\tstart += attr.len;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t// default:\n\t\t\t\t\t// Use this to find V: usages that aren't handled.\n\t\t\t\t\t// \tconsole.log(\"parse voice\", token, tune.metaText.title);\n\t\t\t\t}\n\t\t\t}\n\t\t\tstart += tokenizer.eatWhiteSpace(line, start);\n\t\t}\n\n\t\t// now we've filled up staffInfo, figure out what to do with this voice\n\t\t// TODO-PER: It is unclear from the standard and the examples what to do with brace, bracket, and staves, so they are ignored for now.\n\t\tif (staffInfo.startStaff || multilineVars.staves.length === 0) {\n\t\t\tmultilineVars.staves.push({index: multilineVars.staves.length, meter: multilineVars.origMeter});\n\t\t\tif (!multilineVars.score_is_present)\n\t\t\t\tmultilineVars.staves[multilineVars.staves.length-1].numVoices = 0;\n\t\t}\n\t\tif (multilineVars.voices[id].staffNum === undefined) {\n\t\t\t// store where to write this for quick access later.\n\t\t\tmultilineVars.voices[id].staffNum = multilineVars.staves.length-1;\n\t\t\tvar vi = 0;\n\t\t\tfor(var v in multilineVars.voices) {\n\t\t\t\tif(multilineVars.voices.hasOwnProperty(v)) {\n\t\t\t\t\tif (multilineVars.voices[v].staffNum === multilineVars.voices[id].staffNum)\n\t\t\t\t\t\tvi++;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmultilineVars.voices[id].index = vi-1;\n\t\t}\n\t\tvar s = multilineVars.staves[multilineVars.voices[id].staffNum];\n\t\tif (!multilineVars.score_is_present)\n\t\t\ts.numVoices++;\n\t\tif (staffInfo.clef) s.clef = {type: staffInfo.clef, verticalPos: staffInfo.verticalPos};\n\t\tif (staffInfo.spacing) s.spacing_below_offset = staffInfo.spacing;\n\t\tif (staffInfo.verticalPos) s.verticalPos = staffInfo.verticalPos;\n\n\t\tif (staffInfo.name) {if (s.name) s.name.push(staffInfo.name); else s.name = [ staffInfo.name ];}\n\t\tif (staffInfo.subname) {if (s.subname) s.subname.push(staffInfo.subname); else s.subname = [ staffInfo.subname ];}\n\n\t\tsetCurrentVoice(id);\n\t};\n\n})();\n\nmodule.exports = parseKeyVoice;\n","var parseCommon = require('./abc_common');\nvar parseKeyVoice = require('./abc_parse_key_voice');\nvar transpose = require('./abc_transpose');\n\nvar tokenizer;\nvar warn;\nvar multilineVars;\nvar tune;\nvar tuneBuilder;\nvar header;\n\nvar {\n  legalAccents,\n  volumeDecorations,\n  dynamicDecorations,\n  accentPseudonyms,\n  accentDynamicPseudonyms,\n  nonDecorations,\n  durations,\n  pitches,\n  rests,\n  accMap,\n  tripletQ\n} = require('./abc_parse_settings')\n\nvar MusicParser = function(_tokenizer, _warn, _multilineVars, _tune, _tuneBuilder, _header) {\n\ttokenizer = _tokenizer;\n\twarn = _warn;\n\tmultilineVars = _multilineVars;\n\ttune = _tune;\n\ttuneBuilder = _tuneBuilder;\n\theader = _header;\n\tthis.lineContinuation = false;\n}\n\n//\n// Parse line of music\n//\n// This is a stream of <(bar-marking|header|note-group)...> in any order, with optional spaces between each element\n// core-note is <open-slur, accidental, pitch:required, octave, duration, close-slur&|tie> with no spaces within that\n// chord is <open-bracket:required, core-note:required... close-bracket:required duration> with no spaces within that\n// grace-notes is <open-brace:required, (open-slur|core-note:required|close-slur)..., close-brace:required> spaces are allowed\n// note-group is <grace-notes, chord symbols&|decorations..., grace-notes, slur&|triplet, chord|core-note, end-slur|tie> spaces are allowed between items\n// bar-marking is <ampersand> or <chord symbols&|decorations..., bar:required> spaces allowed\n// header is <open-bracket:required, K|M|L|V:required, colon:required, field:required, close-bracket:required> spaces can occur between the colon, in the field, and before the close bracket\n// header can also be the only thing on a line. This is true even if it is a continuation line. In this case the brackets are not required.\n// a space is a back-tick, a space, or a tab. If it is a back-tick, then there is no end-beam.\n\n// Line preprocessing: anything after a % is ignored (the double %% should have been taken care of before this)\n// Then, all leading and trailing spaces are ignored.\n// If there was a line continuation, the \\n was replaced by a \\r and the \\ was replaced by a space. This allows the construct\n// of having a header mid-line conceptually, but actually be at the start of the line. This is equivolent to putting the header in [ ].\n\n// TODO-PER: How to handle ! for line break?\n// TODO-PER: dots before bar, dots before slur\n// TODO-PER: U: redefinable symbols.\n\n// Ambiguous symbols:\n// \"[\" can be the start of a chord, the start of a header element or part of a bar line.\n// --- if it is immediately followed by \"|\", it is a bar line\n// --- if it is immediately followed by K: L: M: V: it is a header (note: there are other headers mentioned in the standard, but I'm not sure how they would be used.)\n// --- otherwise it is the beginning of a chord\n// \"(\" can be the start of a slur or a triplet\n// --- if it is followed by a number from 2-9, then it is a triplet\n// --- otherwise it is a slur\n// \"]\"\n// --- if there is a chord open, then this is the close\n// --- if it is after a [|, then it is an invisible bar line\n// --- otherwise, it is par of a bar\n// \".\" can be a bar modifier or a slur modifier, or a decoration\n// --- if it comes immediately before a bar, it is a bar modifier\n// --- if it comes immediately before a slur, it is a slur modifier\n// --- otherwise it is a decoration for the next note.\n// number:\n// --- if it is after a bar, with no space, it is an ending marker\n// --- if it is after a ( with no space, it is a triplet count\n// --- if it is after a pitch or octave or slash, then it is a duration\n\n// Unambiguous symbols (except inside quoted strings):\n// vertical-bar, colon: part of a bar\n// ABCDEFGabcdefg: pitch\n// xyzZ: rest\n// comma, prime: octave\n// close-paren: end-slur\n// hyphen: tie\n// tilde, v, u, bang, plus, THLMPSO: decoration\n// carat, underscore, equal: accidental\n// ampersand: time reset\n// open-curly, close-curly: grace notes\n// double-quote: chord symbol\n// less-than, greater-than, slash: duration\n// back-tick, space, tab: space\n\nvar isInTie = function(multilineVars, overlayLevel, el) {\n\tif (multilineVars.inTie[overlayLevel] === undefined)\n\t\treturn false;\n\t// If this is single voice music then the voice index isn't set, so we use the first voice.\n\tvar voiceIndex = multilineVars.currentVoice ? multilineVars.currentVoice.staffNum * 100 + multilineVars.currentVoice.index : 0;\n\tif (multilineVars.inTie[overlayLevel][voiceIndex]) {\n\t\tif (el.pitches !== undefined || el.rest.type !== 'spacer')\n\t\t\treturn true;\n\t}\n\treturn false;\n};\n\nvar el = { };\nMusicParser.prototype.parseMusic = function(line) {\n\theader.resolveTempo();\n\t//multilineVars.havent_set_length = false;\t// To late to set this now.\n\tmultilineVars.is_in_header = false;\t// We should have gotten a key header by now, but just in case, this is definitely out of the header.\n\tvar i = 0;\n\tvar startOfLine = multilineVars.iChar;\n\t// see if there is nothing but a comment on this line. If so, just ignore it. A full line comment is optional white space followed by %\n\twhile (tokenizer.isWhiteSpace(line[i]) && i < line.length)\n\t\ti++;\n\tif (i === line.length || line[i] === '%')\n\t\treturn;\n\n\t// Start with the standard staff, clef and key symbols on each line\n\tvar delayStartNewLine = multilineVars.start_new_line;\n\tif (multilineVars.continueall === undefined)\n\t\tmultilineVars.start_new_line = true;\n\telse\n\t\tmultilineVars.start_new_line = false;\n\tvar tripletNotesLeft = 0;\n\n\t// See if the line starts with a header field\n\tvar retHeader = header.letter_to_body_header(line, i);\n\tif (retHeader[0] > 0) {\n\t\ti += retHeader[0];\n\t\t// fixes bug on this: c[V:2]d\n\t\tif (retHeader[1] === 'V')\n\t\t\tthis.startNewLine();\n\t\t\t// delayStartNewLine = true;\n\t\t// TODO-PER: Handle inline headers\n\t}\n\n\tvar overlayLevel = 0;\n\twhile (i < line.length)\n\t{\n\t\tvar startI = i;\n\t\tif (line[i] === '%')\n\t\t\tbreak;\n\n\t\tvar retInlineHeader = header.letter_to_inline_header(line, i, delayStartNewLine);\n\t\tif (retInlineHeader[0] > 0) {\n\t\t\ti += retInlineHeader[0];\n\t\t\tif (retInlineHeader[1] === 'V')\n\t\t\t\tdelayStartNewLine = true; // fixes bug on this: c[V:2]d\n\t\t\t// TODO-PER: Handle inline headers\n\t\t\t//multilineVars.start_new_line = false;\n\t\t} else {\n\t\t\t// Wait until here to actually start the line because we know we're past the inline statements.\n\t\t\tif (!tuneBuilder.hasBeginMusic() || (delayStartNewLine && !this.lineContinuation)) {\n\t\t\t\tthis.startNewLine();\n\t\t\t\tdelayStartNewLine = false;\n\t\t\t}\n\n\t\t\t// We need to decide if the following characters are a bar-marking or a note-group.\n\t\t\t// Unfortunately, that is ambiguous. Both can contain chord symbols and decorations.\n\t\t\t// If there is a grace note either before or after the chord symbols and decorations, then it is definitely a note-group.\n\t\t\t// If there is a bar marker, it is definitely a bar-marking.\n\t\t\t// If there is either a core-note or chord, it is definitely a note-group.\n\t\t\t// So, loop while we find grace-notes, chords-symbols, or decorations. [It is an error to have more than one grace-note group in a row; the others can be multiple]\n\t\t\t// Then, if there is a grace-note, we know where to go.\n\t\t\t// Else see if we have a chord, core-note, slur, triplet, or bar.\n\n\t\t\tvar ret;\n\t\t\twhile (1) {\n\t\t\t\tret = tokenizer.eatWhiteSpace(line, i);\n\t\t\t\tif (ret > 0) {\n\t\t\t\t\ti += ret;\n\t\t\t\t}\n\t\t\t\tif (i > 0 && line[i-1] === '\\x12') {\n\t\t\t\t\t// there is one case where a line continuation isn't the same as being on the same line, and that is if the next character after it is a header.\n\t\t\t\t\tret = header.letter_to_body_header(line, i);\n\t\t\t\t\tif (ret[0] > 0) {\n\t\t\t\t\t\tif (ret[1] === 'V')\n\t\t\t\t\t\t\tthis.startNewLine(); // fixes bug on this: c\\\\nV:2]\\\\nd\n\t\t\t\t\t\t// TODO: insert header here\n\t\t\t\t\t\ti = ret[0];\n\t\t\t\t\t\tmultilineVars.start_new_line = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// gather all the grace notes, chord symbols and decorations\n\t\t\t\tret = letter_to_spacer(line, i);\n\t\t\t\tif (ret[0] > 0) {\n\t\t\t\t\ti += ret[0];\n\t\t\t\t}\n\n\t\t\t\tret = letter_to_chord(line, i);\n\t\t\t\tif (ret[0] > 0) {\n\t\t\t\t\t// There could be more than one chord here if they have different positions.\n\t\t\t\t\t// If two chords have the same position, then connect them with newline.\n\t\t\t\t\tif (!el.chord)\n\t\t\t\t\t\tel.chord = [];\n\t\t\t\t\tvar chordName = tokenizer.translateString(ret[1]);\n\t\t\t\t\tchordName = chordName.replace(/;/g, \"\\n\");\n\t\t\t\t\tvar addedChord = false;\n\t\t\t\t\tfor (var ci = 0; ci < el.chord.length; ci++) {\n\t\t\t\t\t\tif (el.chord[ci].position === ret[2]) {\n\t\t\t\t\t\t\taddedChord = true;\n\t\t\t\t\t\t\tel.chord[ci].name += \"\\n\" + chordName;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (addedChord === false) {\n\t\t\t\t\t\tif (ret[2] === null && ret[3])\n\t\t\t\t\t\t\tel.chord.push({name: chordName, rel_position: ret[3]});\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tel.chord.push({name: chordName, position: ret[2]});\n\t\t\t\t\t}\n\n\t\t\t\t\ti += ret[0];\n\t\t\t\t\tvar ii = tokenizer.skipWhiteSpace(line.substring(i));\n\t\t\t\t\tif (ii > 0)\n\t\t\t\t\t\tel.force_end_beam_last = true;\n\t\t\t\t\ti += ii;\n\t\t\t\t} else {\n\t\t\t\t\tif (nonDecorations.indexOf(line[i]) === -1)\n\t\t\t\t\t\tret = letter_to_accent(line, i);\n\t\t\t\t\telse ret = [ 0 ];\n\t\t\t\t\tif (ret[0] > 0) {\n\t\t\t\t\t\tif (ret[1] === null) {\n\t\t\t\t\t\t\tif (i + 1 < line.length)\n\t\t\t\t\t\t\t\tthis.startNewLine();\t// There was a ! in the middle of the line. Start a new line if there is anything after it.\n\t\t\t\t\t\t} else if (ret[1].length > 0) {\n\t\t\t\t\t\t\tif (ret[1].indexOf(\"style=\") === 0) {\n\t\t\t\t\t\t\t\tel.style = ret[1].substr(6);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (el.decoration === undefined)\n\t\t\t\t\t\t\t\t\tel.decoration = [];\n\t\t\t\t\t\t\t\tif (ret[1] === 'beambr1')\n\t\t\t\t\t\t\t\t\tel.beambr = 1;\n\t\t\t\t\t\t\t\telse if (ret[1] === \"beambr2\")\n\t\t\t\t\t\t\t\t\tel.beambr = 2;\n\t\t\t\t\t\t\t\telse el.decoration.push(ret[1]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ti += ret[0];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tret = letter_to_grace(line, i);\n\t\t\t\t\t\t// TODO-PER: Be sure there aren't already grace notes defined. That is an error.\n\t\t\t\t\t\tif (ret[0] > 0) {\n\t\t\t\t\t\t\tel.gracenotes = ret[1];\n\t\t\t\t\t\t\ti += ret[0];\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tret = letter_to_bar(line, i);\n\t\t\tif (ret[0] > 0) {\n\t\t\t\t// This is definitely a bar\n\t\t\t\toverlayLevel = 0;\n\t\t\t\tif (el.gracenotes !== undefined) {\n\t\t\t\t\t// Attach the grace note to an invisible note\n\t\t\t\t\tel.rest = { type: 'spacer' };\n\t\t\t\t\tel.duration = 0.125; // TODO-PER: I don't think the duration of this matters much, but figure out if it does.\n\t\t\t\t\tmultilineVars.addFormattingOptions(el, tune.formatting, 'note');\n\t\t\t\t\ttuneBuilder.appendElement('note', startOfLine+i, startOfLine+i+ret[0], el);\n\t\t\t\t\tmultilineVars.measureNotEmpty = true;\n\t\t\t\t\tel = {};\n\t\t\t\t}\n\t\t\t\tvar bar = {type: ret[1]};\n\t\t\t\tif (bar.type.length === 0)\n\t\t\t\t\twarn(\"Unknown bar type\", line, i);\n\t\t\t\telse {\n\t\t\t\t\tif (multilineVars.inEnding && bar.type !== 'bar_thin') {\n\t\t\t\t\t\tbar.endEnding = true;\n\t\t\t\t\t\tmultilineVars.inEnding = false;\n\t\t\t\t\t}\n\t\t\t\t\tif (ret[2]) {\n\t\t\t\t\t\tbar.startEnding = ret[2];\n\t\t\t\t\t\tif (multilineVars.inEnding)\n\t\t\t\t\t\t\tbar.endEnding = true;\n\t\t\t\t\t\tmultilineVars.inEnding = true;\n\t\t\t\t\t\tif (ret[1] === \"bar_right_repeat\") {\n\t\t\t\t\t\t\t// restore the tie and slur state from the start repeat\n\t\t\t\t\t\t\tmultilineVars.restoreStartEndingHoldOvers();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// save inTie, inTieChord\n\t\t\t\t\t\t\tmultilineVars.duplicateStartEndingHoldOvers();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (el.decoration !== undefined)\n\t\t\t\t\t\tbar.decoration = el.decoration;\n\t\t\t\t\tif (el.chord !== undefined)\n\t\t\t\t\t\tbar.chord = el.chord;\n\t\t\t\t\tif (bar.startEnding && multilineVars.barFirstEndingNum === undefined)\n\t\t\t\t\t\tmultilineVars.barFirstEndingNum = multilineVars.currBarNumber;\n\t\t\t\t\telse if (bar.startEnding && bar.endEnding && multilineVars.barFirstEndingNum)\n\t\t\t\t\t\tmultilineVars.currBarNumber = multilineVars.barFirstEndingNum;\n\t\t\t\t\telse if (bar.endEnding)\n\t\t\t\t\t\tmultilineVars.barFirstEndingNum = undefined;\n\t\t\t\t\tif (bar.type !== 'bar_invisible' && multilineVars.measureNotEmpty) {\n\t\t\t\t\t\tvar isFirstVoice = multilineVars.currentVoice === undefined || (multilineVars.currentVoice.staffNum ===  0 && multilineVars.currentVoice.index ===  0);\n\t\t\t\t\t\tif (isFirstVoice) {\n\t\t\t\t\t\t\tmultilineVars.currBarNumber++;\n\t\t\t\t\t\t\tif (multilineVars.barNumbers && multilineVars.currBarNumber % multilineVars.barNumbers === 0)\n\t\t\t\t\t\t\t\tbar.barNumber = multilineVars.currBarNumber;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tmultilineVars.addFormattingOptions(el, tune.formatting, 'bar');\n\t\t\t\t\ttuneBuilder.appendElement('bar', startOfLine+startI, startOfLine+i+ret[0], bar);\n\t\t\t\t\tmultilineVars.measureNotEmpty = false;\n\t\t\t\t\tel = {};\n\t\t\t\t}\n\t\t\t\ti += ret[0];\n\t\t\t} else if (line[i] === '&') {\t// backtrack to beginning of measure\n\t\t\t\tret = letter_to_overlay(line, i);\n\t\t\t\tif (ret[0] > 0) {\n\t\t\t\t\ttuneBuilder.appendElement('overlay', startOfLine, startOfLine+1, {});\n\t\t\t\t\ti += 1;\n\t\t\t\t\toverlayLevel++;\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\t// This is definitely a note group\n\t\t\t\t//\n\t\t\t\t// Look for as many open slurs and triplets as there are. (Note: only the first triplet is valid.)\n\t\t\t\tret = letter_to_open_slurs_and_triplets(line, i);\n\t\t\t\tif (ret.consumed > 0) {\n\t\t\t\t\tif (ret.startSlur !== undefined)\n\t\t\t\t\t\tel.startSlur = ret.startSlur;\n\t\t\t\t\tif (ret.dottedSlur)\n\t\t\t\t\t\tel.dottedSlur = true;\n\t\t\t\t\tif (ret.triplet !== undefined) {\n\t\t\t\t\t\tif (tripletNotesLeft > 0)\n\t\t\t\t\t\t\twarn(\"Can't nest triplets\", line, i);\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tel.startTriplet = ret.triplet;\n\t\t\t\t\t\t\tel.tripletMultiplier = ret.tripletQ / ret.triplet;\n\t\t\t\t\t\t\tel.tripletR = ret.num_notes;\n\t\t\t\t\t\t\ttripletNotesLeft = ret.num_notes === undefined ? ret.triplet : ret.num_notes;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ti += ret.consumed;\n\t\t\t\t}\n\n\t\t\t\t// handle chords.\n\t\t\t\tif (line[i] === '[') {\n\t\t\t\t\tvar chordStartChar = i;\n\t\t\t\t\ti++;\n\t\t\t\t\tvar chordDuration = null;\n\t\t\t\t\tvar rememberEndBeam = false;\n\n\t\t\t\t\tvar done = false;\n\t\t\t\t\twhile (!done) {\n\t\t\t\t\t\tvar accent = letter_to_accent(line, i);\n\t\t\t\t\t\tif (accent[0] > 0) {\n\t\t\t\t\t\t\ti += accent[0];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar chordNote = getCoreNote(line, i, {}, false);\n\t\t\t\t\t\tif (chordNote !== null && chordNote.pitch !== undefined) {\n\t\t\t\t\t\t\tif (accent[0] > 0) { // If we found a decoration above, it modifies the entire chord. \"style\" is handled below.\n\t\t\t\t\t\t\t\tif (accent[1].indexOf(\"style=\") !== 0) {\n\t\t\t\t\t\t\t\t\tif (el.decoration === undefined)\n\t\t\t\t\t\t\t\t\t\tel.decoration = [];\n\t\t\t\t\t\t\t\t\tel.decoration.push(accent[1]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (chordNote.end_beam) {\n\t\t\t\t\t\t\t\tel.end_beam = true;\n\t\t\t\t\t\t\t\tdelete chordNote.end_beam;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (el.pitches === undefined) {\n\t\t\t\t\t\t\t\tel.duration = chordNote.duration;\n\t\t\t\t\t\t\t\tel.pitches = [ chordNote ];\n\t\t\t\t\t\t\t} else\t// Just ignore the note lengths of all but the first note. The standard isn't clear here, but this seems less confusing.\n\t\t\t\t\t\t\t\tel.pitches.push(chordNote);\n\t\t\t\t\t\t\tdelete chordNote.duration;\n\t\t\t\t\t\t\tif (accent[0] > 0) { // If we found a style above, it modifies the individual pitch, not the entire chord.\n\t\t\t\t\t\t\t\tif (accent[1].indexOf(\"style=\") === 0) {\n\t\t\t\t\t\t\t\t\tel.pitches[el.pitches.length-1].style = accent[1].substr(6);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (multilineVars.inTieChord[el.pitches.length]) {\n\t\t\t\t\t\t\t\tchordNote.endTie = true;\n\t\t\t\t\t\t\t\tmultilineVars.inTieChord[el.pitches.length] = undefined;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (chordNote.startTie)\n\t\t\t\t\t\t\t\tmultilineVars.inTieChord[el.pitches.length] = true;\n\n\t\t\t\t\t\t\ti  = chordNote.endChar;\n\t\t\t\t\t\t\tdelete chordNote.endChar;\n\t\t\t\t\t\t} else if (line[i] === ' ') {\n\t\t\t\t\t\t\t// Spaces are not allowed in chords, but we can recover from it by ignoring it.\n\t\t\t\t\t\t\twarn(\"Spaces are not allowed in chords\", line, i);\n\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (i < line.length && line[i] === ']') {\n\t\t\t\t\t\t\t\t// consume the close bracket\n\t\t\t\t\t\t\t\ti++;\n\n\t\t\t\t\t\t\t\tif (multilineVars.next_note_duration !== 0) {\n\t\t\t\t\t\t\t\t\tel.duration = el.duration * multilineVars.next_note_duration;\n\t\t\t\t\t\t\t\t\tmultilineVars.next_note_duration = 0;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (isInTie(multilineVars,  overlayLevel, el)) {\n\t\t\t\t\t\t\t\t\tel.pitches.forEach(function(pitch) { pitch.endTie = true; });\n\t\t\t\t\t\t\t\t\tsetIsInTie(multilineVars,  overlayLevel, false);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (tripletNotesLeft > 0 && !(el.rest && el.rest.type === \"spacer\")) {\n\t\t\t\t\t\t\t\t\ttripletNotesLeft--;\n\t\t\t\t\t\t\t\t\tif (tripletNotesLeft === 0) {\n\t\t\t\t\t\t\t\t\t\tel.endTriplet = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tvar postChordDone = false;\n\t\t\t\t\t\t\t\twhile (i < line.length && !postChordDone) {\n\t\t\t\t\t\t\t\t\tswitch (line[i]) {\n\t\t\t\t\t\t\t\t\t\tcase ' ':\n\t\t\t\t\t\t\t\t\t\tcase '\\t':\n\t\t\t\t\t\t\t\t\t\t\taddEndBeam(el);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase ')':\n\t\t\t\t\t\t\t\t\t\t\tif (el.endSlur === undefined) el.endSlur = 1; else el.endSlur++;\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase '-':\n\t\t\t\t\t\t\t\t\t\t\tel.pitches.forEach(function(pitch) { pitch.startTie = {}; });\n\t\t\t\t\t\t\t\t\t\t\tsetIsInTie(multilineVars,  overlayLevel, true);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase '>':\n\t\t\t\t\t\t\t\t\t\tcase '<':\n\t\t\t\t\t\t\t\t\t\t\tvar br2 = getBrokenRhythm(line, i);\n\t\t\t\t\t\t\t\t\t\t\ti += br2[0] - 1;\t// index gets incremented below, so we'll let that happen\n\t\t\t\t\t\t\t\t\t\t\tmultilineVars.next_note_duration = br2[2];\n\t\t\t\t\t\t\t\t\t\t\tif (chordDuration)\n\t\t\t\t\t\t\t\t\t\t\t\tchordDuration = chordDuration * br2[1];\n\t\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\t\tchordDuration = br2[1];\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase '1':\n\t\t\t\t\t\t\t\t\t\tcase '2':\n\t\t\t\t\t\t\t\t\t\tcase '3':\n\t\t\t\t\t\t\t\t\t\tcase '4':\n\t\t\t\t\t\t\t\t\t\tcase '5':\n\t\t\t\t\t\t\t\t\t\tcase '6':\n\t\t\t\t\t\t\t\t\t\tcase '7':\n\t\t\t\t\t\t\t\t\t\tcase '8':\n\t\t\t\t\t\t\t\t\t\tcase '9':\n\t\t\t\t\t\t\t\t\t\tcase '/':\n\t\t\t\t\t\t\t\t\t\t\tvar fraction = tokenizer.getFraction(line, i);\n\t\t\t\t\t\t\t\t\t\t\tchordDuration = fraction.value;\n\t\t\t\t\t\t\t\t\t\t\ti = fraction.index;\n\t\t\t\t\t\t\t\t\t\t\tvar ch = line[i]\n\t\t\t\t\t\t\t\t\t\t\tif (ch === ' ')\n\t\t\t\t\t\t\t\t\t\t\t\trememberEndBeam = true;\n\t\t\t\t\t\t\t\t\t\t\tif (ch === '-' || ch === ')' || ch === ' ' || ch === '<' || ch === '>')\n\t\t\t\t\t\t\t\t\t\t\t\ti--; // Subtracting one because one is automatically added below\n\t\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\t\tpostChordDone = true;\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\t\tpostChordDone = true;\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (!postChordDone) {\n\t\t\t\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else\n\t\t\t\t\t\t\t\twarn(\"Expected ']' to end the chords\", line, i);\n\n\t\t\t\t\t\t\tif (el.pitches !== undefined) {\n\t\t\t\t\t\t\t\tif (chordDuration !== null) {\n\t\t\t\t\t\t\t\t\tel.duration = el.duration * chordDuration;\n\t\t\t\t\t\t\t\t\tif (rememberEndBeam)\n\t\t\t\t\t\t\t\t\t\taddEndBeam(el);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tmultilineVars.addFormattingOptions(el, tune.formatting, 'note');\n\t\t\t\t\t\t\t\ttuneBuilder.appendElement('note', startOfLine+startI, startOfLine+i, el);\n\t\t\t\t\t\t\t\tmultilineVars.measureNotEmpty = true;\n\t\t\t\t\t\t\t\tel = {};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdone = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\t// Single pitch\n\t\t\t\t\tvar el2 = {};\n\t\t\t\t\tvar core = getCoreNote(line, i, el2, true);\n\t\t\t\t\tif (el2.endTie !== undefined) setIsInTie(multilineVars,  overlayLevel, true);\n\t\t\t\t\tif (core !== null) {\n\t\t\t\t\t\tif (core.pitch !== undefined) {\n\t\t\t\t\t\t\tel.pitches = [ { } ];\n\t\t\t\t\t\t\t// TODO-PER: straighten this out so there is not so much copying: getCoreNote shouldn't change e'\n\t\t\t\t\t\t\tif (core.accidental !== undefined) el.pitches[0].accidental = core.accidental;\n\t\t\t\t\t\t\tel.pitches[0].pitch = core.pitch;\n\t\t\t\t\t\t\tel.pitches[0].name = core.name;\n\t\t\t\t\t\t\tif (core.midipitch || core.midipitch === 0)\n\t\t\t\t\t\t\t\tel.pitches[0].midipitch = core.midipitch;\n\t\t\t\t\t\t\tif (core.endSlur !== undefined) el.pitches[0].endSlur = core.endSlur;\n\t\t\t\t\t\t\tif (core.endTie !== undefined) el.pitches[0].endTie = core.endTie;\n\t\t\t\t\t\t\tif (core.startSlur !== undefined) el.pitches[0].startSlur = core.startSlur;\n\t\t\t\t\t\t\tif (el.startSlur !== undefined) el.pitches[0].startSlur = el.startSlur;\n\t\t\t\t\t\t\tif (el.dottedSlur !== undefined) el.pitches[0].dottedSlur = true;\n\t\t\t\t\t\t\tif (core.startTie !== undefined) el.pitches[0].startTie = core.startTie;\n\t\t\t\t\t\t\tif (el.startTie !== undefined) el.pitches[0].startTie = el.startTie;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tel.rest = core.rest;\n\t\t\t\t\t\t\tif (core.endSlur !== undefined) el.endSlur = core.endSlur;\n\t\t\t\t\t\t\tif (core.endTie !== undefined) el.rest.endTie = core.endTie;\n\t\t\t\t\t\t\tif (core.startSlur !== undefined) el.startSlur = core.startSlur;\n\t\t\t\t\t\t\tif (core.startTie !== undefined) el.rest.startTie = core.startTie;\n\t\t\t\t\t\t\tif (el.startTie !== undefined) el.rest.startTie = el.startTie;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (core.chord !== undefined) el.chord = core.chord;\n\t\t\t\t\t\tif (core.duration !== undefined) el.duration = core.duration;\n\t\t\t\t\t\tif (core.decoration !== undefined) el.decoration = core.decoration;\n\t\t\t\t\t\tif (core.graceNotes !== undefined) el.graceNotes = core.graceNotes;\n\t\t\t\t\t\tdelete el.startSlur;\n\t\t\t\t\t\tdelete el.dottedSlur;\n\t\t\t\t\t\tif (isInTie(multilineVars,  overlayLevel, el)) {\n\t\t\t\t\t\t\tif (el.pitches !== undefined) {\n\t\t\t\t\t\t\t\tel.pitches[0].endTie = true;\n\t\t\t\t\t\t\t} else if (el.rest.type !== 'spacer') {\n\t\t\t\t\t\t\t\tel.rest.endTie = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsetIsInTie(multilineVars,  overlayLevel, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (core.startTie || el.startTie)\n\t\t\t\t\t\t\tsetIsInTie(multilineVars,  overlayLevel, true);\n\t\t\t\t\t\ti  = core.endChar;\n\n\t\t\t\t\t\tif (tripletNotesLeft > 0 && !(core.rest && core.rest.type === \"spacer\")) {\n\t\t\t\t\t\t\ttripletNotesLeft--;\n\t\t\t\t\t\t\tif (tripletNotesLeft === 0) {\n\t\t\t\t\t\t\t\tel.endTriplet = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (core.end_beam)\n\t\t\t\t\t\t\taddEndBeam(el);\n\n\t\t\t\t\t\t// If there is a whole rest, then it should be the duration of the measure, not it's own duration. We need to special case it.\n\t\t\t\t\t\t// If the time signature length is greater than 4/4, though, then a whole rest has no special treatment.\n\t\t\t\t\t\tif (el.rest && el.rest.type === 'rest' && el.duration === 1 && durationOfMeasure(multilineVars) <= 1) {\n\t\t\t\t\t\t\tel.rest.type = 'whole';\n\n\t\t\t\t\t\t\tel.duration = durationOfMeasure(multilineVars);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Create a warning if this is not a displayable duration.\n\t\t\t\t\t\t// The first item on a line is a regular note value, each item after that represents a dot placed after the previous note.\n\t\t\t\t\t\t// Only durations less than a whole note are tested because whole note durations have some tricky rules.\n\n            if (el.duration < 1 && durations.indexOf(el.duration) === -1 && el.duration !== 0) {\n\t\t\t\t\t\t\tif (!el.rest || el.rest.type !== 'spacer')\n\t\t\t\t\t\t\t\twarn(\"Duration not representable: \" + line.substring(startI, i), line, i);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmultilineVars.addFormattingOptions(el, tune.formatting, 'note');\n\t\t\t\t\t\ttuneBuilder.appendElement('note', startOfLine+startI, startOfLine+i, el);\n\t\t\t\t\t\tmultilineVars.measureNotEmpty = true;\n\t\t\t\t\t\tel = {};\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (i === startI) {\t// don't know what this is, so ignore it.\n\t\t\t\t\tif (line[i] !== ' ' && line[i] !== '`')\n\t\t\t\t\t\twarn(\"Unknown character ignored\", line, i);\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tthis.lineContinuation = line.indexOf('\\x12') >= 0 || (retHeader[0] > 0)\n\tif (!this.lineContinuation) { el = { } }\n};\n\nvar setIsInTie =function(multilineVars, overlayLevel, value) {\n\t// If this is single voice music then the voice index isn't set, so we use the first voice.\n\tvar voiceIndex = multilineVars.currentVoice ? multilineVars.currentVoice.staffNum * 100 + multilineVars.currentVoice.index : 0;\n\tif (multilineVars.inTie[overlayLevel] === undefined)\n\t\tmultilineVars.inTie[overlayLevel] = [];\n\tmultilineVars.inTie[overlayLevel][voiceIndex] = value;\n};\n\nvar letter_to_chord = function(line, i) {\n\tif (line[i] === '\"')\n\t{\n\t\tvar chord = tokenizer.getBrackettedSubstring(line, i, 5);\n\t\tif (!chord[2])\n\t\t\twarn(\"Missing the closing quote while parsing the chord symbol\", line , i);\n\t\t// If it starts with ^, then the chord appears above.\n\t\t// If it starts with _ then the chord appears below.\n\t\t// (note that the 2.0 draft standard defines them as not chords, but annotations and also defines @.)\n\t\tif (chord[0] > 0 && chord[1].length > 0 && chord[1][0] === '^') {\n\t\t\tchord[1] = chord[1].substring(1);\n\t\t\tchord[2] = 'above';\n\t\t} else if (chord[0] > 0 && chord[1].length > 0 && chord[1][0] === '_') {\n\t\t\tchord[1] = chord[1].substring(1);\n\t\t\tchord[2] = 'below';\n\t\t} else if (chord[0] > 0 && chord[1].length > 0 && chord[1][0] === '<') {\n\t\t\tchord[1] = chord[1].substring(1);\n\t\t\tchord[2] = 'left';\n\t\t} else if (chord[0] > 0 && chord[1].length > 0 && chord[1][0] === '>') {\n\t\t\tchord[1] = chord[1].substring(1);\n\t\t\tchord[2] = 'right';\n\t\t} else if (chord[0] > 0 && chord[1].length > 0 && chord[1][0] === '@') {\n\t\t\t// @-15,5.7\n\t\t\tchord[1] = chord[1].substring(1);\n\t\t\tvar x = tokenizer.getFloat(chord[1]);\n\t\t\tif (x.digits === 0)\n\t\t\t\twarn(\"Missing first position in absolutely positioned annotation.\", line , i);\n\t\t\tchord[1] = chord[1].substring(x.digits);\n\t\t\tif (chord[1][0] !== ',')\n\t\t\t\twarn(\"Missing comma absolutely positioned annotation.\", line , i);\n\t\t\tchord[1] = chord[1].substring(1);\n\t\t\tvar y = tokenizer.getFloat(chord[1]);\n\t\t\tif (y.digits === 0)\n\t\t\t\twarn(\"Missing second position in absolutely positioned annotation.\", line , i);\n\t\t\tchord[1] = chord[1].substring(y.digits);\n\t\t\tvar ws = tokenizer.skipWhiteSpace(chord[1]);\n\t\t\tchord[1] = chord[1].substring(ws);\n\t\t\tchord[2] = null;\n\t\t\tchord[3] = { x: x.value, y: y.value };\n\t\t} else {\n\t\t\tif (multilineVars.freegchord !== true) {\n\t\t\t\tchord[1] = chord[1].replace(/([ABCDEFG0-9])b/g, \"$1♭\");\n\t\t\t\tchord[1] = chord[1].replace(/([ABCDEFG0-9])#/g, \"$1♯\");\n\t\t\t\tchord[1] = chord[1].replace(/^([ABCDEFG])([♯♭]?)o([^A-Za-z])/g, \"$1$2°$3\");\n\t\t\t\tchord[1] = chord[1].replace(/^([ABCDEFG])([♯♭]?)o$/g, \"$1$2°\");\n\t\t\t\tchord[1] = chord[1].replace(/^([ABCDEFG])([♯♭]?)0([^A-Za-z])/g, \"$1$2ø$3\");\n\t\t\t\tchord[1] = chord[1].replace(/^([ABCDEFG])([♯♭]?)\\^([^A-Za-z])/g, \"$1$2∆$3\");\n\t\t\t}\n\t\t\tchord[2] = 'default';\n\t\t\tchord[1] = transpose.chordName(multilineVars, chord[1]);\n\t\t}\n\t\treturn chord;\n\t}\n\treturn [0, \"\"];\n};\n\nvar letter_to_grace =  function(line, i) {\n\t// Grace notes are an array of: startslur, note, endslur, space; where note is accidental, pitch, duration\n\tif (line[i] === '{') {\n\t\t// fetch the gracenotes string and consume that into the array\n\t\tvar gra = tokenizer.getBrackettedSubstring(line, i, 1, '}');\n\t\tif (!gra[2])\n\t\t\twarn(\"Missing the closing '}' while parsing grace note\", line, i);\n\t\t// If there is a slur after the grace construction, then move it to the last note inside the grace construction\n\t\tif (line[i+gra[0]] === ')') {\n\t\t\tgra[0]++;\n\t\t\tgra[1] += ')';\n\t\t}\n\n\t\tvar gracenotes = [];\n\t\tvar ii = 0;\n\t\tvar inTie = false;\n\t\twhile (ii < gra[1].length) {\n\t\t\tvar acciaccatura = false;\n\t\t\tif (gra[1][ii] === '/') {\n\t\t\t\tacciaccatura = true;\n\t\t\t\tii++;\n\t\t\t}\n\t\t\tvar note = getCoreNote(gra[1], ii, {}, false);\n\t\t\tif (note !== null) {\n\t\t\t\t// The grace note durations should not be affected by the default length: they should be based on 1/16, so if that isn't the default, then multiply here.\n\t\t\t\tnote.duration = note.duration / (multilineVars.default_length * 8);\n\t\t\t\tif (acciaccatura)\n\t\t\t\t\tnote.acciaccatura = true;\n\t\t\t\tgracenotes.push(note);\n\n\t\t\t\tif (inTie) {\n\t\t\t\t\tnote.endTie = true;\n\t\t\t\t\tinTie = false;\n\t\t\t\t}\n\t\t\t\tif (note.startTie)\n\t\t\t\t\tinTie = true;\n\n\t\t\t\tii  = note.endChar;\n\t\t\t\tdelete note.endChar;\n\n\t\t\t\tif (note.end_beam) {\n\t\t\t\t\tnote.endBeam = true;\n\t\t\t\t\tdelete note.end_beam;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// We shouldn't get anything but notes or a space here, so report an error\n\t\t\t\tif (gra[1][ii] === ' ') {\n\t\t\t\t\tif (gracenotes.length > 0)\n\t\t\t\t\t\tgracenotes[gracenotes.length-1].endBeam = true;\n\t\t\t\t} else\n\t\t\t\t\twarn(\"Unknown character '\" + gra[1][ii] + \"' while parsing grace note\", line, i);\n\t\t\t\tii++;\n\t\t\t}\n\t\t}\n\t\tif (gracenotes.length)\n\t\t\treturn [gra[0], gracenotes];\n\t}\n\treturn [ 0 ];\n};\n\nfunction letter_to_overlay(line, i) {\n\tif (line[i] === '&') {\n\t\tvar start = i;\n\t\twhile (line[i] && line[i] !== ':' && line[i] !== '|')\n\t\t\ti++;\n\t\treturn [ i-start, line.substring(start+1, i) ];\n\t}\n\treturn [ 0 ];\n}\n\nfunction durationOfMeasure(multilineVars) {\n\t// TODO-PER: This could be more complicated if one of the unusual measures is used.\n\tvar meter = multilineVars.origMeter;\n\tif (!meter || meter.type !== 'specified')\n\t\treturn 1;\n\tif (!meter.value || meter.value.length === 0)\n\t\treturn 1;\n\treturn parseInt(meter.value[0].num, 10) / parseInt(meter.value[0].den, 10);\n}\n\n\n\n\nvar letter_to_accent = function(line, i) {\n\tvar macro = multilineVars.macros[line[i]];\n\n\tif (macro !== undefined) {\n\t\tif (macro[0] === '!' || macro[0] === '+')\n\t\t\tmacro = macro.substring(1);\n\t\tif (macro[macro.length-1] === '!' || macro[macro.length-1] === '+')\n\t\t\tmacro = macro.substring(0, macro.length-1);\n\t\tif (legalAccents.includes(macro))\n\t\t\treturn [ 1, macro ];\n\t\telse if (volumeDecorations.includes(macro)) {\n\t\t\tif (multilineVars.volumePosition === 'hidden')\n\t\t\t\tmacro = \"\";\n\t\t\treturn [1, macro];\n\t\t} else if (dynamicDecorations.includes(macro)) {\n\t\t\tif (multilineVars.dynamicPosition === 'hidden')\n\t\t\t\tmacro = \"\";\n\t\t\treturn [1, macro];\n\t\t} else {\n\t\t\tif (!multilineVars.ignoredDecorations.includes(macro))\n\t\t\t\twarn(\"Unknown macro: \" + macro, line, i);\n\t\t\treturn [1, '' ];\n\t\t}\n\t}\n\tswitch (line[i])\n\t{\n\t\tcase '.':\n\t\t\tif (line[i+1] === '(' || line[i+1] === '-') // a dot then open paren is a dotted slur; likewise dot dash is dotted tie.\n\t\t\t\tbreak;\n\t\t\treturn [1, 'staccato'];\n\t\tcase 'u':return [1, 'upbow'];\n\t\tcase 'v':return [1, 'downbow'];\n\t\tcase '~':return [1, 'irishroll'];\n\t\tcase '!':\n\t\tcase '+':\n\t\t\tvar ret = tokenizer.getBrackettedSubstring(line, i, 5);\n\t\t\t// Be sure that the accent is recognizable.\n\t\t\tif (ret[1].length > 1 && (ret[1][0] === '^' || ret[1][0] ==='_'))\n\t\t\t\tret[1] = ret[1].substring(1);\t// TODO-PER: The test files have indicators forcing the ornament to the top or bottom, but that isn't in the standard. We'll just ignore them.\n\t\t\tif (legalAccents.includes(ret[1]))\n\t\t\t\treturn ret;\n\t\t\tif (volumeDecorations.includes(ret[1])) {\n\t\t\t\tif (multilineVars.volumePosition === 'hidden' )\n\t\t\t\t\tret[1] = '';\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t\tif (dynamicDecorations.includes(ret[1])) {\n\t\t\t\tif (multilineVars.dynamicPosition === 'hidden' )\n\t\t\t\t\tret[1] = '';\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tvar ind = accentPseudonyms.findIndex(function (acc) { return ret[1] === acc[0]})\n\t\t\tif (ind >= 0) {\n\t\t\t\tret[1] = accentPseudonyms[ind][1];\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tind = accentDynamicPseudonyms.findIndex(function (acc) { return ret[1] === acc[0]})\n\t\t\tif (ind >= 0) {\n\t\t\t\tret[1] = accentDynamicPseudonyms[ind][1];\n\t\t\t\tif (multilineVars.dynamicPosition === 'hidden' )\n\t\t\t\t\tret[1] = '';\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// We didn't find the accent in the list, so consume the space, but don't return an accent.\n\t\t\t// Although it is possible that ! was used as a line break, so accept that.\n\t\t\tif (line[i] === '!' && (ret[0] === 1 || line[i+ret[0]-1] !== '!'))\n\t\t\t\treturn [1, null ];\n\t\t\twarn(\"Unknown decoration: \" + ret[1], line, i);\n\t\t\tret[1] = \"\";\n\t\t\treturn ret;\n\t\tcase 'H':return [1, 'fermata'];\n\t\tcase 'J':return [1, 'slide'];\n\t\tcase 'L':return [1, 'accent'];\n\t\tcase 'M':return [1, 'mordent'];\n\t\tcase 'O':return[1, 'coda'];\n\t\tcase 'P':return[1, 'pralltriller'];\n\t\tcase 'R':return [1, 'roll'];\n\t\tcase 'S':return [1, 'segno'];\n\t\tcase 'T':return [1, 'trill'];\n\t}\n\treturn [0, 0];\n};\n\nvar letter_to_spacer = function(line, i) {\n\tvar start = i;\n\twhile (tokenizer.isWhiteSpace(line[i]))\n\t\ti++;\n\treturn [ i-start ];\n};\n\n// returns the class of the bar line\n// the number of the repeat\n// and the number of characters used up\n// if 0 is returned, then the next element was not a bar line\nvar letter_to_bar = function(line, curr_pos) {\n\tvar ret = tokenizer.getBarLine(line, curr_pos);\n\tif (ret.len === 0)\n\t\treturn [0,\"\"];\n\tif (ret.warn) {\n\t\twarn(ret.warn, line, curr_pos);\n\t\treturn [ret.len,\"\"];\n\t}\n\n\t// Now see if this is a repeated ending\n\t// A repeated ending is all of the characters 1,2,3,4,5,6,7,8,9,0,-, and comma\n\t// It can also optionally start with '[', which is ignored.\n\t// Also, it can have white space before the '['.\n\tfor (var ws = 0; ws < line.length; ws++)\n\t\tif (line[curr_pos + ret.len + ws] !== ' ')\n\t\t\tbreak;\n\tvar orig_bar_len = ret.len;\n\tif (line[curr_pos+ret.len+ws] === '[') {\n\t\tret.len += ws + 1;\n\t}\n\n\t// It can also be a quoted string. It is unclear whether that construct requires '[', but it seems like it would. otherwise it would be confused with a regular chord.\n\tif (line[curr_pos+ret.len] === '\"' && line[curr_pos+ret.len-1] === '[') {\n\t\tvar ending = tokenizer.getBrackettedSubstring(line, curr_pos+ret.len, 5);\n\t\treturn [ret.len+ending[0], ret.token, ending[1]];\n\t}\n\tvar retRep = tokenizer.getTokenOf(line.substring(curr_pos+ret.len), \"1234567890-,\");\n\tif (retRep.len === 0 || retRep.token[0] === '-')\n\t\treturn [orig_bar_len, ret.token];\n\n\treturn [ret.len+retRep.len, ret.token, retRep.token];\n};\n\nvar letter_to_open_slurs_and_triplets =  function(line, i) {\n\t// consume spaces, and look for all the open parens. If there is a number after the open paren,\n\t// that is a triplet. Otherwise that is a slur. Collect all the slurs and the first triplet.\n\tvar ret = {};\n\tvar start = i;\n\tif (line[i] === '.' && line[i+1] === '(') {\n\t\tret.dottedSlur = true;\n\t\ti++;\n\t}\n\twhile (line[i] === '(' || tokenizer.isWhiteSpace(line[i])) {\n\t\tif (line[i] === '(') {\n\t\t\tif (i+1 < line.length && (line[i+1] >= '2' && line[i+1] <= '9')) {\n\t\t\t\tif (ret.triplet !== undefined)\n\t\t\t\t\twarn(\"Can't nest triplets\", line, i);\n\t\t\t\telse {\n\t\t\t\t\tret.triplet = line[i+1] - '0';\n\t\t\t\t\tret.tripletQ = tripletQ[ret.triplet];\n\t\t\t\t\tret.num_notes = ret.triplet;\n\t\t\t\t\tif (i+2 < line.length && line[i+2] === ':') {\n\t\t\t\t\t\t// We are expecting \"(p:q:r\" or \"(p:q\" or \"(p::r\"\n\t\t\t\t\t\t// That is: \"put p notes into the time of q for the next r notes\"\n\t\t\t\t\t\t// if r is missing, then it is equal to p.\n\t\t\t\t\t\t// if q is missing, it is determined from this table:\n\t\t\t\t\t\t// (2 notes in the time of 3\n\t\t\t\t\t\t// (3 notes in the time of 2\n\t\t\t\t\t\t// (4 notes in the time of 3\n\t\t\t\t\t\t// (5 notes in the time of n | if time sig is (6/8, 9/8, 12/8), n=3, else n=2\n\t\t\t\t\t\t// (6 notes in the time of 2\n\t\t\t\t\t\t// (7 notes in the time of n\n\t\t\t\t\t\t// (8 notes in the time of 3\n\t\t\t\t\t\t// (9 notes in the time of n\n\t\t\t\t\t\tif (i+3 < line.length && line[i+3] === ':') {\n\t\t\t\t\t\t\t// The second number, 'q', is not present.\n\t\t\t\t\t\t\tif (i+4 < line.length && (line[i+4] >= '1' && line[i+4] <= '9')) {\n\t\t\t\t\t\t\t\tret.num_notes = line[i+4] - '0';\n\t\t\t\t\t\t\t\ti += 3;\n\t\t\t\t\t\t\t} else\n\t\t\t\t\t\t\t\twarn(\"expected number after the two colons after the triplet to mark the duration\", line, i);\n\t\t\t\t\t\t} else if (i+3 < line.length && (line[i+3] >= '1' && line[i+3] <= '9')) {\n\t\t\t\t\t\t\tret.tripletQ = line[i+3] - '0';\n\t\t\t\t\t\t\tif (i+4 < line.length && line[i+4] === ':') {\n\t\t\t\t\t\t\t\tif (i+5 < line.length && (line[i+5] >= '1' && line[i+5] <= '9')) {\n\t\t\t\t\t\t\t\t\tret.num_notes = line[i+5] - '0';\n\t\t\t\t\t\t\t\t\ti += 4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ti += 2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\twarn(\"expected number after the triplet to mark the duration\", line, i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ti++;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (ret.startSlur === undefined)\n\t\t\t\t\tret.startSlur = 1;\n\t\t\t\telse\n\t\t\t\t\tret.startSlur++;\n\t\t\t}\n\t\t}\n\t\ti++;\n\t}\n\tret.consumed = i-start;\n\treturn ret;\n};\n\nMusicParser.prototype.startNewLine = function() {\n\tvar params = { startChar: -1, endChar: -1};\n\tif (multilineVars.partForNextLine.title)\n\t\tparams.part = multilineVars.partForNextLine;\n\tparams.clef = multilineVars.currentVoice && multilineVars.staves[multilineVars.currentVoice.staffNum].clef !== undefined ? parseCommon.clone(multilineVars.staves[multilineVars.currentVoice.staffNum].clef) : parseCommon.clone(multilineVars.clef);\n\tvar scoreTranspose = multilineVars.currentVoice ? multilineVars.currentVoice.scoreTranspose : 0;\n\tparams.key = parseKeyVoice.standardKey(multilineVars.key.root+multilineVars.key.acc+multilineVars.key.mode, multilineVars.key.root, multilineVars.key.acc, scoreTranspose);\n\tparams.key.mode = multilineVars.key.mode;\n\tif (multilineVars.key.impliedNaturals)\n\t\tparams.key.impliedNaturals = multilineVars.key.impliedNaturals;\n\tif (multilineVars.key.explicitAccidentals) {\n\t\tfor (var i = 0; i < multilineVars.key.explicitAccidentals.length; i++) {\n\t\t\tvar found = false;\n\t\t\tfor (var j = 0; j < params.key.accidentals.length; j++) {\n\t\t\t\tif (params.key.accidentals[j].note === multilineVars.key.explicitAccidentals[i].note) {\n\t\t\t\t\t// If the note is already in the list, override it with the new value\n\t\t\t\t\tparams.key.accidentals[j].acc = multilineVars.key.explicitAccidentals[i].acc;\n\t\t\t\t\tfound = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!found)\n\t\t\t\tparams.key.accidentals.push(multilineVars.key.explicitAccidentals[i]);\n\t\t}\n\t}\n\tmultilineVars.targetKey = params.key;\n\tif (params.key.explicitAccidentals)\n\t\tdelete params.key.explicitAccidentals;\n\tparseKeyVoice.addPosToKey(params.clef, params.key);\n\tif (multilineVars.meter !== null) {\n\t\tif (multilineVars.currentVoice) {\n\t\t\tmultilineVars.staves.forEach(function(st) {\n\t\t\t\tst.meter = multilineVars.meter;\n\t\t\t});\n\t\t\tparams.meter = multilineVars.staves[multilineVars.currentVoice.staffNum].meter;\n\t\t\tmultilineVars.staves[multilineVars.currentVoice.staffNum].meter = null;\n\t\t} else\n\t\t\tparams.meter = multilineVars.meter;\n\t\tmultilineVars.meter = null;\n\t} else if (multilineVars.currentVoice && multilineVars.staves[multilineVars.currentVoice.staffNum].meter) {\n\t\t// Make sure that each voice gets the meter marking.\n\t\tparams.meter = multilineVars.staves[multilineVars.currentVoice.staffNum].meter;\n\t\tmultilineVars.staves[multilineVars.currentVoice.staffNum].meter = null;\n\t}\n\tif (multilineVars.currentVoice && multilineVars.currentVoice.name)\n\t\tparams.name = multilineVars.currentVoice.name;\n\tif (multilineVars.vocalfont)\n\t\tparams.vocalfont = multilineVars.vocalfont;\n\tif (multilineVars.tripletfont)\n\t\tparams.tripletfont = multilineVars.tripletfont;\n\tif (multilineVars.gchordfont)\n\t\tparams.gchordfont = multilineVars.gchordfont;\n\tif (multilineVars.style)\n\t\tparams.style = multilineVars.style;\n\tif (multilineVars.currentVoice) {\n\t\tvar staff = multilineVars.staves[multilineVars.currentVoice.staffNum];\n\t\tif (staff.brace) params.brace = staff.brace;\n\t\tif (staff.bracket) params.bracket = staff.bracket;\n\t\tif (staff.connectBarLines) params.connectBarLines = staff.connectBarLines;\n\t\tif (staff.name) params.name = staff.name[multilineVars.currentVoice.index];\n\t\tif (staff.subname) params.subname = staff.subname[multilineVars.currentVoice.index];\n\t\tif (multilineVars.currentVoice.stem)\n\t\t\tparams.stem = multilineVars.currentVoice.stem;\n\t\tif (multilineVars.currentVoice.stafflines)\n\t\t\tparams.stafflines = multilineVars.currentVoice.stafflines;\n\t\tif (multilineVars.currentVoice.staffscale)\n\t\t\tparams.staffscale = multilineVars.currentVoice.staffscale;\n\t\tif (multilineVars.currentVoice.scale)\n\t\t\tparams.scale = multilineVars.currentVoice.scale;\n\t\tif (multilineVars.currentVoice.color)\n\t\t\tparams.color = multilineVars.currentVoice.color;\n\t\tif (multilineVars.currentVoice.style)\n\t\t\tparams.style = multilineVars.currentVoice.style;\n\t\tif (multilineVars.currentVoice.transpose)\n\t\t\tparams.clef.transpose = multilineVars.currentVoice.transpose;\n\t}\n\tvar isFirstVoice = multilineVars.currentVoice === undefined || (multilineVars.currentVoice.staffNum ===  0 && multilineVars.currentVoice.index ===  0);\n\tif (multilineVars.barNumbers === 0 && isFirstVoice && multilineVars.currBarNumber !== 1)\n\t\tparams.barNumber = multilineVars.currBarNumber;\n\ttuneBuilder.startNewLine(params);\n\tif (multilineVars.key.impliedNaturals)\n\t\tdelete multilineVars.key.impliedNaturals;\n\n\tmultilineVars.partForNextLine = {};\n\tif (multilineVars.tempoForNextLine.length === 4)\n\t\ttuneBuilder.appendElement(multilineVars.tempoForNextLine[0],multilineVars.tempoForNextLine[1],multilineVars.tempoForNextLine[2],multilineVars.tempoForNextLine[3]);\n\tmultilineVars.tempoForNextLine = [];\n}\n\n// TODO-PER: make this a method in el.\nvar addEndBeam = function(el) {\n\tif (el.duration !== undefined && el.duration < 0.25)\n\t\tel.end_beam = true;\n\treturn el;\n};\n\nvar getCoreNote = function(line, index, el, canHaveBrokenRhythm) {\n\t//var el = { startChar: index };\n\tvar isComplete = function(state) {\n\t\treturn (state === 'octave' || state === 'duration' || state === 'Zduration' || state === 'broken_rhythm' || state === 'end_slur');\n\t};\n\tvar dottedTie;\n\tif (line[index] === '.' && line[index+1] === '-') {\n\t\tdottedTie = true;\n\t\tindex++;\n\t}\n\tvar state = 'startSlur';\n\tvar durationSetByPreviousNote = false;\n\twhile (1) {\n\t\tswitch(line[index]) {\n\t\t\tcase '(':\n\t\t\t\tif (state === 'startSlur') {\n\t\t\t\t\tif (el.startSlur === undefined) el.startSlur = 1; else el.startSlur++;\n\t\t\t\t} else if (isComplete(state)) {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase ')':\n\t\t\t\tif (isComplete(state)) {\n\t\t\t\t\tif (el.endSlur === undefined) el.endSlur = 1; else el.endSlur++;\n\t\t\t\t} else return null;\n\t\t\t\tbreak;\n\t\t\tcase '^':\n\t\t\t\tif (state === 'startSlur') {el.accidental = 'sharp';state = 'sharp2';}\n\t\t\t\telse if (state === 'sharp2') {el.accidental = 'dblsharp';state = 'pitch';}\n\t\t\t\telse if (isComplete(state)) {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase '_':\n\t\t\t\tif (state === 'startSlur') {el.accidental = 'flat';state = 'flat2';}\n\t\t\t\telse if (state === 'flat2') {el.accidental = 'dblflat';state = 'pitch';}\n\t\t\t\telse if (isComplete(state)) {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase '=':\n\t\t\t\tif (state === 'startSlur') {el.accidental = 'natural';state = 'pitch';}\n\t\t\t\telse if (isComplete(state)) {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase 'A':\n\t\t\tcase 'B':\n\t\t\tcase 'C':\n\t\t\tcase 'D':\n\t\t\tcase 'E':\n\t\t\tcase 'F':\n\t\t\tcase 'G':\n\t\t\tcase 'a':\n\t\t\tcase 'b':\n\t\t\tcase 'c':\n\t\t\tcase 'd':\n\t\t\tcase 'e':\n\t\t\tcase 'f':\n\t\t\tcase 'g':\n\t\t\t\tif (state === 'startSlur' || state === 'sharp2' || state === 'flat2' || state === 'pitch') {\n\t\t\t\t\tel.pitch = pitches[line[index]];\n\t\t\t\t\tel.pitch += 7 * (multilineVars.currentVoice && multilineVars.currentVoice.octave !== undefined ? multilineVars.currentVoice.octave : multilineVars.octave);\n\t\t\t\t\tel.name = line[index];\n\t\t\t\t\tif (el.accidental)\n\t\t\t\t\t\tel.name = accMap[el.accidental] + el.name;\n\t\t\t\t\ttranspose.note(multilineVars, el);\n\t\t\t\t\tstate = 'octave';\n\t\t\t\t\t// At this point we have a valid note. The rest is optional. Set the duration in case we don't get one below\n\t\t\t\t\tif (canHaveBrokenRhythm && multilineVars.next_note_duration !== 0) {\n\t\t\t\t\t\tel.duration = multilineVars.default_length * multilineVars.next_note_duration;\n\t\t\t\t\t\tmultilineVars.next_note_duration = 0;\n\t\t\t\t\t\tdurationSetByPreviousNote = true;\n\t\t\t\t\t} else\n\t\t\t\t\t\tel.duration = multilineVars.default_length;\n\t\t\t\t\t// If the clef is percussion, there is probably some translation of the pitch to a particular drum kit item.\n\t\t\t\t\tif ((multilineVars.clef && multilineVars.clef.type === \"perc\") ||\n\t\t\t\t\t\t(multilineVars.currentVoice && multilineVars.currentVoice.clef === \"perc\")) {\n\t\t\t\t\t\tvar key = line[index];\n\t\t\t\t\t\tif (el.accidental) {\n\t\t\t\t\t\t\tkey = accMap[el.accidental] + key;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tune.formatting && tune.formatting.midi && tune.formatting.midi.drummap)\n\t\t\t\t\t\tel.midipitch = tune.formatting.midi.drummap[key];\n\t\t\t\t\t}\n\t\t\t\t} else if (isComplete(state)) {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase ',':\n\t\t\t\tif (state === 'octave') {el.pitch -= 7; el.name += ','; }\n\t\t\t\telse if (isComplete(state)) {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase '\\'':\n\t\t\t\tif (state === 'octave') {el.pitch += 7; el.name += \"'\";  }\n\t\t\t\telse if (isComplete(state)) {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase 'x':\n\t\t\tcase 'X':\n\t\t\tcase 'y':\n\t\t\tcase 'z':\n\t\t\tcase 'Z':\n\t\t\t\tif (state === 'startSlur') {\n\t\t\t\t\tel.rest = { type: rests[line[index]] };\n\t\t\t\t\t// There shouldn't be some of the properties that notes have. If some sneak in due to bad syntax in the abc file,\n\t\t\t\t\t// just nix them here.\n\t\t\t\t\tdelete el.accidental;\n\t\t\t\t\tdelete el.startSlur;\n\t\t\t\t\tdelete el.startTie;\n\t\t\t\t\tdelete el.endSlur;\n\t\t\t\t\tdelete el.endTie;\n\t\t\t\t\tdelete el.end_beam;\n\t\t\t\t\tdelete el.grace_notes;\n\t\t\t\t\t// At this point we have a valid note. The rest is optional. Set the duration in case we don't get one below\n\t\t\t\t\tif (el.rest.type.indexOf('multimeasure') >= 0) {\n\t\t\t\t\t\tel.duration = tune.getBarLength();\n\t\t\t\t\t\tel.rest.text = 1;\n\t\t\t\t\t\tstate = 'Zduration';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (canHaveBrokenRhythm && multilineVars.next_note_duration !== 0) {\n\t\t\t\t\t\t\tel.duration = multilineVars.default_length * multilineVars.next_note_duration;\n\t\t\t\t\t\t\tmultilineVars.next_note_duration = 0;\n\t\t\t\t\t\t\tdurationSetByPreviousNote = true;\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\tel.duration = multilineVars.default_length;\n\t\t\t\t\t\tstate = 'duration';\n\t\t\t\t\t}\n\t\t\t\t} else if (isComplete(state)) {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase '1':\n\t\t\tcase '2':\n\t\t\tcase '3':\n\t\t\tcase '4':\n\t\t\tcase '5':\n\t\t\tcase '6':\n\t\t\tcase '7':\n\t\t\tcase '8':\n\t\t\tcase '9':\n\t\t\tcase '0':\n\t\t\tcase '/':\n\t\t\t\tif (state === 'octave' || state === 'duration') {\n\t\t\t\t\tvar fraction = tokenizer.getFraction(line, index);\n\t\t\t\t\t//if (!durationSetByPreviousNote)\n\t\t\t\t\tel.duration = el.duration * fraction.value;\n\t\t\t\t\t// TODO-PER: We can test the returned duration here and give a warning if it isn't the one expected.\n\t\t\t\t\tel.endChar = fraction.index;\n\t\t\t\t\twhile (fraction.index < line.length && (tokenizer.isWhiteSpace(line[fraction.index]) || line[fraction.index] === '-')) {\n\t\t\t\t\t\tif (line[fraction.index] === '-')\n\t\t\t\t\t\t\tel.startTie = {};\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tel = addEndBeam(el);\n\t\t\t\t\t\tfraction.index++;\n\t\t\t\t\t}\n\t\t\t\t\tindex = fraction.index-1;\n\t\t\t\t\tstate = 'broken_rhythm';\n\t\t\t\t} else if (state === 'sharp2') {\n\t\t\t\t\tel.accidental = 'quartersharp';state = 'pitch';\n\t\t\t\t} else if (state === 'flat2') {\n\t\t\t\t\tel.accidental = 'quarterflat';state = 'pitch';\n\t\t\t\t} else if (state === 'Zduration') {\n\t\t\t\t\tvar num = tokenizer.getNumber(line, index);\n\t\t\t\t\tel.duration = num.num * tune.getBarLength();\n\t\t\t\t\tel.rest.text = num.num;\n\t\t\t\t\tel.endChar = num.index;\n\t\t\t\t\treturn el;\n\t\t\t\t} else return null;\n\t\t\t\tbreak;\n\t\t\tcase '-':\n\t\t\t\tif (state === 'startSlur') {\n\t\t\t\t\t// This is the first character, so it must have been meant for the previous note. Correct that here.\n\t\t\t\t\ttuneBuilder.addTieToLastNote(dottedTie);\n\t\t\t\t\tel.endTie = true;\n\t\t\t\t} else if (state === 'octave' || state === 'duration' || state === 'end_slur') {\n\t\t\t\t\tel.startTie = {};\n\t\t\t\t\tif (!durationSetByPreviousNote && canHaveBrokenRhythm)\n\t\t\t\t\t\tstate = 'broken_rhythm';\n\t\t\t\t\telse {\n\t\t\t\t\t\t// Peek ahead to the next character. If it is a space, then we have an end beam.\n\t\t\t\t\t\tif (tokenizer.isWhiteSpace(line[index + 1]))\n\t\t\t\t\t\t\taddEndBeam(el);\n\t\t\t\t\t\tel.endChar = index+1;\n\t\t\t\t\t\treturn el;\n\t\t\t\t\t}\n\t\t\t\t} else if (state === 'broken_rhythm') {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase ' ':\n\t\t\tcase '\\t':\n\t\t\t\tif (isComplete(state)) {\n\t\t\t\t\tel.end_beam = true;\n\t\t\t\t\t// look ahead to see if there is a tie\n\t\t\t\t\tdottedTie = false;\n\t\t\t\t\tdo {\n\t\t\t\t\t\tif (line[index] === '.' && line[index+1] === '-') {\n\t\t\t\t\t\t\tdottedTie = true;\n\t\t\t\t\t\t\tindex++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (line[index] === '-') {\n\t\t\t\t\t\t\tel.startTie = {};\n\t\t\t\t\t\t\tif (dottedTie)\n\t\t\t\t\t\t\t\tel.startTie.style = \"dotted\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t} while (index < line.length &&\n\t\t\t\t\t\t(tokenizer.isWhiteSpace(line[index]) || line[index] === '-') ||\n\t\t\t\t\t\t(line[index] === '.' && line[index+1] === '-'));\n\t\t\t\t\tel.endChar = index;\n\t\t\t\t\tif (!durationSetByPreviousNote && canHaveBrokenRhythm && (line[index] === '<' || line[index] === '>')) {\t// TODO-PER: Don't need the test for < and >, but that makes the endChar work out for the regression test.\n\t\t\t\t\t\tindex--;\n\t\t\t\t\t\tstate = 'broken_rhythm';\n\t\t\t\t\t} else\n\t\t\t\t\t\treturn el;\n\t\t\t\t}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase '>':\n\t\t\tcase '<':\n\t\t\t\tif (isComplete(state)) {\n\t\t\t\t\tif (canHaveBrokenRhythm) {\n\t\t\t\t\t\tvar br2 = getBrokenRhythm(line, index);\n\t\t\t\t\t\tindex += br2[0] - 1;\t// index gets incremented below, so we'll let that happen\n\t\t\t\t\t\tmultilineVars.next_note_duration = br2[2];\n\t\t\t\t\t\tel.duration = br2[1]*el.duration;\n\t\t\t\t\t\tstate = 'end_slur';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tel.endChar = index;\n\t\t\t\t\t\treturn el;\n\t\t\t\t\t}\n\t\t\t\t} else\n\t\t\t\t\treturn null;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tif (isComplete(state)) {\n\t\t\t\t\tel.endChar = index;\n\t\t\t\t\treturn el;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t}\n\t\tindex++;\n\t\tif (index === line.length) {\n\t\t\tif (isComplete(state)) {el.endChar = index;return el;}\n\t\t\telse return null;\n\t\t}\n\t}\n\treturn null;\n};\n\nvar getBrokenRhythm = function(line, index) {\n\tswitch (line[index]) {\n\t\tcase '>':\n\t\t\tif (index < line.length - 2 && line[index + 1] === '>' && line[index + 2] === '>')\t// triple >>>\n\t\t\t\treturn [3, 1.875, 0.125];\n\t\t\telse if (index < line.length - 1 && line[index + 1] === '>')\t// double >>\n\t\t\t\treturn [2, 1.75, 0.25];\n\t\t\telse\n\t\t\t\treturn [1, 1.5, 0.5];\n\t\tcase '<':\n\t\t\tif (index < line.length - 2 && line[index + 1] === '<' && line[index + 2] === '<')\t// triple <<<\n\t\t\t\treturn [3, 0.125, 1.875];\n\t\t\telse if (index < line.length - 1 && line[index + 1] === '<')\t// double <<\n\t\t\t\treturn [2, 0.25, 1.75];\n\t\t\telse\n\t\t\t\treturn [1, 0.5, 1.5];\n\t}\n\treturn null;\n};\n\nmodule.exports = MusicParser;\n","module.exports.legalAccents = [\n  'trill',\n  'lowermordent',\n  'uppermordent',\n  'mordent',\n  'pralltriller',\n  'accent',\n  'fermata',\n  'invertedfermata',\n  'tenuto',\n  '0',\n  '1',\n  '2',\n  '3',\n  '4',\n  '5',\n  '+',\n  'wedge',\n  'open',\n  'thumb',\n  'snap',\n  'turn',\n  'roll',\n  'breath',\n  'shortphrase',\n  'mediumphrase',\n  'longphrase',\n  'segno',\n  'coda',\n  'D.S.',\n  'D.C.',\n  'fine',\n  'beambr1',\n  'beambr2',\n  'slide',\n  'marcato',\n  'upbow',\n  'downbow',\n  '/',\n  '//',\n  '///',\n  '////',\n  'trem1',\n  'trem2',\n  'trem3',\n  'trem4',\n  'turnx',\n  'invertedturn',\n  'invertedturnx',\n  'trill(',\n  'trill)',\n  'arpeggio',\n  'xstem',\n  'mark',\n  'umarcato',\n  'style=normal',\n  'style=harmonic',\n  'style=rhythm',\n  'style=x',\n  'style=triangle',\n  'D.C.alcoda',\n  'D.C.alfine',\n  'D.S.alcoda',\n  'D.S.alfine',\n  'editorial',\n  'courtesy'\n];\n\nmodule.exports.volumeDecorations = [\n  'p',\n  'pp',\n  'f',\n  'ff',\n  'mf',\n  'mp',\n  'ppp',\n  'pppp',\n  'fff',\n  'ffff',\n  'sfz'\n];\n\nmodule.exports.dynamicDecorations = [\n  'crescendo(',\n  'crescendo)',\n  'diminuendo(',\n  'diminuendo)',\n  'glissando(',\n  'glissando)',\n  '~(',\n  '~)'\n];\n\nmodule.exports.accentPseudonyms = [\n  ['<', 'accent'],\n  ['>', 'accent'],\n  ['tr', 'trill'],\n  ['plus', '+'],\n  ['emphasis', 'accent'],\n  ['^', 'umarcato'],\n  ['marcato', 'umarcato']\n];\n\nmodule.exports.accentDynamicPseudonyms = [\n  ['<(', 'crescendo('],\n  ['<)', 'crescendo)'],\n  ['>(', 'diminuendo('],\n  ['>)', 'diminuendo)']\n];\n\nmodule.exports.nonDecorations = 'ABCDEFGabcdefgxyzZ[]|^_{'; // use this to prescreen so we don't have to look for a decoration at every note.\n\nmodule.exports.durations = [\n  0.5, 0.75, 0.875, 0.9375, 0.96875, 0.984375, 0.25, 0.375, 0.4375, 0.46875,\n  0.484375, 0.4921875, 0.125, 0.1875, 0.21875, 0.234375, 0.2421875, 0.24609375,\n  0.0625, 0.09375, 0.109375, 0.1171875, 0.12109375, 0.123046875, 0.03125,\n  0.046875, 0.0546875, 0.05859375, 0.060546875, 0.0615234375, 0.015625,\n  0.0234375, 0.02734375, 0.029296875, 0.0302734375, 0.03076171875\n];\n\nmodule.exports.pitches = {\n  A: 5,\n  B: 6,\n  C: 0,\n  D: 1,\n  E: 2,\n  F: 3,\n  G: 4,\n  a: 12,\n  b: 13,\n  c: 7,\n  d: 8,\n  e: 9,\n  f: 10,\n  g: 11\n};\n\nmodule.exports.rests = {\n  x: 'invisible',\n  X: 'invisible-multimeasure',\n  y: 'spacer',\n  z: 'rest',\n  Z: 'multimeasure'\n};\n\nmodule.exports.accMap = {\n  dblflat: '__',\n  flat: '_',\n  natural: '=',\n  sharp: '^',\n  dblsharp: '^^',\n  quarterflat: '_/',\n  quartersharp: '^/'\n};\n\nmodule.exports.tripletQ = {\n  2: 3,\n  3: 2,\n  4: 3,\n  5: 2, // TODO-PER: not handling 6/8 rhythm yet\n  6: 2,\n  7: 2, // TODO-PER: not handling 6/8 rhythm yet\n  8: 3,\n  9: 2 // TODO-PER: not handling 6/8 rhythm yet\n};\n","//    abc_tokenizer.js: tokenizes an ABC Music Notation string to support abc_parse.\n\nvar parseCommon = require('./abc_common');\n\n// this is a series of functions that get a particular element out of the passed stream.\n// the return is the number of characters consumed, so 0 means that the element wasn't found.\n// also returned is the element found. This may be a different length because spaces may be consumed that aren't part of the string.\n// The return structure for most calls is { len: num_chars_consumed, token: str }\nvar Tokenizer = function(lines, multilineVars) {\n\tthis.lineIndex = 0\n\tthis.lines = lines\n\tthis.multilineVars = multilineVars;\n\n\tthis.skipWhiteSpace = function(str) {\n\t\tfor (var i = 0; i < str.length; i++) {\n\t\t  if (!this.isWhiteSpace(str[i]))\n\t\t\t\treturn i;\n\t\t}\n\t\treturn str.length;\t// It must have been all white space\n\t};\n\tvar finished = function(str, i) {\n\t\treturn i >= str.length;\n\t};\n\tthis.eatWhiteSpace = function(line, index) {\n\t\tfor (var i = index; i < line.length; i++) {\n\t\t  if (!this.isWhiteSpace(line[i]))\n\t\t\t\treturn i-index;\n\t\t}\n\t\treturn i-index;\n\t};\n\n\t// This just gets the basic pitch letter, ignoring leading spaces, and normalizing it to a capital\n\tthis.getKeyPitch = function(str) {\n\t\tvar i = this.skipWhiteSpace(str);\n\t\tif (finished(str, i))\n\t\t\treturn {len: 0};\n\t\tswitch (str[i]) {\n\t\t\tcase 'A':return {len: i+1, token: 'A'};\n\t\t\tcase 'B':return {len: i+1, token: 'B'};\n\t\t\tcase 'C':return {len: i+1, token: 'C'};\n\t\t\tcase 'D':return {len: i+1, token: 'D'};\n\t\t\tcase 'E':return {len: i+1, token: 'E'};\n\t\t\tcase 'F':return {len: i+1, token: 'F'};\n\t\t\tcase 'G':return {len: i+1, token: 'G'};\n//\t\t\tcase 'a':return {len: i+1, token: 'A'};\n//\t\t\tcase 'b':return {len: i+1, token: 'B'};\n//\t\t\tcase 'c':return {len: i+1, token: 'C'};\n//\t\t\tcase 'd':return {len: i+1, token: 'D'};\n//\t\t\tcase 'e':return {len: i+1, token: 'E'};\n//\t\t\tcase 'f':return {len: i+1, token: 'F'};\n//\t\t\tcase 'g':return {len: i+1, token: 'G'};\n\t\t}\n\t\treturn {len: 0};\n\t};\n\n\t// This just gets the basic accidental, ignoring leading spaces, and only the ones that appear in a key\n\tthis.getSharpFlat = function(str) {\n\t\tif (str === 'bass')\n\t\t\treturn {len: 0};\n\t\tswitch (str[0]) {\n\t\t\tcase '#':return {len: 1, token: '#'};\n\t\t\tcase 'b':return {len: 1, token: 'b'};\n\t\t}\n\t\treturn {len: 0};\n\t};\n\n\tthis.getMode = function(str) {\n\t\tvar skipAlpha = function(str, start) {\n\t\t\t// This returns the index of the next non-alphabetic char, or the entire length of the string if not found.\n\t\t  while (start < str.length && ((str[start] >= 'a' && str[start] <= 'z') || (str[start] >= 'A' && str[start] <= 'Z')))\n\t\t\t\tstart++;\n\t\t\treturn start;\n\t\t};\n\n\t\tvar i = this.skipWhiteSpace(str);\n\t\tif (finished(str, i))\n\t\t\treturn {len: 0};\n\t\tvar firstThree = str.substring(i,i+3).toLowerCase();\n\t\tif (firstThree.length > 1 && firstThree[1] === ' ' || firstThree[1] === '^' || firstThree[1] === '_' || firstThree[1] === '=') firstThree = firstThree[0];\t// This will handle the case of 'm'\n\t\tswitch (firstThree) {\n\t\t\tcase 'mix':return {len: skipAlpha(str, i), token: 'Mix'};\n\t\t\tcase 'dor':return {len: skipAlpha(str, i), token: 'Dor'};\n\t\t\tcase 'phr':return {len: skipAlpha(str, i), token: 'Phr'};\n\t\t\tcase 'lyd':return {len: skipAlpha(str, i), token: 'Lyd'};\n\t\t\tcase 'loc':return {len: skipAlpha(str, i), token: 'Loc'};\n\t\t\tcase 'aeo':return {len: skipAlpha(str, i), token: 'm'};\n\t\t\tcase 'maj':return {len: skipAlpha(str, i), token: ''};\n\t\t\tcase 'ion':return {len: skipAlpha(str, i), token: ''};\n\t\t\tcase 'min':return {len: skipAlpha(str, i), token: 'm'};\n\t\t\tcase 'm':return {len: skipAlpha(str, i), token: 'm'};\n\t\t}\n\t\treturn {len: 0};\n\t};\n\n\tthis.getClef = function(str, bExplicitOnly) {\n\t\tvar strOrig = str;\n\t\tvar i = this.skipWhiteSpace(str);\n\t\tif (finished(str, i))\n\t\t\treturn {len: 0};\n\t\t// The word 'clef' is optional, but if it appears, a clef MUST appear\n\t\tvar needsClef = false;\n\t\tvar strClef = str.substring(i);\n\t\tif (parseCommon.startsWith(strClef, 'clef=')) {\n\t\t\tneedsClef = true;\n\t\t\tstrClef = strClef.substring(5);\n\t\t\ti += 5;\n\t\t}\n\t\tif (strClef.length === 0 && needsClef)\n\t\t\treturn {len: i+5, warn: \"No clef specified: \" + strOrig};\n\n\t\tvar j = this.skipWhiteSpace(strClef);\n\t\tif (finished(strClef, j))\n\t\t\treturn {len: 0};\n\t\tif (j > 0) {\n\t\t\ti += j;\n\t\t\tstrClef = strClef.substring(j);\n\t\t}\n\t\tvar name = null;\n\t\tif (parseCommon.startsWith(strClef, 'treble'))\n\t\t\tname = 'treble';\n\t\telse if (parseCommon.startsWith(strClef, 'bass3'))\n\t\t\tname = 'bass3';\n\t\telse if (parseCommon.startsWith(strClef, 'bass'))\n\t\t\tname = 'bass';\n\t\telse if (parseCommon.startsWith(strClef, 'tenor'))\n\t\t\tname = 'tenor';\n\t\telse if (parseCommon.startsWith(strClef, 'alto2'))\n\t\t\tname = 'alto2';\n\t\telse if (parseCommon.startsWith(strClef, 'alto1'))\n\t\t\tname = 'alto1';\n\t\telse if (parseCommon.startsWith(strClef, 'alto'))\n\t\t\tname = 'alto';\n\t\telse if (!bExplicitOnly && (needsClef && parseCommon.startsWith(strClef, 'none')))\n\t\t\tname = 'none';\n\t\telse if (parseCommon.startsWith(strClef, 'perc'))\n\t\t\tname = 'perc';\n\t\telse if (!bExplicitOnly && (needsClef && parseCommon.startsWith(strClef, 'C')))\n\t\t\tname = 'tenor';\n\t\telse if (!bExplicitOnly && (needsClef && parseCommon.startsWith(strClef, 'F')))\n\t\t\tname = 'bass';\n\t\telse if (!bExplicitOnly && (needsClef && parseCommon.startsWith(strClef, 'G')))\n\t\t\tname = 'treble';\n\t\telse\n\t\t\treturn {len: i+5, warn: \"Unknown clef specified: \" + strOrig};\n\n\t\tstrClef = strClef.substring(name.length);\n\t\tj = this.isMatch(strClef, '+8');\n\t\tif (j > 0)\n\t\t\tname += \"+8\";\n\t\telse {\n\t\t\tj = this.isMatch(strClef, '-8');\n\t\t\tif (j > 0)\n\t\t\t\tname += \"-8\";\n\t\t}\n\t\treturn {len: i+name.length, token: name, explicit: needsClef};\n\t};\n\n\t// This returns one of the legal bar lines\n\t// This is called alot and there is no obvious tokenable items, so this is broken apart.\n\tthis.getBarLine = function(line, i) {\n\t\tswitch (line[i]) {\n\t\t\tcase ']':\n\t\t\t\t++i;\n\t\t\t\tswitch (line[i]) {\n\t\t\t\t\tcase '|': return {len: 2, token: \"bar_thick_thin\"};\n\t\t\t\t\tcase '[':\n\t\t\t\t\t\t++i;\n\t\t\t\t\t\tif ((line[i] >= '1' && line[i] <= '9') || line[i] === '\"')\n\t\t\t\t\t\t\treturn {len: 2, token: \"bar_invisible\"};\n\t\t\t\t\t\treturn {len: 1, warn: \"Unknown bar symbol\"};\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn {len: 1, token: \"bar_invisible\"};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase ':':\n\t\t\t\t++i;\n\t\t\t\tswitch (line[i]) {\n\t\t\t\t\tcase ':': return {len: 2, token: \"bar_dbl_repeat\"};\n\t\t\t\t\tcase '|':\t// :|\n\t\t\t\t\t\t++i;\n\t\t\t\t\t\tswitch (line[i]) {\n\t\t\t\t\t\t\tcase ']':\t// :|]\n\t\t\t\t\t\t\t\t++i;\n\t\t\t\t\t\t\t\tswitch (line[i]) {\n\t\t\t\t\t\t\t\t\tcase '|':\t// :|]|\n\t\t\t\t\t\t\t\t\t\t++i;\n\t\t\t\t\t\t\t\t\t\tif (line[i] === ':')  return {len: 5, token: \"bar_dbl_repeat\"};\n\t\t\t\t\t\t\t\t\t\treturn {len: 3, token: \"bar_right_repeat\"};\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\treturn {len: 3, token: \"bar_right_repeat\"};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase '|':\t// :||\n\t\t\t\t\t\t\t\t++i;\n\t\t\t\t\t\t\t\tif (line[i] === ':')  return {len: 4, token: \"bar_dbl_repeat\"};\n\t\t\t\t\t\t\t\treturn {len: 3, token: \"bar_right_repeat\"};\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\treturn {len: 2, token: \"bar_right_repeat\"};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn {len: 1, warn: \"Unknown bar symbol\"};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase '[':\t// [\n\t\t\t\t++i;\n\t\t\t\tif (line[i] === '|') {\t// [|\n\t\t\t\t\t++i;\n\t\t\t\t\tswitch (line[i]) {\n\t\t\t\t\t\tcase ':': return {len: 3, token: \"bar_left_repeat\"};\n\t\t\t\t\t\tcase ']': return {len: 3, token: \"bar_invisible\"};\n\t\t\t\t\t\tdefault: return {len: 2, token: \"bar_thick_thin\"};\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif ((line[i] >= '1' && line[i] <= '9') || line[i] === '\"')\n\t\t\t\t\t\treturn {len: 1, token: \"bar_invisible\"};\n\t\t\t\t\treturn {len: 0};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase '|':\t// |\n\t\t\t\t++i;\n\t\t\t\tswitch (line[i]) {\n\t\t\t\t\tcase ']': return {len: 2, token: \"bar_thin_thick\"};\n\t\t\t\t\tcase '|': // ||\n\t\t\t\t\t\t++i;\n\t\t\t\t\t\tif (line[i] === ':') return {len: 3, token: \"bar_left_repeat\"};\n\t\t\t\t\t\treturn {len: 2, token: \"bar_thin_thin\"};\n\t\t\t\t\tcase ':':\t// |:\n\t\t\t\t\t\tvar colons = 0;\n\t\t\t\t\t\twhile (line[i+colons] === ':') colons++;\n\t\t\t\t\t\treturn { len: 1+colons, token: \"bar_left_repeat\"};\n\t\t\t\t\tdefault: return {len: 1, token: \"bar_thin\"};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t\treturn {len: 0};\n\t};\n\n\t// this returns all the characters in the string that match one of the characters in the legalChars string\n\tthis.getTokenOf = function(str, legalChars) {\n\t\tfor (var i = 0; i < str.length; i++) {\n\t\t\tif (legalChars.indexOf(str[i]) < 0)\n\t\t\t\treturn {len: i, token: str.substring(0, i)};\n\t\t}\n\t\treturn {len: i, token: str};\n\t};\n\n\tthis.getToken = function(str, start, end) {\n\t\t// This returns the next set of chars that doesn't contain spaces\n\t\tvar i = start;\n\t\twhile (i < end && !this.isWhiteSpace(str[i]))\n\t\t\ti++;\n\t\treturn str.substring(start, i);\n\t};\n\n\t// This just sees if the next token is the word passed in, with possible leading spaces\n\tthis.isMatch = function(str, match) {\n\t\tvar i = this.skipWhiteSpace(str);\n\t\tif (finished(str, i))\n\t\t\treturn 0;\n\t\tif (parseCommon.startsWith(str.substring(i), match))\n\t\t\treturn i+match.length;\n\t\treturn 0;\n\t};\n\n\tthis.getPitchFromTokens = function(tokens) {\n\t\tvar ret = { };\n\t\tvar pitches = {A: 5, B: 6, C: 0, D: 1, E: 2, F: 3, G: 4, a: 12, b: 13, c: 7, d: 8, e: 9, f: 10, g: 11};\n\t\tret.position = pitches[tokens[0].token];\n\t\tif (ret.position === undefined)\n\t\t\treturn { warn: \"Pitch expected. Found: \" + tokens[0].token };\n\t\ttokens.shift();\n\t\twhile (tokens.length) {\n\t\t\tswitch (tokens[0].token) {\n\t\t\t\tcase ',': ret.position -= 7; tokens.shift(); break;\n\t\t\t\tcase '\\'': ret.position += 7; tokens.shift(); break;\n\t\t\t\tdefault: return ret;\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t};\n\n\tthis.getKeyAccidentals2 = function(tokens) {\n\t\tvar accs;\n\t\t// find and strip off all accidentals in the token list\n\t\twhile (tokens.length > 0) {\n\t\t\tvar acc;\n\t\t\tif (tokens[0].token === '^') {\n\t\t\t\tacc = 'sharp';\n\t\t\t\ttokens.shift();\n\t\t\t\tif (tokens.length === 0) return {accs: accs, warn: 'Expected note name after ' + acc};\n\t\t\t\tswitch (tokens[0].token) {\n\t\t\t\t\tcase '^': acc = 'dblsharp'; tokens.shift(); break;\n\t\t\t\t\tcase '/': acc = 'quartersharp'; tokens.shift(); break;\n\t\t\t\t}\n\t\t\t} else if (tokens[0].token === '=') {\n\t\t\t\tacc = 'natural';\n\t\t\t\ttokens.shift();\n\t\t\t} else if (tokens[0].token === '_') {\n\t\t\t\tacc = 'flat';\n\t\t\t\ttokens.shift();\n\t\t\t\tif (tokens.length === 0) return {accs: accs, warn: 'Expected note name after ' + acc};\n\t\t\t\tswitch (tokens[0].token) {\n\t\t\t\t\tcase '_': acc = 'dblflat'; tokens.shift(); break;\n\t\t\t\t\tcase '/': acc = 'quarterflat'; tokens.shift(); break;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Not an accidental, we'll assume that a later parse will recognize it.\n\t\t\t\treturn { accs: accs };\n\t\t\t}\n\t\t\tif (tokens.length === 0) return {accs: accs, warn: 'Expected note name after ' + acc};\n\t\t\tswitch (tokens[0].token[0])\n\t\t\t{\n\t\t\t\tcase 'a':\n\t\t\t\tcase 'b':\n\t\t\t\tcase 'c':\n\t\t\t\tcase 'd':\n\t\t\t\tcase 'e':\n\t\t\t\tcase 'f':\n\t\t\t\tcase 'g':\n\t\t\t\tcase 'A':\n\t\t\t\tcase 'B':\n\t\t\t\tcase 'C':\n\t\t\t\tcase 'D':\n\t\t\t\tcase 'E':\n\t\t\t\tcase 'F':\n\t\t\t\tcase 'G':\n\t\t\t\t\tif (accs === undefined)\n\t\t\t\t\t\taccs = [];\n\t\t\t\t\taccs.push({ acc: acc, note: tokens[0].token[0] });\n\t\t\t\t\tif (tokens[0].token.length === 1)\n\t\t\t\t\t\ttokens.shift();\n\t\t\t\t\telse\n\t\t\t\t\t\ttokens[0].token = tokens[0].token.substring(1);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treturn {accs: accs, warn: 'Expected note name after ' + acc + ' Found: ' + tokens[0].token };\n\t\t\t}\n\t\t}\n\t\treturn { accs: accs };\n\t};\n\n\t// This gets an accidental marking for the key signature. It has the accidental then the pitch letter.\n\tthis.getKeyAccidental = function(str) {\n\t\tvar accTranslation = {\n\t\t\t'^': 'sharp',\n\t\t\t'^^': 'dblsharp',\n\t\t\t'=': 'natural',\n\t\t\t'_': 'flat',\n\t\t\t'__': 'dblflat',\n\t\t\t'_/': 'quarterflat',\n\t\t\t'^/': 'quartersharp'\n\t\t};\n\t\tvar i = this.skipWhiteSpace(str);\n\t\tif (finished(str, i))\n\t\t\treturn {len: 0};\n\t\tvar acc = null;\n\t\tswitch (str[i])\n\t\t{\n\t\t\tcase '^':\n\t\t\tcase '_':\n\t\t\tcase '=':\n\t\t\t\tacc = str[i];\n\t\t\t\tbreak;\n\t\t\tdefault:return {len: 0};\n\t\t}\n\t\ti++;\n\t\tif (finished(str, i))\n\t\t\treturn {len: 1, warn: 'Expected note name after accidental'};\n\t\tswitch (str[i])\n\t\t{\n\t\t\tcase 'a':\n\t\t\tcase 'b':\n\t\t\tcase 'c':\n\t\t\tcase 'd':\n\t\t\tcase 'e':\n\t\t\tcase 'f':\n\t\t\tcase 'g':\n\t\t\tcase 'A':\n\t\t\tcase 'B':\n\t\t\tcase 'C':\n\t\t\tcase 'D':\n\t\t\tcase 'E':\n\t\t\tcase 'F':\n\t\t\tcase 'G':\n\t\t\t\treturn {len: i+1, token: {acc: accTranslation[acc], note: str[i]}};\n\t\t\tcase '^':\n\t\t\tcase '_':\n\t\t\tcase '/':\n\t\t\t\tacc += str[i];\n\t\t\t\ti++;\n\t\t\t\tif (finished(str, i))\n\t\t\t\t\treturn {len: 2, warn: 'Expected note name after accidental'};\n\t\t\t\tswitch (str[i])\n\t\t\t\t{\n\t\t\t\t\tcase 'a':\n\t\t\t\t\tcase 'b':\n\t\t\t\t\tcase 'c':\n\t\t\t\t\tcase 'd':\n\t\t\t\t\tcase 'e':\n\t\t\t\t\tcase 'f':\n\t\t\t\t\tcase 'g':\n\t\t\t\t\tcase 'A':\n\t\t\t\t\tcase 'B':\n\t\t\t\t\tcase 'C':\n\t\t\t\t\tcase 'D':\n\t\t\t\t\tcase 'E':\n\t\t\t\t\tcase 'F':\n\t\t\t\t\tcase 'G':\n\t\t\t\t\t\treturn {len: i+1, token: {acc: accTranslation[acc], note: str[i]}};\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn {len: 2, warn: 'Expected note name after accidental'};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn {len: 1, warn: 'Expected note name after accidental'};\n\t\t}\n\t};\n\n\tthis.isWhiteSpace = function(ch) {\n\t\treturn ch === ' ' || ch === '\\t' || ch === '\\x12';\n\t};\n\n\tthis.getMeat = function(line, start, end) {\n\t\t// This removes any comments starting with '%' and trims the ends of the string so that there are no leading or trailing spaces.\n\t\t// it returns just the start and end characters that contain the meat.\n\t\tvar comment = line.indexOf('%', start);\n\t\tif (comment >= 0 && comment < end)\n\t\t\tend = comment;\n\t\twhile (start < end && (line[start] === ' ' || line[start] === '\\t' || line[start] === '\\x12'))\n\t\t\tstart++;\n\t\twhile (start < end && (line[end-1] === ' ' || line[end-1] === '\\t' || line[end-1] === '\\x12'))\n\t\t\tend--;\n\t\treturn {start: start, end: end};\n\t};\n\n\tvar isLetter = function(ch) {\n\t\treturn (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z');\n\t};\n\n\tvar isNumber = function(ch) {\n\t\treturn (ch >= '0' && ch <= '9');\n\t};\n\n\tthis.tokenize = function(line, start, end, alphaUntilWhiteSpace) {\n\t\t// this returns all the tokens inside the passed string. A token is a punctuation mark, a string of digits, a string of letters.\n\t\t//  Quoted strings are one token.\n\t\t//  If there is a minus sign next to a number, then it is included in the number.\n\t\t// If there is a period immediately after a number, with a number immediately following, then a float is returned.\n\t\t// The type of token is returned: quote, alpha, number, punct\n\t\t// If alphaUntilWhiteSpace is true, then the behavior of the alpha token changes.\n\n\t\tvar ret = this.getMeat(line, start, end);\n\t\tstart = ret.start;\n\t\tend = ret.end;\n\t\tvar tokens = [];\n\t\tvar i;\n\t\twhile (start < end) {\n\t\t\tif (line[start] === '\"') {\n\t\t\t\ti = start+1;\n\t\t\t\twhile (i < end && line[i] !== '\"') i++;\n\t\t\t\ttokens.push({ type: 'quote', token: line.substring(start+1, i), start: start+1, end: i});\n\t\t\t\ti++;\n\t\t\t} else if (isLetter(line[start])) {\n\t\t\t\ti = start+1;\n\t\t\t\tif (alphaUntilWhiteSpace)\n\t\t\t\t\twhile (i < end && !this.isWhiteSpace(line[i])) i++;\n\t\t\t\telse\n\t\t\t\t\twhile (i < end && isLetter(line[i])) i++;\n\t\t\t\ttokens.push({ type: 'alpha', token: line.substring(start, i), continueId: isNumber(line[i]), start: start, end: i});\n\t\t\t\tstart = i + 1;\n\t\t\t} else if (line[start] === '.' && isNumber(line[i+1])) {\n\t\t\t\ti = start+1;\n\t\t\t\tvar int2 = null;\n\t\t\t\tvar float2 = null;\n\t\t\t\twhile (i < end && isNumber(line[i])) i++;\n\n\t\t\t\tfloat2 = parseFloat(line.substring(start, i));\n\t\t\t\ttokens.push({ type: 'number', token: line.substring(start, i), intt: int2, floatt: float2, continueId: isLetter(line[i]), start: start, end: i});\n\t\t\t\tstart = i + 1;\n\t\t\t} else if (isNumber(line[start]) || (line[start] === '-' && isNumber(line[i+1]))) {\n\t\t\t\ti = start+1;\n\t\t\t\tvar intt = null;\n\t\t\t\tvar floatt = null;\n\t\t\t\twhile (i < end && isNumber(line[i])) i++;\n\t\t\t\tif (line[i] === '.' && isNumber(line[i+1])) {\n\t\t\t\t\ti++;\n\t\t\t\t\twhile (i < end && isNumber(line[i])) i++;\n\t\t\t\t} else\n\t\t\t\t\tintt = parseInt(line.substring(start, i));\n\n\t\t\t\tfloatt = parseFloat(line.substring(start, i));\n\t\t\t\ttokens.push({ type: 'number', token: line.substring(start, i), intt: intt, floatt: floatt, continueId: isLetter(line[i]), start: start, end: i});\n\t\t\t\tstart = i + 1;\n\t\t\t} else if (line[start] === ' ' || line[start] === '\\t') {\n\t\t\t\ti = start+1;\n\t\t\t} else {\n\t\t\t\ttokens.push({ type: 'punct', token: line[start], start: start, end: start+1});\n\t\t\t\ti = start+1;\n\t\t\t}\n\t\t\tstart = i;\n\t\t}\n\t\treturn tokens;\n\t};\n\n\tthis.getVoiceToken = function(line, start, end) {\n\t\t// This finds the next token. A token is delimited by a space or an equal sign. If it starts with a quote, then the portion between the quotes is returned.\n\t\tvar i = start;\n\t\twhile (i < end && this.isWhiteSpace(line[i]) || line[i] === '=')\n\t\t\ti++;\n\n\t\tif (line[i] === '\"') {\n\t\t\tvar close = line.indexOf('\"', i+1);\n\t\t\tif (close === -1 || close >= end)\n\t\t\t\treturn {len: 1, err: \"Missing close quote\"};\n\t\t\treturn {len: close-start+1, token: this.translateString(line.substring(i+1, close))};\n\t\t} else {\n\t\t\tvar ii = i;\n\t\t\twhile (ii < end && !this.isWhiteSpace(line[ii]) && line[ii] !== '=')\n\t\t\t\tii++;\n\t\t\treturn {len: ii-start+1, token: line.substring(i, ii)};\n\t\t}\n\t};\n\n\tvar charMap = {\n\t\t\"`a\": 'à', \"'a\": \"á\", \"^a\": \"â\", \"~a\": \"ã\", \"\\\"a\": \"ä\", \"oa\": \"å\", \"aa\": \"å\", \"=a\": \"ā\", \"ua\": \"ă\", \";a\": \"ą\",\n\t\t\"`e\": 'è', \"'e\": \"é\", \"^e\": \"ê\", \"\\\"e\": \"ë\", \"=e\": \"ē\", \"ue\": \"ĕ\", \";e\": \"ę\", \".e\": \"ė\",\n\t\t\"`i\": 'ì', \"'i\": \"í\", \"^i\": \"î\", \"\\\"i\": \"ï\", \"=i\": \"ī\", \"ui\": \"ĭ\", \";i\": \"į\",\n\t\t\"`o\": 'ò', \"'o\": \"ó\", \"^o\": \"ô\", \"~o\": \"õ\", \"\\\"o\": \"ö\", \"=o\": \"ō\", \"uo\": \"ŏ\", \"/o\": \"ø\",\n\t\t\"`u\": 'ù', \"'u\": \"ú\", \"^u\": \"û\", \"~u\": \"ũ\", \"\\\"u\": \"ü\", \"ou\": \"ů\", \"=u\": \"ū\", \"uu\": \"ŭ\", \";u\": \"ų\",\n\t\t\"`A\": 'À', \"'A\": \"Á\", \"^A\": \"Â\", \"~A\": \"Ã\", \"\\\"A\": \"Ä\", \"oA\": \"Å\", \"AA\": \"Å\", \"=A\": \"Ā\", \"uA\": \"Ă\", \";A\": \"Ą\",\n\t\t\"`E\": 'È', \"'E\": \"É\", \"^E\": \"Ê\", \"\\\"E\": \"Ë\", \"=E\": \"Ē\", \"uE\": \"Ĕ\", \";E\": \"Ę\", \".E\": \"Ė\",\n\t\t\"`I\": 'Ì', \"'I\": \"Í\", \"^I\": \"Î\", \"~I\": \"Ĩ\", \"\\\"I\": \"Ï\", \"=I\": \"Ī\", \"uI\": \"Ĭ\", \";I\": \"Į\", \".I\": \"İ\",\n\t\t\"`O\": 'Ò', \"'O\": \"Ó\", \"^O\": \"Ô\", \"~O\": \"Õ\", \"\\\"O\": \"Ö\", \"=O\": \"Ō\", \"uO\": \"Ŏ\", \"/O\": \"Ø\",\n\t\t\"`U\": 'Ù', \"'U\": \"Ú\", \"^U\": \"Û\", \"~U\": \"Ũ\", \"\\\"U\": \"Ü\", \"oU\": \"Ů\", \"=U\": \"Ū\", \"uU\": \"Ŭ\", \";U\": \"Ų\",\n\t\t\"ae\": \"æ\", \"AE\": \"Æ\", \"oe\": \"œ\", \"OE\": \"Œ\", \"ss\": \"ß\",\n\t\t\"'c\": \"ć\", \"^c\": \"ĉ\", \"uc\": \"č\", \"cc\": \"ç\", \".c\": \"ċ\", \"cC\": \"Ç\", \"'C\": \"Ć\", \"^C\": \"Ĉ\", \"uC\": \"Č\", \".C\": \"Ċ\",\n\t\t\"~N\": \"Ñ\", \"~n\": \"ñ\",\n\t\t\"=s\": \"š\", \"vs\": \"š\",\n\t\t\"DH\": \"Ð\", \"dh\": \"ð\",\n\t\t\"HO\": \"Ő\", \"Ho\": \"ő\", \"HU\": \"Ű\", \"Hu\": \"ű\",\n\t\t\"'Y\": \"Ý\", \"'y\": \"ý\", \"^Y\": \"Ŷ\", \"^y\": \"ŷ\", \"\\\"Y\": \"Ÿ\", \"\\\"y\": \"ÿ\",\n\t\t\"vS\": \"Š\", \"vZ\": \"Ž\", \"vz\": 'ž'\n\n// More chars: IJ ij Ď ď Đ đ Ĝ ĝ Ğ ğ Ġ ġ Ģ ģ Ĥ ĥ Ħ ħ Ĵ ĵ Ķ ķ ĸ Ĺ ĺ Ļ ļ Ľ ľ Ŀ ŀ Ł ł Ń ń Ņ ņ Ň ň ʼn Ŋ ŋ Ŕ ŕ Ŗ ŗ Ř ř Ś ś Ŝ ŝ Ş ş Š Ţ ţ Ť ť Ŧ ŧ Ŵ ŵ Ź ź Ż ż Ž\n\t};\n\tvar charMap1 = {\n\t\t\"#\": \"♯\",\n\t\t\"b\": \"♭\",\n\t\t\"=\": \"♮\"\n\t};\n\tvar charMap2 = {\n\t\t\"201\": \"♯\",\n\t\t\"202\": \"♭\",\n\t\t\"203\": \"♮\",\n\t\t\"241\": \"¡\",\n\t\t\"242\": \"¢\", \"252\": \"a\", \"262\": \"2\", \"272\": \"o\", \"302\": \"Â\", \"312\": \"Ê\", \"322\": \"Ò\", \"332\": \"Ú\", \"342\": \"â\", \"352\": \"ê\", \"362\": \"ò\", \"372\": \"ú\",\n\t\t\"243\": \"£\", \"253\": \"«\", \"263\": \"3\", \"273\": \"»\", \"303\": \"Ã\", \"313\": \"Ë\", \"323\": \"Ó\", \"333\": \"Û\", \"343\": \"ã\", \"353\": \"ë\", \"363\": \"ó\", \"373\": \"û\",\n\t\t\"244\": \"¤\", \"254\": \"¬\", \"264\": \"  ́\", \"274\": \"1⁄4\", \"304\": \"Ä\", \"314\": \"Ì\", \"324\": \"Ô\", \"334\": \"Ü\", \"344\": \"ä\", \"354\": \"ì\", \"364\": \"ô\", \"374\": \"ü\",\n\t\t\"245\": \"¥\", \"255\": \"-\", \"265\": \"μ\", \"275\": \"1⁄2\", \"305\": \"Å\", \"315\": \"Í\", \"325\": \"Õ\", \"335\": \"Ý\",  \"345\": \"å\", \"355\": \"í\", \"365\": \"õ\", \"375\": \"ý\",\n\t\t\"246\": \"¦\", \"256\": \"®\", \"266\": \"¶\", \"276\": \"3⁄4\", \"306\": \"Æ\", \"316\": \"Î\", \"326\": \"Ö\", \"336\": \"Þ\", \"346\": \"æ\", \"356\": \"î\", \"366\": \"ö\", \"376\": \"þ\",\n\t\t\"247\": \"§\", \"257\": \" ̄\", \"267\": \"·\", \"277\": \"¿\", \"307\": \"Ç\", \"317\": \"Ï\", \"327\": \"×\", \"337\": \"ß\", \"347\": \"ç\", \"357\": \"ï\", \"367\": \"÷\", \"377\": \"ÿ\",\n\t\t\"250\": \" ̈\", \"260\": \"°\", \"270\": \" ̧\", \"300\": \"À\", \"310\": \"È\", \"320\": \"Ð\", \"330\": \"Ø\", \"340\": \"à\", \"350\": \"è\", \"360\": \"ð\", \"370\": \"ø\",\n\t\t\"251\": \"©\", \"261\": \"±\", \"271\": \"1\", \"301\": \"Á\", \"311\": \"É\", \"321\": \"Ñ\", \"331\": \"Ù\", \"341\": \"á\", \"351\": \"é\", \"361\": \"ñ\", \"371\": \"ù\" };\n\tthis.translateString = function(str) {\n\t\tvar arr = str.split('\\\\');\n\t\tif (arr.length === 1) return str;\n\t\tvar out = null;\n\t\tarr.forEach(function(s) {\n\t\t\tif (out === null)\n\t\t\t\tout = s;\n\t\t\telse {\n\t\t\t\tvar c = charMap[s.substring(0, 2)];\n\t\t\t\tif (c !== undefined)\n\t\t\t\t\tout += c + s.substring(2);\n\t\t\t\telse {\n\t\t\t\t\tc = charMap2[s.substring(0, 3)];\n\t\t\t\t\tif (c !== undefined)\n\t\t\t\t\t\tout += c + s.substring(3);\n\t\t\t\t\telse {\n\t\t\t\t\t\tc = charMap1[s.substring(0, 1)];\n\t\t\t\t\t\tif (c !== undefined)\n\t\t\t\t\t\t\tout += c + s.substring(1);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tout += \"\\\\\" + s;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn out;\n\t};\n\tthis.getNumber = function(line, index) {\n\t\tvar num = 0;\n\t\twhile (index < line.length) {\n\t\t\tswitch (line[index]) {\n\t\t\t\tcase '0':num = num*10;index++;break;\n\t\t\t\tcase '1':num = num*10+1;index++;break;\n\t\t\t\tcase '2':num = num*10+2;index++;break;\n\t\t\t\tcase '3':num = num*10+3;index++;break;\n\t\t\t\tcase '4':num = num*10+4;index++;break;\n\t\t\t\tcase '5':num = num*10+5;index++;break;\n\t\t\t\tcase '6':num = num*10+6;index++;break;\n\t\t\t\tcase '7':num = num*10+7;index++;break;\n\t\t\t\tcase '8':num = num*10+8;index++;break;\n\t\t\t\tcase '9':num = num*10+9;index++;break;\n\t\t\t\tdefault:\n\t\t\t\t\treturn {num: num, index: index};\n\t\t\t}\n\t\t}\n\t\treturn {num: num, index: index};\n\t};\n\n\tthis.getFraction = function(line, index) {\n\t\tvar num = 1;\n\t\tvar den = 1;\n\t\tif (line[index] !== '/') {\n\t\t\tvar ret = this.getNumber(line, index);\n\t\t\tnum = ret.num;\n\t\t\tindex = ret.index;\n\t\t}\n\t\tif (line[index] === '/') {\n\t\t\tindex++;\n\t\t\tif (line[index] === '/') {\n\t\t\t\tvar div = 0.5;\n\t\t\t\twhile (line[index++] === '/')\n\t\t\t\t\tdiv = div /2;\n\t\t\t\treturn {value: num * div, index: index-1};\n\t\t\t} else {\n\t\t\t\tvar iSave = index;\n\t\t\t\tvar ret2 = this.getNumber(line, index);\n\t\t\t\tif (ret2.num === 0 && iSave === index)\t// If we didn't use any characters, it is an implied 2\n\t\t\t\t\tret2.num = 2;\n\t\t\t\tif (ret2.num !== 0)\n\t\t\t\t\tden = ret2.num;\n\t\t\t\tindex = ret2.index;\n\t\t\t}\n\t\t}\n\n\t\treturn {value: num/den, index: index};\n\t};\n\n//\n// MAE 10 Jan 2023 - For better handling of tunes that have tune numbers in front of them.\n//\n// Previous version would take:\n// 21. Woman of the House, The\n// and return:\n// The 21. Woman of the House\n// \n// This fix results in:\n// 21. The Woman of the House\n//\n// Also added additional checks and handlers for lower case \", the\" and \", a\" since I found several tune collections with those tune name constructs\n//\n// Find an optional title number at the start of a tune title\nfunction getTitleNumber(str){\n\n  const regex = /^(\\d+)\\./;\n\n  // Use the exec method to search for the pattern in the string\n  const match = regex.exec(str);\n\n  // Check if a match is found\n  if (match) {\n\n\t// The matched number is captured in the first group (index 1)\n\tconst foundNumber = match[1];\n\treturn foundNumber;\n\n  } else {\n\n\t// Return null if no match is found\n\treturn null;\n\t\n  }\n\n}\n\nvar thePatterns = [\n\t{ match: /,\\s*[Tt]he$/, replace: \"The \" },\n\t{ match: /,\\s*[Aa]$/, replace: \"A \" },\n\t{ match: /,\\s*[Aa]n$/, replace: \"An \" },\n]\n\nthis.theReverser = function (str) {\n\n    for (var i = 0; i < thePatterns.length; i++) {\n\t\tvar thisPattern = thePatterns[i]\n\t\tvar match = str.match(thisPattern.match)\n\t\tif (match) {\n\t\t\tvar theTitleNumber = getTitleNumber(str);\n\t\t\tif (theTitleNumber){\n\t\t\n\t\t\t  //console.log(\"theReverser The titlenumber:\"+theTitleNumber); \n\t\t\n\t\t\t  str = str.replace(theTitleNumber+\".\",\"\");\n\t\t\t  str = str.trim();\n\t\t\t}\n\t\t\tvar len = match[0].length\n\t\t\tvar result = thisPattern.replace + str.substring(0, str.length - len);\n\t\t\n\t\t\tif (theTitleNumber){\n\t\t\t  result = theTitleNumber+\". \"+result;\n\t\t\t}\n\t\t\t\n\t\t\treturn result;\n\n\t\t}\n\t}\n\n    return str;\n\n  };\n\n\tthis.stripComment = function(str) {\n\t\tvar i = str.indexOf('%');\n\t\tif (i >= 0)\n\t\t\treturn parseCommon.strip(str.substring(0, i));\n\t\treturn parseCommon.strip(str);\n\t};\n\n\tthis.getInt = function(str) {\n\t\t// This parses the beginning of the string for a number and returns { value: num, digits: num }\n\t\t// If digits is 0, then the string didn't point to a number.\n\t\tvar x = parseInt(str);\n\t\tif (isNaN(x))\n\t\t\treturn {digits: 0};\n\t\tvar s = \"\" + x;\n\t\tvar i = str.indexOf(s);\t// This is to account for leading spaces\n\t\treturn {value: x, digits: i+s.length};\n\t};\n\n\tthis.getFloat = function(str) {\n\t\t// This parses the beginning of the string for a number and returns { value: num, digits: num }\n\t\t// If digits is 0, then the string didn't point to a number.\n\t\tvar x = parseFloat(str);\n\t\tif (isNaN(x))\n\t\t\treturn {digits: 0};\n\t\tvar s = \"\" + x;\n\t\tvar i = str.indexOf(s);\t// This is to account for leading spaces\n\t\treturn {value: x, digits: i+s.length};\n\t};\n\n\tthis.getMeasurement = function(tokens) {\n\t\tif (tokens.length === 0) return { used: 0 };\n\t\tvar used = 1;\n\t\tvar num = '';\n\t\tif (tokens[0].token === '-') {\n\t\t\ttokens.shift();\n\t\t\tnum = '-';\n\t\t\tused++;\n\t\t}\n\t\telse if (tokens[0].type !== 'number') return { used: 0 };\n\t\tnum += tokens.shift().token;\n\t\tif (tokens.length === 0) return { used: 1, value: parseInt(num) };\n\t\tvar x = tokens.shift();\n\t\tif (x.token === '.') {\n\t\t\tused++;\n\t\t\tif (tokens.length === 0) return { used: used, value: parseInt(num) };\n\t\t\tif (tokens[0].type === 'number') {\n\t\t\t\tx = tokens.shift();\n\t\t\t\tnum = num + '.' + x.token;\n\t\t\t\tused++;\n\t\t\t\tif (tokens.length === 0) return { used: used, value: parseFloat(num) };\n\t\t\t}\n\t\t\tx = tokens.shift();\n\t\t}\n\t\tswitch (x.token) {\n\t\t\tcase 'pt': return { used: used+1, value: parseFloat(num) };\n\t\t\tcase 'px': return { used: used+1, value: parseFloat(num) };\n\t\t\tcase 'cm': return { used: used+1, value: parseFloat(num)/2.54*72 };\n\t\t\tcase 'in': return { used: used+1, value: parseFloat(num)*72 };\n\t\t\tdefault: tokens.unshift(x); return { used: used, value: parseFloat(num) };\n\t\t}\n\t};\n\tvar substInChord = function(str) {\n\t\tstr = str.replace(/\\\\n/g, \"\\n\");\n\t\tstr = str.replace(/\\\\\"/g, '\"');\n\t\treturn str;\n\t};\n\tthis.getBrackettedSubstring = function(line, i, maxErrorChars, _matchChar)\n\t{\n\t\t// This extracts the sub string by looking at the first character and searching for that\n\t\t// character later in the line (or search for the optional _matchChar).\n\t\t// For instance, if the first character is a quote it will look for\n\t\t// the end quote. If the end of the line is reached, then only up to the default number\n\t\t// of characters are returned, so that a missing end quote won't eat up the entire line.\n\t\t// It returns the substring and the number of characters consumed.\n\t\t// The number of characters consumed is normally two more than the size of the substring,\n\t\t// but in the error case it might not be.\n\t\tvar matchChar = _matchChar || line[i];\n\t\tvar pos = i+1;\n\t\tvar esc = false;\n\t\twhile ((pos < line.length) && (esc || line[pos] !== matchChar)) {\n\t\t\tesc = line[pos] === '\\\\';\n\t\t\t++pos;\n\t\t}\n\t\tif (line[pos] === matchChar)\n\t\t\treturn [pos-i+1,substInChord(line.substring(i+1, pos)), true];\n\t\telse\t// we hit the end of line, so we'll just pick an arbitrary num of chars so the line doesn't disappear.\n\t\t{\n\t\t\tpos = i+maxErrorChars;\n\t\t\tif (pos > line.length-1)\n\t\t\t\tpos = line.length-1;\n\t\t\treturn [pos-i+1, substInChord(line.substring(i+1, pos)), false];\n\t\t}\n\t};\n};\n\nTokenizer.prototype.peekLine = function() {\n\treturn this.lines[this.lineIndex]\n}\n\nTokenizer.prototype.nextLine = function() {\n\tif (this.lineIndex > 0) {\n\t\tthis.multilineVars.iChar += this.lines[this.lineIndex-1].length + 1;\n\t}\n\tif (this.lineIndex < this.lines.length) {\n\t\tvar result = this.lines[this.lineIndex]\n\t\tthis.lineIndex++\n\t\treturn result\n\t}\n\treturn null\n}\n\nmodule.exports = Tokenizer;\n","//    abc_transpose.js: Handles the automatic transposition of key signatures, chord symbols, and notes.\n\nvar allNotes = require(\"./all-notes\");\nvar transposeChordName = require(\"../parse/transpose-chord\")\nvar keyAccidentals = require('../const/key-accidentals');\nvar transpose = {};\n\nvar keyIndex = {\n\t'C': 0,\n\t'C#': 1,\n\t'Db': 1,\n\t'D': 2,\n\t'D#': 3,\n\t'Eb': 3,\n\t'E': 4,\n\t'F': 5,\n\t'F#': 6,\n\t'Gb': 6,\n\t'G': 7,\n\t'G#': 8,\n\t'Ab': 8,\n\t'A': 9,\n\t'A#': 10,\n\t'Bb': 10,\n\t'B': 11\n};\nvar newKey = ['C', 'Db', 'D', 'Eb', 'E', 'F', 'F#', 'G', 'Ab', 'A', 'Bb', 'B'];\nvar newKeyMinor = ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'Bb', 'B'];\n\ntranspose.keySignature = function(multilineVars, keyName, root, acc, localTranspose) {\n\tif (multilineVars.clef.type === \"perc\" || multilineVars.clef.type === \"none\")\n\t\treturn { accidentals: keyAccidentals(keyName), root: root, acc: acc };\n\tif (!localTranspose) localTranspose = 0;\n\tmultilineVars.localTransposeVerticalMovement = 0;\n\tmultilineVars.localTransposePreferFlats = false;\n\tvar k = keyAccidentals(keyName);\n\tif (!k) return multilineVars.key; // If the key isn't in the list, it is non-standard. We won't attempt to transpose it.\n\tmultilineVars.localTranspose = (multilineVars.globalTranspose ? multilineVars.globalTranspose : 0) + localTranspose;\n\n\tif (!multilineVars.localTranspose)\n\t\treturn { accidentals: k, root: root, acc: acc };\n\tmultilineVars.globalTransposeOrigKeySig = k;\n\tif (multilineVars.localTranspose % 12 === 0) {\n\t\tmultilineVars.localTransposeVerticalMovement = (multilineVars.localTranspose / 12) * 7;\n\t\treturn { accidentals: k, root: root, acc: acc };\n\t}\n\n\tvar baseKey = keyName[0];\n\tif (keyName[1] === 'b' || keyName[1] === '#') {\n\t\tbaseKey += keyName[1];\n\t\tkeyName = keyName.substr(2);\n\t} else\n\t\tkeyName = keyName.substr(1);\n\tvar thisKeyIndex = keyIndex[baseKey]\n\tvar recognized = thisKeyIndex !== undefined\n\tif (!recognized) {\n\t\t// Either the key sig is \"none\" or we don't recognize it. Either way we don't change it, and we assume key of C for the purposes of this calculation.\n\t\tthisKeyIndex = 0\n\t\tbaseKey = \"C\"\n\t\tkeyName = \"\"\n\t}\n\tvar index = thisKeyIndex + multilineVars.localTranspose;\n\twhile (index < 0) index += 12;\n\tif (index > 11) index = index % 12;\n\tvar newKeyName = (keyName[0] === 'm' ? newKeyMinor[index] : newKey[index]);\n\tvar transposedKey = newKeyName + keyName;\n\tvar newKeySig = keyAccidentals(transposedKey);\n\tif (newKeySig.length > 0 && newKeySig[0].acc === 'flat')\n\t\tmultilineVars.localTransposePreferFlats = true;\n\tvar distance = transposedKey.charCodeAt(0) - baseKey.charCodeAt(0);\n\tif (multilineVars.localTranspose > 0) {\n\t\tif (distance < 0)\n\t\t\tdistance += 7;\n\t\telse if (distance === 0) {\n\t\t\t// There's a funny thing that happens when the key changes only an accidental's distance, for instance, from Ab to A.\n\t\t\t// If the distance is positive (we are raising pitch), and the change is higher (that is, Ab -> A), then raise an octave.\n\t\t\t// This test is easier because we know the keys are not equal (or we wouldn't get this far), so if the base key is a flat key, then\n\t\t\t// the transposed key must be higher. Likewise, if the transposed key is sharp, then the base key must be lower. And one\n\t\t\t// of those two things must be true because they are not both natural.\n\t\t\tif (baseKey[1] === '#' ||  transposedKey[1] === 'b')\n\t\t\t\tdistance += 7;\n\t\t}\n\t} else if (multilineVars.localTranspose < 0) {\n\t\tif (distance > 0)\n\t\t\tdistance -= 7;\n\t\telse if (distance === 0) {\n\t\t\t// There's a funny thing that happens when the key changes only an accidental's distance, for instance, from Ab to A.\n\t\t\t// If the distance is negative (we are dropping pitch), and the change is lower (that is, A -> Ab), then drop an octave.\n\t\t\tif (baseKey[1] === 'b' ||  transposedKey[1] === '#')\n\t\t\t\tdistance -= 7;\n\t\t}\n\t}\n\n\tif (multilineVars.localTranspose > 0)\n\t\tmultilineVars.localTransposeVerticalMovement = distance + Math.floor(multilineVars.localTranspose / 12) * 7;\n\telse\n\t\tmultilineVars.localTransposeVerticalMovement = distance + Math.ceil(multilineVars.localTranspose / 12) * 7;\n\tif (recognized)\n\t\treturn { accidentals: newKeySig, root: newKeyName[0], acc: newKeyName.length > 1 ? newKeyName[1] : \"\" };\n\telse\n\t\treturn { accidentals: [], root: root, acc: acc };\n};\n\ntranspose.chordName = function(multilineVars, chord) {\n\treturn transposeChordName(chord, multilineVars.localTranspose, multilineVars.localTransposePreferFlats, multilineVars.freegchord)\n};\n\nvar pitchToLetter = [ 'c', 'd', 'e', 'f', 'g', 'a', 'b' ];\nfunction accidentalChange(origPitch, newPitch, accidental, origKeySig, newKeySig) {\n\tvar origPitchLetter = pitchToLetter[(origPitch + 49) % 7]; // Make sure it is a positive pitch before normalizing.\n\tvar origAccidental = 0;\n\tfor (var i = 0; i < origKeySig.length; i++) {\n\t\tif (origKeySig[i].note.toLowerCase() === origPitchLetter)\n\t\t\torigAccidental = accidentals[origKeySig[i].acc];\n\t}\n\n\tvar currentAccidental = accidentals[accidental];\n\tvar delta = currentAccidental - origAccidental;\n\n\tvar newPitchLetter = pitchToLetter[(newPitch + 49) % 7]; // Make sure it is a positive pitch before normalizing.\n\tvar newAccidental = 0;\n\tfor (var j = 0; j < newKeySig.accidentals.length; j++) {\n\t\tif (newKeySig.accidentals[j].note.toLowerCase() === newPitchLetter)\n\t\t\tnewAccidental = accidentals[newKeySig.accidentals[j].acc];\n\t}\n\tvar calcAccidental = delta + newAccidental;\n\tif (calcAccidental < -2) {\n\t\tnewPitch--;\n\t\tcalcAccidental += (newPitchLetter === 'c' || newPitchLetter === 'f') ? 1 : 2;\n\t}\n\tif (calcAccidental > 2) {\n\t\tnewPitch++;\n\t\tcalcAccidental -= (newPitchLetter === 'b' || newPitchLetter === 'e') ? 1 : 2;\n\t}\n\treturn [newPitch, calcAccidental];\n}\n\nvar accidentals = {\n\tdblflat: -2,\n\tflat: -1,\n\tnatural: 0,\n\tsharp: 1,\n\tdblsharp: 2\n};\nvar accidentals2 = {\n\t\"-2\": \"dblflat\",\n\t\"-1\": \"flat\",\n\t\"0\": \"natural\",\n\t\"1\": \"sharp\",\n\t\"2\": \"dblsharp\"\n};\nvar accidentals3 = {\n\t\"-2\": \"__\",\n\t\"-1\": \"_\",\n\t\"0\": \"=\",\n\t\"1\": \"^\",\n\t\"2\": \"^^\"\n};\n//var count = 0\ntranspose.note = function(multilineVars, el) {\n\t// the \"el\" that is passed in has el.name, el.accidental, and el.pitch. \"pitch\" is the vertical position (0=middle C)\n\t// localTranspose is the number of half steps\n\t// localTransposeVerticalMovement is the vertical distance to move.\n\t//console.log(count++,multilineVars.localTranspose, el)\n\tif (!multilineVars.localTranspose || multilineVars.clef.type === \"perc\")\n\t\treturn;\n\tvar origPitch = el.pitch;\n\tif (multilineVars.localTransposeVerticalMovement) {\n\t\tel.pitch = el.pitch + multilineVars.localTransposeVerticalMovement;\n\t\tif (el.name) {\n\t\t\tvar actual = el.accidental ? el.name.substring(1) : el.name\n\t\t\tvar acc = el.accidental ? el.name[0] : ''\n\t\t\tvar p = allNotes.pitchIndex(actual)\n\t\t\tel.name = acc + allNotes.noteName(p+multilineVars.localTransposeVerticalMovement)\n\t\t}\n\t}\n\n\tif (el.accidental) {\n\t\tvar ret = accidentalChange(origPitch, el.pitch, el.accidental, multilineVars.globalTransposeOrigKeySig, multilineVars.targetKey);\n\t\tel.pitch = ret[0];\n\t\tel.accidental = accidentals2[ret[1]];\n\t\tif (el.name) {\n\t\t\tel.name = accidentals3[ret[1]] + el.name.replace(/[_^=]/g,'');\n\t\t}\n\t}\n\n};\n\nmodule.exports = transpose;\n","var allNotes = {};\n\nconst allPitches = [\n\t'C,,,', 'D,,,', 'E,,,', 'F,,,', 'G,,,', 'A,,,', 'B,,,',\n\t'C,,', 'D,,', 'E,,', 'F,,', 'G,,', 'A,,', 'B,,',\n\t'C,', 'D,', 'E,', 'F,', 'G,', 'A,', 'B,',\n\t'C', 'D', 'E', 'F', 'G', 'A', 'B',\n\t'c', 'd', 'e', 'f', 'g', 'a', 'b',\n\t\"c'\", \"d'\", \"e'\", \"f'\", \"g'\", \"a'\", \"b'\",\n\t\"c''\", \"d''\", \"e''\", \"f''\", \"g''\", \"a''\", \"b''\",\n\t\"c'''\", \"d'''\", \"e'''\", \"f'''\", \"g'''\", \"a'''\", \"b'''\",\n];\n\nallNotes.pitchIndex = function(noteName) {\n\treturn allPitches.indexOf(noteName)\n}\n\nallNotes.noteName = function(pitchIndex) {\n\treturn allPitches[pitchIndex]\n}\n\nmodule.exports = allNotes;\n","var sharpChords = ['C', 'C♯', 'D', \"D♯\", 'E', 'F', \"F♯\", 'G', 'G♯', 'A', 'A♯', 'B'];\nvar flatChords = ['C', 'D♭', 'D', 'E♭', 'E', 'F', 'G♭', 'G', 'A♭', 'A', 'B♭', 'B'];\nvar sharpChordsFree = ['C', 'C#', 'D', \"D#\", 'E', 'F', \"F#\", 'G', 'G#', 'A', 'A#', 'B'];\nvar flatChordsFree = ['C', 'Db', 'D', 'Eb', 'E', 'F', 'Gb', 'G', 'Ab', 'A', 'Bb', 'B'];\n\nfunction transposeChordName(chord, steps, preferFlats, freeGCchord) {\n\tif (!steps || (steps % 12 === 0)) // The chords are the same if it is an exact octave change.\n\t\treturn chord;\n\n\t// There are two things in the chord that might need to be transposed:\n\t// The chord will start with a letter from A-G, and might have one accidental after it.\n\t// That accidental might be an actual sharp or flat char, or it might be a pound sign or lower case \"b\".\n\t// Then there is a bunch of stuff that isn't transposed and should just be copied. That is stuff like \"7\" and more complicated chords.\n\t// But there is one other exception: right after a slash there will be a bass note and possibly an accidental. That should also be transposed.\n\n\twhile (steps < 0) steps += 12;\n\tif (steps > 11) steps = steps % 12;\n\n\t// (chord name w/accidental) (a bunch of stuff) (/) (bass note) (anything else)\n\tvar match = chord.match(/^([A-G][b#♭♯]?)([^\\/]+)?\\/?([A-G][b#♭♯]?)?(.+)?/)\n\tif (!match)\n\t\treturn chord; // We don't recognize the format of the chord, so skip it.\n\tvar name = match[1]\n\tvar extra1 = match[2]\n\tvar bass = match[3]\n\tvar extra2 = match[4]\n\tvar index = sharpChords.indexOf(name)\n\tif (index < 0)\n\t\tindex = flatChords.indexOf(name)\n\tif (index < 0)\n\t\tindex = sharpChordsFree.indexOf(name)\n\tif (index < 0)\n\t\tindex = flatChordsFree.indexOf(name)\n\tif (index < 0)\n\t\treturn chord; // This should never happen, but if we can't find the chord just bail.\t\n\n\tindex += steps\n\tindex = index % 12\n\n\tif (preferFlats) {\n\t\tif (freeGCchord) chord = flatChordsFree[index]\n\t\telse chord = flatChords[index]\n\t} else {\n\t\tif (freeGCchord) chord = sharpChordsFree[index]\n\t\telse chord = sharpChords[index]\n\t}\n\n\tif (extra1)\n\t\tchord += extra1\n\n\tif (bass) {\n\t\tvar index = sharpChords.indexOf(bass)\n\t\tif (index < 0)\n\t\t\tindex = flatChords.indexOf(bass)\n\t\tif (index < 0)\n\t\t\tindex = sharpChordsFree.indexOf(bass)\n\t\tif (index < 0)\n\t\t\tindex = flatChordsFree.indexOf(bass)\n\t\tchord += '/'\n\t\tif (index >= 0) {\n\t\t\tindex += steps\n\t\t\tindex = index % 12\n\t\t\tif (preferFlats) {\n\t\t\t\tif (freeGCchord) chord += flatChordsFree[index]\n\t\t\t\telse chord += flatChords[index]\n\t\t\t} else {\n\t\t\t\tif (freeGCchord) chord += sharpChordsFree[index]\n\t\t\t\telse chord += sharpChords[index]\n\t\t\t}\n\t\t} else\n\t\t\tchord += bass; // Don't know what to do so do nothing\n\t}\n\n\tif (extra2)\n\t\tchord += extra2\n\n\treturn chord;\n}\n\nmodule.exports = transposeChordName","var parseKeyVoice = require('../parse/abc_parse_key_voice');\nvar parseCommon = require('../parse/abc_common');\nvar parseDirective = require('./abc_parse_directive');\n\nvar TuneBuilder = function(tune) {\n\tvar self = this;\n\n\tthis.setVisualTranspose = function(visualTranspose) {\n\t\tif (visualTranspose)\n\t\t\ttune.visualTranspose = visualTranspose;\n\t};\n\n\tthis.resolveOverlays = function() {\n\t\tvar madeChanges = false;\n\t\tvar durationsPerLines = [];\n\t\tfor (var i = 0; i < tune.lines.length; i++) {\n\t\t\tvar line = tune.lines[i];\n\t\t\tif (line.staff) {\n\t\t\t\tfor (var j = 0; j < line.staff.length; j++) {\n\t\t\t\t\tvar staff = line.staff[j];\n\t\t\t\t\tvar overlayVoice = [];\n\t\t\t\t\tfor (var k = 0; k < staff.voices.length; k++) {\n\t\t\t\t\t\tvar voice = staff.voices[k];\n\t\t\t\t\t\toverlayVoice.push({ hasOverlay: false, voice: [], snip: []});\n\t\t\t\t\t\tdurationsPerLines[i] = 0;\n\t\t\t\t\t\tvar durationThisBar = 0;\n\t\t\t\t\t\tvar inOverlay = false;\n\t\t\t\t\t\tvar overlayDuration = 0;\n\t\t\t\t\t\tvar snipStart = -1;\n\t\t\t\t\t\tfor (var kk = 0; kk < voice.length; kk++) {\n\t\t\t\t\t\t\tvar event = voice[kk];\n\t\t\t\t\t\t\tif (event.el_type === \"overlay\" && !inOverlay) {\n\t\t\t\t\t\t\t\tmadeChanges = true;\n\t\t\t\t\t\t\t\tinOverlay = true;\n\t\t\t\t\t\t\t\tsnipStart = kk;\n\t\t\t\t\t\t\t\toverlayVoice[k].hasOverlay = true;\n\t\t\t\t\t\t\t\tif (overlayDuration === 0)\n\t\t\t\t\t\t\t\t\toverlayDuration = durationsPerLines[i];\n\t\t\t\t\t\t\t\t// If this isn't the first line, we also need invisible rests on the previous lines.\n\t\t\t\t\t\t\t\t// So, if the next voice doesn't appear in a previous line, create it\n\t\t\t\t\t\t\t\tfor (var ii = 0; ii < i; ii++) {\n\t\t\t\t\t\t\t\t\tif (durationsPerLines[ii] && tune.lines[ii].staff && staff.voices.length >= tune.lines[ii].staff[0].voices.length) {\n\t\t\t\t\t\t\t\t\t\ttune.lines[ii].staff[0].voices.push([{\n\t\t\t\t\t\t\t\t\t\t\tel_type: \"note\",\n\t\t\t\t\t\t\t\t\t\t\tduration: durationsPerLines[ii],\n\t\t\t\t\t\t\t\t\t\t\trest: {type: \"invisible\"},\n\t\t\t\t\t\t\t\t\t\t\tstartChar: event.startChar,\n\t\t\t\t\t\t\t\t\t\t\tendChar: event.endChar\n\t\t\t\t\t\t\t\t\t\t}]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (event.el_type === \"bar\") {\n\t\t\t\t\t\t\t\tif (inOverlay) {\n\t\t\t\t\t\t\t\t\t// delete the overlay events from this array without messing up this loop.\n\t\t\t\t\t\t\t\t\tinOverlay = false;\n\t\t\t\t\t\t\t\t\toverlayVoice[k].snip.push({ start: snipStart, len: kk - snipStart});\n\t\t\t\t\t\t\t\t\toverlayVoice[k].voice.push(event); // Also end the overlay with the barline.\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// This keeps the voices lined up: if the overlay isn't in the first measure then we need a bunch of invisible rests.\n\t\t\t\t\t\t\t\t\tif (durationThisBar > 0)\n\t\t\t\t\t\t\t\t\t\toverlayVoice[k].voice.push({ el_type: \"note\", duration: durationThisBar, rest: {type: \"invisible\"}, startChar: event.startChar, endChar: event.endChar });\n\t\t\t\t\t\t\t\t\toverlayVoice[k].voice.push(event);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdurationThisBar = 0;\n\t\t\t\t\t\t\t} else if (event.el_type === \"note\") {\n\t\t\t\t\t\t\t\tif (inOverlay) {\n\t\t\t\t\t\t\t\t\toverlayVoice[k].voice.push(event);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tdurationThisBar += event.duration;\n\t\t\t\t\t\t\t\t\tdurationsPerLines[i] += event.duration;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (event.el_type === \"scale\" || event.el_type === \"stem\" || event.el_type === \"overlay\" || event.el_type === \"style\" || event.el_type === \"transpose\" || event.el_type === \"color\") {\n\t\t\t\t\t\t\t\t// These types of events are duplicated on the overlay layer.\n\t\t\t\t\t\t\t\toverlayVoice[k].voice.push(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (overlayVoice[k].hasOverlay && overlayVoice[k].snip.length === 0) {\n\t\t\t\t\t\t\t// there was no closing bar, so we didn't set the snip amount.\n\t\t\t\t\t\t\toverlayVoice[k].snip.push({ start: snipStart, len: voice.length - snipStart});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfor (k = 0; k < overlayVoice.length; k++) {\n\t\t\t\t\t\tvar ov = overlayVoice[k];\n\t\t\t\t\t\tif (ov.hasOverlay) {\n\t\t\t\t\t\t\tov.voice.splice(0, 0, {el_type: \"stem\", direction: \"down\"})\n\t\t\t\t\t\t\tstaff.voices.push(ov.voice);\n\t\t\t\t\t\t\tfor (var kkk = ov.snip.length-1; kkk >= 0; kkk--) {\n\t\t\t\t\t\t\t\tvar snip = ov.snip[kkk];\n\t\t\t\t\t\t\t\tstaff.voices[k].splice(snip.start, snip.len);\n\t\t\t\t\t\t\t\tstaff.voices[k].splice(snip.start+1, 0, { el_type: \"stem\", direction: \"auto\" });\n\t\t\t\t\t\t\t\tvar indexOfLastBar = findLastBar(staff.voices[k], snip.start);\n\t\t\t\t\t\t\t\tstaff.voices[k].splice(indexOfLastBar, 0, { el_type: \"stem\", direction: \"up\" });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// remove ending marks from the overlay voice so they are not repeated\n\t\t\t\t\t\t\tfor (kkk = 0; kkk < staff.voices[staff.voices.length-1].length; kkk++) {\n\t\t\t\t\t\t\t\tstaff.voices[staff.voices.length-1][kkk] = parseCommon.clone(staff.voices[staff.voices.length-1][kkk]);\n\t\t\t\t\t\t\t\tvar el = staff.voices[staff.voices.length-1][kkk];\n\t\t\t\t\t\t\t\tif (el.el_type === 'bar' && el.startEnding) {\n\t\t\t\t\t\t\t\t\tdelete el.startEnding;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (el.el_type === 'bar' && el.endEnding)\n\t\t\t\t\t\t\t\t\tdelete el.endEnding;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn madeChanges;\n\t};\n\n\tfunction findLastBar(voice, start) {\n\t\tfor (var i = start-1; i > 0 && voice[i].el_type !== \"bar\"; i--) {\n\n\t\t}\n\t\treturn i;\n\t}\n\tfunction fixTitles(lines) {\n\t\t// We might have name and subname defined. We now know what line everything is on, so we can determine which to use.\n\t\tvar firstMusicLine = true;\n\t\tfor (var i = 0; i < lines.length; i++) {\n\t\t\tvar line = lines[i];\n\t\t\tif (line.staff) {\n\t\t\t\tfor (var j = 0; j < line.staff.length; j++) {\n\t\t\t\t\tvar staff = line.staff[j];\n\t\t\t\t\tif (staff.title) {\n\t\t\t\t\t\tvar hasATitle = false;\n\t\t\t\t\t\tfor (var k = 0; k < staff.title.length; k++) {\n\t\t\t\t\t\t\tif (staff.title[k]) {\n\t\t\t\t\t\t\t\tstaff.title[k] = (firstMusicLine) ? staff.title[k].name : staff.title[k].subname;\n\t\t\t\t\t\t\t\tif (staff.title[k])\n\t\t\t\t\t\t\t\t\thasATitle = true;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tstaff.title[k] = '';\n\t\t\t\t\t\t\t} else\n\t\t\t\t\t\t\t\tstaff.title[k] = '';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!hasATitle)\n\t\t\t\t\t\t\tdelete staff.title;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfirstMusicLine = false;\n\t\t\t}\n\t\t}\n\t}\n\n\tthis.cleanUp = function(barsperstaff, staffnonote, currSlur) {\n\t\tthis.closeLine();\t// Close the last line.\n\t\tdelete tune.runningFonts;\n\n\t\tsimplifyMetaText(tune)\n\t\t//addRichTextToAnnotationsAndLyrics(tune)\n\n\t\t// If the tempo was created with a string like \"Allegro\", then the duration of a beat needs to be set at the last moment, when it is most likely known.\n\t\tif (tune.metaText.tempo && tune.metaText.tempo.bpm && !tune.metaText.tempo.duration)\n\t\t\ttune.metaText.tempo.duration = [ tune.getBeatLength() ];\n\n\t\t// Remove any blank lines\n\t\tvar anyDeleted = false;\n\t\tvar i, s, v;\n\t\tfor (i = 0; i < tune.lines.length; i++) {\n\t\t\tif (tune.lines[i].staff !== undefined) {\n\t\t\t\tvar hasAny = false;\n\t\t\t\tfor (s = 0; s < tune.lines[i].staff.length; s++) {\n\t\t\t\t\tif (tune.lines[i].staff[s] === undefined) {\n\t\t\t\t\t\tanyDeleted = true;\n\t\t\t\t\t\ttune.lines[i].staff[s] = null;\n\t\t\t\t\t\t//tune.lines[i].staff[s] = { voices: []};\t// TODO-PER: There was a part missing in the abc music. How should we recover?\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (v = 0; v < tune.lines[i].staff[s].voices.length; v++) {\n\t\t\t\t\t\t\tif (tune.lines[i].staff[s].voices[v] === undefined)\n\t\t\t\t\t\t\t\ttune.lines[i].staff[s].voices[v] = [];\t// TODO-PER: There was a part missing in the abc music. How should we recover?\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\tif (this.containsNotes(tune.lines[i].staff[s].voices[v])) hasAny = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!hasAny) {\n\t\t\t\t\ttune.lines[i] = null;\n\t\t\t\t\tanyDeleted = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (anyDeleted) {\n\t\t\ttune.lines = tune.lines.filter(function (line) { return !!line });\n\t\t\ttune.lines.forEach(function(line) {\n\t\t\t\tif (line.staff)\n\t\t\t\t\tline.staff = line.staff.filter(function (line) { return !!line });\n\t\t\t});\n\t\t}\n\n\t\t// if we exceeded the number of bars allowed on a line, then force a new line\n\t\tif (barsperstaff) {\n\t\t\twhile (wrapMusicLines(tune.lines, barsperstaff)) {\n\t\t\t\t// This will keep wrapping until the end of the piece.\n\t\t\t}\n\t\t}\n\n\t\t// If we were passed staffnonote, then we want to get rid of all staffs that contain only rests.\n\t\tif (staffnonote) {\n\t\t\tanyDeleted = false;\n\t\t\tfor (i = 0; i < tune.lines.length; i++) {\n\t\t\t\tif (tune.lines[i].staff !== undefined) {\n\t\t\t\t\tfor (s = 0; s < tune.lines[i].staff.length; s++) {\n\t\t\t\t\t\tvar keepThis = false;\n\t\t\t\t\t\tfor (v = 0; v < tune.lines[i].staff[s].voices.length; v++) {\n\t\t\t\t\t\t\tif (this.containsNotesStrict(tune.lines[i].staff[s].voices[v])) {\n\t\t\t\t\t\t\t\tkeepThis = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!keepThis) {\n\t\t\t\t\t\t\tanyDeleted = true;\n\t\t\t\t\t\t\ttune.lines[i].staff[s] = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (anyDeleted) {\n\t\t\t\ttune.lines.forEach(function(line) {\n\t\t\t\t\tif (line.staff)\n\t\t\t\t\t\tline.staff = line.staff.filter(function (staff) { return !!staff });\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tfixTitles(tune.lines);\n\n\t\t// Remove the temporary working variables\n\t\tfor (i = 0; i < tune.lines.length; i++) {\n\t\t\tif (tune.lines[i].staff) {\n\t\t\t\tfor (s = 0; s < tune.lines[i].staff.length; s++)\n\t\t\t\t\tdelete tune.lines[i].staff[s].workingClef;\n\t\t\t}\n\t\t}\n\n\t\t// If there are overlays, create new voices for them.\n\t\twhile (this.resolveOverlays()) {\n\t\t\t// keep resolving overlays as long as any are found.\n\t\t}\n\n\t\tfunction cleanUpSlursInLine(line, staffNum, voiceNum) {\n\t\t\tif (!currSlur[staffNum])\n\t\t\t\tcurrSlur[staffNum] = [];\n\t\t\tif (!currSlur[staffNum][voiceNum])\n\t\t\t\tcurrSlur[staffNum][voiceNum] = [];\n\t\t\tvar x;\n//\t\t\tvar lyr = null;\t// TODO-PER: debugging.\n\n\t\t\tvar addEndSlur = function(obj, num, chordPos) {\n\t\t\t\tif (currSlur[staffNum][voiceNum][chordPos] === undefined) {\n\t\t\t\t\t// There isn't an exact match for note position, but we'll take any other open slur.\n\t\t\t\t\tfor (x = 0; x < currSlur[staffNum][voiceNum].length; x++) {\n\t\t\t\t\t\tif (currSlur[staffNum][voiceNum][x] !== undefined) {\n\t\t\t\t\t\t\tchordPos = x;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (currSlur[staffNum][voiceNum][chordPos] === undefined) {\n\t\t\t\t\t\tvar offNum = chordPos*100+1;\n\t\t\t\t\t\tobj.endSlur.forEach(function(x) { if (offNum === x) --offNum; });\n\t\t\t\t\t\tcurrSlur[staffNum][voiceNum][chordPos] = [offNum];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvar slurNum;\n\t\t\t\tfor (var i = 0; i < num; i++) {\n\t\t\t\t\tslurNum = currSlur[staffNum][voiceNum][chordPos].pop();\n\t\t\t\t\tobj.endSlur.push(slurNum);\n//\t\t\t\t\tlyr.syllable += '<' + slurNum;\t// TODO-PER: debugging\n\t\t\t\t}\n\t\t\t\tif (currSlur[staffNum][voiceNum][chordPos].length === 0)\n\t\t\t\t\tdelete currSlur[staffNum][voiceNum][chordPos];\n\t\t\t\treturn slurNum;\n\t\t\t};\n\n\t\t\tvar addStartSlur = function(obj, num, chordPos, usedNums) {\n\t\t\t\tobj.startSlur = [];\n\t\t\t\tif (currSlur[staffNum][voiceNum][chordPos] === undefined) {\n\t\t\t\t\tcurrSlur[staffNum][voiceNum][chordPos] = [];\n\t\t\t\t}\n\t\t\t\tvar nextNum = chordPos*100+1;\n\t\t\t\tfor (var i = 0; i < num; i++) {\n\t\t\t\t\tif (usedNums) {\n\t\t\t\t\t\tusedNums.forEach(function(x) { if (nextNum === x) ++nextNum; });\n\t\t\t\t\t\tusedNums.forEach(function(x) { if (nextNum === x) ++nextNum; });\n\t\t\t\t\t\tusedNums.forEach(function(x) { if (nextNum === x) ++nextNum; });\n\t\t\t\t\t}\n\t\t\t\t\tcurrSlur[staffNum][voiceNum][chordPos].forEach(function(x) { if (nextNum === x) ++nextNum; });\n\t\t\t\t\tcurrSlur[staffNum][voiceNum][chordPos].forEach(function(x) { if (nextNum === x) ++nextNum; });\n\n\t\t\t\t\tcurrSlur[staffNum][voiceNum][chordPos].push(nextNum);\n\t\t\t\t\tobj.startSlur.push({ label: nextNum });\n\t\t\t\t\tif (obj.dottedSlur) {\n\t\t\t\t\t\tobj.startSlur[obj.startSlur.length-1].style = 'dotted';\n\t\t\t\t\t\tdelete obj.dottedSlur;\n\t\t\t\t\t}\n//\t\t\t\t\tlyr.syllable += ' ' + nextNum + '>';\t// TODO-PER:debugging\n\t\t\t\t\tnextNum++;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfor (var i = 0; i < line.length; i++) {\n\t\t\t\tvar el = line[i];\n//\t\t\t\tif (el.lyric === undefined)\t// TODO-PER: debugging\n//\t\t\t\t\tel.lyric = [{ divider: '-' }];\t// TODO-PER: debugging\n//\t\t\t\tlyr = el.lyric[0];\t// TODO-PER: debugging\n//\t\t\t\tlyr.syllable = '';\t// TODO-PER: debugging\n\t\t\t\tif (el.el_type === 'note') {\n\t\t\t\t\tif (el.gracenotes) {\n\t\t\t\t\t\tfor (var g = 0; g < el.gracenotes.length; g++) {\n\t\t\t\t\t\t\tif (el.gracenotes[g].endSlur) {\n\t\t\t\t\t\t\t\tvar gg = el.gracenotes[g].endSlur;\n\t\t\t\t\t\t\t\tel.gracenotes[g].endSlur = [];\n\t\t\t\t\t\t\t\tfor (var ggg = 0; ggg < gg; ggg++)\n\t\t\t\t\t\t\t\t\taddEndSlur(el.gracenotes[g], 1, 20);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (el.gracenotes[g].startSlur) {\n\t\t\t\t\t\t\t\tx = el.gracenotes[g].startSlur;\n\t\t\t\t\t\t\t\taddStartSlur(el.gracenotes[g], x, 20);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (el.endSlur) {\n\t\t\t\t\t\tx = el.endSlur;\n\t\t\t\t\t\tel.endSlur = [];\n\t\t\t\t\t\taddEndSlur(el, x, 0);\n\t\t\t\t\t}\n\t\t\t\t\tif (el.startSlur) {\n\t\t\t\t\t\tx = el.startSlur;\n\t\t\t\t\t\taddStartSlur(el, x, 0);\n\t\t\t\t\t}\n\t\t\t\t\tif (el.pitches) {\n\t\t\t\t\t\tvar usedNums = [];\n\t\t\t\t\t\tfor (var p = 0; p < el.pitches.length; p++) {\n\t\t\t\t\t\t\tif (el.pitches[p].endSlur) {\n\t\t\t\t\t\t\t\tvar k = el.pitches[p].endSlur;\n\t\t\t\t\t\t\t\tel.pitches[p].endSlur = [];\n\t\t\t\t\t\t\t\tfor (var j = 0; j < k; j++) {\n\t\t\t\t\t\t\t\t\tvar slurNum = addEndSlur(el.pitches[p], 1, p+1);\n\t\t\t\t\t\t\t\t\tusedNums.push(slurNum);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (p = 0; p < el.pitches.length; p++) {\n\t\t\t\t\t\t\tif (el.pitches[p].startSlur) {\n\t\t\t\t\t\t\t\tx = el.pitches[p].startSlur;\n\t\t\t\t\t\t\t\taddStartSlur(el.pitches[p], x, p+1, usedNums);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Correct for the weird gracenote case where ({g}a) should match.\n\t\t\t\t\t\t// The end slur was already assigned to the note, and needs to be moved to the first note of the graces.\n\t\t\t\t\t\tif (el.gracenotes && el.pitches[0].endSlur && el.pitches[0].endSlur[0] === 100 && el.pitches[0].startSlur) {\n\t\t\t\t\t\t\tif (el.gracenotes[0].endSlur)\n\t\t\t\t\t\t\t\tel.gracenotes[0].endSlur.push(el.pitches[0].startSlur[0].label);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tel.gracenotes[0].endSlur = [el.pitches[0].startSlur[0].label];\n\t\t\t\t\t\t\tif (el.pitches[0].endSlur.length === 1)\n\t\t\t\t\t\t\t\tdelete el.pitches[0].endSlur;\n\t\t\t\t\t\t\telse if (el.pitches[0].endSlur[0] === 100)\n\t\t\t\t\t\t\t\tel.pitches[0].endSlur.shift();\n\t\t\t\t\t\t\telse if (el.pitches[0].endSlur[el.pitches[0].endSlur.length-1] === 100)\n\t\t\t\t\t\t\t\tel.pitches[0].endSlur.pop();\n\t\t\t\t\t\t\tif (currSlur[staffNum][voiceNum][1].length === 1)\n\t\t\t\t\t\t\t\tdelete currSlur[staffNum][voiceNum][1];\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tcurrSlur[staffNum][voiceNum][1].pop();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// TODO-PER: This could be done faster as we go instead of as the last step.\n\t\tfunction fixClefPlacement(el) {\n\t\t\tparseKeyVoice.fixClef(el);\n\t\t}\n\n\t\tfunction wrapMusicLines(lines, barsperstaff) {\n\t\t\tfor (i = 0; i < lines.length; i++) {\n\t\t\t\tif (lines[i].staff !== undefined) {\n\t\t\t\t\tfor (s = 0; s < lines[i].staff.length; s++) {\n\t\t\t\t\t\tvar permanentItems = [];\n\t\t\t\t\t\tfor (v = 0; v < lines[i].staff[s].voices.length; v++) {\n\t\t\t\t\t\t\tvar voice = lines[i].staff[s].voices[v];\n\t\t\t\t\t\t\tvar barNumThisLine = 0;\n\t\t\t\t\t\t\tfor (var n = 0; n < voice.length; n++) {\n\t\t\t\t\t\t\t\tif (voice[n].el_type === 'bar') {\n\t\t\t\t\t\t\t\t\tbarNumThisLine++;\n\t\t\t\t\t\t\t\t\tif (barNumThisLine >= barsperstaff) {\n\t\t\t\t\t\t\t\t\t\t// push everything else to the next line, if there is anything else,\n\t\t\t\t\t\t\t\t\t\t// and there is a next line. If there isn't a next line, create one.\n\t\t\t\t\t\t\t\t\t\tif (n < voice.length - 1) {\n\t\t\t\t\t\t\t\t\t\t\tvar nextLine = getNextMusicLine(lines, i);\n\t\t\t\t\t\t\t\t\t\t\tif (!nextLine) {\n\t\t\t\t\t\t\t\t\t\t\t\tvar cp = JSON.parse(JSON.stringify(lines[i]));\n\t\t\t\t\t\t\t\t\t\t\t\tlines.push(parseCommon.clone(cp));\n\t\t\t\t\t\t\t\t\t\t\t\tnextLine = lines[lines.length - 1];\n\t\t\t\t\t\t\t\t\t\t\t\tfor (var ss = 0; ss < nextLine.staff.length; ss++) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor (var vv = 0; vv < nextLine.staff[ss].voices.length; vv++)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tnextLine.staff[ss].voices[vv] = [];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tvar startElement = n + 1;\n\t\t\t\t\t\t\t\t\t\t\tvar section = lines[i].staff[s].voices[v].slice(startElement);\n\t\t\t\t\t\t\t\t\t\t\tlines[i].staff[s].voices[v] = lines[i].staff[s].voices[v].slice(0, startElement);\n\t\t\t\t\t\t\t\t\t\t\tnextLine.staff[s].voices[v] = permanentItems.concat(section.concat(nextLine.staff[s].voices[v]));\n\t\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (!voice[n].duration) {\n\t\t\t\t\t\t\t\t\tpermanentItems.push(voice[n]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction getNextMusicLine(lines, currentLine) {\n\t\t\tcurrentLine++;\n\t\t\twhile (lines.length > currentLine) {\n\t\t\t\tif (lines[currentLine].staff)\n\t\t\t\t\treturn lines[currentLine];\n\t\t\t\tcurrentLine++;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\tfor (tune.lineNum = 0; tune.lineNum < tune.lines.length; tune.lineNum++) {\n\t\t\tvar staff = tune.lines[tune.lineNum].staff;\n\t\t\tif (staff) {\n\t\t\t\tfor (tune.staffNum = 0; tune.staffNum < staff.length; tune.staffNum++) {\n\t\t\t\t\tif (staff[tune.staffNum].clef)\n\t\t\t\t\t\tfixClefPlacement(staff[tune.staffNum].clef);\n\t\t\t\t\tfor (tune.voiceNum = 0; tune.voiceNum < staff[tune.staffNum].voices.length; tune.voiceNum++) {\n\t\t\t\t\t\tvar voice = staff[tune.staffNum].voices[tune.voiceNum];\n\t\t\t\t\t\tcleanUpSlursInLine(voice, tune.staffNum, tune.voiceNum);\n\t\t\t\t\t\tfor (var j = 0; j < voice.length; j++) {\n\t\t\t\t\t\t\tif (voice[j].el_type === 'clef')\n\t\t\t\t\t\t\t\tfixClefPlacement(voice[j]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (voice.length > 0 && voice[voice.length-1].barNumber) {\n\t\t\t\t\t\t\t// Don't hang a bar number on the last bar line: it should go on the next line.\n\t\t\t\t\t\t\tvar nextLine = getNextMusicLine(tune.lines, tune.lineNum);\n\t\t\t\t\t\t\tif (nextLine)\n\t\t\t\t\t\t\t\tnextLine.staff[0].barNumber = voice[voice.length-1].barNumber;\n\t\t\t\t\t\t\tdelete voice[voice.length-1].barNumber;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove temporary variables that the outside doesn't need to know about\n\t\tdelete tune.staffNum;\n\t\tdelete tune.voiceNum;\n\t\tdelete tune.lineNum;\n\t\tdelete tune.potentialStartBeam;\n\t\tdelete tune.potentialEndBeam;\n\t\tdelete tune.vskipPending;\n\n\t\treturn currSlur;\n\t};\n\n\ttune.reset();\n\n\tthis.getLastNote = function() {\n\t\tif (tune.lines[tune.lineNum] && tune.lines[tune.lineNum].staff && tune.lines[tune.lineNum].staff[tune.staffNum] &&\n\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum].voices[tune.voiceNum]) {\n\t\t\tfor (var i = tune.lines[tune.lineNum].staff[tune.staffNum].voices[tune.voiceNum].length-1; i >= 0; i--) {\n\t\t\t\tvar el = tune.lines[tune.lineNum].staff[tune.staffNum].voices[tune.voiceNum][i];\n\t\t\t\tif (el.el_type === 'note') {\n\t\t\t\t\treturn el;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\n\tthis.addTieToLastNote = function(dottedTie) {\n\t\t// TODO-PER: if this is a chord, which note?\n\t\tvar el = this.getLastNote();\n\t\tif (el && el.pitches && el.pitches.length > 0) {\n\t\t\tel.pitches[0].startTie = {};\n\t\t\tif (dottedTie)\n\t\t\t\tel.pitches[0].startTie.style = 'dotted';\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n\n\tthis.getDuration = function(el) {\n\t\tif (el.duration) return el.duration;\n\t\t//if (el.pitches && el.pitches.length > 0) return el.pitches[0].duration;\n\t\treturn 0;\n\t};\n\n\tthis.closeLine = function() {\n\t\tif (tune.potentialStartBeam && tune.potentialEndBeam) {\n\t\t\ttune.potentialStartBeam.startBeam = true;\n\t\t\ttune.potentialEndBeam.endBeam = true;\n\t\t}\n\t\tdelete tune.potentialStartBeam;\n\t\tdelete tune.potentialEndBeam;\n\t};\n\n\tthis.appendElement = function(type, startChar, endChar, hashParams)\n\t{\n\t\tvar This = tune;\n\t\tvar pushNote = function(hp) {\n\t\t\tvar currStaff = This.lines[This.lineNum].staff[This.staffNum];\n\t\t\tif (!currStaff) {\n\t\t\t\t// TODO-PER: This prevents a crash, but it drops the element. Need to figure out how to start a new line, or delay adding this.\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (hp.pitches !== undefined) {\n\t\t\t\tvar mid = currStaff.workingClef.verticalPos;\n\t\t\t\thp.pitches.forEach(function(p) { p.verticalPos = p.pitch - mid; });\n\t\t\t}\n\t\t\tif (hp.gracenotes !== undefined) {\n\t\t\t\tvar mid2 = currStaff.workingClef.verticalPos;\n\t\t\t\thp.gracenotes.forEach(function(p) { p.verticalPos = p.pitch - mid2; });\n\t\t\t}\n\t\t\tcurrStaff.voices[This.voiceNum].push(hp);\n\t\t};\n\t\thashParams.el_type = type;\n\t\tif (startChar !== null)\n\t\t\thashParams.startChar = startChar;\n\t\tif (endChar !== null)\n\t\t\thashParams.endChar = endChar;\n\t\tvar endBeamHere = function() {\n\t\t\tThis.potentialStartBeam.startBeam = true;\n\t\t\thashParams.endBeam = true;\n\t\t\tdelete This.potentialStartBeam;\n\t\t\tdelete This.potentialEndBeam;\n\t\t};\n\t\tvar endBeamLast = function() {\n\t\t\tif (This.potentialStartBeam !== undefined && This.potentialEndBeam !== undefined) {\t// Do we have a set of notes to beam?\n\t\t\t\tThis.potentialStartBeam.startBeam = true;\n\t\t\t\tThis.potentialEndBeam.endBeam = true;\n\t\t\t}\n\t\t\tdelete This.potentialStartBeam;\n\t\t\tdelete This.potentialEndBeam;\n\t\t};\n\t\tif (type === 'note') { // && (hashParams.rest !== undefined || hashParams.end_beam === undefined)) {\n\t\t\t// Now, add the startBeam and endBeam where it is needed.\n\t\t\t// end_beam is already set on the places where there is a forced end_beam. We'll remove that here after using that info.\n\t\t\t// this.potentialStartBeam either points to null or the start beam.\n\t\t\t// this.potentialEndBeam either points to null or the start beam.\n\t\t\t// If we have a beam break (note is longer than a quarter, or an end_beam is on this element), then set the beam if we have one.\n\t\t\t// reset the variables for the next notes.\n\t\t\tvar dur = self.getDuration(hashParams);\n\t\t\tif (dur >= 0.25) {\t// The beam ends on the note before this.\n\t\t\t\tendBeamLast();\n\t\t\t} else if (hashParams.force_end_beam_last && This.potentialStartBeam !== undefined) {\n\t\t\t\tendBeamLast();\n\t\t\t} else if (hashParams.end_beam && This.potentialStartBeam !== undefined) {\t// the beam is forced to end on this note, probably because of a space in the ABC\n\t\t\t\tif (hashParams.rest === undefined)\n\t\t\t\t\tendBeamHere();\n\t\t\t\telse\n\t\t\t\t\tendBeamLast();\n\t\t\t} else if (hashParams.rest === undefined) {\t// this a short note and we aren't about to end the beam\n\t\t\t\tif (This.potentialStartBeam === undefined) {\t// We aren't collecting notes for a beam, so start here.\n\t\t\t\t\tif (!hashParams.end_beam) {\n\t\t\t\t\t\tThis.potentialStartBeam = hashParams;\n\t\t\t\t\t\tdelete This.potentialEndBeam;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tThis.potentialEndBeam = hashParams;\t// Continue the beaming, look for the end next note.\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//  end_beam goes on rests and notes which precede rests _except_ when a rest (or set of adjacent rests) has normal notes on both sides (no spaces)\n//\t\t\tif (hashParams.rest !== undefined)\n//\t\t\t{\n//\t\t\t\thashParams.end_beam = true;\n//\t\t\t\tvar el2 = this.getLastNote();\n//\t\t\t\tif (el2) el2.end_beam = true;\n//\t\t\t\t// TODO-PER: implement exception mentioned in the comment.\n//\t\t\t}\n\t\t} else {\t// It's not a note, so there definitely isn't beaming after it.\n\t\t\tendBeamLast();\n\t\t}\n\t\tdelete hashParams.end_beam;\t// We don't want this temporary variable hanging around.\n\t\tdelete hashParams.force_end_beam_last;\t// We don't want this temporary variable hanging around.\n\t\tpushNote(hashParams);\n\t};\n\n\tthis.appendStartingElement = function(type, startChar, endChar, hashParams2)\n\t{\n\t\t// If we're in the middle of beaming, then end the beam.\n\t\tthis.closeLine();\n\n\t\t// We only ever want implied naturals the first time.\n\t\tvar impliedNaturals;\n\t\tif (type === 'key') {\n\t\t\timpliedNaturals = hashParams2.impliedNaturals;\n\t\t\tdelete hashParams2.impliedNaturals;\n\t\t\tdelete hashParams2.explicitAccidentals;\n\t\t}\n\n\t\t// Clone the object because it will be sticking around for the next line and we don't want the extra fields in it.\n\t\tvar hashParams = parseCommon.clone(hashParams2);\n\n\t\tif (tune.lines[tune.lineNum] && tune.lines[tune.lineNum].staff) { // be sure that we are on a music type line before doing the following.\n\t\t\t// If tune is the first item in tune staff, then we might have to initialize the staff, first.\n\t\t\tif (tune.lines[tune.lineNum].staff.length <= tune.staffNum) {\n\t\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum] = {};\n\t\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum].clef = parseCommon.clone(tune.lines[tune.lineNum].staff[0].clef);\n\t\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum].key = parseCommon.clone(tune.lines[tune.lineNum].staff[0].key);\n\t\t\t\tif (tune.lines[tune.lineNum].staff[0].meter)\n\t\t\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum].meter = parseCommon.clone(tune.lines[tune.lineNum].staff[0].meter);\n\t\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum].workingClef = parseCommon.clone(tune.lines[tune.lineNum].staff[0].workingClef);\n\t\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum].voices = [[]];\n\t\t\t}\n\t\t\t// If tune is a clef type, then we replace the working clef on the line. This is kept separate from\n\t\t\t// the clef in case there is an inline clef field. We need to know what the current position for\n\t\t\t// the note is.\n\t\t\tif (type === 'clef') {\n\t\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum].workingClef = hashParams;\n\t\t\t}\n\n\t\t\t// These elements should not be added twice, so if the element exists on tune line without a note or bar before it, just replace the staff version.\n\t\t\tvar voice = tune.lines[tune.lineNum].staff[tune.staffNum].voices[tune.voiceNum];\n\t\t\tfor (var i = 0; i < voice.length; i++) {\n\t\t\t\tif (voice[i].el_type === 'note' || voice[i].el_type === 'bar') {\n\t\t\t\t\thashParams.el_type = type;\n\t\t\t\t\thashParams.startChar = startChar;\n\t\t\t\t\thashParams.endChar = endChar;\n\t\t\t\t\tif (impliedNaturals)\n\t\t\t\t\t\thashParams.accidentals = impliedNaturals.concat(hashParams.accidentals);\n\t\t\t\t\tvoice.push(hashParams);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (voice[i].el_type === type) {\n\t\t\t\t\thashParams.el_type = type;\n\t\t\t\t\thashParams.startChar = startChar;\n\t\t\t\t\thashParams.endChar = endChar;\n\t\t\t\t\tif (impliedNaturals)\n\t\t\t\t\t\thashParams.accidentals = impliedNaturals.concat(hashParams.accidentals);\n\t\t\t\t\tvoice[i] = hashParams;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// We didn't see either that type or a note, so replace the element to the staff.\n\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum][type] = hashParams2;\n\t\t}\n\t};\n\n\tthis.pushLine = function(hash) {\n\t\tif (tune.vskipPending) {\n\t\t\thash.vskip = tune.vskipPending;\n\t\t\tdelete tune.vskipPending;\n\t\t}\n\t\ttune.lines.push(hash);\n\t};\n\n\tthis.addSubtitle = function(str, info) {\n\t\tthis.pushLine({subtitle: { text: str, startChar: info.startChar, endChar: info.endChar}});\n\t};\n\n\tthis.addSpacing = function(num) {\n\t\ttune.vskipPending = num;\n\t};\n\n\tthis.addNewPage = function(num) {\n\t\tthis.pushLine({newpage: num});\n\t};\n\n\tthis.addSeparator = function(spaceAbove, spaceBelow, lineLength, info) {\n\t\tthis.pushLine({separator: {spaceAbove: Math.round(spaceAbove), spaceBelow: Math.round(spaceBelow), lineLength: Math.round(lineLength), startChar: info.startChar, endChar: info.endChar}});\n\t};\n\n\tthis.addText = function(str, info) {\n\t\tthis.pushLine({text: { text: str, startChar: info.startChar, endChar: info.endChar}});\n\t};\n\n\tthis.addCentered = function(str) {\n\t\tthis.pushLine({text: [{text: str, center: true }]});\n\t};\n\n\tthis.containsNotes = function(voice) {\n\t\tfor (var i = 0; i < voice.length; i++) {\n\t\t\tif (voice[i].el_type === 'note' || voice[i].el_type === 'bar')\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n\n\tthis.containsNotesStrict = function(voice) {\n\t\tfor (var i = 0; i < voice.length; i++) {\n\t\t\tif (voice[i].el_type === 'note' && (voice[i].rest === undefined || voice[i].chord !== undefined))\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n\n\t//\tanyVoiceContainsNotes: function(line) {\n//\t\tfor (var i = 0; i < line.staff.voices.length; i++) {\n//\t\t\tif (this.containsNotes(line.staff.voices[i]))\n//\t\t\t\treturn true;\n//\t\t}\n//\t\treturn false;\n//\t},\n\tthis.changeVoiceScale = function(scale) {\n\t\tself.appendElement('scale', null, null, { size: scale} );\n\t};\n\tthis.changeVoiceColor = function(color) {\n\t\tself.appendElement('color', null, null, { color: color} );\n\t};\n\n\tthis.startNewLine = function(params) {\n\t\t// If the pointed to line doesn't exist, just create that. If the line does exist, but doesn't have any music on it, just use it.\n\t\t// If it does exist and has music, then increment the line number. If the new element doesn't exist, create it.\n\t\tvar This = tune;\n\t\tthis.closeLine();\t// Close the previous line.\n\t\tvar createVoice = function(params) {\n\t\t\tvar thisStaff = This.lines[This.lineNum].staff[This.staffNum];\n\t\t\tthisStaff.voices[This.voiceNum] = [];\n\t\t\tif (!thisStaff.title)\n\t\t\t\tthisStaff.title = [];\n\t\t\tthisStaff.title[This.voiceNum] = { name: params.name, subname: params.subname };\n\t\t\tif (params.style)\n\t\t\t\tself.appendElement('style', null, null, {head: params.style});\n\t\t\tif (params.stem)\n\t\t\t\tself.appendElement('stem', null, null, {direction: params.stem});\n\t\t\telse if (This.voiceNum > 0) {\n\t\t\t\tif (thisStaff.voices[0]!== undefined) {\n\t\t\t\t\tvar found = false;\n\t\t\t\t\tfor (var i = 0; i < thisStaff.voices[0].length; i++) {\n\t\t\t\t\t\tif (thisStaff.voices[0].el_type === 'stem')\n\t\t\t\t\t\t\tfound = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (!found) {\n\t\t\t\t\t\tvar stem = { el_type: 'stem', direction: 'up' };\n\t\t\t\t\t\tthisStaff.voices[0].splice(0,0,stem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tself.appendElement('stem', null, null, {direction: 'down'});\n\t\t\t}\n\t\t\tif (params.scale)\n\t\t\t\tself.appendElement('scale', null, null, { size: params.scale} );\n\t\t\tif (params.color)\n\t\t\t\tself.appendElement('color', null, null, { color: params.color} );\n\t\t};\n\t\tvar createStaff = function(params) {\n\t\t\tif (params.key && params.key.impliedNaturals) {\n\t\t\t\tparams.key.accidentals = params.key.accidentals.concat(params.key.impliedNaturals);\n\t\t\t\tdelete params.key.impliedNaturals;\n\t\t\t}\n\n\t\t\tThis.lines[This.lineNum].staff[This.staffNum] = {voices: [ ], clef: params.clef, key: params.key, workingClef: params.clef };\n\t\t\tif (params.stafflines !== undefined) {\n\t\t\t\tThis.lines[This.lineNum].staff[This.staffNum].clef.stafflines = params.stafflines;\n\t\t\t\tThis.lines[This.lineNum].staff[This.staffNum].workingClef.stafflines = params.stafflines;\n\t\t\t}\n\t\t\tif (params.staffscale) {\n\t\t\t\tThis.lines[This.lineNum].staff[This.staffNum].staffscale = params.staffscale;\n\t\t\t}\n\t\t\tif (params.annotationfont) self.setLineFont(\"annotationfont\", params.annotationfont);\n\t\t\tif (params.gchordfont) self.setLineFont(\"gchordfont\", params.gchordfont);\n\t\t\tif (params.tripletfont) self.setLineFont(\"tripletfont\", params.tripletfont);\n\t\t\tif (params.vocalfont) self.setLineFont(\"vocalfont\", params.vocalfont);\n\t\t\tif (params.bracket) This.lines[This.lineNum].staff[This.staffNum].bracket = params.bracket;\n\t\t\tif (params.brace) This.lines[This.lineNum].staff[This.staffNum].brace = params.brace;\n\t\t\tif (params.connectBarLines) This.lines[This.lineNum].staff[This.staffNum].connectBarLines = params.connectBarLines;\n\t\t\tif (params.barNumber) This.lines[This.lineNum].staff[This.staffNum].barNumber = params.barNumber;\n\t\t\tcreateVoice(params);\n\t\t\t// Some stuff just happens for the first voice\n\t\t\tif (params.part)\n\t\t\t\tself.appendElement('part', params.part.startChar, params.part.endChar, {title: params.part.title});\n\t\t\tif (params.meter !== undefined) This.lines[This.lineNum].staff[This.staffNum].meter = params.meter;\n\t\t\tif (This.vskipPending) {\n\t\t\t\tThis.lines[This.lineNum].vskip = This.vskipPending;\n\t\t\t\tdelete This.vskipPending;\n\t\t\t}\n\t\t};\n\t\tvar createLine = function(params) {\n\t\t\tThis.lines[This.lineNum] = {staff: []};\n\t\t\tcreateStaff(params);\n\t\t};\n\t\tif (tune.lines[tune.lineNum] === undefined) createLine(params);\n\t\telse if (tune.lines[tune.lineNum].staff === undefined) {\n\t\t\ttune.lineNum++;\n\t\t\tthis.startNewLine(params);\n\t\t} else if (tune.lines[tune.lineNum].staff[tune.staffNum] === undefined) createStaff(params);\n\t\telse if (tune.lines[tune.lineNum].staff[tune.staffNum].voices[tune.voiceNum] === undefined) createVoice(params);\n\t\telse if (!this.containsNotes(tune.lines[tune.lineNum].staff[tune.staffNum].voices[tune.voiceNum])) {\n\t\t\t// We don't need a new line but we might need to update parts of it.\n\t\t\tif (params.part)\n\t\t\t\tself.appendElement('part', params.part.startChar, params.part.endChar, {title: params.part.title});\n\t\t} else {\n\t\t\ttune.lineNum++;\n\t\t\tthis.startNewLine(params);\n\t\t}\n\t};\n\n\tthis.setRunningFont = function(type, font) {\n\t\t// This is called at tune start to set the current default fonts so we know whether to record a change.\n\t\ttune.runningFonts[type] = font;\n\t};\n\n\tthis.setLineFont = function(type, font) {\n\t\t// If we haven't encountered the font type yet then we are using the default font so it doesn't\n\t\t// need to be noted. If we have encountered it, then only record it if it is different from the last time.\n\t\tif (tune.runningFonts[type]) {\n\t\t\tvar isDifferent = false;\n\t\t\tvar keys = Object.keys(font);\n\t\t\tfor (var i = 0; i < keys.length; i++) {\n\t\t\t\tif (tune.runningFonts[type][keys[i]] !== font[keys[i]])\n\t\t\t\t\tisDifferent = true;\n\t\t\t}\n\t\t\tif (isDifferent) {\n\t\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum][type] = font;\n\t\t\t}\n\t\t}\n\t\ttune.runningFonts[type] = font;\n\t}\n\n\tthis.setBarNumberImmediate = function(barNumber) {\n\t\t// If tune is called right at the beginning of a line, then correct the measure number that is already written.\n\t\t// If tune is called at the beginning of a measure, then correct the measure number that was just created.\n\t\t// If tune is called in the middle of a measure, then subtract one from it, because it will be incremented before applied.\n\t\tvar currentVoice = this.getCurrentVoice();\n\t\tif (currentVoice && currentVoice.length > 0) {\n\t\t\tvar lastElement = currentVoice[currentVoice.length-1];\n\t\t\tif (lastElement.el_type === 'bar') {\n\t\t\t\tif (lastElement.barNumber !== undefined) // the measure number might not be written for tune bar, don't override that.\n\t\t\t\t\tlastElement.barNumber = barNumber;\n\t\t\t} else\n\t\t\t\treturn barNumber-1;\n\t\t}\n\t\treturn barNumber;\n\t};\n\n\tthis.hasBeginMusic = function() {\n\t\t// return true if there exists at least one line that contains \"staff\"\n\t\tfor (var i = 0; i < tune.lines.length; i++) {\n\t\t\tif (tune.lines[i].staff)\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n\n\tthis.isFirstLine = function(index) {\n\t\tfor (var i = index-1; i >= 0; i--) {\n\t\t\tif (tune.lines[i].staff !== undefined) return false;\n\t\t}\n\t\treturn true;\n\t};\n\n\tthis.getCurrentVoice = function() {\n\t\tvar currLine = tune.lines[tune.lineNum];\n\t\tif (!currLine)\n\t\t\treturn null;\n\t\tvar currStaff = currLine.staff[tune.staffNum];\n\t\tif (!currStaff)\n\t\t\treturn null;\n\t\tif (currStaff.voices[tune.voiceNum] !== undefined)\n\t\t\treturn currStaff.voices[tune.voiceNum];\n\t\telse return null;\n\t};\n\n\tthis.setCurrentVoice = function(staffNum, voiceNum) {\n\t\ttune.staffNum = staffNum;\n\t\ttune.voiceNum = voiceNum;\n\t\tfor (var i = 0; i < tune.lines.length; i++) {\n\t\t\tif (tune.lines[i].staff) {\n\t\t\t\tif (tune.lines[i].staff[staffNum] === undefined || tune.lines[i].staff[staffNum].voices[voiceNum] === undefined ||\n\t\t\t\t\t!this.containsNotes(tune.lines[i].staff[staffNum].voices[voiceNum] )) {\n\t\t\t\t\ttune.lineNum =  i;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\ttune.lineNum =  i;\n\t};\n\n\tthis.addMetaText = function(key, value, info) {\n\t\tif (tune.metaText[key] === undefined) {\n\t\t\ttune.metaText[key] = value;\n\t\t\ttune.metaTextInfo[key] = info;\n\t\t} else {\n\t\t\tif (typeof tune.metaText[key] === 'string' && typeof value === 'string')\n\t\t\t\ttune.metaText[key] += \"\\n\" + value;\n\t\t\telse {\n\t\t\t\tif (tune.metaText[key] === 'string')\n\t\t\t\t\ttune.metaText[key] = [{text: tune.metaText[key]}]\n\t\t\t\tif (typeof value === 'string')\n\t\t\t\t\tvalue = [{text: value}]\n\t\t\t\ttune.metaText[key] =tune.metaText[key].concat(value)\n\t\t\t}\n\t\t\ttune.metaTextInfo[key].endChar = info.endChar;\n\t\t}\n\t};\n\n\tthis.addMetaTextArray = function(key, value, info) {\n\t\tif (tune.metaText[key] === undefined) {\n\t\t\ttune.metaText[key] = [value];\n\t\t\ttune.metaTextInfo[key] = info;\n\t\t} else {\n\t\t\ttune.metaText[key].push(value);\n\t\t\ttune.metaTextInfo[key].endChar = info.endChar;\n\t\t}\n\t};\n\tthis.addMetaTextObj = function(key, value, info) {\n\t\ttune.metaText[key] = value;\n\t\ttune.metaTextInfo[key] = info;\n\t};\n};\n\nfunction isArrayOfStrings(arr) {\n\tif (!arr) return false\n\tif (typeof arr === \"string\") return false\n\tvar str = ''\n\tfor (var i = 0; i < arr.length; i++) {\n\t\tif (typeof arr[i] !== 'string')\n\t\t\treturn false\n\t}\n\treturn true\n}\n\nfunction simplifyMetaText(tune) {\n\tif (isArrayOfStrings(tune.metaText.notes))\n\t\ttune.metaText.notes = tune.metaText.notes.join(\"\\n\")\n\tif (isArrayOfStrings(tune.metaText.history))\n\t\ttune.metaText.history = tune.metaText.history.join(\"\\n\")\n}\n\nfunction addRichTextToAnnotationsAndLyrics(tune) {\n\tvar lines = tune.lines\n\tfor (var i = 0; i < lines.length; i++) {\n\t\tif (lines[i].staff !== undefined) {\n\t\t\tfor (var s = 0; s < lines[i].staff.length; s++) {\n\t\t\t\tfor (var v = 0; v < lines[i].staff[s].voices.length; v++) {\n\t\t\t\t\tvar voice = lines[i].staff[s].voices[v];\n\t\t\t\t\tfor (var n = 0; n < voice.length; n++) {\n\t\t\t\t\t\tvar element = voice[n]\n\t\t\t\t\t\tif (element.chord) {\n\t\t\t\t\t\t\tfor (var c = 0; c < element.chord.length; c++) {\n\t\t\t\t\t\t\t\telement.chord[c].name = parseDirective.parseFontChangeLine(element.chord[c].name)\n\t\t\t\t\t\t\t\tconsole.log(element.chord[c].name)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (element.lyric) {\n\t\t\t\t\t\t\tfor (var l = 0; l < element.lyric.length; l++) {\n\t\t\t\t\t\t\t\telement.lyric[l].syllable = parseDirective.parseFontChangeLine(element.lyric[l].syllable)\n\t\t\t\t\t\t\t\tconsole.log(element.lyric[l].syllable)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n}\n\nmodule.exports = TuneBuilder;\n","//    wrap_lines.js: does line wrap on an already parsed tune.\n\nfunction wrapLines(tune, lineBreaks, barNumbers) {\n\tif (!lineBreaks || tune.lines.length === 0)\n\t\treturn;\n\n\t// tune.lines contains nested arrays: there is an array of lines (that's the part this function rewrites),\n\t// there is an array of staffs per line (for instance, piano will have 2, orchestra will have many)\n\t// there is an array of voices per staff (for instance, 4-part harmony might have bass and tenor on a single staff)\n\tvar lines = tune.deline({lineBreaks: false});\n\tvar linesBreakElements = findLineBreaks(lines, lineBreaks);\n\t//console.log(JSON.stringify(linesBreakElements))\n\ttune.lines = addLineBreaks(lines, linesBreakElements, barNumbers);\n\ttune.lineBreaks = linesBreakElements;\n}\n\nfunction addLineBreaks(lines, linesBreakElements, barNumbers) {\n\t// linesBreakElements is an array of all of the elements that break for a new line\n\t// The objects in the array look like:\n\t// {\"ogLine\":0,\"line\":0,\"staff\":0,\"voice\":0,\"start\":0, \"end\":21}\n\t// ogLine is the original line that it came from,\n\t// line is the target line.\n\t// then copy all the elements from start to end for the staff and voice specified.\n\t// If the item doesn't contain \"staff\" then it is a non music line and should just be copied.\n\tvar outputLines = [];\n\tvar lastKeySig = []; // This is per staff - if the key changed then this will be populated.\n\tvar lastStem = [];\n\tvar currentBarNumber = 1;\n\tfor (var i = 0; i < linesBreakElements.length; i++) {\n\t\tvar action = linesBreakElements[i];\n\t\tif (lines[action.ogLine].staff) {\n\t\t\tvar inputStaff = lines[action.ogLine].staff[action.staff];\n\t\t\tif (!outputLines[action.line]) {\n\t\t\t\toutputLines[action.line] = {staff: []}\n\t\t\t}\n\t\t\tif (!outputLines[action.line].staff[action.staff]) {\n\t\t\t\toutputLines[action.line].staff[action.staff] = {voices: []};\n\t\t\t\tif (barNumbers !== undefined && action.staff === 0 && action.line > 0) {\n\t\t\t\t\toutputLines[action.line].staff[action.staff].barNumber = currentBarNumber;\n\t\t\t\t}\n\t\t\t\tvar keys = Object.keys(inputStaff)\n\t\t\t\tfor (var k = 0; k < keys.length; k++) {\n\t\t\t\t\tvar skip = keys[k] === \"voices\";\n\t\t\t\t\tif (keys[k] === \"meter\" && action.line !== 0)\n\t\t\t\t\t\tskip = true;\n\t\t\t\t\tif (!skip)\n\t\t\t\t\t\toutputLines[action.line].staff[action.staff][keys[k]] = inputStaff[keys[k]];\n\t\t\t\t}\n\t\t\t\tif (lastKeySig[action.staff])\n\t\t\t\t\toutputLines[action.line].staff[action.staff].key = lastKeySig[action.staff];\n\n\t\t\t}\n\t\t\tif (!outputLines[action.line].staff[action.staff].voices[action.voice]) {\n\t\t\t\toutputLines[action.line].staff[action.staff].voices[action.voice] = [];\n\t\t\t}\n\t\t\toutputLines[action.line].staff[action.staff].voices[action.voice] =\n\t\t\t\tlines[action.ogLine].staff[action.staff].voices[action.voice].slice(action.start, action.end+1);\n\t\t\tif (lastStem[action.staff*10+action.voice])\n\t\t\t\toutputLines[action.line].staff[action.staff].voices[action.voice].unshift({el_type: \"stem\", direction: lastStem[action.staff*10+action.voice].direction})\n\t\t\tvar currVoice = outputLines[action.line].staff[action.staff].voices[action.voice];\n\t\t\tfor (var kk = currVoice.length-1; kk >= 0; kk--) {\n\t\t\t\tif (currVoice[kk].el_type === \"key\") {\n\t\t\t\t\tlastKeySig[action.staff] = {\n\t\t\t\t\t\troot: currVoice[kk].root,\n\t\t\t\t\t\tacc: currVoice[kk].acc,\n\t\t\t\t\t\tmode: currVoice[kk].mode,\n\t\t\t\t\t\taccidentals: currVoice[kk].accidentals.filter(function (acc) { return acc.acc !== 'natural' })\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (kk = currVoice.length-1; kk >= 0; kk--) {\n\t\t\t\tif (currVoice[kk].el_type === \"stem\") {\n\t\t\t\t\tlastStem[action.staff*10+action.voice] = {\n\t\t\t\t\t\tdirection: currVoice[kk].direction,\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (barNumbers !== undefined && action.staff === 0 && action.voice === 0) {\n\t\t\t\tfor (kk = 0; kk < currVoice.length; kk++) {\n\t\t\t\t\tif (currVoice[kk].el_type === 'bar') {\n\t\t\t\t\t\tcurrentBarNumber++\n\t\t\t\t\t\tif (kk === currVoice.length-1)\n\t\t\t\t\t\t\tdelete currVoice[kk].barNumber\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tcurrVoice[kk].barNumber = currentBarNumber\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\toutputLines[action.line] = lines[action.ogLine];\n\t\t}\n\t}\n\t// There could be some missing info - if the tune passed in was incomplete or had different lengths for different voices or was missing a voice altogether - just fill in the gaps.\n\tfor (var ii = 0; ii < outputLines.length; ii++) {\n\t\tif (outputLines[ii].staff) {\n\t\t\toutputLines[ii].staff = outputLines[ii].staff.filter(function (el) {\n\t\t\t\treturn el != null;\n\t\t\t});\n\t\t}\n\t}\n\treturn outputLines;\n}\n\n\nfunction findLineBreaks(lines, lineBreakArray) {\n\t// lineBreakArray is an array of all of the sections of the tune - often there will just be one\n\t// section unless there is a subtitle or other non-music lines. Each of the elements of\n\t// Each element of lineBreakArray is an array of the zero-based last measure of the line.\n\tvar lineBreakIndexes = [];\n\tvar lbai = 0;\n\tvar lineCounter = 0;\n\tvar outputLine = 0;\n\tfor (var i = 0; i < lines.length; i++) {\n\t\tvar line = lines[i];\n\t\tif (line.staff) {\n\t\t\tvar lineStart = lineCounter;\n\t\t\tvar lineBreaks = lineBreakArray[lbai];\n\t\t\tlbai++;\n\t\t\tfor (var j = 0; j < line.staff.length; j++) {\n\t\t\t\tvar staff = line.staff[j];\n\t\t\t\tfor (var k = 0; k < staff.voices.length; k++) {\n\t\t\t\t\toutputLine = lineStart;\n\t\t\t\t\tvar measureNumber = 0;\n\t\t\t\t\tvar lbi = 0;\n\t\t\t\t\tvar voice = staff.voices[k];\n\t\t\t\t\tvar start = 0;\n\t\t\t\t\tfor (var e = 0; e < voice.length; e++) {\n\t\t\t\t\t\tvar el = voice[e];\n\n\t\t\t\t\t\tif (el.el_type === 'bar') {\n\t\t\t\t\t\t\tif (lineBreaks[lbi] === measureNumber) {\n\t\t\t\t\t\t\t\tlineBreakIndexes.push({ ogLine: i, line: outputLine, staff: j, voice: k, start: start, end: e})\n\t\t\t\t\t\t\t\tstart = e + 1;\n\t\t\t\t\t\t\t\toutputLine++;\n\t\t\t\t\t\t\t\tlineCounter = Math.max(lineCounter, outputLine)\n\t\t\t\t\t\t\t\tlbi++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmeasureNumber++;\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tlineBreakIndexes.push({ ogLine: i, line: outputLine, staff: j, voice: k, start: start, end: voice.length})\n\t\t\t\t\toutputLine++;\n\t\t\t\t\tlineCounter = Math.max(lineCounter, outputLine)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tlineBreakIndexes.push({ ogLine: i, line: outputLine })\n\t\t\toutputLine++;\n\t\t\tlineCounter = Math.max(lineCounter, outputLine)\n\t\t}\n\t}\n\treturn lineBreakIndexes;\n}\n\n\nfunction freeFormLineBreaks(widths, lineBreakPoint) {\n\tvar lineBreaks = [];\n\tvar totals = [];\n\tvar totalThisLine = 0;\n\t// run through each measure and see if the accumulation is less than the ideal.\n\t// if it passes the ideal, then see whether the last or this one is closer to the ideal.\n\tfor (var i = 0; i < widths.length; i++) {\n\t\tvar width = widths[i];\n\t\tvar attemptedWidth = totalThisLine + width;\n\t\tif (attemptedWidth < lineBreakPoint)\n\t\t\ttotalThisLine = attemptedWidth;\n\t\telse {\n\t\t\t// This just passed the ideal, so see whether the previous or the current number of measures is closer.\n\t\t\tvar oldDistance = lineBreakPoint - totalThisLine;\n\t\t\tvar newDistance = attemptedWidth - lineBreakPoint;\n\t\t\tif (oldDistance < newDistance && totalThisLine > 0) {\n\t\t\t\tlineBreaks.push(i - 1);\n\t\t\t\ttotals.push(Math.round(totalThisLine - width));\n\t\t\t\ttotalThisLine = width;\n\t\t\t} else {\n\t\t\t\tif (i < widths.length-1) {\n\t\t\t\t\tlineBreaks.push(i);\n\t\t\t\t\ttotals.push(Math.round(totalThisLine));\n\t\t\t\t\ttotalThisLine = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\ttotals.push(Math.round(totalThisLine));\n\treturn { lineBreaks: lineBreaks, totals: totals };\n}\n\nfunction clone(arr) {\n\tvar newArr = [];\n\tfor (var i = 0; i < arr.length; i++)\n\t\tnewArr.push(arr[i]);\n\treturn newArr;\n}\n\nfunction oneTry(measureWidths, idealWidths, accumulator, lineAccumulator, lineWidths, lastVariance, highestVariance, currLine, lineBreaks, startIndex, otherTries) {\n\tfor (var i = startIndex; i < measureWidths.length; i++) {\n\t\tvar measureWidth = measureWidths[i];\n\t\taccumulator += measureWidth;\n\t\tlineAccumulator += measureWidth;\n\t\tvar thisVariance = Math.abs(accumulator - idealWidths[currLine]);\n\t\tvar varianceIsClose = Math.abs(thisVariance - lastVariance) < idealWidths[0] / 10; // see if the difference is less than 10%, if so, run the test both ways.\n\t\tif (varianceIsClose) {\n\t\t\tif (thisVariance < lastVariance) {\n\t\t\t\t// Also attempt one less measure on the current line - sometimes that works out better.\n\t\t\t\tvar newWidths = clone(lineWidths);\n\t\t\t\tvar newBreaks = clone(lineBreaks);\n\t\t\t\tnewBreaks.push(i-1);\n\t\t\t\tnewWidths.push(lineAccumulator - measureWidth);\n\t\t\t\totherTries.push({\n\t\t\t\t\taccumulator: accumulator,\n\t\t\t\t\tlineAccumulator: measureWidth,\n\t\t\t\t\tlineWidths: newWidths,\n\t\t\t\t\tlastVariance: Math.abs(accumulator - idealWidths[currLine+1]),\n\t\t\t\t\thighestVariance: Math.max(highestVariance, lastVariance),\n\t\t\t\t\tcurrLine: currLine+1,\n\t\t\t\t\tlineBreaks: newBreaks,\n\t\t\t\t\tstartIndex: i+1});\n\t\t\t} else if (thisVariance > lastVariance && i < measureWidths.length-1) {\n\t\t\t\t// Also attempt one extra measure on this line.\n\t\t\t\tnewWidths = clone(lineWidths);\n\t\t\t\tnewBreaks = clone(lineBreaks);\n\t\t\t\t// newBreaks[newBreaks.length-1] = i;\n\t\t\t\t// newWidths[newWidths.length-1] = lineAccumulator;\n\t\t\t\totherTries.push({\n\t\t\t\t\taccumulator: accumulator,\n\t\t\t\t\tlineAccumulator: lineAccumulator,\n\t\t\t\t\tlineWidths: newWidths,\n\t\t\t\t\tlastVariance: thisVariance,\n\t\t\t\t\thighestVariance: Math.max(highestVariance, thisVariance),\n\t\t\t\t\tcurrLine: currLine,\n\t\t\t\t\tlineBreaks: newBreaks,\n\t\t\t\t\tstartIndex: i+1});\n\t\t\t}\n\t\t}\n\t\tif (thisVariance > lastVariance) {\n\t\t\tlineBreaks.push(i - 1);\n\t\t\tcurrLine++;\n\t\t\thighestVariance = Math.max(highestVariance, lastVariance);\n\t\t\tlastVariance = Math.abs(accumulator - idealWidths[currLine]);\n\t\t\tlineWidths.push(lineAccumulator - measureWidth);\n\t\t\tlineAccumulator = measureWidth;\n\t\t} else {\n\t\t\tlastVariance = thisVariance;\n\t\t}\n\t}\n\tlineWidths.push(lineAccumulator);\n}\n\nfunction optimizeLineWidths(widths, lineBreakPoint, lineBreaks, explanation) {\n\t//\tfigure out how many lines\n\tvar numLines = Math.ceil(widths.total / lineBreakPoint); // + 1 TODO-PER: this used to be plus one - not sure why\n\n\t//\tget the ideal width for a line (cumulative width / num lines) - approx the same as lineBreakPoint except for rounding\n\tvar idealWidth = Math.floor(widths.total / numLines);\n\n\t//\tget each ideal line width (1*ideal, 2*ideal, 3*ideal, etc)\n\tvar idealWidths = [];\n\tfor (var i = 0; i < numLines; i++)\n\t\tidealWidths.push(idealWidth*(i+1));\n\n\t//\tfrom first measure, step through accum. Widths until the abs of the ideal is greater than the last one.\n\t// This can sometimes look funny in edge cases, so when the length is within 10%, try one more or one less to see which is better.\n\t// This is better than trying all the possibilities because that would get to be a huge number for even a medium size piece.\n\t// This method seems to never generate more than about 16 tries and it is usually 4 or less.\n\tvar otherTries = [];\n\totherTries.push({\n\t\taccumulator: 0,\n\t\tlineAccumulator: 0,\n\t\tlineWidths: [],\n\t\tlastVariance: 999999,\n\t\thighestVariance: 0,\n\t\tcurrLine: 0,\n\t\tlineBreaks: [], // These are the zero-based last measure on each line\n\t\tstartIndex: 0});\n\tvar index = 0;\n\twhile (index < otherTries.length) {\n\t\toneTry(widths.measureWidths,\n\t\t\tidealWidths,\n\t\t\totherTries[index].accumulator,\n\t\t\totherTries[index].lineAccumulator,\n\t\t\totherTries[index].lineWidths,\n\t\t\totherTries[index].lastVariance,\n\t\t\totherTries[index].highestVariance,\n\t\t\totherTries[index].currLine,\n\t\t\totherTries[index].lineBreaks,\n\t\t\totherTries[index].startIndex,\n\t\t\totherTries);\n\t\tindex++;\n\t}\n\tfor (i = 0; i < otherTries.length; i++) {\n\t\tvar otherTry = otherTries[i];\n\t\totherTry.variances = [];\n\t\totherTry.aveVariance = 0;\n\t\tfor (var j = 0; j < otherTry.lineWidths.length; j++) {\n\t\t\tvar lineWidth = otherTry.lineWidths[j];\n\t\t\totherTry.variances.push(lineWidth - idealWidths[0]);\n\t\t\totherTry.aveVariance += Math.abs(lineWidth - idealWidths[0]);\n\t\t}\n\t\totherTry.aveVariance =  otherTry.aveVariance / otherTry.lineWidths.length;\n\t\texplanation.attempts.push({ type: \"optimizeLineWidths\", lineBreaks: otherTry.lineBreaks, variances: otherTry.variances, aveVariance: otherTry.aveVariance, widths: widths.measureWidths });\n\t}\n\tvar smallest = 9999999;\n\tvar smallestIndex = -1;\n\tfor (i = 0; i < otherTries.length; i++) {\n\t\totherTry = otherTries[i];\n\t\tif (otherTry.aveVariance < smallest) {\n\t\t\tsmallest = otherTry.aveVariance;\n\t\t\tsmallestIndex = i;\n\t\t}\n\t}\n\treturn { failed: false, lineBreaks: otherTries[smallestIndex].lineBreaks, variance: otherTries[smallestIndex].highestVariance };\n}\n\nfunction fixedMeasureLineBreaks(widths, lineBreakPoint, preferredMeasuresPerLine) {\n\tvar lineBreaks = [];\n\tvar totals = [];\n\tvar thisWidth = 0;\n\tvar failed = false;\n\tfor (var i = 0; i < widths.length; i++) {\n\t\tthisWidth += widths[i];\n\t\tif (thisWidth > lineBreakPoint) {\n\t\t\tfailed = true;\n\t\t}\n\t\tif (i % preferredMeasuresPerLine === (preferredMeasuresPerLine-1)) {\n\t\t\tif (i !== widths.length-1) // Don't bother putting a line break for the last line - it's already a break.\n\t\t\t\tlineBreaks.push(i);\n\t\t\ttotals.push(Math.round(thisWidth));\n\t\t\tthisWidth = 0;\n\t\t}\n\t}\n\treturn { failed: failed, totals: totals, lineBreaks: lineBreaks };\n}\n\nfunction getRevisedTuneParams(lineBreaks, staffWidth, params) {\n\n\tvar revisedParams = {\n\t\tlineBreaks: lineBreaks,\n\t\tstaffwidth: staffWidth\n\t};\n\tfor (var key in params) {\n\t\tif (params.hasOwnProperty(key) && key !== 'wrap' && key !== 'staffwidth') {\n\t\t\trevisedParams[key] = params[key];\n\t\t}\n\t}\n\n\treturn { revisedParams: revisedParams };\n}\n\nfunction calcLineWraps(tune, widths, params) {\n\t// For calculating how much can go on the line, it depends on the width of the line. It is a convenience to just divide it here\n\t// by the minimum spacing instead of multiplying the min spacing later.\n\t// The scaling works differently: this is done by changing the scaling of the outer SVG, so the scaling needs to be compensated\n\t// for here, because the actual width will be different from the calculated numbers.\n\n\t// If the desired width is less than the margin, just punt and return the original tune\n\t//console.log(widths)\n\tif (widths.length === 0 || params.staffwidth < widths[0].left) {\n\t\treturn {\n\t\t\treParse: false,\n\t\t\texplanation: \"Staff width is narrower than the margin\",\n\t\t\trevisedParams: params\n\t\t};\n\t}\n\tvar scale = params.scale ? Math.max(params.scale, 0.1) : 1;\n\tvar minSpacing = params.wrap.minSpacing ? Math.max(parseFloat(params.wrap.minSpacing), 1) : 1;\n\tvar minSpacingLimit = params.wrap.minSpacingLimit ? Math.max(parseFloat(params.wrap.minSpacingLimit), 1) : minSpacing - 0.1;\n\tvar maxSpacing = params.wrap.maxSpacing ? Math.max(parseFloat(params.wrap.maxSpacing), 1) : undefined;\n\tif (params.wrap.lastLineLimit && !maxSpacing)\n\t\tmaxSpacing = Math.max(parseFloat(params.wrap.lastLineLimit), 1);\n\t// var targetHeight = params.wrap.targetHeight ? Math.max(parseInt(params.wrap.targetHeight, 10), 100) : undefined;\n\tvar preferredMeasuresPerLine = params.wrap.preferredMeasuresPerLine ? Math.max(parseInt(params.wrap.preferredMeasuresPerLine, 10), 0) : undefined;\n\n\tvar accumulatedLineBreaks = [];\n\tvar explanations = [];\n\tfor (var s = 0; s < widths.length; s++) {\n\t\tvar section = widths[s];\n\t\tvar usableWidth = params.staffwidth - section.left;\n\t\tvar lineBreakPoint = usableWidth / minSpacing / scale;\n\t\tvar minLineSize = usableWidth / maxSpacing / scale;\n\t\tvar allowableVariance = usableWidth / minSpacingLimit / scale;\n\t\tvar explanation = {\n\t\t\twidths: section,\n\t\t\tlineBreakPoint: lineBreakPoint,\n\t\t\tminLineSize: minLineSize,\n\t\t\tattempts: [],\n\t\t\tstaffWidth: params.staffwidth,\n\t\t\tminWidth: Math.round(allowableVariance)\n\t\t};\n\n\t\t// If there is a preferred number of measures per line, test that first. If none of the lines is too long, then we're finished.\n\t\tvar lineBreaks = null;\n\t\tif (preferredMeasuresPerLine) {\n\t\t\tvar f = fixedMeasureLineBreaks(section.measureWidths, lineBreakPoint, preferredMeasuresPerLine);\n\t\t\texplanation.attempts.push({\n\t\t\t\ttype: \"Fixed Measures Per Line\",\n\t\t\t\tpreferredMeasuresPerLine: preferredMeasuresPerLine,\n\t\t\t\tlineBreaks: f.lineBreaks,\n\t\t\t\tfailed: f.failed,\n\t\t\t\ttotals: f.totals\n\t\t\t});\n\t\t\tif (!f.failed)\n\t\t\t\tlineBreaks = f.lineBreaks;\n\t\t}\n\n\t\t// If we don't have lineBreaks yet, use the free form method of line breaks.\n\t\t// This will be called either if Preferred Measures is not used, or if the music is just weird - like a single measure is way too crowded.\n\t\tif (!lineBreaks) {\n\t\t\tvar ff = freeFormLineBreaks(section.measureWidths, lineBreakPoint);\n\t\t\texplanation.attempts.push({type: \"Free Form\", lineBreaks: ff.lineBreaks, totals: ff.totals});\n\t\t\tlineBreaks = ff.lineBreaks;\n\n\t\t\t// We now have an acceptable number of lines, but the measures may not be optimally distributed. See if there is a better distribution.\n\t\t\tif (lineBreaks.length > 0 && section.measureWidths.length < 25) {\n\t\t\t\t// Only do this if everything doesn't fit on one line.\n\t\t\t\t// This is an intensive operation and it is optional so just do it for shorter music.\n\t\t\t\tff = optimizeLineWidths(section, lineBreakPoint, lineBreaks, explanation);\n\t\t\t\texplanation.attempts.push({\n\t\t\t\t\ttype: \"Optimize\",\n\t\t\t\t\tfailed: ff.failed,\n\t\t\t\t\treason: ff.reason,\n\t\t\t\t\tlineBreaks: ff.lineBreaks,\n\t\t\t\t\ttotals: ff.totals\n\t\t\t\t});\n\t\t\t\tif (!ff.failed)\n\t\t\t\t\tlineBreaks = ff.lineBreaks;\n\t\t\t}\n\t\t}\n\t\taccumulatedLineBreaks.push(lineBreaks);\n\t\texplanations.push(explanation);\n\t}\n\t// If the vertical space exceeds targetHeight, remove a line and try again. If that is too crowded, then don't use it.\n\tvar staffWidth = params.staffwidth;\n\tvar ret = getRevisedTuneParams(accumulatedLineBreaks, staffWidth, params);\n\tret.explanation = explanations;\n\tret.reParse = true;\n\treturn ret;\n}\n\nmodule.exports = { wrapLines: wrapLines, calcLineWraps: calcLineWraps };\n","var keyAccidentals = require(\"../const/key-accidentals\");\nvar { relativeMajor, transposeKey, relativeMode } = require(\"../const/relative-major\");\nvar transposeChordName = require(\"../parse/transpose-chord\")\n\nvar strTranspose;\n\n(function () {\n\t\"use strict\";\n\tstrTranspose = function (abc, abcTune, steps) {\n\t\tif (abcTune === \"TEST\") // Backdoor way to get entry points for unit tests\n\t\t\treturn { keyAccidentals: keyAccidentals, relativeMajor: relativeMajor, transposeKey: transposeKey, relativeMode: relativeMode, transposeChordName: transposeChordName}\n\t\tsteps = parseInt(steps, 10)\n\t\tvar changes = [];\n\t\tvar i;\n\t\tfor (i = 0; i < abcTune.length; i++)\n\t\t\tchanges = changes.concat(transposeOneTune(abc, abcTune[i], steps))\n\n\t\t// Reverse sort so that we are replacing strings from the end to the beginning so that the indexes aren't invalidated as we go.\n\t\t// (Because voices can be written in different ways we can't count on the notes being encountered in the order they appear in the string.)\n\t\tchanges = changes.sort(function (a, b) {\n\t\t\treturn b.start - a.start\n\t\t})\n\t\tvar output = abc.split('')\n\t\tfor (i = 0; i < changes.length; i++) {\n\t\t\tvar ch = changes[i]\n\t\t\toutput.splice(ch.start, ch.end - ch.start, ch.note)\n\t\t}\n\t\treturn output.join('')\n\t}\n\n\tfunction transposeOneTune(abc, abcTune, steps) {\n\t\tvar changes = []\n\n\t\t// Don't transpose bagpipe music - that is a special case and is always a particular key\n\t\tvar key = abcTune.getKeySignature()\n\t\tif (key.root === 'Hp' || key.root === \"HP\")\n\t\t\treturn changes;\n\n\t\tchanges = changes.concat(changeAllKeySigs(abc, steps))\n\n\t\tfor (var i = 0; i < abcTune.lines.length; i++) {\n\t\t\tvar staves = abcTune.lines[i].staff\n\t\t\tif (staves) {\n\t\t\t\tfor (var j = 0; j < staves.length; j++) {\n\t\t\t\t\tvar staff = staves[j]\n\t\t\t\t\tif (staff.clef.type !== \"perc\")\n\t\t\t\t\t\tchanges = changes.concat(transposeVoices(abc, staff.voices, staff.key, steps))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn changes\n\t}\n\n\tfunction changeAllKeySigs(abc, steps) {\n\t\tvar changes = [];\n\t\tvar arr = abc.split(\"K:\")\n\t\t// now each line except the first one will start with whatever is right after \"K:\"\n\t\tvar count = arr[0].length\n\t\tfor (var i = 1; i < arr.length; i++) {\n\t\t\tvar segment = arr[i]\n\t\t\tvar match = segment.match(/^( *)([A-G])([#b]?)(\\w*)/)\n\t\t\tif (match) {\n\t\t\t\tvar start = count + 2 + match[1].length // move past the 'K:' and optional white space\n\t\t\t\tvar key = match[2] + match[3] + match[4] // key name, accidental, and mode\n\t\t\t\tvar destinationKey = newKey({ root: match[2], acc: match[3], mode: match[4] }, steps)\n\t\t\t\tvar dest = destinationKey.root + destinationKey.acc + destinationKey.mode\n\t\t\t\tchanges.push({ start: start, end: start + key.length, note: dest })\n\t\t\t}\n\t\t\tcount += segment.length + 2\n\t\t}\n\t\treturn changes\n\t}\n\n\tfunction transposeVoices(abc, voices, key, steps) {\n\t\tvar changes = [];\n\t\tvar destinationKey = newKey(key, steps)\n\t\tfor (var i = 0; i < voices.length; i++) {\n\t\t\tchanges = changes.concat(transposeVoice(abc, voices[i], key.root, createKeyAccidentals(key), destinationKey, steps))\n\t\t}\n\t\treturn changes\n\t}\n\n\tfunction createKeyAccidentals(key) {\n\t\tvar ret = {}\n\t\tfor (var i = 0; i < key.accidentals.length; i++) {\n\t\t\tvar acc = key.accidentals[i];\n\t\t\tif (acc.acc === 'flat')\n\t\t\t\tret[acc.note.toUpperCase()] = '_'\n\t\t\telse if (acc.acc === 'sharp')\n\t\t\t\tret[acc.note.toUpperCase()] = '^'\n\t\t}\n\t\treturn ret\n\t}\n\n\tfunction setLetterDistance(destinationKey, keyRoot, steps) {\n\t\tvar letterDistance = letters.indexOf(destinationKey.root) - letters.indexOf(keyRoot)\n\t\tif (keyRoot === \"none\")\n\t\t\tletterDistance = letters.indexOf(destinationKey.root)\n\t\tif (letterDistance === 0) {\n\t\t\t// This could either be a half step (like Eb => E) or almost an octave (like E => Eb)\n\t\t\tif (steps > 2) // If it is a large leap, then we are going up an octave\n\t\t\t\tletterDistance += 7\n\t\t\telse if (steps === -12) // If it is a large leap, then we are going down an octave\t\n\t\t\t \tletterDistance -= 7\n\t\t} else if (steps > 0 && letterDistance < 0) \n\t\t\tletterDistance += 7\n\t\telse if (steps < 0 && letterDistance > 0) \n\t\t\tletterDistance -= 7\n\n\t\tif (steps > 12)\n\t\t\tletterDistance += 7\n\t\telse if (steps < -12)\n\t\t\tletterDistance -= 7\n\n\t\treturn letterDistance\n\t}\n\n\tfunction transposeVoice(abc, voice, keyRoot, keyAccidentals, destinationKey, steps) {\n\t\tvar changes = []\n\t\tvar letterDistance = setLetterDistance(destinationKey, keyRoot, steps)\n\n\t\tvar measureAccidentals = {}\n\t\tvar transposedMeasureAccidentals = {}\n\t\tfor (var i = 0; i < voice.length; i++) {\n\t\t\tvar el = voice[i];\n\t\t\tif (el.chord) {\n\t\t\t\tfor (var c = 0; c < el.chord.length; c++) {\n\t\t\t\t\tvar ch = el.chord[c]\n\t\t\t\t\tif (ch.position === 'default') {\n\t\t\t\t\t\tvar prefersFlats = destinationKey.accidentals.length && destinationKey.accidentals[0].acc === 'flat'\n\t\t\t\t\t\tvar newChord = transposeChordName(ch.name, steps, prefersFlats, true)\n\t\t\t\t\t\tnewChord = newChord.replace(/♭/g, \"b\").replace(/♯/g, \"#\")\n\t\t\t\t\t\tif (newChord !== ch.name) // If we didn't recognize the chord the input is returned unchanged and there is nothing to replace\n\t\t\t\t\t\t\tchanges.push(replaceChord(abc, el.startChar, el.endChar, newChord))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (el.el_type === 'note' && el.pitches) {\n\t\t\t\tfor (var j = 0; j < el.pitches.length; j++) {\n\t\t\t\t\tvar note = parseNote(el.pitches[j].name, keyRoot, keyAccidentals, measureAccidentals)\n\t\t\t\t\tif (note.acc)\n\t\t\t\t\t\tmeasureAccidentals[note.name.toUpperCase()] = note.acc\n\t\t\t\t\tvar newPitch = transposePitch(note, destinationKey, letterDistance, transposedMeasureAccidentals)\n\t\t\t\t\tif (newPitch.acc)\n\t\t\t\t\t\ttransposedMeasureAccidentals[newPitch.upper] = newPitch.acc\n\t\t\t\t\tchanges.push(replaceNote(abc, el.startChar, el.endChar, newPitch.acc + newPitch.name, j))\n\t\t\t\t}\n\t\t\t\tif (el.gracenotes) {\n\t\t\t\t\tfor (var g = 0; g < el.gracenotes.length; g++) {\n\t\t\t\t\t\tvar grace = parseNote(el.gracenotes[g].name, keyRoot, keyAccidentals, measureAccidentals)\n\t\t\t\t\t\tif (grace.acc)\n\t\t\t\t\t\t\tmeasureAccidentals[grace.name.toUpperCase()] = grace.acc\n\t\t\t\t\t\tvar newGrace = transposePitch(grace, destinationKey, letterDistance, measureAccidentals)\n\t\t\t\t\t\tif (newGrace.acc)\n\t\t\t\t\t\t\ttransposedMeasureAccidentals[newGrace.upper] = newGrace.acc\n\t\t\t\t\t\tchanges.push(replaceGrace(abc, el.startChar, el.endChar, newGrace.acc + newGrace.name, g))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (el.el_type === \"bar\") {\n\t\t\t\tmeasureAccidentals = {}\n\t\t\t\ttransposedMeasureAccidentals = {}\n\t\t\t} else if (el.el_type === \"keySignature\") {\n\t\t\t\tkeyRoot = el.root\n\t\t\t\tkeyAccidentals = createKeyAccidentals(el)\n\t\t\t\tdestinationKey = newKey(el, steps)\n\t\t\t\tletterDistance = setLetterDistance(destinationKey, keyRoot, steps)\n\t\t\t}\n\t\t}\n\t\treturn changes\n\t}\n\n\tvar letters = \"CDEFGAB\"\n\tvar octaves = [\",,,,\", \",,,\", \",,\", \",\", \"\", \"'\", \"''\", \"'''\", \"''''\"]\n\n\tfunction newKey(key, steps) {\n\t\tif (key.root === \"none\") {\n\t\t\treturn { root: transposeKey(\"C\", steps), mode: \"\", acc: \"\", accidentals: [] }\n\t\t}\n\t\tvar major = relativeMajor(key.root + key.acc + key.mode)\n\t\tvar newMajor = transposeKey(major, steps)\n\t\tvar newMode = relativeMode(newMajor, key.mode)\n\t\tvar acc = keyAccidentals(newMajor)\n\t\treturn { root: newMode[0], mode: key.mode, acc: newMode.length > 1 ? newMode[1] : '', accidentals: acc }\n\t}\n\n\tfunction transposePitch(note, key, letterDistance, measureAccidentals) {\n\t\t// Depending on what the current note and new note are, the octave might have changed\n\t\t// The letterDistance is how far the change is to see if we passed \"C\" when transposing.\n\n\t\tvar pitch = note.pitch\n\t\tvar origDistFromC = letters.indexOf(note.name)\n\t\tvar root = letters.indexOf(key.root)\n\t\tvar index = (root + pitch) % 7\n\t\t// if the note crosses \"c\" then the octave changes, so that is true of \"B\" when going up one step, \"A\" and \"B\" when going up two steps, etc., and reverse when going down.\n\t\tvar newDistFromC = origDistFromC + letterDistance\n\t\tvar oct = note.oct\n\t\twhile (newDistFromC > 6) {\n\t\t\toct++\n\t\t\tnewDistFromC -= 7\n\t\t}\n\t\twhile (newDistFromC < 0) {\n\t\t\toct--\n\t\t\tnewDistFromC += 7\n\t\t}\n\n\t\tvar name = letters[index]\n\n\t\tvar acc = '';\n\t\tvar adj = note.adj\n\t\t// the amount of adjustment depends on the key - if there is a sharp in the key sig, then -1 is a natural, if there isn't, then -1 is a flat.\n\t\tvar keyAcc = '=';\n\t\tfor (var i = 0; i < key.accidentals.length; i++) {\n\t\t\tif (key.accidentals[i].note.toLowerCase() === name.toLowerCase()) {\n\t\t\t\tadj = adj + (key.accidentals[i].acc === 'flat' ? -1 : 1)\n\t\t\t\tkeyAcc = (key.accidentals[i].acc === 'flat' ? '_' : '^')\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tswitch (adj) {\n\t\t\tcase -2: acc = \"__\"; break;\n\t\t\tcase -1: acc = \"_\"; break;\n\t\t\tcase 0: acc = \"=\"; break;\n\t\t\tcase 1: acc = \"^\"; break;\n\t\t\tcase 2: acc = \"^^\"; break;\n\t\t\tcase -3:\n\t\t\t\t// This requires a triple flat, so bump down the pitch and try again\n\t\t\t\tvar newNote = {}\n\t\t\t\tnewNote.pitch = note.pitch - 1\n\t\t\t\tnewNote.oct = note.oct\n\t\t\t\tnewNote.name = letters[letters.indexOf(note.name) - 1]\n\t\t\t\tif (!newNote.name) {\n\t\t\t\t\tnewNote.name = \"B\"\n\t\t\t\t\tnewNote.oct--\n\t\t\t\t}\n\t\t\t\tif (newNote.name === \"B\" || newNote.name === \"E\")\n\t\t\t\t\tnewNote.adj = note.adj + 1;\n\t\t\t\telse\n\t\t\t\t\tnewNote.adj = note.adj + 2;\n\t\t\t\treturn transposePitch(newNote, key, letterDistance + 1, measureAccidentals)\n\t\t\tcase 3:\n\t\t\t\t// This requires a triple sharp, so bump up the pitch and try again\n\t\t\t\tvar newNote = {}\n\t\t\t\tnewNote.pitch = note.pitch + 1\n\t\t\t\tnewNote.oct = note.oct\n\t\t\t\tnewNote.name = letters[letters.indexOf(note.name) + 1]\n\t\t\t\tif (!newNote.name) {\n\t\t\t\t\tnewNote.name = \"C\"\n\t\t\t\t\tnewNote.oct++\n\t\t\t\t}\n\t\t\t\tif (newNote.name === \"C\" || newNote.name === \"F\")\n\t\t\t\t\tnewNote.adj = note.adj - 1;\n\t\t\t\telse\n\t\t\t\t\tnewNote.adj = note.adj - 2;\n\t\t\t\treturn transposePitch(newNote, key, letterDistance + 1, measureAccidentals)\n\t\t}\n\t\tif ((measureAccidentals[name] === acc || (!measureAccidentals[name] && acc === keyAcc)) && !note.courtesy)\n\t\t\tacc = \"\"\n\n\t\tswitch (oct) {\n\t\t\tcase 0: name = name + \",,,\"; break;\n\t\t\tcase 1: name = name + \",,\"; break;\n\t\t\tcase 2: name = name + \",\"; break;\n\t\t\t// case 3: it is already correct\n\t\t\tcase 4: name = name.toLowerCase(); break;\n\t\t\tcase 5: name = name.toLowerCase() + \"'\"; break;\n\t\t\tcase 6: name = name.toLowerCase() + \"''\"; break;\n\t\t\tcase 7: name = name.toLowerCase() + \"'''\"; break;\n\t\t\tcase 8: name = name.toLowerCase() + \"''''\"; break;\n\t\t}\n\t\tif (oct > 4)\n\t\t\tname = name.toLowerCase();\n\n\t\treturn { acc: acc, name: name, upper: name.toUpperCase() }\n\t}\n\n\tvar regPitch = /([_^=]*)([A-Ga-g])([,']*)/\n\tvar regNote = /([_^=]*[A-Ga-g][,']*)(\\d*\\/*\\d*)([\\>\\<\\-\\)\\.\\s\\\\]*)/\n\tvar regOptionalNote = /([_^=]*[A-Ga-g][,']*)?(\\d*\\/*\\d*)?([\\>\\<\\-\\)]*)?/\n\tvar regSpace = /(\\s*)$/\n\n\t// This the relationship of the note to the tonic and an octave. So what is returned is a distance in steps from the tonic and the amount of adjustment from\n\t// a normal scale. That is - in the key of D an F# is two steps from the tonic and no adjustment. A G# is three steps from the tonic and one half-step higher.\n\t// I don't think there is any adjustment needed for minor keys since the adjustment is based on the key signature and the accidentals.\n\tfunction parseNote(note, keyRoot, keyAccidentals, measureAccidentals) {\n\t\tvar root = keyRoot === \"none\" ? 0 : letters.indexOf(keyRoot)\n\t\tvar reg = note.match(regPitch)\n\t\t// reg[1] : \"__\", \"_\", \"\", \"=\", \"^\", or \"^^\"\n\t\t// reg[2] : A-G a-g\n\t\t// reg[3] : commas or apostrophes\n\t\tvar name = reg[2].toUpperCase()\n\t\tvar pos = letters.indexOf(name) - root;\n\t\tif (pos < 0) pos += 7\n\t\tvar oct = octaves.indexOf(reg[3])\n\t\tif (name === reg[2]) // See if it is a capital letter and subtract an octave if so.\n\t\t\toct--;\n\t\tvar currentAcc = measureAccidentals[name] || keyAccidentals[name] || \"=\" //  use the key accidentals if they exist, but override with the measure accidentals, and if neither of them exist, use a natural.\n\t\treturn { acc: reg[1], name: name, pitch: pos, oct: oct, adj: calcAdjustment(reg[1], keyAccidentals[name], measureAccidentals[name]), courtesy: reg[1] === currentAcc }\n\t}\n\n\tfunction replaceNote(abc, start, end, newPitch, index) {\n\t\t// There may be more than just the note between the start and end - there could be spaces, there could be a chord symbol, there could be a decoration.\n\t\t// This could also be a part of a chord. If so, then the particular note needs to be teased out.\n\t\tvar note = abc.substring(start, end)\n\t\tvar match = note.match(new RegExp(regNote.source + regSpace.source), '')\n\t\tif (match) {\n\t\t\t// This will match a single note\n\t\t\tvar noteLen = match[1].length\n\t\t\tvar trailingLen = match[2].length + match[3].length + match[4].length\n\t\t\tvar leadingLen = end - start - noteLen - trailingLen\n\t\t\tstart += leadingLen\n\t\t\tend -= trailingLen\n\t\t} else {\n\t\t\t// I don't know how to capture more than one note, so I'm separating them. There is a limit of the number of notes in a chord depending on the repeats I have here, but it is unlikely to happen in real music.\n\t\t\tvar regPreBracket = /([^\\[]*)/\n\t\t\tvar regOpenBracket = /\\[/\n\t\t\tvar regCloseBracket = /\\-?](\\d*\\/*\\d*)?([\\>\\<\\-\\)]*)/\n\t\t\tmatch = note.match(new RegExp(regPreBracket.source + regOpenBracket.source + regOptionalNote.source +\n\t\t\t\tregOptionalNote.source + regOptionalNote.source + regOptionalNote.source +\n\t\t\t\tregOptionalNote.source + regOptionalNote.source + regOptionalNote.source +\n\t\t\t\tregOptionalNote.source + regCloseBracket.source + regSpace.source))\n\n\t\t\tif (match) {\n\t\t\t\t// This will match a chord\n\t\t\t\t// Get the number of chars used by the previous notes in this chord\n\t\t\t\tvar count = 1 + match[1].length // one character for the open bracket\n\t\t\t\tfor (var i = 0; i < index; i++) { // index is the iteration through the chord. This function gets called for each one.\n\t\t\t\t\tif (match[i * 3 + 2])\n\t\t\t\t\t\tcount += match[i * 3 + 2].length\n\t\t\t\t\tif (match[i * 3 + 3])\n\t\t\t\t\t\tcount += match[i * 3 + 3].length\n\t\t\t\t\tif (match[i * 3 + 4])\n\t\t\t\t\t\tcount += match[i * 3 + 4].length\n\t\t\t\t}\n\t\t\t\tstart += count\n\t\t\t\tvar endLen = match[index * 3 + 2] ? match[index * 3 + 2].length : 0\n\t\t\t\t// endLen += match[index * 3 + 3] ? match[index * 3 + 3].length : 0\n\t\t\t\t// endLen += match[index * 3 + 4] ? match[index * 3 + 4].length : 0\n\n\t\t\t\tend = start + endLen\n\t\t\t}\n\t\t}\n\t\treturn { start: start, end: end, note: newPitch }\n\t}\n\n\tfunction replaceGrace(abc, start, end, newGrace, index) {\n\t\tvar note = abc.substring(start, end)\n\t\t// I don't know how to capture more than one note, so I'm separating them. There is a limit of the number of notes in a chord depending on the repeats I have here, but it is unlikely to happen in real music.\n\t\tvar regOpenBrace = /\\{/\n\t\tvar regCloseBrace = /\\}/\n\t\tvar regPreBrace = /([^\\{]*)/\n\t\tvar regPreNote = /(\\/*)/\n\t\tvar match = note.match(new RegExp(regPreBrace.source + regOpenBrace.source + regPreNote.source + regOptionalNote.source +\n\t\t\tregPreNote.source + regOptionalNote.source + regPreNote.source + regOptionalNote.source + regPreNote.source + regOptionalNote.source +\n\t\t\tregPreNote.source + regOptionalNote.source + regPreNote.source + regOptionalNote.source + regPreNote.source + regOptionalNote.source +\n\t\t\tregPreNote.source + regOptionalNote.source + regCloseBrace.source))\n\t\tif (match) {\n\t\t\t// This will match all notes inside a grace symbol\n\t\t\t// Get the number of chars used by the previous graces\n\t\t\tvar count = 1 + match[1].length // one character for the open brace, and whatever comes before the brace\n\t\t\tfor (var i = 0; i < index; i++) { // index is the iteration through the chord. This function gets called for each one.\n\t\t\t\tif (match[i * 3 + 2])\n\t\t\t\t\tcount += match[i * 3 + 2].length\n\t\t\t\tif (match[i * 3 + 3])\n\t\t\t\t\tcount += match[i * 3 + 3].length\n\t\t\t\tif (match[i * 3 + 4])\n\t\t\t\t\tcount += match[i * 3 + 4].length\n\t\t\t\tif (match[i * 3 + 5])\n\t\t\t\t\tcount += match[i * 3 + 5].length\n\t\t\t}\n\t\t\tif (match[index * 3 + 2])\n\t\t\t\tcount += match[i * 3 + 2].length\n\t\t\tstart += count\n\t\t\tvar endLen = match[index * 3 + 3] ? match[index * 3 + 3].length : 0\n\t\t\tendLen += match[index * 3 + 4] ? match[index * 3 + 4].length : 0\n\t\t\tendLen += match[index * 3 + 5] ? match[index * 3 + 5].length : 0\n\n\t\t\tend = start + endLen\n\t\t}\n\t\treturn { start: start, end: end, note: newGrace }\n\t}\n\n\tfunction replaceChord(abc, start, end, newChord) {\n\t\t// Isolate the chord and just replace that\n\t\tvar match = abc.substring(start, end).match(/([^\"]+)?(\".+\")+/)\n\t\tif (match[1])\n\t\t\tstart += match[1].length\n\t\tend = start + match[2].length\n\t\t// leave the quote in, so skip one more\n\t\treturn { start: start + 1, end: end - 1, note: newChord }\n\t}\n\n\tfunction calcAdjustment(thisAccidental, keyAccidental, measureAccidental) {\n\t\tif (!thisAccidental && measureAccidental) {\n\t\t\t// There was no accidental on this note, but there was earlier in the measure, so we'll use that\n\t\t\tthisAccidental = measureAccidental\n\t\t}\n\t\tif (!thisAccidental)\n\t\t\treturn 0; // there is no deviation from the key.\n\n\t\tswitch (keyAccidental) {\n\t\t\tcase undefined:\n\t\t\t\tswitch (thisAccidental) {\n\t\t\t\t\tcase '__': return -2;\n\t\t\t\t\tcase '_': return -1;\n\t\t\t\t\tcase '=': return 0;\n\t\t\t\t\tcase '^': return 1;\n\t\t\t\t\tcase '^^': return 2;\n\t\t\t\t\tdefault: return 0; // this should never happen\n\t\t\t\t}\n\t\t\tcase '_':\n\t\t\t\tswitch (thisAccidental) {\n\t\t\t\t\tcase '__': return -1;\n\t\t\t\t\tcase '_': return 0;\n\t\t\t\t\tcase '=': return 1;\n\t\t\t\t\tcase '^': return 2;\n\t\t\t\t\tcase '^^': return 3;\n\t\t\t\t\tdefault: return 0; // this should never happen\n\t\t\t\t}\n\t\t\tcase '^':\n\t\t\t\tswitch (thisAccidental) {\n\t\t\t\t\tcase '__': return -3;\n\t\t\t\t\tcase '_': return -2;\n\t\t\t\t\tcase '=': return -1;\n\t\t\t\t\tcase '^': return 0;\n\t\t\t\t\tcase '^^': return 1;\n\t\t\t\t\tdefault: return 0; // this should never happen\n\t\t\t\t}\n\t\t}\n\t\treturn 0// this should never happen\n\t}\n})();\n\nmodule.exports = strTranspose;\n","//    abc_midi_flattener.js: Turn a linear series of events into a series of MIDI commands.\n\n// We input a set of voices, but the notes are still complex. This pass changes the logical definitions\n// of the grace notes, decorations, ties, triplets, rests, transpositions, keys, and accidentals into actual note durations.\n// It also extracts guitar chords to a separate voice and resolves their rhythm.\n\nvar flatten;\nvar ChordTrack = require(\"./chord-track\");\nvar pitchesToPerc = require('./pitches-to-perc');\n\n(function() {\n\t\"use strict\";\n\n\tvar barAccidentals;\n\tvar accidentals;\n\tvar transpose;\n\tvar bagpipes;\n\tvar tracks;\n\tvar startingTempo;\n\tvar startingMeter;\n\tvar tempoChangeFactor = 1;\n\tvar instrument;\n\tvar currentInstrument;\n\t// var channel;\n\tvar currentTrack;\n\tvar lastNoteDurationPosition;\n\tvar currentTrackName;\n\tvar lastEventTime;\n\tvar chordTrack;\n\n\tvar meter = { num: 4, den: 4 };\n\tvar drumInstrument = 128;\n\tvar lastBarTime;\n\tvar doBeatAccents = true;\n\tvar stressBeat1 = 105;\n\tvar stressBeatDown = 95;\n\tvar stressBeatUp = 85;\n\tvar beatFraction = 0.25;\n\tvar nextVolume;\n\tvar nextVolumeDelta;\n\tvar slurCount = 0;\n\n\tvar drumTrack;\n\tvar drumTrackFinished;\n\tvar drumDefinition = {};\n\tvar drumBars;\n\n\tvar pickupLength = 0;\n\tvar percmap;\n\n\t// The gaps per beat. The first two are in seconds, the third is in fraction of a duration.\n\tvar normalBreakBetweenNotes = 0; //0.000520833333325*1.5; // for articulation (matches muse score value)\n\tvar slurredBreakBetweenNotes = -0.001; // make the slurred notes actually overlap\n\tvar staccatoBreakBetweenNotes = 0.4; // some people say staccato is half duration, some say 3/4 so this splits it\n\n\tflatten = function(voices, options, percmap_, midiOptions) {\n\t\tif (!options) options = {};\n\t\tif (!midiOptions) midiOptions = {};\n\t\tbarAccidentals = [];\n\t\taccidentals = [0,0,0,0,0,0,0];\n\t\tbagpipes = false;\n\t\ttracks = [];\n\t\tstartingTempo = options.qpm;\n\t\tstartingMeter = undefined;\n\t\ttempoChangeFactor = 1;\n\t\tinstrument = undefined;\n\t\tcurrentInstrument = undefined;\n\t\t// channel = undefined;\n\t\tcurrentTrack = undefined;\n\t\tcurrentTrackName = undefined;\n\t\tlastEventTime = 0;\n\t\tpercmap = percmap_;\n\n\t\tmeter = { num: 4, den: 4 };\n\n\t\tdoBeatAccents = true;\n\t\tstressBeat1 = 105;\n\t\tstressBeatDown = 95;\n\t\tstressBeatUp = 85;\n\t\tbeatFraction = 0.25;\n\t\tnextVolume = undefined;\n\t\tnextVolumeDelta = undefined;\n\t\tslurCount = 0;\n\n\t\t// For the drum/metronome track.\n\t\tdrumTrack = [];\n\t\tdrumTrackFinished = false;\n\t\tdrumDefinition = {};\n\t\tdrumBars = 1;\n\n\t\tif (voices.length > 0 && voices[0].length > 0)\n\t\t\tpickupLength = voices[0][0].pickupLength;\n\n\t\t// For resolving chords.\n\t\tif (options.bassprog !== undefined && !midiOptions.bassprog)\n\t\t\tmidiOptions.bassprog = [options.bassprog]\n\t\tif (options.bassvol !== undefined && !midiOptions.bassvol)\n\t\t\tmidiOptions.bassvol = [options.bassvol]\n\t\tif (options.chordprog !== undefined && !midiOptions.chordprog)\n\t\t\tmidiOptions.chordprog = [options.chordprog]\n\t\tif (options.chordvol !== undefined && !midiOptions.chordvol)\n\t\t\tmidiOptions.chordvol = [options.chordvol]\n\t\tif (options.gchord !== undefined && !midiOptions.gchord)\n\t\t\tmidiOptions.gchord = [options.gchord]\n\t\tchordTrack = new ChordTrack(voices.length, options.chordsOff, midiOptions, meter)\n\n\t\t// First adjust the input to resolve ties, set the starting time for each note, etc. That will make the rest of the logic easier\n\t\tpreProcess(voices, options);\n\n\t\tfor (var i = 0; i < voices.length; i++) {\n\t\t\ttranspose = 0;\n\t\t\tchordTrack.setTranspose(transpose)\n\t\t\tlastNoteDurationPosition = -1;\n\t\t\tvar voice = voices[i];\n\t\t\tcurrentTrack = [{ cmd: 'program', channel: i, instrument: instrument }];\n\t\t\tcurrentTrackName = undefined;\n\t\t\tlastBarTime = 0;\n\t\t\tchordTrack.setLastBarTime(0)\n\t\t\tvar voiceOff = false;\n\t\t\tif (options.voicesOff === true)\n\t\t\t\tvoiceOff = true;\n\t\t\telse if (options.voicesOff && options.voicesOff.length && options.voicesOff.indexOf(i) >= 0)\n\t\t\t\tvoiceOff = true;\n\t\t\tfor (var j = 0; j < voice.length; j++) {\n\t\t\t\tvar element = voice[j];\n\t\t\t\tswitch (element.el_type) {\n\t\t\t\t\tcase \"name\":\n\t\t\t\t\t\tcurrentTrackName = {cmd: 'text', type: \"name\", text: element.trackName };\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"note\":\n\t\t\t\t\t\twriteNote(element, voiceOff);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"key\":\n\t\t\t\t\t\taccidentals = setKeySignature(element);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"meter\":\n\t\t\t\t\t\tif (!startingMeter)\n\t\t\t\t\t\t\tstartingMeter = element;\n\t\t\t\t\t\tmeter = element;\n\t\t\t\t\t\tchordTrack.setMeter(meter)\n\t\t\t\t\t\tbeatFraction = getBeatFraction(meter);\n\t\t\t\t\t\talignDrumToMeter();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tempo\":\n\t\t\t\t\t\tif (!startingTempo)\n\t\t\t\t\t\t\tstartingTempo = element.qpm;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ttempoChangeFactor = element.qpm ? startingTempo / element.qpm : 1;\n\t\t\t\t\t\tchordTrack.setTempoChangeFactor(tempoChangeFactor)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"transpose\":\n\t\t\t\t\t\ttranspose = element.transpose;\n\t\t\t\t\t\tchordTrack.setTranspose(transpose)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"bar\":\n\t\t\t\t\t\tchordTrack.barEnd(element)\n\n\t\t\t\t\t\tbarAccidentals = [];\n\t\t\t\t\t\tif (i === 0) // Only write the drum part on the first voice so that it is not duplicated.\n\t\t\t\t\t\t\twriteDrum(voices.length+1);\n\t\t\t\t\t\t\tchordTrack.setRhythmHead(false) // decide whether there are rhythm heads each measure.\n\t\t\t\t\t\tlastBarTime = timeToRealTime(element.time);\n\t\t\t\t\t\tchordTrack.setLastBarTime(lastBarTime)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"bagpipes\":\n\t\t\t\t\t\tbagpipes = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"instrument\":\n\t\t\t\t\t\tif (instrument === undefined)\n\t\t\t\t\t\t\tinstrument = element.program;\n\t\t\t\t\t\tcurrentInstrument = element.program;\n\t\t\t\t\t\tif (currentTrack.length > 0 && currentTrack[currentTrack.length-1].cmd === 'program')\n\t\t\t\t\t\t\tcurrentTrack[currentTrack.length-1].instrument = element.program;\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tvar ii;\n\t\t\t\t\t\t\tfor (ii = currentTrack.length-1; ii >= 0 && currentTrack[ii].cmd !== 'program'; ii--)\n\t\t\t\t\t\t\t\t;\n\t\t\t\t\t\t\tif (ii < 0 || currentTrack[ii].instrument !== element.program)\n\t\t\t\t\t\t\t\tcurrentTrack.push({cmd: 'program', channel: 0, instrument: element.program});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"channel\":\n\t\t\t\t\t\tsetChannel(element.channel);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"drum\":\n\t\t\t\t\t\tdrumDefinition = normalizeDrumDefinition(element.params);\n\t\t\t\t\t\talignDrumToMeter();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"gchordOn\":\n\t\t\t\t\t\tchordTrack.gChordOn(element)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"beat\":\n\t\t\t\t\t\tstressBeat1 = element.beats[0];\n\t\t\t\t\t\tstressBeatDown = element.beats[1];\n\t\t\t\t\t\tstressBeatUp = element.beats[2];\n\t\t\t\t\t\t// TODO-PER: also use the last parameter - which changes which beats are strong.\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"vol\":\n\t\t\t\t\t\tnextVolume = element.volume;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"volinc\":\n\t\t\t\t\t\tnextVolumeDelta = element.volume;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"beataccents\":\n\t\t\t\t\t\tdoBeatAccents = element.value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"gchord\":\n\t\t\t\t\tcase \"bassprog\":\n\t\t\t\t\tcase \"chordprog\":\n\t\t\t\t\tcase \"bassvol\":\n\t\t\t\t\tcase \"chordvol\":\n\t\t\t\t\t\tchordTrack.paramChange(element)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// This should never happen\n\t\t\t\t\t\tconsole.log(\"MIDI creation. Unknown el_type: \" + element.el_type + \"\\n\");// jshint ignore:line\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (currentTrack[0].instrument === undefined)\n\t\t\t\tcurrentTrack[0].instrument = instrument ? instrument : 0;\n\t\t\tif (currentTrackName)\n\t\t\t\tcurrentTrack.unshift(currentTrackName);\n\t\t\ttracks.push(currentTrack);\n\t\t\tchordTrack.finish()\n\t\t\tif (drumTrack.length > 0) // Don't do drums on more than one track, so turn off drum after we create it.\n\t\t\t\tdrumTrackFinished = true;\n\t\t}\n\t\t// See if any notes are octaves played at the same time. If so, raise the pitch of the higher one.\n\t\tif (options.detuneOctave)\n\t\t\tfindOctaves(tracks, parseInt(options.detuneOctave, 10));\n\n\t\tchordTrack.addTrack(tracks)\n\t\tif (drumTrack.length > 0)\n\t\t\ttracks.push(drumTrack);\n\n\t\treturn { tempo: startingTempo, instrument: instrument, tracks: tracks, totalDuration: lastEventTime };\n\t};\n\n\tfunction setChannel(channel) {\n\t\tfor (var i = currentTrack.length-1; i>=0; i--) {\n\t\t\tif (currentTrack[i].cmd === \"program\") {\n\t\t\t\tcurrentTrack[i].channel = channel;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction timeToRealTime(time) {\n\t\treturn time/1000000;\n\t}\n\n\tfunction durationRounded(duration) {\n\t\treturn Math.round(duration*tempoChangeFactor*1000000)/1000000;\n\t}\n\n\tfunction preProcess(voices, options) {\n\t\tfor (var i = 0; i < voices.length; i++) {\n\t\t\tvar voice = voices[i];\n\t\t\tvar ties = {};\n\t\t\tvar startingTempo = options.qpm;\n\t\t\tvar timeCounter = 0;\n\t\t\tvar tempoMultiplier = 1;\n\t\t\tfor (var j = 0; j < voice.length; j++) {\n\t\t\t\tvar element = voice[j];\n\n\t\t\t\tif (element.el_type === 'tempo') {\n\t\t\t\t\tif (!startingTempo)\n\t\t\t\t\t\tstartingTempo = element.qpm;\n\t\t\t\t\telse\n\t\t\t\t\t\ttempoMultiplier = element.qpm ? startingTempo / element.qpm : 1;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// For convenience, put the current time in each event so that it doesn't have to be calculated in the complicated stuff that follows.\n\t\t\t\telement.time = timeCounter;\n\t\t\t\tvar thisDuration = element.duration ? element.duration : 0;\n\t\t\t\ttimeCounter += Math.round(thisDuration*tempoMultiplier*1000000); // To compensate for JS rounding problems, do all intermediate calcs on integers.\n\n\t\t\t\t// If there are pitches then put the duration in the pitch object and if there are ties then change the duration of the first note in the tie.\n\t\t\t\tif (element.pitches) {\n\t\t\t\t\tfor (var k = 0; k < element.pitches.length; k++) {\n\t\t\t\t\t\tvar pitch = element.pitches[k];\n\t\t\t\t\t\tif (pitch) {\n\t\t\t\t\t\t\tpitch.duration = element.duration;\n\t\t\t\t\t\t\tif (pitch.startTie) {\n\t\t\t\t\t\t\t\t//console.log(element)\n\t\t\t\t\t\t\t\tif (ties[pitch.pitch] === undefined) // We might have three notes tied together - if so just add this duration.\n\t\t\t\t\t\t\t\t\tties[pitch.pitch] = {el: j, pitch: k};\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tvoice[ties[pitch.pitch].el].pitches[ties[pitch.pitch].pitch].duration += pitch.duration;\n\t\t\t\t\t\t\t\t\telement.pitches[k] = null;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t//console.log(\">>> START\", JSON.stringify(ties));\n\t\t\t\t\t\t\t} else if (pitch.endTie) {\n\t\t\t\t\t\t\t\t//console.log(element)\n\t\t\t\t\t\t\t\tvar tie = ties[pitch.pitch];\n\t\t\t\t\t\t\t\t//console.log(\">>> END\", pitch.pitch, tie, JSON.stringify(ties));\n\t\t\t\t\t\t\t\tif (tie) {\n\t\t\t\t\t\t\t\t\tvar dur = pitch.duration;\n\t\t\t\t\t\t\t\t\tdelete voice[tie.el].pitches[tie.pitch].startTie;\n\t\t\t\t\t\t\t\t\tvoice[tie.el].pitches[tie.pitch].duration += dur;\n\t\t\t\t\t\t\t\t\telement.pitches[k] = null;\n\t\t\t\t\t\t\t\t\tdelete ties[pitch.pitch];\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tdelete pitch.endTie;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdelete element.duration;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (var key in ties) {\n\t\t\t\tif (ties.hasOwnProperty(key)) {\n\t\t\t\t\tvar item = ties[key];\n\t\t\t\t\tdelete voice[item.el].pitches[item.pitch].startTie;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// voices[0].forEach(v => delete v.elem)\n\t\t\t// voices[1].forEach(v => delete v.elem)\n\t\t\t// console.log(JSON.stringify(voices))\n\t\t}\n\t}\n\n\tfunction getBeatFraction(meter) {\n\t\tswitch (parseInt(meter.den,10)) {\n\t\t\tcase 2: return 0.5;\n\t\t\tcase 4: return 0.25;\n\t\t\tcase 8:\n\t\t\t\tif (meter.num % 3 === 0)\n\t\t\t\t\treturn 0.375;\n\t\t\t\telse\n\t\t\t\t\treturn 0.125;\n\t\t\tcase 16: return 0.125;\n\t\t}\n\t\treturn 0.25;\n\t}\n\n\tfunction calcBeat(measureStart, beatLength, currTime) {\n\t\tvar distanceFromStart = currTime - measureStart;\n\t\treturn distanceFromStart / beatLength;\n\t}\n\n\tfunction processVolume(beat, voiceOff) {\n\t\tif (voiceOff)\n\t\t\treturn 0;\n\n\t\tvar volume;\n\t\tif (nextVolume) {\n\t\t\tvolume = nextVolume;\n\t\t\tnextVolume = undefined;\n\t\t} else if (!doBeatAccents) {\n\t\t\tvolume = stressBeatDown;\n\t\t} else if (pickupLength > beat) {\n\t\t\tvolume = stressBeatUp;\n\t\t} else {\n\t\t\t//var barLength = meter.num / meter.den;\n\t\t\tvar barBeat = calcBeat(lastBarTime, getBeatFraction(meter), beat);\n\t\t\tif (barBeat === 0)\n\t\t\t\tvolume = stressBeat1;\n\t\t\telse if (parseInt(barBeat,10) === barBeat)\n\t\t\t\tvolume = stressBeatDown;\n\t\t\telse\n\t\t\t\tvolume = stressBeatUp;\n\t\t}\n\t\tif (nextVolumeDelta) {\n\t\t\tvolume += nextVolumeDelta;\n\t\t\tnextVolumeDelta = undefined;\n\t\t}\n\t\tif (volume < 0)\n\t\t\tvolume = 0;\n\t\tif (volume > 127)\n\t\t\tvolume = 127;\n\t\treturn voiceOff ? 0 : volume;\n\t}\n\n\n\tfunction findNoteModifications(elem, velocity) {\n\t\tvar ret = { };\n\t\tif (elem.decoration) {\n\t\t\tfor (var d = 0; d < elem.decoration.length; d++) {\n\t\t\t\tif (elem.decoration[d] === 'staccato')\n\t\t\t\t\tret.thisBreakBetweenNotes = 'staccato';\n\t\t\t\telse if (elem.decoration[d] === 'tenuto')\n\t\t\t\t\tret.thisBreakBetweenNotes = 'tenuto';\n\t\t\t\telse if (elem.decoration[d] === 'accent')\n\t\t\t\t\tret.velocity = Math.min(127, velocity * 1.5);\n\t\t\t\telse if (elem.decoration[d] === 'trill')\n\t\t\t\t\tret.noteModification = \"trill\";\n\t\t\t\telse if (elem.decoration[d] === 'lowermordent')\n\t\t\t\t\tret.noteModification = \"lowermordent\";\n\t\t\t\telse if (elem.decoration[d] === 'uppermordent')\n\t\t\t\t\tret.noteModification = \"mordent\";\n\t\t\t\telse if (elem.decoration[d] === 'mordent')\n\t\t\t\t\tret.noteModification = \"mordent\";\n\t\t\t\telse if (elem.decoration[d] === 'turn')\n\t\t\t\t\tret.noteModification = \"turn\";\n\t\t\t\telse if (elem.decoration[d] === 'roll')\n\t\t\t\t\tret.noteModification = \"roll\";\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t}\n\n\tfunction doModifiedNotes(noteModification, p) {\n\t\tvar noteTime;\n\t\tvar numNotes;\n\t\tvar start = p.start;\n\t\tvar pp;\n\t\tvar runningDuration = p.duration;\n\t\tvar shortestNote = durationRounded(1.0 / 32);\n\n\t\tswitch (noteModification) {\n\t\t\tcase \"trill\":\n\t\t\t\tvar note = 1;\n\t\t\t\twhile (runningDuration > 0) {\n\t\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch+note, volume: p.volume, start: start, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\t\tnote = (note === 1) ? 0 : 1;\n\t\t\t\t\trunningDuration -= shortestNote;\n\t\t\t\t\tstart += shortestNote;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"mordent\":\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch, volume: p.volume, start: start, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\trunningDuration -= shortestNote;\n\t\t\t\tstart += shortestNote;\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch+1, volume: p.volume, start: start, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\trunningDuration -= shortestNote;\n\t\t\t\tstart += shortestNote;\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch, volume: p.volume, start: start, duration: runningDuration, gap: 0, instrument: currentInstrument });\n\t\t\t\tbreak;\n\t\t\tcase \"lowermordent\":\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch, volume: p.volume, start: start, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\trunningDuration -= shortestNote;\n\t\t\t\tstart += shortestNote;\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch-1, volume: p.volume, start: start, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\trunningDuration -= shortestNote;\n\t\t\t\tstart += shortestNote;\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch, volume: p.volume, start: start, duration: runningDuration, gap: 0, instrument: currentInstrument });\n\t\t\t\tbreak;\n\t\t\tcase \"turn\":\n\t\t\t\tshortestNote = p.duration / 5;\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch, volume: p.volume, start: start, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch+1, volume: p.volume, start: start+shortestNote, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch, volume: p.volume, start: start+shortestNote*2, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch+1, volume: p.volume, start: start+shortestNote*3, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch, volume: p.volume, start: start+shortestNote*4, duration: shortestNote, gap: 0, instrument: currentInstrument });\n\t\t\t\tbreak;\n\t\t\tcase \"roll\":\n\t\t\t\twhile (runningDuration > 0) {\n\t\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch, volume: p.volume, start: start, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\t\trunningDuration -= shortestNote*2;\n\t\t\t\t\tstart += shortestNote*2;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tfunction writeNote(elem, voiceOff) {\n\t\t//\n\t\t// Create a series of note events to append to the current track.\n\t\t// The output event is one of: { pitchStart: pitch_in_abc_units, volume: from_1_to_64 }\n\t\t// { pitchStop: pitch_in_abc_units }\n\t\t// { moveTime: duration_in_abc_units }\n\t\t// If there are guitar chords, then they are put in a separate track, but they have the same format.\n\t\t//\n\n\t\t//var trackStartingIndex = currentTrack.length;\n\n\t\tvar velocity = processVolume(timeToRealTime(elem.time), voiceOff);\n\t\tchordTrack.processChord(elem)\n\n\t\t// if there are grace notes, then also play them.\n\t\t// I'm not sure there is an exact rule for the length of the notes. My rule, unless I find\n\t\t// a better one is: the grace notes cannot take more than 1/2 of the main note's value.\n\t\t// A grace note (of 1/8 note duration) takes 1/8 of the main note's value.\n\t\tvar graces;\n\t\tif (elem.gracenotes && elem.pitches && elem.pitches.length > 0 && elem.pitches[0]) {\n\t\t\tgraces = processGraceNotes(elem.gracenotes, elem.pitches[0].duration);\n\t\t\tif (elem.elem)\n\t\t\t\telem.elem.midiGraceNotePitches = writeGraceNotes(graces, timeToRealTime(elem.time), velocity*2/3, currentInstrument); // make the graces a little quieter.\n\t\t}\n\n\t\t// The beat fraction is the note that gets a beat (.25 is a quarter note)\n\t\t// The tempo is in minutes and we want to get to milliseconds.\n\t\t// If the element is inside a repeat, there may be more than one value. If there is one value,\n\t\t// then just store that as a number. If there are more than one value, then change that to\n\t\t// an array and return all of them.\n\t\tif (elem.elem) {\n\t\t\tvar rt = timeToRealTime(elem.time);\n\t\t\tvar ms = rt / beatFraction / startingTempo * 60 * 1000;\n\t\t\tif (elem.elem.currentTrackMilliseconds === undefined) {\n\t\t\t\telem.elem.currentTrackMilliseconds = ms;\n\t\t\t\telem.elem.currentTrackWholeNotes = rt;\n\t\t\t} else {\n\t\t\t\tif (elem.elem.currentTrackMilliseconds.length === undefined) {\n\t\t\t\t\tif (elem.elem.currentTrackMilliseconds !== ms) {\n\t\t\t\t\t\telem.elem.currentTrackMilliseconds = [elem.elem.currentTrackMilliseconds, ms];\n\t\t\t\t\t\telem.elem.currentTrackWholeNotes = [elem.elem.currentTrackWholeNotes, rt];\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// There can be duplicates if there are multiple voices\n\t\t\t\t\tvar found = false;\n\t\t\t\t\tfor (var j = 0; j < elem.elem.currentTrackMilliseconds.length; j++) {\n\t\t\t\t\t\tif (elem.elem.currentTrackMilliseconds[j] === ms)\n\t\t\t\t\t\t\tfound = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (!found) {\n\t\t\t\t\t\telem.elem.currentTrackMilliseconds.push(ms);\n\t\t\t\t\t\telem.elem.currentTrackWholeNotes.push(rt);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t//var tieAdjustment = 0;\n\t\tif (elem.pitches) {\n\t\t\tvar thisBreakBetweenNotes = '';\n\t\t\tvar ret = findNoteModifications(elem, velocity);\n\t\t\tif (ret.thisBreakBetweenNotes)\n\t\t\t\tthisBreakBetweenNotes = ret.thisBreakBetweenNotes;\n\t\t\tif (ret.velocity)\n\t\t\t\tvelocity = ret.velocity;\n\n\t\t\t// TODO-PER: Can also make a different sound on style=x and style=harmonic\n\t\t\tvar ePitches = elem.pitches;\n\t\t\tif (elem.style === \"rhythm\") {\n\t\t\t\tePitches = chordTrack.setRhythmHead(true, elem)\n\t\t\t}\n\n\t\t\tif (elem.elem)\n\t\t\t\telem.elem.midiPitches = [];\n\t\t\tfor (var i=0; i<ePitches.length; i++) {\n\t\t\t\tvar note = ePitches[i];\n\t\t\t\tif (!note)\n\t\t\t\t\tcontinue;\n\t\t\t\tif (note.startSlur)\n\t\t\t\t\tslurCount += note.startSlur.length;\n\t\t\t\tif (note.endSlur)\n\t\t\t\t\tslurCount -= note.endSlur.length;\n\t\t\t\tvar actualPitch = note.actualPitch ? note.actualPitch : adjustPitch(note);\n\t\t\t\tif (currentInstrument === drumInstrument && percmap) {\n\t\t\t\t\tvar name = pitchesToPerc(note)\n\t\t\t\t\tif (name && percmap[name])\n\t\t\t\t\t\tactualPitch = percmap[name].sound;\n\t\t\t\t}\n\t\t\t\tvar p = { cmd: 'note', pitch: actualPitch, volume: velocity, start: timeToRealTime(elem.time), duration: durationRounded(note.duration), instrument: currentInstrument, startChar: elem.elem.startChar, endChar: elem.elem.endChar};\n\t\t\t\tp = adjustForMicroTone(p);\n\t\t\t\tif (elem.gracenotes) {\n\t\t\t\t\tp.duration = p.duration / 2;\n\t\t\t\t\tp.start = p.start + p.duration;\n\t\t\t\t}\n\t\t\t\tif (elem.elem)\n\t\t\t\t\telem.elem.midiPitches.push(p);\n\t\t\t\tif (ret.noteModification) {\n\t\t\t\t\tdoModifiedNotes(ret.noteModification, p);\n\t\t\t\t} else {\n\t\t\t\t\tif (slurCount > 0)\n\t\t\t\t\t\tp.endType = 'tenuto';\n\t\t\t\t\telse if (thisBreakBetweenNotes)\n\t\t\t\t\t\tp.endType = thisBreakBetweenNotes;\n\n\t\t\t\t\tswitch (p.endType) {\n\t\t\t\t\t\tcase \"tenuto\":\n\t\t\t\t\t\t\tp.gap = slurredBreakBetweenNotes;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"staccato\":\n\t\t\t\t\t\t\tvar d = p.duration * staccatoBreakBetweenNotes;\n\t\t\t\t\t\t\tp.gap = startingTempo / 60 * d;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tp.gap = normalBreakBetweenNotes;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcurrentTrack.push(p);\n\t\t\t\t}\n\t\t\t}\n\t\t\tlastNoteDurationPosition = currentTrack.length-1;\n\n\t\t}\n\t\tvar realDur = getRealDuration(elem);\n\t\tlastEventTime = Math.max(lastEventTime, timeToRealTime(elem.time)+durationRounded(realDur));\n\t}\n\tfunction getRealDuration(elem) {\n\t\tif (elem.pitches && elem.pitches.length > 0 && elem.pitches[0])\n\t\t\treturn elem.pitches[0].duration;\n\t\tif (elem.elem)\n\t\t\treturn elem.elem.duration;\n\t\treturn elem.duration;\n\t}\n\n\tvar scale = [0,2,4,5,7,9,11];\n\tfunction adjustPitch(note) {\n\t\tif (note.midipitch !== undefined)\n\t\t\treturn note.midipitch; // The pitch might already be known, for instance if there is a drummap.\n\t\tvar pitch = note.pitch;\n\t\tif (note.accidental) {\n\t\t\tswitch(note.accidental) { // change that pitch (not other octaves) for the rest of the bar\n\t\t\t\tcase \"sharp\":\n\t\t\t\t\tbarAccidentals[pitch]=1; break;\n\t\t\t\tcase \"flat\":\n\t\t\t\t\tbarAccidentals[pitch]=-1; break;\n\t\t\t\tcase \"natural\":\n\t\t\t\t\tbarAccidentals[pitch]=0; break;\n\t\t\t\tcase \"dblsharp\":\n\t\t\t\t\tbarAccidentals[pitch]=2; break;\n\t\t\t\tcase \"dblflat\":\n\t\t\t\t\tbarAccidentals[pitch]=-2; break;\n\t\t\t\tcase \"quartersharp\":\n\t\t\t\t\tbarAccidentals[pitch]=0.25; break;\n\t\t\t\tcase \"quarterflat\":\n\t\t\t\t\tbarAccidentals[pitch]=-0.25; break;\n\t\t\t}\n\t\t}\n\n\t\tvar actualPitch = extractOctave(pitch) *12 + scale[extractNote(pitch)] + 60;\n\n\t\tif ( barAccidentals[pitch]!==undefined) {\n\t\t\t// An accidental is always taken at face value and supersedes the key signature.\n\t\t\tactualPitch += barAccidentals[pitch];\n\t\t} else { // use normal accidentals\n\t\t\tactualPitch +=  accidentals[extractNote(pitch)];\n\t\t}\n\t\tactualPitch += transpose;\n\t\treturn actualPitch;\n\t}\n\n\tfunction setKeySignature(elem) {\n\t\tvar accidentals = [0,0,0,0,0,0,0];\n\t\tif (!elem.accidentals) return accidentals;\n\t\tfor (var i = 0; i < elem.accidentals.length; i++) {\n\t\t\tvar acc = elem.accidentals[i];\n\t\t\tvar d;\n\t\t\tswitch (acc.acc) {\n\t\t\t\tcase \"flat\": d = -1; break;\n\t\t\t\tcase \"quarterflat\": d = -0.25; break;\n\t\t\t\tcase \"sharp\": d = 1; break;\n\t\t\t\tcase \"quartersharp\": d = 0.25; break;\n\t\t\t\tdefault: d = 0; break;\n\t\t\t}\n\n\t\t\tvar lowercase = acc.note.toLowerCase();\n\t\t\tvar note = extractNote(lowercase.charCodeAt(0)-'c'.charCodeAt(0));\n\t\t\taccidentals[note]+=d;\n\t\t}\n\t\treturn accidentals;\n\t}\n\n\tfunction processGraceNotes(graces, companionDuration) {\n\t\t// Grace notes take up half of the note value. So if there are many of them they are all real short.\n\t\tvar graceDuration = 0;\n\t\tvar ret = [];\n\t\tvar grace;\n\t\tfor (var g = 0; g < graces.length; g++) {\n\t\t\tgrace = graces[g];\n\t\t\tgraceDuration += grace.duration;\n\t\t}\n\t\tvar multiplier = companionDuration/2 / graceDuration;\n\n\t\tfor (g = 0; g < graces.length; g++) {\n\t\t\tgrace = graces[g];\n\t\t\tvar actualPitch = adjustPitch(grace);\n\t\t\tif (currentInstrument === drumInstrument && percmap) {\n\t\t\t\tvar name = pitchesToPerc(grace)\n\t\t\t\tif (name && percmap[name])\n\t\t\t\t\tactualPitch = percmap[name].sound;\n\t\t\t}\n\t\t\tvar pitch = { pitch: actualPitch, duration: grace.duration*multiplier };\n\t\t\tpitch = adjustForMicroTone(pitch);\n\t\t\tret.push(pitch);\n\t\t}\n\t\treturn ret;\n\t}\n\n\tfunction writeGraceNotes(graces, start, velocity, currentInstrument) {\n\t\tvar midiGrace = [];\n\t\tvelocity = Math.round(velocity)\n\t\tfor (var g = 0; g < graces.length; g++) {\n\t\t\tvar gp = graces[g];\n\t\t\tcurrentTrack.push({cmd: 'note', pitch: gp.pitch, volume: velocity, start: start, duration: gp.duration, gap: 0, instrument:currentInstrument, style: 'grace'});\n\t\t\tmidiGrace.push({\n\t\t\t\tpitch: gp.pitch,\n\t\t\t\tdurationInMeasures: gp.duration,\n\t\t\t\tvolume: velocity,\n\t\t\t\tinstrument: currentInstrument\n\t\t\t});\n\t\t\tstart += gp.duration;\n\t\t}\n\t\treturn midiGrace;\n\t}\n\n\tvar quarterToneFactor = 0.02930223664349;\n\tfunction adjustForMicroTone(description) {\n\t\t// if the pitch is not a whole number then make it a whole number and add a tuning factor\n\t\tvar pitch = ''+description.pitch;\n\t\tif (pitch.indexOf(\".75\") >= 0) {\n\t\t\tdescription.pitch = Math.round(description.pitch);\n\t\t\tdescription.cents = -50;\n\t\t} else if (pitch.indexOf(\".25\") >= 0) {\n\t\t\tdescription.pitch = Math.round(description.pitch);\n\t\t\tdescription.cents = 50;\n\t\t}\n\n\t\treturn description;\n\t}\n\n\tfunction extractOctave(pitch) {\n\t\treturn Math.floor(pitch/7);\n\t}\n\n\tfunction extractNote(pitch) {\n\t\tpitch = pitch%7;\n\t\tif (pitch<0) pitch+=7;\n\t\treturn pitch;\n\t}\n\n\n\tfunction normalizeDrumDefinition(params) {\n\t\t// Be very strict with the drum definition. If anything is not perfect,\n\t\t// just turn the drums off.\n\t\t// Perhaps all of this logic belongs in the parser instead.\n\t\tif (params.pattern.length === 0 || params.on === false)\n\t\t\treturn { on: false };\n\n\t\tvar str = params.pattern[0];\n\t\tvar events = [];\n\t\tvar event = \"\";\n\t\tvar totalPlay = 0;\n\t\tfor (var i = 0; i < str.length; i++) {\n\t\t\tif (str[i] === 'd')\n\t\t\t\ttotalPlay++;\n\t\t\tif (str[i] === 'd' || str[i] === 'z') {\n\t\t\t\tif (event.length !== 0) {\n\t\t\t\t\tevents.push(event);\n\t\t\t\t\tevent = str[i];\n\t\t\t\t} else\n\t\t\t\t\tevent = event + str[i];\n\t\t\t} else {\n\t\t\t\tif (event.length === 0) {\n\t\t\t\t\t// there was an error: the string should have started with d or z\n\t\t\t\t\treturn {on: false};\n\t\t\t\t}\n\t\t\t\tevent = event + str[i];\n\t\t\t}\n\t\t}\n\n\t\tif (event.length !== 0)\n\t\t\tevents.push(event);\n\n\t\t// Now the events array should have one item per event.\n\t\t// There should be two more params for each event: the volume and the pitch.\n\t\tif (params.pattern.length !== totalPlay*2 + 1)\n\t\t\treturn { on: false };\n\n\t\tvar ret = { on: true, bars: params.bars, pattern: []};\n\t\tvar beatLength = getBeatFraction(meter);\n\t\tvar playCount = 0;\n\t\tfor (var j = 0; j < events.length; j++) {\n\t\t\tevent = events[j];\n\t\t\tvar len = 1;\n\t\t\tvar div = false;\n\t\t\tvar num = 0;\n\t\t\tfor (var k = 1; k < event.length; k++) {\n\t\t\t\tswitch(event[k]) {\n\t\t\t\t\tcase \"/\":\n\t\t\t\t\t\tif (num !== 0)\n\t\t\t\t\t\t\tlen *= num;\n\t\t\t\t\t\tnum = 0;\n\t\t\t\t\t\tdiv = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"1\":\n\t\t\t\t\tcase \"2\":\n\t\t\t\t\tcase \"3\":\n\t\t\t\t\tcase \"4\":\n\t\t\t\t\tcase \"5\":\n\t\t\t\t\tcase \"6\":\n\t\t\t\t\tcase \"7\":\n\t\t\t\t\tcase \"8\":\n\t\t\t\t\tcase \"9\":\n\t\t\t\t\t\tnum = num*10 +event[k];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn { on: false };\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (div) {\n\t\t\t\tif (num === 0) num = 2; // a slash by itself is interpreted as \"/2\"\n\t\t\t\tlen /= num;\n\t\t\t} else if (num)\n\t\t\t\tlen *= num;\n\t\t\tif (event[0] === 'd') {\n\t\t\t\tret.pattern.push({ len: len * beatLength, pitch: params.pattern[1 + playCount], velocity: params.pattern[1 + playCount + totalPlay]});\n\t\t\t\tplayCount++;\n\t\t\t} else\n\t\t\t\tret.pattern.push({ len: len * beatLength, pitch: null});\n\t\t}\n\t\tdrumBars = params.bars ? params.bars : 1;\n\t\treturn ret;\n\t}\n\n\tfunction alignDrumToMeter() {\n\t\tif (!drumDefinition ||!drumDefinition.pattern) {\n\t\t\treturn;\n\t\t}\n\t\tvar ret = drumDefinition;\n\t\t// Now normalize the pattern to cover the correct number of measures. The note lengths passed are relative to each other and need to be scaled to fit a measure.\n\t\tvar totalTime = 0;\n\t\tvar measuresPerBeat = meter.num/meter.den;\n\t\tfor (var ii = 0; ii < ret.pattern.length; ii++)\n\t\t\ttotalTime += ret.pattern[ii].len;\n\t\tvar factor = totalTime /  drumBars / measuresPerBeat;\n\t\tfor (ii = 0; ii < ret.pattern.length; ii++)\n\t\t\tret.pattern[ii].len = ret.pattern[ii].len / factor;\n\t\tdrumDefinition = ret;\n\t}\n\n\tfunction writeDrum(channel) {\n\t\tif (drumTrack.length === 0 && !drumDefinition.on)\n\t\t\treturn;\n\n\t\tvar measureLen = meter.num/meter.den;\n\t\tif (drumTrack.length === 0) {\n\t\t\tif (lastEventTime < measureLen)\n\t\t\t\treturn; // This is true if there are pickup notes. The drum doesn't start until the first full measure.\n\t\t\tdrumTrack.push({cmd: 'program', channel: channel, instrument: drumInstrument});\n\t\t}\n\n\t\tif (!drumDefinition.on) {\n\t\t\t// this is the case where there has been a drum track, but it was specifically turned off.\n\t\t\treturn;\n\t\t}\n\t\tvar start = lastBarTime;\n\t\tfor (var i = 0; i < drumDefinition.pattern.length; i++) {\n\t\t\tvar len = durationRounded(drumDefinition.pattern[i].len);\n\t\t\tif (drumDefinition.pattern[i].pitch) {\n\t\t\t\tdrumTrack.push({\n\t\t\t\t\tcmd: 'note',\n\t\t\t\t\tpitch: drumDefinition.pattern[i].pitch,\n\t\t\t\t\tvolume: drumDefinition.pattern[i].velocity,\n\t\t\t\t\tstart: start,\n\t\t\t\t\tduration: len,\n\t\t\t\t\tgap: 0,\n\t\t\t\t\tinstrument: drumInstrument});\n\t\t\t}\n\t\t\tstart += len;\n\t\t}\n\t}\n\n\tfunction findOctaves(tracks, detuneCents) {\n\t\tvar timing = {};\n\t\tfor (var i = 0; i < tracks.length; i++) {\n\t\t\tfor (var j = 0; j < tracks[i].length; j++) {\n\t\t\t\tvar note = tracks[i][j];\n\t\t\t\tif (note.cmd === \"note\") {\n\t\t\t\t\tif (timing[note.start] === undefined)\n\t\t\t\t\t\ttiming[note.start] = [];\n\t\t\t\t\ttiming[note.start].push({track: i, event: j, pitch: note.pitch});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tvar keys = Object.keys(timing);\n\t\tfor (i = 0; i < keys.length; i++) {\n\t\t\tvar arr = timing[keys[i]];\n\t\t\tif (arr.length > 1) {\n\t\t\t\tarr = arr.sort(function(a,b) {\n\t\t\t\t\treturn a.pitch - b.pitch;\n\t\t\t\t});\n\t\t\t\tvar topEvent = arr[arr.length-1];\n\t\t\t\tvar topNote = topEvent.pitch % 12;\n\t\t\t\tvar found = false;\n\t\t\t\tfor (j = 0; !found && j < arr.length-1; j++) {\n\t\t\t\t\tif (arr[j].pitch % 12 === topNote)\n\t\t\t\t\t\tfound = true;\n\t\t\t\t}\n\t\t\t\tif (found) {\n\t\t\t\t\tvar event = tracks[topEvent.track][topEvent.event];\n\t\t\t\t\tif (!event.cents)\n\t\t\t\t\t\tevent.cents = 0;\n\t\t\t\t\tevent.cents += detuneCents;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n})();\n\nmodule.exports = flatten;\n","//    abc_midi_renderer.js: Create the actual format for the midi.\n\nvar centsToFactor = require(\"./cents-to-factor\");\nvar rendererFactory;\n\n(function() {\n\t\"use strict\";\n\tfunction setAttributes(elm, attrs) {\n\t\tfor (var attr in attrs)\n\t\t\tif (attrs.hasOwnProperty(attr))\n\t\t\t\telm.setAttribute(attr, attrs[attr]);\n\t\treturn elm;\n\t}\n\n\tfunction Midi() {\n\t\tthis.trackstrings = \"\";\n\t\tthis.trackcount = 0;\n\t\tthis.noteOnAndChannel = \"%90\";\n\t\tthis.noteOffAndChannel = \"%80\";\n\t}\n\n\tMidi.prototype.setTempo = function(qpm) {\n\t\tif (this.trackcount === 0) {\n\t\t\tthis.startTrack();\n\t\t\tthis.track += \"%00%FF%51%03\" + toHex(Math.round(60000000 / qpm), 6);\n\t\t\tthis.endTrack();\n\t\t}\n\t};\n\n\tMidi.prototype.setGlobalInfo = function(qpm, name, key, time) {\n\t\tif (this.trackcount === 0) {\n\t\t\tthis.startTrack();\n\t\t\tvar divisions = Math.round(60000000 / qpm);\n\t\t\t// Add the tempo\n\t\t\tthis.track += \"%00%FF%51%03\" + toHex(divisions, 6);\n\n\t\t\tif (key)\n\t\t\t\tthis.track += keySignature(key);\n\t\t\tif (time)\n\t\t\t\tthis.track += timeSignature(time);\n\t\t\tif (name) {\n\t\t\t\tthis.track += encodeString(name, \"%01\");\n\t\t\t}\n\t\t\tthis.endTrack();\n\t\t}\n\t};\n\n\tMidi.prototype.startTrack = function() {\n\t\tthis.noteWarped = {};\n\t\tthis.track = \"\";\n\t\tthis.trackName = \"\";\n\t\tthis.trackInstrument = \"\";\n\t\tthis.silencelength = 0;\n\t\tthis.trackcount++;\n\t\tif (this.instrument) {\n\t\t\tthis.setInstrument(this.instrument);\n\t\t}\n\t};\n\n\tMidi.prototype.endTrack = function() {\n\t\tthis.track = this.trackName + this.trackInstrument + this.track;\n\t\tvar tracklength = toHex(this.track.length / 3 + 4, 8);\n\t\tthis.track = \"MTrk\" + tracklength + // track header\n\t\t\tthis.track +\n\t\t\t'%00%FF%2F%00'; // track end\n\t\tthis.trackstrings += this.track;\n\t};\n\n\tMidi.prototype.setText = function(type, text) {\n\t\t// MIDI defines the following types of events:\n\t\t//FF 01 len text Text Event\n\t\t//FF 02 len text Copyright Notice\n\t\t//FF 03 len text Sequence/Track Name\n\t\t//FF 04 len text Instrument Name\n\t\t//FF 05 len text Lyric\n\t\t//FF 06 len text Marker\n\t\t//FF 07 len text Cue Point\n\t\tswitch(type) {\n\t\t\tcase 'name':\n\t\t\t\tthis.trackName = encodeString(text, \"%03\");\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\tMidi.prototype.setInstrument = function(number) {\n\t\tthis.trackInstrument = \"%00%C0\" + toHex(number, 2);\n\t\tthis.instrument = number;\n\t};\n\n\tMidi.prototype.setChannel = function(number, pan) {\n\t\tthis.channel = number;\n\t\tvar ccPrefix = \"%00%B\" + this.channel.toString(16);\n\t\t// Reset midi, in case it was set previously.\n\t\tthis.track += ccPrefix + \"%79%00\"; // Reset All Controllers\n\t\tthis.track += ccPrefix + \"%40%00\"; // Damper pedal\n\t\tthis.track += ccPrefix + \"%5B%30\"; // Effect 1 Depth (reverb)\n\t\t// Translate pan as -1 to 1 to 0 to 127\n\t\tif (!pan)\n\t\t\tpan = 0;\n\t\tpan = Math.round((pan + 1) * 64);\n\t\tthis.track += ccPrefix + \"%0A\" + toHex(pan, 2); // Pan\n\t\tthis.track += ccPrefix + \"%07%64\"; // Channel Volume\n\n\t\tthis.noteOnAndChannel = \"%9\" + this.channel.toString(16);\n\t\tthis.noteOffAndChannel = \"%8\" + this.channel.toString(16);\n\t};\n\n\tvar HALF_STEP = 4096; // For the pitch wheel - (i.e. the distance from C to C#)\n\tMidi.prototype.startNote = function(pitch, loudness, cents) {\n\t\tthis.track += toDurationHex(this.silencelength); // only need to shift by amount of silence (if there is any)\n\t\tthis.silencelength = 0;\n\t\tif (cents) {\n\t\t\t// the pitch is altered so send a midi pitch wheel event\n\t\t\tthis.track += \"%e\" + this.channel.toString(16);\n\t\t\tvar bend = Math.round(centsToFactor(cents)*HALF_STEP);\n\t\t\tthis.track += to7BitHex(0x2000 + bend);\n\t\t\tthis.track += toDurationHex(0); // this all happens at once so there is a zero length here\n\t\t\tthis.noteWarped[pitch] = true;\n\t\t}\n\t\tthis.track += this.noteOnAndChannel;\n\t\tthis.track += \"%\" + pitch.toString(16) + toHex(loudness, 2); //note\n\t};\n\n\tMidi.prototype.endNote = function(pitch) {\n\t\tthis.track += toDurationHex(this.silencelength); // only need to shift by amount of silence (if there is any)\n\t\tthis.silencelength = 0;\n\t\tif (this.noteWarped[pitch]) {\n\t\t\t// the pitch was altered so alter it back.\n\t\t\tthis.track += \"%e\" + this.channel.toString(16);\n\t\t\tthis.track += to7BitHex(0x2000);\n\t\t\tthis.track += toDurationHex(0); // this all happens at once so there is a zero length here\n\t\t\tthis.noteWarped[pitch] = false;\n\t\t}\n\t\tthis.track += this.noteOffAndChannel;\n\t\tthis.track += \"%\" + pitch.toString(16) + \"%00\";//end note\n\t};\n\n\tMidi.prototype.addRest = function(length) {\n\t\tthis.silencelength += length;\n\t\tif (this.silencelength < 0)\n\t\t\tthis.silencelength = 0;\n\t};\n\n\tMidi.prototype.getData = function() {\n\t\treturn \"data:audio/midi,\" +\n\t\t\t\"MThd%00%00%00%06%00%01\" + toHex(this.trackcount, 4) + \"%01%e0\" + // header\n\t\t\tthis.trackstrings;\n\t};\n\n\tMidi.prototype.embed = function(parent, noplayer) {\n\n\t\tvar data = this.getData();\n\n\t\tvar link = setAttributes(document.createElement('a'), {\n\t\t\thref: data\n\t\t});\n\t\tlink.innerHTML = \"download midi\";\n\t\tparent.insertBefore(link, parent.firstChild);\n\n\t\tif (noplayer) return;\n\n\t\tvar embed = setAttributes(document.createElement('embed'), {\n\t\t\tsrc: data,\n\t\t\ttype: 'video/quicktime',\n\t\t\tcontroller: 'true',\n\t\t\tautoplay: 'false',\n\t\t\tloop: 'false',\n\t\t\tenablejavascript: 'true',\n\t\t\tstyle: 'display:block; height: 20px;'\n\t\t});\n\t\tparent.insertBefore(embed, parent.firstChild);\n\t};\n\n\tfunction encodeString(str, cmdType) {\n\t\t// If there are multi-byte chars, we don't know how long the string will be until we create it.\n\t\tvar nameArray = \"\";\n\t\tfor (var i = 0; i < str.length; i++)\n\t\t\tnameArray += toHex(str.charCodeAt(i), 2);\n\t\treturn \"%00%FF\" + cmdType + toHex(nameArray.length/3, 2) + nameArray; // Each byte is represented by three chars \"%XX\", so divide by 3 to get the length.\n\t}\n\n\tfunction keySignature(key) {\n\t\t//00 FF 5902 03 00 - key signature\n\t\tif (!key || !key.accidentals)\n\t\t\treturn \"\";\n\t\tvar hex = \"%00%FF%59%02\";\n\t\tvar sharpCount = 0;\n\t\tvar flatCount = 256;\n\t\tfor (var i = 0; i < key.accidentals.length; i++) {\n\t\t\tif (key.accidentals[i].acc === \"sharp\") sharpCount++;\n\t\t\telse if (key.accidentals[i].acc === \"flat\") flatCount--;\n\t\t}\n\t\tvar sig = flatCount !== 256 ? toHex(flatCount, 2) : toHex(sharpCount, 2);\n\t\tvar mode = (key.mode === \"m\") ? \"%01\" : \"%00\";\n\t\treturn hex + sig + mode;\n\t}\n\n\tfunction timeSignature(time) {\n\t\t//00 FF 58 04 04 02 30 08 - time signature\n\t\tvar hex = \"%00%FF%58%04\" + toHex(time.num,2);\n\t\tvar dens = { 1: 0, 2: 1, 4: 2, 8: 3, 16: 4, 32: 5 };\n\t\tvar den = dens[time.den];\n\t\tif (!den)\n\t\t\treturn \"\"; // the denominator is not supported, so just don't include this.\n\t\thex += toHex(den, 2);\n\n\t\tvar clocks;\n\t\tswitch (time.num+\"/\"+time.den) {\n\t\t\tcase \"2/4\":\n\t\t\tcase \"3/4\":\n\t\t\tcase \"4/4\":\n\t\t\tcase \"5/4\":\n\t\t\t\tclocks = 24;\n\t\t\t\tbreak;\n\t\t\tcase \"6/4\":\n\t\t\t\tclocks = 72;\n\t\t\t\tbreak;\n\t\t\tcase \"2/2\":\n\t\t\tcase \"3/2\":\n\t\t\tcase \"4/2\":\n\t\t\t\tclocks = 48;\n\t\t\t\tbreak;\n\t\t\tcase \"3/8\":\n\t\t\tcase \"6/8\":\n\t\t\tcase \"9/8\":\n\t\t\tcase \"12/8\":\n\t\t\t\tclocks = 36;\n\t\t\t\tbreak;\n\t\t}\n\t\tif (!clocks)\n\t\t\treturn \"\"; // time sig is not supported.\n\t\thex += toHex(clocks, 2);\n\t\treturn hex + \"%08\";\n\t}\n\n\t// s is assumed to be of even length\n\tfunction encodeHex(s) {\n\t\tvar ret = \"\";\n\t\tfor (var i = 0; i < s.length; i += 2) {\n\t\t\tret += \"%\";\n\t\t\tret += s.substr(i, 2);\n\t\t}\n\t\treturn ret;\n\t}\n\n\tfunction toHex(n, padding) {\n\t\tvar s = n.toString(16);\n\t\ts = s.split(\".\")[0];\n\t\twhile (s.length < padding) {\n\t\t\ts = \"0\" + s;\n\t\t}\n\t\tif (s.length > padding)\n\t\t\ts = s.substring(0,padding)\n\t\treturn encodeHex(s);\n\t}\n\n\tfunction to7BitHex(n) {\n\t\t// this takes a number and shifts all digits from the 7th one to the left.\n\t\tn = Math.round(n);\n\t\tvar lower = n % 128;\n\t\tvar higher = n - lower;\n\t\treturn toHex(higher*2+lower, 4);\n\t}\n\n\tfunction toDurationHex(n) {\n\t\tvar res = 0;\n\t\tvar a = [];\n\n\t\t// cut up into 7 bit chunks;\n\t\tn = Math.round(n);\n\t\twhile (n !== 0) {\n\t\t\ta.push(n & 0x7F);\n\t\t\tn = n >> 7;\n\t\t}\n\n\t\t// join the 7 bit chunks together, all but last chunk get leading 1\n\t\tfor (var i = a.length - 1; i >= 0; i--) {\n\t\t\tres = res << 8;\n\t\t\tvar bits = a[i];\n\t\t\tif (i !== 0) {\n\t\t\t\tbits = bits | 0x80;\n\t\t\t}\n\t\t\tres = res | bits;\n\t\t}\n\n\t\tvar padding = res.toString(16).length;\n\t\tpadding += padding % 2;\n\n\t\treturn toHex(res, padding);\n\t}\n\n\trendererFactory = function() {\n\t\treturn new Midi();\n\t};\n})();\n\nmodule.exports = rendererFactory;\n","//    abc_midi_sequencer.js: Turn parsed abc into a linear series of events.\n\nvar sequence;\nvar parseCommon = require(\"../parse/abc_common\");\n\n(function() {\n\t\"use strict\";\n\n\tvar measureLength = 1; // This should be set by the meter, but just in case that is missing, we'll take a guess.\n\t// The abc is provided to us line by line. It might have repeats in it. We want to re arrange the elements to\n\t// be an array of voices with all the repeats embedded, and no lines. Then it is trivial to go through the events\n\t// one at a time and turn it into midi.\n\n\tvar PERCUSSION_PROGRAM = 128;\n\n\tsequence = function(abctune, options) {\n\t\t// Global options\n\t\toptions = options || {};\n\t\tvar qpm;\n\t\tvar program = options.program || 0;\t// The program if there isn't a program specified.\n\t\tvar transpose = options.midiTranspose || 0;\n\t\t// If the tune has a visual transpose then that needs to be subtracted out because we are getting the visual object.\n\t\tif (abctune.visualTranspose)\n\t\t\ttranspose -= abctune.visualTranspose;\n\t\tvar channel = options.channel || 0;\n\t\tvar channelExplicitlySet = false;\n\t\tvar drumPattern = options.drum || \"\";\n\t\tvar drumBars = options.drumBars || 1;\n\t\tvar drumIntro = options.drumIntro || 0;\n\t\tvar drumOn = drumPattern !== \"\";\n\t\tvar drumOffAfterIntro = !!options.drumOff\n\t\tvar style = []; // The note head style for each voice.\n\t\tvar rhythmHeadThisBar = false; // Rhythm notation was detected.\n\t\tvar crescendoSize = 50; // how much to increase or decrease volume when crescendo/diminuendo is encountered.\n\n\t\t// All of the above overrides need to be integers\n\t\tprogram = parseInt(program, 10);\n\t\ttranspose = parseInt(transpose, 10);\n\t\tchannel = parseInt(channel, 10);\n\t\tif (channel === 10)\n\t\t\tprogram = PERCUSSION_PROGRAM;\n\t\tdrumPattern = drumPattern.split(\" \");\n\t\tdrumBars = parseInt(drumBars, 10);\n\t\tdrumIntro = parseInt(drumIntro, 10);\n\n\t\tvar bagpipes = abctune.formatting.bagpipes; // If it is bagpipes, then the gracenotes are played on top of the main note.\n\t\tif (bagpipes)\n\t\t\tprogram = 71;\n\n\t\t// %%MIDI fermatafixed\n\t\t// %%MIDI fermataproportional\n\t\t// %%MIDI deltaloudness n\n\t\t// %%MIDI gracedivider b\n\t\t// %%MIDI ratio n m\n\t\t// %%MIDI beat a b c n\n\t\t// %%MIDI grace a/b\n\t\t// %%MIDI trim x/y\n\n\t\t// %MIDI gchordon\n\t\t// %MIDI gchordoff\n\t\t// %%MIDI bassprog 45\n\t\t// %%MIDI chordprog 24\n\t\t// %%MIDI chordname name n1 n2 n3 n4 n5 n6\n\n\t\t//%%MIDI beat ⟨int1⟩ ⟨int2⟩ ⟨int3⟩ ⟨int4⟩: controls the volumes of the notes in a measure. The first note in a bar has volume ⟨int1⟩; other ‘strong’ notes have volume ⟨int2⟩ and all the rest have volume ⟨int3⟩. These values must be in the range 0–127. The parameter ⟨int4⟩ determines which notes are ‘strong’. If the time signature is x/y, then each note is given a position number k = 0, 1, 2. . . x-1 within each bar. If k is a multiple of ⟨int4⟩, then the note is ‘strong’.\n\n\t\tvar startingMidi = [];\n\t\tif (abctune.formatting.midi) {\n\t\t\t//console.log(\"MIDI Formatting:\", abctune.formatting.midi);\n\t\t\tvar globals = abctune.formatting.midi;\n\t\t\tif (globals.program && globals.program.length > 0) {\n\t\t\t\tprogram = globals.program[0];\n\t\t\t\tif (globals.program.length > 1) {\n\t\t\t\t\tprogram = globals.program[1];\n\t\t\t\t\tchannel = globals.program[0];\n\t\t\t\t}\n\t\t\t\tchannelExplicitlySet = true;\n\t\t\t}\n\t\t\tif (globals.transpose)\n\t\t\t\ttranspose = globals.transpose[0];\n\t\t\tif (globals.channel) {\n\t\t\t\tchannel = globals.channel[0];\n\t\t\t\tchannelExplicitlySet = true;\n\t\t\t}\n\t\t\tif (globals.drum)\n\t\t\t\tdrumPattern = globals.drum;\n\t\t\tif (globals.drumbars)\n\t\t\t\tdrumBars = globals.drumbars[0];\n\t\t\tif (globals.drumon)\n\t\t\t\tdrumOn = true;\n\t\t\tif (channel === 10)\n\t\t\t\tprogram = PERCUSSION_PROGRAM;\n\t\t\tif (globals.beat)\n\t\t\t\tstartingMidi.push({ el_type: 'beat', beats: globals.beat })\n\t\t\tif (globals.nobeataccents)\n\t\t\t\tstartingMidi.push({ el_type: 'beataccents', value: false });\n\n\t\t}\n\n\t\t// Specified options in abc string.\n\n\t\t// If the tempo was passed in, use that.\n\t\t// If the tempo is specified, use that.\n\t\t// If there is a default, use that.\n\t\t// Otherwise, use the default.\n\t\tif (options.qpm)\n\t\t\tqpm = parseInt(options.qpm, 10);\n\t\telse if (abctune.metaText.tempo)\n\t\t\tqpm = interpretTempo(abctune.metaText.tempo, abctune.getBeatLength());\n\t\telse if (options.defaultQpm)\n\t\t\tqpm = options.defaultQpm;\n\t\telse\n\t\t\tqpm = 180; \t// The tempo if there isn't a tempo specified.\n\n\t\tvar startVoice = [];\n\t\tif (bagpipes)\n\t\t\tstartVoice.push({ el_type: 'bagpipes' });\n\t\tstartVoice.push({ el_type: 'instrument', program: program });\n\t\tif (channel)\n\t\t\tstartVoice.push({ el_type: 'channel', channel: channel });\n\t\tif (transpose)\n\t\t\tstartVoice.push({ el_type: 'transpose', transpose: transpose });\n\t\tstartVoice.push({ el_type: 'tempo', qpm: qpm });\n\t\tfor (var ss = 0; ss < startingMidi.length;ss++)\n\t\t\tstartVoice.push(startingMidi[ss]);\n\n\t\t// the relevant part of the input structure is:\n\t\t// abctune\n\t\t//\t\tarray lines\n\t\t//\t\t\tarray staff\n\t\t//\t\t\t\tobject key\n\t\t//\t\t\t\tobject meter\n\t\t//\t\t\t\tarray voices\n\t\t//\t\t\t\t\tarray abcelem\n\n\t\t// visit each voice completely in turn\n\t\tvar voices = [];\n\t\tvar inCrescendo = [];\n\t\tvar inDiminuendo = [];\n\t\tvar durationCounter = [0];\n\t\tvar tempoChanges = {};\n\t\ttempoChanges[\"0\"] = { el_type: 'tempo', qpm: qpm, timing: 0 };\n\t\tvar currentVolume;\n\t\tvar startRepeatPlaceholder = []; // There is a place holder for each voice.\n\t\tvar skipEndingPlaceholder = []; // This is the place where the first ending starts.\n\t\tvar startingDrumSet = false;\n\t\tvar lines = abctune.lines; //abctune.deline(); TODO-PER: can switch to this, then simplify the loops below.\n\t\tfor (var i = 0; i < lines.length; i++) {\n\t\t\t// For each group of staff lines in the tune.\n\t\t\tvar line = lines[i];\n\t\t\tif (line.staff) {\n\t\t\t\tvar staves = line.staff;\n\t\t\t\tvar voiceNumber = 0;\n\t\t\t\tfor (var j = 0; j < staves.length; j++) {\n\t\t\t\t\tvar staff = staves[j];\n\t\t\t\t\tif (staff.clef && staff.clef.type === \"TAB\")\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t// For each staff line\n\t\t\t\t\tfor (var k = 0; k < staff.voices.length; k++) {\n\t\t\t\t\t\t// For each voice in a staff line\n\t\t\t\t\t\tvar voice = staff.voices[k];\n\t\t\t\t\t\tif (!voices[voiceNumber]) {\n\t\t\t\t\t\t\tvoices[voiceNumber] = [].concat(JSON.parse(JSON.stringify(startVoice)));\n\t\t\t\t\t\t\tvar voiceName = getTrackTitle(line.staff, voiceNumber);\n\t\t\t\t\t\t\tif (voiceName)\n\t\t\t\t\t\t\t\tvoices[voiceNumber].unshift({el_type: \"name\", trackName: voiceName});\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Negate any transposition for the percussion staff.\n\t\t\t\t\t\tif (transpose && staff.clef.type === \"perc\")\n\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'transpose', transpose: 0 });\n\n\t\t\t\t\t\tif (staff.clef && staff.clef.type === 'perc' && !channelExplicitlySet) {\n\t\t\t\t\t\t\tfor (var cl = 0; cl < voices[voiceNumber].length; cl++) {\n\t\t\t\t\t\t\t\tif (voices[voiceNumber][cl].el_type === 'instrument')\n\t\t\t\t\t\t\t\t\tvoices[voiceNumber][cl].program = PERCUSSION_PROGRAM;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (staff.key) {\n\t\t\t\t\t\t\taddKey(voices[voiceNumber], staff.key);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (staff.meter) {\n\t\t\t\t\t\t\taddMeter(voices[voiceNumber], staff.meter);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!startingDrumSet && drumOn) { // drum information is only needed once, so use the first line and track 0.\n\t\t\t\t\t\t\tvoices[voiceNumber].push({el_type: 'drum', params: {pattern: drumPattern, bars: drumBars, on: drumOn, intro: drumIntro}});\n\t\t\t\t\t\t\tstartingDrumSet = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (staff.clef && staff.clef.type !== \"perc\" && staff.clef.transpose) {\n\t\t\t\t\t\t\tstaff.clef.el_type = 'clef';\n\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'transpose', transpose: staff.clef.transpose });\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (staff.clef && staff.clef.type) {\n\t\t\t\t\t\t\tif (staff.clef.type.indexOf(\"-8\") >= 0)\n\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'transpose', transpose: -12 });\n\t\t\t\t\t\t\telse if (staff.clef.type.indexOf(\"+8\") >= 0)\n\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'transpose', transpose: 12 });\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (abctune.formatting.midi && abctune.formatting.midi.drumoff) {\n\t\t\t\t\t\t\t// If there is a drum off command right at the beginning it is put in the metaText instead of the stream,\n\t\t\t\t\t\t\t// so we will just insert it here.\n\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'bar' });\n\t\t\t\t\t\t\tvoices[voiceNumber].push({el_type: 'drum', params: {pattern: \"\", on: false }});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar noteEventsInBar = 0;\n\t\t\t\t\t\tvar tripletMultiplier = 0;\n\t\t\t\t\t\tvar tripletDurationTotal = 0; // try to mitigate the js rounding problems.\n\t\t\t\t\t\tvar tripletDurationCount = 0;\n\t\t\t\t\t\tcurrentVolume = [105, 95, 85, 1];\n\n\t\t\t\t\t\tfor (var v = 0; v < voice.length; v++) {\n\t\t\t\t\t\t\t// For each element in a voice\n\t\t\t\t\t\t\tvar elem = voice[v];\n\t\t\t\t\t\t\tswitch (elem.el_type) {\n\t\t\t\t\t\t\t\tcase \"note\":\n\t\t\t\t\t\t\t\t\tif (inCrescendo[k]) {\n\t\t\t\t\t\t\t\t\t\tcurrentVolume[0] += inCrescendo[k];\n\t\t\t\t\t\t\t\t\t\tcurrentVolume[1] += inCrescendo[k];\n\t\t\t\t\t\t\t\t\t\tcurrentVolume[2] += inCrescendo[k];\n\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'beat', beats: currentVolume.slice(0) });\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif (inDiminuendo[k]) {\n\t\t\t\t\t\t\t\t\t\tcurrentVolume[0] += inDiminuendo[k];\n\t\t\t\t\t\t\t\t\t\tcurrentVolume[1] += inDiminuendo[k];\n\t\t\t\t\t\t\t\t\t\tcurrentVolume[2] += inDiminuendo[k];\n\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'beat', beats: currentVolume.slice(0) });\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tsetDynamics(elem);\n\n\t\t\t\t\t\t\t\t\t// regular items are just pushed.\n\t\t\t\t\t\t\t\t\tif (!elem.rest || elem.rest.type !== 'spacer') {\n\t\t\t\t\t\t\t\t\t\tvar noteElem = { elem: elem, el_type: \"note\", timing: durationCounter[voiceNumber] }; // Make a copy so that modifications aren't kept except for adding the midiPitches\n\t\t\t\t\t\t\t\t\t\tif (elem.style)\n\t\t\t\t\t\t\t\t\t\t\tnoteElem.style = elem.style;\n\t\t\t\t\t\t\t\t\t\telse if (style[voiceNumber])\n\t\t\t\t\t\t\t\t\t\t\tnoteElem.style = style[voiceNumber];\n\t\t\t\t\t\t\t\t\t\tnoteElem.duration = (elem.duration === 0) ? 0.25 : elem.duration;\n\t\t\t\t\t\t\t\t\t\tif (elem.startTriplet) {\n\t\t\t\t\t\t\t\t\t\t\ttripletMultiplier = elem.tripletMultiplier;\n\t\t\t\t\t\t\t\t\t\t\ttripletDurationTotal = elem.startTriplet * tripletMultiplier * elem.duration;\n\t\t\t\t\t\t\t\t\t\t\tif (elem.startTriplet !== elem.tripletR) { // most commonly (3:2:2\n\t\t\t\t\t\t\t\t\t\t\t\tif (v + elem.tripletR <= voice.length) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar durationTotal = 0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor (var w = v; w < v + elem.tripletR; w++) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdurationTotal += voice[w].duration;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttripletDurationTotal = tripletMultiplier * durationTotal;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tnoteElem.duration = noteElem.duration * tripletMultiplier;\n\t\t\t\t\t\t\t\t\t\t\tnoteElem.duration = Math.round(noteElem.duration*1000000)/1000000;\n\t\t\t\t\t\t\t\t\t\t\ttripletDurationCount = noteElem.duration;\n\t\t\t\t\t\t\t\t\t\t} else if (tripletMultiplier) {\n\t\t\t\t\t\t\t\t\t\t\tif (elem.endTriplet) {\n\t\t\t\t\t\t\t\t\t\t\t\ttripletMultiplier = 0;\n\t\t\t\t\t\t\t\t\t\t\t\tnoteElem.duration = Math.round((tripletDurationTotal - tripletDurationCount)*1000000)/1000000;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tnoteElem.duration = noteElem.duration * tripletMultiplier;\n\t\t\t\t\t\t\t\t\t\t\t\tnoteElem.duration = Math.round(noteElem.duration*1000000)/1000000;\n\t\t\t\t\t\t\t\t\t\t\t\ttripletDurationCount += noteElem.duration;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tif (elem.rest) noteElem.rest = elem.rest;\n\t\t\t\t\t\t\t\t\t\tif (elem.decoration) noteElem.decoration = elem.decoration.slice(0);\n\t\t\t\t\t\t\t\t\t\tif (elem.pitches) noteElem.pitches = parseCommon.cloneArray(elem.pitches);\n\t\t\t\t\t\t\t\t\t\tif (elem.gracenotes) noteElem.gracenotes = parseCommon.cloneArray(elem.gracenotes);\n\t\t\t\t\t\t\t\t\t\tif (elem.chord) noteElem.chord = parseCommon.cloneArray(elem.chord);\n\n\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push(noteElem);\n\t\t\t\t\t\t\t\t\t\tif (elem.style === \"rhythm\") {\n\t\t\t\t\t\t\t\t\t\t\trhythmHeadThisBar = true;\n\t\t\t\t\t\t\t\t\t\t\tchordVoiceOffThisBar(voices)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tnoteEventsInBar++;\n\t\t\t\t\t\t\t\t\t\tdurationCounter[voiceNumber] += noteElem.duration;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase \"key\":\n\t\t\t\t\t\t\t\tcase \"keySignature\":\n\t\t\t\t\t\t\t\t\taddKey(voices[voiceNumber], elem);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase \"meter\":\n\t\t\t\t\t\t\t\t\taddMeter(voices[voiceNumber], elem);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase \"clef\": // need to keep this to catch the \"transpose\" element.\n\t\t\t\t\t\t\t\t\tif (elem.transpose)\n\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'transpose', transpose: elem.transpose });\n\t\t\t\t\t\t\t\t\tif (elem.type) {\n\t\t\t\t\t\t\t\t\t\tif (elem.type.indexOf(\"-8\") >= 0)\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'transpose', transpose: -12 });\n\t\t\t\t\t\t\t\t\t\telse if (elem.type.indexOf(\"+8\") >= 0)\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'transpose', transpose: 12 });\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase \"tempo\":\n\t\t\t\t\t\t\t\t\tqpm = interpretTempo(elem, abctune.getBeatLength());\n\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'tempo', qpm: qpm, timing: durationCounter[voiceNumber] });\n\t\t\t\t\t\t\t\t\ttempoChanges[''+durationCounter[voiceNumber]] = { el_type: 'tempo', qpm: qpm, timing: durationCounter[voiceNumber] };\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase \"bar\":\n\t\t\t\t\t\t\t\t\tif (noteEventsInBar > 0) // don't add two bars in a row.\n\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'bar' }); // We need the bar marking to reset the accidentals.\n\t\t\t\t\t\t\t\t\tsetDynamics(elem);\n\t\t\t\t\t\t\t\t\tnoteEventsInBar = 0;\n\t\t\t\t\t\t\t\t\t// figure out repeats and endings --\n\t\t\t\t\t\t\t\t\t// The important part is where there is a start repeat, and end repeat, or a first ending.\n\t\t\t\t\t\t\t\t\tvar endRepeat = (elem.type === \"bar_right_repeat\" || elem.type === \"bar_dbl_repeat\");\n\t\t\t\t\t\t\t\t\tvar startEnding = (elem.startEnding === '1');\n\t\t\t\t\t\t\t\t\tvar startRepeat = (elem.type === \"bar_left_repeat\" || elem.type === \"bar_dbl_repeat\" || elem.type === \"bar_right_repeat\");\n\t\t\t\t\t\t\t\t\tif (endRepeat) {\n\t\t\t\t\t\t\t\t\t\tvar s = startRepeatPlaceholder[voiceNumber];\n\t\t\t\t\t\t\t\t\t\tif (!s) s = 0; // If there wasn't a left repeat, then we repeat from the beginning.\n\t\t\t\t\t\t\t\t\t\tvar e = skipEndingPlaceholder[voiceNumber];\n\t\t\t\t\t\t\t\t\t\tif (!e) e = voices[voiceNumber].length; // If there wasn't a first ending marker, then we copy everything.\n\t\t\t\t\t\t\t\t\t\t// duplicate each of the elements - this has to be a deep copy.\n\t\t\t\t\t\t\t\t\t\tfor (var z = s; z < e; z++) {\n\t\t\t\t\t\t\t\t\t\t\tvar item = parseCommon.clone(voices[voiceNumber][z]);\n\t\t\t\t\t\t\t\t\t\t\tif (item.pitches)\n\t\t\t\t\t\t\t\t\t\t\t\titem.pitches = parseCommon.cloneArray(item.pitches);\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push(item);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// reset these in case there is a second repeat later on.\n\t\t\t\t\t\t\t\t\t\tskipEndingPlaceholder[voiceNumber] = undefined;\n\t\t\t\t\t\t\t\t\t\tstartRepeatPlaceholder[voiceNumber] = undefined;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (startEnding)\n\t\t\t\t\t\t\t\t\t\tskipEndingPlaceholder[voiceNumber] = voices[voiceNumber].length;\n\t\t\t\t\t\t\t\t\tif (startRepeat)\n\t\t\t\t\t\t\t\t\t\tstartRepeatPlaceholder[voiceNumber] = voices[voiceNumber].length;\n\t\t\t\t\t\t\t\t\trhythmHeadThisBar = false;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 'style':\n\t\t\t\t\t\t\t\t\tstyle[voiceNumber] = elem.head;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 'timeSignature':\n\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push(interpretMeter(elem));\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 'part':\n\t\t\t\t\t\t\t\t\t// TODO-PER: If there is a part section in the header, then this should probably affect the repeats.\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 'stem':\n\t\t\t\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\t\t\tcase 'break':\n\t\t\t\t\t\t\t\tcase 'font':\n\t\t\t\t\t\t\t\t\t// These elements don't affect sound\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 'midi':\n\t\t\t\t\t\t\t\t\t//console.log(\"MIDI inline\", elem); // TODO-PER: for debugging. Remove this.\n\t\t\t\t\t\t\t\t\tvar drumChange = false;\n\t\t\t\t\t\t\t\t\tswitch (elem.cmd) {\n\t\t\t\t\t\t\t\t\t\tcase \"drumon\": drumOn = true; drumChange = true; break;\n\t\t\t\t\t\t\t\t\t\tcase \"drumoff\": drumOn = false; drumChange = true; break;\n\t\t\t\t\t\t\t\t\t\tcase \"drum\": drumPattern = elem.params; drumChange = true; break;\n\t\t\t\t\t\t\t\t\t\tcase \"drumbars\": drumBars = elem.params[0]; drumChange = true; break;\n\t\t\t\t\t\t\t\t\t\tcase \"drummap\":\n\t\t\t\t\t\t\t\t\t\t\t// This is handled before getting here so it can be ignored.\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"channel\":\n\t\t\t\t\t\t\t\t\t\t\t// There's not much needed for the channel except to look out for the percussion channel\n\t\t\t\t\t\t\t\t\t\t\tif (elem.params[0] === 10)\n\t\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'instrument', program: PERCUSSION_PROGRAM });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"program\":\n\t\t\t\t\t\t\t\t\t\t\taddIfDifferent(voices[voiceNumber], { el_type: 'instrument', program: elem.params[0] });\n\t\t\t\t\t\t\t\t\t\t\tchannelExplicitlySet = true;\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"transpose\":\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'transpose', transpose: elem.params[0] });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"gchordoff\":\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'gchordOn', tacet: true });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"gchordon\":\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'gchordOn', tacet: false });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"beat\":\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'beat', beats: elem.params });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"nobeataccents\":\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'beataccents', value: false });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"beataccents\":\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'beataccents', value: true });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"vol\":\n\t\t\t\t\t\t\t\t\t\tcase \"volinc\":\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: elem.cmd, volume: elem.params[0] });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"swing\":\n\t\t\t\t\t\t\t\t\t\tcase \"gchord\":\n\t\t\t\t\t\t\t\t\t\tcase \"bassprog\":\n\t\t\t\t\t\t\t\t\t\tcase \"chordprog\":\n\t\t\t\t\t\t\t\t\t\tcase \"bassvol\":\n\t\t\t\t\t\t\t\t\t\tcase \"chordvol\":\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: elem.cmd, param: elem.params[0] });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\t\tconsole.log(\"MIDI seq: midi cmd not handled: \", elem.cmd, elem);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (drumChange) {\n\t\t\t\t\t\t\t\t\t\tvoices[0].push({el_type: 'drum', params: { pattern: drumPattern, bars: drumBars, intro: drumIntro, on: drumOn}});\n\t\t\t\t\t\t\t\t\t\tstartingDrumSet = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\tconsole.log(\"MIDI: element type \" + elem.el_type + \" not handled.\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvoiceNumber++;\n\t\t\t\t\t\tif (!durationCounter[voiceNumber])\n\t\t\t\t\t\t\tdurationCounter[voiceNumber] = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfunction setDynamics(elem) {\n\t\t\t\t\tvar volumes = {\n\t\t\t\t\t\t'pppp': [15, 10, 5, 1],\n\t\t\t\t\t\t'ppp': [30, 20, 10, 1],\n\t\t\t\t\t\t'pp': [45, 35, 20, 1],\n\t\t\t\t\t\t'p': [60, 50, 35, 1],\n\t\t\t\t\t\t'mp': [75, 65, 50, 1],\n\t\t\t\t\t\t'mf': [90, 80, 65, 1],\n\t\t\t\t\t\t'f': [105, 95, 80, 1],\n\t\t\t\t\t\t'ff': [120, 110, 95, 1],\n\t\t\t\t\t\t'fff': [127, 125, 110, 1],\n\t\t\t\t\t\t'ffff': [127, 125, 110, 1]\n\t\t\t\t\t};\n\n\t\t\t\t\tvar dynamicType;\n\t\t\t\t\tif (elem.decoration) {\n\t\t\t\t\t\tif (elem.decoration.indexOf('pppp') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'pppp';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('ppp') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'ppp';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('pp') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'pp';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('p') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'p';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('mp') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'mp';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('mf') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'mf';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('f') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'f';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('ff') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'ff';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('fff') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'fff';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('ffff') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'ffff';\n\n\t\t\t\t\t\tif (dynamicType) {\n\t\t\t\t\t\t\tcurrentVolume = volumes[dynamicType].slice(0);\n\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'beat', beats: currentVolume.slice(0) });\n\t\t\t\t\t\t\tinCrescendo[k] = false;\n\t\t\t\t\t\t\tinDiminuendo[k] = false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (elem.decoration.indexOf(\"crescendo(\") >= 0) {\n\t\t\t\t\t\t\tvar n = numNotesToDecoration(voice, v, \"crescendo)\");\n\t\t\t\t\t\t\tvar top = Math.min(127, currentVolume[0] + crescendoSize);\n\t\t\t\t\t\t\tvar endDec = endingVolume(voice, v+n+1, Object.keys(volumes));\n\t\t\t\t\t\t\tif (endDec)\n\t\t\t\t\t\t\t\ttop = volumes[endDec][0];\n\t\t\t\t\t\t\tif (n > 0)\n\t\t\t\t\t\t\t\tinCrescendo[k] = Math.floor((top - currentVolume[0]) / n);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tinCrescendo[k] = false;\n\t\t\t\t\t\t\tinDiminuendo[k] = false;\n\t\t\t\t\t\t} else if (elem.decoration.indexOf(\"crescendo)\") >= 0) {\n\t\t\t\t\t\t\tinCrescendo[k] = false;\n\t\t\t\t\t\t} else if (elem.decoration.indexOf(\"diminuendo(\") >= 0) {\n\t\t\t\t\t\t\tvar n2 = numNotesToDecoration(voice, v, \"diminuendo)\");\n\t\t\t\t\t\t\tvar bottom = Math.max(15, currentVolume[0] - crescendoSize);\n\t\t\t\t\t\t\tvar endDec2 = endingVolume(voice, v+n2+1, Object.keys(volumes));\n\t\t\t\t\t\t\tif (endDec2)\n\t\t\t\t\t\t\t\tbottom = volumes[endDec2][0];\n\t\t\t\t\t\t\tinCrescendo[k] = false;\n\t\t\t\t\t\t\tif (n2 > 0)\n\t\t\t\t\t\t\t\tinDiminuendo[k] = Math.floor((bottom - currentVolume[0]) / n2);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tinDiminuendo[k] = false;\n\t\t\t\t\t\t} else if (elem.decoration.indexOf(\"diminuendo)\") >= 0) {\n\t\t\t\t\t\t\tinDiminuendo[k] = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// If there are tempo changes, make sure they are in all the voices. This must be done post process because all the elements in all the voices need to be created first.\n\t\tinsertTempoChanges(voices, tempoChanges);\n\n\t\tif (drumIntro) {\n\t\t\tvar pickups = abctune.getPickupLength();\n\t\t\t// add some measures of rests to the start of each track.\n\t\t\tfor (var vv = 0; vv < voices.length; vv++) {\n\t\t\t\tvar insertPoint = 0;\n\t\t\t\twhile (voices[vv][insertPoint].el_type !== \"note\" && voices[vv].length > insertPoint)\n\t\t\t\t\tinsertPoint++;\n\t\t\t\tif (voices[vv].length > insertPoint) {\n\t\t\t\t\tfor (var w = 0; w < drumIntro; w++) {\n\t\t\t\t\t\t// If it is the last measure of intro, subtract the pickups.\n\t\t\t\t\t\tif (pickups === 0 || w < drumIntro-1) {\n\t\t\t\t\t\t\tvoices[vv].splice(insertPoint, 0, \n\t\t\t\t\t\t\t\t{el_type: \"note\", rest: {type: \"rest\"}, duration: measureLength},\n\t\t\t\t\t\t\t\t{ el_type: \"bar\" }\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tinsertPoint += 2\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvoices[vv].splice(insertPoint++, 0, {el_type: \"note\", rest: {type: \"rest\"}, duration: measureLength-pickups});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (drumOffAfterIntro) {\n\t\t\t\t\t\tdrumOn = false\n\t\t\t\t\t\tvoices[vv].splice(insertPoint++, 0, {el_type: 'drum', params: { pattern: drumPattern, bars: drumBars, intro: drumIntro, on: drumOn}});\n\t\t\t\t\t\tdrumOffAfterIntro = false\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (voices.length > 0 && voices[0].length > 0) {\n\t\t\tvoices[0][0].pickupLength = abctune.getPickupLength();\n\t\t}\n\t\treturn voices;\n\t};\n\n\tfunction numNotesToDecoration(voice, start, decoration) {\n\t\tvar counter = 0;\n\t\tfor (var i = start+1; i < voice.length; i++) {\n\t\t\tif (voice[i].el_type === \"note\")\n\t\t\t\tcounter++;\n\t\t\tif (voice[i].decoration && voice[i].decoration.indexOf(decoration) >= 0)\n\t\t\t\treturn counter;\n\t\t}\n\t\treturn counter;\n\t}\n\tfunction endingVolume(voice, start, volumeDecorations) {\n\t\tvar end = Math.min(voice.length, start + 3); // If we have a volume within a couple notes of the end then assume that is the destination.\n\t\tfor (var i = start; i < end; i++) {\n\t\t\tif (voice[i].el_type === \"note\") {\n\t\t\t\tif (voice[i].decoration) {\n\t\t\t\t\tfor (var j = 0; j < voice[i].decoration.length; j++) {\n\t\t\t\t\t\tif (volumeDecorations.indexOf(voice[i].decoration[j]) >= 0)\n\t\t\t\t\t\t\treturn voice[i].decoration[j];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tfunction insertTempoChanges(voices, tempoChanges) {\n\t\tif (!tempoChanges || tempoChanges.length === 0)\n\t\t\treturn;\n\t\tvar changePositions = Object.keys(tempoChanges);\n\t\tfor (var i = 0; i < voices.length; i++) {\n\t\t\tvar voice = voices[i];\n\t\t\tvar lastTempo = tempoChanges['0'] ? tempoChanges['0'].qpm : 0; // Don't insert redundant changes. This happens normally when repeating from the beginning, but could happen anywhere that there is a tempo marking that is the same as the last one.\n\t\t\tfor (var j = 0; j < voice.length; j++) {\n\t\t\t\tvar el = voice[j];\n\t\t\t\tif (el.el_type === \"tempo\")\n\t\t\t\t\tlastTempo = el.qpm;\n\t\t\t\tif (changePositions.indexOf(''+el.timing) >= 0 && lastTempo !== tempoChanges[''+el.timing].qpm) {\n\t\t\t\t\tlastTempo = tempoChanges[''+el.timing].qpm;\n\t\t\t\t\tif (el.el_type === \"tempo\") {\n\t\t\t\t\t\tel.qpm = tempoChanges[''+el.timing].qpm;\n\t\t\t\t\t\tj++; // when there is a tempo element the next element has the same timing and we don't want it to match the second time.\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//console.log(\"tempo position\", i, j, el);\n\t\t\t\t\t\tvoices[i].splice(j, 0, {el_type: \"tempo\", qpm: tempoChanges[''+el.timing].qpm, timing: el.timing});\n\t\t\t\t\t\tj +=2; // skip the element we just inserted.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction chordVoiceOffThisBar(voices) {\n\t\tfor (var i = 0; i < voices.length; i++) {\n\t\t\tvar voice = voices[i];\n\t\t\tvar j = voice.length-1;\n\t\t\twhile (j >= 0 && voice[j].el_type !== 'bar') {\n\t\t\t\tvoice[j].noChordVoice = true;\n\t\t\t\tj--;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction getTrackTitle(staff, voiceNumber) {\n\t\tif (!staff || staff.length <= voiceNumber || !staff[voiceNumber].title)\n\t\t\treturn undefined;\n\t\treturn staff[voiceNumber].title.join(\" \");\n\t}\n\n\tfunction interpretTempo(element, beatLength) {\n\t\tvar duration = 1/4;\n\t\tif (element.duration) {\n\t\t\tduration = element.duration[0];\n\t\t}\n\t\tvar bpm = 60;\n\t\tif (element.bpm) {\n\t\t\tbpm = element.bpm;\n\t\t}\n\t\t// The tempo is defined with a beat length of \"duration\". If that isn't the natural beat length then there is a translation.\n\t\treturn duration * bpm / beatLength;\n\t}\n\n\tfunction interpretMeter(element) {\n\t\tvar meter;\n\t\tswitch (element.type) {\n\t\t\tcase \"common_time\":\n\t\t\t\tmeter = { el_type: 'meter', num: 4, den: 4 };\n\t\t\t\tbreak;\n\t\t\tcase \"cut_time\":\n\t\t\t\tmeter = { el_type: 'meter', num: 2, den: 2 };\n\t\t\t\tbreak;\n\t\t\tcase \"specified\":\n\t\t\t\t// TODO-PER: only taking the first meter, so the complex meters are not handled.\n\t\t\t\tmeter = { el_type: 'meter', num: element.value[0].num, den: element.value[0].den };\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// This should never happen.\n\t\t\t\tmeter = { el_type: 'meter' };\n\t\t}\n\t\tmeasureLength = meter.num/meter.den;\n\t\treturn meter;\n\t}\n\n\tfunction removeNaturals(accidentals) {\n\t\tvar acc = [];\n\t\tfor (var i = 0; i < accidentals.length; i++) {\n\t\t\tif (accidentals[i].acc !== \"natural\")\n\t\t\t\tacc.push(accidentals[i])\n\t\t}\n\t\treturn acc;\n\t}\n\tfunction addKey(arr, key) {\n\t\tvar newKey;\n\t\tif (key.root === 'HP')\n\t\t\tnewKey = {el_type: 'key', accidentals: [{acc: 'natural', note: 'g'}, {acc: 'sharp', note: 'f'}, {acc: 'sharp', note: 'c'}]};\n\t\telse\n\t\t\tnewKey = {el_type: 'key', accidentals: removeNaturals(key.accidentals) };\n\t\taddIfDifferent(arr, newKey);\n\t}\n\tfunction addMeter(arr, meter) {\n\t\tvar newMeter = interpretMeter(meter);\n\t\taddIfDifferent(arr, newMeter);\n\t}\n\tfunction addIfDifferent(arr, item) {\n\t\tfor (var i = arr.length-1; i >= 0; i--) {\n\t\t\tif (arr[i].el_type === item.el_type) {\n\t\t\t\tif (JSON.stringify(arr[i]) !== JSON.stringify(item))\n\t\t\t\t\tarr.push(item);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tarr.push(item);\n\t}\n\n})();\n\nmodule.exports = sequence;\n","var registerAudioContext = require('./register-audio-context.js');\n\nfunction activeAudioContext() {\n\tif (!window.abcjsAudioContext)\n\t\tregisterAudioContext();\n\treturn window.abcjsAudioContext;\n}\n\nmodule.exports = activeAudioContext;\n","// This turns the number of cents to detune into a value that is convenient to use in pitch calculations\n// A cent is 1/100 of a musical half step and is calculated exponentially over the course of an octave.\n// The equation is:\n// Two to the power of cents divided by 1200\n\nfunction centsToFactor(cents) {\n\treturn Math.pow(2, cents/1200);\n}\n\nmodule.exports = centsToFactor;\n","//\n// The algorithm for chords is:\n// - The chords are done in a separate track.\n// - If there are notes before the first chord, then put that much silence to start the track.\n// - The pattern of chord expression depends on the meter, and how many chords are in a measure.\n// - There is a possibility that a measure will have an incorrect number of beats, if that is the case, then\n// start the pattern anew on the next measure number.\n// - If a chord root is not A-G, then ignore it as if the chord wasn't there at all.\n// - If a chord modification isn't in our supported list, change it to a major triad.\n//\n// - There is a standard pattern of boom-chick for each time sig, or it can be overridden.\n// - For any unrecognized meter, play the full chord on each beat.\n//\n//\t- If there is a chord specified that is not on a beat, move it earlier to the previous beat, unless there is already a chord on that beat.\n//\t- Otherwise, move it later, unless there is already a chord on that beat.\n// \t- Otherwise, ignore it. (TODO-PER: expand this as more support is added.)\n//\n// If there is any note in the melody that has a rhythm head, then assume the melody controls the rhythm, so there is no chord added for that entire measure.\n\nvar parseCommon = require(\"../parse/abc_common\");\n\nvar ChordTrack = function ChordTrack(numVoices, chordsOff, midiOptions, meter) {\n\tthis.chordTrack = [];\n\tthis.chordTrackFinished = false;\n\tthis.chordChannel = numVoices; // first free channel for chords\n\tthis.currentChords = [];\n\tthis.lastChord;\n\tthis.chordLastBar;\n\tthis.chordsOff = !!chordsOff\n\tthis.gChordTacet = this.chordsOff;\n\tthis.hasRhythmHead = false;\n\tthis.transpose = 0;\n\tthis.lastBarTime = 0;\n\tthis.meter = meter;\n\tthis.tempoChangeFactor = 1;\n\n\tthis.bassInstrument = midiOptions.bassprog && midiOptions.bassprog.length === 1 ? midiOptions.bassprog[0] : 0;\n\tthis.chordInstrument = midiOptions.chordprog && midiOptions.chordprog.length === 1 ? midiOptions.chordprog[0] : 0;\n\tthis.boomVolume = midiOptions.bassvol && midiOptions.bassvol.length === 1 ? midiOptions.bassvol[0] : 64;\n\tthis.chickVolume = midiOptions.chordvol && midiOptions.chordvol.length === 1 ? midiOptions.chordvol[0] : 48;\n\n\tthis.overridePattern = midiOptions.gchord ? parseGChord(midiOptions.gchord[0]) : undefined\n};\n\nChordTrack.prototype.setMeter = function (meter) {\n\tthis.meter = meter\n};\n\nChordTrack.prototype.setTempoChangeFactor = function (tempoChangeFactor) {\n\tthis.tempoChangeFactor = tempoChangeFactor\n};\n\nChordTrack.prototype.setLastBarTime = function (lastBarTime) {\n\tthis.lastBarTime = lastBarTime\n};\n\nChordTrack.prototype.setTranspose = function (transpose) {\n\tthis.transpose = transpose\n};\n\nChordTrack.prototype.setRhythmHead = function (isRhythmHead, elem) {\n\tthis.hasRhythmHead = isRhythmHead\n\tvar ePitches = [];\n\tif (isRhythmHead) {\n\t\tif (this.lastChord && this.lastChord.chick) {\n\t\t\tfor (var i2 = 0; i2 < this.lastChord.chick.length; i2++) {\n\t\t\t\tvar note2 = parseCommon.clone(elem.pitches[0]);\n\t\t\t\tnote2.actualPitch = this.lastChord.chick[i2];\n\t\t\t\tePitches.push(note2);\n\t\t\t}\n\t\t}\n\t}\n\treturn ePitches\n};\n\nChordTrack.prototype.barEnd = function (element) {\n\tif (this.chordTrack.length > 0 && !this.chordTrackFinished) {\n\t\tthis.resolveChords(this.lastBarTime, timeToRealTime(element.time));\n\t\tthis.currentChords = [];\n\t}\n\tthis.chordLastBar = this.lastChord;\n};\n\nChordTrack.prototype.gChordOn = function (element) {\n\tif (!this.chordsOff)\n\t\tthis.gChordTacet = element.tacet;\n};\n\nChordTrack.prototype.paramChange = function (element) {\n\tswitch (element.el_type) {\n\t\tcase \"gchord\":\n\t\t\tthis.overridePattern = parseGChord(element.param);\n\t\t\tbreak;\n\t\tcase \"bassprog\":\n\t\t\tthis.bassInstrument = element.param;\n\t\t\tbreak;\n\t\tcase \"chordprog\":\n\t\t\tthis.chordInstrument = element.param;\n\t\t\tbreak;\n\t\tcase \"bassvol\":\n\t\t\tthis.boomVolume = element.param;\n\t\t\tbreak;\n\t\tcase \"chordvol\":\n\t\t\tthis.chickVolume = element.param;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tconsole.log(\"unhandled midi param\", element)\t\n\t}\n};\n\nChordTrack.prototype.finish = function () {\n\tif (!this.chordTrackEmpty()) // Don't do chords on more than one track, so turn off chord detection after we create it.\n\t\tthis.chordTrackFinished = true;\n};\n\nChordTrack.prototype.addTrack = function (tracks) {\n\tif (!this.chordTrackEmpty())\n\t\ttracks.push(this.chordTrack);\n};\n\nChordTrack.prototype.findChord = function (elem) {\n\tif (this.gChordTacet)\n\t\treturn 'break';\n\n\t// TODO-PER: Just using the first chord if there are more than one.\n\tif (this.chordTrackFinished || !elem.chord || elem.chord.length === 0)\n\t\treturn null;\n\n\t// Return the first annotation that is a regular chord: that is, it is in the default place or is a recognized \"tacet\" phrase.\n\tfor (var i = 0; i < elem.chord.length; i++) {\n\t\tvar ch = elem.chord[i];\n\t\tif (ch.position === 'default')\n\t\t\treturn ch.name;\n\t\tif (this.breakSynonyms.indexOf(ch.name.toLowerCase()) >= 0)\n\t\t\treturn 'break';\n\t}\n\treturn null;\n}\n\nChordTrack.prototype.interpretChord = function (name) {\n\t// chords have the format:\n\t// [root][acc][modifier][/][bass][acc]\n\t// (The chord might be surrounded by parens. Just ignore them.)\n\t// root must be present and must be from A-G.\n\t// acc is optional and can be # or b\n\t// The modifier can be a wide variety of things, like \"maj7\". As they are discovered, more are supported here.\n\t// If there is a slash, then there is a bass note, which can be from A-G, with an optional acc.\n\t// If the root is unrecognized, then \"undefined\" is returned and there is no chord.\n\t// If the modifier is unrecognized, a major triad is returned.\n\t// If the bass notes is unrecognized, it is ignored.\n\tif (name.length === 0)\n\t\treturn undefined;\n\tif (name === 'break')\n\t\treturn { chick: [] };\n\tvar root = name.substring(0, 1);\n\tif (root === '(') {\n\t\tname = name.substring(1, name.length - 2);\n\t\tif (name.length === 0)\n\t\t\treturn undefined;\n\t\troot = name.substring(0, 1);\n\t}\n\tvar bass = this.basses[root];\n\tif (!bass)\t// If the bass note isn't listed, then this was an unknown root. Only A-G are accepted.\n\t\treturn undefined;\n\t// Don't transpose the chords more than an octave.\n\tvar chordTranspose = this.transpose;\n\twhile (chordTranspose < -8)\n\t\tchordTranspose += 12;\n\twhile (chordTranspose > 8)\n\t\tchordTranspose -= 12;\n\tbass += chordTranspose;\n\tvar bass2 = bass - 5;\t// The alternating bass is a 4th below\n\tvar chick;\n\tif (name.length === 1)\n\t\tchick = this.chordNotes(bass, '');\n\tvar remaining = name.substring(1);\n\tvar acc = remaining.substring(0, 1);\n\tif (acc === 'b' || acc === '♭') {\n\t\tbass--;\n\t\tbass2--;\n\t\tremaining = remaining.substring(1);\n\t} else if (acc === '#' || acc === '♯') {\n\t\tbass++;\n\t\tbass2++;\n\t\tremaining = remaining.substring(1);\n\t}\n\tvar arr = remaining.split('/');\n\tchick = this.chordNotes(bass, arr[0]);\n\t// If the 5th is altered then the bass is altered. Normally the bass is 7 from the root, so adjust if it isn't.\n\tif (chick.length >= 3) {\n\t\tvar fifth = chick[2] - chick[0];\n\t\tbass2 = bass2 + fifth - 7;\n\t}\n\n\tif (arr.length === 2) {\n\t\tvar explicitBass = this.basses[arr[1].substring(0, 1)];\n\t\tif (explicitBass) {\n\t\t\tvar bassAcc = arr[1].substring(1);\n\t\t\tvar bassShift = { '#': 1, '♯': 1, 'b': -1, '♭': -1 }[bassAcc] || 0;\n\t\t\tbass = this.basses[arr[1].substring(0, 1)] + bassShift + chordTranspose;\n\t\t\tbass2 = bass;\n\t\t}\n\t}\n\treturn { boom: bass, boom2: bass2, chick: chick };\n}\n\nChordTrack.prototype.chordNotes = function (bass, modifier) {\n\tvar intervals = this.chordIntervals[modifier];\n\tif (!intervals) {\n\t\tif (modifier.slice(0, 2).toLowerCase() === 'ma' || modifier[0] === 'M')\n\t\t\tintervals = this.chordIntervals.M;\n\t\telse if (modifier[0] === 'm' || modifier[0] === '-')\n\t\t\tintervals = this.chordIntervals.m;\n\t\telse\n\t\t\tintervals = this.chordIntervals.M;\n\t}\n\tbass += 12;\t// the chord is an octave above the bass note.\n\tvar notes = [];\n\tfor (var i = 0; i < intervals.length; i++) {\n\t\tnotes.push(bass + intervals[i]);\n\t}\n\treturn notes;\n}\n\nChordTrack.prototype.writeNote = function (note, beatLength, volume, beat, noteLength, instrument) {\n\t// undefined means there is a stop time.\n\tif (note !== undefined)\n\t\tthis.chordTrack.push({ cmd: 'note', pitch: note, volume: volume, start: this.lastBarTime + beat * durationRounded(beatLength, this.tempoChangeFactor), duration: durationRounded(noteLength, this.tempoChangeFactor), gap: 0, instrument: instrument });\n}\n\nChordTrack.prototype.chordTrackEmpty = function () {\n\tvar isEmpty = true;\n\tfor (var i = 0; i < this.chordTrack.length && isEmpty; i++) {\n\t\tif (this.chordTrack[i].cmd === 'note')\n\t\t\tisEmpty = false\n\t}\n\treturn isEmpty;\n}\n\nChordTrack.prototype.resolveChords = function (startTime, endTime) {\n\t// If there is a rhythm head anywhere in the measure then don't add a separate rhythm track\n\tif (this.hasRhythmHead)\n\t\treturn\n\n\tvar num = this.meter.num;\n\tvar den = this.meter.den;\n\tvar beatLength = 1 / den;\n\tvar noteLength = beatLength / 2;\n\tvar thisMeasureLength = parseInt(num, 10) / parseInt(den, 10);\n\tvar portionOfAMeasure = thisMeasureLength - (endTime - startTime) / this.tempoChangeFactor;\n\tif (Math.abs(portionOfAMeasure) < 0.00001)\n\t\tportionOfAMeasure = 0;\n\n\t // there wasn't a new chord this measure, so use the last chord declared.\n\t // also the case where there is a chord declared in the measure, but not on its first beat.\n\tif (this.currentChords.length === 0 || this.currentChords[0].beat !== 0) {\n\t\tthis.currentChords.unshift({ beat: 0, chord: this.chordLastBar });\n\t}\n\n\t//console.log(this.currentChords)\n\tvar currentChordsExpanded = expandCurrentChords(this.currentChords, 8*num/den, beatLength)\n\t//console.log(currentChordsExpanded)\n\tvar thisPattern = this.overridePattern ? this.overridePattern : this.rhythmPatterns[num + '/' + den]\n\tif (portionOfAMeasure) {\n\t\tthisPattern = [];\n\t\tvar beatsPresent = ((endTime - startTime) / this.tempoChangeFactor) * 8;\n\t\tfor (var p = 0; p < beatsPresent/2; p += 2) {\n\t\t\tthisPattern.push(\"chick\");\n\t\t\tthisPattern.push(\"\");\n\t\t}\n\t}\n\tif (!thisPattern) {\n\t\tthisPattern = []\n\t\tfor (var p = 0; p < (8*num/den)/2; p++) {\n\t\t\tthisPattern.push('chick')\n\t\t\tthisPattern.push(\"\");\n\t\t}\n\t}\n\tvar firstBoom = true\n\t// If the pattern is overridden, it might be longer than the length of a measure. If so, then ignore the rest of it\n\tvar minLength = Math.min(thisPattern.length, currentChordsExpanded.length)\n\tfor (var p = 0; p < minLength; p++) {\n\t\tif (p > 0 && currentChordsExpanded[p-1] && currentChordsExpanded[p] && currentChordsExpanded[p-1].boom !== currentChordsExpanded[p].boom)\n\t\t\tfirstBoom = true\n\t\tvar type = thisPattern[p]\n\t\tvar isBoom = type.indexOf('boom') >= 0\n\t\t// If we changed chords at a time when we're not expecting a bass note, then add an extra bass note in if the first thing in the pattern is a bass note.\n\t\tvar newBass = !isBoom &&\n\t\t\tp !== 0 &&\n\t\t\tthisPattern[0].indexOf('boom') >= 0 &&\n\t\t\t(!currentChordsExpanded[p-1] || currentChordsExpanded[p-1].boom !== currentChordsExpanded[p].boom)\n\t\tvar pitches = resolvePitch(currentChordsExpanded[p], type, firstBoom, newBass)\n\t\tif (isBoom)\n\t\t\tfirstBoom = false\n\t\tfor (var oo = 0; oo < pitches.length; oo++) {\n\t\t\tthis.writeNote(pitches[oo], \n\t\t\t\t0.125,\n\t\t\t\tisBoom || newBass ? this.boomVolume : this.chickVolume,\n\t\t\t\tp,\n\t\t\t\tnoteLength,\n\t\t\t\tisBoom || newBass ? this.bassInstrument : this.chordInstrument\n\t\t\t)\n\t\t\tif (newBass)\n\t\t\t\tnewBass = false\n\t\t\telse\n\t\t\t\tisBoom = false // only the first note in a chord is a bass note. This handles the case where bass and chord are played at the same time.\n\t\t}\n\t}\n\treturn\n}\n\nChordTrack.prototype.processChord = function (elem) {\n\tif (this.chordTrackFinished)\n\t\treturn\n\tvar chord = this.findChord(elem);\n\tif (chord) {\n\t\tvar c = this.interpretChord(chord);\n\t\t// If this isn't a recognized chord, just completely ignore it.\n\t\tif (c) {\n\t\t\t// If we ever have a chord in this voice, then we add the chord track.\n\t\t\t// However, if there are chords on more than one voice, then just use the first voice.\n\t\t\tif (this.chordTrack.length === 0) {\n\t\t\t\tthis.chordTrack.push({ cmd: 'program', channel: this.chordChannel, instrument: this.chordInstrument });\n\t\t\t}\n\n\t\t\tthis.lastChord = c;\n\t\t\tvar barBeat = calcBeat(this.lastBarTime, timeToRealTime(elem.time));\n\t\t\tthis.currentChords.push({ chord: this.lastChord, beat: barBeat, start: timeToRealTime(elem.time) });\n\t\t}\n\t}\n}\n\nfunction resolvePitch(currentChord, type, firstBoom, newBass) {\n\tvar ret = []\n\tif (!currentChord)\n\t\treturn ret\n\tif (type.indexOf('boom') >= 0)\n\t\tret.push(firstBoom ? currentChord.boom : currentChord.boom2)\n\telse if (newBass)\n\t\tret.push(currentChord.boom)\n\tif (type.indexOf('chick') >= 0) {\n\t\tfor (var i = 0; i < currentChord.chick.length; i++)\n\t\t\tret.push(currentChord.chick[i])\n\t}\n\tswitch (type) {\n\t\tcase 'DO': ret.push(currentChord.chick[0]); break;\n\t\tcase 'MI': ret.push(currentChord.chick[1]); break;\n\t\tcase 'SOL': ret.push(currentChord.chick[2]); break;\n\t\tcase 'TI': currentChord.chick.length > 3 ? ret.push(currentChord.chick[2]) : ret.push(currentChord.chick[0]+12); break;\n\t\tcase 'TOP': currentChord.chick.length > 4 ? ret.push(currentChord.chick[2]) : ret.push(currentChord.chick[1]+12); break;\n\t\tcase 'do': ret.push(currentChord.chick[0]+12); break;\n\t\tcase 'mi': ret.push(currentChord.chick[1]+12); break;\n\t\tcase 'sol': ret.push(currentChord.chick[2]+12); break;\n\t\tcase 'ti': currentChord.chick.length > 3 ? ret.push(currentChord.chick[2]+12) : ret.push(currentChord.chick[0]+24); break;\n\t\tcase 'top': currentChord.chick.length > 4 ? ret.push(currentChord.chick[2]+12) : ret.push(currentChord.chick[1]+24); break;\n\t}\n\treturn ret\n}\n\nfunction parseGChord(gchord) {\n\t// TODO-PER: The spec is more complicated than this but for now this will not try to do anything with error cases like the wrong number of beats.\n\tvar pattern = []\n\tfor (var i = 0; i < gchord.length; i++) {\n\t\tvar ch = gchord[i]\n\t\tswitch(ch) {\n\t\t\tcase 'z' : pattern.push(''); break;\n\t\t\tcase '2' : pattern.push(''); break; // TODO-PER: This should extend the last note, but that's a small effect\n\t\t\tcase 'c' : pattern.push('chick'); break;\n\t\t\tcase 'b' : pattern.push('boom&chick'); break;\n\t\t\tcase 'f' : pattern.push('boom'); break;\n\t\t\tcase 'G' : pattern.push('DO'); break;\n\t\t\tcase 'H' : pattern.push('MI'); break;\n\t\t\tcase 'I' : pattern.push('SOL'); break;\n\t\t\tcase 'J' : pattern.push('TI'); break;\n\t\t\tcase 'K' : pattern.push('TOP'); break;\n\t\t\tcase 'g' : pattern.push('do'); break;\n\t\t\tcase 'h' : pattern.push('mi'); break;\n\t\t\tcase 'i' : pattern.push('sol'); break;\n\t\t\tcase 'j' : pattern.push('ti'); break;\n\t\t\tcase 'k' : pattern.push('top'); break;\n\t\t}\n\t}\n\treturn pattern\n}\n\n// This returns an array that has a chord for each 1/8th note position in the current measure\nfunction expandCurrentChords(currentChords, num8thNotes, beatLength) {\n\tbeatLength = beatLength * 8 // this is expressed as a fraction, so that 0.25 is a quarter notes. We want it to be the number of 8th notes\n\tvar chords = []\n\tif (currentChords.length === 0)\n\t\treturn chords\n\n\tvar currentChord = currentChords[0].chord\n\tfor (var i = 1; i < currentChords.length; i++) {\n\t\tvar current = currentChords[i]\n\t\twhile (chords.length < current.beat) {\n\t\t\tchords.push(currentChord)\n\t\t}\n\t\tcurrentChord = current.chord\n\t}\n\twhile (chords.length < num8thNotes)\n\t\tchords.push(currentChord)\n\treturn chords\n}\n\nfunction calcBeat(measureStart, currTime) {\n\tvar distanceFromStart = currTime - measureStart;\n\treturn distanceFromStart * 8;\n}\n\nChordTrack.prototype.breakSynonyms = ['break', '(break)', 'no chord', 'n.c.', 'tacet'];\n\nChordTrack.prototype.basses = {\n\t'A': 33, 'B': 35, 'C': 36, 'D': 38, 'E': 40, 'F': 41, 'G': 43\n};\n\nChordTrack.prototype.chordIntervals = {\n\t// diminished (all flat 5 chords)\n\t'dim': [0, 3, 6],\n\t'°': [0, 3, 6],\n\t'˚': [0, 3, 6],\n\n\t'dim7': [0, 3, 6, 9],\n\t'°7': [0, 3, 6, 9],\n\t'˚7': [0, 3, 6, 9],\n\n\t'ø7': [0, 3, 6, 10],\n\t'm7(b5)': [0, 3, 6, 10],\n\t'm7b5': [0, 3, 6, 10],\n\t'm7♭5': [0, 3, 6, 10],\n\t'-7(b5)': [0, 3, 6, 10],\n\t'-7b5': [0, 3, 6, 10],\n\n\t'7b5': [0, 4, 6, 10],\n\t'7(b5)': [0, 4, 6, 10],\n\t'7♭5': [0, 4, 6, 10],\n\n\t'7(b9,b5)': [0, 4, 6, 10, 13],\n\t'7b9,b5': [0, 4, 6, 10, 13],\n\t'7(#9,b5)': [0, 4, 6, 10, 15],\n\t'7#9b5': [0, 4, 6, 10, 15],\n\t'maj7(b5)': [0, 4, 6, 11],\n\t'maj7b5': [0, 4, 6, 11],\n\t'13(b5)': [0, 4, 6, 10, 14, 21],\n\t'13b5': [0, 4, 6, 10, 14, 21],\n\n\t// minor (all normal 5, minor 3 chords)\n\t'm': [0, 3, 7],\n\t'-': [0, 3, 7],\n\t'm6': [0, 3, 7, 9],\n\t'-6': [0, 3, 7, 9],\n\t'm7': [0, 3, 7, 10],\n\t'-7': [0, 3, 7, 10],\n\n\t'-(b6)': [0, 3, 7, 8],\n\t'-b6': [0, 3, 7, 8],\n\t'-6/9': [0, 3, 7, 9, 14],\n\t'-7(b9)': [0, 3, 7, 10, 13],\n\t'-7b9': [0, 3, 7, 10, 13],\n\t'-maj7': [0, 3, 7, 11],\n\t'-9+7': [0, 3, 7, 11, 13],\n\t'-11': [0, 3, 7, 11, 14, 17],\n\t'm11': [0, 3, 7, 11, 14, 17],\n\t'-maj9': [0, 3, 7, 11, 14],\n\t'-∆9': [0, 3, 7, 11, 14],\n\t'mM9': [0, 3, 7, 11, 14],\n\n\t// major (all normal 5, major 3 chords)\n\t'M': [0, 4, 7],\n\t'6': [0, 4, 7, 9],\n\t'6/9': [0, 4, 7, 9, 14],\n\t'6add9': [0, 4, 7, 9, 14],\n\t'69': [0, 4, 7, 9, 14],\n\n\t'7': [0, 4, 7, 10],\n\t'9': [0, 4, 7, 10, 14],\n\t'11': [0, 7, 10, 14, 17],\n\t'13': [0, 4, 7, 10, 14, 21],\n\t'7b9': [0, 4, 7, 10, 13],\n\t'7♭9': [0, 4, 7, 10, 13],\n\t'7(b9)': [0, 4, 7, 10, 13],\n\t'7(#9)': [0, 4, 7, 10, 15],\n\t'7#9': [0, 4, 7, 10, 15],\n\t'(13)': [0, 4, 7, 10, 14, 21],\n\t'7(9,13)': [0, 4, 7, 10, 14, 21],\n\t'7(#9,b13)': [0, 4, 7, 10, 15, 20],\n\t'7(#11)': [0, 4, 7, 10, 14, 18],\n\t'7#11': [0, 4, 7, 10, 14, 18],\n\t'7(b13)': [0, 4, 7, 10, 20],\n\t'7b13': [0, 4, 7, 10, 20],\n\t'9(#11)': [0, 4, 7, 10, 14, 18],\n\t'9#11': [0, 4, 7, 10, 14, 18],\n\t'13(#11)': [0, 4, 7, 10, 18, 21],\n\t'13#11': [0, 4, 7, 10, 18, 21],\n\n\t'maj7': [0, 4, 7, 11],\n\t'∆7': [0, 4, 7, 11],\n\t'Δ7': [0, 4, 7, 11],\n\t'maj9': [0, 4, 7, 11, 14],\n\t'maj7(9)': [0, 4, 7, 11, 14],\n\t'maj7(11)': [0, 4, 7, 11, 17],\n\t'maj7(#11)': [0, 4, 7, 11, 18],\n\t'maj7(13)': [0, 4, 7, 14, 21],\n\t'maj7(9,13)': [0, 4, 7, 11, 14, 21],\n\n\t'7sus4': [0, 5, 7, 10],\n\t'm7sus4': [0, 3, 7, 10, 17],\n\t'sus4': [0, 5, 7],\n\t'sus2': [0, 2, 7],\n\t'7sus2': [0, 2, 7, 10],\n\t'9sus4': [0, 5, 7, 10, 14],\n\t'13sus4': [0, 5, 7, 10, 14, 21],\n\n\t// augmented (all sharp 5 chords)\n\t'aug7': [0, 4, 8, 10],\n\t'+7': [0, 4, 8, 10],\n\t'+': [0, 4, 8],\n\t'7#5': [0, 4, 8, 10],\n\t'7♯5': [0, 4, 8, 10],\n\t'7+5': [0, 4, 8, 10],\n\t'9#5': [0, 4, 8, 10, 14],\n\t'9♯5': [0, 4, 8, 10, 14],\n\t'9+5': [0, 4, 8, 10, 14],\n\t'-7(#5)': [0, 3, 8, 10],\n\t'-7#5': [0, 3, 8, 10],\n\t'7(#5)': [0, 4, 8, 10],\n\t'7(b9,#5)': [0, 4, 8, 10, 13],\n\t'7b9#5': [0, 4, 8, 10, 13],\n\t'maj7(#5)': [0, 4, 8, 11],\n\t'maj7#5': [0, 4, 8, 11],\n\t'maj7(#5,#11)': [0, 4, 8, 11, 18],\n\t'maj7#5#11': [0, 4, 8, 11, 18],\n\t'9(#5)': [0, 4, 8, 10, 14],\n\t'13(#5)': [0, 4, 8, 10, 14, 21],\n\t'13#5': [0, 4, 8, 10, 14, 21]\n};\n\nChordTrack.prototype.rhythmPatterns = {\n\t\"2/2\": ['boom', '', '', '', 'chick', '', '', ''],\n\t\"3/2\": ['boom', '', '', '', 'chick', '', '', '', 'chick', '', '', ''],\n\t\"4/2\": ['boom', '', '', '', 'chick', '', '', '', 'boom', '', '', '', 'chick', '', '', ''],\n\n\t\"2/4\": ['boom', '', 'chick', ''],\n\t\"3/4\": ['boom', '', 'chick', '', 'chick', ''],\n\t\"4/4\": ['boom', '', 'chick', '', 'boom', '', 'chick', ''],\n\t\"5/4\": ['boom', '', 'chick', '', 'chick', '', 'boom', '', 'chick', ''],\n\t\"6/4\": ['boom', '', 'chick', '', 'boom', '', 'chick', '', 'boom', '', 'chick', ''],\n\n\t\"3/8\": ['boom', '', 'chick'],\n\t\"6/8\": ['boom', '', 'chick', 'boom', '', 'chick'],\n\t\"9/8\": ['boom', '', 'chick', 'boom', '', 'chick', 'boom', '', 'chick'],\n\t\"12/8\": ['boom', '', 'chick', 'boom', '', 'chick', 'boom', '', 'chick', 'boom', '', 'chick'],\n};\n\n// TODO-PER: these are repeated in flattener. Can it be shared?\n\nfunction timeToRealTime(time) {\n\treturn time / 1000000;\n}\n\nfunction durationRounded(duration, tempoChangeFactor) {\n\treturn Math.round(duration * tempoChangeFactor * 1000000) / 1000000;\n}\n\nmodule.exports = ChordTrack;\n","// Convert the input structure to a more useful structure where each item has a length of its own.\n\nvar instrumentIndexToName = require('./instrument-index-to-name');\n\nvar createNoteMap = function(sequence) {\n\tvar map = [];\n\tfor (var i = 0; i < sequence.tracks.length; i++)\n\t\tmap.push([]);\n\n\t// TODO-PER: handle more than one note in a track\n\tvar nextNote = {};\n\tvar currentInstrument = instrumentIndexToName[0];\n\t// ev.start and ev.duration are in whole notes. Need to turn them into\n\tsequence.tracks.forEach(function(track, i) {\n\t\ttrack.forEach(function(ev) {\n\t\t\tswitch (ev.cmd) {\n\t\t\t\tcase \"note\":\n\t\t\t\t\t// ev contains:\n\t\t\t\t\t// {\"cmd\":\"note\",\"pitch\":72,\"volume\":95,\"start\":0.125,\"duration\":0.25,\"instrument\":0,\"gap\":0}\n\t\t\t\t\t// where start and duration are in whole notes, gap is in 1/1920 of a second (i.e. MIDI ticks)\n\t\t\t\t\tvar inst = ev.instrument !== undefined ? instrumentIndexToName[ev.instrument] : currentInstrument\n\t\t\t\t\tif (ev.duration > 0) {\n\t\t\t\t\t\tvar gap = ev.gap ? ev.gap : 0;\n\t\t\t\t\t\tvar len = ev.duration;\n\t\t\t\t\t\tgap = Math.min(gap, len * 2 / 3);\n\t\t\t\t\t\tvar obj = {\n\t\t\t\t\t\t\tpitch: ev.pitch,\n\t\t\t\t\t\t\tinstrument: inst,\n\t\t\t\t\t\t\tstart: Math.round((ev.start) * 1000000)/1000000,\n\t\t\t\t\t\t\tend: Math.round((ev.start + len - gap) * 1000000)/1000000,\n\t\t\t\t\t\t\tvolume: ev.volume\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (ev.startChar)\n\t\t\t\t\t\t\tobj.startChar = ev.startChar;\n\t\t\t\t\t\tif (ev.endChar)\n\t\t\t\t\t\t\tobj.endChar = ev.endChar;\n\t\t\t\t\t\tif (ev.style)\n\t\t\t\t\t\t\tobj.style = ev.style;\n\t\t\t\t\t\tif (ev.cents)\n\t\t\t\t\t\t\tobj.cents = ev.cents;\n\t\t\t\t\t\tmap[i].push(obj);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"program\":\n\t\t\t\t\tcurrentInstrument = instrumentIndexToName[ev.instrument];\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"text\":\n\t\t\t\t\t// Ignore the track names - that is just for midi files.\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t// TODO-PER: handle other event types\n\t\t\t\t\tconsole.log(\"Unhandled midi event\", ev);\n\t\t\t}\n\t\t});\n\t});\n\treturn map;\n};\n\nmodule.exports = createNoteMap;\n","var supportsAudio = require('./supports-audio');\nvar registerAudioContext = require('./register-audio-context');\nvar activeAudioContext = require('./active-audio-context');\nvar parseCommon = require('../parse/abc_common');\n\nvar loopImage = require('./images/loop.svg.js');\nvar playImage = require('./images/play.svg.js');\nvar pauseImage = require('./images/pause.svg.js');\nvar loadingImage = require('./images/loading.svg.js');\nvar resetImage = require('./images/reset.svg.js');\n\nfunction CreateSynthControl(parent, options) {\n\tvar self = this;\n\t// parent is either an element or a selector.\n\tif (typeof parent === \"string\") {\n\t\tvar selector = parent;\n\t\tparent = document.querySelector(selector);\n\t\tif (!parent)\n\t\t\tthrow new Error(\"Cannot find element \\\"\" + selector + \"\\\" in the DOM.\");\n\t} else if (!(parent instanceof HTMLElement))\n\t\tthrow new Error(\"The first parameter must be a valid element or selector in the DOM.\");\n\n\tself.parent = parent;\n\tself.options = {};\n\tif (options)\n\t\tself.options = parseCommon.clone(options);\n\n\t// This can be called in the following cases:\n\t// AC already registered and not suspended\n\t// AC already registered and suspended\n\t// AC not registered and not passed in\n\t// AC not registered but passed in (but suspended)\n\t// AC not registered but passed in (not suspended)\n\t// If the AC is already registered, then just use it - ignore what is passed in\n\t// Create the AC if necessary if there isn't one already.\n\t// We don't care right now if the AC is suspended - whenever a button is clicked then we check it.\n\tif (self.options.ac)\n\t\tregisterAudioContext(self.options.ac);\n\tbuildDom(self.parent, self.options);\n\tattachListeners(self);\n\n\tself.disable = function(isDisabled) {\n\t\tvar el = self.parent.querySelector(\".abcjs-inline-audio\");\n\t\tif (isDisabled)\n\t\t\tel.classList.add(\"abcjs-disabled\");\n\t\telse\n\t\t\tel.classList.remove(\"abcjs-disabled\");\n\t};\n\tself.setWarp = function(tempo, warp) {\n\t\tvar el = self.parent.querySelector(\".abcjs-midi-tempo\");\n\t\tel.value = Math.round(warp);\n\t\tself.setTempo(tempo)\n\t};\n\tself.setTempo = function(tempo) {\n\t\tvar el = self.parent.querySelector(\".abcjs-midi-current-tempo\");\n\t\tif (el)\n\t\t\tel.innerHTML = Math.round(tempo);\n\t};\n\tself.resetAll = function() {\n\t\tvar pushedButtons = self.parent.querySelectorAll(\".abcjs-pushed\");\n\t\tfor (var i = 0; i < pushedButtons.length; i++) {\n\t\t\tvar button = pushedButtons[i];\n\t\t\tbutton.classList.remove(\"abcjs-pushed\");\n\t\t}\n\t};\n\tself.pushPlay = function(push) {\n\t\tvar startButton = self.parent.querySelector(\".abcjs-midi-start\");\n\t\tif (!startButton)\n\t\t\treturn;\n\t\tif (push)\n\t\t\tstartButton.classList.add(\"abcjs-pushed\");\n\t\telse\n\t\t\tstartButton.classList.remove(\"abcjs-pushed\");\n\t};\n\tself.pushLoop = function(push) {\n\t\tvar loopButton = self.parent.querySelector(\".abcjs-midi-loop\");\n\t\tif (!loopButton)\n\t\t\treturn;\n\t\tif (push)\n\t\t\tloopButton.classList.add(\"abcjs-pushed\");\n\t\telse\n\t\t\tloopButton.classList.remove(\"abcjs-pushed\");\n\t};\n\n\tself.setProgress = function (percent, totalTime) {\n\t\tvar progressBackground = self.parent.querySelector(\".abcjs-midi-progress-background\");\n\t\tvar progressThumb = self.parent.querySelector(\".abcjs-midi-progress-indicator\");\n\t\tif (!progressBackground || !progressThumb)\n\t\t\treturn;\n\t\tvar width = progressBackground.clientWidth;\n\t\tvar left = width * percent;\n\t\tprogressThumb.style.left = left + \"px\";\n\n\t\tvar clock = self.parent.querySelector(\".abcjs-midi-clock\");\n\t\tif (clock) {\n\t\t\tvar totalSeconds = (totalTime * percent) / 1000;\n\t\t\tvar minutes = Math.floor(totalSeconds / 60);\n\t\t\tvar seconds = Math.floor(totalSeconds % 60);\n\t\t\tvar secondsFormatted = seconds < 10 ? \"0\" + seconds : seconds;\n\t\t\tclock.innerHTML = minutes + \":\" + secondsFormatted;\n\t\t}\n\t};\n\n\tif (self.options.afterResume) {\n\t\tvar isResumed = false;\n\t\tif (self.options.ac) {\n\t\t\tisResumed = self.options.ac.state !== \"suspended\";\n\t\t} else if (activeAudioContext()) {\n\t\t\tisResumed = activeAudioContext().state !== \"suspended\";\n\t\t}\n\t\tif (isResumed)\n\t\t\tself.options.afterResume();\n\t}\n}\n\nfunction buildDom(parent, options) {\n\tvar hasLoop = !!options.loopHandler;\n\tvar hasRestart = !!options.restartHandler;\n\tvar hasPlay = !!options.playHandler || !!options.playPromiseHandler;\n\tvar hasProgress = !!options.progressHandler;\n\tvar hasWarp = !!options.warpHandler;\n\tvar hasClock = options.hasClock !== false;\n\n\tvar html = '<div class=\"abcjs-inline-audio\">\\n';\n\tif (hasLoop) {\n\t\tvar repeatTitle = options.repeatTitle ? options.repeatTitle : \"Click to toggle play once/repeat.\";\n\t\tvar repeatAria = options.repeatAria ? options.repeatAria : repeatTitle;\n\t\thtml += '<button type=\"button\" class=\"abcjs-midi-loop abcjs-btn\" title=\"' + repeatTitle + '\" aria-label=\"' + repeatAria + '\">' + loopImage + '</button>\\n';\n\t}\n\tif (hasRestart) {\n\t\tvar restartTitle = options.restartTitle ? options.restartTitle : \"Click to go to beginning.\";\n\t\tvar restartAria = options.restartAria ? options.restartAria : restartTitle;\n\t\thtml += '<button type=\"button\" class=\"abcjs-midi-reset abcjs-btn\" title=\"' + restartTitle + '\" aria-label=\"' + restartAria + '\">' + resetImage + '</button>\\n';\n\t}\n\tif (hasPlay) {\n\t\tvar playTitle = options.playTitle ? options.playTitle : \"Click to play/pause.\";\n\t\tvar playAria = options.playAria ? options.playAria : playTitle;\n\t\thtml += '<button type=\"button\" class=\"abcjs-midi-start abcjs-btn\" title=\"' + playTitle + '\" aria-label=\"' + playAria + '\">' + playImage + pauseImage + loadingImage + '</button>\\n';\n\t}\n\tif (hasProgress) {\n\t\tvar randomTitle = options.randomTitle ? options.randomTitle : \"Click to change the playback position.\";\n\t\tvar randomAria = options.randomAria ? options.randomAria : randomTitle;\n\t\thtml += '<button type=\"button\" class=\"abcjs-midi-progress-background\" title=\"' + randomTitle + '\" aria-label=\"' + randomAria + '\"><span class=\"abcjs-midi-progress-indicator\"></span></button>\\n';\n\t}\n\tif (hasClock) {\n\t\thtml += '<span class=\"abcjs-midi-clock\"></span>\\n';\n\t}\n\tif (hasWarp) {\n\t\tvar warpTitle = options.warpTitle ? options.warpTitle : \"Change the playback speed.\";\n\t\tvar warpAria = options.warpAria ? options.warpAria : warpTitle;\n\t\tvar bpm = options.bpm ? options.bpm : \"BPM\";\n\t\thtml += '<span class=\"abcjs-tempo-wrapper\"><label><input class=\"abcjs-midi-tempo\" type=\"number\" min=\"1\" max=\"300\" value=\"100\" title=\"' + warpTitle + '\" aria-label=\"' + warpAria + '\">%</label><span>&nbsp;(<span class=\"abcjs-midi-current-tempo\"></span> ' + bpm + ')</span></span>\\n';\n\t}\n\thtml += '<div class=\"abcjs-css-warning\" style=\"font-size: 12px;color:red;border: 1px solid red;text-align: center;width: 300px;margin-top: 4px;font-weight: bold;border-radius: 4px;\">CSS required: load abcjs-audio.css</div>';\n\thtml += '</div>\\n';\n\tparent.innerHTML = html;\n}\n\nfunction acResumerMiddleWare(next, ev, playBtn, afterResume, isPromise) {\n\tvar needsInit = true;\n\tif (!activeAudioContext()) {\n\t\tregisterAudioContext();\n\t} else {\n\t\tneedsInit = activeAudioContext().state === \"suspended\";\n\t}\n\tif (!supportsAudio()) {\n\t\tthrow { status: \"NotSupported\", message: \"This browser does not support audio.\"};\n\t}\n\n\tif ((needsInit || isPromise) && playBtn)\n\t\tplayBtn.classList.add(\"abcjs-loading\");\n\n\tif (needsInit) {\n\t\tactiveAudioContext().resume().then(function () {\n\t\t\tif (afterResume) {\n\t\t\t\tafterResume().then(function (response) {\n\t\t\t\t\tdoNext(next, ev, playBtn, isPromise);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tdoNext(next, ev, playBtn, isPromise);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tdoNext(next, ev, playBtn, isPromise);\n\t}\n}\n\nfunction doNext(next, ev, playBtn, isPromise) {\n\tif (isPromise) {\n\t\tnext(ev).then(function() {\n\t\t\tif (playBtn)\n\t\t\t\tplayBtn.classList.remove(\"abcjs-loading\");\n\t\t});\n\t} else {\n\t\tnext(ev);\n\t\tif (playBtn)\n\t\t\tplayBtn.classList.remove(\"abcjs-loading\");\n\t}\n}\n\nfunction attachListeners(self) {\n\tvar hasLoop = !!self.options.loopHandler;\n\tvar hasRestart = !!self.options.restartHandler;\n\tvar hasPlay = !!self.options.playHandler || !!self.options.playPromiseHandler;\n\tvar hasProgress = !!self.options.progressHandler;\n\tvar hasWarp = !!self.options.warpHandler;\n\tvar playBtn = self.parent.querySelector(\".abcjs-midi-start\");\n\n\tif (hasLoop)\n\t\tself.parent.querySelector(\".abcjs-midi-loop\").addEventListener(\"click\", function(ev){acResumerMiddleWare(self.options.loopHandler, ev, playBtn, self.options.afterResume)});\n\tif (hasRestart)\n\t\tself.parent.querySelector(\".abcjs-midi-reset\").addEventListener(\"click\", function(ev){acResumerMiddleWare(self.options.restartHandler, ev, playBtn, self.options.afterResume)});\n\tif (hasPlay)\n\t\tplayBtn.addEventListener(\"click\", function(ev){\n\t\t\tacResumerMiddleWare(\n\t\t\t\tself.options.playPromiseHandler || self.options.playHandler,\n\t\t\t\tev,\n\t\t\t\tplayBtn,\n\t\t\t\tself.options.afterResume,\n\t\t\t\t!!self.options.playPromiseHandler)\n\t\t});\n\tif (hasProgress)\n\t\tself.parent.querySelector(\".abcjs-midi-progress-background\").addEventListener(\"click\", function(ev){acResumerMiddleWare(self.options.progressHandler, ev, playBtn, self.options.afterResume)});\n\tif (hasWarp)\n\t\tself.parent.querySelector(\".abcjs-midi-tempo\").addEventListener(\"change\", function(ev){acResumerMiddleWare(self.options.warpHandler, ev, playBtn, self.options.afterResume)});\n}\nmodule.exports = CreateSynthControl;\n","var getNote = require('./load-note');\nvar createNoteMap = require('./create-note-map');\nvar registerAudioContext = require('./register-audio-context');\nvar activeAudioContext = require('./active-audio-context');\nvar supportsAudio = require('./supports-audio');\nvar pitchToNoteName = require('./pitch-to-note-name');\nvar instrumentIndexToName = require('./instrument-index-to-name');\nvar downloadBuffer = require('./download-buffer');\nvar placeNote = require('./place-note');\nvar soundsCache = require('./sounds-cache');\n\n// TODO-PER: remove the midi tests from here: I don't think the object can be constructed unless it passes.\nvar notSupportedMessage = \"MIDI is not supported in this browser.\";\n\nvar originalSoundFontUrl = \"https://paulrosen.github.io/midi-js-soundfonts/abcjs/\";\n// These are the original soundfonts supplied. They will need a volume boost:\nvar defaultSoundFontUrl = \"https://paulrosen.github.io/midi-js-soundfonts/FluidR3_GM/\";\nvar alternateSoundFontUrl = \"https://paulrosen.github.io/midi-js-soundfonts/MusyngKite/\";\n\nfunction CreateSynth() {\n\tvar self = this;\n\tself.audioBufferPossible = undefined;\n\tself.directSource = []; // type: AudioBufferSourceNode\n\tself.startTimeSec = undefined; // the time (in seconds) that the audio started: used for pause to get the pausedTimeSec.\n\tself.pausedTimeSec = undefined; // the position (in seconds) that the audio was paused: used for resume.\n\tself.audioBuffers = []; // cache of the buffers so starting play can be fast.\n\tself.duration = undefined; // the duration of the tune in seconds.\n\tself.isRunning = false; // whether there is currently a sound buffer running.\n\tself.options = undefined\n\tself.pickupLength = 0\n\n\t// Load and cache all needed sounds\n\tself.init = function(options) {\n\t\tif (!options)\n\t\t\toptions = {};\n\t\tif (options.options)\n\t\t\tself.options = options.options\n\t\tregisterAudioContext(options.audioContext); // This works no matter what - if there is already an ac it is a nop; if the context is not passed in, then it creates one.\n\t\tvar startTime = activeAudioContext().currentTime;\n\t\tself.debugCallback = options.debugCallback;\n\t\tif (self.debugCallback)\n\t\t\tself.debugCallback(\"init called\");\n\t\tself.audioBufferPossible = self._deviceCapable();\n\t\tif (!self.audioBufferPossible)\n\t\t\treturn Promise.reject({ status: \"NotSupported\", message: notSupportedMessage});\n\t\tvar params = options.options ? options.options : {};\n\t\tself.soundFontUrl = params.soundFontUrl ? params.soundFontUrl : defaultSoundFontUrl;\n\t\tif (self.soundFontUrl[self.soundFontUrl.length-1] !== '/')\n\t\t\tself.soundFontUrl += '/';\n\t\tif (params.soundFontVolumeMultiplier || params.soundFontVolumeMultiplier === 0)\n\t\t\tself.soundFontVolumeMultiplier = params.soundFontVolumeMultiplier;\n\t\telse if (self.soundFontUrl === defaultSoundFontUrl || self.soundFontUrl === alternateSoundFontUrl)\n\t\t\tself.soundFontVolumeMultiplier = 3.0;\n\t\telse if (self.soundFontUrl === originalSoundFontUrl)\n\t\t\tself.soundFontVolumeMultiplier = 0.4;\n\t\telse\n\t\t\tself.soundFontVolumeMultiplier = 1.0;\n\t\tif (params.programOffsets)\n\t\t\tself.programOffsets = params.programOffsets;\n\t\telse if (self.soundFontUrl === originalSoundFontUrl)\n\t\t\tself.programOffsets = {\n\t\t\t\t\"bright_acoustic_piano\": 20,\n\t\t\t\t\"honkytonk_piano\": 20,\n\t\t\t\t\"electric_piano_1\": 30,\n\t\t\t\t\"electric_piano_2\": 30,\n\t\t\t\t\"harpsichord\": 40,\n\t\t\t\t\"clavinet\": 20,\n\t\t\t\t\"celesta\": 20,\n\t\t\t\t\"glockenspiel\": 40,\n\t\t\t\t\"vibraphone\": 30,\n\t\t\t\t\"marimba\": 35,\n\t\t\t\t\"xylophone\": 30,\n\t\t\t\t\"tubular_bells\": 35,\n\t\t\t\t\"dulcimer\": 30,\n\t\t\t\t\"drawbar_organ\": 20,\n\t\t\t\t\"percussive_organ\": 25,\n\t\t\t\t\"rock_organ\": 20,\n\t\t\t\t\"church_organ\": 40,\n\t\t\t\t\"reed_organ\": 40,\n\t\t\t\t\"accordion\": 40,\n\t\t\t\t\"harmonica\": 40,\n\t\t\t\t\"acoustic_guitar_nylon\": 20,\n\t\t\t\t\"acoustic_guitar_steel\": 30,\n\t\t\t\t\"electric_guitar_jazz\": 25,\n\t\t\t\t\"electric_guitar_clean\": 15,\n\t\t\t\t\"electric_guitar_muted\": 35,\n\t\t\t\t\"overdriven_guitar\": 25,\n\t\t\t\t\"distortion_guitar\": 20,\n\t\t\t\t\"guitar_harmonics\": 30,\n\t\t\t\t\"electric_bass_finger\": 15,\n\t\t\t\t\"electric_bass_pick\": 30,\n\t\t\t\t\"fretless_bass\": 40,\n\t\t\t\t\"violin\": 105,\n\t\t\t\t\"viola\": 50,\n\t\t\t\t\"cello\": 40,\n\t\t\t\t\"contrabass\": 60,\n\t\t\t\t\"trumpet\": 10,\n\t\t\t\t\"trombone\": 90,\n\t\t\t\t\"alto_sax\": 20,\n\t\t\t\t\"tenor_sax\": 20,\n\t\t\t\t\"clarinet\": 20,\n\t\t\t\t\"flute\": 50,\n\t\t\t\t\"banjo\": 50,\n\t\t\t\t\"woodblock\": 20,\n\t\t\t};\n\t\telse\n\t\t\tself.programOffsets = {};\n\t\tvar p = params.fadeLength !== undefined ? parseInt(params.fadeLength,10) : NaN;\n\t\tself.fadeLength = isNaN(p) ? 200 : p;\n\t\tp = params.noteEnd !== undefined ? parseInt(params.noteEnd,10) : NaN;\n\t\tself.noteEnd = isNaN(p) ? 0 : p;\n\n\t\tself.pan = params.pan;\n\t\tself.meterSize = 1;\n\t\tif (options.visualObj) {\n\t\t\tself.flattened = options.visualObj.setUpAudio(params);\n\t\t\tvar meter = options.visualObj.getMeterFraction();\n\t\t\tif (meter.den)\n\t\t\t\tself.meterSize = options.visualObj.getMeterFraction().num / options.visualObj.getMeterFraction().den;\n\t\t\tself.pickupLength = options.visualObj.getPickupLength()\n\t\t} else if (options.sequence)\n\t\t\tself.flattened = options.sequence;\n\t\telse\n\t\t\treturn Promise.reject(new Error(\"Must pass in either a visualObj or a sequence\"));\n\t\tself.millisecondsPerMeasure = options.millisecondsPerMeasure ? options.millisecondsPerMeasure : (options.visualObj ? options.visualObj.millisecondsPerMeasure(self.flattened.tempo) : 1000);\n\t\tself.beatsPerMeasure = options.visualObj ? options.visualObj.getBeatsPerMeasure() : 4;\n\t\tself.sequenceCallback = params.sequenceCallback;\n\t\tself.callbackContext = params.callbackContext;\n\t\tself.onEnded = params.onEnded;\n\t\tself.meterFraction = options.visualObj ? options.visualObj.getMeterFraction() : {den: 1} // If we are given a sequence instead of a regular visual obj, then don't do the swing\n\n\t\tvar allNotes = {};\n\t\tvar cached = [];\n\t\tvar errorNotes = [];\n\t\tvar currentInstrument = instrumentIndexToName[0];\n\t\tself.flattened.tracks.forEach(function(track) {\n\t\t\ttrack.forEach(function(event) {\n\t\t\t\tif (event.cmd === \"program\" && instrumentIndexToName[event.instrument])\n\t\t\t\t\tcurrentInstrument = instrumentIndexToName[event.instrument];\n\t\t\t\tif (event.pitch !== undefined) {\n\t\t\t\t\tvar pitchNumber = event.pitch;\n\t\t\t\t\tvar noteName = pitchToNoteName[pitchNumber];\n\t\t\t\t\tvar inst = event.instrument !== undefined ? instrumentIndexToName[event.instrument] : currentInstrument\n\t\t\t\t\tif (noteName) {\n\t\t\t\t\t\tif (!allNotes[inst])\n\t\t\t\t\t\t\tallNotes[inst] = {};\n\t\t\t\t\t\tif (!soundsCache[inst] || !soundsCache[inst][noteName])\n\t\t\t\t\t\t\tallNotes[inst][noteName] = true;\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tvar label2 = inst+\":\"+noteName\n\t\t\t\t\t\t\tif (cached.indexOf(label2) < 0)\n\t\t\t\t\t\t\t\tcached.push(label2);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar label = inst+\":\"+noteName\n\t\t\t\t\t\tconsole.log(\"Can't find note: \", pitchNumber, label);\n\t\t\t\t\t\tif (errorNotes.indexOf(label) < 0)\n\t\t\t\t\t\t\terrorNotes.push(label)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tif (self.debugCallback)\n\t\t\tself.debugCallback(\"note gathering time = \" + Math.floor((activeAudioContext().currentTime - startTime)*1000)+\"ms\");\n\t\tstartTime = activeAudioContext().currentTime;\n\n\t\tvar notes = [];\n\t\tObject.keys(allNotes).forEach(function(instrument) {\n\t\t\tObject.keys(allNotes[instrument]).forEach(function(note) {\n\t\t\t\tnotes.push({ instrument: instrument, note: note });\n\t\t\t});\n\t\t});\n\t\tif (self.debugCallback)\n\t\t\tself.debugCallback(\"notes \"+JSON.stringify(notes));\n\n\t\t// If there are lots of notes, load them in batches\n\t\tvar batches = [];\n\t\tvar CHUNK = 256;\n\t\tfor (var i=0; i < notes.length; i += CHUNK) {\n\t\t\tbatches.push(notes.slice(i, i + CHUNK));\n\t\t}\n\n\t\treturn new Promise(function(resolve, reject) {\n\t\t\tvar results = {\n\t\t\t\tcached: cached,\n\t\t\t\terror: errorNotes,\n\t\t\t\tloaded: []\n\t\t\t};\n\n\t\t\tvar index = 0;\n\t\t\tvar next = function() {\n\t\t\t\tif (self.debugCallback)\n\t\t\t\t\tself.debugCallback(\"loadBatch idx=\"+index+ \" len=\"+batches.length);\n\t\n\t\t\t\tif (index < batches.length) {\n\t\t\t\t\tself._loadBatch(batches[index], self.soundFontUrl, startTime).then(function(data) {\n\t\t\t\t\t\tif (self.debugCallback)\n\t\t\t\t\t\t\tself.debugCallback(\"loadBatch then\");\n\t\t\t\t\t\tstartTime = activeAudioContext().currentTime;\n\t\t\t\t\t\tif (data) {\n\t\t\t\t\t\t\tif (data.error)\n\t\t\t\t\t\t\t\tresults.error = results.error.concat(data.error);\n\t\t\t\t\t\t\tif (data.loaded)\n\t\t\t\t\t\t\t\tresults.loaded = results.loaded.concat(data.loaded);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t\tnext();\n\t\t\t\t\t}, reject);\n\t\t\t\t} else {\n\t\t\t\t\tif (self.debugCallback)\n\t\t\t\t\t\tself.debugCallback(\"resolve init\");\n\t\t\n\t\t\t\t\tresolve(results);\n\t\t\t\t}\n\t\t\t};\n\t\t\tnext();\n\t\t});\n\t};\n\n\tself._loadBatch = (function(batch, soundFontUrl, startTime, delay) {\n\t\t// This is called recursively to see if the sounds have loaded. The \"delay\" parameter is how long it has been since the original call.\n\t\tvar promises = [];\n\t\tbatch.forEach(function(item) {\n\t\t\tif (self.debugCallback)\n\t\t\t\tself.debugCallback(\"getNote \" + item.instrument+':'+item.note);\n\t\t\tpromises.push(getNote(soundFontUrl, item.instrument, item.note, activeAudioContext()));\n\t\t});\n\t\treturn Promise.all(promises).then(function(response) {\n\t\t\tif (self.debugCallback)\n\t\t\t\tself.debugCallback(\"mp3 load time = \" + Math.floor((activeAudioContext().currentTime - startTime)*1000)+\"ms\");\n\t\t\tvar loaded = [];\n\t\t\tvar cached = [];\n\t\t\tvar pending = [];\n\t\t\tvar error = [];\n\t\t\tfor (var i = 0; i < response.length; i++) {\n\t\t\t\tvar oneResponse = response[i];\n\t\t\t\tvar which = oneResponse.instrument + \":\" + oneResponse.name;\n\t\t\t\tif (oneResponse.status === \"loaded\")\n\t\t\t\t\tloaded.push(which);\n\t\t\t\telse if (oneResponse.status === \"pending\")\n\t\t\t\t\tpending.push(which);\n\t\t\t\telse if (oneResponse.status === \"cached\")\n\t\t\t\t\tcached.push(which);\n\t\t\t\telse\n\t\t\t\t\terror.push(which + ' ' + oneResponse.message);\n\t\t\t}\n\t\t\tif (pending.length > 0) {\n\t\t\t\tif (self.debugCallback)\n\t\t\t\t\tself.debugCallback(\"pending \" + JSON.stringify(pending));\n\t\t\t\t// There was probably a second call for notes before the first one finished, so just retry a few times to see if they stop being pending.\n\t\t\t\t// Retry quickly at first so that there isn't an unnecessary delay, but increase the delay each time.\n\t\t\t\tif (!delay)\n\t\t\t\t\tdelay = 50;\n\t\t\t\telse\n\t\t\t\t\tdelay = delay * 2;\n\t\t\t\tif (delay < 90000) {\n\t\t\t\t\treturn new Promise(function (resolve, reject) {\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\tvar newBatch = [];\n\t\t\t\t\t\t\tfor (i = 0; i < pending.length; i++) {\n\t\t\t\t\t\t\t\twhich = pending[i].split(\":\");\n\t\t\t\t\t\t\t\tnewBatch.push({instrument: which[0], note: which[1]});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (self.debugCallback)\n\t\t\t\t\t\t\t\tself.debugCallback(\"retry \" + JSON.stringify(newBatch));\n\t\t\t\t\t\t\t\t\tself._loadBatch(newBatch, soundFontUrl, startTime, delay).then(function (response) {\n\t\t\t\t\t\t\t\tresolve(response);\n\t\t\t\t\t\t\t}).catch(function (error) {\n\t\t\t\t\t\t\t\treject(error);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}, delay);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tvar list = [];\n\t\t\t\t\tfor (var j = 0; j < batch.length; j++)\n\t\t\t\t\t\tlist.push(batch[j].instrument+'/'+batch[j].note)\n\t\t\t\t\t\tif (self.debugCallback)\n\t\t\t\t\t\t\tself.debugCallback(\"loadBatch timeout\")\n\t\t\t\t\t\treturn Promise.reject(new Error(\"timeout attempting to load: \" + list.join(\", \")));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (self.debugCallback)\n\t\t\t\t\tself.debugCallback(\"loadBatch resolve\")\n\t\t\t\treturn Promise.resolve({loaded: loaded, cached: cached, error: error});\n\t\t\t}\n\t\t}).catch(function (error) {\n\t\t\tif (self.debugCallback)\n\t\t\t\tself.debugCallback(\"loadBatch catch \"+error.message)\n\t\t});\n\t});\n\n\tself.prime = function() {\n\t\t// At this point all of the notes are loaded. This function writes them into the output buffer.\n\t\t// Most music has a lot of repeating notes. If a note is the same pitch, volume, length, etc. as another one,\n\t\t// It saves a lot of time to just create it once and place it repeatedly where ever it needs to be.\n\t\tvar fadeTimeSec = self.fadeLength/1000;\n\t\tself.isRunning = false;\n\t\tif (!self.audioBufferPossible)\n\t\t\treturn Promise.reject(new Error(notSupportedMessage));\n\t\tif (self.debugCallback)\n\t\t\tself.debugCallback(\"prime called\");\n\t\treturn new Promise(function(resolve) {\n\t\t\tvar startTime = activeAudioContext().currentTime;\n\t\t\tvar tempoMultiplier = self.millisecondsPerMeasure / 1000 / self.meterSize;\n\t\t\tself.duration = self.flattened.totalDuration * tempoMultiplier;\n\t\t\tif(self.duration <= 0) {\n\t\t\t\tself.audioBuffers = [];\n\t\t\t\treturn resolve({ status: \"empty\", seconds: 0});\n\t\t\t}\n\t\t\tself.duration += fadeTimeSec;\n\t\t\tvar totalSamples = Math.floor(activeAudioContext().sampleRate * self.duration);\n\n\t\t\t// There might be a previous run that needs to be turned off.\n\t\t\tself.stop();\n\n\t\t\tvar noteMapTracks = createNoteMap(self.flattened);\n\n\t\t\tif (self.options.swing)\n\t\t\t\taddSwing(noteMapTracks, self.options.swing, self.meterFraction, self.pickupLength)\n\n\t\t\tif (self.sequenceCallback)\n\t\t\t\tself.sequenceCallback(noteMapTracks, self.callbackContext);\n\n\t\t\tvar panDistances = setPan(noteMapTracks.length, self.pan);\n\n\t\t\t// Create a simple list of all the unique sounds in this music and where they should be placed.\n\t\t\t// There appears to be a limit on how many audio buffers can be created at once so this technique limits the number needed.\n\t\t\tvar uniqueSounds = {};\n\t\t\tnoteMapTracks.forEach(function(noteMap, trackNumber) {\n\t\t\t\tvar panDistance = panDistances && panDistances.length > trackNumber ? panDistances[trackNumber] : 0;\n\t\t\t\tnoteMap.forEach(function(note) {\n\t\t\t\t\tvar key = note.instrument + ':' + note.pitch + ':' +note.volume + ':' + Math.round((note.end-note.start)*1000)/1000 + ':' + panDistance + ':' + tempoMultiplier + ':' + (note.cents ? note.cents : 0);\n\t\t\t\t\tif (self.debugCallback)\n\t\t\t\t\t\tself.debugCallback(\"noteMapTrack \"+key)\n\t\t\t\t\tif (!uniqueSounds[key])\n\t\t\t\t\t\tuniqueSounds[key] = [];\n\t\t\t\t\tuniqueSounds[key].push(note.start);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t// Now that we know what we are trying to create, construct the audio buffer by creating each sound and placing it.\n\t\t\tvar allPromises = [];\n\t\t\tvar audioBuffer = activeAudioContext().createBuffer(2, totalSamples, activeAudioContext().sampleRate);\n\t\t\tfor (var key2 = 0; key2 < Object.keys(uniqueSounds).length; key2++) {\n\t\t\t\tvar k = Object.keys(uniqueSounds)[key2];\n\t\t\t\tvar parts = k.split(\":\");\n\t\t\t\tvar cents = parts[6] !== undefined ? parseFloat(parts[6]) : 0;\n\t\t\t\tparts = {instrument: parts[0], pitch: parseInt(parts[1], 10), volume: parseInt(parts[2], 10), len: parseFloat(parts[3]), pan: parseFloat(parts[4]), tempoMultiplier: parseFloat(parts[5]), cents: cents};\n\t\t\t\tallPromises.push(placeNote(audioBuffer, activeAudioContext().sampleRate, parts, uniqueSounds[k], self.soundFontVolumeMultiplier, self.programOffsets[parts.instrument], fadeTimeSec, self.noteEnd/1000, self.debugCallback));\n\t\t\t}\n\t\t\tself.audioBuffers = [audioBuffer];\n\n\t\t\tif (self.debugCallback) {\n\t\t\t\tself.debugCallback(\"sampleRate = \" + activeAudioContext().sampleRate);\n\t\t\t\tself.debugCallback(\"totalSamples = \" + totalSamples);\n\t\t\t\tself.debugCallback(\"creationTime = \" + Math.floor((activeAudioContext().currentTime - startTime)*1000) + \"ms\");\n\t\t\t}\n\t\t\tfunction resolveData(me) {\n\t\t\t\tvar duration = me && me.audioBuffers && me.audioBuffers.length > 0 ? me.audioBuffers[0].duration : 0;\n\t\t\t\treturn { status: activeAudioContext().state, duration: duration}\n\t\t\t}\n\t\t\tPromise.all(allPromises).then(function() {\n\t\t\t\t// Safari iOS can mess with the audioContext state, so resume if needed.\n\t\t\t\tif (activeAudioContext().state === \"suspended\") {\n\t\t\t\t\tactiveAudioContext().resume().then(function () {\n\t\t\t\t\t\tresolve(resolveData(self));\n\t\t\t\t\t})\n\t\t\t\t} else if (activeAudioContext().state === \"interrupted\") {\n\t\t\t\t\tactiveAudioContext().suspend().then(function () {\n\t\t\t\t\t\tactiveAudioContext().resume().then(function () {\n\t\t\t\t\t\t\tresolve(resolveData(self));\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tresolve(resolveData(self));\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t};\n\n\tfunction setPan(numTracks, panParam) {\n\t\t// panParam, if it is set, can be either a number representing the separation between each track,\n\t\t// or an array, which is the absolute pan position for each track.\n\t\tif (panParam === null || panParam === undefined)\n\t\t\treturn null;\n\n\t\tvar panDistances = [];\n\t\tif (panParam.length) {\n\t\t\t// We received an array. If there are the same number of items in the pan array as the number of tracks,\n\t\t\t// it all lines up perfectly. If there are more items in the pan array than the tracks then the excess items are ignored.\n\t\t\t// If there are more tracks than items in the pan array then the remaining tracks are placed in the middle.\n\t\t\t// If any of the pan numbers are out of range then they are adjusted.\n\t\t\tfor (var pp = 0; pp < numTracks; pp++) {\n\t\t\t\tif (pp < panParam.length) {\n\t\t\t\t\tvar x = parseFloat(panParam[pp]);\n\t\t\t\t\tif (x < -1)\n\t\t\t\t\t\tx = -1;\n\t\t\t\t\telse if (x > 1)\n\t\t\t\t\t\tx = 1;\n\t\t\t\t\tpanDistances.push(x);\n\t\t\t\t} else\n\t\t\t\t\tpanDistances.push(0)\n\t\t\t}\n\t\t\treturn panDistances;\n\t\t} else {\n\t\t\tvar panNumber = parseFloat(panParam);\n\t\t\t// the separation needs to be no further than 2 (i.e. -1 to 1) so test to see if there are too many tracks for the passed in distance\n\t\t\tif (panNumber*(numTracks-1) > 2)\n\t\t\t\treturn null;\n\n\t\t\t// If there are an even number of tracks, then offset so that the first two are centered around the middle\n\t\t\tvar even = numTracks % 2 === 0;\n\t\t\tvar currLow = even ? 0 - panNumber/2 : 0;\n\t\t\tvar currHigh = currLow+panNumber;\n\t\t\t// Now add the tracks to either side\n\t\t\tfor (var p = 0; p < numTracks; p++) {\n\t\t\t\teven = p % 2 === 0;\n\t\t\t\tif (even) {\n\t\t\t\t\tpanDistances.push(currLow);\n\t\t\t\t\tcurrLow -= panNumber;\n\t\t\t\t} else {\n\t\t\t\t\tpanDistances.push(currHigh);\n\t\t\t\t\tcurrHigh += panNumber;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn panDistances;\n\t\t}\n\t\t// There was either no panning, or the parameters were illegal\n\t\treturn null;\n\t}\n\n\t// This is called after everything is set up, so it can quickly make sound\n\tself.start = function() {\n\t\tif (!self.audioBufferPossible)\n\t\t\tthrow new Error(notSupportedMessage);\n\t\tif (self.debugCallback)\n\t\t\tself.debugCallback(\"start called\");\n\n\t\tvar resumePosition = self.pausedTimeSec ? self.pausedTimeSec : 0;\n\t\tself._kickOffSound(resumePosition);\n\t\tself.startTimeSec = activeAudioContext().currentTime - resumePosition;\n\t\tself.pausedTimeSec = undefined;\n\n\t\tif (self.debugCallback)\n\t\t\tself.debugCallback(\"MIDI STARTED\", self.startTimeSec);\n\t};\n\n\tself.pause = function() {\n\t\tif (!self.audioBufferPossible)\n\t\t\tthrow new Error(notSupportedMessage);\n\t\tif (self.debugCallback)\n\t\t\tself.debugCallback(\"pause called\");\n\n\t\tself.pausedTimeSec = self.stop();\n\t\treturn self.pausedTimeSec;\n\t};\n\n\tself.resume = function() {\n\t\tself.start();\n\t};\n\n\tself.seek = function(position, units) {\n\t\tvar offset;\n\t\tswitch (units) {\n\t\t\tcase \"seconds\":\n\t\t\t\toffset = position;\n\t\t\t\tbreak;\n\t\t\tcase \"beats\":\n\t\t\t\toffset = position * self.millisecondsPerMeasure / self.beatsPerMeasure / 1000;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// this is \"percent\" or any illegal value\n\t\t\t\toffset = (self.duration-self.fadeLength/1000) * position;\n\t\t\t\tbreak;\n\t\t}\n\n\t\t// TODO-PER: can seek when paused or when playing\n\t\tif (!self.audioBufferPossible)\n\t\t\tthrow new Error(notSupportedMessage);\n\t\tif (self.debugCallback)\n\t\t\tself.debugCallback(\"seek called sec=\" + offset);\n\n\t\tif (self.isRunning) {\n\t\t\tself.stop();\n\t\t\tself._kickOffSound(offset);\n\t\t} else {\n\t\t\tself.pausedTimeSec = offset;\n\t\t}\n\t\tself.pausedTimeSec = offset;\n\t};\n\n\tself.stop = function() {\n\t\tself.isRunning = false;\n\t\tself.pausedTimeSec = undefined;\n\t\tself.directSource.forEach(function(source) {\n\t\t\ttry {\n\t\t\t\tsource.stop();\n\t\t\t} catch (error) {\n\t\t\t\t// We don't care if self succeeds: it might fail if something else turned off the sound or it ended for some reason.\n\t\t\t\tconsole.log(\"direct source didn't stop:\", error)\n\t\t\t}\n\t\t});\n\t\tself.directSource = [];\n\t\tvar elapsed = activeAudioContext().currentTime - self.startTimeSec;\n\t\treturn elapsed;\n\t};\n\tself.finished = function() {\n\t\tself.startTimeSec = undefined;\n\t\tself.pausedTimeSec = undefined;\n\t\tself.isRunning = false;\n\t};\n\n\tself.download = function() {\n\t\treturn downloadBuffer(self);\n\t};\n\n\tself.getAudioBuffer = function() {\n\t\treturn self.audioBuffers[0];\n\t};\n\n\tself.getIsRunning = function() {\n\t\treturn self.isRunning;\n\t}\n\n\t/////////////// Private functions //////////////\n\n\tself._deviceCapable = function() {\n\t\tif (!supportsAudio()) {\n\t\t\tconsole.warn(notSupportedMessage);\n\t\t\tif (self.debugCallback)\n\t\t\t\tself.debugCallback(notSupportedMessage);\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\tself._kickOffSound = function(seconds) {\n\t\tself.isRunning = true;\n\t\tself.directSource = [];\n\t\tself.audioBuffers.forEach(function(audioBuffer, trackNum) {\n\t\t\tself.directSource[trackNum] = activeAudioContext().createBufferSource(); // creates a sound source\n\t\t\tself.directSource[trackNum].buffer = audioBuffer; // tell the source which sound to play\n\t\t\tself.directSource[trackNum].connect(activeAudioContext().destination); // connect the source to the context's destination (the speakers)\n\t\t});\n\t\tself.directSource.forEach(function(source) {\n\t\t\tsource.start(0, seconds);\n\t\t});\n\t\tif (self.onEnded) {\n\t\t\tself.directSource[0].onended = function () {\n\t\t\t\tself.onEnded(self.callbackContext);\n\t\t\t};\n\t\t}\n\t};\n\n\tfunction addSwing(noteMapTracks, swing, meterFraction, pickupLength) {\n\n\t\t// we can only swing in X/4 and X/8 meters.\n\t\tif (meterFraction.den != 4 && meterFraction.den != 8)\n\t\t\treturn;\n\n\t\tswing = parseFloat(swing);\n\n\t\t// 50 (or less) is no swing, \n\t\tif (isNaN(swing) || swing <= 50)\n\t\t\treturn;\n\n\t\t// 66 is triplet swing 2:1, and \n\t\t// 60 is swing with a ratio of 3:2. \n\t\t// 75 is the maximum swing where the first eight is played as a dotted eight and the second as a sixteenth. \n\t\tif (swing > 75)\n\t\t\tswing = 75;\n\n\t\t// convert the swing percentage to a percentage of increase for the first half of the beat\n\t\tswing = swing/50 - 1;\n\n\t\t// The volume of the swung notes is increased by this factor\n\t\t// could be also in the settings. Try out values such 0.1, 0.2\n\t\tvar volumeIncrease = 0.0;\n\n\t\t// the beatLength in X/8 meters\n\t\tvar beatLength = 0.25; \n\n\t\t// in X/8 meters the 16s swing so the beatLength is halved\n\t\tif (meterFraction.den === 8) \n\t\t\tbeatLength = beatLength/2; \n\n\t\t// duration of a half beat\n\t\tvar halfbeatLength = beatLength/2;\n\n\t\t// the extra duration of the first swung notes and the delay of the second notes\n\t\tvar swingDuration = halfbeatLength * swing;\n\n\t\tfor (var t = 0; t < noteMapTracks.length; t++) {\n\t\t\tvar track = noteMapTracks[t];\n\t\t\tfor (var i = 0; i < track.length; i++) {\n\t\t\t\tvar event = track[i];\n\t\t\t\tif (\n\t\t\t\t\t// is halfbeat\n\t\t\t\t\t(event.start-pickupLength) % halfbeatLength == 0 && (event.start-pickupLength) % beatLength != 0 \n\t\t\t\t\t&& (\n\t\t\t\t\t\t// the previous note is on the beat or before OR there is no previous note \n\t\t\t\t\t\ti == 0 \n\t\t\t\t\t\t|| track[i-1].start <= track[i].start - halfbeatLength\n\t\t\t\t\t)\n\t\t\t\t\t&& (\n\t\t\t\t\t\t// the next note is on the beat or after OR there is no next note\n\t\t\t\t\t\ti == track.length - 1 \n\t\t\t\t\t\t|| track[i+1].start >= track[i].start + halfbeatLength\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tvar oldEventStart = event.start;\n\n\t\t\t\t\tevent.start += swingDuration;\n\n\t\t\t\t\t// Increase volume of swung notes\n\t\t\t\t\tevent.volume *= 1 + volumeIncrease;\n\n\t\t\t\t\t// if there is a previous note ending at the start of this note, extend its end\n\t\t\t\t\t// and decrease its volume\n\t\t\t\t\tif (i > 0 && track[i-1].end == oldEventStart) {\n\t\t\t\t\t\ttrack[i-1].end = event.start;\n\t\t\t\t\t\ttrack[i-1].volume *= 1 - volumeIncrease;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n}\n\nmodule.exports = CreateSynth;\n","var downloadBuffer = function(buffer) {\n\treturn window.URL.createObjectURL(bufferToWave(buffer.audioBuffers));\n};\n\n// Convert an AudioBuffer to a Blob using WAVE representation\nfunction bufferToWave(audioBuffers) {\n\tvar audioBuffer = audioBuffers[0];\n\tvar numOfChan = audioBuffer.numberOfChannels;\n\tvar length = audioBuffer.length * numOfChan * 2 + 44;\n\tvar buffer = new ArrayBuffer(length);\n\tvar view = new DataView(buffer);\n\tvar channels = [];\n\tvar i;\n\tvar sample;\n\tvar offset = 0;\n\tvar pos = 0;\n\n\t// write WAVE header\n\tsetUint32(0x46464952);                         // \"RIFF\"\n\tsetUint32(length - 8);                         // file length - 8\n\tsetUint32(0x45564157);                         // \"WAVE\"\n\n\tsetUint32(0x20746d66);                         // \"fmt \" chunk\n\tsetUint32(16);                                 // length = 16\n\tsetUint16(1);                                  // PCM (uncompressed)\n\tsetUint16(numOfChan);\n\tsetUint32(audioBuffer.sampleRate);\n\tsetUint32(audioBuffer.sampleRate * 2 * numOfChan); // avg. bytes/sec\n\tsetUint16(numOfChan * 2);                      // block-align\n\tsetUint16(16);                                 // 16-bit (hardcoded in this demo)\n\n\tsetUint32(0x61746164);                         // \"data\" - chunk\n\tsetUint32(length - pos - 4);                   // chunk length\n\n\t// write interleaved data\n\tfor(i = 0; i < numOfChan; i++)\n\t\tchannels.push(audioBuffer.getChannelData(i));\n\n\twhile(pos < length) {\n\t\tfor(i = 0; i < channels.length; i++) {             // interleave channels\n\t\t\tsample = Math.max(-1, Math.min(1, channels[i][offset])); // clamp\n\t\t\tsample = (0.5 + sample < 0 ? sample * 32768 : sample * 32767)|0; // scale to 16-bit signed int\n\t\t\tview.setInt16(pos, sample, true);          // write 16-bit sample\n\t\t\tpos += 2;\n\t\t}\n\t\toffset++; // next source sample\n\t}\n\n\t// create Blob\n\treturn new Blob([buffer], {type: \"audio/wav\"});\n\n\tfunction setUint16(data) {\n\t\tview.setUint16(pos, data, true);\n\t\tpos += 2;\n\t}\n\n\tfunction setUint32(data) {\n\t\tview.setUint32(pos, data, true);\n\t\tpos += 4;\n\t}\n}\n\nmodule.exports = downloadBuffer;\n","var tunebook = require('../api/abc_tunebook');\nvar midiCreate = require('../midi/abc_midi_create');\n\nvar getMidiFile = function(source, options) {\n\tvar params = {};\n\tif (options) {\n\t\tfor (var key in options) {\n\t\t\tif (options.hasOwnProperty(key)) {\n\t\t\t\tparams[key] = options[key];\n\t\t\t}\n\t\t}\n\t}\n\tparams.generateInline = false;\n\n\tfunction callback(div, tune, index) {\n\t\tvar downloadMidi = midiCreate(tune, params);\n\t\tswitch (params.midiOutputType) {\n\t\t\tcase \"encoded\":\n\t\t\t\treturn downloadMidi;\n\t\t\tcase \"binary\":\n\t\t\t\tvar decoded = downloadMidi.replace(\"data:audio/midi,\", \"\");\n\t\t\t\tdecoded = decoded.replace(/MThd/g,\"%4d%54%68%64\");\n\t\t\t\tdecoded = decoded.replace(/MTrk/g,\"%4d%54%72%6b\");\n\t\t\t\tvar buffer = new ArrayBuffer(decoded.length/3);\n\t\t\t\tvar output = new Uint8Array(buffer);\n\t\t\t\tfor (var i = 0; i < decoded.length/3; i++) {\n\t\t\t\t\tvar p = i*3+1;\n\t\t\t\t\tvar d = parseInt(decoded.substring(p, p+2), 16);\n\t\t\t\t\toutput[i] = d;\n\t\t\t\t}\n\t\t\t\treturn output;\n\t\t\tcase \"link\":\n\t\t\tdefault:\n\t\t\t\treturn generateMidiDownloadLink(tune, params, downloadMidi, index);\n\t\t}\n\t}\n\n\tif (typeof source === \"string\")\n\t\treturn tunebook.renderEngine(callback, \"*\", source, params);\n\telse\n\t\treturn callback(null, source, 0);\n};\n\nfunction isFunction(functionToCheck) {\n\tvar getType = {};\n\treturn functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\nvar generateMidiDownloadLink = function(tune, midiParams, midi, index) {\n\tvar divClasses = ['abcjs-download-midi', 'abcjs-midi-' + index]\n\tif (midiParams.downloadClass)\n\t\tdivClasses.push(midiParams.downloadClass)\n\tvar html = '<div class=\"' + divClasses.join(' ') + '\">';\n\tif (midiParams.preTextDownload)\n\t\thtml += midiParams.preTextDownload;\n\tvar title = tune.metaText && tune.metaText.title ? tune.metaText.title : 'Untitled';\n\tvar label;\n\tif (midiParams.downloadLabel && isFunction(midiParams.downloadLabel))\n\t\tlabel = midiParams.downloadLabel(tune, index);\n\telse if (midiParams.downloadLabel)\n\t\tlabel = midiParams.downloadLabel.replace(/%T/, title);\n\telse\n\t\tlabel = \"Download MIDI for \\\"\" + title + \"\\\"\";\n\ttitle = title.toLowerCase().replace(/'/g, '').replace(/\\W/g, '_').replace(/__/g, '_');\n\tvar filename = (midiParams.fileName) ? midiParams.fileName :  title + '.midi';\n\thtml += '<a download=\"' + filename + '\" href=\"' + midi + '\">' + label + '</a>';\n\tif (midiParams.postTextDownload)\n\t\thtml += midiParams.postTextDownload;\n\treturn html + \"</div>\";\n};\n\n\nmodule.exports = getMidiFile;\n","var svg = `\n<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\" class=\"abcjs-loading-svg\">\n    <circle cx=\"50\" cy=\"50\" fill=\"none\" stroke-width=\"20\" r=\"35\" stroke-dasharray=\"160 55\"></circle>\n</svg>\n`\n\nmodule.exports = svg\n","var svg = `\n<svg version=\"1.0\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 700 700\" preserveAspectRatio=\"xMidYMid meet\">\n\t<g transform=\"translate(0,700) scale(0.1,-0.1)\" >\n\t<path d=\"M3111 6981 c-20 -37 -90 -55 -364 -96 -120 -18 -190 -33 -244 -55\n\t-42 -17 -124 -42 -182 -56 -78 -18 -119 -34 -157 -60 -28 -19 -86 -46 -128\n\t-60 -43 -13 -107 -42 -144 -64 -37 -23 -84 -46 -106 -52 -21 -7 -56 -29 -79\n\t-50 -22 -22 -61 -50 -86 -63 -26 -13 -67 -40 -91 -60 -24 -20 -65 -47 -90 -60\n\t-25 -13 -53 -31 -61 -41 -8 -9 -32 -30 -54 -46 -75 -54 -486 -460 -512 -507\n\t-15 -25 -48 -69 -75 -98 -26 -28 -48 -57 -48 -63 0 -6 -18 -29 -39 -53 -21\n\t-23 -56 -71 -77 -107 -20 -36 -50 -80 -65 -97 -16 -18 -33 -52 -40 -75 -12\n\t-47 -47 -115 -84 -166 -13 -18 -30 -56 -38 -83 -8 -27 -34 -80 -56 -118 -33\n\t-53 -46 -91 -62 -167 -12 -63 -34 -127 -59 -179 -42 -84 -60 -166 -60 -270 0\n\t-90 26 -122 125 -154 54 -17 96 -19 430 -20 305 -1 381 2 430 14 82 22 140 51\n\t153 78 6 12 22 47 37 77 14 30 38 77 54 103 15 27 34 73 40 103 7 30 28 78 48\n\t107 19 28 44 74 55 101 10 28 34 67 53 87 18 20 49 61 68 90 19 30 44 63 57\n\t74 13 11 36 40 52 65 59 94 232 270 306 313 20 11 57 37 82 58 25 20 70 52\n\t100 72 30 19 66 47 79 61 13 14 49 35 80 46 30 12 80 37 111 56 31 19 95 45\n\t143 58 48 12 110 37 139 55 63 40 127 55 323 76 83 9 208 28 279 41 156 29\n\t165 29 330 4 453 -71 514 -84 606 -130 31 -16 83 -36 116 -45 32 -9 84 -34\n\t115 -56 31 -21 82 -48 113 -60 32 -11 72 -33 89 -48 18 -16 59 -45 92 -65 33\n\t-21 74 -51 90 -66 17 -15 49 -40 73 -54 52 -32 65 -61 50 -113 -8 -31 -61 -90\n\t-277 -308 -300 -303 -361 -382 -369 -481 -2 -29 0 -66 6 -81 13 -40 88 -138\n\t115 -151 12 -6 54 -26 92 -44 l70 -33 945 -2 c520 -1 975 2 1012 7 64 8 191\n\t50 231 76 11 7 33 34 50 60 22 34 42 51 65 58 l32 9 0 1101 0 1102 -32 9 c-21\n\t7 -44 26 -64 55 -60 84 -77 97 -140 110 -44 9 -76 10 -127 2 -59 -9 -77 -17\n\t-134 -62 -37 -28 -172 -155 -301 -281 -129 -127 -249 -237 -267 -245 -25 -10\n\t-41 -11 -71 -2 -58 15 -112 45 -124 69 -6 11 -35 35 -64 54 -28 18 -58 41 -66\n\t50 -8 9 -41 35 -75 58 -33 22 -77 56 -99 75 -21 18 -64 46 -95 61 -31 14 -73\n\t39 -93 55 -20 15 -70 40 -110 55 -40 15 -97 44 -127 64 -29 21 -78 44 -107 53\n\t-30 8 -77 31 -105 51 -42 28 -73 39 -173 60 -68 14 -154 39 -196 58 -95 43\n\t-131 51 -343 76 -209 24 -242 32 -279 70 l-30 29 -328 0 c-312 0 -330 -1 -339\n\t-19z\"></path>\n\t<path d=\"M254 2875 c-89 -16 -107 -26 -145 -78 -32 -44 -62 -66 -91 -67 -17 0\n\t-18 -61 -18 -1140 l0 -1140 24 0 c16 0 41 -17 72 -50 40 -42 61 -55 117 -72\n\tl69 -21 82 23 c44 12 96 30 114 39 18 9 148 132 290 272 141 141 267 261 279\n\t268 51 26 86 14 176 -61 32 -26 62 -48 66 -48 5 0 36 -25 70 -55 34 -30 74\n\t-61 89 -69 15 -8 37 -28 50 -45 12 -17 50 -45 84 -62 34 -17 78 -44 98 -60 19\n\t-16 61 -37 93 -48 32 -11 81 -37 107 -56 27 -20 76 -45 109 -56 33 -12 75 -31\n\t93 -44 62 -45 93 -58 191 -82 54 -12 130 -37 168 -54 68 -29 180 -58 226 -59\n\t62 0 183 -64 183 -96 0 -12 88 -14 639 -14 l639 0 12 30 c18 44 76 66 233 89\n\t89 14 160 30 200 47 34 15 106 42 159 60 54 18 112 44 130 57 47 35 85 52 146\n\t67 29 7 76 28 105 48 29 20 77 48 107 63 30 15 66 39 80 54 14 15 50 40 81 56\n\t31 15 78 46 104 69 26 22 61 46 79 54 17 7 43 26 56 42 14 16 41 41 60 56 64\n\t48 380 362 408 405 15 23 40 51 55 63 15 12 36 38 46 58 11 21 37 57 58 82 22\n\t25 49 62 62 83 13 20 38 56 57 78 19 23 50 74 69 113 19 39 46 86 59 104 14\n\t18 34 62 46 98 12 36 32 77 45 92 31 38 60 97 80 167 9 33 26 76 37 95 29 50\n\t47 103 68 206 10 52 32 117 51 155 29 56 33 74 34 140 0 94 -10 108 -101 138\n\t-61 20 -83 21 -463 21 -226 0 -421 -4 -451 -10 -63 -12 -86 -30 -110 -85 -10\n\t-22 -33 -63 -52 -92 -21 -31 -42 -80 -53 -123 -11 -44 -32 -93 -56 -128 -20\n\t-32 -47 -83 -59 -115 -12 -32 -37 -77 -56 -100 -19 -23 -50 -65 -69 -94 -19\n\t-29 -44 -57 -54 -63 -11 -5 -29 -27 -42 -47 -52 -85 -234 -277 -300 -315 -25\n\t-15 -53 -38 -62 -51 -9 -14 -42 -39 -74 -57 -32 -18 -75 -48 -95 -66 -21 -18\n\t-59 -44 -85 -58 -26 -13 -72 -40 -100 -59 -35 -24 -78 -41 -128 -52 -47 -11\n\t-99 -31 -139 -56 -69 -42 -94 -49 -391 -110 -245 -51 -425 -66 -595 -50 -168\n\t16 -230 27 -330 61 -47 16 -123 35 -170 44 -98 17 -123 25 -172 58 -20 14 -71\n\t37 -114 53 -44 15 -95 40 -115 56 -20 16 -70 42 -110 59 -40 16 -88 45 -108\n\t63 -20 19 -55 46 -78 61 -24 14 -49 35 -55 47 -7 11 -34 33 -60 49 -50 31 -65\n\t61 -53 102 4 13 130 147 281 298 236 238 277 283 299 335 15 32 35 71 46 86\n\t12 18 19 44 19 76 0 42 -8 63 -53 138 -92 151 11 139 -1207 141 -798 2 -1030\n\t0 -1086 -11z\"></path>\n\t</g>\n</svg>\n`\n\nmodule.exports = svg\n","var svg = `\n<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" class=\"abcjs-pause-svg\">\n  <g>\n    <rect width=\"8.23\" height=\"25\"/>\n    <rect width=\"8.23\" height=\"25\" x=\"17\"/>\n  </g>\n</svg>\n`\n\nmodule.exports = svg\n","var svg = `\n<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" class=\"abcjs-play-svg\">\n    <g>\n    <polygon points=\"4 0 23 12.5 4 25\"/>\n    </g>\n</svg>\n`\n\nmodule.exports = svg\n","var svg = `\n<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\">\n  <g>\n    <polygon points=\"5 12.5 24 0 24 25\"/>\n    <rect width=\"3\" height=\"25\" x=\"0\" y=\"0\"/>\n  </g>\n</svg>\n`\n\nmodule.exports = svg\n","var instrumentIndexToName = [\n\t\"acoustic_grand_piano\",\n\t\"bright_acoustic_piano\",\n\t\"electric_grand_piano\",\n\t\"honkytonk_piano\",\n\t\"electric_piano_1\",\n\t\"electric_piano_2\",\n\t\"harpsichord\",\n\t\"clavinet\",\n\n\t\"celesta\",\n\t\"glockenspiel\",\n\t\"music_box\",\n\t\"vibraphone\",\n\t\"marimba\",\n\t\"xylophone\",\n\t\"tubular_bells\",\n\t\"dulcimer\",\n\n\t\"drawbar_organ\",\n\t\"percussive_organ\",\n\t\"rock_organ\",\n\t\"church_organ\",\n\t\"reed_organ\",\n\t\"accordion\",\n\t\"harmonica\",\n\t\"tango_accordion\",\n\n\t\"acoustic_guitar_nylon\",\n\t\"acoustic_guitar_steel\",\n\t\"electric_guitar_jazz\",\n\t\"electric_guitar_clean\",\n\t\"electric_guitar_muted\",\n\t\"overdriven_guitar\",\n\t\"distortion_guitar\",\n\t\"guitar_harmonics\",\n\n\t\"acoustic_bass\",\n\t\"electric_bass_finger\",\n\t\"electric_bass_pick\",\n\t\"fretless_bass\",\n\t\"slap_bass_1\",\n\t\"slap_bass_2\",\n\t\"synth_bass_1\",\n\t\"synth_bass_2\",\n\n\t\"violin\",\n\t\"viola\",\n\t\"cello\",\n\t\"contrabass\",\n\t\"tremolo_strings\",\n\t\"pizzicato_strings\",\n\t\"orchestral_harp\",\n\t\"timpani\",\n\n\t\"string_ensemble_1\",\n\t\"string_ensemble_2\",\n\t\"synth_strings_1\",\n\t\"synth_strings_2\",\n\t\"choir_aahs\",\n\t\"voice_oohs\",\n\t\"synth_choir\",\n\t\"orchestra_hit\",\n\n\t\"trumpet\",\n\t\"trombone\",\n\t\"tuba\",\n\t\"muted_trumpet\",\n\t\"french_horn\",\n\t\"brass_section\",\n\t\"synth_brass_1\",\n\t\"synth_brass_2\",\n\n\t\"soprano_sax\",\n\t\"alto_sax\",\n\t\"tenor_sax\",\n\t\"baritone_sax\",\n\t\"oboe\",\n\t\"english_horn\",\n\t\"bassoon\",\n\t\"clarinet\",\n\n\t\"piccolo\",\n\t\"flute\",\n\t\"recorder\",\n\t\"pan_flute\",\n\t\"blown_bottle\",\n\t\"shakuhachi\",\n\t\"whistle\",\n\t\"ocarina\",\n\n\t\"lead_1_square\",\n\t\"lead_2_sawtooth\",\n\t\"lead_3_calliope\",\n\t\"lead_4_chiff\",\n\t\"lead_5_charang\",\n\t\"lead_6_voice\",\n\t\"lead_7_fifths\",\n\t\"lead_8_bass_lead\",\n\n\t\"pad_1_new_age\",\n\t\"pad_2_warm\",\n\t\"pad_3_polysynth\",\n\t\"pad_4_choir\",\n\t\"pad_5_bowed\",\n\t\"pad_6_metallic\",\n\t\"pad_7_halo\",\n\t\"pad_8_sweep\",\n\n\t\"fx_1_rain\",\n\t\"fx_2_soundtrack\",\n\t\"fx_3_crystal\",\n\t\"fx_4_atmosphere\",\n\t\"fx_5_brightness\",\n\t\"fx_6_goblins\",\n\t\"fx_7_echoes\",\n\t\"fx_8_scifi\",\n\n\t\"sitar\",\n\t\"banjo\",\n\t\"shamisen\",\n\t\"koto\",\n\t\"kalimba\",\n\t\"bagpipe\",\n\t\"fiddle\",\n\t\"shanai\",\n\n\t\"tinkle_bell\",\n\t\"agogo\",\n\t\"steel_drums\",\n\t\"woodblock\",\n\t\"taiko_drum\",\n\t\"melodic_tom\",\n\t\"synth_drum\",\n\t\"reverse_cymbal\",\n\n\t\"guitar_fret_noise\",\n\t\"breath_noise\",\n\t\"seashore\",\n\t\"bird_tweet\",\n\t\"telephone_ring\",\n\t\"helicopter\",\n\t\"applause\",\n\t\"gunshot\",\n\n\t\"percussion\"\n];\n\nmodule.exports = instrumentIndexToName;\n","// Load one mp3 file for one note.\n// url = the base url for the soundfont\n// instrument = the instrument name (e.g. \"acoustic_grand_piano\")\n// name = the pitch name (e.g. \"A3\")\nvar soundsCache = require(\"./sounds-cache\");\n\nvar getNote = function (url, instrument, name, audioContext) {\n\tif (!soundsCache[instrument]) soundsCache[instrument] = {};\n\tvar instrumentCache = soundsCache[instrument];\n\n\tif (!instrumentCache[name])\n\t\tinstrumentCache[name] = new Promise(function (resolve, reject) {\n\t\t\tvar xhr = new XMLHttpRequest();\n\t\t\tlet noteUrl = url + instrument + \"-mp3/\" + name + \".mp3\";\n\t\t\txhr.open(\"GET\", noteUrl, true);\n\t\t\txhr.responseType = \"arraybuffer\";\n\t\t\txhr.onload = function () {\n\t\t\t\tif (xhr.status !== 200) {\n\t\t\t\t\treject(Error(\"Can't load sound at \" + noteUrl + ' status=' + xhr.status));\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tvar noteDecoded = function(audioBuffer) {\n\t\t\t\t\tresolve({instrument: instrument, name: name, status: \"loaded\", audioBuffer: audioBuffer})\n\t\t\t\t}\n\t\t\t\tvar maybePromise = audioContext.decodeAudioData(xhr.response, noteDecoded, function () {\n\t\t\t\t\treject(Error(\"Can't decode sound at \" + noteUrl));\n\t\t\t\t});\n\t\t\t\t// In older browsers `BaseAudioContext.decodeAudio()` did not return a promise\n\t\t\t\tif (maybePromise && typeof maybePromise.catch === \"function\") maybePromise.catch(reject);\n\t\t\t};\n\t\t\txhr.onerror = function () {\n\t\t\t\treject(Error(\"Can't load sound at \" + noteUrl));\n\t\t\t};\n\t\t\txhr.send();\n\t\t})\n\t\t\t.catch(err => {\n\t\t\t\tconsole.error(\"Didn't load note\", instrument, name, \":\", err.message);\n\t\t\t\tthrow err;\n\t\t\t});\n\n\treturn instrumentCache[name];\n};\n\nmodule.exports = getNote;\n","var accidentals = {\n\t\"__\": -2,\n\t\"_\": -1,\n\t\"_/\": -0.5,\n\t\"=\": 0,\n\t\"\": 0,\n\t\"^/\": 0.5,\n\t\"^\": 1,\n\t\"^^\": 2\n}\n\nvar notesInOrder = ['C', '-', 'D', '-', 'E', 'F', '-', 'G', '-', 'A', '-', 'B', 'c', '-', 'd', '-', 'e', 'f', '-', 'g', '-', 'a', '-', 'b']\n\nfunction noteToMidi(note) {\n\tvar reg = note.match(/([_^\\/]*)([ABCDEFGabcdefg])(,*)('*)/)\n\tif (reg && reg.length === 5) {\n\t\tvar acc = accidentals[reg[1]]\n\t\tvar pitch = notesInOrder.indexOf(reg[2])\n\t\tvar octave = reg[4].length - reg[3].length\n\t\treturn 48 + pitch + acc + octave * 12;\n\t}\n\treturn 0;\n}\n\nfunction midiToNote(midi) {\n\tmidi = parseInt(midi, 10) // TODO-PER: not sure how to handle quarter sharps and flats, so strip them for now.\n\tvar octave = Math.floor(midi / 12)\n\tvar pitch = midi % 12\n\tvar name = notesInOrder[pitch]\n\tif (name === '-') {\n\t\tname = '^' + notesInOrder[pitch-1]\n\t}\n\t\n\tif (octave > 4) {\n\t\tname = name.toLowerCase()\n\t\toctave -= 5\n\t\twhile (octave > 0) {\n\t\t\tname += \"'\"\n\t\t\toctave--\n\t\t}\n\t} else {\n\t\twhile (octave < 4) {\n\t\t\tname += ','\n\t\t\toctave++\n\t\t}\n\t}\t\n\treturn name\n}\n\nmodule.exports = {noteToMidi: noteToMidi, midiToNote: midiToNote};\n","var pitchToNoteName = {\n\t21: 'A0',\n\t22: 'Bb0',\n\t23: 'B0',\n\t24: 'C1',\n\t25: 'Db1',\n\t26: 'D1',\n\t27: 'Eb1',\n\t28: 'E1',\n\t29: 'F1',\n\t30: 'Gb1',\n\t31: 'G1',\n\t32: 'Ab1',\n\t33: 'A1',\n\t34: 'Bb1',\n\t35: 'B1',\n\t36: 'C2',\n\t37: 'Db2',\n\t38: 'D2',\n\t39: 'Eb2',\n\t40: 'E2',\n\t41: 'F2',\n\t42: 'Gb2',\n\t43: 'G2',\n\t44: 'Ab2',\n\t45: 'A2',\n\t46: 'Bb2',\n\t47: 'B2',\n\t48: 'C3',\n\t49: 'Db3',\n\t50: 'D3',\n\t51: 'Eb3',\n\t52: 'E3',\n\t53: 'F3',\n\t54: 'Gb3',\n\t55: 'G3',\n\t56: 'Ab3',\n\t57: 'A3',\n\t58: 'Bb3',\n\t59: 'B3',\n\t60: 'C4',\n\t61: 'Db4',\n\t62: 'D4',\n\t63: 'Eb4',\n\t64: 'E4',\n\t65: 'F4',\n\t66: 'Gb4',\n\t67: 'G4',\n\t68: 'Ab4',\n\t69: 'A4',\n\t70: 'Bb4',\n\t71: 'B4',\n\t72: 'C5',\n\t73: 'Db5',\n\t74: 'D5',\n\t75: 'Eb5',\n\t76: 'E5',\n\t77: 'F5',\n\t78: 'Gb5',\n\t79: 'G5',\n\t80: 'Ab5',\n\t81: 'A5',\n\t82: 'Bb5',\n\t83: 'B5',\n\t84: 'C6',\n\t85: 'Db6',\n\t86: 'D6',\n\t87: 'Eb6',\n\t88: 'E6',\n\t89: 'F6',\n\t90: 'Gb6',\n\t91: 'G6',\n\t92: 'Ab6',\n\t93: 'A6',\n\t94: 'Bb6',\n\t95: 'B6',\n\t96: 'C7',\n\t97: 'Db7',\n\t98: 'D7',\n\t99: 'Eb7',\n\t100: 'E7',\n\t101: 'F7',\n\t102: 'Gb7',\n\t103: 'G7',\n\t104: 'Ab7',\n\t105: 'A7',\n\t106: 'Bb7',\n\t107: 'B7',\n\t108: 'C8',\n\t109: 'Db8',\n\t110: 'D8',\n\t111: 'Eb8',\n\t112: 'E8',\n\t113: 'F8',\n\t114: 'Gb8',\n\t115: 'G8',\n\t116: 'Ab8',\n\t117: 'A8',\n\t118: 'Bb8',\n\t119: 'B8',\n\t120: 'C9',\n\t121: 'Db9'\n};\n\nmodule.exports = pitchToNoteName;\n","var pitchMap = {\n\tf0: \"_C\",\n\tn0: \"=C\",\n\ts0: \"^C\",\n\tx0: \"C\",\n\tf1: \"_D\",\n\tn1: \"=D\",\n\ts1: \"^D\",\n\tx1: \"D\",\n\tf2: \"_E\",\n\tn2: \"=E\",\n\ts2: \"^E\",\n\tx2: \"E\",\n\tf3: \"_F\",\n\tn3: \"=F\",\n\ts3: \"^F\",\n\tx3: \"F\",\n\tf4: \"_G\",\n\tn4: \"=G\",\n\ts4: \"^G\",\n\tx4: \"G\",\n\tf5: \"_A\",\n\tn5: \"=A\",\n\ts5: \"^A\",\n\tx5: \"A\",\n\tf6: \"_B\",\n\tn6: \"=B\",\n\ts6: \"^B\",\n\tx6: \"B\",\n\tf7: \"_c\",\n\tn7: \"=c\",\n\ts7: \"^c\",\n\tx7: \"c\",\n\tf8: \"_d\",\n\tn8: \"=d\",\n\ts8: \"^d\",\n\tx8: \"d\",\n\tf9: \"_e\",\n\tn9: \"=e\",\n\ts9: \"^e\",\n\tx9: \"e\",\n\tf10: \"_f\",\n\tn10: \"=f\",\n\ts10: \"^f\",\n\tx10: \"f\",\n\tf11: \"_g\",\n\tn11: \"=g\",\n\ts11: \"^g\",\n\tx11: \"g\",\n\tf12: \"_a\",\n\tn12: \"=a\",\n\ts12: \"^a\",\n\tx12: \"a\",\n\tf13: \"_b\",\n\tn13: \"=b\",\n\ts13: \"^b\",\n\tx13: \"b\",\n\tf14: \"_c'\",\n\tn14: \"=c'\",\n\ts14: \"^c'\",\n\tx14: \"c'\",\n\tf15: \"_d'\",\n\tn15: \"=d'\",\n\ts15: \"^d'\",\n\tx15: \"d'\",\n\tf16: \"_e'\",\n\tn16: \"=e'\",\n\ts16: \"^e'\",\n\tx16: \"e'\",\n}\n\nfunction pitchesToPerc(pitchObj) {\n\tvar pitch = (pitchObj.accidental ? pitchObj.accidental[0] : 'x') + pitchObj.verticalPos;\n\treturn pitchMap[pitch];\n}\nmodule.exports = pitchesToPerc;\n","var soundsCache = require('./sounds-cache');\nvar pitchToNoteName = require('./pitch-to-note-name');\nvar centsToFactor = require(\"./cents-to-factor\");\n\nfunction placeNote(outputAudioBuffer, sampleRate, sound, startArray, volumeMultiplier, ofsMs, fadeTimeSec, noteEndSec, debugCallback) {\n\t// sound contains { instrument, pitch, volume, len, pan, tempoMultiplier\n\t// len is in whole notes. Multiply by tempoMultiplier to get seconds.\n\t// ofsMs is an offset to subtract from the note to line up programs that have different length onsets.\n\tvar OfflineAC = window.OfflineAudioContext ||\n\t\twindow.webkitOfflineAudioContext;\n\n\tvar len = sound.len * sound.tempoMultiplier;\n\tif (ofsMs)\n\t\tlen +=ofsMs/1000;\n\tlen -= noteEndSec;\n\tif (len < 0)\n\t\tlen = 0.005; // Have some small audible length no matter how short the note is.\n\tvar offlineCtx = new OfflineAC(2,Math.floor((len+fadeTimeSec)*sampleRate),sampleRate);\n\tvar noteName = pitchToNoteName[sound.pitch];\n\tif (!soundsCache[sound.instrument]) {\n\t\t// It shouldn't happen that the entire instrument cache wasn't created, but this has been seen in practice, so guard against it.\n\t\tif (debugCallback)\n\t\t\tdebugCallback('placeNote skipped (instrument empty): '+sound.instrument+':'+noteName)\n\t\treturn Promise.resolve();\n\t}\n\tvar noteBufferPromise = soundsCache[sound.instrument][noteName];\n\n\tif (!noteBufferPromise) {\n\t\t// if the note isn't present then just skip it - it will leave a blank spot in the audio.\n\t\tif (debugCallback)\n\t\t\tdebugCallback('placeNote skipped: '+sound.instrument+':'+noteName)\n\t\treturn Promise.resolve();\n\t}\n\n\treturn noteBufferPromise\n\t\t.then(function (response) {\n\t\t\t// create audio buffer\n\t\t\tvar source = offlineCtx.createBufferSource();\n\t\t\tsource.buffer = response.audioBuffer;\n\n\t\t\t// add gain\n\t\t\t// volume can be between 1 to 127. This translation to gain is just trial and error.\n\t\t\t// The smaller the first number, the more dynamic range between the quietest to loudest.\n\t\t\t// The larger the second number, the louder it will be in general.\n\t\t\tvar volume = (sound.volume / 96) * volumeMultiplier;\n\t\t\tsource.gainNode = offlineCtx.createGain();\n\n\t\t\t// add pan if supported and present\n\t\t\tif (sound.pan && offlineCtx.createStereoPanner) {\n\t\t\t\tsource.panNode = offlineCtx.createStereoPanner();\n\t\t\t\tsource.panNode.pan.setValueAtTime(sound.pan, 0);\n\t\t\t}\n\t\t\tsource.gainNode.gain.value = volume; // Math.min(2, Math.max(0, volume));\n\t\t\tsource.gainNode.gain.linearRampToValueAtTime(source.gainNode.gain.value, len);\n\t\t\tsource.gainNode.gain.linearRampToValueAtTime(0.0, len + fadeTimeSec);\n\n\t\t\tif (sound.cents) {\n\t\t\t\tsource.playbackRate.value = centsToFactor(sound.cents);\n\t\t\t}\n\n\t\t\t// connect all the nodes\n\t\t\tif (source.panNode) {\n\t\t\t\tsource.panNode.connect(offlineCtx.destination);\n\t\t\t\tsource.gainNode.connect(source.panNode);\n\t\t\t} else {\n\t\t\t\tsource.gainNode.connect(offlineCtx.destination);\n\t\t\t}\n\t\t\tsource.connect(source.gainNode);\n\n\t\t\t// Do the process of creating the sound and placing it in the buffer\n\t\t\tsource.start(0);\n\n\t\t\tif (source.noteOff) {\n\t\t\t\tsource.noteOff(len + fadeTimeSec);\n\t\t\t} else {\n\t\t\t\tsource.stop(len + fadeTimeSec);\n\t\t\t}\n\t\t\tvar fnResolve;\n\t\t\tofflineCtx.oncomplete = function(e) {\n\t\t\t\tif (e.renderedBuffer && e.renderedBuffer.getChannelData) { // If the system gets overloaded or there are network problems then this can start failing. Just drop the note if so.\n\t\t\t\t\tfor (var i = 0; i < startArray.length; i++) {\n\t\t\t\t\t\t//Math.floor(startArray[i] * sound.tempoMultiplier * sampleRate)\n\t\t\t\t\t\tvar start = startArray[i] * sound.tempoMultiplier;\n\t\t\t\t\t\tif (ofsMs)\n\t\t\t\t\t\t\tstart -=ofsMs/1000;\n\t\t\t\t\t\tif (start < 0)\n\t\t\t\t\t\t\tstart = 0; // If the item that is moved back is at the very beginning of the buffer then don't move it back. To do that would be to push everything else forward. TODO-PER: this should probably be done at some point but then it would change timing in existing apps.\n\t\t\t\t\t\tstart = Math.floor(start*sampleRate);\n\t\t\t\t\t\tcopyToChannel(outputAudioBuffer, e.renderedBuffer, start);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (debugCallback)\n\t\t\t\t\tdebugCallback('placeNote: '+sound.instrument+':'+noteName)\n\t\t\t\tfnResolve();\n\t\t\t};\n\t\t\tofflineCtx.startRendering();\n\t\t\treturn new Promise(function(resolve) {\n\t\t\t\tfnResolve = resolve;\n\t\t\t});\n\t\t})\n\t\t.catch(function (error) {\n\t\t\tif (debugCallback)\n\t\t\t\tdebugCallback('placeNote catch: '+error.message)\n\t\t\treturn Promise.resolve()\n\t\t});\n}\n\nvar copyToChannel = function(toBuffer, fromBuffer, start) {\n\tfor (var ch = 0; ch < 2; ch++) {\n\t\tvar fromData = fromBuffer.getChannelData(ch);\n\t\tvar toData = toBuffer.getChannelData(ch);\n\n\t\t// Mix the current note into the existing track\n\t\tfor (var n = 0; n < fromData.length; n++) {\n\t\t\ttoData[n + start] += fromData[n];\n\t\t}\n\t}\n};\n\nmodule.exports = placeNote;\n","var SynthSequence = require('./synth-sequence');\nvar CreateSynth = require('./create-synth');\nvar activeAudioContext = require(\"./active-audio-context\");\n\nfunction playEvent(midiPitches, midiGracePitches, millisecondsPerMeasure, soundFontUrl, debugCallback) {\n\tvar sequence = new SynthSequence();\n\n\tfor (var i = 0; i < midiPitches.length; i++) {\n\t\tvar note = midiPitches[i];\n\t\tvar trackNum = sequence.addTrack();\n\t\tsequence.setInstrument(trackNum, note.instrument);\n\t\tif (i === 0 && midiGracePitches) {\n\t\t\tfor (var j = 0; j < midiGracePitches.length; j++) {\n\t\t\t\tvar grace = midiGracePitches[j];\n\t\t\t\tsequence.appendNote(trackNum, grace.pitch, 1 / 64, grace.volume, grace.cents);\n\t\t\t}\n\t\t}\n\t\tsequence.appendNote(trackNum, note.pitch, note.duration, note.volume, note.cents);\n\t}\n\n\tvar ac = activeAudioContext();\n\tif (ac.state === \"suspended\") {\n\t\treturn ac.resume().then(function () {\n\t\t\treturn doPlay(sequence, millisecondsPerMeasure, soundFontUrl, debugCallback);\n\t\t});\n\t} else {\n\t\treturn doPlay(sequence, millisecondsPerMeasure, soundFontUrl, debugCallback);\n\t}\n}\n\nfunction doPlay(sequence, millisecondsPerMeasure, soundFontUrl, debugCallback) {\n\tvar buffer = new CreateSynth();\n\treturn buffer.init({\n\t\tsequence: sequence,\n\t\tmillisecondsPerMeasure: millisecondsPerMeasure,\n\t\toptions: { soundFontUrl: soundFontUrl },\n\t\tdebugCallback: debugCallback,\n\t}).then(function () {\n\t\treturn buffer.prime();\n\t}).then(function () {\n\t\tbuffer.start();\n\t\treturn Promise.resolve();\n\t});\n}\n\nmodule.exports = playEvent;\n","// Call this when it is safe for the abcjs to produce sound. This is after the first user gesture on the page.\n// If you call it with no parameters, then an AudioContext is created and stored.\n// If you call it with a parameter, that is used as an already created AudioContext.\n\nfunction registerAudioContext(ac) {\n\t// If one is passed in, that is the one to use even if there was already one created.\n\tif (ac)\n\t\twindow.abcjsAudioContext = ac;\n\telse {\n\t\t// no audio context passed in, so create it unless there is already one from before.\n\t\tif (!window.abcjsAudioContext) {\n\t\t\tvar AudioContext = window.AudioContext || window.webkitAudioContext;\n\t\t\tif (AudioContext)\n\t\t\t\twindow.abcjsAudioContext = new AudioContext();\n\t\t\telse\n\t\t\t\treturn false;\n\t\t}\n\t}\n\treturn window.abcjsAudioContext.state !== \"suspended\";\n}\n\nmodule.exports = registerAudioContext;\n","var soundsCache = {\n};\n\nmodule.exports = soundsCache;\n","var activeAudioContext = require('./active-audio-context');\n\n//\n// Support for audio depends on three things: support for Promise, support for AudioContext, and support for AudioContext.resume.\n// Unfortunately, AudioContext.resume cannot be detected unless an AudioContext is created, and creating an AudioContext can't\n// be done until a user click, so there is no way to know for sure if audio is supported until the user tries.\n// We can get close, though - we can test for Promises and AudioContext - there are just a few evergreen browsers that supported\n// that before supporting resume, so we'll test what we can.\n\n// The best use of this routine is to call it before doing any audio related stuff to decide whether to bother.\n// But then, call it again after a user interaction to test for resume.\n\nfunction supportsAudio() {\n\tif (!window.Promise)\n\t\treturn false;\n\n\tif (!window.AudioContext &&\n\t\t!window.webkitAudioContext &&\n\t\t!navigator.mozAudioContext &&\n\t\t!navigator.msAudioContext)\n\t\treturn false;\n\n\tvar aac = activeAudioContext();\n\tif (aac)\n\t\treturn aac.resume !== undefined;\n}\n\nmodule.exports = supportsAudio;\n","var CreateSynthControl = require('./create-synth-control');\nvar CreateSynth = require('./create-synth');\nvar TimingCallbacks = require('../api/abc_timing_callbacks');\nvar activeAudioContext = require('./active-audio-context');\n\nfunction SynthController() {\n\tvar self = this;\n\tself.warp = 100;\n\tself.cursorControl = null;\n\tself.visualObj = null;\n\tself.timer = null;\n\tself.midiBuffer = null;\n\tself.options = null;\n\tself.currentTempo = null;\n\tself.control = null;\n\tself.isLooping = false;\n\tself.isStarted = false;\n\tself.isLoaded = false;\n\tself.isLoading = false;\n\n\tself.load = function (selector, cursorControl, visualOptions) {\n\t\tif (!visualOptions)\n\t\t\tvisualOptions = {};\n\t\tif (visualOptions.displayPlay === undefined)\n\t\t\tvisualOptions.displayPlay = true\n\t\tif (visualOptions.displayProgress === undefined)\n\t\t\tvisualOptions.displayProgress = true\n\t\tself.control = new CreateSynthControl(selector, {\n\t\t\tloopHandler: visualOptions.displayLoop ? self.toggleLoop : undefined,\n\t\t\trestartHandler: visualOptions.displayRestart ? self.restart : undefined,\n\t\t\tplayPromiseHandler: visualOptions.displayPlay ? self.play : undefined,\n\t\t\tprogressHandler: visualOptions.displayProgress ? self.randomAccess : undefined,\n\t\t\twarpHandler: visualOptions.displayWarp ? self.onWarp : undefined,\n\t\t\tafterResume: self.init\n\t\t});\n\t\tself.cursorControl = cursorControl;\n\t\tself.disable(true);\n\t};\n\n\tself.disable = function(isDisabled) {\n\t\tif (self.control)\n\t\t\tself.control.disable(isDisabled);\n\t};\n\n\tself.setTune = function(visualObj, userAction, audioParams) {\n\t\tself.visualObj = visualObj;\n\t\tself.disable(false);\n\t\tself.options = audioParams ? audioParams : {};\n\n\t\tif (self.control) {\n\t\t\tself.pause();\n\t\t\tself.setProgress(0, 1);\n\t\t\tself.control.resetAll();\n\t\t\tself.restart();\n\t\t\tself.isStarted = false;\n\t\t}\n\t\tself.isLooping = false;\n\n\t\tif (userAction)\n\t\t\treturn self.go();\n\t\telse {\n\t\t\treturn Promise.resolve({status: \"no-audio-context\"});\n\t\t}\n\t};\n\n\tself.go = function () {\n\t\tself.isLoading = true;\n\t\tvar millisecondsPerMeasure = self.visualObj.millisecondsPerMeasure() * 100 / self.warp;\n\t\tself.currentTempo = Math.round(self.visualObj.getBeatsPerMeasure() / millisecondsPerMeasure * 60000);\n\t\tif (self.control)\n\t\t\tself.control.setTempo(self.currentTempo);\n\t\tself.percent = 0;\n\t\tvar loadingResponse;\n\n\t\tif (!self.midiBuffer)\n\t\t\tself.midiBuffer = new CreateSynth();\n\t\treturn activeAudioContext().resume().then(function (response) {\n\t\t\treturn self.midiBuffer.init({\n\t\t\t\tvisualObj: self.visualObj,\n\t\t\t\toptions: self.options,\n\t\t\t\tmillisecondsPerMeasure: millisecondsPerMeasure\n\t\t\t});\n\t\t}).then(function (response) {\n\t\t\tloadingResponse = response;\n\t\t\treturn self.midiBuffer.prime();\n\t\t}).then(function () {\n\t\t\tvar subdivisions = 16;\n\t\t\tif (self.cursorControl &&\n\t\t\t\tself.cursorControl.beatSubdivisions !== undefined &&\n\t\t\t\tparseInt(self.cursorControl.beatSubdivisions, 10) >= 1 &&\n\t\t\t\tparseInt(self.cursorControl.beatSubdivisions, 10) <= 64)\n\t\t\t\tsubdivisions = parseInt(self.cursorControl.beatSubdivisions, 10);\n\n\t\t\t// Need to create the TimingCallbacks after priming the midi so that the midi data is available for the callbacks.\n\t\t\tself.timer = new TimingCallbacks(self.visualObj, {\n\t\t\t\tbeatCallback: self.beatCallback,\n\t\t\t\teventCallback: self.eventCallback,\n\t\t\t\tlineEndCallback: self.lineEndCallback,\n\t\t\t\tqpm: self.currentTempo,\n\n\t\t\t\textraMeasuresAtBeginning: self.cursorControl ? self.cursorControl.extraMeasuresAtBeginning : undefined,\n\t\t\t\tlineEndAnticipation: self.cursorControl ? self.cursorControl.lineEndAnticipation : 0,\n\t\t\t\tbeatSubdivisions: subdivisions,\n\t\t\t});\n\t\t\tif (self.cursorControl && self.cursorControl.onReady && typeof self.cursorControl.onReady  === 'function')\n\t\t\t\tself.cursorControl.onReady(self);\n\t\t\tself.isLoaded = true;\n\t\t\tself.isLoading = false;\n\t\t\treturn Promise.resolve({ status: \"created\", notesStatus: loadingResponse });\n\t\t});\n\t};\n\n\tself.destroy = function () {\n\t\tif (self.timer) {\n\t\t\tself.timer.reset();\n\t\t\tself.timer.stop();\n\t\t\tself.timer = null;\n\t\t}\n\t\tif (self.midiBuffer) {\n\t\t\tself.midiBuffer.stop();\n\t\t\tself.midiBuffer = null;\n\t\t}\n\t\tself.setProgress(0, 1);\n\t\tif (self.control)\n\t\t\tself.control.resetAll();\n\t};\n\n\tself.play = function () {\n\t\treturn self.runWhenReady(self._play, undefined);\n\t};\n\n\tfunction sleep(ms) {\n\t\treturn new Promise(function (resolve) {\n\t\t\tsetTimeout(resolve, ms)\n\t\t});\n\t}\n\n\tself.runWhenReady = function(fn, arg1) {\n\t\tif (!self.visualObj)\n\t\t\treturn Promise.resolve({status: \"loading\"});\n\t\tif (self.isLoading) {\n\t\t\t// Some other promise is waiting for the tune to be loaded, so just wait.\n\t\t\treturn sleep(500).then(function() {\n\t\t\t\tif (self.isLoading)\n\t\t\t\t\treturn self.runWhenReady(fn, arg1);\n\t\t\t\treturn fn(arg1);\n\t\t\t})\n\t\t} else if (!self.isLoaded) {\n\t\t\treturn self.go().then(function () {\n\t\t\t\treturn fn(arg1);\n\t\t\t});\n\t\t} else {\n\t\t\treturn fn(arg1);\n\t\t}\n\t};\n\n\tself._play = function () {\n\t\treturn activeAudioContext().resume().then(function () {\n\t\t\tself.isStarted = !self.isStarted;\n\t\t\tif (self.isStarted) {\n\t\t\t\tif (self.cursorControl && self.cursorControl.onStart && typeof self.cursorControl.onStart === 'function')\n\t\t\t\t\tself.cursorControl.onStart();\n\t\t\t\tself.midiBuffer.start();\n\t\t\t\tself.timer.start(self.percent);\n\t\t\t\tif (self.control)\n\t\t\t\t\tself.control.pushPlay(true);\n\t\t\t} else {\n\t\t\t\tself.pause();\n\t\t\t}\n\t\t\treturn Promise.resolve({status: \"ok\"});\n\t\t})\n\t};\n\n\tself.pause = function() {\n\t\tif (self.timer) {\n\t\t\tself.timer.pause();\n\t\t\tself.midiBuffer.pause();\n\t\t\tif (self.control)\n\t\t\t\tself.control.pushPlay(false);\n\t\t}\n\t};\n\n\tself.toggleLoop = function () {\n\t\tself.isLooping = !self.isLooping;\n\t\tif (self.control)\n\t\t\tself.control.pushLoop(self.isLooping);\n\t};\n\n\tself.restart = function () {\n\t\tif (self.timer) {\n\t\t\tself.timer.setProgress(0);\n\t\t\tself.midiBuffer.seek(0);\n\t\t}\n\t};\n\n\tself.randomAccess = function (ev) {\n\t\treturn self.runWhenReady(self._randomAccess, ev);\n\t};\n\n\tself._randomAccess = function (ev) {\n\t\tvar background = (ev.target.classList.contains('abcjs-midi-progress-indicator')) ? ev.target.parentNode : ev.target;\n\t\tvar percent = (ev.x - background.getBoundingClientRect().left) / background.offsetWidth;\n\t\tif (percent < 0)\n\t\t\tpercent = 0;\n\t\tif (percent > 1)\n\t\t\tpercent = 1;\n\t\tself.seek(percent);\n\t\treturn Promise.resolve({status: \"ok\"});\n\t};\n\n\tself.seek = function (percent, units) {\n\t\tif (self.timer && self.midiBuffer) {\n\t\t\tself.timer.setProgress(percent, units);\n\t\t\tself.midiBuffer.seek(percent, units);\n\t\t}\n\t};\n\n\tself.setWarp = function (newWarp) {\n\t\tif (parseInt(newWarp, 10) > 0) {\n\t\t\tself.warp = parseInt(newWarp, 10);\n\t\t\tvar wasPlaying = self.isStarted;\n\t\t\tvar startPercent = self.percent;\n\t\t\tself.destroy();\n\t\t\tself.isStarted = false;\n\t\t\treturn self.go().then(function () {\n\t\t\t\tself.setProgress(startPercent, self.midiBuffer.duration * 1000);\n\t\t\t\tif (self.control)\n\t\t\t\t\tself.control.setWarp(self.currentTempo, self.warp);\n\t\t\t\tif (wasPlaying) {\n\t\t\t\t\treturn self.play().then(function () {\n\t\t\t\t\t\tself.seek(startPercent);\n\t\t\t\t\t\treturn Promise.resolve();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tself.seek(startPercent);\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t}\n\t\treturn Promise.resolve();\n\t};\n\n\tself.onWarp = function (ev) {\n\t\tvar newWarp = ev.target.value;\n\t\treturn self.setWarp(newWarp);\n\t};\n\n\tself.setProgress = function (percent, totalTime) {\n\t\tself.percent = percent;\n\t\tif (self.control)\n\t\t\tself.control.setProgress(percent, totalTime);\n\t};\n\n\tself.finished = function () {\n\t\tself.timer.reset();\n\t\tif (self.isLooping) {\n\t\t\tself.timer.start(0);\n\t\t\tself.midiBuffer.finished();\n\t\t\tself.midiBuffer.start();\n\t\t\treturn \"continue\";\n\t\t} else {\n\t\t\tself.timer.stop();\n\t\t\tif (self.isStarted) {\n\t\t\t\tif (self.control)\n\t\t\t\t\tself.control.pushPlay(false);\n\t\t\t\tself.isStarted = false;\n\t\t\t\tself.midiBuffer.finished();\n\t\t\t\tif (self.cursorControl && self.cursorControl.onFinished && typeof self.cursorControl.onFinished  === 'function')\n\t\t\t\t\tself.cursorControl.onFinished();\n\t\t\t\tself.setProgress(0, 1);\n\t\t\t}\n\t\t}\n\t};\n\n\tself.beatCallback = function (beatNumber, totalBeats, totalTime, position) {\n\t\tvar percent = beatNumber / totalBeats;\n\t\tself.setProgress(percent, totalTime);\n\t\tif (self.cursorControl && self.cursorControl.onBeat && typeof self.cursorControl.onBeat  === 'function')\n\t\t\tself.cursorControl.onBeat(beatNumber, totalBeats, totalTime, position);\n\t};\n\n\tself.eventCallback = function (event) {\n\t\tif (event) {\n\t\t\tif (self.cursorControl && self.cursorControl.onEvent && typeof self.cursorControl.onEvent  === 'function')\n\t\t\t\tself.cursorControl.onEvent(event);\n\t\t} else {\n\t\t\treturn self.finished();\n\t\t}\n\t};\n\n\tself.lineEndCallback = function (lineEvent, leftEvent) {\n\t\tif (self.cursorControl && self.cursorControl.onLineEnd && typeof self.cursorControl.onLineEnd  === 'function')\n\t\t\tself.cursorControl.onLineEnd(lineEvent, leftEvent);\n\t};\n\n\tself.getUrl = function () {\n\t\treturn self.midiBuffer.download();\n\t};\n\n\tself.download = function(fileName) {\n\t\tvar url = self.getUrl();\n\t\tvar link = document.createElement('a');\n\t\tdocument.body.appendChild(link);\n\t\tlink.setAttribute(\"style\",\"display: none;\");\n\t\tlink.href = url;\n\t\tlink.download = fileName ? fileName : 'output.wav';\n\t\tlink.click();\n\t\twindow.URL.revokeObjectURL(url);\n\t\tdocument.body.removeChild(link);\n\t};\n}\n\nmodule.exports = SynthController;\n","var SynthSequence = function() {\n\tvar self = this;\n\tself.tracks = [];\n\tself.totalDuration = 0;\n\tself.currentInstrument = [];\n\tself.starts = [];\n\n\tself.addTrack = function() {\n\t\tself.tracks.push([]);\n\t\tself.currentInstrument.push(0);\n\t\tself.starts.push(0);\n\t\treturn self.tracks.length - 1;\n\t};\n\n\tself.setInstrument = function(trackNumber, instrumentNumber) {\n\t\tself.tracks[trackNumber].push({\n\t\t\tchannel: 0,\n\t\t\tcmd: \"program\",\n\t\t\tinstrument: instrumentNumber\n\t\t});\n\t\tself.currentInstrument[trackNumber] = instrumentNumber;\n\t};\n\n\tself.appendNote = function(trackNumber, pitch, durationInMeasures, volume, cents) {\n\t\tvar note = {\n\t\t\tcmd: \"note\",\n\t\t\tduration: durationInMeasures,\n\t\t\tgap: 0,\n\t\t\tinstrument: self.currentInstrument[trackNumber],\n\t\t\tpitch: pitch,\n\t\t\tstart: self.starts[trackNumber],\n\t\t\tvolume: volume\n\t\t};\n\t\tif (cents)\n\t\t\tnote.cents = cents;\n\t\tself.tracks[trackNumber].push(note);\n\t\tself.starts[trackNumber] += durationInMeasures;\n\n\t\tself.totalDuration = Math.max(self.totalDuration, self.starts[trackNumber]);\n\t};\n};\n\nmodule.exports = SynthSequence;\n","const {noteToMidi} = require('../../synth/note-to-midi');\nvar TabNote = require('./tab-note');\nvar TabNotes = require('./tab-notes');\n\n\nfunction buildCapo(self) {\n  var capoTuning = null;\n  var tuning = self.tuning;\n  if (self.capo > 0) {\n    capoTuning = [];\n    for (var iii = 0; iii < tuning.length; iii++) {\n      var curNote = new TabNote.TabNote(tuning[iii]);\n      for (var jjj = 0; jjj < self.capo; jjj++) {\n        curNote = curNote.nextNote();\n      }\n      capoTuning[iii] = curNote.emit();\n    }\n  }\n  return capoTuning;\n}\n\nfunction buildPatterns(self) {\n  var strings = [];\n  var tuning = self.tuning;\n  if (self.capo > 0) {\n    tuning = self.capoTuning;\n  }\n  var pos = tuning.length - 1;\n  for (var iii = 0; iii < tuning.length; iii++) {\n    var nextNote = self.highestNote; // highest handled note\n    if (iii != tuning.length - 1) {\n      nextNote = tuning[iii + 1];\n    }\n    var tabNotes = new TabNotes(tuning[iii],nextNote);\n    var stringNotes = tabNotes.build();\n    if (stringNotes.error) {\n      return stringNotes;\n    }\n    strings[pos--] = stringNotes;\n  }\n  return strings;\n}\n\n\nfunction buildSecond(first) {\n  var seconds = [];\n  seconds[0] = [];\n  var strings = first.strings;\n  for (var iii = 1; iii < strings.length; iii++) {\n    seconds[iii] = strings[iii - 1];\n  }\n  return seconds;\n}\n\nfunction sameString(self, chord) {\n  for (var jjjj = 0; jjjj < chord.length - 1; jjjj++) {\n    var curPos = chord[jjjj];\n    var nextPos = chord[jjjj + 1];\n    if (curPos.str == nextPos.str) {\n      // same String\n      // => change lower pos \n      if (curPos.str == self.strings.length - 1) {\n        // Invalid tab Chord position for instrument\n        curPos.num = \"?\";\n        nextPos.num = \"?\"; \n        return; \n      }\n      // change lower pitch on lowest string\n      if (nextPos.num < curPos.num) {\n        nextPos.str++;\n        nextPos = noteToNumber(self,\n          nextPos.note,\n          nextPos.str,\n          self.secondPos,\n          self.strings[nextPos.str].length\n        );\n      } else {\n        curPos.str++;\n        curPos = noteToNumber(self,\n          curPos.note,\n          curPos.str,\n          self.secondPos,\n          self.strings[curPos.str].length\n        );\n      }\n      // update table\n      chord[jjjj] = curPos;\n      chord[jjjj + 1] = nextPos;\n    }\n  }\n  return null;\n}\n\nfunction handleChordNotes(self, notes) {\n  var retNotes = [];\n  for (var iiii = 0; iiii < notes.length; iiii++) {\n    if (notes[iiii].endTie)\n      continue;\n    var note = new TabNote.TabNote(notes[iiii].name, self.clefTranspose);\n    note.checkKeyAccidentals(self.accidentals, self.measureAccidentals)\n    var curPos = toNumber(self, note);\n    retNotes.push(curPos);\n  }\n  sameString(self, retNotes);\n  return retNotes;\n}\n\nfunction noteToNumber(self, note, stringNumber, secondPosition , firstSize) {\n  var strings = self.strings;\n  note.checkKeyAccidentals(self.accidentals, self.measureAccidentals) ;\n  if (secondPosition) {\n    strings = secondPosition;\n  }\n  var noteName = note.emitNoAccidentals();\n  var num = strings[stringNumber].indexOf(noteName);\n  var acc = note.acc;\n  if (num != -1) {\n    if (secondPosition) {\n      num += firstSize;\n    }\n    if ( (note.isFlat || note.acc == -1) && (num == 0)) {\n      // flat on 0 pos => previous string 7th position\n      var noteEquiv = note.getAccidentalEquiv();\n      stringNumber++;\n      num = strings[stringNumber].indexOf(noteEquiv.emit());\n      acc = 0;\n    }\n    return {\n      num: (num + acc),\n      str: stringNumber,\n      note: note\n    };\n  }\n  return null;\n}\n\nfunction toNumber(self, note) {\n  if (note.isAltered || note.natural) {\n    var acc;\n    if (note.isFlat) {\n      if (note.isDouble)\n        acc = \"__\"\n      else\n        acc = \"_\"  \n    } else if (note.isSharp) {\n      if (note.isDouble)\n        acc = \"^^\"\n      else\n        acc = \"^\"  \n    } else if (note.natural)\n      acc = \"=\"\n    self.measureAccidentals[note.name.toUpperCase()] = acc  \n  }\n  for (var i = self.stringPitches.length-1; i >= 0; i--) {\n    if (note.pitch + note.pitchAltered >= self.stringPitches[i]) {\n      var num = note.pitch + note.pitchAltered - self.stringPitches[i]\n      if (note.quarter === '^') num -= 0.5\n      else if (note.quarter === \"v\") num += 0.5\n      return {\n        num: Math.round(num),\n        str: self.stringPitches.length-1-i, // reverse the strings because string 0 is on the bottom\n        note: note\n      }\n    }\n  }\n  return {\n    num: \"?\",\n    str: self.stringPitches.length-1,\n    note: note,\n  };\n}\n\nStringPatterns.prototype.stringToPitch = function (stringNumber) {\n  var startingPitch = 5.3;\n  var bottom = this.strings.length - 1;\n  return startingPitch + ((bottom - stringNumber) * this.linePitch);\n};\n\nfunction invalidNumber( retNotes , note ) {\n  var number = {\n    num: \"?\",\n    str: 0,\n    note: note\n  };\n  retNotes.push(number);\n  retNotes.error = note.emit() + ': unexpected note for instrument' ;\n} \n\nStringPatterns.prototype.notesToNumber = function (notes, graces) {\n  var note;\n  var number;\n  var error = null; \n  var retNotes = null;\n  if (notes) {\n    retNotes = [];\n    if (notes.length > 1) {\n      retNotes = handleChordNotes(this, notes);\n      if (retNotes.error) {\n        error = retNotes.error;\n      }\n    } else {\n      if (!notes[0].endTie) {\n        note = new TabNote.TabNote(notes[0].name, this.clefTranspose);\n        note.checkKeyAccidentals(this.accidentals, this.measureAccidentals)\n        number = toNumber(this, note);\n        if (number) {\n          retNotes.push(number);\n        } else {\n          invalidNumber(retNotes, note);\n          error = retNotes.error;\n        }\n      }\n    }\n  }  \n  if (error) return retNotes;\n  var retGraces = null;\n  if (graces) {\n    retGraces = [];\n    for (var iiii = 0; iiii < graces.length; iiii++) {\n      note = new TabNote.TabNote(graces[iiii].name, this.clefTranspose);\n      note.checkKeyAccidentals(this.accidentals, this.measureAccidentals)\n      number = toNumber(this, note);\n      if (number) {\n        retGraces.push(number);\n      } else {\n        invalidNumber(retGraces, note);\n        error = retNotes.error;\n      }\n    }\n  }\n    \n  return {\n    notes: retNotes,\n    graces: retGraces,\n    error: error\n  };\n};\n\nStringPatterns.prototype.toString = function () {\n  var arr = []\n  for (var i = 0; i < this.tuning.length; i++) {\n    var str = this.tuning[i].replaceAll(',', '').replaceAll(\"'\", '').toUpperCase();\n    if (str[0] === '_') str = str[1] + 'b '\n    else if (str[0] === '^') str = str[1] + \"# \"\n    arr.push(str)\n  }\n  return arr.join('');\n};\n\nStringPatterns.prototype.tabInfos = function (plugin) {\n  var _super = plugin._super;\n  var name = _super.params.label;\n  if (name) {\n    var tunePos = name.indexOf('%T');\n    var tuning = \"\";\n    if (tunePos != -1) {\n      tuning = this.toString();\n      if (plugin.capo > 0) {\n        tuning += ' capo:' + plugin.capo;\n      }\n      name = name.replace('%T', tuning);\n    }\n    return name;\n  }\n  return '';\n};\n\n// MAE 27 Nov 2023\nStringPatterns.prototype.suppress = function (plugin) {\n  var _super = plugin._super;\n  var suppress = _super.params.suppress;\n  if (suppress){\n    return true;\n  }\n  return false;\n};\n// MAE 27 Nov 2023 End\n\n/**\n * Common patterns for all string instruments\n * @param {} plugin\n * @param {} tuning\n * @param {*} capo\n * @param {*} highestNote \n */\nfunction StringPatterns(plugin) {\n  var tuning = plugin.tuning;\n  var capo = plugin.capo;\n  var highestNote = plugin._super.params.highestNote;\n  this.linePitch = plugin.linePitch;\n  this.highestNote = \"a'\";\n  if (highestNote) {\n    // override default\n    this.highestNote = highestNote;\n  }\n  this.measureAccidentals = {}\n  this.capo = 0;\n  if (capo) {\n    this.capo = parseInt(capo,10);\n  }\n  this.transpose = plugin.transpose ? plugin.transpose : 0\n  this.tuning = tuning;\n  this.stringPitches = []\n  for (var i = 0; i < this.tuning.length; i++) {\n    var pitch = noteToMidi(this.tuning[i]) + this.capo\n    this.stringPitches.push(pitch)\n  }\n  if (this.capo > 0) {\n    this.capoTuning = buildCapo(this);\n  }\n  this.strings = buildPatterns(this);\n  if (this.strings.error) {\n    plugin._super.setError(this.strings.error);\n    plugin.inError = true;\n    return;\n  }\n  // second position pattern per string\n  this.secondPos = buildSecond(this);\n}\n\n\n\nmodule.exports = StringPatterns;","\n/**\n * Layout tablature informations for draw\n * @param {*} numLines \n * @param {*} lineSpace \n */\n\nfunction StringTablature(numLines, lineSpace) {\n  this.numLines = numLines;\n  this.lineSpace = lineSpace;\n  this.verticalSize = this.numLines * this.lineSpace;\n  var pitch = 3;\n  this.bar = {\n    pitch: pitch,\n    pitch2: lineSpace * numLines,\n    height: 5,\n  };\n}\n\n/**\n * return true if current line should not produce a tab\n * @param {} line \n */\nStringTablature.prototype.bypass = function (line) {\n  var voices = line.staffGroup.voices;\n  if (voices.length > 0) {\n    if (voices[0].isPercussion) return true;\n  }\n  return false;\n};  \n\n\nStringTablature.prototype.setRelative = function (child, relative, first) {\n  switch (child.type) {\n    case 'bar':\n      relative.pitch = this.bar.pitch;\n      relative.pitch2 = this.bar.pitch2;\n      relative.height = this.height;\n      break;\n    case 'symbol':\n      var top = this.bar.pitch2 / 2;\n      if (child.name == 'dots.dot') {\n        if (first) {\n          relative.pitch = top;\n          return false;\n        } else {\n          relative.pitch = top + this.lineSpace;\n          return true;\n        }\n      }\n      break;\n  }\n  return first;\n};\n\nmodule.exports = StringTablature;","var {noteToMidi, midiToNote} = require('../../synth/note-to-midi');\n\n/**\n * \n * Note structure for Tabs\n * \n */\nvar notes = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];\n\n\nfunction TabNote(note, clefTranspose) {\n  var pitch = noteToMidi(note)\n  if (clefTranspose)\n    pitch += clefTranspose\n  var newNote = midiToNote(pitch);\n  var isFlat = false;\n  var isSharp = false;\n  var isAltered = false;\n  var natural = null;\n  var quarter = null;\n  var isDouble = false;\n  var acc = 0;\n\n  if (note.startsWith('_')) {\n    isFlat = true;\n    acc = -1;\n    // check quarter flat\n    if (note[1] == '/') {\n      isFlat = false;\n      quarter = \"v\";\n      acc = 0;\n    } else if (note[1] == '_') {\n      // double flat\n      isDouble = true;\n      acc -= 1;\n    }\n  } else if (note.startsWith('^')) {\n    isSharp = true;\n    acc = +1;\n    // check quarter sharp\n    if (note[1] == '/') {\n      isSharp = false;\n      quarter = \"^\";\n      acc = 0;\n    } else if (note[1] == '^') {\n      // double sharp\n      isDouble = true;\n      acc += 1;\n    }\n  } else if (note.startsWith('=')) {\n    natural = true;\n    acc = 0;\n  }\n  isAltered = isFlat || isSharp || (quarter != null);\n  if (isAltered || natural) {\n    if ((quarter != null) || (isDouble)) {\n      newNote = note.slice(2);\n    } else {\n      newNote = note.slice(1);\n    }\n  }\n  var hasComma = (newNote.match(/,/g) || []).length;\n  var hasQuote = (newNote.match(/'/g) || []).length;\n\n  this.pitch = pitch\n  this.pitchAltered = 0\n  this.name = newNote;\n  this.acc = acc;\n  this.isSharp = isSharp;\n  this.isKeySharp = false;\n  this.isDouble = isDouble;\n  this.isAltered = isAltered;\n  this.isFlat = isFlat;\n  this.isKeyFlat = false;\n  this.natural = natural;\n  this.quarter = quarter;\n  this.isLower = (this.name == this.name.toLowerCase());\n  this.name = this.name[0].toUpperCase();\n  this.hasComma = hasComma;\n  this.isQuoted = hasQuote;\n}\n\nfunction cloneNote(self) {\n  var newNote = self.name;\n  var newTabNote = new TabNote(newNote);\n  newTabNote.pitch = self.pitch;\n  newTabNote.hasComma = self.hasComma;\n  newTabNote.isLower = self.isLower;\n  newTabNote.isQuoted = self.isQuoted;\n  newTabNote.isSharp = self.isSharp;\n  newTabNote.isKeySharp = self.isKeySharp;\n  newTabNote.isFlat = self.isFlat;\n  newTabNote.isKeyFlat = self.isKeyFlat;\n  return newTabNote;\n} \nTabNote.prototype.sameNoteAs = function (note) {\n  return note.pitch === this.pitch\n};\n\nTabNote.prototype.isLowerThan = function (note) {\n  return note.pitch > this.pitch\n};\n\nTabNote.prototype.checkKeyAccidentals = function(accidentals, measureAccidentals) {\n  if (this.isAltered || this.natural)\n    return\n  if (measureAccidentals[this.name.toUpperCase()]) {\n    switch (measureAccidentals[this.name.toUpperCase()]) {\n      case \"__\": this.acc = -2; this.pitchAltered = -2; return;\n      case \"_\": this.acc = -1; this.pitchAltered = -1; return;\n      case \"=\": this.acc = 0; this.pitchAltered = 0; return;\n      case \"^\": this.acc = 1; this.pitchAltered = 1; return;\n      case \"^^\": this.acc = 2; this.pitchAltered = 2; return;\n    }\n  } else if (accidentals) {\n    var curNote = this.name;\n    for (var iii = 0; iii < accidentals.length; iii++) {\n      var curAccidentals = accidentals[iii];\n      if (curNote == curAccidentals.note.toUpperCase()) {\n        if (curAccidentals.acc == 'flat') {\n          this.acc = -1;\n          this.isKeyFlat = true;\n          this.pitchAltered = -1\n        }\n        if (curAccidentals.acc == 'sharp') {\n          this.acc = +1;\n          this.isKeySharp = true;\n          this.pitchAltered = 1\n        }\n      }\n    }\n  }\n};\n\nTabNote.prototype.getAccidentalEquiv = function () {\n  var cloned = cloneNote(this);\n  if (cloned.isSharp || cloned.isKeySharp ) {\n    cloned = cloned.nextNote();\n    cloned.isFlat = true;\n    cloned.isSharp = false;\n    cloned.isKeySharp = false;\n  } else if (cloned.isFlat || cloned.isKeyFlat ) {\n    cloned = cloned.prevNote();\n    cloned.isSharp = true;\n    cloned.isFlat = false;\n    cloned.isKeyFlat = false;\n  }\n  return cloned;\n};\n\n\nTabNote.prototype.nextNote = function () {\n  var note = midiToNote(this.pitch+1+this.pitchAltered)\n  return new TabNote(note)\n};\n\nTabNote.prototype.prevNote = function () {\n  var note = midiToNote(this.pitch-1+this.pitchAltered)\n  return new TabNote(note)\n};\n\nTabNote.prototype.emitNoAccidentals = function (  ) {\n  var returned = this.name;\n  if (this.isLower) {\n    returned = returned.toLowerCase();\n  }\n  for (var ii = 0; ii < this.isQuoted; ii++) {\n    returned += \"'\";\n  }\n  for (var jj = 0; jj < this.hasComma; jj++) {\n    returned += \",\";\n  }\n  return returned;\n};\n\nTabNote.prototype.emit = function () {\n  var returned = this.name;\n  if (this.isSharp || this.isKeySharp ) {\n    returned = '^' + returned;\n    if (this.isDouble) {\n      returned = '^' + returned;\n    }\n  }\n  if (this.isFlat || this.isKeyFlat) {\n    returned = '_' + returned;\n    if (this.isDouble) {\n      returned = '_' + returned;\n    }\n  }\n  if (this.quarter) {\n    if (this.quarter == \"^\") {\n      returned = \"^/\" + returned;\n    } else {\n      returned = \"_/\" + returned;\n    }\n  }\n  if (this.natural) {\n    returned = '=' + returned;\n  }\n  for (var ii = 1; ii <= this.hasComma; ii++) {\n    returned += ',';\n  }\n  \n  if (this.isLower) {\n    returned = returned.toLowerCase();\n    for (var jj = 1; jj <= this.isQuoted; jj++) {\n      returned += \"'\";\n    }\n  }\n  return returned;\n};\n\nmodule.exports = {\n  'TabNote': TabNote,\n  'notes': notes\n};","\nvar TabNote = require('./tab-note');\n\nvar notes = TabNote.notes;\n\nfunction TabNotes(fromNote, toNote) {\n  this.fromN = new TabNote.TabNote(fromNote);\n  this.toN = new TabNote.TabNote(toNote);\n}\n\n\nTabNotes.prototype.build = function () {\n  var fromN = this.fromN;\n  var toN = this.toN;\n  // check that toN is not lower than fromN\n  if (toN.isLowerThan(fromN)) {\n    var from = fromN.emit();\n    var tn = toN.emit();\n    return {\n      error: 'Invalid string Instrument tuning : ' +\n        tn + ' string lower than ' + from + ' string'\n    };\n  }\n  var buildReturned = [];\n  var startIndex = notes.indexOf(fromN.name);\n  var toIndex = notes.indexOf(toN.name);\n  if ((startIndex == -1) || (toIndex == -1)) {\n    return buildReturned;\n  }\n  var finished = false;\n  while (!finished) {\n    buildReturned.push(fromN.emit());\n    fromN = fromN.nextNote();\n    if (fromN.sameNoteAs(toN)) {\n      finished = true;\n    }\n  }\n  return buildReturned;\n};\n\nmodule.exports = TabNotes;\n","var StringPatterns = require('./string-patterns');\n\nfunction TabStringPatterns(plugin, defaultTuning) {\n  this.tuning = plugin._super.params.tuning;\n  if (!this.tuning) {\n    this.tuning = defaultTuning;\n  }\n  plugin.tuning = this.tuning;\n  this.strings = new StringPatterns(plugin);\n}\n\nTabStringPatterns.prototype.notesToNumber = function (notes, graces) {\n  var converter = this.strings;\n  return converter.notesToNumber(notes, graces);\n};\n\nTabStringPatterns.prototype.stringToPitch = function (stringNumber) {\n  var converter = this.strings;\n  return converter.stringToPitch(stringNumber);\n};\n\n\nmodule.exports = TabStringPatterns;\n","\nvar StringTablature = require('./string-tablature');\nvar TabCommon = require('../tab-common');\nvar TabRenderer = require('../tab-renderer');\nvar TabStringPatterns = require('./tab-string-patterns');\n\n\n/**\n * upon init mainly store provided instances for later usage\n * @param {*} abcTune  the parsed tune AST tree\n*  @param {*} tuneNumber  the parsed tune AST tree\n * @param {*} params  complementary args provided to Tablature Plugin\n */\nPlugin.prototype.init = function (abcTune, tuneNumber, params, staffNumber, tabSettings) {\n  var _super = new TabCommon(abcTune, tuneNumber, params);\n  this.abcTune = abcTune;\n  this._super = _super;\n  this.linePitch = 3;\n  this.nbLines = tabSettings.defaultTuning.length;\n  this.isTabBig = tabSettings.isTabBig;\n  this.tabSymbolOffset = tabSettings.tabSymbolOffset;\n  this.capo = params.capo;\n  this.transpose = params.visualTranspose;\n  this.hideTabSymbol = params.hideTabSymbol;\n  this.tablature = new StringTablature(this.nbLines,\n    this.linePitch);\n  var semantics = new TabStringPatterns(this, tabSettings.defaultTuning);\n  this.semantics = semantics;\n};\n\nPlugin.prototype.render = function (renderer, line, staffIndex) {\n  if (this._super.inError) return;\n  if (this.tablature.bypass(line)) return;\n  var rndrer = new TabRenderer(this, renderer, line, staffIndex);\n  rndrer.doLayout();\n};\n\nfunction Plugin() {}\n\n//\n// Tablature plugin definition\n//\nvar AbcStringTab = function () {\n  return { name: 'StringTab', tablature: Plugin };\n};\n\nmodule.exports = AbcStringTab;\n","/**\n * Tablature Absolute elements factory\n */\nvar AbsoluteElement = require('../write/creation/elements/absolute-element');\nvar RelativeElement = require('../write/creation/elements/relative-element');\n\nfunction isObject(a) { return a != null && a.constructor === Object; }\nfunction cloneObject(dest, src) {\n  for (var prop in src) {\n    if (src.hasOwnProperty(prop)) {\n      if (!(Array.isArray(src[prop]) || isObject(src[prop]))) {\n        dest[prop] = src[prop];\n      }\n    }\n  }\n}\n\nfunction cloneAbsolute(absSrc) {\n  var returned = new AbsoluteElement('', 0, 0, '', 0);\n  cloneObject(returned, absSrc);\n  returned.top = 0;\n  returned.bottom = -1;\n  if (absSrc.abcelem) {\n    returned.abcelem = {};\n    cloneObject(returned.abcelem, absSrc.abcelem);\n    if (returned.abcelem.el_type === \"note\")\n      returned.abcelem.el_type = 'tabNumber';\n  }\n  // TODO-PER: This fixes the classes because the element isn't created at the right time.\n  absSrc.cloned = returned\n  return returned;\n}\n\nfunction cloneAbsoluteAndRelatives(absSrc, plugin) {\n  var returned = cloneAbsolute(absSrc);\n  if (plugin) {\n    var children = absSrc.children;\n    // proceed with relative as well\n    var first = true;\n    for (var ii = 0; ii < children.length; ii++) {\n      var child = children[ii];\n      var relative = new RelativeElement('', 0, 0, 0, '');\n      cloneObject(relative, child);\n      first = plugin.tablature.setRelative(child, relative, first);\n      returned.children.push(relative);\n    }\n  }\n  return returned;\n}\n\nfunction buildTabAbsolute(plugin, absX, relX) {\n  var tabIcon = 'tab.tiny';\n  var tabYPos = 7.5;\n  if (plugin.isTabBig) {\n    tabIcon = 'tab.big';\n    tabYPos = 10;\n  }\n  var element = {\n    el_type: \"tab\",\n    icon: tabIcon,\n    Ypos: tabYPos\n  };\n\n  // Offset the TAB symbol position if specified in the tab description\n  tabYPos += plugin.tabSymbolOffset;\n\n  // For tablature like whistle tab where you want the TAB symbol hidden\n  if (!plugin.hideTabSymbol){\n\n    var tabAbsolute = new AbsoluteElement(element, 0, 0, \"symbol\", 0);\n    tabAbsolute.x = absX;\n    var tabRelative = new RelativeElement(tabIcon, 0, 0, 7.5, \"tab\");\n    tabRelative.x = relX;\n    tabAbsolute.children.push(tabRelative);\n    if (tabAbsolute.abcelem.el_type == 'tab') {\n      tabRelative.pitch = tabYPos;\n    }\n    \n  }\n  return tabAbsolute;\n}\n\nfunction lyricsDim(abs) {\n  if (abs.extra) {\n    for (var ii = 0; ii < abs.extra.length; ii++) {\n      var extra = abs.extra[ii];\n      if (extra.type == 'lyric') {\n        return {\n          bottom: extra.bottom,\n          height: extra.height\n        };\n      }\n    }\n  }\n  return null;\n}\nfunction TabAbsoluteElements() {\n  this.accidentals = null;\n}\n\nfunction getInitialStaffSize(staffGroup) {\n  var returned = 0;\n  for (var ii = 0; ii < staffGroup.length; ii++) {\n    if (!staffGroup[ii].tabNameInfos) returned++;\n  }\n  return returned;\n}\n\nfunction buildRelativeTabNote(plugin, relX, def, curNote, isGrace) {\n  var strNote = curNote.num;\n  if (curNote.note.quarter != null) {\n    // add tab quarter => needs to string conversion then \n    strNote = strNote.toString();\n    strNote += curNote.note.quarter;\n  }\n  var pitch = plugin.semantics.stringToPitch(curNote.str);\n  def.notes.push({ num: strNote, str: curNote.str, pitch: curNote.note.emit() });\n  var opt = {\n    type: 'tabNumber'\n  };\n  var tabNoteRelative = new RelativeElement(\n    strNote, 0, 0, pitch+0.3, opt);\n  tabNoteRelative.x = relX;\n  tabNoteRelative.isGrace = isGrace;\n  tabNoteRelative.isAltered = curNote.note.isAltered;\n  return tabNoteRelative;\n}\n\nfunction getXGrace(abs, index) {\n  var found = 0;\n  if (abs.extra) {\n    for (var ii = 0; ii < abs.extra.length; ii++) {\n      if (abs.extra[ii].c.indexOf('noteheads') >= 0) {\n        if (found === index) {\n          return abs.extra[ii].x + abs.extra[ii].w/2;\n        } else {\n          found++;\n        }\n      }\n    }\n  }\n  return -1;\n}\n\nfunction graceInRest( absElem ) {\n  if (absElem.abcelem) {\n    var elem = absElem.abcelem; \n    if (elem.rest) {\n      return elem.gracenotes;\n    }\n  }\n  return null;\n}\n\nfunction convertToNumber(plugin, pitches, graceNotes) {\n  var tabPos = plugin.semantics.notesToNumber(pitches, graceNotes);\n  if (tabPos.error) {\n    plugin._super.setError(tabPos.error);\n    return tabPos; // give up on error here\n  }\n  if (tabPos.graces && tabPos.notes) {\n    // add graces to last note in notes\n    var posNote = tabPos.notes.length - 1;\n    tabPos.notes[posNote].graces = tabPos.graces;\n  }\n  return tabPos;\n}\n\nfunction buildGraceRelativesForRest(plugin,abs,absChild,graceNotes,tabVoice) {\n  for (var mm = 0; mm < graceNotes.length; mm++) {\n    var defGrace = { el_type: \"note\", startChar: absChild.abcelem.startChar, endChar: absChild.abcelem.endChar, notes: [], grace: true };\n    var graceX = getXGrace(absChild, mm);\n    var curGrace = graceNotes[mm];\n    var tabGraceRelative = buildRelativeTabNote(plugin, graceX, defGrace, curGrace, true);\n    abs.children.push(tabGraceRelative);\n    tabVoice.push(defGrace);\n  }\n}\n\n/**\n * Build tab absolutes by scanning current staff line absolute array\n * @param {*} staffAbsolute\n */\nTabAbsoluteElements.prototype.build = function (plugin,\n  staffAbsolute,\n  tabVoice,\n  voiceIndex,\n  staffIndex,\n  keySig,\n  tabVoiceIndex ) {\n  var staffSize = getInitialStaffSize(staffAbsolute);\n  var source = staffAbsolute[staffIndex+voiceIndex];\n  var dest = staffAbsolute[tabVoiceIndex];\n  var tabPos = null;\n  var defNote = null;\n  if (source.children[0].abcelem.el_type != 'clef') {\n    // keysig missing => provide one for tabs\n    if (keySig != 'none') {\n      source.children.splice(0, 0, keySig);\n    }  \n  }\n  for (var ii = 0; ii < source.children.length; ii++) {\n    var absChild = source.children[ii];\n    var absX = absChild.x;\n    var relX = absX;\n    // if (absChild.children.length > 0) {\n    //   relX = absChild.children[0].x;\n    // }\n    if ( (absChild.isClef) ) {\n      dest.children.push(buildTabAbsolute(plugin, absX, relX));\n      if (absChild.abcelem.type.indexOf('-8') >= 0) plugin.semantics.strings.clefTranspose = -12\n      if (absChild.abcelem.type.indexOf('+8') >= 0) plugin.semantics.strings.clefTranspose = 12\n    }\n    switch (absChild.type) {\n      case 'staff-extra key-signature':\n        // refresh key accidentals\n        this.accidentals = absChild.abcelem.accidentals;\n        plugin.semantics.strings.accidentals = this.accidentals;\n        break;\n      case 'bar':\n        plugin.semantics.strings.measureAccidentals = {}\n        var lastBar = false;\n        if (ii === source.children.length-1) {\n          // used for final line bar drawing\n          // for multi tabs / multi staves\n          lastBar = true;\n        }\n        var cloned = cloneAbsoluteAndRelatives(absChild, plugin);\n        if (cloned.abcelem.barNumber) {\n          delete cloned.abcelem.barNumber;\n          for (var bn = 0; bn < cloned.children.length; bn++) {\n            if (cloned.children[bn].type === \"barNumber\" ) {\n              cloned.children.splice(bn, 1);\n              break;\n            }\n          }\n        }\n        cloned.abcelem.lastBar = lastBar;\n        dest.children.push(cloned);\n        tabVoice.push({\n          el_type: absChild.abcelem.el_type,\n          type: absChild.abcelem.type,\n          endChar: absChild.abcelem.endChar,\n          startChar: absChild.abcelem.startChar,\n          abselem: cloned\n        });\n        break;\n      case 'rest':\n        var restGraces = graceInRest(absChild);\n        if (restGraces) {\n          // to number conversion \n          tabPos = convertToNumber(plugin, null, restGraces);\n          if (tabPos.error) return;\n          // build relative for grace\n          defGrace = { el_type: \"note\", startChar: absChild.abcelem.startChar, endChar: absChild.abcelem.endChar, notes: [], grace: true };\n          buildGraceRelativesForRest(plugin, abs, absChild, tabPos.graces, tabVoice);\n       }\n        break;\n      case 'note':\n        var abs = cloneAbsolute(absChild);\n        abs.x = absChild.heads[0].x + absChild.heads[0].w / 2; // center the number\n        abs.lyricDim = lyricsDim(absChild);\n        var pitches = absChild.abcelem.pitches;\n        var graceNotes = absChild.abcelem.gracenotes;\n        abs.type = 'tabNumber';\n        // to number conversion \n        tabPos = convertToNumber(plugin, pitches, graceNotes);   \n        if (tabPos.error) return;\n        if (tabPos.graces) {\n          // add graces to last note in notes\n          var posNote = tabPos.notes.length - 1;\n          tabPos.notes[posNote].graces = tabPos.graces;\n        }\n        // build relative\n        defNote = { el_type: \"note\", startChar: absChild.abcelem.startChar, endChar: absChild.abcelem.endChar, notes: [] };\n        for (var ll = 0; ll < tabPos.notes.length; ll++) {\n          var curNote = tabPos.notes[ll];\n          if (curNote.graces) {\n            for (var mm = 0; mm < curNote.graces.length; mm++) {\n              var defGrace = { el_type: \"note\", startChar: absChild.abcelem.startChar, endChar: absChild.abcelem.endChar, notes: [], grace: true };\n              var graceX = getXGrace(absChild , mm);\n              var curGrace = curNote.graces[mm];\n              var tabGraceRelative = buildRelativeTabNote(plugin, graceX, defGrace, curGrace, true);\n              abs.children.push(tabGraceRelative);\n              tabVoice.push(defGrace);\n            }\n          }\n          var tabNoteRelative = buildRelativeTabNote(plugin, abs.x+absChild.heads[ll].dx, defNote, curNote, false);\n          abs.children.push(tabNoteRelative);\n        }\n        if (defNote.notes.length > 0) {\n          defNote.abselem = abs;\n          tabVoice.push(defNote);\n          dest.children.push(abs);\n        }\n        break;\n    }\n  }\n};\n\nmodule.exports = TabAbsoluteElements;\n","/**\n *\n * Common Class/Method available for all instruments\n *\n */\n\nfunction TabCommon(abcTune, tuneNumber, params) {\n  this.tune = abcTune;\n  this.params = params;\n  this.tuneNumber = tuneNumber;\n  this.inError = false;\n}\n\n\nTabCommon.prototype.setError = function (error) {\n  var tune = this.tune;\n  if (error) {\n    this.error = error;\n    this.inError = true;\n    if (tune.warnings) {\n      tune.warnings.push(error);\n    } else {\n      tune.warnings = [error];\n    }\n  }\n};\n\n\nmodule.exports = TabCommon;\n","/* eslint-disable no-debugger */\nvar VoiceElement = require('../write/creation/elements/voice-element');\nvar TabAbsoluteElements = require('./tab-absolute-elements');\nvar spacing = require('../write/helpers/spacing');\n\nfunction initSpecialY() {\n  return {\n    tempoHeightAbove: 0,\n    partHeightAbove: 0,\n    volumeHeightAbove: 0,\n    dynamicHeightAbove: 0,\n    endingHeightAbove: 0,\n    chordHeightAbove: 0,\n    lyricHeightAbove: 0,\n    lyricHeightBelow: 0,\n    chordHeightBelow: 0,\n    volumeHeightBelow: 0,\n    dynamicHeightBelow: 0\n  };\n}\n\nfunction getLyricHeight(voice) {\n  var maxLyricHeight = 0;\n  for (var ii = 0; ii < voice.children.length; ii++) {\n    var curAbs = voice.children[ii];\n    if (curAbs.specialY) {\n      if (curAbs.specialY.lyricHeightBelow > maxLyricHeight) {\n        maxLyricHeight = curAbs.specialY.lyricHeightBelow;\n      }\n    }\n  }\n  return maxLyricHeight; // add spacing\n}\n\nfunction buildTabName(self, dest) {\n  var stringSemantics = self.plugin.semantics.strings;\n  var controller = self.renderer.controller;\n  var textSize = controller.getTextSize;\n  var tabName = stringSemantics.tabInfos(self.plugin);\n  var suppress = stringSemantics.suppress(self.plugin);\n  var doDraw = true;\n\n  if (suppress){\n    doDraw = false\n  }\n\n  \n  if (doDraw){\n    var size = textSize.calc(tabName, 'tablabelfont', 'text instrumentname'); \n    dest.tabNameInfos = {\n      textSize: {height:size.height,width:size.width},\n      name: tabName\n    };\n    return size.height;\n  }\n  return 0\n\n}\n\n/**\n * Laying out tabs\n * @param {*} renderer\n * @param {*} line\n * @param {*} staffIndex\n * @param {*} tablatureLayout\n */\nfunction TabRenderer(plugin, renderer, line, staffIndex) {\n  this.renderer = renderer;\n  this.plugin = plugin;\n  this.line = line;\n  this.absolutes = new TabAbsoluteElements();\n  this.staffIndex = staffIndex ;\n  this.tabStaff = {\n    clef: {\n      type: 'TAB'\n    }\n  };\n  this.tabSize = (plugin.linePitch * plugin.nbLines);\n}\n\nfunction islastTabInStaff(index, staffGroup) {\n  if (staffGroup[index].isTabStaff) {\n    if (index === staffGroup.length - 1) return true;\n    if (staffGroup[index + 1].isTabStaff) {\n      return false; \n    } else {\n      return true;\n    }\n  }\n  return false;\n}\n\nfunction getStaffNumbers(staffs) {\n  var nbStaffs = 0; \n  for (var ii = 0; ii < staffs.length; ii++) {\n    if (!staffs[ii].isTabStaff) {\n      nbStaffs++;\n    }\n  }\n  return nbStaffs;\n}\n\nfunction getParentStaffIndex(staffs, index) {\n  for (var ii = index; ii >= 0; ii--) {\n    if (!staffs[ii].isTabStaff) {\n      return ii;\n    }\n  }\n  return -1;\n}\n\n\nfunction linkStaffAndTabs(staffs) {\n  for (var ii = 0; ii < staffs.length; ii++) {\n    if (staffs[ii].isTabStaff) {\n      // link to parent staff\n      var parentIndex = getParentStaffIndex(staffs, ii);\n      staffs[ii].hasStaff = staffs[parentIndex];\n      if (!staffs[parentIndex].hasTab) staffs[parentIndex].hasTab = [];\n      staffs[parentIndex].hasTab.push(staffs[ii]);\n    }\n  }\n}\n\nfunction isMultiVoiceSingleStaff(staffs , parent) {\n  if ( getStaffNumbers(staffs) === 1) {\n    if (parent.voices.length > 1) return true;\n  }\n  return false;\n}\n\n\nfunction getNextTabPos(self,staffGroup) {\n  var tabIndex = self.staffIndex;\n  var startIndex = 0;\n  var handledVoices = 0;\n  var inProgress = true;\n  var nbVoices = 0;\n  while (inProgress) {\n    //for (var ii = 0; ii < staffGroup.length; ii++) {\n    if (!staffGroup[startIndex])\n      return -1;\n    if (!staffGroup[startIndex].isTabStaff) {\n      nbVoices = staffGroup[startIndex].voices.length; // get number of staff voices\n    }\n    if (staffGroup[startIndex].isTabStaff) {\n      handledVoices++;\n      if (islastTabInStaff(startIndex, staffGroup)) {\n        if (handledVoices < nbVoices) return startIndex + 1;\n      }\n    } else {\n      handledVoices = 0;\n      if (startIndex >= tabIndex) {\n        if (startIndex+1 == staffGroup.length) return startIndex +1;\n        if (!staffGroup[startIndex + 1].isTabStaff) return startIndex + 1;\n      }\n    }\n    startIndex++;\n    // out of space case\n    if (startIndex > staffGroup.length) return -1;\n  }\n}\n\nfunction getLastStaff(staffs, lastTab) {\n  for (var ii = lastTab; ii >= 0 ; ii-- ) {\n    if (!staffs[ii].isTabStaff) {\n      return staffs[ii];\n    }\n  }\n  return null; \n}\n\nfunction checkVoiceKeySig(voices, ii) {\n  var curVoice = voices[ii];\n  // on multivoice multistaff only the first voice has key signature\n  // folling consecutive do not have one => we should provide the first voice key sig back then\n  var elem0 = curVoice.children[0].abcelem;\n  if (elem0.el_type === 'clef') return null;\n  if (ii == 0) {\n    // not found => clef=none case\n    return 'none';\n  }\n  return voices[ii-1].children[0];\n}\n\nTabRenderer.prototype.doLayout = function () {\n  var staffs = this.line.staff;\n  if (staffs) {\n    // give up on staffline=0 in key \n    var firstStaff = staffs[0];\n    if (firstStaff) {\n      if (firstStaff.clef) {\n        if (firstStaff.clef.stafflines == 0) {\n          this.plugin._super.setError(\"No tablatures when stafflines=0\");\n          return; \n        }\n      }\n    }\n    staffs.splice(\n      staffs.length, 0,\n      this.tabStaff\n    );\n  }\n  var staffGroup = this.line.staffGroup;\n\n  var voices = staffGroup.voices;\n  var firstVoice = voices[0];\n  // take lyrics into account if any\n  var lyricsHeight = getLyricHeight(firstVoice);\n  var padd = 3;\n  var prevIndex = this.staffIndex;\n  var previousStaff = staffGroup.staffs[prevIndex];\n  var tabTop = this.tabSize + padd - previousStaff.bottom - lyricsHeight;\n  if (previousStaff.isTabStaff) {\n    tabTop = previousStaff.top;\n  }\n  var staffGroupInfos = {\n    bottom: -1,\n    isTabStaff: true,\n    specialY: initSpecialY(),\n    lines: this.plugin.nbLines,\n    linePitch: this.plugin.linePitch,\n    dy: 0.15,\n    top: tabTop,\n  };\n  var nextTabPos = getNextTabPos(this,staffGroup.staffs);\n  if (nextTabPos === -1)\n    return;\n  staffGroupInfos.parentIndex = nextTabPos - 1;\n  staffGroup.staffs.splice(nextTabPos, 0, staffGroupInfos);\n  // staffGroup.staffs.push(staffGroupInfos);\n  staffGroup.height += this.tabSize + padd;\n  var parentStaff = getLastStaff(staffGroup.staffs, nextTabPos); \n  var nbVoices = 1;\n  if (isMultiVoiceSingleStaff(staffGroup.staffs,parentStaff)) {\n    nbVoices = parentStaff.voices.length;\n  }  \n  // build from staff\n  this.tabStaff.voices = [];\n  for (var ii = 0; ii < nbVoices; ii++) {\n    var tabVoice = new VoiceElement(0, 0);\n    if (ii > 0) tabVoice.duplicate = true;\n    var nameHeight = buildTabName(this, tabVoice) / spacing.STEP;\n    nameHeight = Math.max(nameHeight, 1) // If there is no label for the tab line, then there needs to be a little padding\n    // This was pushing down the top staff by the tab label height\n    //staffGroup.staffs[this.staffIndex].top += nameHeight;\n    staffGroup.staffs[this.staffIndex].top += 1;\n    staffGroup.height += nameHeight;\n    tabVoice.staff = staffGroupInfos;\n    var tabVoiceIndex = voices.length\n    voices.splice(voices.length, 0, tabVoice);\n    var keySig = checkVoiceKeySig(voices, ii + this.staffIndex);\n    this.tabStaff.voices[ii] = [];\n    this.absolutes.build(this.plugin, voices, this.tabStaff.voices[ii], ii , this.staffIndex ,keySig, tabVoiceIndex);\n  }\n  linkStaffAndTabs(staffGroup.staffs); // crossreference tabs and staff\n};\n\nmodule.exports = TabRenderer;\n","// abc_abstract_engraver.js: Creates a data structure suitable for printing a line of abc\n\nvar AbsoluteElement = require('./elements/absolute-element');\nvar BeamElem = require('./elements/beam-element');\nvar BraceElem = require('./elements/brace-element');\nvar createClef = require('./create-clef');\nvar createKeySignature = require('./create-key-signature');\nvar createNoteHead = require('./create-note-head');\nvar createTimeSignature = require('./create-time-signature');\nvar Decoration = require('./decoration');\nvar EndingElem = require('./elements/ending-element');\nvar glyphs = require('./glyphs');\nvar RelativeElement = require('./elements/relative-element');\nvar spacing = require('../helpers/spacing');\nvar StaffGroupElement = require('./elements/staff-group-element');\nvar TempoElement = require('./elements/tempo-element');\nvar TieElem = require('./elements/tie-element');\nvar TripletElem = require('./elements/triplet-element');\nvar VoiceElement = require('./elements/voice-element');\nvar addChord = require('./add-chord');\nvar pitchesToPerc = require('../../synth/pitches-to-perc')\n\nvar parseCommon = require('../../parse/abc_common');\n\nvar getDuration = function (elem) {\n\tvar d = 0;\n\tif (elem.duration) {\n\t\td = elem.duration;\n\t}\n\treturn d;\n};\n\nvar hint = false;\n\nvar chartable = {\n\trest: { 0: \"rests.whole\", 1: \"rests.half\", 2: \"rests.quarter\", 3: \"rests.8th\", 4: \"rests.16th\", 5: \"rests.32nd\", 6: \"rests.64th\", 7: \"rests.128th\", \"multi\": \"rests.multimeasure\" },\n\tnote: { \"-1\": \"noteheads.dbl\", 0: \"noteheads.whole\", 1: \"noteheads.half\", 2: \"noteheads.quarter\", 3: \"noteheads.quarter\", 4: \"noteheads.quarter\", 5: \"noteheads.quarter\", 6: \"noteheads.quarter\", 7: \"noteheads.quarter\", 'nostem': \"noteheads.quarter\" },\n\trhythm: { \"-1\": \"noteheads.slash.whole\", 0: \"noteheads.slash.whole\", 1: \"noteheads.slash.whole\", 2: \"noteheads.slash.quarter\", 3: \"noteheads.slash.quarter\", 4: \"noteheads.slash.quarter\", 5: \"noteheads.slash.quarter\", 6: \"noteheads.slash.quarter\", 7: \"noteheads.slash.quarter\", nostem: \"noteheads.slash.nostem\" },\n\tx: { \"-1\": \"noteheads.indeterminate\", 0: \"noteheads.indeterminate\", 1: \"noteheads.indeterminate\", 2: \"noteheads.indeterminate\", 3: \"noteheads.indeterminate\", 4: \"noteheads.indeterminate\", 5: \"noteheads.indeterminate\", 6: \"noteheads.indeterminate\", 7: \"noteheads.indeterminate\", nostem: \"noteheads.indeterminate\" },\n\tharmonic: { \"-1\": \"noteheads.harmonic.quarter\", 0: \"noteheads.harmonic.quarter\", 1: \"noteheads.harmonic.quarter\", 2: \"noteheads.harmonic.quarter\", 3: \"noteheads.harmonic.quarter\", 4: \"noteheads.harmonic.quarter\", 5: \"noteheads.harmonic.quarter\", 6: \"noteheads.harmonic.quarter\", 7: \"noteheads.harmonic.quarter\", nostem: \"noteheads.harmonic.quarter\" },\n\ttriangle: { \"-1\": \"noteheads.triangle.quarter\", 0: \"noteheads.triangle.quarter\", 1: \"noteheads.triangle.quarter\", 2: \"noteheads.triangle.quarter\", 3: \"noteheads.triangle.quarter\", 4: \"noteheads.triangle.quarter\", 5: \"noteheads.triangle.quarter\", 6: \"noteheads.triangle.quarter\", 7: \"noteheads.triangle.quarter\", nostem: \"noteheads.triangle.quarter\" },\n\tuflags: { 3: \"flags.u8th\", 4: \"flags.u16th\", 5: \"flags.u32nd\", 6: \"flags.u64th\" },\n\tdflags: { 3: \"flags.d8th\", 4: \"flags.d16th\", 5: \"flags.d32nd\", 6: \"flags.d64th\" }\n};\n\nvar AbstractEngraver = function (getTextSize, tuneNumber, options) {\n\tthis.decoration = new Decoration();\n\tthis.getTextSize = getTextSize;\n\tthis.tuneNumber = tuneNumber;\n\tthis.isBagpipes = options.bagpipes;\n\tthis.flatBeams = options.flatbeams;\n\tthis.graceSlurs = options.graceSlurs;\n\tthis.percmap = options.percmap;\n\tthis.initialClef = options.initialClef\n\tthis.jazzchords = !!options.jazzchords\n\tthis.accentAbove = !!options.accentAbove\n\tthis.germanAlphabet = !!options.germanAlphabet\n\tthis.reset();\n};\n\nAbstractEngraver.prototype.reset = function () {\n\tthis.slurs = {};\n\tthis.ties = [];\n\tthis.voiceScale = 1;\n\tthis.voiceColor = undefined;\n\tthis.slursbyvoice = {};\n\tthis.tiesbyvoice = {};\n\tthis.endingsbyvoice = {};\n\tthis.scaleByVoice = {};\n\tthis.colorByVoice = {};\n\tthis.tripletmultiplier = 1;\n\n\tthis.abcline = undefined;\n\tthis.accidentalSlot = undefined;\n\tthis.accidentalshiftx = undefined;\n\tthis.dotshiftx = undefined;\n\tthis.hasVocals = false;\n\tthis.minY = undefined;\n\tthis.partstartelem = undefined;\n\tthis.startlimitelem = undefined;\n\tthis.stemdir = undefined;\n};\n\nAbstractEngraver.prototype.setStemHeight = function (heightInPixels) {\n\tthis.stemHeight = Math.round(heightInPixels * 10 / spacing.STEP) / 10;\n};\n\nAbstractEngraver.prototype.getCurrentVoiceId = function (s, v) {\n\treturn \"s\" + s + \"v\" + v;\n};\n\nAbstractEngraver.prototype.pushCrossLineElems = function (s, v) {\n\tthis.slursbyvoice[this.getCurrentVoiceId(s, v)] = this.slurs;\n\tthis.tiesbyvoice[this.getCurrentVoiceId(s, v)] = this.ties;\n\tthis.endingsbyvoice[this.getCurrentVoiceId(s, v)] = this.partstartelem;\n\tthis.scaleByVoice[this.getCurrentVoiceId(s, v)] = this.voiceScale;\n\tif (this.voiceColor)\n\t\tthis.colorByVoice[this.getCurrentVoiceId(s, v)] = this.voiceColor;\n};\n\nAbstractEngraver.prototype.popCrossLineElems = function (s, v) {\n\tthis.slurs = this.slursbyvoice[this.getCurrentVoiceId(s, v)] || {};\n\tthis.ties = this.tiesbyvoice[this.getCurrentVoiceId(s, v)] || [];\n\tthis.partstartelem = this.endingsbyvoice[this.getCurrentVoiceId(s, v)];\n\tthis.voiceScale = this.scaleByVoice[this.getCurrentVoiceId(s, v)];\n\tif (this.voiceScale === undefined) this.voiceScale = 1;\n\tthis.voiceColor = this.colorByVoice[this.getCurrentVoiceId(s, v)];\n};\n\nAbstractEngraver.prototype.containsLyrics = function (staves) {\n\tfor (var i = 0; i < staves.length; i++) {\n\t\tfor (var j = 0; j < staves[i].voices.length; j++) {\n\t\t\tfor (var k = 0; k < staves[i].voices[j].length; k++) {\n\t\t\t\tvar el = staves[i].voices[j][k];\n\t\t\t\tif (el.lyric) {\n\t\t\t\t\t// We just want to see if there are vocals below the music to know where to put the dynamics.\n\t\t\t\t\tif (!el.positioning || el.positioning.vocalPosition === 'below')\n\t\t\t\t\t\tthis.hasVocals = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nAbstractEngraver.prototype.createABCLine = function (staffs, tempo, l) {\n\tthis.minY = 2; // PER: This will be the lowest that any note reaches. It will be used to set the dynamics row.\n\t// See if there are any lyrics on this line.\n\tthis.containsLyrics(staffs);\n\tvar staffgroup = new StaffGroupElement(this.getTextSize);\n\tthis.tempoSet = false;\n\tfor (var s = 0; s < staffs.length; s++) {\n\t\tif (hint)\n\t\t\tthis.restoreState();\n\t\thint = false;\n\t\tthis.createABCStaff(staffgroup, staffs[s], tempo, s, l);\n\t}\n\treturn staffgroup;\n};\n\nAbstractEngraver.prototype.createABCStaff = function (staffgroup, abcstaff, tempo, s, l) {\n\t// If the tempo is passed in, then the first element should get the tempo attached to it.\n\tstaffgroup.getTextSize.updateFonts(abcstaff);\n\tfor (var v = 0; v < abcstaff.voices.length; v++) {\n\t\tvar voice = new VoiceElement(v, abcstaff.voices.length);\n\t\tif (v === 0) {\n\t\t\tvoice.barfrom = (abcstaff.connectBarLines === \"start\" || abcstaff.connectBarLines === \"continue\");\n\t\t\tvoice.barto = (abcstaff.connectBarLines === \"continue\" || abcstaff.connectBarLines === \"end\");\n\t\t} else {\n\t\t\tvoice.duplicate = true; // bar lines and other duplicate info need not be created\n\t\t}\n\t\tif (abcstaff.title && abcstaff.title[v]) {\n\t\t\tvoice.header = abcstaff.title[v].replace(/\\\\n/g, \"\\n\");\n\t\t\tvoice.headerPosition = 6 + staffgroup.getTextSize.baselineToCenter(voice.header, \"voicefont\", 'staff-extra voice-name', v, abcstaff.voices.length) / spacing.STEP;\n\t\t}\n\t\tif (abcstaff.clef && abcstaff.clef.type === \"perc\")\n\t\t\tvoice.isPercussion = true;\n\t\tvar clef = (!this.initialClef || l === 0) && createClef(abcstaff.clef, this.tuneNumber);\n\t\tif (clef) {\n\t\t\tif (v === 0 && abcstaff.barNumber) {\n\t\t\t\tthis.addMeasureNumber(abcstaff.barNumber, clef);\n\t\t\t}\n\t\t\tvoice.addChild(clef);\n\t\t\tthis.startlimitelem = clef; // limit ties here\n\t\t}\n\t\tvar keySig = createKeySignature(abcstaff.key, this.tuneNumber);\n\t\tif (keySig) {\n\t\t\tvoice.addChild(keySig);\n\t\t\tthis.startlimitelem = keySig; // limit ties here\n\t\t}\n\t\tif (abcstaff.meter) {\n\t\t\tif (abcstaff.meter.type === 'specified') {\n\t\t\t\tthis.measureLength = abcstaff.meter.value[0].num / abcstaff.meter.value[0].den;\n\t\t\t} else\n\t\t\t\tthis.measureLength = 1;\n\t\t\tvar ts = createTimeSignature(abcstaff.meter, this.tuneNumber);\n\t\t\tvoice.addChild(ts);\n\t\t\tthis.startlimitelem = ts; // limit ties here\n\t\t}\n\t\tif (voice.duplicate)\n\t\t\tvoice.children = []; // we shouldn't reprint the above if we're reusing the same staff. We just created them to get the right spacing.\n\t\tvar staffLines = abcstaff.clef.stafflines || abcstaff.clef.stafflines === 0 ? abcstaff.clef.stafflines : 5;\n\t\tstaffgroup.addVoice(voice, s, staffLines);\n\t\tvar isSingleLineStaff = staffLines === 1;\n\t\tthis.createABCVoice(abcstaff.voices[v], tempo, s, v, isSingleLineStaff, voice);\n\t\tstaffgroup.setStaffLimits(voice);\n\t\tif (v === 0) {\n\t\t\t// only do brace and bracket processing on the first voice, otherwise it would be done twice.\n\t\t\tif (abcstaff.brace === \"start\" || (!staffgroup.brace && abcstaff.brace)) {\n\t\t\t\tif (!staffgroup.brace)\n\t\t\t\t\tstaffgroup.brace = [];\n\t\t\t\tstaffgroup.brace.push(new BraceElem(voice, \"brace\"));\n\t\t\t} else if (abcstaff.brace === \"end\" && staffgroup.brace) {\n\t\t\t\tstaffgroup.brace[staffgroup.brace.length - 1].setBottomStaff(voice);\n\t\t\t} else if (abcstaff.brace === \"continue\" && staffgroup.brace) {\n\t\t\t\tstaffgroup.brace[staffgroup.brace.length - 1].continuing(voice);\n\t\t\t}\n\t\t\tif (abcstaff.bracket === \"start\" || (!staffgroup.bracket && abcstaff.bracket)) {\n\t\t\t\tif (!staffgroup.bracket)\n\t\t\t\t\tstaffgroup.bracket = [];\n\t\t\t\tstaffgroup.bracket.push(new BraceElem(voice, \"bracket\"));\n\t\t\t} else if (abcstaff.bracket === \"end\" && staffgroup.bracket) {\n\t\t\t\tstaffgroup.bracket[staffgroup.bracket.length - 1].setBottomStaff(voice);\n\t\t\t} else if (abcstaff.bracket === \"continue\" && staffgroup.bracket) {\n\t\t\t\tstaffgroup.bracket[staffgroup.bracket.length - 1].continuing(voice);\n\t\t\t}\n\t\t}\n\t}\n};\n\nfunction getBeamGroup(abcline, pos) {\n\t// If there are notes beamed together, they are handled as a group, so find all of them here.\n\tvar elem = abcline[pos];\n\tif (elem.el_type !== 'note' || !elem.startBeam || elem.endBeam)\n\t\treturn { count: 1, elem: elem };\n\n\tvar group = [];\n\twhile (pos < abcline.length && abcline[pos].el_type === 'note') {\n\t\tgroup.push(abcline[pos]);\n\t\tif (abcline[pos].endBeam)\n\t\t\tbreak;\n\t\tpos++;\n\t}\n\treturn { count: group.length, elem: group };\n}\n\nAbstractEngraver.prototype.createABCVoice = function (abcline, tempo, s, v, isSingleLineStaff, voice) {\n\tthis.popCrossLineElems(s, v);\n\tthis.stemdir = (this.isBagpipes) ? \"down\" : null;\n\tthis.abcline = abcline;\n\tif (this.partstartelem) {\n\t\tthis.partstartelem = new EndingElem(\"\", null, null);\n\t\tvoice.addOther(this.partstartelem);\n\t}\n\tvar voiceNumber = voice.voicetotal < 2 ? -1 : voice.voicenumber;\n\tfor (var slur in this.slurs) {\n\t\tif (this.slurs.hasOwnProperty(slur)) {\n\t\t\t// this is already a slur element, but it was created for the last line, so recreate it.\n\t\t\tthis.slurs[slur] = new TieElem({ force: this.slurs[slur].force, voiceNumber: voiceNumber, stemDir: this.slurs[slur].stemDir, style: this.slurs[slur].dotted });\n\t\t\tif (hint) this.slurs[slur].setHint();\n\t\t\tvoice.addOther(this.slurs[slur]);\n\t\t}\n\t}\n\tfor (var i = 0; i < this.ties.length; i++) {\n\t\t// this is already a tie element, but it was created for the last line, so recreate it.\n\t\tthis.ties[i] = new TieElem({ force: this.ties[i].force, stemDir: this.ties[i].stemDir, voiceNumber: voiceNumber, style: this.ties[i].dotted });\n\t\tif (hint) this.ties[i].setHint();\n\t\tvoice.addOther(this.ties[i]);\n\t}\n\n\tfor (var j = 0; j < this.abcline.length; j++) {\n\t\tsetAveragePitch(this.abcline[j]);\n\t\tthis.minY = Math.min(this.abcline[j].minpitch, this.minY);\n\t}\n\n\tvar isFirstStaff = (s === 0);\n\tvar pos = 0;\n\twhile (pos < this.abcline.length) {\n\t\tvar ret = getBeamGroup(this.abcline, pos);\n\t\tvar abselems = this.createABCElement(isFirstStaff, isSingleLineStaff, voice, ret.elem);\n\t\tif (abselems) {\n\t\t\tfor (i = 0; i < abselems.length; i++) {\n\t\t\t\tif (!this.tempoSet && tempo && !tempo.suppress) {\n\t\t\t\t\tthis.tempoSet = true;\n\t\t\t\t\tvar tempoElement = new AbsoluteElement(tempo, 0, 0, \"tempo\", this.tuneNumber, {});\n\t\t\t\t\ttempoElement.addFixedX(new TempoElement(tempo, this.tuneNumber, createNoteHead));\n\t\t\t\t\tvoice.addChild(tempoElement);\n\t\t\t\t}\n\t\t\t\tvoice.addChild(abselems[i]);\n\t\t\t}\n\t\t}\n\t\tpos += ret.count;\n\t}\n\tthis.pushCrossLineElems(s, v);\n};\n\nAbstractEngraver.prototype.saveState = function () {\n\tthis.tiesSave = parseCommon.cloneArray(this.ties);\n\tthis.slursSave = parseCommon.cloneHashOfHash(this.slurs);\n\tthis.slursbyvoiceSave = parseCommon.cloneHashOfHash(this.slursbyvoice);\n\tthis.tiesbyvoiceSave = parseCommon.cloneHashOfArrayOfHash(this.tiesbyvoice);\n};\n\nAbstractEngraver.prototype.restoreState = function () {\n\tthis.ties = parseCommon.cloneArray(this.tiesSave);\n\tthis.slurs = parseCommon.cloneHashOfHash(this.slursSave);\n\tthis.slursbyvoice = parseCommon.cloneHashOfHash(this.slursbyvoiceSave);\n\tthis.tiesbyvoice = parseCommon.cloneHashOfArrayOfHash(this.tiesbyvoiceSave);\n};\n\n// function writeMeasureWidth(voice) {\n// \tvar width = 0;\n// \tfor (var i = voice.children.length-1; i >= 0; i--) {\n// \t\tvar elem = voice.children[i];\n// \t\tif (elem.abcelem.el_type === 'bar')\n// \t\t\tbreak;\n// \t\twidth += elem.w;\n// \t}\n// \treturn new RelativeElement(width.toFixed(2), -70, 0, undefined, {type:\"debug\"});\n// }\n\n// return an array of AbsoluteElement\nAbstractEngraver.prototype.createABCElement = function (isFirstStaff, isSingleLineStaff, voice, elem) {\n\tvar elemset = [];\n\tswitch (elem.el_type) {\n\t\tcase undefined:\n\t\t\t// it is undefined if we were passed an array in - an array means a set of notes that should be beamed together.\n\t\t\telemset = this.createBeam(isSingleLineStaff, voice, elem);\n\t\t\tbreak;\n\t\tcase \"note\":\n\t\t\telemset[0] = this.createNote(elem, false, isSingleLineStaff, voice);\n\t\t\tif (this.triplet && this.triplet.isClosed()) {\n\t\t\t\tvoice.addOther(this.triplet);\n\t\t\t\tthis.triplet = null;\n\t\t\t\tthis.tripletmultiplier = 1;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"bar\":\n\t\t\telemset[0] = this.createBarLine(voice, elem, isFirstStaff);\n\t\t\tif (voice.duplicate && elemset.length > 0) elemset[0].invisible = true;\n\t\t\t//\t  elemset[0].addChild(writeMeasureWidth(voice));\n\t\t\tbreak;\n\t\tcase \"meter\":\n\t\t\telemset[0] = createTimeSignature(elem, this.tuneNumber);\n\t\t\tthis.startlimitelem = elemset[0]; // limit ties here\n\t\t\tif (voice.duplicate && elemset.length > 0) elemset[0].invisible = true;\n\t\t\tbreak;\n\t\tcase \"clef\":\n\t\t\telemset[0] = createClef(elem, this.tuneNumber);\n\t\t\tif (!elemset[0]) return null;\n\t\t\tif (voice.duplicate && elemset.length > 0) elemset[0].invisible = true;\n\t\t\tbreak;\n\t\tcase \"key\":\n\t\t\tvar absKey = createKeySignature(elem, this.tuneNumber);\n\t\t\tif (absKey) {\n\t\t\t\telemset[0] = absKey;\n\t\t\t\tthis.startlimitelem = elemset[0]; // limit ties here\n\t\t\t}\n\t\t\tif (voice.duplicate && elemset.length > 0) elemset[0].invisible = true;\n\t\t\tbreak;\n\t\tcase \"stem\":\n\t\t\tthis.stemdir = elem.direction === \"auto\" ? undefined : elem.direction;\n\t\t\tbreak;\n\t\tcase \"part\":\n\t\t\tvar abselem = new AbsoluteElement(elem, 0, 0, 'part', this.tuneNumber);\n\t\t\tvar dim = this.getTextSize.calc(elem.title, 'partsfont', \"part\");\n\t\t\tabselem.addFixedX(new RelativeElement(elem.title, 0, 0, undefined, { type: \"part\", height: dim.height / spacing.STEP }));\n\t\t\telemset[0] = abselem;\n\t\t\tbreak;\n\t\tcase \"tempo\":\n\t\t\tvar abselem3 = new AbsoluteElement(elem, 0, 0, 'tempo', this.tuneNumber);\n\t\t\tabselem3.addFixedX(new TempoElement(elem, this.tuneNumber, createNoteHead));\n\t\t\telemset[0] = abselem3;\n\t\t\tbreak;\n\t\tcase \"style\":\n\t\t\tif (elem.head === \"normal\")\n\t\t\t\tdelete this.style;\n\t\t\telse\n\t\t\t\tthis.style = elem.head;\n\t\t\tbreak;\n\t\tcase \"hint\":\n\t\t\thint = true;\n\t\t\tthis.saveState();\n\t\t\tbreak;\n\t\tcase \"midi\":\n\t\t\t// This has no effect on the visible music, so just skip it.\n\t\t\tbreak;\n\t\tcase \"scale\":\n\t\t\tthis.voiceScale = elem.size;\n\t\t\tbreak;\n\t\tcase \"color\":\n\t\t\tthis.voiceColor = elem.color;\n\t\t\tvoice.color = this.voiceColor;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tvar abselem2 = new AbsoluteElement(elem, 0, 0, 'unsupported', this.tuneNumber);\n\t\t\tabselem2.addFixed(new RelativeElement(\"element type \" + elem.el_type, 0, 0, undefined, { type: \"debug\" }));\n\t\t\telemset[0] = abselem2;\n\t}\n\n\treturn elemset;\n};\n\nfunction setAveragePitch(elem) {\n\tif (elem.pitches) {\n\t\tsortPitch(elem);\n\t\tvar sum = 0;\n\t\tfor (var p = 0; p < elem.pitches.length; p++) {\n\t\t\tsum += elem.pitches[p].verticalPos;\n\t\t}\n\t\telem.averagepitch = sum / elem.pitches.length;\n\t\telem.minpitch = elem.pitches[0].verticalPos;\n\t\telem.maxpitch = elem.pitches[elem.pitches.length - 1].verticalPos;\n\t}\n}\n\nAbstractEngraver.prototype.createBeam = function (isSingleLineStaff, voice, elems) {\n\tvar abselemset = [];\n\n\tvar beamelem = new BeamElem(this.stemHeight * this.voiceScale, this.stemdir, this.flatBeams, elems[0]);\n\tif (hint) beamelem.setHint();\n\tfor (var i = 0; i < elems.length; i++) {\n\t\t// Do a first pass to figure out the stem direction before creating the notes, so that staccatos and other decorations can be placed correctly.\n\t\tbeamelem.runningDirection(elems[i])\n\t}\n\tbeamelem.setStemDirection()\n\tvar tempStemDir = this.stemdir\n\tthis.stemdir = beamelem.stemsUp ? 'up' : 'down'\n\tfor (i = 0; i < elems.length; i++) {\n\t\tvar elem = elems[i];\n\t\tvar abselem = this.createNote(elem, true, isSingleLineStaff, voice);\n\t\tabselemset.push(abselem);\n\t\tbeamelem.add(abselem);\n\t\tif (this.triplet && this.triplet.isClosed()) {\n\t\t\tvoice.addOther(this.triplet);\n\t\t\tthis.triplet = null;\n\t\t\tthis.tripletmultiplier = 1;\n\t\t}\n\t}\n\tbeamelem.calcDir();\n\tvoice.addBeam(beamelem);\n\tthis.stemdir = tempStemDir\n\treturn abselemset;\n};\n\nvar sortPitch = function (elem) {\n\tvar sorted;\n\tdo {\n\t\tsorted = true;\n\t\tfor (var p = 0; p < elem.pitches.length - 1; p++) {\n\t\t\tif (elem.pitches[p].pitch > elem.pitches[p + 1].pitch) {\n\t\t\t\tsorted = false;\n\t\t\t\tvar tmp = elem.pitches[p];\n\t\t\t\telem.pitches[p] = elem.pitches[p + 1];\n\t\t\t\telem.pitches[p + 1] = tmp;\n\t\t\t}\n\t\t}\n\t} while (!sorted);\n};\n\nvar ledgerLines = function (abselem, minPitch, maxPitch, isRest, symbolWidth, additionalLedgers, dir, dx, scale) {\n\tfor (var i = maxPitch; i > 11; i--) {\n\t\tif (i % 2 === 0 && !isRest) {\n\t\t\tabselem.addFixed(new RelativeElement(null, dx, (symbolWidth + 4) * scale, i, { type: \"ledger\" }));\n\t\t}\n\t}\n\n\tfor (i = minPitch; i < 1; i++) {\n\t\tif (i % 2 === 0 && !isRest) {\n\t\t\tabselem.addFixed(new RelativeElement(null, dx, (symbolWidth + 4) * scale, i, { type: \"ledger\" }));\n\t\t}\n\t}\n\n\tfor (i = 0; i < additionalLedgers.length; i++) { // PER: draw additional ledgers\n\t\tvar ofs = symbolWidth;\n\t\tif (dir === 'down') ofs = -ofs;\n\t\tabselem.addFixed(new RelativeElement(null, ofs + dx, (symbolWidth + 4) * scale, additionalLedgers[i], { type: \"ledger\" }));\n\t}\n};\n\nAbstractEngraver.prototype.addGraceNotes = function (elem, voice, abselem, notehead, stemHeight, isBagpipes, roomtaken) {\n\tvar gracescale = 3 / 5;\n\tvar graceScaleStem = 3.5 / 5; // TODO-PER: empirically found constant.\n\tstemHeight = Math.round(stemHeight * graceScaleStem);\n\tvar gracebeam = null;\n\tvar flag;\n\n\tif (elem.gracenotes.length > 1) {\n\t\tgracebeam = new BeamElem(stemHeight, \"grace\", isBagpipes);\n\t\tif (hint) gracebeam.setHint();\n\t\tgracebeam.mainNote = abselem;\t// this gives us a reference back to the note this is attached to so that the stems can be attached somewhere.\n\t}\n\n\tvar i;\n\tvar graceoffsets = [];\n\tfor (i = elem.gracenotes.length - 1; i >= 0; i--) { // figure out where to place each gracenote\n\t\troomtaken += 10;\n\t\tgraceoffsets[i] = roomtaken;\n\t\tif (elem.gracenotes[i].accidental) {\n\t\t\troomtaken += 7;\n\t\t}\n\t}\n\n\tfor (i = 0; i < elem.gracenotes.length; i++) {\n\t\tvar gracepitch = elem.gracenotes[i].verticalPos;\n\n\t\tflag = (gracebeam) ? null : chartable.uflags[(isBagpipes) ? 5 : 3];\n\t\tvar accidentalSlot = [];\n\t\tvar ret = createNoteHead(abselem, \"noteheads.quarter\", elem.gracenotes[i],\n\t\t\t{ dir: \"up\", headx: -graceoffsets[i], extrax: -graceoffsets[i], flag: flag, scale: gracescale * this.voiceScale, accidentalSlot: accidentalSlot });\n\t\tret.notehead.highestVert = ret.notehead.pitch + stemHeight;\n\t\tvar grace = ret.notehead;\n\t\tthis.addSlursAndTies(abselem, elem.gracenotes[i], grace, voice, \"up\", true);\n\n\t\tabselem.addExtra(grace);\n\t\t// PER: added acciaccatura slash\n\t\tif (elem.gracenotes[i].acciaccatura) {\n\t\t\tvar pos = elem.gracenotes[i].verticalPos + 7 * gracescale;        // the same formula that determines the flag position.\n\t\t\tvar dAcciaccatura = gracebeam ? 5 : 6;        // just an offset to make it line up correctly.\n\t\t\tabselem.addRight(new RelativeElement(\"flags.ugrace\", -graceoffsets[i] + dAcciaccatura, 0, pos, { scalex: gracescale, scaley: gracescale }));\n\t\t}\n\t\tif (gracebeam) { // give the beam the necessary info\n\t\t\tvar graceDuration = elem.gracenotes[i].duration / 2;\n\t\t\tif (isBagpipes) graceDuration /= 2;\n\t\t\tvar pseudoabselem = {\n\t\t\t\theads: [grace],\n\t\t\t\tabcelem: { averagepitch: gracepitch, minpitch: gracepitch, maxpitch: gracepitch, duration: graceDuration }\n\t\t\t};\n\t\t\tgracebeam.add(pseudoabselem);\n\t\t} else { // draw the stem\n\t\t\tvar p1 = gracepitch + 1 / 3 * gracescale;\n\t\t\tvar p2 = gracepitch + 7 * gracescale;\n\t\t\tvar dx = grace.dx + grace.w;\n\t\t\tvar width = -0.6;\n\t\t\tabselem.addExtra(new RelativeElement(null, dx, 0, p1, { \"type\": \"stem\", \"pitch2\": p2, linewidth: width }));\n\t\t}\n\t\tledgerLines(abselem, gracepitch, gracepitch, false, glyphs.getSymbolWidth(\"noteheads.quarter\"), [], true, grace.dx - 1, 0.6);\n\n\t\t// if this is the first grace note, we might want to start a slur.\n\t\t// there is a slur if graceSlurs is specifically set.\n\t\t// there is no slur if it is bagpipes.\n\t\t// there is not a slur if the element is a spacer or invisible rest.\n\t\tvar isInvisibleRest = elem.rest && (elem.rest.type === \"spacer\" || elem.rest.type === \"invisible\");\n\t\tif (i === 0 && !isBagpipes && this.graceSlurs && !isInvisibleRest) {\n\t\t\t// This is the overall slur that is under the grace notes.\n\t\t\tvoice.addOther(new TieElem({ anchor1: grace, anchor2: notehead, isGrace: true }));\n\t\t}\n\t}\n\n\tif (gracebeam) {\n\t\tgracebeam.calcDir();\n\t\tvoice.addBeam(gracebeam);\n\t}\n\treturn roomtaken;\n};\n\nfunction addRestToAbsElement(abselem, elem, duration, dot, isMultiVoice, stemdir, isSingleLineStaff, durlog, voiceScale) {\n\tvar c;\n\tvar restpitch = 7;\n\tvar noteHead;\n\tvar roomTaken;\n\tvar roomTakenRight;\n\n\tif (isMultiVoice) {\n\t\tif (stemdir === \"down\") restpitch = 3;\n\t\tif (stemdir === \"up\") restpitch = 11;\n\t}\n\t// There is special placement for the percussion staff. If there is one staff line, then move the rest position.\n\tif (isSingleLineStaff) {\n\t\t// The half and whole rests are attached to different lines normally, so we need to tweak their position to get them to both be attached to the same one.\n\t\tif (duration < 0.5)\n\t\t\trestpitch = 7;\n\t\telse if (duration < 1)\n\t\t\trestpitch = 7;\t// half rest\n\t\telse\n\t\t\trestpitch = 5; // whole rest\n\t}\n\tswitch (elem.rest.type) {\n\t\tcase \"whole\":\n\t\t\tc = chartable.rest[0];\n\t\t\telem.averagepitch = restpitch;\n\t\t\telem.minpitch = restpitch;\n\t\t\telem.maxpitch = restpitch;\n\t\t\tdot = 0;\n\t\t\tbreak;\n\t\tcase \"rest\":\n\t\t\tif (elem.style === \"rhythm\") // special case for rhythm: rests are a handy way to express the rhythm.\n\t\t\t\tc = chartable.rhythm[-durlog];\n\t\t\telse\n\t\t\t\tc = chartable.rest[-durlog];\n\t\t\telem.averagepitch = restpitch;\n\t\t\telem.minpitch = restpitch;\n\t\t\telem.maxpitch = restpitch;\n\t\t\tbreak;\n\t\tcase \"invisible\":\n\t\tcase \"invisible-multimeasure\":\n\t\tcase \"spacer\":\n\t\t\tc = \"\";\n\t\t\telem.averagepitch = restpitch;\n\t\t\telem.minpitch = restpitch;\n\t\t\telem.maxpitch = restpitch;\n\t\t\tbreak;\n\t\tcase \"multimeasure\":\n\t\t\tc = chartable.rest['multi'];\n\t\t\telem.averagepitch = restpitch;\n\t\t\telem.minpitch = restpitch;\n\t\t\telem.maxpitch = restpitch;\n\t\t\tdot = 0;\n\t\t\tvar mmWidth = glyphs.getSymbolWidth(c);\n\t\t\tabselem.addHead(new RelativeElement(c, mmWidth, mmWidth * 2, 7));\n\t\t\tvar numMeasures = new RelativeElement(\"\" + elem.rest.text, mmWidth, mmWidth, 16, { type: \"multimeasure-text\" });\n\t\t\tabselem.addExtra(numMeasures);\n\t}\n\tif (elem.rest.type.indexOf(\"multimeasure\") < 0 && elem.rest.type !== \"invisible\") {\n\t\tvar ret = createNoteHead(abselem, c, { verticalPos: restpitch },\n\t\t\t{ dot: dot, scale: voiceScale });\n\t\tnoteHead = ret.notehead;\n\t\tif (noteHead) {\n\t\t\tabselem.addHead(noteHead);\n\t\t\troomTaken = ret.accidentalshiftx;\n\t\t\troomTakenRight = ret.dotshiftx;\n\t\t}\n\t}\n\treturn { noteHead: noteHead, roomTaken: roomTaken, roomTakenRight: roomTakenRight };\n}\n\nfunction addIfNotExist(arr, item) {\n\tfor (var i = 0; i < arr.length; i++) {\n\t\tif (JSON.stringify(arr[i]) === JSON.stringify(item))\n\t\t\treturn;\n\t}\n\tarr.push(item);\n}\n\nAbstractEngraver.prototype.addNoteToAbcElement = function (abselem, elem, dot, stemdir, style, zeroDuration, durlog, nostem, voice) {\n\tvar dotshiftx = 0; // room taken by chords with displaced noteheads which cause dots to shift\n\tvar noteHead;\n\tvar roomTaken = 0;\n\tvar roomTakenRight = 0;\n\tvar min;\n\tvar i;\n\tvar additionalLedgers = [];\n\t// The accidentalSlot will hold a list of all the accidentals on this chord. Each element is a vertical place,\n\t// and contains a pitch, which is the last pitch that contains an accidental in that slot. The slots are numbered\n\t// from closest to the note to farther left. We only need to know the last accidental we placed because\n\t// we know that the pitches are sorted by now.\n\tvar accidentalSlot = [];\n\tvar symbolWidth = 0;\n\n\tvar dir = (elem.averagepitch >= 6) ? \"down\" : \"up\";\n\tif (stemdir) dir = stemdir;\n\n\tstyle = elem.style ? elem.style : style; // get the style of note head.\n\tif (!style || style === \"normal\") style = \"note\";\n\tvar noteSymbol;\n\tif (zeroDuration)\n\t\tnoteSymbol = chartable[style].nostem;\n\telse\n\t\tnoteSymbol = chartable[style][-durlog];\n\tif (!noteSymbol)\n\t\tconsole.log(\"noteSymbol:\", style, durlog, zeroDuration);\n\n\t// determine elements of chords which should be shifted\n\tvar p;\n\tfor (p = (dir === \"down\") ? elem.pitches.length - 2 : 1; (dir === \"down\") ? p >= 0 : p < elem.pitches.length; p = (dir === \"down\") ? p - 1 : p + 1) {\n\t\tvar prev = elem.pitches[(dir === \"down\") ? p + 1 : p - 1];\n\t\tvar curr = elem.pitches[p];\n\t\tvar delta = (dir === \"down\") ? prev.pitch - curr.pitch : curr.pitch - prev.pitch;\n\t\tif (delta <= 1 && !prev.printer_shift) {\n\t\t\tcurr.printer_shift = (delta) ? \"different\" : \"same\";\n\t\t\tif (curr.verticalPos > 11 || curr.verticalPos < 1) {        // PER: add extra ledger line\n\t\t\t\tadditionalLedgers.push(curr.verticalPos - (curr.verticalPos % 2));\n\t\t\t}\n\t\t\tif (dir === \"down\") {\n\t\t\t\troomTaken = glyphs.getSymbolWidth(noteSymbol) + 2;\n\t\t\t} else {\n\t\t\t\tdotshiftx = glyphs.getSymbolWidth(noteSymbol) + 2;\n\t\t\t}\n\t\t}\n\t}\n\n\tvar pp = elem.pitches.length;\n\tfor (p = 0; p < elem.pitches.length; p++) {\n\n\t\tif (!nostem) {\n\t\t\tvar flag;\n\t\t\tif ((dir === \"down\" && p !== 0) || (dir === \"up\" && p !== pp - 1)) { // not the stemmed elem of the chord\n\t\t\t\tflag = null;\n\t\t\t} else {\n\t\t\t\tflag = chartable[(dir === \"down\") ? \"dflags\" : \"uflags\"][-durlog];\n\t\t\t}\n\t\t}\n\t\tvar c;\n\t\tif (elem.pitches[p].style) { // There is a style for the whole group of pitches, but there could also be an override for a particular pitch.\n\t\t\tc = chartable[elem.pitches[p].style][-durlog];\n\t\t} else if (voice.isPercussion && this.percmap) {\n\t\t\tc = noteSymbol;\n\t\t\tvar percHead = this.percmap[pitchesToPerc(elem.pitches[p])];\n\t\t\tif (percHead && percHead.noteHead) {\n\t\t\t\tif (chartable[percHead.noteHead])\n\t\t\t\t\tc = chartable[percHead.noteHead][-durlog];\n\t\t\t}\n\t\t} else\n\t\t\tc = noteSymbol;\n\t\t// The highest position for the sake of placing slurs is itself if the slur is internal. It is the highest position possible if the slur is for the whole chord.\n\t\t// If the note is the only one in the chord, then any slur it has counts as if it were on the whole chord.\n\t\telem.pitches[p].highestVert = elem.pitches[p].verticalPos;\n\t\tvar isTopWhenStemIsDown = (stemdir === \"up\" || dir === \"up\") && p === 0;\n\t\tvar isBottomWhenStemIsUp = (stemdir === \"down\" || dir === \"down\") && p === pp - 1;\n\t\tif (isTopWhenStemIsDown || isBottomWhenStemIsUp) { // place to put slurs if not already on pitches\n\n\t\t\tif (elem.startSlur || pp === 1) {\n\t\t\t\telem.pitches[p].highestVert = elem.pitches[pp - 1].verticalPos;\n\t\t\t\tif (getDuration(elem) < 1 && (stemdir === \"up\" || dir === \"up\"))\n\t\t\t\t\telem.pitches[p].highestVert += 6;        // If the stem is up, then compensate for the length of the stem\n\t\t\t}\n\t\t\tif (elem.startSlur) {\n\t\t\t\tif (!elem.pitches[p].startSlur) elem.pitches[p].startSlur = []; //TODO possibly redundant, provided array is not optional\n\t\t\t\tfor (i = 0; i < elem.startSlur.length; i++) {\n\t\t\t\t\taddIfNotExist(elem.pitches[p].startSlur, elem.startSlur[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (elem.endSlur) {\n\t\t\t\telem.pitches[p].highestVert = elem.pitches[pp - 1].verticalPos;\n\t\t\t\tif (getDuration(elem) < 1 && (stemdir === \"up\" || dir === \"up\"))\n\t\t\t\t\telem.pitches[p].highestVert += 6;        // If the stem is up, then compensate for the length of the stem\n\t\t\t\tif (!elem.pitches[p].endSlur) elem.pitches[p].endSlur = []; //TODO possibly redundant, provided array is not optional\n\t\t\t\tfor (i = 0; i < elem.endSlur.length; i++) {\n\t\t\t\t\taddIfNotExist(elem.pitches[p].endSlur, elem.endSlur[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar hasStem = !nostem && durlog <= -1;\n\t\tvar ret = createNoteHead(abselem, c, elem.pitches[p],\n\t\t\t{ dir: dir, extrax: -roomTaken, flag: flag, dot: dot, dotshiftx: dotshiftx, scale: this.voiceScale, accidentalSlot: accidentalSlot, shouldExtendStem: !stemdir, printAccidentals: !voice.isPercussion });\n\t\tsymbolWidth = Math.max(glyphs.getSymbolWidth(c), symbolWidth);\n\t\tabselem.extraw -= ret.extraLeft;\n\t\tnoteHead = ret.notehead;\n\t\tif (noteHead) {\n\t\t\tthis.addSlursAndTies(abselem, elem.pitches[p], noteHead, voice, hasStem ? dir : null, false);\n\n\t\t\tif (elem.gracenotes && elem.gracenotes.length > 0)\n\t\t\t\tnoteHead.bottom = noteHead.bottom - 1;\t // If there is a tie to the grace notes, leave a little more room for the note to avoid collisions.\n\t\t\tabselem.addHead(noteHead);\n\t\t}\n\t\troomTaken += ret.accidentalshiftx;\n\t\troomTakenRight = Math.max(roomTakenRight, ret.dotshiftx);\n\t}\n\n\t// draw stem from the furthest note to a pitch above/below the stemmed note\n\tif (hasStem) {\n\t\tvar stemHeight = Math.round(70 * this.voiceScale) / 10;\n\t\tvar p1 = (dir === \"down\") ? elem.minpitch - stemHeight : elem.minpitch + 1 / 3;\n\t\t// PER added stemdir test to make the line meet the note.\n\t\tif (p1 > 6 && !stemdir) p1 = 6;\n\t\tvar p2 = (dir === \"down\") ? elem.maxpitch - 1 / 3 : elem.maxpitch + stemHeight;\n\t\t// PER added stemdir test to make the line meet the note.\n\t\tif (p2 < 6 && !stemdir) p2 = 6;\n\t\tvar dx = (dir === \"down\" || abselem.heads.length === 0) ? 0 : abselem.heads[0].w;\n\t\tvar width = (dir === \"down\") ? 1 : -1;\n\t\t// TODO-PER-HACK: One type of note head has a different placement of the stem. This should be more generically calculated:\n\t\tif (noteHead && noteHead.c === 'noteheads.slash.quarter') {\n\t\t\tif (dir === 'down')\n\t\t\t\tp2 -= 1;\n\t\t\telse\n\t\t\t\tp1 += 1;\n\t\t}\n\t\tif (noteHead && noteHead.c === 'noteheads.triangle.quarter') {\n\t\t\tif (dir === 'down')\n\t\t\t\tp2 -= 0.7;\n\t\t\telse\n\t\t\t\tp1 -= 1.2;\n\t\t}\n\t\tabselem.addRight(new RelativeElement(null, dx, 0, p1, { \"type\": \"stem\", \"pitch2\": p2, linewidth: width, bottom: p1 - 1 }));\n\t\t//var RelativeElement = function RelativeElement(c, dx, w, pitch, opt) {\n\t\tmin = Math.min(p1, p2);\n\t}\n\treturn { noteHead: noteHead, roomTaken: roomTaken, roomTakenRight: roomTakenRight, min: min, additionalLedgers: additionalLedgers, dir: dir, symbolWidth: symbolWidth };\n};\n\nAbstractEngraver.prototype.addLyric = function (abselem, elem) {\n\tvar lyricStr = \"\";\n\telem.lyric.forEach(function (ly) {\n\t\tvar div = ly.divider === ' ' ? \"\" : ly.divider;\n\t\tlyricStr += ly.syllable + div + \"\\n\";\n\t});\n\tvar lyricDim = this.getTextSize.calc(lyricStr, 'vocalfont', \"lyric\");\n\tvar position = elem.positioning ? elem.positioning.vocalPosition : 'below';\n\tabselem.addCentered(new RelativeElement(lyricStr, 0, lyricDim.width, undefined, { type: \"lyric\", position: position, height: lyricDim.height / spacing.STEP, dim: this.getTextSize.attr('vocalfont', \"lyric\") }));\n};\n\nAbstractEngraver.prototype.createNote = function (elem, nostem, isSingleLineStaff, voice) { //stem presence: true for drawing stemless notehead\n\tvar notehead = null;\n\tvar roomtaken = 0; // room needed to the left of the note\n\tvar roomtakenright = 0; // room needed to the right of the note\n\tvar symbolWidth = 0;\n\tvar additionalLedgers = []; // PER: handle the case of [bc'], where the b doesn't have a ledger line\n\n\tvar dir;\n\n\tvar duration = getDuration(elem);\n\tvar zeroDuration = false;\n\tif (duration === 0) { zeroDuration = true; duration = 0.25; nostem = true; }        //PER: zero duration will draw a quarter note head.\n\tvar durlog = Math.floor(Math.log(duration) / Math.log(2)); //TODO use getDurlog\n\tvar dot = 0;\n\n\tfor (var tot = Math.pow(2, durlog), inc = tot / 2; tot < duration; dot++, tot += inc, inc /= 2);\n\n\n\tif (elem.startTriplet) {\n\t\tthis.tripletmultiplier = elem.tripletMultiplier;\n\t}\n\n\tvar durationForSpacing = duration * this.tripletmultiplier;\n\tif (elem.rest && elem.rest.type === 'multimeasure')\n\t\tdurationForSpacing = 1;\n\tif (elem.rest && elem.rest.type === 'invisible-multimeasure')\n\t\tdurationForSpacing = this.measureLength * elem.rest.text;\n\tvar absType = elem.rest ? \"rest\" : \"note\";\n\tvar abselem = new AbsoluteElement(elem, durationForSpacing, 1, absType, this.tuneNumber, { durationClassOveride: elem.duration * this.tripletmultiplier });\n\tif (hint) abselem.setHint();\n\n\tif (elem.rest) {\n\t\tif (this.measureLength === duration && elem.rest.type !== 'invisible' && elem.rest.type !== 'spacer' && elem.rest.type.indexOf('multimeasure') < 0)\n\t\t\telem.rest.type = 'whole'; // If the rest is exactly a measure, always use a whole rest\n\t\tvar ret1 = addRestToAbsElement(abselem, elem, duration, dot, voice.voicetotal > 1, this.stemdir, isSingleLineStaff, durlog, this.voiceScale);\n\t\tnotehead = ret1.noteHead;\n\t\troomtaken = ret1.roomTaken;\n\t\troomtakenright = ret1.roomTakenRight;\n\t} else {\n\t\tvar ret2 = this.addNoteToAbcElement(abselem, elem, dot, this.stemdir, this.style, zeroDuration, durlog, nostem, voice);\n\t\tif (ret2.min !== undefined)\n\t\t\tthis.minY = Math.min(ret2.min, this.minY);\n\t\tnotehead = ret2.noteHead;\n\t\troomtaken = ret2.roomTaken;\n\t\troomtakenright = ret2.roomTakenRight;\n\t\tadditionalLedgers = ret2.additionalLedgers;\n\t\tdir = ret2.dir;\n\t\tsymbolWidth = ret2.symbolWidth;\n\t}\n\n\tif (elem.lyric !== undefined) {\n\t\tthis.addLyric(abselem, elem);\n\t}\n\n\tif (elem.gracenotes !== undefined) {\n\t\troomtaken += this.addGraceNotes(elem, voice, abselem, notehead, this.stemHeight * this.voiceScale, this.isBagpipes, roomtaken);\n\t}\n\n\tif (elem.decoration) {\n\t\t// TODO-PER: nostem is true if this is beamed. In that case we don't know where to place the decoration yet so just make a guess. This should be refactored to not place decorations until after the beams are determined.\n\t\t// This should probably be combined with moveDecorations()\n\t\tvar bottom = nostem ? Math.min(-3, abselem.bottom - 6) : abselem.bottom\n\t\tthis.decoration.createDecoration(voice, elem.decoration, abselem.top, (notehead) ? notehead.w : 0, abselem, roomtaken, dir, bottom, elem.positioning, this.hasVocals, this.accentAbove);\n\t}\n\n\tif (elem.barNumber) {\n\t\tabselem.addFixed(new RelativeElement(elem.barNumber, -10, 0, 0, { type: \"barNumber\" }));\n\t}\n\n\t// ledger lines\n\tledgerLines(abselem, elem.minpitch, elem.maxpitch, elem.rest, symbolWidth, additionalLedgers, dir, -2, 1);\n\n\tif (elem.chord !== undefined) {\n\t\tvar ret3 = addChord(this.getTextSize, abselem, elem, roomtaken, roomtakenright, symbolWidth, this.jazzchords, this.germanAlphabet);\n\t\troomtaken = ret3.roomTaken;\n\t\troomtakenright = ret3.roomTakenRight;\n\t}\n\n\tif (elem.startTriplet) {\n\t\tthis.triplet = new TripletElem(elem.startTriplet, notehead, { flatBeams: this.flatBeams }); // above is opposite from case of slurs\n\t}\n\n\tif (elem.endTriplet && this.triplet) {\n\t\tthis.triplet.setCloseAnchor(notehead);\n\t}\n\n\tif (this.triplet && !elem.startTriplet && !elem.endTriplet && !(elem.rest && elem.rest.type === \"spacer\")) {\n\t\tthis.triplet.middleNote(notehead);\n\t}\n\n\treturn abselem;\n};\n\nAbstractEngraver.prototype.addSlursAndTies = function (abselem, pitchelem, notehead, voice, dir, isGrace) {\n\tif (pitchelem.endTie) {\n\t\tif (this.ties.length > 0) {\n\t\t\t// If there are multiple open ties, find the one that applies by matching the pitch, if possible.\n\t\t\tvar found = false;\n\t\t\tfor (var j = 0; j < this.ties.length; j++) {\n\t\t\t\tif (this.ties[j].anchor1 && this.ties[j].anchor1.pitch === notehead.pitch) {\n\t\t\t\t\tthis.ties[j].setEndAnchor(notehead);\n\t\t\t\t\tvoice.setRange(this.ties[j])\n\t\t\t\t\tthis.ties.splice(j, 1);\n\t\t\t\t\tfound = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!found) {\n\t\t\t\tthis.ties[0].setEndAnchor(notehead);\n\t\t\t\tvoice.setRange(this.ties[0])\n\t\t\t\tthis.ties.splice(0, 1);\n\t\t\t}\n\t\t}\n\t}\n\n\tvar voiceNumber = voice.voicetotal < 2 ? -1 : voice.voicenumber;\n\tif (pitchelem.startTie) {\n\t\tvar tie = new TieElem({ anchor1: notehead, force: (this.stemdir === \"down\" || this.stemdir === \"up\"), stemDir: this.stemdir, isGrace: isGrace, voiceNumber: voiceNumber, style: pitchelem.startTie.style });\n\t\tif (hint) tie.setHint();\n\n\t\tthis.ties[this.ties.length] = tie;\n\t\tvoice.addOther(tie);\n\t\t// HACK-PER: For the animation, we need to know if a note is tied to the next one, so here's a flag.\n\t\t// Unfortunately, only some of the notes in the current event might be tied, but this will consider it\n\t\t// tied if any one of them is. That will work for most cases.\n\t\tabselem.startTie = true;\n\t}\n\n\tvar slur;\n\tvar slurid;\n\tif (pitchelem.endSlur) {\n\t\tfor (var i = 0; i < pitchelem.endSlur.length; i++) {\n\t\t\tslurid = pitchelem.endSlur[i];\n\t\t\tif (this.slurs[slurid]) {\n\t\t\t\tslur = this.slurs[slurid];\n\t\t\t\tslur.setEndAnchor(notehead);\n\t\t\t\tvoice.setRange(slur)\n\t\t\t\tdelete this.slurs[slurid];\n\t\t\t} else {\n\t\t\t\tslur = new TieElem({ anchor2: notehead, stemDir: this.stemdir, voiceNumber: voiceNumber });\n\t\t\t\tif (hint) slur.setHint();\n\t\t\t\tvoice.addOther(slur);\n\t\t\t}\n\t\t\tif (this.startlimitelem) {\n\t\t\t\tslur.setStartX(this.startlimitelem);\n\t\t\t}\n\t\t}\n\t} else if (!isGrace) {\n\t\tfor (var s in this.slurs) {\n\t\t\tif (this.slurs.hasOwnProperty(s)) {\n\t\t\t\tthis.slurs[s].addInternalNote(notehead);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (pitchelem.startSlur) {\n\t\tfor (i = 0; i < pitchelem.startSlur.length; i++) {\n\t\t\tslurid = pitchelem.startSlur[i].label;\n\t\t\tslur = new TieElem({ anchor1: notehead, stemDir: this.stemdir, voiceNumber: voiceNumber, style: pitchelem.startSlur[i].style });\n\t\t\tif (hint) slur.setHint();\n\t\t\tthis.slurs[slurid] = slur;\n\t\t\tvoice.addOther(slur);\n\t\t}\n\t}\n};\n\nAbstractEngraver.prototype.addMeasureNumber = function (number, abselem) {\n\tvar measureNumDim = this.getTextSize.calc(number, \"measurefont\", 'bar-number');\n\tvar dx = 0;\n\tif (abselem.isClef) // If this is a clef rather than bar line, then the number shouldn't be centered because it could overlap the left side. This is an easy way to let it be centered but move it over, too.\n\t\tdx += measureNumDim.width / 2\n\tvar vert = measureNumDim.width > 10 && abselem.abcelem.type === \"treble\" ? 13 : 11\n\tabselem.addFixed(new RelativeElement(number, dx, measureNumDim.width, vert + measureNumDim.height / spacing.STEP, { type: \"barNumber\", dim: this.getTextSize.attr(\"measurefont\", 'bar-number') }));\n};\n\nAbstractEngraver.prototype.createBarLine = function (voice, elem, isFirstStaff) {\n\t// bar_thin, bar_thin_thick, bar_thin_thin, bar_thick_thin, bar_right_repeat, bar_left_repeat, bar_double_repeat\n\n\tvar abselem = new AbsoluteElement(elem, 0, 10, 'bar', this.tuneNumber);\n\tvar anchor = null; // place to attach part lines\n\tvar dx = 0;\n\n\tif (elem.barNumber) {\n\t\tthis.addMeasureNumber(elem.barNumber, abselem);\n\t}\n\n\n\tvar firstdots = (elem.type === \"bar_right_repeat\" || elem.type === \"bar_dbl_repeat\");\n\tvar firstthin = (elem.type !== \"bar_left_repeat\" && elem.type !== \"bar_thick_thin\" && elem.type !== \"bar_invisible\");\n\tvar thick = (elem.type === \"bar_right_repeat\" || elem.type === \"bar_dbl_repeat\" || elem.type === \"bar_left_repeat\" ||\n\t\telem.type === \"bar_thin_thick\" || elem.type === \"bar_thick_thin\");\n\tvar secondthin = (elem.type === \"bar_left_repeat\" || elem.type === \"bar_thick_thin\" || elem.type === \"bar_thin_thin\" || elem.type === \"bar_dbl_repeat\");\n\tvar seconddots = (elem.type === \"bar_left_repeat\" || elem.type === \"bar_dbl_repeat\");\n\n\t// limit positioning of slurs\n\tif (firstdots || seconddots) {\n\t\tfor (var slur in this.slurs) {\n\t\t\tif (this.slurs.hasOwnProperty(slur)) {\n\t\t\t\tthis.slurs[slur].setEndX(abselem);\n\t\t\t}\n\t\t}\n\t\tthis.startlimitelem = abselem;\n\t}\n\n\tif (firstdots) {\n\t\tabselem.addRight(new RelativeElement(\"dots.dot\", dx, 1, 7));\n\t\tabselem.addRight(new RelativeElement(\"dots.dot\", dx, 1, 5));\n\t\tdx += 6; //2 hardcoded, twice;\n\t}\n\n\tif (firstthin) {\n\t\tanchor = new RelativeElement(null, dx, 1, 2, { \"type\": \"bar\", \"pitch2\": 10, linewidth: 0.6 });\n\t\tabselem.addRight(anchor);\n\t}\n\n\tif (elem.type === \"bar_invisible\") {\n\t\tanchor = new RelativeElement(null, dx, 1, 2, { \"type\": \"none\", \"pitch2\": 10, linewidth: 0.6 });\n\t\tabselem.addRight(anchor);\n\t}\n\n\tif (elem.decoration) {\n\t\tthis.decoration.createDecoration(voice, elem.decoration, 12, (thick) ? 3 : 1, abselem, 0, \"down\", 2, elem.positioning, this.hasVocals, this.accentAbove);\n\t}\n\n\tif (thick) {\n\t\tdx += 4; //3 hardcoded;\n\t\tanchor = new RelativeElement(null, dx, 4, 2, { \"type\": \"bar\", \"pitch2\": 10, linewidth: 4 });\n\t\tabselem.addRight(anchor);\n\t\tdx += 5;\n\t}\n\n\t// if (this.partstartelem && (thick || (firstthin && secondthin))) { // means end of nth part\n\t// this.partstartelem.anchor2=anchor;\n\t// this.partstartelem = null;\n\t// }\n\n\tif (this.partstartelem && elem.endEnding) {\n\t\tthis.partstartelem.anchor2 = anchor;\n\t\tthis.partstartelem = null;\n\t}\n\n\tif (secondthin) {\n\t\tdx += 3; //3 hardcoded;\n\t\tanchor = new RelativeElement(null, dx, 1, 2, { \"type\": \"bar\", \"pitch2\": 10, linewidth: 0.6 });\n\t\tabselem.addRight(anchor); // 3 is hardcoded\n\t}\n\n\tif (seconddots) {\n\t\tdx += 3; //3 hardcoded;\n\t\tabselem.addRight(new RelativeElement(\"dots.dot\", dx, 1, 7));\n\t\tabselem.addRight(new RelativeElement(\"dots.dot\", dx, 1, 5));\n\t} // 2 is hardcoded\n\n\tif (elem.startEnding && isFirstStaff) { // only put the first & second ending marks on the first staff\n\t\tvar textWidth = this.getTextSize.calc(elem.startEnding, \"repeatfont\", '').width;\n\t\tabselem.minspacing += textWidth + 10; // Give plenty of room for the ending number.\n\t\tthis.partstartelem = new EndingElem(elem.startEnding, anchor, null);\n\t\tvoice.addOther(this.partstartelem);\n\t}\n\n\t// Add a little space to the left of the bar line so that nothing can crowd it.\n\tabselem.extraw -= 5;\n\n\tif (elem.chord !== undefined) {\n\t\tvar ret3 = addChord(this.getTextSize, abselem, elem, 0, 0, 0, false, this.germanAlphabet);\n\t}\n\n\treturn abselem;\n\n};\n\nmodule.exports = AbstractEngraver;\n","var RelativeElement = require('./elements/relative-element');\nvar spacing = require('../helpers/spacing');\nconst translateChord = require(\"./translate-chord\");\n\nvar addChord = function (getTextSize, abselem, elem, roomTaken, roomTakenRight, noteheadWidth, jazzchords, germanAlphabet) {\n\tfor (var i = 0; i < elem.chord.length; i++) {\n\t\tvar pos = elem.chord[i].position;\n\t\tvar rel_position = elem.chord[i].rel_position;\n\t\tvar isAnnotation = pos === \"left\" || pos === \"right\" || pos === \"below\" || pos === \"above\" || !!rel_position\n\t\tvar font;\n\t\tvar klass;\n\t\tif (isAnnotation) {\n\t\t\tfont = 'annotationfont';\n\t\t\tklass = \"abcjs-annotation\";\n\t\t} else {\n\t\t\tfont = 'gchordfont';\n\t\t\tklass = \"abcjs-chord\";\n\t\t}\n\t\tvar attr = getTextSize.attr(font, klass);\n\n\t\tvar name = elem.chord[i].name\n\t\tvar ret;\n\t\t//console.log(\"chord\",name)\n\t\tif (typeof name === \"string\") {\n\t\t\tret = chordString(name, pos, rel_position, isAnnotation, font, klass, attr, getTextSize, abselem, elem, roomTaken, roomTakenRight, noteheadWidth, jazzchords, germanAlphabet)\n\t\t\troomTaken = ret.roomTaken\n\t\t\troomTakenRight = ret.roomTakenRight\n\t\t} else {\n\t\t\tfor (var j = 0; j < name.length; j++) {\n\t\t\t\tret = chordString(name[j].text, pos, rel_position, isAnnotation, font, klass, attr, getTextSize, abselem, elem, roomTaken, roomTakenRight, noteheadWidth, jazzchords, germanAlphabet)\n\t\t\t\troomTaken = ret.roomTaken\n\t\t\t\troomTakenRight = ret.roomTakenRight\n\t\t\t}\n\t\t}\n\t}\n\treturn { roomTaken: roomTaken, roomTakenRight: roomTakenRight };\n};\n\nfunction chordString(chordString, pos, rel_position, isAnnotation, font, klass, attr, getTextSize, abselem, elem, roomTaken, roomTakenRight, noteheadWidth, jazzchords, germanAlphabet) {\n\tvar chords = chordString.split(\"\\n\");\n\tfor (var j = chords.length - 1; j >= 0; j--) { // parse these in opposite order because we place them from bottom to top.\n\t\tvar chord = chords[j];\n\t\tvar x = 0;\n\t\tvar y;\n\t\tif (!isAnnotation)\n\t\t\tchord = translateChord(chord, jazzchords, germanAlphabet);\n\t\tvar dim = getTextSize.calc(chord, font, klass);\n\t\tvar chordWidth = dim.width;\n\t\tvar chordHeight = dim.height / spacing.STEP;\n\t\tswitch (pos) {\n\t\t\tcase \"left\":\n\t\t\t\troomTaken += chordWidth + 7;\n\t\t\t\tx = -roomTaken;        // TODO-PER: This is just a guess from trial and error\n\t\t\t\ty = elem.averagepitch;\n\t\t\t\tabselem.addExtra(new RelativeElement(chord, x, chordWidth + 4, y, {\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\theight: chordHeight,\n\t\t\t\t\tdim: attr,\n\t\t\t\t\tposition: \"left\"\n\t\t\t\t}));\n\t\t\t\tbreak;\n\t\t\tcase \"right\":\n\t\t\t\troomTakenRight += 4;\n\t\t\t\tx = roomTakenRight;// TODO-PER: This is just a guess from trial and error\n\t\t\t\ty = elem.averagepitch;\n\t\t\t\tabselem.addRight(new RelativeElement(chord, x, chordWidth + 4, y, {\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\theight: chordHeight,\n\t\t\t\t\tdim: attr,\n\t\t\t\t\tposition: \"right\"\n\t\t\t\t}));\n\t\t\t\tbreak;\n\t\t\tcase \"below\":\n\t\t\t\t// setting the y-coordinate to undefined for now: it will be overwritten later on, after we figure out what the highest element on the line is.\n\t\t\t\tabselem.addRight(new RelativeElement(chord, 0, 0, undefined, {\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\tposition: \"below\",\n\t\t\t\t\theight: chordHeight,\n\t\t\t\t\tdim: attr,\n\t\t\t\t\trealWidth: chordWidth\n\t\t\t\t}));\n\t\t\t\tbreak;\n\t\t\tcase \"above\":\n\t\t\t\t// setting the y-coordinate to undefined for now: it will be overwritten later on, after we figure out what the highest element on the line is.\n\t\t\t\tabselem.addRight(new RelativeElement(chord, 0, 0, undefined, {\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\tposition: \"above\",\n\t\t\t\t\theight: chordHeight,\n\t\t\t\t\tdim: attr,\n\t\t\t\t\trealWidth: chordWidth\n\t\t\t\t}));\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tif (rel_position) {\n\t\t\t\t\tvar relPositionY = rel_position.y + 3 * spacing.STEP; // TODO-PER: this is a fudge factor to make it line up with abcm2ps\n\t\t\t\t\tabselem.addRight(new RelativeElement(chord, x + rel_position.x, 0, elem.minpitch + relPositionY / spacing.STEP, {\n\t\t\t\t\t\tposition: \"relative\",\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\theight: chordHeight,\n\t\t\t\t\t\tdim: attr\n\t\t\t\t\t}));\n\t\t\t\t} else {\n\t\t\t\t\t// setting the y-coordinate to undefined for now: it will be overwritten later on, after we figure out what the highest element on the line is.\n\t\t\t\t\tvar pos2 = 'above';\n\t\t\t\t\tif (elem.positioning && elem.positioning.chordPosition)\n\t\t\t\t\t\tpos2 = elem.positioning.chordPosition;\n\n\t\t\t\t\tif (pos2 !== 'hidden') {\n\t\t\t\t\t\tabselem.addCentered(new RelativeElement(chord, noteheadWidth / 2, chordWidth, undefined, {\n\t\t\t\t\t\t\ttype: \"chord\",\n\t\t\t\t\t\t\tposition: pos2,\n\t\t\t\t\t\t\theight: chordHeight,\n\t\t\t\t\t\t\tdim: attr,\n\t\t\t\t\t\t\trealWidth: chordWidth\n\t\t\t\t\t\t}));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t}\n\t}\n\treturn { roomTaken: roomTaken, roomTakenRight: roomTakenRight };\n}\nmodule.exports = addChord;\n","function addTextIf(rows, params, getTextSize) {\n\tif (!params.text)\n\t\treturn;\n\tif (!params.marginLeft) params.marginLeft = 0;\n\tif (!params.klass) params.klass = '';\n\tif (!params.anchor) params.anchor = 'start';\n\tif (!params.info) params.info = { startChar: -2, endChar: -2 }\n\n\tif (params.marginTop)\n\t\trows.push({ move: params.marginTop });\n\tvar attr = { left: params.marginLeft, text: params.text, font: params.font, anchor: params.anchor, startChar: params.info.startChar, endChar: params.info.endChar, 'dominant-baseline': params['dominant-baseline'] };\n\tif (params.absElemType)\n\t\tattr.absElemType = params.absElemType;\n\tif (!params.inGroup && params.klass)\n\t\tattr.klass = params.klass;\n\tif (params.name)\n\t\tattr.name = params.name;\n\n\trows.push(attr);\n\t// If there are blank lines they won't be counted by getTextSize, so just get the height of one line and multiply\n\tvar size = getTextSize.calc(\"A\", params.font, params.klass);\n\tvar numLines = params.text.split(\"\\n\").length;\n\tif (params.text[params.text.length - 1] === '\\n')\n\t\tnumLines--; // If there is a new line at the end of the string, then an extra line will be counted.\n\tif (!params.noMove) {\n\t\tvar h = (size.height * 1.1) * numLines;\n\t\trows.push({ move: Math.round(h) });\n\t\tif (params.marginBottom)\n\t\t\trows.push({ move: params.marginBottom });\n\t}\n}\n\nmodule.exports = addTextIf;\n","var calcHeight = function (staffGroup) {\n\t// the height is calculated here in a parallel way to the drawing below in hopes that both of these functions will be modified together.\n\t// TODO-PER: also add the space between staves. (That's systemStaffSeparation, which is the minimum distance between the staff LINES.)\n\tvar height = 0;\n\tfor (var i = 0; i < staffGroup.voices.length; i++) {\n\t\tvar staff = staffGroup.voices[i].staff;\n\t\tif (!staffGroup.voices[i].duplicate) {\n\t\t\theight += staff.top;\n\t\t\t//if (staff.bottom < 0)\n\t\t\theight += -staff.bottom;\n\t\t}\n\t}\n\treturn height;\n};\n\nmodule.exports = calcHeight;\n\n","//    abc_create_clef.js\n\nvar AbsoluteElement = require('./elements/absolute-element');\nvar glyphs = require('./glyphs');\nvar RelativeElement = require('./elements/relative-element');\n\nvar createClef = function (elem, tuneNumber) {\n\tvar clef;\n\tvar octave = 0;\n\telem.el_type = \"clef\";\n\tvar abselem = new AbsoluteElement(elem, 0, 10, 'staff-extra clef', tuneNumber);\n\tabselem.isClef = true;\n\tswitch (elem.type) {\n\t\tcase \"treble\": clef = \"clefs.G\"; break;\n\t\tcase \"tenor\": clef = \"clefs.C\"; break;\n\t\tcase \"alto\": clef = \"clefs.C\"; break;\n\t\tcase \"bass\": clef = \"clefs.F\"; break;\n\t\tcase 'treble+8': clef = \"clefs.G\"; octave = 1; break;\n\t\tcase 'tenor+8': clef = \"clefs.C\"; octave = 1; break;\n\t\tcase 'bass+8': clef = \"clefs.F\"; octave = 1; break;\n\t\tcase 'alto+8': clef = \"clefs.C\"; octave = 1; break;\n\t\tcase 'treble-8': clef = \"clefs.G\"; octave = -1; break;\n\t\tcase 'tenor-8': clef = \"clefs.C\"; octave = -1; break;\n\t\tcase 'bass-8': clef = \"clefs.F\"; octave = -1; break;\n\t\tcase 'alto-8': clef = \"clefs.C\"; octave = -1; break;\n\t\tcase 'none': return null;\n\t\tcase 'perc': clef = \"clefs.perc\"; break;\n\t\tdefault: abselem.addFixed(new RelativeElement(\"clef=\" + elem.type, 0, 0, undefined, { type: \"debug\" }));\n\t}\n\t// if (elem.verticalPos) {\n\t// pitch = elem.verticalPos;\n\t// }\n\tvar dx = 5;\n\tif (clef) {\n\t\tvar height = glyphs.symbolHeightInPitches(clef);\n\t\tvar ofs = clefOffsets(clef);\n\t\tabselem.addRight(new RelativeElement(clef, dx, glyphs.getSymbolWidth(clef), elem.clefPos, { top: height + elem.clefPos + ofs, bottom: elem.clefPos + ofs }));\n\n\t\tif (octave !== 0) {\n\t\t\tvar scale = 2 / 3;\n\t\t\tvar adjustspacing = (glyphs.getSymbolWidth(clef) - glyphs.getSymbolWidth(\"8\") * scale) / 2;\n\t\t\tvar pitch = (octave > 0) ? abselem.top + 3 : abselem.bottom - 1;\n\t\t\tvar top = (octave > 0) ? abselem.top + 3 : abselem.bottom - 3;\n\t\t\tvar bottom = top - 2;\n\t\t\tif (elem.type === \"bass-8\") {\n\t\t\t\t// The placement for bass octave is a little different. It should hug the clef.\n\t\t\t\tpitch = 3;\n\t\t\t\tadjustspacing = 0;\n\t\t\t}\n\t\t\tabselem.addRight(new RelativeElement(\"8\", dx + adjustspacing, glyphs.getSymbolWidth(\"8\") * scale, pitch, {\n\t\t\t\tscalex: scale,\n\t\t\t\tscaley: scale,\n\t\t\t\ttop: top,\n\t\t\t\tbottom: bottom\n\t\t\t}));\n\t\t\t//abselem.top += 2;\n\t\t}\n\t}\n\treturn abselem;\n};\n\nfunction clefOffsets(clef) {\n\tswitch (clef) {\n\t\tcase \"clefs.G\": return -5;\n\t\tcase \"clefs.C\": return -4;\n\t\tcase \"clefs.F\": return -4;\n\t\tcase \"clefs.perc\": return -2;\n\t\tdefault: return 0;\n\t}\n}\n\nmodule.exports = createClef;\n","//    abc_create_key_signature.js\n\nvar AbsoluteElement = require('./elements/absolute-element');\nvar glyphs = require('./glyphs');\nvar RelativeElement = require('./elements/relative-element');\n\nvar createKeySignature = function (elem, tuneNumber) {\n\telem.el_type = \"keySignature\";\n\tif (!elem.accidentals || elem.accidentals.length === 0)\n\t\treturn null;\n\tvar abselem = new AbsoluteElement(elem, 0, 10, 'staff-extra key-signature', tuneNumber);\n\tabselem.isKeySig = true;\n\tvar dx = 0;\n\telem.accidentals.forEach(function (acc) {\n\t\tvar symbol;\n\t\tvar fudge = 0;\n\t\tswitch (acc.acc) {\n\t\t\tcase \"sharp\": symbol = \"accidentals.sharp\"; fudge = -3; break;\n\t\t\tcase \"natural\": symbol = \"accidentals.nat\"; break;\n\t\t\tcase \"flat\": symbol = \"accidentals.flat\"; fudge = -1.2; break;\n\t\t\tcase \"quartersharp\": symbol = \"accidentals.halfsharp\"; fudge = -2.5; break;\n\t\t\tcase \"quarterflat\": symbol = \"accidentals.halfflat\"; fudge = -1.2; break;\n\t\t\tdefault: symbol = \"accidentals.flat\";\n\t\t}\n\t\tabselem.addRight(new RelativeElement(symbol, dx, glyphs.getSymbolWidth(symbol), acc.verticalPos, { thickness: glyphs.symbolHeightInPitches(symbol), top: acc.verticalPos + glyphs.symbolHeightInPitches(symbol) + fudge, bottom: acc.verticalPos + fudge }));\n\t\tdx += glyphs.getSymbolWidth(symbol) + 2;\n\t}, this);\n\treturn abselem;\n};\n\nmodule.exports = createKeySignature;\n","var glyphs = require('./glyphs');\nvar RelativeElement = require('./elements/relative-element');\n\nvar createNoteHead = function (abselem, c, pitchelem, options) {\n\tif (!options) options = {};\n\tvar dir = (options.dir !== undefined) ? options.dir : null;\n\tvar headx = (options.headx !== undefined) ? options.headx : 0;\n\tvar extrax = (options.extrax !== undefined) ? options.extrax : 0;\n\tvar flag = (options.flag !== undefined) ? options.flag : null;\n\tvar dot = (options.dot !== undefined) ? options.dot : 0;\n\tvar dotshiftx = (options.dotshiftx !== undefined) ? options.dotshiftx : 0;\n\tvar scale = (options.scale !== undefined) ? options.scale : 1;\n\tvar accidentalSlot = (options.accidentalSlot !== undefined) ? options.accidentalSlot : [];\n\tvar shouldExtendStem = (options.shouldExtendStem !== undefined) ? options.shouldExtendStem : false;\n\tvar printAccidentals = (options.printAccidentals !== undefined) ? options.printAccidentals : true;\n\n\t// TODO scale the dot as well\n\tvar pitch = pitchelem.verticalPos;\n\tvar notehead;\n\tvar accidentalshiftx = 0;\n\tvar newDotShiftX = 0;\n\tvar extraLeft = 0;\n\tif (c === undefined)\n\t\tabselem.addFixed(new RelativeElement(\"pitch is undefined\", 0, 0, 0, { type: \"debug\" }));\n\telse if (c === \"\") {\n\t\tnotehead = new RelativeElement(null, 0, 0, pitch);\n\t} else {\n\t\tvar shiftheadx = headx;\n\t\tif (pitchelem.printer_shift) {\n\t\t\tvar adjust = (pitchelem.printer_shift === \"same\") ? 1 : 0;\n\t\t\tshiftheadx = (dir === \"down\") ? -glyphs.getSymbolWidth(c) * scale + adjust : glyphs.getSymbolWidth(c) * scale - adjust;\n\t\t}\n\t\tvar opts = { scalex: scale, scaley: scale, thickness: glyphs.symbolHeightInPitches(c) * scale, name: pitchelem.name };\n\t\tnotehead = new RelativeElement(c, shiftheadx, glyphs.getSymbolWidth(c) * scale, pitch, opts);\n\t\tnotehead.stemDir = dir;\n\t\tif (flag) {\n\t\t\tvar pos = pitch + ((dir === \"down\") ? -7 : 7) * scale;\n\t\t\t// if this is a regular note, (not grace or tempo indicator) then the stem will have been stretched to the middle line if it is far from the center.\n\t\t\tif (shouldExtendStem) {\n\t\t\t\tif (dir === \"down\" && pos > 6)\n\t\t\t\t\tpos = 6;\n\t\t\t\tif (dir === \"up\" && pos < 6)\n\t\t\t\t\tpos = 6;\n\t\t\t}\n\t\t\t//if (scale===1 && (dir===\"down\")?(pos>6):(pos<6)) pos=6;\n\t\t\tvar xdelta = (dir === \"down\") ? headx : headx + notehead.w - 0.6;\n\t\t\tabselem.addRight(new RelativeElement(flag, xdelta, glyphs.getSymbolWidth(flag) * scale, pos, { scalex: scale, scaley: scale }));\n\t\t}\n\t\tnewDotShiftX = notehead.w + dotshiftx - 2 + 5 * dot;\n\t\tfor (; dot > 0; dot--) {\n\t\t\tvar dotadjusty = (1 - Math.abs(pitch) % 2); //PER: take abs value of the pitch. And the shift still happens on ledger lines.\n\t\t\tabselem.addRight(new RelativeElement(\"dots.dot\", notehead.w + dotshiftx - 2 + 5 * dot, glyphs.getSymbolWidth(\"dots.dot\"), pitch + dotadjusty));\n\t\t}\n\t}\n\tif (notehead)\n\t\tnotehead.highestVert = pitchelem.highestVert;\n\n\tif (printAccidentals && pitchelem.accidental) {\n\t\tvar symb;\n\t\tswitch (pitchelem.accidental) {\n\t\t\tcase \"quartersharp\":\n\t\t\t\tsymb = \"accidentals.halfsharp\";\n\t\t\t\tbreak;\n\t\t\tcase \"dblsharp\":\n\t\t\t\tsymb = \"accidentals.dblsharp\";\n\t\t\t\tbreak;\n\t\t\tcase \"sharp\":\n\t\t\t\tsymb = \"accidentals.sharp\";\n\t\t\t\tbreak;\n\t\t\tcase \"quarterflat\":\n\t\t\t\tsymb = \"accidentals.halfflat\";\n\t\t\t\tbreak;\n\t\t\tcase \"flat\":\n\t\t\t\tsymb = \"accidentals.flat\";\n\t\t\t\tbreak;\n\t\t\tcase \"dblflat\":\n\t\t\t\tsymb = \"accidentals.dblflat\";\n\t\t\t\tbreak;\n\t\t\tcase \"natural\":\n\t\t\t\tsymb = \"accidentals.nat\";\n\t\t}\n\t\t// if a note is at least a sixth away, it can share a slot with another accidental\n\t\tvar accSlotFound = false;\n\t\tvar accPlace = extrax;\n\t\tfor (var j = 0; j < accidentalSlot.length; j++) {\n\t\t\tif (pitch - accidentalSlot[j][0] >= 6) {\n\t\t\t\taccidentalSlot[j][0] = pitch;\n\t\t\t\taccPlace = accidentalSlot[j][1];\n\t\t\t\taccSlotFound = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (accSlotFound === false) {\n\t\t\taccPlace -= (glyphs.getSymbolWidth(symb) * scale + 2);\n\t\t\taccidentalSlot.push([pitch, accPlace]);\n\t\t\taccidentalshiftx = (glyphs.getSymbolWidth(symb) * scale + 2);\n\t\t}\n\t\tvar h = glyphs.symbolHeightInPitches(symb);\n\t\tabselem.addExtra(new RelativeElement(symb, accPlace, glyphs.getSymbolWidth(symb), pitch, { scalex: scale, scaley: scale, top: pitch + h / 2, bottom: pitch - h / 2 }));\n\t\textraLeft = glyphs.getSymbolWidth(symb) / 2; // TODO-PER: We need a little extra width if there is an accidental, but I'm not sure why it isn't the full width of the accidental.\n\t}\n\n\treturn { notehead: notehead, accidentalshiftx: accidentalshiftx, dotshiftx: newDotShiftX, extraLeft: extraLeft };\n\n};\n\nmodule.exports = createNoteHead;\n","//    abc_create_time_signature.js\n\nvar AbsoluteElement = require('./elements/absolute-element');\nvar glyphs = require('./glyphs');\nvar RelativeElement = require('./elements/relative-element');\n\nvar createTimeSignature = function (elem, tuneNumber) {\n\telem.el_type = \"timeSignature\";\n\tvar abselem = new AbsoluteElement(elem, 0, 10, 'staff-extra time-signature', tuneNumber);\n\tif (elem.type === \"specified\") {\n\t\tvar x = 0;\n\t\tfor (var i = 0; i < elem.value.length; i++) {\n\t\t\tif (i !== 0) {\n\t\t\t\tabselem.addRight(new RelativeElement('+', x + 1, glyphs.getSymbolWidth(\"+\"), 6, { thickness: glyphs.symbolHeightInPitches(\"+\") }));\n\t\t\t\tx += glyphs.getSymbolWidth(\"+\") + 2;\n\t\t\t}\n\t\t\tif (elem.value[i].den) {\n\t\t\t\tvar numWidth = 0;\n\t\t\t\tfor (var i2 = 0; i2 < elem.value[i].num.length; i2++)\n\t\t\t\t\tnumWidth += glyphs.getSymbolWidth(elem.value[i].num[i2]);\n\t\t\t\tvar denWidth = 0;\n\t\t\t\tfor (i2 = 0; i2 < elem.value[i].num.length; i2++)\n\t\t\t\t\tdenWidth += glyphs.getSymbolWidth(elem.value[i].den[i2]);\n\t\t\t\tvar maxWidth = Math.max(numWidth, denWidth);\n\t\t\t\tabselem.addRight(new RelativeElement(elem.value[i].num, x + (maxWidth - numWidth) / 2, numWidth, 8, { thickness: glyphs.symbolHeightInPitches(elem.value[i].num[0]) }));\n\t\t\t\tabselem.addRight(new RelativeElement(elem.value[i].den, x + (maxWidth - denWidth) / 2, denWidth, 4, { thickness: glyphs.symbolHeightInPitches(elem.value[i].den[0]) }));\n\t\t\t\tx += maxWidth\n\t\t\t} else {\n\t\t\t\tvar thisWidth = 0;\n\t\t\t\tfor (var i3 = 0; i3 < elem.value[i].num.length; i3++)\n\t\t\t\t\tthisWidth += glyphs.getSymbolWidth(elem.value[i].num[i3]);\n\t\t\t\tabselem.addRight(new RelativeElement(elem.value[i].num, x, thisWidth, 6, { thickness: glyphs.symbolHeightInPitches(elem.value[i].num[0]) }));\n\t\t\t\tx += thisWidth;\n\t\t\t}\n\t\t}\n\t} else if (elem.type === \"common_time\") {\n\t\tabselem.addRight(new RelativeElement(\"timesig.common\", 0, glyphs.getSymbolWidth(\"timesig.common\"), 6, { thickness: glyphs.symbolHeightInPitches(\"timesig.common\") }));\n\n\t} else if (elem.type === \"cut_time\") {\n\t\tabselem.addRight(new RelativeElement(\"timesig.cut\", 0, glyphs.getSymbolWidth(\"timesig.cut\"), 6, { thickness: glyphs.symbolHeightInPitches(\"timesig.cut\") }));\n\t} else if (elem.type === \"tempus_imperfectum\") {\n\t\tabselem.addRight(new RelativeElement(\"timesig.imperfectum\", 0, glyphs.getSymbolWidth(\"timesig.imperfectum\"), 6, { thickness: glyphs.symbolHeightInPitches(\"timesig.imperfectum\") }));\n\t} else if (elem.type === \"tempus_imperfectum_prolatio\") {\n\t\tabselem.addRight(new RelativeElement(\"timesig.imperfectum2\", 0, glyphs.getSymbolWidth(\"timesig.imperfectum2\"), 6, { thickness: glyphs.symbolHeightInPitches(\"timesig.imperfectum2\") }));\n\t} else if (elem.type === \"tempus_perfectum\") {\n\t\tabselem.addRight(new RelativeElement(\"timesig.perfectum\", 0, glyphs.getSymbolWidth(\"timesig.perfectum\"), 6, { thickness: glyphs.symbolHeightInPitches(\"timesig.perfectum\") }));\n\t} else if (elem.type === \"tempus_perfectum_prolatio\") {\n\t\tabselem.addRight(new RelativeElement(\"timesig.perfectum2\", 0, glyphs.getSymbolWidth(\"timesig.perfectum2\"), 6, { thickness: glyphs.symbolHeightInPitches(\"timesig.perfectum2\") }));\n\t} else {\n\t\tconsole.log(\"time signature:\", elem);\n\t}\n\treturn abselem;\n};\n\nmodule.exports = createTimeSignature;\n","// abc_decoration.js: Creates a data structure suitable for printing a line of abc\n\nvar DynamicDecoration = require('./elements/dynamic-decoration');\nvar CrescendoElem = require('./elements/crescendo-element');\nvar GlissandoElem = require('./elements/glissando-element');\nvar glyphs = require('./glyphs');\nvar RelativeElement = require('./elements/relative-element');\nvar TieElem = require('./elements/tie-element');\n\nvar Decoration = function Decoration() {\n\tthis.startDiminuendoX = undefined;\n\tthis.startCrescendoX = undefined;\n\tthis.minTop = 12;\t// TODO-PER: this is assuming a 5-line staff. Pass that info in.\n\tthis.minBottom = 0;\n};\n\nvar closeDecoration = function (voice, decoration, pitch, width, abselem, roomtaken, dir, minPitch, accentAbove) {\n\tvar yPos;\n\tfor (var i = 0; i < decoration.length; i++) {\n\t\tif (decoration[i] === \"staccato\" || decoration[i] === \"tenuto\" || (decoration[i] === \"accent\" && !accentAbove)) {\n\t\t\tvar symbol = \"scripts.\" + decoration[i];\n\t\t\tif (decoration[i] === \"accent\") symbol = \"scripts.sforzato\";\n\t\t\tif (yPos === undefined)\n\t\t\t\tyPos = (dir === \"down\") ? pitch + 2 : minPitch - 2;\n\t\t\telse\n\t\t\t\tyPos = (dir === \"down\") ? yPos + 2 : yPos - 2;\n\t\t\tif (decoration[i] === \"accent\") {\n\t\t\t\t// Always place the accent three pitches away, no matter whether that is a line or space.\n\t\t\t\tif (dir === \"up\") yPos--;\n\t\t\t\telse yPos++;\n\t\t\t} else {\n\t\t\t\t// don't place on a stave line. The stave lines are 2,4,6,8,10\n\t\t\t\tswitch (yPos) {\n\t\t\t\t\tcase 2:\n\t\t\t\t\tcase 4:\n\t\t\t\t\tcase 6:\n\t\t\t\t\tcase 8:\n\t\t\t\t\tcase 10:\n\t\t\t\t\t\tif (dir === \"up\") yPos--;\n\t\t\t\t\t\telse yPos++;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (pitch > 9) yPos++; // take up some room of those that are above\n\t\t\tvar deltaX = width / 2;\n\t\t\tif (glyphs.getSymbolAlign(symbol) !== \"center\") {\n\t\t\t\tdeltaX -= (glyphs.getSymbolWidth(symbol) / 2);\n\t\t\t}\n\t\t\tabselem.addFixedX(new RelativeElement(symbol, deltaX, glyphs.getSymbolWidth(symbol), yPos));\n\t\t}\n\t\tif (decoration[i] === \"slide\" && abselem.heads[0]) {\n\t\t\tvar yPos2 = abselem.heads[0].pitch;\n\t\t\tyPos2 -= 2; // TODO-PER: not sure what this fudge factor is.\n\t\t\tvar blank1 = new RelativeElement(\"\", -roomtaken - 15, 0, yPos2 - 1);\n\t\t\tvar blank2 = new RelativeElement(\"\", -roomtaken - 5, 0, yPos2 + 1);\n\t\t\tabselem.addFixedX(blank1);\n\t\t\tabselem.addFixedX(blank2);\n\t\t\tvoice.addOther(new TieElem({ anchor1: blank1, anchor2: blank2, fixedY: true }));\n\t\t}\n\t}\n\tif (yPos === undefined)\n\t\tyPos = pitch;\n\n\treturn { above: yPos, below: abselem.bottom };\n};\n\nvar volumeDecoration = function (voice, decoration, abselem, positioning) {\n\tfor (var i = 0; i < decoration.length; i++) {\n\t\tswitch (decoration[i]) {\n\t\t\tcase \"p\":\n\t\t\tcase \"mp\":\n\t\t\tcase \"pp\":\n\t\t\tcase \"ppp\":\n\t\t\tcase \"pppp\":\n\t\t\tcase \"f\":\n\t\t\tcase \"ff\":\n\t\t\tcase \"fff\":\n\t\t\tcase \"ffff\":\n\t\t\tcase \"sfz\":\n\t\t\tcase \"mf\":\n\t\t\t\tvar elem = new DynamicDecoration(abselem, decoration[i], positioning);\n\t\t\t\tvoice.addOther(elem);\n\t\t}\n\t}\n};\n\nvar compoundDecoration = function (decoration, pitch, width, abselem, dir) {\n\tfunction highestPitch() {\n\t\tif (abselem.heads.length === 0)\n\t\t\treturn 10;\t// TODO-PER: I don't know if this can happen, but we'll return the top of the staff if so.\n\t\tvar pitch = abselem.heads[0].pitch;\n\t\tfor (var i = 1; i < abselem.heads.length; i++)\n\t\t\tpitch = Math.max(pitch, abselem.heads[i].pitch);\n\t\treturn pitch;\n\t}\n\tfunction lowestPitch() {\n\t\tif (abselem.heads.length === 0)\n\t\t\treturn 2;\t// TODO-PER: I don't know if this can happen, but we'll return the bottom of the staff if so.\n\t\tvar pitch = abselem.heads[0].pitch;\n\t\tfor (var i = 1; i < abselem.heads.length; i++)\n\t\t\tpitch = Math.min(pitch, abselem.heads[i].pitch);\n\t\treturn pitch;\n\t}\n\tfunction compoundDecoration(symbol, count) {\n\t\tvar placement = (dir === 'down') ? lowestPitch() + 1 : highestPitch() + 9;\n\t\tif (dir !== 'down' && count === 1)\n\t\t\tplacement--;\n\t\tvar deltaX = width / 2;\n\t\tdeltaX += (dir === 'down') ? -5 : 3;\n\t\tfor (var i = 0; i < count; i++) {\n\t\t\tplacement -= 1;\n\t\t\tabselem.addFixedX(new RelativeElement(symbol, deltaX, glyphs.getSymbolWidth(symbol), placement));\n\t\t}\n\t}\n\n\tfor (var i = 0; i < decoration.length; i++) {\n\t\tswitch (decoration[i]) {\n\t\t\tcase \"/\": compoundDecoration(\"flags.ugrace\", 1); break;\n\t\t\tcase \"//\": compoundDecoration(\"flags.ugrace\", 2); break;\n\t\t\tcase \"///\": compoundDecoration(\"flags.ugrace\", 3); break;\n\t\t\tcase \"////\": compoundDecoration(\"flags.ugrace\", 4); break;\n\t\t}\n\t}\n};\n\nvar stackedDecoration = function (decoration, width, abselem, yPos, positioning, minTop, minBottom, accentAbove) {\n\tfunction incrementPlacement(placement, height) {\n\t\tif (placement === 'above')\n\t\t\tyPos.above += height;\n\t\telse\n\t\t\tyPos.below -= height;\n\t}\n\tfunction getPlacement(placement) {\n\t\tvar y;\n\t\tif (placement === 'above') {\n\t\t\ty = yPos.above;\n\t\t\tif (y < minTop)\n\t\t\t\ty = minTop;\n\t\t} else {\n\t\t\ty = yPos.below;\n\t\t\tif (y > minBottom)\n\t\t\t\ty = minBottom;\n\t\t}\n\t\treturn y;\n\t}\n\tfunction textDecoration(text, placement, anchor) {\n\t\tvar y = getPlacement(placement);\n\t\tvar textFudge = 2;\n\t\tvar textHeight = 5;\n\t\t// TODO-PER: Get the height of the current font and use that for the thickness.\n\t\tabselem.addFixedX(new RelativeElement(text, width / 2, 0, y + textFudge, { type: \"decoration\", klass: 'ornament', thickness: 3, anchor: anchor }));\n\n\t\tincrementPlacement(placement, textHeight);\n\t}\n\tfunction symbolDecoration(symbol, placement) {\n\t\tvar deltaX = width / 2;\n\t\tif (glyphs.getSymbolAlign(symbol) !== \"center\") {\n\t\t\tdeltaX -= (glyphs.getSymbolWidth(symbol) / 2);\n\t\t}\n\t\tvar height = glyphs.symbolHeightInPitches(symbol) + 1; // adding a little padding so nothing touches.\n\t\tvar y = getPlacement(placement);\n\t\ty = (placement === 'above') ? y + height / 2 : y - height / 2;// Center the element vertically.\n\t\tabselem.addFixedX(new RelativeElement(symbol, deltaX, glyphs.getSymbolWidth(symbol), y, { klass: 'ornament', thickness: glyphs.symbolHeightInPitches(symbol), position: placement }));\n\n\t\tincrementPlacement(placement, height);\n\t}\n\n\tvar symbolList = {\n\t\t\"+\": \"scripts.stopped\",\n\t\t\"open\": \"scripts.open\",\n\t\t\"snap\": \"scripts.snap\",\n\t\t\"wedge\": \"scripts.wedge\",\n\t\t\"thumb\": \"scripts.thumb\",\n\t\t\"shortphrase\": \"scripts.shortphrase\",\n\t\t\"mediumphrase\": \"scripts.mediumphrase\",\n\t\t\"longphrase\": \"scripts.longphrase\",\n\t\t\"trill\": \"scripts.trill\",\n\t\t\"roll\": \"scripts.roll\",\n\t\t\"irishroll\": \"scripts.roll\",\n\t\t\"marcato\": \"scripts.umarcato\",\n\t\t\"dmarcato\": \"scripts.dmarcato\",\n\t\t\"umarcato\": \"scripts.umarcato\",\n\t\t\"turn\": \"scripts.turn\",\n\t\t\"uppermordent\": \"scripts.prall\",\n\t\t\"pralltriller\": \"scripts.prall\",\n\t\t\"mordent\": \"scripts.mordent\",\n\t\t\"lowermordent\": \"scripts.mordent\",\n\t\t\"downbow\": \"scripts.downbow\",\n\t\t\"upbow\": \"scripts.upbow\",\n\t\t\"fermata\": \"scripts.ufermata\",\n\t\t\"invertedfermata\": \"scripts.dfermata\",\n\t\t\"breath\": \",\",\n\t\t\"coda\": \"scripts.coda\",\n\t\t\"segno\": \"scripts.segno\"\n\t};\n\n\tvar hasOne = false;\n\tfor (var i = 0; i < decoration.length; i++) {\n\t\tswitch (decoration[i]) {\n\t\t\tcase \"0\":\n\t\t\tcase \"1\":\n\t\t\tcase \"2\":\n\t\t\tcase \"3\":\n\t\t\tcase \"4\":\n\t\t\tcase \"5\":\n\t\t\tcase \"D.C.\":\n\t\t\tcase \"D.S.\":\n\t\t\t\ttextDecoration(decoration[i], positioning, 'middle');\n\t\t\t\thasOne = true;\n\t\t\t\tbreak;\n\t\t\tcase \"D.C.alcoda\":\n\t\t\t\ttextDecoration(\"D.C. al coda\", positioning, 'end');\n\t\t\t\thasOne = true;\n\t\t\t\tbreak;\n\t\t\tcase \"D.C.alfine\":\n\t\t\t\ttextDecoration(\"D.C. al fine\", positioning, 'end');\n\t\t\t\thasOne = true;\n\t\t\t\tbreak;\n\t\t\tcase \"D.S.alcoda\":\n\t\t\t\ttextDecoration(\"D.S. al coda\", positioning, 'end');\n\t\t\t\thasOne = true;\n\t\t\t\tbreak;\n\t\t\tcase \"D.S.alfine\":\n\t\t\t\ttextDecoration(\"D.S. al fine\", positioning, 'end');\n\t\t\t\thasOne = true;\n\t\t\t\tbreak;\n\t\t\tcase \"fine\":\n\t\t\t\ttextDecoration(\"FINE\", positioning, 'middle');\n\t\t\t\thasOne = true;\n\t\t\t\tbreak;\n\t\t\tcase \"+\":\n\t\t\tcase \"open\":\n\t\t\tcase \"snap\":\n\t\t\tcase \"wedge\":\n\t\t\tcase \"thumb\":\n\t\t\tcase \"shortphrase\":\n\t\t\tcase \"mediumphrase\":\n\t\t\tcase \"longphrase\":\n\t\t\tcase \"trill\":\n\t\t\tcase \"roll\":\n\t\t\tcase \"irishroll\":\n\t\t\tcase \"marcato\":\n\t\t\tcase \"dmarcato\":\n\t\t\tcase \"turn\":\n\t\t\tcase \"uppermordent\":\n\t\t\tcase \"pralltriller\":\n\t\t\tcase \"mordent\":\n\t\t\tcase \"lowermordent\":\n\t\t\tcase \"downbow\":\n\t\t\tcase \"upbow\":\n\t\t\tcase \"fermata\":\n\t\t\tcase \"breath\":\n\t\t\tcase \"umarcato\":\n\t\t\tcase \"coda\":\n\t\t\tcase \"segno\":\n\t\t\t\tsymbolDecoration(symbolList[decoration[i]], positioning);\n\t\t\t\thasOne = true;\n\t\t\t\tbreak;\n\t\t\tcase \"invertedfermata\":\n\t\t\t\tsymbolDecoration(symbolList[decoration[i]], 'below');\n\t\t\t\thasOne = true;\n\t\t\t\tbreak;\n\t\t\tcase \"mark\":\n\t\t\t\tabselem.klass = \"mark\";\n\t\t\t\tbreak;\n\t\t\tcase \"accent\":\n\t\t\t\tif (accentAbove) {\n\t\t\t\t\tsymbolDecoration(\"scripts.sforzato\", positioning);\n\t\t\t\t\thasOne = true;\n\t\t\t\t}\n\t\t\t\tbreak;\t\n\t\t}\n\t}\n\treturn hasOne;\n};\n\nfunction leftDecoration(decoration, abselem, roomtaken) {\n\tfor (var i = 0; i < decoration.length; i++) {\n\t\tswitch (decoration[i]) {\n\t\t\tcase \"arpeggio\":\n\t\t\t\t// The arpeggio symbol is the height of a note (that is, two Y units). This stacks as many as we need to go from the\n\t\t\t\t// top note to the bottom note. The arpeggio should also be a little taller than the stacked notes, so there is an extra\n\t\t\t\t// one drawn and it is offset by half of a note height (that is, one Y unit).\n\t\t\t\tfor (var j = abselem.abcelem.minpitch - 1; j <= abselem.abcelem.maxpitch; j += 2) {\n\t\t\t\t\tabselem.addExtra(\n\t\t\t\t\t\tnew RelativeElement(\n\t\t\t\t\t\t\t\"scripts.arpeggio\",\n\t\t\t\t\t\t\t-glyphs.getSymbolWidth(\"scripts.arpeggio\") * 2 - roomtaken,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\tj + 2,\n\t\t\t\t\t\t\t{ klass: 'ornament', thickness: glyphs.symbolHeightInPitches(\"scripts.arpeggio\") }\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\nDecoration.prototype.dynamicDecoration = function (voice, decoration, abselem, positioning) {\n\tvar diminuendo;\n\tvar crescendo;\n\tvar glissando;\n\tfor (var i = 0; i < decoration.length; i++) {\n\t\tswitch (decoration[i]) {\n\t\t\tcase \"diminuendo(\":\n\t\t\t\tthis.startDiminuendoX = abselem;\n\t\t\t\tdiminuendo = undefined;\n\t\t\t\tbreak;\n\t\t\tcase \"diminuendo)\":\n\t\t\t\tdiminuendo = { start: this.startDiminuendoX, stop: abselem };\n\t\t\t\tthis.startDiminuendoX = undefined;\n\t\t\t\tbreak;\n\t\t\tcase \"crescendo(\":\n\t\t\t\tthis.startCrescendoX = abselem;\n\t\t\t\tcrescendo = undefined;\n\t\t\t\tbreak;\n\t\t\tcase \"crescendo)\":\n\t\t\t\tcrescendo = { start: this.startCrescendoX, stop: abselem };\n\t\t\t\tthis.startCrescendoX = undefined;\n\t\t\t\tbreak;\n\t\t\tcase '~(':\n\t\t\tcase \"glissando(\":\n\t\t\t\tthis.startGlissandoX = abselem;\n\t\t\t\tglissando = undefined;\n\t\t\t\tbreak;\n\t\t\tcase '~)':\n\t\t\tcase \"glissando)\":\n\t\t\t\tglissando = { start: this.startGlissandoX, stop: abselem };\n\t\t\t\tthis.startGlissandoX = undefined;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\tif (diminuendo) {\n\t\tvoice.addOther(new CrescendoElem(diminuendo.start, diminuendo.stop, \">\", positioning));\n\t}\n\tif (crescendo) {\n\t\tvoice.addOther(new CrescendoElem(crescendo.start, crescendo.stop, \"<\", positioning));\n\t}\n\tif (glissando) {\n\t\tvoice.addOther(new GlissandoElem(glissando.start, glissando.stop));\n\t}\n};\n\nDecoration.prototype.createDecoration = function (voice, decoration, pitch, width, abselem, roomtaken, dir, minPitch, positioning, hasVocals, accentAbove) {\n\tif (!positioning)\n\t\tpositioning = { ornamentPosition: 'above', volumePosition: hasVocals ? 'above' : 'below', dynamicPosition: hasVocals ? 'above' : 'below' };\n\t// These decorations don't affect the placement of other decorations\n\tvolumeDecoration(voice, decoration, abselem, positioning.volumePosition);\n\tthis.dynamicDecoration(voice, decoration, abselem, positioning.dynamicPosition);\n\tcompoundDecoration(decoration, pitch, width, abselem, dir);\n\n\t// treat staccato, accent, and tenuto first (may need to shift other markers)\n\tvar yPos = closeDecoration(voice, decoration, pitch, width, abselem, roomtaken, dir, minPitch, accentAbove);\n\t// yPos is an object containing 'above' and 'below'. That is the placement of the next symbol on either side.\n\n\tyPos.above = Math.max(yPos.above, this.minTop);\n\tyPos.below = Math.min(yPos.below, minPitch);\n\tvar hasOne = stackedDecoration(decoration, width, abselem, yPos, positioning.ornamentPosition, this.minTop, minPitch, accentAbove);\n\t//if (hasOne) {\n\t\t//\t\t\tabselem.top = Math.max(yPos.above + 3, abselem.top); // TODO-PER: Not sure why we need this fudge factor.\n\t//}\n\tleftDecoration(decoration, abselem, roomtaken);\n};\n\nmodule.exports = Decoration;\n","//    abc_absolute_element.js: Definition of the AbsoluteElement class.\n\nvar highlight = require(\"../../interactive/highlight\");\nvar unhighlight = require(\"../../interactive/unhighlight\");\n\n// Everything that is placed in the SVG is first created as an absolute element. This is one unit of graphic information.\n// That is, it embodies a concept: a clef, a time signature, a bar line,etc. or most complexly:\n// a note with its accidental, grace note, chord symbol, trill, stem, eighth flags, etc.\n// In the largest sense, these are placed on the page at a particular place that is determined during the layout phase.\n// This object doesn't contain any of the drawing information, though. That information is contained in an array of\n// RelativeElements as the \"children\" of this class.\n// During the layout phase, the width of all the children is calculated and the X coordinate of the absolute element is set.\n//\n// So, after the AbsoluteElement is placed, then its children can be placed relative to that. There are different types of\n// relative elements that are placed with different rules:\n// 1) Fixed - these elements don't move relative to the absolute element's coordinates. These are things like the notehead,\n// any ledger lines, accidentals, etc.\n// 2) Slotted - these elements can move vertically and don't get Y coordinates until after the absolute element is placed.\n// These are things like the chord symbol, many decorations, the lyrics, etc.\n//\n// Relative elements are also classified by how they are related. This could be:\n// 1) Increases the absolute element's width to the left. This doesn't change the center point of\n// the absolute element, so adding a sharp to the note won't move it to the right. However, if the elements\n// are close together then this enforces a minimum distance.\n// 2) Has no effect on the width. Annotations and the tempo act like this. No matter how long they are the width doesn't change.\n// 3) Increases the absolute element's width to the right. This doesn't change the center point,\n// but it will increase the minimum distance.\n// 4) Sets the width on both sides. This is the note heads. They are centered on both sides of the absolute element's X coordinate.\n\n// duration - actual musical duration - different from notehead duration in triplets. refer to abcelem to get the notehead duration\n// minspacing - spacing which must be taken on top of the width defined by the duration\n// type is a meta-type for the element. It is not necessary for drawing, but it is useful to make semantic sense of the element. For instance, it can be used in the element's class name.\nvar AbsoluteElement = function AbsoluteElement(abcelem, duration, minspacing, type, tuneNumber, options) {\n\t//\tconsole.log(\"Absolute:\",abcelem, duration, minspacing, type, tuneNumber, options);\n\tif (!options)\n\t\toptions = {};\n\tthis.tuneNumber = tuneNumber;\n\tthis.abcelem = abcelem;\n\tthis.duration = duration;\n\tthis.durationClass = options.durationClassOveride ? options.durationClassOveride : this.duration;\n\tthis.minspacing = minspacing || 0;\n\tthis.x = 0;\n\tthis.children = [];\n\tthis.heads = [];\n\tthis.extra = [];\n\tthis.extraw = 0;\n\tthis.w = 0;\n\tthis.right = [];\n\tthis.invisible = false;\n\tthis.bottom = undefined;\n\tthis.top = undefined;\n\tthis.type = type;\n\n\t// The following are the dimensions of the fixed part of the element.\n\t// That is, the chord text will be a different height depending on lot of factors, but the 8th flag will always be in the same place.\n\tthis.fixed = { w: 0, t: undefined, b: undefined }; // there is no x-coord here, because that is set later.\n\n\t// these are the heights of all of the vertical elements that can't be placed until the end of the line.\n\t// the vertical order of elements that are above is: tempo, part, volume/dynamic, ending/chord, lyric\n\t// the vertical order of elements that are below is: lyric, chord, volume/dynamic\n\tthis.specialY = {\n\t\ttempoHeightAbove: 0,\n\t\tpartHeightAbove: 0,\n\t\tvolumeHeightAbove: 0,\n\t\tdynamicHeightAbove: 0,\n\t\tendingHeightAbove: 0,\n\t\tchordHeightAbove: 0,\n\t\tlyricHeightAbove: 0,\n\n\t\tlyricHeightBelow: 0,\n\t\tchordHeightBelow: 0,\n\t\tvolumeHeightBelow: 0,\n\t\tdynamicHeightBelow: 0\n\t};\n};\n\nAbsoluteElement.prototype.getFixedCoords = function () {\n\treturn { x: this.x, w: this.fixed.w, t: this.fixed.t, b: this.fixed.b };\n};\n\nAbsoluteElement.prototype.addExtra = function (extra) {\n\t// used for accidentals, multi-measure rest text,\n\t// left-side decorations, gracenote heads,\n\t// left annotations, gracenote stems.\n\t// if (!(extra.c && extra.c.indexOf(\"accidentals\") >= 0) &&\n\t// \t!(extra.c && extra.c.indexOf(\"arpeggio\") >= 0) &&\n\t// \textra.type !== \"multimeasure-text\" &&\n\t// \t!(extra.c === \"noteheads.quarter\" && (extra.scalex === 0.6 || extra.scalex === 0.36)) &&\n\t// \t!(extra.type === \"stem\" && extra.linewidth === -0.6) &&\n\t// \textra.position !== \"left\"\n\t// )\n\t// \tconsole.log(\"extra\", extra);\n\n\tthis.fixed.w = Math.max(this.fixed.w, extra.dx + extra.w);\n\tif (this.fixed.t === undefined) this.fixed.t = extra.top; else this.fixed.t = Math.max(this.fixed.t, extra.top);\n\tif (this.fixed.b === undefined) this.fixed.b = extra.bottom; else this.fixed.b = Math.min(this.fixed.b, extra.bottom);\n\tif (extra.dx < this.extraw) this.extraw = extra.dx;\n\tthis.extra[this.extra.length] = extra;\n\tthis._addChild(extra);\n};\n\nAbsoluteElement.prototype.addHead = function (head) {\n\tif (head.dx < this.extraw) this.extraw = head.dx;\n\tthis.heads[this.heads.length] = head;\n\tthis.addRight(head);\n};\n\nAbsoluteElement.prototype.addRight = function (right) {\n\t// // used for clefs, note heads, bar lines, stems, key-signature accidentals, non-beamed flags, dots\n\t// if (!(right.c && right.c.indexOf(\"clefs\") >= 0) &&\n\t// \t!(right.c && right.c.indexOf(\"noteheads\") >= 0) &&\n\t// \t!(right.c && right.c.indexOf(\"flags\") >= 0) &&\n\t// \t!(right.c && right.c.indexOf(\"rests\") >= 0) &&\n\t// \t!(right.c && right.c.indexOf(\"dots.dot\") >= 0) &&\n\t// \tright.type !== \"stem\" &&\n\t// \tright.type !== \"bar\" &&\n\t// \tright.type !== \"none\" && // used when an invisible anchor is needed.\n\t// \t!(this.type.indexOf(\"clef\") >= -1 && right.c === \"8\") &&\n\t// \tthis.type.indexOf(\"key-signature\") === -1 &&\n\t// \tthis.type.indexOf(\"time-signature\") === -1 &&\n\t// \t!(this.abcelem && this.abcelem.rest && this.abcelem.rest.type === \"spacer\") &&\n\t// \t!(this.abcelem && this.abcelem.rest && this.abcelem.rest.type === \"invisible\") &&\n\t// \t!(right.type === \"text\" && right.position === \"relative\") &&\n\t// \t!(right.type === \"text\" && right.position === \"right\") &&\n\t// \t!(right.type === \"text\" && right.position === \"above\") &&\n\t// \t!(right.type === \"text\" && right.position === \"below\")\n\t// )\n\t// \tconsole.log(\"right\", right);\n\t// These are the elements that are the fixed part.\n\tthis.fixed.w = Math.max(this.fixed.w, right.dx + right.w);\n\tif (right.top !== undefined) {\n\t\tif (this.fixed.t === undefined) this.fixed.t = right.top; else this.fixed.t = Math.max(this.fixed.t, right.top);\n\t}\n\tif (right.bottom !== undefined) {\n\t\tif (this.fixed.b === undefined) this.fixed.b = right.bottom; else this.fixed.b = Math.min(this.fixed.b, right.bottom);\n\t}\n\t// if (isNaN(this.fixed.t) || isNaN(this.fixed.b))\n\t// \tdebugger;\n\tif (right.dx + right.w > this.w) this.w = right.dx + right.w;\n\tthis.right[this.right.length] = right;\n\tthis._addChild(right);\n};\n\nAbsoluteElement.prototype.addFixed = function (elem) {\n\t// used for elements that can't move relative to other elements after they have been placed.\n\t// used for ledger lines, bar numbers, debug msgs, clef, key sigs, time sigs\n\tthis._addChild(elem);\n};\n\nAbsoluteElement.prototype.addFixedX = function (elem) {\n\t// used for elements that can't move horizontally relative to other elements after they have been placed.\n\t// used for parts, tempo, decorations\n\tthis._addChild(elem);\n};\n\nAbsoluteElement.prototype.addCentered = function (elem) {\n\t// // used for chord labels, lyrics\n\t// if (!(elem.type === \"chord\" && elem.position === \"above\") &&\n\t// \t!(elem.type === \"chord\" && elem.position === \"below\") &&\n\t// \telem.type !== 'lyric'\n\t// )\n\t// \tconsole.log(\"centered\", elem);\n\tvar half = elem.w / 2;\n\tif (-half < this.extraw) this.extraw = -half;\n\tthis.extra[this.extra.length] = elem;\n\tif (elem.dx + half > this.w) this.w = elem.dx + half;\n\tthis.right[this.right.length] = elem;\n\tthis._addChild(elem);\n};\n\nAbsoluteElement.prototype.setLimit = function (member, child) {\n\tif (!child[member]) return;\n\tif (!this.specialY[member])\n\t\tthis.specialY[member] = child[member];\n\telse\n\t\tthis.specialY[member] = Math.max(this.specialY[member], child[member]);\n};\n\nAbsoluteElement.prototype._addChild = function (child) {\n\t//\tconsole.log(\"Relative:\",child);\n\tchild.parent = this;\n\tthis.children[this.children.length] = child;\n\tthis.pushTop(child.top);\n\tthis.pushBottom(child.bottom);\n\tthis.setLimit('tempoHeightAbove', child);\n\tthis.setLimit('partHeightAbove', child);\n\tthis.setLimit('volumeHeightAbove', child);\n\tthis.setLimit('dynamicHeightAbove', child);\n\tthis.setLimit('endingHeightAbove', child);\n\tthis.setLimit('chordHeightAbove', child);\n\tthis.setLimit('lyricHeightAbove', child);\n\tthis.setLimit('lyricHeightBelow', child);\n\tthis.setLimit('chordHeightBelow', child);\n\tthis.setLimit('volumeHeightBelow', child);\n\tthis.setLimit('dynamicHeightBelow', child);\n};\n\nAbsoluteElement.prototype.pushTop = function (top) {\n\tif (top !== undefined) {\n\t\tif (this.top === undefined)\n\t\t\tthis.top = top;\n\t\telse\n\t\t\tthis.top = Math.max(top, this.top);\n\t}\n};\n\nAbsoluteElement.prototype.pushBottom = function (bottom) {\n\tif (bottom !== undefined) {\n\t\tif (this.bottom === undefined)\n\t\t\tthis.bottom = bottom;\n\t\telse\n\t\t\tthis.bottom = Math.min(bottom, this.bottom);\n\t}\n};\n\nAbsoluteElement.prototype.setX = function (x) {\n\tthis.x = x;\n\tfor (var i = 0; i < this.children.length; i++)\n\t\tthis.children[i].setX(x);\n};\n\nAbsoluteElement.prototype.center = function (before, after) {\n\t// Used to center whole rests\n\tvar midpoint = (after.x - before.x) / 2 + before.x;\n\tthis.x = midpoint - this.w / 2;\n\tfor (var k = 0; k < this.children.length; k++)\n\t\tthis.children[k].setX(this.x);\n};\n\nAbsoluteElement.prototype.setHint = function () {\n\tthis.hint = true;\n};\n\nAbsoluteElement.prototype.highlight = function (klass, color) {\n\thighlight.bind(this)(klass, color);\n};\n\nAbsoluteElement.prototype.unhighlight = function (klass, color) {\n\tunhighlight.bind(this)(klass, color);\n};\n\nmodule.exports = AbsoluteElement;\n","//    abc_beam_element.js: Definition of the BeamElem class.\n\n// Most elements on the page are related to a particular absolute element -- notes, rests, bars, etc. Beams, however, span multiple elements.\n// This means that beams can't be laid out until the absolute elements are placed. There is the further complication that the stems for beamed\n// notes can't be laid out until the beams are because we don't know how long they will be until we know the slope of the beam and the horizontal\n// spacing of the absolute elements.\n//\n// So, when a beam is detected, a BeamElem is created, then all notes belonging to that beam are added to it. These notes are not given stems at that time.\n// Then, after the horizontal layout is complete, all of the BeamElem are iterated to set the beam position, then all of the notes that are beamed are given\n// stems. After that, we are ready for the drawing step.\n\n// There are three phases: the setup phase, when new elements are being discovered, the layout phase, when everything is calculated, and the drawing phase,\n// when the object is not changed, but is used to put the elements on the page.\n\n//\n// Setup phase\n//\nvar BeamElem = function BeamElem(stemHeight, type, flat, firstElement) {\n\t// type is \"grace\", \"up\", \"down\", or undefined. flat is used to force flat beams, as it commonly found in the grace notes of bagpipe music.\n\tthis.type = \"BeamElem\";\n\tthis.isflat = !!flat;\n\tthis.isgrace = !!(type && type === \"grace\");\n\tthis.forceup = !!(this.isgrace || (type && type === \"up\"));\n\tthis.forcedown = !!(type && type === \"down\");\n\tthis.elems = []; // all the AbsoluteElements that this beam touches. It may include embedded rests.\n\tthis.total = 0;\n\tthis.average = 6; // use middle line as start for average.\n\tthis.allrests = true;\n\tthis.stemHeight = stemHeight;\n\tthis.beams = []; // During the layout phase, this will become a list of the beams that need to be drawn.\n\tif (firstElement && firstElement.duration) {\n\t\tthis.duration = firstElement.duration;\n\t\tif (firstElement.startTriplet) {\n\t\t\tthis.duration *= firstElement.tripletMultiplier;\n\t\t}\n\t\tthis.duration = Math.round(this.duration * 1000) / 1000;\n\t} else\n\t\tthis.duration = 0;\n};\n\nBeamElem.prototype.setHint = function () {\n\tthis.hint = true;\n};\n\nBeamElem.prototype.runningDirection = function (abcelem) {\n\tvar pitch = abcelem.averagepitch;\n\tif (pitch === undefined) return; // don't include elements like spacers in beams\n\tthis.total = Math.round(this.total + pitch);\n\tif (!this.count)\n\t\tthis.count = 0;\n\tthis.count++\n};\n\nBeamElem.prototype.add = function (abselem) {\n\tvar pitch = abselem.abcelem.averagepitch;\n\tif (pitch === undefined) return; // don't include elements like spacers in beams\n\tif (!abselem.abcelem.rest)\n\t\tthis.allrests = false;\n\tabselem.beam = this;\n\tthis.elems.push(abselem);\n\tthis.total = Math.round(this.total + pitch);\n\tif (this.min === undefined || abselem.abcelem.minpitch < this.min) {\n\t\tthis.min = abselem.abcelem.minpitch;\n\t}\n\tif (this.max === undefined || abselem.abcelem.maxpitch > this.max) {\n\t\tthis.max = abselem.abcelem.maxpitch;\n\t}\n};\n\nBeamElem.prototype.addBeam = function (beam) {\n\tthis.beams.push(beam);\n};\n\nBeamElem.prototype.setStemDirection = function () {\n\t// Have to figure this out before the notes are placed because placing the notes also places the decorations.\n\tthis.average = calcAverage(this.total, this.count);\n\tif (this.forceup) {\n\t\tthis.stemsUp = true;\n\t} else if (this.forcedown) {\n\t\tthis.stemsUp = false;\n\t} else {\n\t\tvar middleLine = 6;\t// hardcoded 6 is B\n\t\tthis.stemsUp = this.average < middleLine; // true is up, false is down;\n\t}\n\tdelete this.count;\n\tthis.total = 0;\n};\n\nBeamElem.prototype.calcDir = function () {\n\tthis.average = calcAverage(this.total, this.elems.length);\n\tif (this.forceup) {\n\t\tthis.stemsUp = true;\n\t} else if (this.forcedown) {\n\t\tthis.stemsUp = false;\n\t} else {\n\t\tvar middleLine = 6;\t// hardcoded 6 is B\n\t\tthis.stemsUp = this.average < middleLine; // true is up, false is down;\n\t}\n\tvar dir = this.stemsUp ? 'up' : 'down';\n\tfor (var i = 0; i < this.elems.length; i++) {\n\t\tfor (var j = 0; j < this.elems[i].heads.length; j++) {\n\t\t\tthis.elems[i].heads[j].stemDir = dir;\n\t\t}\n\t}\n};\n\nfunction calcAverage(total, numElements) {\n\tif (!numElements)\n\t\treturn 0;\n\treturn total / numElements;\n}\n\nmodule.exports = BeamElem;\n","const addTextIf = require(\"../add-text-if\");\nconst richText = require(\"./rich-text\");\n\nfunction BottomText(metaText, width, isPrint, paddingLeft, spacing, shouldAddClasses, getTextSize) {\n\tthis.rows = [];\n\tif (metaText.unalignedWords && metaText.unalignedWords.length > 0)\n\t\tthis.unalignedWords(metaText.unalignedWords, paddingLeft, spacing, shouldAddClasses, getTextSize);\n\tthis.extraText(metaText, paddingLeft, spacing, shouldAddClasses, getTextSize);\n\tif (metaText.footer && isPrint)\n\t\tthis.footer(metaText.footer, width, paddingLeft, getTextSize);\n}\n\nBottomText.prototype.unalignedWords = function (unalignedWords, marginLeft, spacing, shouldAddClasses, getTextSize) {\n\tvar klass = shouldAddClasses ? 'abcjs-unaligned-words' : ''\n\tvar defFont = 'wordsfont';\n\tvar space = getTextSize.calc(\"i\", defFont, klass);\n\t\n\tthis.rows.push({ move: spacing.words });\n\t\n\taddMultiLine(this.rows, '', unalignedWords, marginLeft, defFont, \"unalignedWords\", \"unalignedWords\", klass, \"unalignedWords\", spacing, shouldAddClasses, getTextSize)\n\tthis.rows.push({ move: space.height });\n}\n\nfunction addSingleLine(rows, preface, text, marginLeft, klass, shouldAddClasses, getTextSize) {\n\tif (text) {\n\t\tif (preface) {\n\t\t\tif (typeof text === 'string')\n\t\t\t\ttext = preface + text\n\t\t\telse\n\t\t\t\ttext = [{text: preface}].concat(text)\n\t\t}\n\t\tklass = shouldAddClasses ? 'abcjs-extra-text '+klass : ''\n\t\trichText(rows, text, 'historyfont', klass, \"description\", marginLeft, {absElemType: \"extraText\", anchor: 'start'}, getTextSize)\n\t}\n\n}\n\nfunction addMultiLine(rows, preface, content, marginLeft, defFont, absElemType, groupName, klass, name, spacing, shouldAddClasses, getTextSize) {\n\tif (content) {\n\t\tklass = shouldAddClasses ? 'abcjs-extra-text '+klass : ''\n\t\tvar size = getTextSize.calc(\"A\", defFont, klass);\n\t\tif (typeof content === 'string') {\n\t\t\tif (preface)\n\t\t\t\tcontent = preface + \"\\n\" + content\n\t\t\taddTextIf(rows, { marginLeft: marginLeft, text: content, font: defFont, absElemType: \"extraText\", name: name, 'dominant-baseline': 'middle', klass: klass }, getTextSize);\n\t\t\t//rows.push({move: size.height*3/4})\n\t\t} else {\n\t\t\trows.push({ startGroup: groupName, klass: klass, name: name });\n\t\t\trows.push({move: spacing.info})\n\t\t\tif (preface) {\n\t\t\t\taddTextIf(rows, { marginLeft: marginLeft, text: preface, font: defFont, absElemType: \"extraText\", name: name, 'dominant-baseline': 'middle' }, getTextSize);\n\t\t\t\trows.push({move: size.height*3/4})\n\t\t\t}\n\n\t\t\tfor (var j = 0; j < content.length; j++) {\n\t\t\t\trichText(rows, content[j], defFont, '', name, marginLeft, {anchor: 'start'}, getTextSize)\n\t\t\t\t// TODO-PER: Hack! the string and rich lines should have used up the same amount of space without this.\n\t\t\t\tif (j < content.length-1 && typeof content[j] === 'string' && typeof content[j+1] !== 'string')\n\t\t\t\t\trows.push({move: size.height*3/4})\n\t\t\t}\n\t\t\trows.push({ endGroup: groupName, absElemType: absElemType, startChar: -1, endChar: -1, name: name });\n\t\t\trows.push({move: size.height})\n\t\t}\n\t}\n}\nBottomText.prototype.extraText = function (metaText, marginLeft, spacing, shouldAddClasses, getTextSize) {\n\taddSingleLine(this.rows, \"Book: \", metaText.book, marginLeft, 'abcjs-book', shouldAddClasses, getTextSize)\n\taddSingleLine(this.rows, \"Source: \", metaText.source, marginLeft, 'abcjs-source', shouldAddClasses, getTextSize)\n\taddSingleLine(this.rows, \"Discography: \", metaText.discography, marginLeft, 'abcjs-discography', shouldAddClasses, getTextSize)\n\n\taddMultiLine(this.rows, 'Notes:', metaText.notes, marginLeft, 'historyfont', \"extraText\", \"notes\", 'abcjs-notes', \"description\", spacing, shouldAddClasses, getTextSize)\n\n\taddSingleLine(this.rows, \"Transcription: \", metaText.transcription, marginLeft, 'abcjs-transcription', shouldAddClasses, getTextSize)\n\n\taddMultiLine(this.rows, \"History:\", metaText.history, marginLeft, 'historyfont', \"extraText\", \"history\", 'abcjs-history', \"description\", spacing, shouldAddClasses, getTextSize)\n\n\taddSingleLine(this.rows, \"Copyright: \", metaText['abc-copyright'], marginLeft, 'abcjs-copyright', shouldAddClasses, getTextSize)\n\taddSingleLine(this.rows, \"Creator: \", metaText['abc-creator'], marginLeft, 'abcjs-creator', shouldAddClasses, getTextSize)\n\taddSingleLine(this.rows, \"Edited By: \", metaText['abc-edited-by'], marginLeft, 'abcjs-edited-by', shouldAddClasses, getTextSize)\n\n}\n\nBottomText.prototype.footer = function (footer, width, paddingLeft, getTextSize) {\n\tvar klass = 'header meta-bottom';\n\tvar font = \"footerfont\";\n\tthis.rows.push({ startGroup: \"footer\", klass: klass });\n\t// Note: whether there is a footer or not doesn't change any other positioning, so this doesn't change the Y-coordinate.\n\taddTextIf(this.rows, { marginLeft: paddingLeft, text: footer.left, font: font, klass: klass, name: \"footer\" }, getTextSize);\n\taddTextIf(this.rows, { marginLeft: paddingLeft + width / 2, text: footer.center, font: font, klass: klass, anchor: 'middle', name: \"footer\" }, getTextSize);\n\taddTextIf(this.rows, { marginLeft: paddingLeft + width, text: footer.right, font: font, klass: klass, anchor: 'end', name: \"footer\" }, getTextSize);\n}\n\nmodule.exports = BottomText;\n","//    abc_brace_element.js: Definition of the BraceElement class.\n\nvar BraceElem = function BraceElem(voice, type) {\n\tthis.startVoice = voice;\n\tthis.type = type;\n};\n\nBraceElem.prototype.setBottomStaff = function (voice) {\n\tthis.endVoice = voice;\n\t// If only the start brace has a name then the name belongs to the brace instead of the staff.\n\tif (this.startVoice.header && !this.endVoice.header) {\n\t\tthis.header = this.startVoice.header;\n\t\tdelete this.startVoice.header;\n\t}\n};\n\nBraceElem.prototype.continuing = function (voice) {\n\t// If the final staff isn't present, then use the last one we saw.\n\tthis.lastContinuedVoice = voice;\n};\n\nBraceElem.prototype.getWidth = function () {\n\treturn 10; // TODO-PER: right now the drawing function doesn't vary the width at all. If it does in the future then this will change.\n};\n\nBraceElem.prototype.isStartVoice = function (voice) {\n\tif (this.startVoice && this.startVoice.staff && this.startVoice.staff.voices.length > 0 && this.startVoice.staff.voices[0] === voice)\n\t\treturn true;\n\treturn false;\n};\n\nmodule.exports = BraceElem;\n","//    abc_crescendo_element.js: Definition of the CrescendoElem class.\n\nvar CrescendoElem = function CrescendoElem(anchor1, anchor2, dir, positioning) {\n\tthis.type = \"CrescendoElem\";\n\tthis.anchor1 = anchor1; // must have a .x and a .parent property or be null (means starts at the \"beginning\" of the line - after keysig)\n\tthis.anchor2 = anchor2; // must have a .x property or be null (means ends at the end of the line)\n\tthis.dir = dir; // either \"<\" or \">\"\n\tif (positioning === 'above')\n\t\tthis.dynamicHeightAbove = 6;\n\telse\n\t\tthis.dynamicHeightBelow = 6;\n\tthis.pitch = undefined; // This will be set later\n};\n\nmodule.exports = CrescendoElem;\n","//    abc_dynamic_decoration.js: Definition of the DynamicDecoration class.\n\nvar DynamicDecoration = function DynamicDecoration(anchor, dec, position) {\n\tthis.type = \"DynamicDecoration\";\n\tthis.anchor = anchor;\n\tthis.dec = dec;\n\tif (position === 'below')\n\t\tthis.volumeHeightBelow = 6;\n\telse\n\t\tthis.volumeHeightAbove = 6;\n\tthis.pitch = undefined; // This will be set later\n};\n\nmodule.exports = DynamicDecoration;\n","//    abc_ending_element.js: Definition of the EndingElement class.\n\nvar EndingElem = function EndingElem(text, anchor1, anchor2) {\n\tthis.type = \"EndingElem\";\n\tthis.text = text; // text to be displayed top left\n\tthis.anchor1 = anchor1; // must have a .x property or be null (means starts at the \"beginning\" of the line - after keysig)\n\tthis.anchor2 = anchor2; // must have a .x property or be null (means ends at the end of the line)\n\tthis.endingHeightAbove = 5;\n\tthis.pitch = undefined; // This will be set later\n};\n\nmodule.exports = EndingElem;\n","function FreeText(info, vskip, getFontAndAttr, paddingLeft, width, getTextSize) {\n\tvar text = info.text;\n\tthis.rows = [];\n\tvar size;\n\tif (vskip)\n\t\tthis.rows.push({ move: vskip });\n\tvar hash = getFontAndAttr.calc('textfont', 'defined-text');\n\tif (text === \"\") {\t// we do want to print out blank lines if they have been specified.\n\t\tthis.rows.push({ move: hash.attr['font-size'] * 2 }); // move the distance of the line, plus the distance of the margin, which is also one line.\n\t} else if (typeof text === 'string') {\n\t\tthis.rows.push({ move: hash.attr['font-size'] / 2 }); // TODO-PER: move down some - the y location should be the top of the text, but we output text specifying the center line.\n\t\tthis.rows.push({ left: paddingLeft, text: text, font: 'textfont', klass: 'defined-text', anchor: \"start\", startChar: info.startChar, endChar: info.endChar, absElemType: \"freeText\", name: \"free-text\" });\n\t\tsize = getTextSize.calc(text, 'textfont', 'defined-text');\n\t\tthis.rows.push({ move: size.height });\n\t} else if (text) {\n\t\tvar maxHeight = 0;\n\t\tvar leftSide = paddingLeft;\n\t\tvar currentFont = 'textfont';\n\t\tfor (var i = 0; i < text.length; i++) {\n\t\t\tif (text[i].font) {\n\t\t\t\tcurrentFont = text[i].font;\n\t\t\t} else\n\t\t\t\tcurrentFont = 'textfont';\n\t\t\tthis.rows.push({ left: leftSide, text: text[i].text, font: currentFont, klass: 'defined-text', anchor: 'start', startChar: info.startChar, endChar: info.endChar, absElemType: \"freeText\", name: \"free-text\" });\n\t\t\tsize = getTextSize.calc(text[i].text, getFontAndAttr.calc(currentFont, 'defined-text').font, 'defined-text');\n\t\t\tleftSide += size.width + size.height / 2; // add a little padding to the right side. The height of the font is probably a close enough approximation.\n\t\t\tmaxHeight = Math.max(maxHeight, size.height)\n\t\t}\n\t\tthis.rows.push({ move: maxHeight });\n\t} else {\n\t\t// The structure is wrong here: it requires an array to do centering, but it shouldn't have.\n\t\tif (info.length === 1) {\n\t\t\tvar x = width / 2;\n\t\t\tthis.rows.push({ left: x, text: info[0].text, font: 'textfont', klass: 'defined-text', anchor: 'middle', startChar: info.startChar, endChar: info.endChar, absElemType: \"freeText\", name: \"free-text\" });\n\t\t\tsize = getTextSize.calc(info[0].text, 'textfont', 'defined-text');\n\t\t\tthis.rows.push({ move: size.height });\n\t\t}\n\t}\n}\n\nmodule.exports = FreeText;\n","var GlissandoElem = function GlissandoElem(anchor1, anchor2) {\n\tthis.type = \"GlissandoElem\";\n\tthis.anchor1 = anchor1; // must have a .x and a .parent property or be null (means starts at the \"beginning\" of the line - after keysig)\n\tthis.anchor2 = anchor2; // must have a .x property or be null (means ends at the end of the line)\n};\n\nmodule.exports = GlissandoElem;\n","//    abc_relative_element.js: Definition of the RelativeElement class.\n\nvar RelativeElement = function RelativeElement(c, dx, w, pitch, opt) {\n\topt = opt || {};\n\tthis.x = 0;\n\tthis.c = c;      // character or path or string\n\tthis.dx = dx;    // relative x position\n\tthis.w = w;      // minimum width taken up by this element (can include gratuitous space)\n\tthis.pitch = pitch; // relative y position by pitch\n\tthis.scalex = opt.scalex || 1; // should the character/path be scaled?\n\tthis.scaley = opt.scaley || 1; // should the character/path be scaled?\n\tthis.type = opt.type || \"symbol\"; // cheap types.\n\tthis.pitch2 = opt.pitch2;\n\tthis.linewidth = opt.linewidth;\n\tthis.klass = opt.klass;\n\tthis.anchor = opt.anchor ? opt.anchor : 'middle'\n\tthis.top = pitch;\n\tif (this.pitch2 !== undefined && this.pitch2 > this.top) this.top = this.pitch2;\n\tthis.bottom = pitch;\n\tif (this.pitch2 !== undefined && this.pitch2 < this.bottom) this.bottom = this.pitch2;\n\tif (opt.thickness) {\n\t\tthis.top += opt.thickness / 2;\n\t\tthis.bottom -= opt.thickness / 2;\n\t}\n\tif (opt.stemHeight) {\n\t\tif (opt.stemHeight > 0)\n\t\t\tthis.top += opt.stemHeight;\n\t\telse\n\t\t\tthis.bottom += opt.stemHeight;\n\t}\n\tif (opt.dim)\n\t\tthis.dim = opt.dim;\n\tif (opt.position)\n\t\tthis.position = opt.position;\n\tthis.height = opt.height ? opt.height : 4; // The +1 is to give a little bit of padding.\n\tif (opt.top)\n\t\tthis.top = opt.top;\n\tif (opt.bottom)\n\t\tthis.bottom = opt.bottom;\n\tif (opt.name)\n\t\tthis.name = opt.name;\n\telse if (this.c)\n\t\tthis.name = this.c;\n\telse\n\t\tthis.name = this.type;\n\tif (opt.realWidth)\n\t\tthis.realWidth = opt.realWidth;\n\telse\n\t\tthis.realWidth = this.w;\n\tthis.centerVertically = false;\n\tswitch (this.type) {\n\t\tcase \"debug\":\n\t\t\tthis.chordHeightAbove = this.height;\n\t\t\tbreak;\n\t\tcase \"lyric\":\n\t\t\tif (opt.position && opt.position === 'below')\n\t\t\t\tthis.lyricHeightBelow = this.height;\n\t\t\telse\n\t\t\t\tthis.lyricHeightAbove = this.height;\n\t\t\tbreak;\n\t\tcase \"chord\":\n\t\t\tif (opt.position && opt.position === 'below')\n\t\t\t\tthis.chordHeightBelow = this.height;\n\t\t\telse\n\t\t\t\tthis.chordHeightAbove = this.height;\n\t\t\tbreak;\n\t\tcase \"text\":\n\t\t\tif (this.pitch === undefined) {\n\t\t\t\tif (opt.position && opt.position === 'below')\n\t\t\t\t\tthis.chordHeightBelow = this.height;\n\t\t\t\telse\n\t\t\t\t\tthis.chordHeightAbove = this.height;\n\t\t\t} else\n\t\t\t\tthis.centerVertically = true;\n\t\t\tbreak;\n\t\tcase \"part\": this.partHeightAbove = this.height; break;\n\t}\n};\n\nRelativeElement.prototype.getChordDim = function () {\n\tif (this.type === \"debug\")\n\t\treturn null;\n\tif (!this.chordHeightAbove && !this.chordHeightBelow)\n\t\treturn null;\n\t// Chords are centered, annotations are left justified.\n\t// NOTE: the font reports extra space to the left and right anyway, so there is a built in margin.\n\t// We add a little margin so that items can't touch - we use half the font size as the margin, so that is 1/4 on each side.\n\t// if there is only one character that we're printing, use half of that margin.\n\t// var margin = this.dim.font.size/4;\n\t// if (this.c.length === 1)\n\t// \tmargin = margin / 2;\n\tvar margin = 0;\n\n\tvar offset = this.type === \"chord\" ? this.realWidth / 2 : 0;\n\tvar left = this.x - offset - margin;\n\tvar right = left + this.realWidth + margin;\n\treturn { left: left, right: right };\n};\n\nRelativeElement.prototype.invertLane = function (total) {\n\tif (this.lane === undefined)\n\t\tthis.lane = 0;\n\tthis.lane = total - this.lane - 1;\n};\n\nRelativeElement.prototype.putChordInLane = function (i) {\n\tthis.lane = i;\n\t// Add some extra space to account for the character's descenders.\n\tif (this.chordHeightAbove)\n\t\tthis.chordHeightAbove = (this.height * 1.25) * this.lane;\n\telse\n\t\tthis.chordHeightBelow = (this.height * 1.25) * this.lane;\n};\n\nRelativeElement.prototype.getLane = function () {\n\tif (this.lane === undefined)\n\t\treturn 0;\n\treturn this.lane;\n};\n\nRelativeElement.prototype.setX = function (x) {\n\tthis.x = x + this.dx;\n};\n\nmodule.exports = RelativeElement;\n","const addTextIf = require(\"../add-text-if\");\n\nfunction richText(rows, str, defFont, klass, name, paddingLeft, attr, getTextSize) {\n\tvar space = getTextSize.calc(\"i\", defFont, klass);\n\tif (str === '') {\n\t\trows.push({ move: space.height });\n\t} else {\n\t\tif (typeof str === 'string') {\n\t\t\taddTextIf(rows, { marginLeft: paddingLeft, text: str, font: defFont, klass: klass, marginTop: attr.marginTop, anchor: attr.anchor, absElemType: attr.absElemType, info: attr.info, name: name }, getTextSize);\n\t\t\treturn\n\t\t}\n\t\tif (attr.marginTop)\n\t\t\trows.push({move: attr.marginTop})\n\n\t\tvar largestY = 0;\n\t\tvar gap = 0;\n\t\tvar row = {\n\t\t\tleft: paddingLeft,\n\t\t\tanchor: attr.anchor,\n\t\t\tphrases: []\n\t\t}\n\t\tif (klass)\n\t\t\trow.klass = klass\n\t\trows.push(row)\n\t\tfor (var k = 0; k < str.length; k++) {\n\t\t\tvar thisWord = str[k];\n\t\t\tvar font = (thisWord.font) ? thisWord.font : getTextSize.attr(defFont, klass).font;\n\t\t\tvar phrase = {\n\t\t\t\tcontent: thisWord.text,\n\t\t\t}\n\t\t\tif (font)\n\t\t\t\tphrase.attrs = {\n\t\t\t\t\t\"font-family\": getTextSize.getFamily(font.face),\n\t\t\t\t\t\"font-size\": font.size,\n\t\t\t\t\t\"font-weight\": font.weight,\n\t\t\t\t\t\"font-style\": font.style,\n\t\t\t\t\t\"font-decoration\": font.decoration,\n\t\t\t}\n\t\t\t//if (thisWord.text) {\n\t\t\t\trow.phrases.push(phrase);\n\t\t\t\tvar size = getTextSize.calc(thisWord.text, font, klass);\n\t\t\t\tlargestY = Math.max(largestY, size.height);\n\t\t\t\tif (thisWord.text[thisWord.text.length - 1] === ' ') {\n\t\t\t\t\tgap = space.width\n\t\t\t\t}\n\t\t}\n\t\trows.push({ move: largestY });\n\t}\n}\n\nmodule.exports = richText;\n","function Separator(spaceAbove, lineLength, spaceBelow) {\n\tthis.rows = [];\n\tif (spaceAbove)\n\t\tthis.rows.push({ move: spaceAbove });\n\tthis.rows.push({ separator: lineLength, absElemType: \"separator\" });\n\tif (spaceBelow)\n\t\tthis.rows.push({ move: spaceBelow });\n}\n\nmodule.exports = Separator;\n","//    abc_staff_group_element.js: Definition of the StaffGroupElement class.\n\n// StaffGroupElement contains all the elements that go together to make one line of music.\n// That might be multiple staves that are tied together, and it might be multiple voices on one staff.\n//\n// Methods:\n// constructor: some basic initialization\n// addVoice(): Called once for each voice. May add a new staff if needed.\n// finished(): Called only internally by layout()\n// layout(): This does all the layout. It sets the following: spacingunits, startx, minspace, w, and the x-coordinate of each element in each voice.\n// draw(): Calls the underlying methods on the voice objects to do the drawing. Sets y and height.\n//\n// Members:\n// staffs: an array of all the staves in this group. Each staff contains the following elements:\n//    { top, bottom, highest, lowest, y }\n// voices: array of VoiceElement objects. This is mostly passed in, but the VoiceElement objects are modified here.\n//\n// spacingunits: number of relative x-units in the line. Used by the calling function to pass back in as the \"spacing\" input parameter.\n// TODO-PER: This should actually be passed back as a return value.\n// minspace: smallest space between two notes. Used by the calling function to pass back in as the \"spacing\" input parameter.\n// TODO-PER: This should actually be passed back as a return value.\n// startx: The left edge, taking the margin and the optional voice name. Used by the draw() method.\n// w: The width of the line. Used by calling function to pass back in as the \"spacing\" input parameter, and the draw() method.\n// TODO-PER: This should actually be passed back as a return value.  (TODO-PER: in pixels or spacing units?)\n// y: The top of the staff group, in pixels. This is set in the draw method.\n// TODO-PER: Where is that used? It looks like it might not be needed.\n// height: Set in the draw() method to the height actually used. Used by the calling function to know where to start the next staff group.\n// TODO-PER: This should actually be set in the layout method and passed back as a return value.\nvar calcHeight = require('../calc-height');\n\nvar StaffGroupElement = function (getTextSize) {\n\tthis.getTextSize = getTextSize;\n\tthis.voices = [];\n\tthis.staffs = [];\n\tthis.brace = undefined; //tony\n\tthis.bracket = undefined;\n};\n\nStaffGroupElement.prototype.setLimit = function (member, voice) {\n\tif (!voice.specialY[member]) return;\n\tif (!voice.staff.specialY[member])\n\t\tvoice.staff.specialY[member] = voice.specialY[member];\n\telse\n\t\tvoice.staff.specialY[member] = Math.max(voice.staff.specialY[member], voice.specialY[member]);\n};\n\nStaffGroupElement.prototype.addVoice = function (voice, staffnumber, stafflines) {\n\tvar voiceNum = this.voices.length;\n\tthis.voices[voiceNum] = voice;\n\tif (this.staffs[staffnumber])\n\t\tthis.staffs[staffnumber].voices.push(voiceNum);\n\telse {\n\t\t// TODO-PER: how does the min/max change when stafflines is not 5?\n\t\tthis.staffs[this.staffs.length] = {\n\t\t\ttop: 10,\n\t\t\tbottom: 2,\n\t\t\tlines: stafflines,\n\t\t\tvoices: [voiceNum],\n\t\t\tspecialY: {\n\t\t\t\ttempoHeightAbove: 0,\n\t\t\t\tpartHeightAbove: 0,\n\t\t\t\tvolumeHeightAbove: 0,\n\t\t\t\tdynamicHeightAbove: 0,\n\t\t\t\tendingHeightAbove: 0,\n\t\t\t\tchordHeightAbove: 0,\n\t\t\t\tlyricHeightAbove: 0,\n\n\t\t\t\tlyricHeightBelow: 0,\n\t\t\t\tchordHeightBelow: 0,\n\t\t\t\tvolumeHeightBelow: 0,\n\t\t\t\tdynamicHeightBelow: 0\n\t\t\t}\n\t\t};\n\t}\n\tvoice.staff = this.staffs[staffnumber];\n};\n\nStaffGroupElement.prototype.setHeight = function () {\n\tthis.height = calcHeight(this);\n};\n\nStaffGroupElement.prototype.setWidth = function (width) {\n\tthis.w = width;\n\tfor (var i = 0; i < this.voices.length; i++) {\n\t\tthis.voices[i].setWidth(width);\n\t}\n};\n\nStaffGroupElement.prototype.setStaffLimits = function (voice) {\n\tvoice.staff.top = Math.max(voice.staff.top, voice.top);\n\tvoice.staff.bottom = Math.min(voice.staff.bottom, voice.bottom);\n\tthis.setLimit('tempoHeightAbove', voice);\n\tthis.setLimit('partHeightAbove', voice);\n\tthis.setLimit('volumeHeightAbove', voice);\n\tthis.setLimit('dynamicHeightAbove', voice);\n\tthis.setLimit('endingHeightAbove', voice);\n\tthis.setLimit('chordHeightAbove', voice);\n\tthis.setLimit('lyricHeightAbove', voice);\n\tthis.setLimit('lyricHeightBelow', voice);\n\tthis.setLimit('chordHeightBelow', voice);\n\tthis.setLimit('volumeHeightBelow', voice);\n\tthis.setLimit('dynamicHeightBelow', voice);\n};\n\nmodule.exports = StaffGroupElement;\n","function Subtitle(spaceAbove, formatting, info, center, paddingLeft, getTextSize) {\n\tthis.rows = [];\n\tif (spaceAbove)\n\t\tthis.rows.push({ move: spaceAbove });\n\tvar tAnchor = formatting.titleleft ? 'start' : 'middle';\n\tvar tLeft = formatting.titleleft ? paddingLeft : center;\n\tthis.rows.push({ left: tLeft, text: info.text, font: 'subtitlefont', klass: 'text subtitle', anchor: tAnchor, startChar: info.startChar, endChar: info.endChar, absElemType: \"subtitle\", name: \"subtitle\" });\n\tvar size = getTextSize.calc(info.text, 'subtitlefont', 'text subtitle');\n\tthis.rows.push({ move: size.height });\n}\n\nmodule.exports = Subtitle;\n","//    abc_tempo_element.js: Definition of the TempoElement class.\n\nvar AbsoluteElement = require('./absolute-element');\nvar RelativeElement = require('./relative-element');\n\nvar TempoElement = function TempoElement(tempo, tuneNumber, createNoteHead) {\n\tthis.type = \"TempoElement\";\n\tthis.tempo = tempo;\n\tthis.tempo.type = \"tempo\"; /// TODO-PER: this should be set earlier, in the parser, probably.\n\tthis.tuneNumber = tuneNumber;\n\t// TODO: can these two properties be merged?\n\tthis.totalHeightInPitches = 6;\n\tthis.tempoHeightAbove = this.totalHeightInPitches;\n\tthis.pitch = undefined; // This will be set later\n\tif (this.tempo.duration && !this.tempo.suppressBpm) {\n\t\tthis.note = this.createNote(createNoteHead, tempo, tuneNumber);\n\t}\n};\n\nTempoElement.prototype.setX = function (x) {\n\tthis.x = x;\n};\n\nTempoElement.prototype.createNote = function (createNoteHead, tempo, tuneNumber) {\n\tvar temposcale = 0.75;\n\tvar duration = tempo.duration[0]; // TODO when multiple durations\n\tvar absElem = new AbsoluteElement(tempo, duration, 1, 'tempo', tuneNumber);\n\t// There aren't an infinite number of note values, but we are passed a float, so just in case something is off upstream,\n\t// merge all of the in between points.\n\tvar dot;\n\tvar flag;\n\tvar note;\n\tif (duration <= 1 / 32) { note = \"noteheads.quarter\"; flag = \"flags.u32nd\"; dot = 0; }\n\telse if (duration <= 1 / 16) { note = \"noteheads.quarter\"; flag = \"flags.u16th\"; dot = 0; }\n\telse if (duration <= 3 / 32) { note = \"noteheads.quarter\"; flag = \"flags.u16nd\"; dot = 1; }\n\telse if (duration <= 1 / 8) { note = \"noteheads.quarter\"; flag = \"flags.u8th\"; dot = 0; }\n\telse if (duration <= 3 / 16) { note = \"noteheads.quarter\"; flag = \"flags.u8th\"; dot = 1; }\n\telse if (duration <= 1 / 4) { note = \"noteheads.quarter\"; dot = 0; }\n\telse if (duration <= 3 / 8) { note = \"noteheads.quarter\"; dot = 1; }\n\telse if (duration <= 1 / 2) { note = \"noteheads.half\"; dot = 0; }\n\telse if (duration <= 3 / 4) { note = \"noteheads.half\"; dot = 1; }\n\telse if (duration <= 1) { note = \"noteheads.whole\"; dot = 0; }\n\telse if (duration <= 1.5) { note = \"noteheads.whole\"; dot = 1; }\n\telse if (duration <= 2) { note = \"noteheads.dbl\"; dot = 0; }\n\telse { note = \"noteheads.dbl\"; dot = 1; }\n\n\tvar ret = createNoteHead(absElem, note, { verticalPos: 0 }, // This is just temporary: we'll offset the vertical positioning when we get the actual vertical spot.\n\t\t{ dir: \"up\", flag: flag, dot: dot, scale: temposcale });\n\tvar tempoNote = ret.notehead;\n\tabsElem.addHead(tempoNote);\n\tvar stem;\n\tif (note !== \"noteheads.whole\" && note !== \"noteheads.dbl\") {\n\t\tvar p1 = 1 / 3 * temposcale;\n\t\tvar p2 = 5 * temposcale;\n\t\tvar dx = tempoNote.dx + tempoNote.w;\n\t\tvar width = -0.6;\n\t\tstem = new RelativeElement(null, dx, 0, p1, { \"type\": \"stem\", \"pitch2\": p2, linewidth: width });\n\t\tabsElem.addRight(stem);\n\t}\n\treturn absElem;\n};\n\nmodule.exports = TempoElement;\n","//    abc_tie_element.js: Definition of the TieElement class.\n\nvar TieElem = function TieElem(options) {\n\tthis.type = \"TieElem\";\n\t//\tconsole.log(\"constructor\", options.anchor1 ? options.anchor1.pitch : \"N/A\", options.anchor2 ? options.anchor2.pitch : \"N/A\", options.isTie, options.isGrace);\n\tthis.anchor1 = options.anchor1; // must have a .x and a .pitch, and a .parent property or be null (means starts at the \"beginning\" of the line - after keysig)\n\tthis.anchor2 = options.anchor2; // must have a .x and a .pitch property or be null (means ends at the end of the line)\n\tif (options.isGrace)\n\t\tthis.isGrace = true;\n\tif (options.fixedY)\n\t\tthis.fixedY = true;\n\tif (options.stemDir)\n\t\tthis.stemDir = options.stemDir;\n\tif (options.voiceNumber !== undefined)\n\t\tthis.voiceNumber = options.voiceNumber;\n\tif (options.style !== undefined)\n\t\tthis.dotted = true;\n\tthis.internalNotes = [];\n};\n\nTieElem.prototype.addInternalNote = function (note) {\n\tthis.internalNotes.push(note);\n};\n\nTieElem.prototype.setEndAnchor = function (anchor2) {\n\t//\tconsole.log(\"end\", this.anchor1 ? this.anchor1.pitch : \"N/A\", anchor2 ? anchor2.pitch : \"N/A\", this.isTie, this.isGrace);\n\tthis.anchor2 = anchor2; // must have a .x and a .pitch property or be null (means ends at the end of the line)\n\n\t// we don't really have enough info to know what the vertical extent is yet and we won't until drawing. This will just give it enough\n\t// room on either side (we don't even know if the slur will be above yet). We need to set this so that we can make sure the voice has\n\t// at least enough room that the line doesn't get cut off if the tie or slur is the lowest thing.\n\tif (this.anchor1) {\n\t\tthis.top = Math.max(this.anchor1.pitch, this.anchor2.pitch) + 4\n\t\tthis.bottom = Math.min(this.anchor1.pitch, this.anchor2.pitch) - 4\n\t} else {\n\t\tthis.top = this.anchor2.pitch + 4\n\t\tthis.bottom = this.anchor2.pitch - 4\n\t}\n};\n\n// If we encounter a repeat sign, then we don't want to extend either a tie or a slur past it, so these are called to be a limit.\nTieElem.prototype.setStartX = function (startLimitElem) {\n\tthis.startLimitX = startLimitElem;\n};\n\nTieElem.prototype.setEndX = function (endLimitElem) {\n\tthis.endLimitX = endLimitElem;\n};\n\nTieElem.prototype.setHint = function () {\n\tthis.hint = true;\n};\n\nTieElem.prototype.calcTieDirection = function () {\n\t// The rules:\n\t// 1) If it is in a grace note group, then the direction is always BELOW.\n\t// 2) If it is in a single voice, then the direction is always OPPOSITE of the stem (or where the stem would have been in the case of whole notes.)\n\t// 3) If the stem direction is forced (probably because there are two voices on the same line), then the direction is the SAME as the stem direction.\n\n\tif (this.isGrace)\n\t\tthis.above = false;\n\telse if (this.voiceNumber === 0)\n\t\tthis.above = true;\n\telse if (this.voiceNumber > 0)\n\t\tthis.above = false;\n\telse {\n\t\tvar referencePitch;\n\t\tif (this.anchor1)\n\t\t\treferencePitch = this.anchor1.pitch;\n\t\telse if (this.anchor2)\n\t\t\treferencePitch = this.anchor2.pitch;\n\t\telse\n\t\t\treferencePitch = 14; // TODO-PER: this can't really happen normally. This would imply that a tie crossed over three lines, something like \"C-\\nz\\nC\"\n\t\t// Put the arc in the opposite direction of the stem. That isn't always the pitch if one or both of the notes are beamed with something that affects its stem.\n\t\tif ((this.anchor1 && this.anchor1.stemDir === 'down') && (this.anchor2 && this.anchor2.stemDir === \"down\"))\n\t\t\tthis.above = true;\n\t\telse if ((this.anchor1 && this.anchor1.stemDir === 'up') && (this.anchor2 && this.anchor2.stemDir === \"up\"))\n\t\t\tthis.above = false;\n\t\telse if (this.anchor1 && this.anchor2)\n\t\t\tthis.above = referencePitch >= 6;\n\t\telse if (this.anchor1)\n\t\t\tthis.above = this.anchor1.stemDir === \"down\";\n\t\telse if (this.anchor2)\n\t\t\tthis.above = this.anchor2.stemDir === \"down\";\n\t\telse\n\t\t\tthis.above = referencePitch >= 6;\n\t}\n};\n\n// From \"standard music notation practice\" by Music Publishers’ Association:\n// 1) Slurs are placed under the note heads if all stems go up.\n// 2) Slurs are placed over the note heads if all stems go down.\n// 3) If there are both up stems and down stems, prefer placing the slur over.\n// 4) When the staff has opposite stemmed voices, all slurs should be on the stemmed side.\n\nTieElem.prototype.calcSlurDirection = function () {\n\tif (this.isGrace)\n\t\tthis.above = false;\n\telse if (this.voiceNumber === 0)\n\t\tthis.above = true;\n\telse if (this.voiceNumber > 0)\n\t\tthis.above = false;\n\telse {\n\t\tvar hasDownStem = false;\n\t\tif (this.anchor1 && this.anchor1.stemDir === \"down\")\n\t\t\thasDownStem = true;\n\t\tif (this.anchor2 && this.anchor2.stemDir === \"down\")\n\t\t\thasDownStem = true;\n\t\tfor (var i = 0; i < this.internalNotes.length; i++) {\n\t\t\tvar n = this.internalNotes[i];\n\t\t\tif (n.stemDir === \"down\")\n\t\t\t\thasDownStem = true;\n\t\t}\n\t\tthis.above = hasDownStem;\n\t}\n};\n\nTieElem.prototype.calcX = function (lineStartX, lineEndX) {\n\tif (this.anchor1) {\n\t\tthis.startX = this.anchor1.x; // The normal case where there is a starting element to attach to.\n\t\tif (this.anchor1.scalex < 1) // this is a grace note - don't offset the tie as much.\n\t\t\tthis.startX -= 3;\n\t} else if (this.startLimitX)\n\t\tthis.startX = this.startLimitX.x + this.startLimitX.w; // if there is no start element, but there is a repeat mark before the start of the line.\n\telse {\n\t\tif (this.anchor2)\n\t\t\tthis.startX = this.anchor2.x - 20; // There is no element and no repeat mark: make a small arc\n\t\telse\n\t\t\tthis.startX = lineStartX; // Don't have any guidance, so extend to beginning of line\n\t}\n\tif (!this.anchor1 && this.dotted)\n\t\tthis.startX -= 3; // The arc needs to be long enough to tell that it is dotted.\n\n\tif (this.anchor2)\n\t\tthis.endX = this.anchor2.x; // The normal case where there is a starting element to attach to.\n\telse if (this.endLimitX)\n\t\tthis.endX = this.endLimitX.x; // if there is no start element, but there is a repeat mark before the start of the line.\n\telse\n\t\tthis.endX = lineEndX; // There is no element and no repeat mark: extend to the beginning of the line.\n};\n\nTieElem.prototype.calcTieY = function () {\n\t// If the tie comes from another line, then one or both anchors will be missing.\n\tif (this.anchor1)\n\t\tthis.startY = this.anchor1.pitch;\n\telse if (this.anchor2)\n\t\tthis.startY = this.anchor2.pitch;\n\telse\n\t\tthis.startY = this.above ? 14 : 0;\n\n\tif (this.anchor2)\n\t\tthis.endY = this.anchor2.pitch;\n\telse if (this.anchor1)\n\t\tthis.endY = this.anchor1.pitch;\n\telse\n\t\tthis.endY = this.above ? 14 : 0;\n};\n\n// From \"standard music notation practice\" by Music Publishers’ Association:\n// 1) If the anchor note is down stem, the slur points to the note head.\n// 2) If the anchor note is up stem, and the slur is over, then point to middle of stem.\n\nTieElem.prototype.calcSlurY = function () {\n\tif (this.anchor1 && this.anchor2) {\n\t\tif (this.above && this.anchor1.stemDir === \"up\" && !this.fixedY) {\n\t\t\tthis.startY = (this.anchor1.highestVert + this.anchor1.pitch) / 2;\n\t\t\tthis.startX += this.anchor1.w / 2; // When going to the middle of the stem, bump the line to the right a little bit to make it look right.\n\t\t} else\n\t\t\tthis.startY = this.anchor1.pitch;\n\n\t\t// If the closing note has an up stem, and it is beamed, and it isn't the first note in the beam, then the beam will get in the way.\n\t\tvar beamInterferes = this.anchor2.parent.beam && this.anchor2.parent.beam.stemsUp && this.anchor2.parent.beam.elems[0] !== this.anchor2.parent;\n\t\tvar midPoint = (this.anchor2.highestVert + this.anchor2.pitch) / 2;\n\t\tif (this.above && this.anchor2.stemDir === \"up\" && !this.fixedY && !beamInterferes && (midPoint < this.startY)) {\n\t\t\tthis.endY = midPoint;\n\t\t\tthis.endX += Math.round(this.anchor2.w / 2); // When going to the middle of the stem, bump the line to the right a little bit to make it look right.\n\t\t} else\n\t\t\tthis.endY = this.above && beamInterferes ? this.anchor2.highestVert : this.anchor2.pitch;\n\n\t\tif (this.anchor1.scalex === 1) { // Need a way to tell if this is a grace note - if so then keep the slur as close as possible. TODO-PER-HACK: this should be more declaratively determined.\n\t\t\tvar hasBeam1 = !!this.anchor1.parent.beam\n\t\t\tvar hasBeam2 = !!this.anchor2.parent.beam\n\t\t\tif (hasBeam1) {\n\t\t\t\tvar isLastInBeam = this.anchor1.parent === this.anchor1.parent.beam.elems[this.anchor1.parent.beam.elems.length-1]\n\t\t\t\tif (!isLastInBeam) {\n\t\t\t\t\t\tif (this.above)\n\t\t\t\t\t\tthis.startY = this.anchor1.parent.fixed.t\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.startY = this.anchor1.parent.fixed.b\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (hasBeam2) {\n\t\t\t\tvar isFirstInBeam = this.anchor2.parent === this.anchor2.parent.beam.elems[0]\n\t\t\t\tif (!isFirstInBeam) {\n\t\t\t\t\tif (this.above)\n\t\t\t\t\t\tthis.endY = this.anchor2.parent.fixed.t\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.endY = this.anchor2.parent.fixed.b\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else if (this.anchor1) {\n\t\tthis.startY = this.endY = this.anchor1.pitch;\n\t} else if (this.anchor2) {\n\t\tthis.startY = this.endY = this.anchor2.pitch;\n\t} else {\n\t\t// This is the case where the slur covers the entire line.\n\t\t// TODO-PER: figure out where the real top and bottom of the line are.\n\t\tthis.startY = this.above ? 14 : 0;\n\t\tthis.endY = this.above ? 14 : 0;\n\t}\n};\n\nTieElem.prototype.avoidCollisionAbove = function () {\n\t// Double check that an interior note in the slur isn't so high that it interferes.\n\tif (this.above) {\n\t\tvar maxInnerHeight = -50;\n\t\tfor (var i = 0; i < this.internalNotes.length; i++) {\n\t\t\tif (this.internalNotes[i].highestVert > maxInnerHeight)\n\t\t\t\tmaxInnerHeight = this.internalNotes[i].highestVert;\n\t\t}\n\t\tif (maxInnerHeight > this.startY && maxInnerHeight > this.endY)\n\t\t\tthis.startY = this.endY = maxInnerHeight - 1;\n\t}\n};\n\nmodule.exports = TieElem;\n","const addTextIf = require(\"../add-text-if\");\nconst richText = require(\"./rich-text\");\n\nfunction TopText(metaText, metaTextInfo, formatting, lines, width, isPrint, paddingLeft, spacing, shouldAddClasses, getTextSize) {\n\tthis.rows = [];\n\n\tif (metaText.header && isPrint) {\n\t\t// Note: whether there is a header or not doesn't change any other positioning, so this doesn't change the Y-coordinate.\n\t\t// This text goes above the margin, so we'll temporarily move up.\n\t\tvar headerTextHeight = getTextSize.calc(\"X\", \"headerfont\", 'abcjs-header abcjs-meta-top').height;\n\t\taddTextIf(this.rows, { marginLeft: paddingLeft, text: metaText.header.left, font: 'headerfont', klass: 'header meta-top', marginTop: -headerTextHeight, info: metaTextInfo.header, name: \"header\" }, getTextSize);\n\t\taddTextIf(this.rows, { marginLeft: paddingLeft + width / 2, text: metaText.header.center, font: 'headerfont', klass: 'header meta-top', marginTop: -headerTextHeight, anchor: 'middle', info: metaTextInfo.header, name: \"header\" }, getTextSize);\n\t\taddTextIf(this.rows, { marginLeft: paddingLeft + width, text: metaText.header.right, font: 'headerfont', klass: 'header meta-top', marginTop: -headerTextHeight, anchor: 'end', info: metaTextInfo.header, name: \"header\" }, getTextSize);\n\n\t\t//\t\tTopText.prototype.addTextIf = function (marginLeft, text, font, klass, marginTop, marginBottom, anchor, getTextSize, absElemType, noMove) {\n\t}\n\tif (isPrint)\n\t\tthis.rows.push({ move: spacing.top });\n\tvar tAnchor = formatting.titleleft ? 'start' : 'middle';\n\tvar tLeft = formatting.titleleft ? paddingLeft : paddingLeft + width / 2;\n\tif (metaText.title) {\n\t\tvar klass = shouldAddClasses ? 'abcjs-title' : ''\n\t\trichText(this.rows, metaText.title, \"titlefont\", klass, 'title', tLeft, {marginTop: spacing.title, anchor: tAnchor, absElemType: \"title\", info: metaTextInfo.title},  getTextSize)\n\t}\n\tif (lines.length) {\n\t\tvar index = 0;\n\t\twhile (index < lines.length && lines[index].subtitle) {\n\t\t\tvar klass = shouldAddClasses ? 'abcjs-text abcjs-subtitle' : ''\n\t\t\trichText(this.rows, lines[index].subtitle.text, \"subtitlefont\", klass, 'subtitle', tLeft, {marginTop: spacing.subtitle, anchor: tAnchor, absElemType: \"subtitle\", info: lines[index].subtitle},  getTextSize)\n\t\t\tindex++;\n\t\t}\n\t}\n\n\tif (metaText.rhythm || metaText.origin || metaText.composer) {\n\t\tthis.rows.push({ move: spacing.composer });\n\t\tif (metaText.rhythm && metaText.rhythm.length > 0) {\n\t\t\tvar noMove = !!(metaText.composer || metaText.origin);\n\t\t\tvar klass = shouldAddClasses ? 'abcjs-rhythm' : ''\n\t\t\taddTextIf(this.rows, { marginLeft: paddingLeft, text: metaText.rhythm, font: 'infofont', klass: klass, absElemType: \"rhythm\", noMove: noMove, info: metaTextInfo.rhythm, name: \"rhythm\" }, getTextSize);\n\t\t}\n\t\tvar hasSimpleComposerLine = true\n\t\tif (metaText.composer && typeof metaText.composer !== 'string')\n\t\t\thasSimpleComposerLine = false\n\t\tif (metaText.origin && typeof metaText.origin !== 'string')\n\t\t\thasSimpleComposerLine = false\n\t\t\t\n\t\tvar composerLine = metaText.composer ? metaText.composer : '';\n\t\tif (metaText.origin) {\n\t\t\tif (typeof composerLine === 'string' && typeof metaText.origin === 'string')\n\t\t\t\tcomposerLine += ' (' + metaText.origin + ')';\n\t\t\telse if (typeof composerLine === 'string' && typeof metaText.origin !== 'string') {\n\t\t\t\tcomposerLine = [{text:composerLine}]\n\t\t\t\tcomposerLine.push({text:\" (\"})\n\t\t\t\tcomposerLine = composerLine.concat(metaText.origin)\n\t\t\t\tcomposerLine.push({text:\")\"})\n\t\t\t} else {\n\t\t\t\tcomposerLine.push({text:\" (\"})\n\t\t\t\tcomposerLine = composerLine.concat(metaText.origin)\n\t\t\t\tcomposerLine.push({text:\")\"})\n\t\t\t}\n\t\t}\n\t\tif (composerLine) {\n\t\t\tvar klass = shouldAddClasses ? 'abcjs-composer' : ''\n\t\t\trichText(this.rows, composerLine, 'composerfont', klass, \"composer\", paddingLeft+width, {anchor: \"end\", absElemType: \"composer\", info: metaTextInfo.composer, ingroup: true}, getTextSize)\n\t\t}\n\t}\n\n\tif (metaText.author && metaText.author.length > 0) {\n\t\tvar klass = shouldAddClasses ? 'abcjs-author' : ''\n\t\trichText(this.rows, metaText.author, 'composerfont', klass, \"author\", paddingLeft+width, {anchor: \"end\", absElemType: \"author\", info: metaTextInfo.author}, getTextSize)\n\t}\n\n\tif (metaText.partOrder && metaText.partOrder.length > 0) {\n\t\tvar klass = shouldAddClasses ? 'abcjs-part-order' : ''\n\t\trichText(this.rows, metaText.partOrder, 'partsfont', klass, \"part-order\", paddingLeft, {absElemType: \"partOrder\", info: metaTextInfo.partOrder, anchor: 'start'}, getTextSize)\n\n\t}\n}\n\nmodule.exports = TopText;\n","//    abc_triplet_element.js: Definition of the TripletElem class.\n\nvar TripletElem = function TripletElem(number, anchor1, options) {\n\tthis.type = \"TripletElem\";\n\tthis.anchor1 = anchor1; // must have a .x and a .parent property or be null (means starts at the \"beginning\" of the line - after key signature)\n\tthis.number = number;\n\tthis.durationClass = ('d' + (Math.round(anchor1.parent.durationClass * 1000) / 1000)).replace(/\\./, '-');\n\tthis.middleElems = []; // This is to calculate the highest interior pitch. It is used to make sure that the drawn bracket never crosses a really high middle note.\n\tthis.flatBeams = options.flatBeams;\n};\n\nTripletElem.prototype.isClosed = function () {\n\treturn !!this.anchor2;\n};\n\nTripletElem.prototype.middleNote = function (elem) {\n\tthis.middleElems.push(elem);\n};\n\nTripletElem.prototype.setCloseAnchor = function (anchor2) {\n\tthis.anchor2 = anchor2;\n\t// TODO-PER: This used to be just for beamed triplets but it looks like bracketed triplets need extra room, too. The only one that doesn't is stem down and beamed\n\t//if (this.anchor1.parent.beam)\n\tif (!this.anchor1.parent.beam || this.anchor1.stemDir === 'up')\n\t\tthis.endingHeightAbove = 4;\n};\n\nmodule.exports = TripletElem;\n","//    abc_voice_element.js: Definition of the VoiceElement class.\n\nvar VoiceElement = function VoiceElement(voicenumber, voicetotal) {\n\tthis.children = [];\n\tthis.beams = [];\n\tthis.otherchildren = []; // ties, slurs, triplets\n\tthis.w = 0;\n\tthis.duplicate = false;\n\tthis.voicenumber = voicenumber; //number of the voice on a given stave (not staffgroup)\n\tthis.voicetotal = voicetotal;\n\tthis.bottom = 7;\n\tthis.top = 7;\n\tthis.specialY = {\n\t\ttempoHeightAbove: 0,\n\t\tpartHeightAbove: 0,\n\t\tvolumeHeightAbove: 0,\n\t\tdynamicHeightAbove: 0,\n\t\tendingHeightAbove: 0,\n\t\tchordHeightAbove: 0,\n\t\tlyricHeightAbove: 0,\n\n\t\tlyricHeightBelow: 0,\n\t\tchordHeightBelow: 0,\n\t\tvolumeHeightBelow: 0,\n\t\tdynamicHeightBelow: 0\n\t};\n};\n\nVoiceElement.prototype.addChild = function (absElem) {\n\t// This is always passed an AbsoluteElement\n\tif (absElem.type === 'bar') {\n\t\tvar firstItem = true;\n\t\tfor (var i = 0; firstItem && i < this.children.length; i++) {\n\t\t\tif (this.children[i].type.indexOf(\"staff-extra\") < 0 && this.children[i].type !== \"tempo\")\n\t\t\t\tfirstItem = false;\n\t\t}\n\t\tif (!firstItem) {\n\t\t\tthis.beams.push(\"bar\");\n\t\t\tthis.otherchildren.push(\"bar\");\n\t\t}\n\t}\n\tthis.children[this.children.length] = absElem;\n\tthis.setRange(absElem);\n};\n\nVoiceElement.prototype.setLimit = function (member, child) {\n\t// Sometimes we get an absolute element in here and sometimes we get some type of relative element.\n\t// If there is a \"specialY\" element, then assume it is an absolute element. If that doesn't exist, look for the\n\t// same members at the top level, because that's where they are in relative elements.\n\tvar specialY = child.specialY;\n\tif (!specialY) specialY = child;\n\tif (!specialY[member]) return;\n\tif (!this.specialY[member])\n\t\tthis.specialY[member] = specialY[member];\n\telse\n\t\tthis.specialY[member] = Math.max(this.specialY[member], specialY[member]);\n};\n\nVoiceElement.prototype.adjustRange = function (child) {\n\tif (child.bottom !== undefined)\n\t\tthis.bottom = Math.min(this.bottom, child.bottom);\n\tif (child.top !== undefined)\n\t\tthis.top = Math.max(this.top, child.top);\n};\n\nVoiceElement.prototype.setRange = function (child) {\n\tthis.adjustRange(child);\n\tthis.setLimit('tempoHeightAbove', child);\n\tthis.setLimit('partHeightAbove', child);\n\tthis.setLimit('volumeHeightAbove', child);\n\tthis.setLimit('dynamicHeightAbove', child);\n\tthis.setLimit('endingHeightAbove', child);\n\tthis.setLimit('chordHeightAbove', child);\n\tthis.setLimit('lyricHeightAbove', child);\n\tthis.setLimit('lyricHeightBelow', child);\n\tthis.setLimit('chordHeightBelow', child);\n\tthis.setLimit('volumeHeightBelow', child);\n\tthis.setLimit('dynamicHeightBelow', child);\n};\n\nVoiceElement.prototype.addOther = function (child) {\n\tthis.otherchildren.push(child);\n\tthis.setRange(child);\n};\n\nVoiceElement.prototype.addBeam = function (child) {\n\tthis.beams.push(child);\n};\n\nVoiceElement.prototype.setWidth = function (width) {\n\tthis.w = width;\n};\n\nmodule.exports = VoiceElement;\n","var spacing = require('../helpers/spacing');\n\n/**\n * Glyphs and some methods to adjust for their x and y baseline\n */\nvar glyphs =\n{\n\t'0': { d: [['M', 4.83, -14.97], ['c', 0.33, -0.03, 1.11, 0.00, 1.47, 0.06], ['c', 1.68, 0.36, 2.97, 1.59, 3.78, 3.60], ['c', 1.20, 2.97, 0.81, 6.96, -0.90, 9.27], ['c', -0.78, 1.08, -1.71, 1.71, -2.91, 1.95], ['c', -0.45, 0.09, -1.32, 0.09, -1.77, 0.00], ['c', -0.81, -0.18, -1.47, -0.51, -2.07, -1.02], ['c', -2.34, -2.07, -3.15, -6.72, -1.74, -10.20], ['c', 0.87, -2.16, 2.28, -3.42, 4.14, -3.66], ['z'], ['m', 1.11, 0.87], ['c', -0.21, -0.06, -0.69, -0.09, -0.87, -0.06], ['c', -0.54, 0.12, -0.87, 0.42, -1.17, 0.99], ['c', -0.36, 0.66, -0.51, 1.56, -0.60, 3.00], ['c', -0.03, 0.75, -0.03, 4.59, 0.00, 5.31], ['c', 0.09, 1.50, 0.27, 2.40, 0.60, 3.06], ['c', 0.24, 0.48, 0.57, 0.78, 0.96, 0.90], ['c', 0.27, 0.09, 0.78, 0.09, 1.05, 0.00], ['c', 0.39, -0.12, 0.72, -0.42, 0.96, -0.90], ['c', 0.33, -0.66, 0.51, -1.56, 0.60, -3.06], ['c', 0.03, -0.72, 0.03, -4.56, 0.00, -5.31], ['c', -0.09, -1.47, -0.27, -2.37, -0.60, -3.03], ['c', -0.24, -0.48, -0.54, -0.78, -0.93, -0.90], ['z']], w: 10.78, h: 14.959 },\n\t'1': { d: [['M', 3.30, -15.06], ['c', 0.06, -0.06, 0.21, -0.03, 0.66, 0.15], ['c', 0.81, 0.39, 1.08, 0.39, 1.83, 0.03], ['c', 0.21, -0.09, 0.39, -0.15, 0.42, -0.15], ['c', 0.12, 0.00, 0.21, 0.09, 0.27, 0.21], ['c', 0.06, 0.12, 0.06, 0.33, 0.06, 5.94], ['c', 0.00, 3.93, 0.00, 5.85, 0.03, 6.03], ['c', 0.06, 0.36, 0.15, 0.69, 0.27, 0.96], ['c', 0.36, 0.75, 0.93, 1.17, 1.68, 1.26], ['c', 0.30, 0.03, 0.39, 0.09, 0.39, 0.30], ['c', 0.00, 0.15, -0.03, 0.18, -0.09, 0.24], ['c', -0.06, 0.06, -0.09, 0.06, -0.48, 0.06], ['c', -0.42, 0.00, -0.69, -0.03, -2.10, -0.24], ['c', -0.90, -0.15, -1.77, -0.15, -2.67, 0.00], ['c', -1.41, 0.21, -1.68, 0.24, -2.10, 0.24], ['c', -0.39, 0.00, -0.42, 0.00, -0.48, -0.06], ['c', -0.06, -0.06, -0.06, -0.09, -0.06, -0.24], ['c', 0.00, -0.21, 0.06, -0.27, 0.36, -0.30], ['c', 0.75, -0.09, 1.32, -0.51, 1.68, -1.26], ['c', 0.12, -0.27, 0.21, -0.60, 0.27, -0.96], ['c', 0.03, -0.18, 0.03, -1.59, 0.03, -4.29], ['c', 0.00, -3.87, 0.00, -4.05, -0.06, -4.14], ['c', -0.09, -0.15, -0.18, -0.24, -0.39, -0.24], ['c', -0.12, 0.00, -0.15, 0.03, -0.21, 0.06], ['c', -0.03, 0.06, -0.45, 0.99, -0.96, 2.13], ['c', -0.48, 1.14, -0.90, 2.10, -0.93, 2.16], ['c', -0.06, 0.15, -0.21, 0.24, -0.33, 0.24], ['c', -0.24, 0.00, -0.42, -0.18, -0.42, -0.39], ['c', 0.00, -0.06, 3.27, -7.62, 3.33, -7.74], ['z']], w: 8.94, h: 15.058 },\n\t'2': { d: [['M', 4.23, -14.97], ['c', 0.57, -0.06, 1.68, 0.00, 2.34, 0.18], ['c', 0.69, 0.18, 1.50, 0.54, 2.01, 0.90], ['c', 1.35, 0.96, 1.95, 2.25, 1.77, 3.81], ['c', -0.15, 1.35, -0.66, 2.34, -1.68, 3.15], ['c', -0.60, 0.48, -1.44, 0.93, -3.12, 1.65], ['c', -1.32, 0.57, -1.80, 0.81, -2.37, 1.14], ['c', -0.57, 0.33, -0.57, 0.33, -0.24, 0.27], ['c', 0.39, -0.09, 1.26, -0.09, 1.68, 0.00], ['c', 0.72, 0.15, 1.41, 0.45, 2.10, 0.90], ['c', 0.99, 0.63, 1.86, 0.87, 2.55, 0.75], ['c', 0.24, -0.06, 0.42, -0.15, 0.57, -0.30], ['c', 0.12, -0.09, 0.30, -0.42, 0.30, -0.51], ['c', 0.00, -0.09, 0.12, -0.21, 0.24, -0.24], ['c', 0.18, -0.03, 0.39, 0.12, 0.39, 0.30], ['c', 0.00, 0.12, -0.15, 0.57, -0.30, 0.87], ['c', -0.54, 1.02, -1.56, 1.74, -2.79, 2.01], ['c', -0.42, 0.09, -1.23, 0.09, -1.62, 0.03], ['c', -0.81, -0.18, -1.32, -0.45, -2.01, -1.11], ['c', -0.45, -0.45, -0.63, -0.57, -0.96, -0.69], ['c', -0.84, -0.27, -1.89, 0.12, -2.25, 0.90], ['c', -0.12, 0.21, -0.21, 0.54, -0.21, 0.72], ['c', 0.00, 0.12, -0.12, 0.21, -0.27, 0.24], ['c', -0.15, 0.00, -0.27, -0.03, -0.33, -0.15], ['c', -0.09, -0.21, 0.09, -1.08, 0.33, -1.71], ['c', 0.24, -0.66, 0.66, -1.26, 1.29, -1.89], ['c', 0.45, -0.45, 0.90, -0.81, 1.92, -1.56], ['c', 1.29, -0.93, 1.89, -1.44, 2.34, -1.98], ['c', 0.87, -1.05, 1.26, -2.19, 1.20, -3.63], ['c', -0.06, -1.29, -0.39, -2.31, -0.96, -2.91], ['c', -0.36, -0.33, -0.72, -0.51, -1.17, -0.54], ['c', -0.84, -0.03, -1.53, 0.42, -1.59, 1.05], ['c', -0.03, 0.33, 0.12, 0.60, 0.57, 1.14], ['c', 0.45, 0.54, 0.54, 0.87, 0.42, 1.41], ['c', -0.15, 0.63, -0.54, 1.11, -1.08, 1.38], ['c', -0.63, 0.33, -1.20, 0.33, -1.83, 0.00], ['c', -0.24, -0.12, -0.33, -0.18, -0.54, -0.39], ['c', -0.18, -0.18, -0.27, -0.30, -0.36, -0.51], ['c', -0.24, -0.45, -0.27, -0.84, -0.21, -1.38], ['c', 0.12, -0.75, 0.45, -1.41, 1.02, -1.98], ['c', 0.72, -0.72, 1.74, -1.17, 2.85, -1.32], ['z']], w: 10.764, h: 14.97 },\n\t'3': { d: [['M', 3.78, -14.97], ['c', 0.30, -0.03, 1.41, 0.00, 1.83, 0.06], ['c', 2.22, 0.30, 3.51, 1.32, 3.72, 2.91], ['c', 0.03, 0.33, 0.03, 1.26, -0.03, 1.65], ['c', -0.12, 0.84, -0.48, 1.47, -1.05, 1.77], ['c', -0.27, 0.15, -0.36, 0.24, -0.45, 0.39], ['c', -0.09, 0.21, -0.09, 0.36, 0.00, 0.57], ['c', 0.09, 0.15, 0.18, 0.24, 0.51, 0.39], ['c', 0.75, 0.42, 1.23, 1.14, 1.41, 2.13], ['c', 0.06, 0.42, 0.06, 1.35, 0.00, 1.71], ['c', -0.18, 0.81, -0.48, 1.38, -1.02, 1.95], ['c', -0.75, 0.72, -1.80, 1.20, -3.18, 1.38], ['c', -0.42, 0.06, -1.56, 0.06, -1.95, 0.00], ['c', -1.89, -0.33, -3.18, -1.29, -3.51, -2.64], ['c', -0.03, -0.12, -0.03, -0.33, -0.03, -0.60], ['c', 0.00, -0.36, 0.00, -0.42, 0.06, -0.63], ['c', 0.12, -0.30, 0.27, -0.51, 0.51, -0.75], ['c', 0.24, -0.24, 0.45, -0.39, 0.75, -0.51], ['c', 0.21, -0.06, 0.27, -0.06, 0.60, -0.06], ['c', 0.33, 0.00, 0.39, 0.00, 0.60, 0.06], ['c', 0.30, 0.12, 0.51, 0.27, 0.75, 0.51], ['c', 0.36, 0.33, 0.57, 0.75, 0.60, 1.20], ['c', 0.00, 0.21, 0.00, 0.27, -0.06, 0.42], ['c', -0.09, 0.18, -0.12, 0.24, -0.54, 0.54], ['c', -0.51, 0.36, -0.63, 0.54, -0.60, 0.87], ['c', 0.06, 0.54, 0.54, 0.90, 1.38, 0.99], ['c', 0.36, 0.06, 0.72, 0.03, 0.96, -0.06], ['c', 0.81, -0.27, 1.29, -1.23, 1.44, -2.79], ['c', 0.03, -0.45, 0.03, -1.95, -0.03, -2.37], ['c', -0.09, -0.75, -0.33, -1.23, -0.75, -1.44], ['c', -0.33, -0.18, -0.45, -0.18, -1.98, -0.18], ['c', -1.35, 0.00, -1.41, 0.00, -1.50, -0.06], ['c', -0.18, -0.12, -0.24, -0.39, -0.12, -0.60], ['c', 0.12, -0.15, 0.15, -0.15, 1.68, -0.15], ['c', 1.50, 0.00, 1.62, 0.00, 1.89, -0.15], ['c', 0.18, -0.09, 0.42, -0.36, 0.54, -0.57], ['c', 0.18, -0.42, 0.27, -0.90, 0.30, -1.95], ['c', 0.03, -1.20, -0.06, -1.80, -0.36, -2.37], ['c', -0.24, -0.48, -0.63, -0.81, -1.14, -0.96], ['c', -0.30, -0.06, -1.08, -0.06, -1.38, 0.03], ['c', -0.60, 0.15, -0.90, 0.42, -0.96, 0.84], ['c', -0.03, 0.30, 0.06, 0.45, 0.63, 0.84], ['c', 0.33, 0.24, 0.42, 0.39, 0.45, 0.63], ['c', 0.03, 0.72, -0.57, 1.50, -1.32, 1.65], ['c', -1.05, 0.27, -2.10, -0.57, -2.10, -1.65], ['c', 0.00, -0.45, 0.15, -0.96, 0.39, -1.38], ['c', 0.12, -0.21, 0.54, -0.63, 0.81, -0.81], ['c', 0.57, -0.42, 1.38, -0.69, 2.25, -0.81], ['z']], w: 9.735, h: 14.967 },\n\t'4': { d: [['M', 8.64, -14.94], ['c', 0.27, -0.09, 0.42, -0.12, 0.54, -0.03], ['c', 0.09, 0.06, 0.15, 0.21, 0.15, 0.30], ['c', -0.03, 0.06, -1.92, 2.31, -4.23, 5.04], ['c', -2.31, 2.73, -4.23, 4.98, -4.26, 5.01], ['c', -0.03, 0.06, 0.12, 0.06, 2.55, 0.06], ['l', 2.61, 0.00], ['l', 0.00, -2.37], ['c', 0.00, -2.19, 0.03, -2.37, 0.06, -2.46], ['c', 0.03, -0.06, 0.21, -0.18, 0.57, -0.42], ['c', 1.08, -0.72, 1.38, -1.08, 1.86, -2.16], ['c', 0.12, -0.30, 0.24, -0.54, 0.27, -0.57], ['c', 0.12, -0.12, 0.39, -0.06, 0.45, 0.12], ['c', 0.06, 0.09, 0.06, 0.57, 0.06, 3.96], ['l', 0.00, 3.90], ['l', 1.08, 0.00], ['c', 1.05, 0.00, 1.11, 0.00, 1.20, 0.06], ['c', 0.24, 0.15, 0.24, 0.54, 0.00, 0.69], ['c', -0.09, 0.06, -0.15, 0.06, -1.20, 0.06], ['l', -1.08, 0.00], ['l', 0.00, 0.33], ['c', 0.00, 0.57, 0.09, 1.11, 0.30, 1.53], ['c', 0.36, 0.75, 0.93, 1.17, 1.68, 1.26], ['c', 0.30, 0.03, 0.39, 0.09, 0.39, 0.30], ['c', 0.00, 0.15, -0.03, 0.18, -0.09, 0.24], ['c', -0.06, 0.06, -0.09, 0.06, -0.48, 0.06], ['c', -0.42, 0.00, -0.69, -0.03, -2.10, -0.24], ['c', -0.90, -0.15, -1.77, -0.15, -2.67, 0.00], ['c', -1.41, 0.21, -1.68, 0.24, -2.10, 0.24], ['c', -0.39, 0.00, -0.42, 0.00, -0.48, -0.06], ['c', -0.06, -0.06, -0.06, -0.09, -0.06, -0.24], ['c', 0.00, -0.21, 0.06, -0.27, 0.36, -0.30], ['c', 0.75, -0.09, 1.32, -0.51, 1.68, -1.26], ['c', 0.21, -0.42, 0.30, -0.96, 0.30, -1.53], ['l', 0.00, -0.33], ['l', -2.70, 0.00], ['c', -2.91, 0.00, -2.85, 0.00, -3.09, -0.15], ['c', -0.18, -0.12, -0.30, -0.39, -0.27, -0.54], ['c', 0.03, -0.06, 0.18, -0.24, 0.33, -0.45], ['c', 0.75, -0.90, 1.59, -2.07, 2.13, -3.03], ['c', 0.33, -0.54, 0.84, -1.62, 1.05, -2.16], ['c', 0.57, -1.41, 0.84, -2.64, 0.90, -4.05], ['c', 0.03, -0.63, 0.06, -0.72, 0.24, -0.81], ['l', 0.12, -0.06], ['l', 0.45, 0.12], ['c', 0.66, 0.18, 1.02, 0.24, 1.47, 0.27], ['c', 0.60, 0.03, 1.23, -0.09, 2.01, -0.33], ['z']], w: 11.795, h: 14.994 },\n\t'5': { d: [['M', 1.02, -14.94], ['c', 0.12, -0.09, 0.03, -0.09, 1.08, 0.06], ['c', 2.49, 0.36, 4.35, 0.36, 6.96, -0.06], ['c', 0.57, -0.09, 0.66, -0.06, 0.81, 0.06], ['c', 0.15, 0.18, 0.12, 0.24, -0.15, 0.51], ['c', -1.29, 1.26, -3.24, 2.04, -5.58, 2.31], ['c', -0.60, 0.09, -1.20, 0.12, -1.71, 0.12], ['c', -0.39, 0.00, -0.45, 0.00, -0.57, 0.06], ['c', -0.09, 0.06, -0.15, 0.12, -0.21, 0.21], ['l', -0.06, 0.12], ['l', 0.00, 1.65], ['l', 0.00, 1.65], ['l', 0.21, -0.21], ['c', 0.66, -0.57, 1.41, -0.96, 2.19, -1.14], ['c', 0.33, -0.06, 1.41, -0.06, 1.95, 0.00], ['c', 2.61, 0.36, 4.02, 1.74, 4.26, 4.14], ['c', 0.03, 0.45, 0.03, 1.08, -0.03, 1.44], ['c', -0.18, 1.02, -0.78, 2.01, -1.59, 2.70], ['c', -0.72, 0.57, -1.62, 1.02, -2.49, 1.20], ['c', -1.38, 0.27, -3.03, 0.06, -4.20, -0.54], ['c', -1.08, -0.54, -1.71, -1.32, -1.86, -2.28], ['c', -0.09, -0.69, 0.09, -1.29, 0.57, -1.74], ['c', 0.24, -0.24, 0.45, -0.39, 0.75, -0.51], ['c', 0.21, -0.06, 0.27, -0.06, 0.60, -0.06], ['c', 0.33, 0.00, 0.39, 0.00, 0.60, 0.06], ['c', 0.30, 0.12, 0.51, 0.27, 0.75, 0.51], ['c', 0.36, 0.33, 0.57, 0.75, 0.60, 1.20], ['c', 0.00, 0.21, 0.00, 0.27, -0.06, 0.42], ['c', -0.09, 0.18, -0.12, 0.24, -0.54, 0.54], ['c', -0.18, 0.12, -0.36, 0.30, -0.42, 0.33], ['c', -0.36, 0.42, -0.18, 0.99, 0.36, 1.26], ['c', 0.51, 0.27, 1.47, 0.36, 2.01, 0.27], ['c', 0.93, -0.21, 1.47, -1.17, 1.65, -2.91], ['c', 0.06, -0.45, 0.06, -1.89, 0.00, -2.31], ['c', -0.15, -1.20, -0.51, -2.10, -1.05, -2.55], ['c', -0.21, -0.18, -0.54, -0.36, -0.81, -0.39], ['c', -0.30, -0.06, -0.84, -0.03, -1.26, 0.06], ['c', -0.93, 0.18, -1.65, 0.60, -2.16, 1.20], ['c', -0.15, 0.21, -0.27, 0.30, -0.39, 0.30], ['c', -0.15, 0.00, -0.30, -0.09, -0.36, -0.18], ['c', -0.06, -0.09, -0.06, -0.15, -0.06, -3.66], ['c', 0.00, -3.39, 0.00, -3.57, 0.06, -3.66], ['c', 0.03, -0.06, 0.09, -0.15, 0.15, -0.18], ['z']], w: 10.212, h: 14.997 },\n\t'6': { d: [['M', 4.98, -14.97], ['c', 0.36, -0.03, 1.20, 0.00, 1.59, 0.06], ['c', 0.90, 0.15, 1.68, 0.51, 2.25, 1.05], ['c', 0.57, 0.51, 0.87, 1.23, 0.84, 1.98], ['c', -0.03, 0.51, -0.21, 0.90, -0.60, 1.26], ['c', -0.24, 0.24, -0.45, 0.39, -0.75, 0.51], ['c', -0.21, 0.06, -0.27, 0.06, -0.60, 0.06], ['c', -0.33, 0.00, -0.39, 0.00, -0.60, -0.06], ['c', -0.30, -0.12, -0.51, -0.27, -0.75, -0.51], ['c', -0.39, -0.36, -0.57, -0.78, -0.57, -1.26], ['c', 0.00, -0.27, 0.00, -0.30, 0.09, -0.42], ['c', 0.03, -0.09, 0.18, -0.21, 0.30, -0.30], ['c', 0.12, -0.09, 0.30, -0.21, 0.39, -0.27], ['c', 0.09, -0.06, 0.21, -0.18, 0.27, -0.24], ['c', 0.06, -0.12, 0.09, -0.15, 0.09, -0.33], ['c', 0.00, -0.18, -0.03, -0.24, -0.09, -0.36], ['c', -0.24, -0.39, -0.75, -0.60, -1.38, -0.57], ['c', -0.54, 0.03, -0.90, 0.18, -1.23, 0.48], ['c', -0.81, 0.72, -1.08, 2.16, -0.96, 5.37], ['l', 0.00, 0.63], ['l', 0.30, -0.12], ['c', 0.78, -0.27, 1.29, -0.33, 2.10, -0.27], ['c', 1.47, 0.12, 2.49, 0.54, 3.27, 1.29], ['c', 0.48, 0.51, 0.81, 1.11, 0.96, 1.89], ['c', 0.06, 0.27, 0.06, 0.42, 0.06, 0.93], ['c', 0.00, 0.54, 0.00, 0.69, -0.06, 0.96], ['c', -0.15, 0.78, -0.48, 1.38, -0.96, 1.89], ['c', -0.54, 0.51, -1.17, 0.87, -1.98, 1.08], ['c', -1.14, 0.30, -2.40, 0.33, -3.24, 0.03], ['c', -1.50, -0.48, -2.64, -1.89, -3.27, -4.02], ['c', -0.36, -1.23, -0.51, -2.82, -0.42, -4.08], ['c', 0.30, -3.66, 2.28, -6.30, 4.95, -6.66], ['z'], ['m', 0.66, 7.41], ['c', -0.27, -0.09, -0.81, -0.12, -1.08, -0.06], ['c', -0.72, 0.18, -1.08, 0.69, -1.23, 1.71], ['c', -0.06, 0.54, -0.06, 3.00, 0.00, 3.54], ['c', 0.18, 1.26, 0.72, 1.77, 1.80, 1.74], ['c', 0.39, -0.03, 0.63, -0.09, 0.90, -0.27], ['c', 0.66, -0.42, 0.90, -1.32, 0.90, -3.24], ['c', 0.00, -2.22, -0.36, -3.12, -1.29, -3.42], ['z']], w: 9.956, h: 14.982 },\n\t'7': { d: [['M', 0.21, -14.97], ['c', 0.21, -0.06, 0.45, 0.00, 0.54, 0.15], ['c', 0.06, 0.09, 0.06, 0.15, 0.06, 0.39], ['c', 0.00, 0.24, 0.00, 0.33, 0.06, 0.42], ['c', 0.06, 0.12, 0.21, 0.24, 0.27, 0.24], ['c', 0.03, 0.00, 0.12, -0.12, 0.24, -0.21], ['c', 0.96, -1.20, 2.58, -1.35, 3.99, -0.42], ['c', 0.15, 0.12, 0.42, 0.30, 0.54, 0.45], ['c', 0.48, 0.39, 0.81, 0.57, 1.29, 0.60], ['c', 0.69, 0.03, 1.50, -0.30, 2.13, -0.87], ['c', 0.09, -0.09, 0.27, -0.30, 0.39, -0.45], ['c', 0.12, -0.15, 0.24, -0.27, 0.30, -0.30], ['c', 0.18, -0.06, 0.39, 0.03, 0.51, 0.21], ['c', 0.06, 0.18, 0.06, 0.24, -0.27, 0.72], ['c', -0.18, 0.24, -0.54, 0.78, -0.78, 1.17], ['c', -2.37, 3.54, -3.54, 6.27, -3.87, 9.00], ['c', -0.03, 0.33, -0.03, 0.66, -0.03, 1.26], ['c', 0.00, 0.90, 0.00, 1.08, 0.15, 1.89], ['c', 0.06, 0.45, 0.06, 0.48, 0.03, 0.60], ['c', -0.06, 0.09, -0.21, 0.21, -0.30, 0.21], ['c', -0.03, 0.00, -0.27, -0.06, -0.54, -0.15], ['c', -0.84, -0.27, -1.11, -0.30, -1.65, -0.30], ['c', -0.57, 0.00, -0.84, 0.03, -1.56, 0.27], ['c', -0.60, 0.18, -0.69, 0.21, -0.81, 0.15], ['c', -0.12, -0.06, -0.21, -0.18, -0.21, -0.30], ['c', 0.00, -0.15, 0.60, -1.44, 1.20, -2.61], ['c', 1.14, -2.22, 2.73, -4.68, 5.10, -8.01], ['c', 0.21, -0.27, 0.36, -0.48, 0.33, -0.48], ['c', 0.00, 0.00, -0.12, 0.06, -0.27, 0.12], ['c', -0.54, 0.30, -0.99, 0.39, -1.56, 0.39], ['c', -0.75, 0.03, -1.20, -0.18, -1.83, -0.75], ['c', -0.99, -0.90, -1.83, -1.17, -2.31, -0.72], ['c', -0.18, 0.15, -0.36, 0.51, -0.45, 0.84], ['c', -0.06, 0.24, -0.06, 0.33, -0.09, 1.98], ['c', 0.00, 1.62, -0.03, 1.74, -0.06, 1.80], ['c', -0.15, 0.24, -0.54, 0.24, -0.69, 0.00], ['c', -0.06, -0.09, -0.06, -0.15, -0.06, -3.57], ['c', 0.00, -3.42, 0.00, -3.48, 0.06, -3.57], ['c', 0.03, -0.06, 0.09, -0.12, 0.15, -0.15], ['z']], w: 10.561, h: 15.093 },\n\t'8': { d: [['M', 4.98, -14.97], ['c', 0.33, -0.03, 1.02, -0.03, 1.32, 0.00], ['c', 1.32, 0.12, 2.49, 0.60, 3.21, 1.32], ['c', 0.39, 0.39, 0.66, 0.81, 0.78, 1.29], ['c', 0.09, 0.36, 0.09, 1.08, 0.00, 1.44], ['c', -0.21, 0.84, -0.66, 1.59, -1.59, 2.55], ['l', -0.30, 0.30], ['l', 0.27, 0.18], ['c', 1.47, 0.93, 2.31, 2.31, 2.25, 3.75], ['c', -0.03, 0.75, -0.24, 1.35, -0.63, 1.95], ['c', -0.45, 0.66, -1.02, 1.14, -1.83, 1.53], ['c', -1.80, 0.87, -4.20, 0.87, -6.00, 0.03], ['c', -1.62, -0.78, -2.52, -2.16, -2.46, -3.66], ['c', 0.06, -0.99, 0.54, -1.77, 1.80, -2.97], ['c', 0.54, -0.51, 0.54, -0.54, 0.48, -0.57], ['c', -0.39, -0.27, -0.96, -0.78, -1.20, -1.14], ['c', -0.75, -1.11, -0.87, -2.40, -0.30, -3.60], ['c', 0.69, -1.35, 2.25, -2.25, 4.20, -2.40], ['z'], ['m', 1.53, 0.69], ['c', -0.42, -0.09, -1.11, -0.12, -1.38, -0.06], ['c', -0.30, 0.06, -0.60, 0.18, -0.81, 0.30], ['c', -0.21, 0.12, -0.60, 0.51, -0.72, 0.72], ['c', -0.51, 0.87, -0.42, 1.89, 0.21, 2.52], ['c', 0.21, 0.21, 0.36, 0.30, 1.95, 1.23], ['c', 0.96, 0.54, 1.74, 0.99, 1.77, 1.02], ['c', 0.09, 0.00, 0.63, -0.60, 0.99, -1.11], ['c', 0.21, -0.36, 0.48, -0.87, 0.57, -1.23], ['c', 0.06, -0.24, 0.06, -0.36, 0.06, -0.72], ['c', 0.00, -0.45, -0.03, -0.66, -0.15, -0.99], ['c', -0.39, -0.81, -1.29, -1.44, -2.49, -1.68], ['z'], ['m', -1.44, 8.07], ['l', -1.89, -1.08], ['c', -0.03, 0.00, -0.18, 0.15, -0.39, 0.33], ['c', -1.20, 1.08, -1.65, 1.95, -1.59, 3.00], ['c', 0.09, 1.59, 1.35, 2.85, 3.21, 3.24], ['c', 0.33, 0.06, 0.45, 0.06, 0.93, 0.06], ['c', 0.63, 0.00, 0.81, -0.03, 1.29, -0.27], ['c', 0.90, -0.42, 1.47, -1.41, 1.41, -2.40], ['c', -0.06, -0.66, -0.39, -1.29, -0.90, -1.65], ['c', -0.12, -0.09, -1.05, -0.63, -2.07, -1.23], ['z']], w: 10.926, h: 14.989 },\n\t'9': { d: [['M', 4.23, -14.97], ['c', 0.42, -0.03, 1.29, 0.00, 1.62, 0.06], ['c', 0.51, 0.12, 0.93, 0.30, 1.38, 0.57], ['c', 1.53, 1.02, 2.52, 3.24, 2.73, 5.94], ['c', 0.18, 2.55, -0.48, 4.98, -1.83, 6.57], ['c', -1.05, 1.26, -2.40, 1.89, -3.93, 1.83], ['c', -1.23, -0.06, -2.31, -0.45, -3.03, -1.14], ['c', -0.57, -0.51, -0.87, -1.23, -0.84, -1.98], ['c', 0.03, -0.51, 0.21, -0.90, 0.60, -1.26], ['c', 0.24, -0.24, 0.45, -0.39, 0.75, -0.51], ['c', 0.21, -0.06, 0.27, -0.06, 0.60, -0.06], ['c', 0.33, 0.00, 0.39, 0.00, 0.60, 0.06], ['c', 0.30, 0.12, 0.51, 0.27, 0.75, 0.51], ['c', 0.39, 0.36, 0.57, 0.78, 0.57, 1.26], ['c', 0.00, 0.27, 0.00, 0.30, -0.09, 0.42], ['c', -0.03, 0.09, -0.18, 0.21, -0.30, 0.30], ['c', -0.12, 0.09, -0.30, 0.21, -0.39, 0.27], ['c', -0.09, 0.06, -0.21, 0.18, -0.27, 0.24], ['c', -0.06, 0.12, -0.06, 0.15, -0.06, 0.33], ['c', 0.00, 0.18, 0.00, 0.24, 0.06, 0.36], ['c', 0.24, 0.39, 0.75, 0.60, 1.38, 0.57], ['c', 0.54, -0.03, 0.90, -0.18, 1.23, -0.48], ['c', 0.81, -0.72, 1.08, -2.16, 0.96, -5.37], ['l', 0.00, -0.63], ['l', -0.30, 0.12], ['c', -0.78, 0.27, -1.29, 0.33, -2.10, 0.27], ['c', -1.47, -0.12, -2.49, -0.54, -3.27, -1.29], ['c', -0.48, -0.51, -0.81, -1.11, -0.96, -1.89], ['c', -0.06, -0.27, -0.06, -0.42, -0.06, -0.96], ['c', 0.00, -0.51, 0.00, -0.66, 0.06, -0.93], ['c', 0.15, -0.78, 0.48, -1.38, 0.96, -1.89], ['c', 0.15, -0.12, 0.33, -0.27, 0.42, -0.36], ['c', 0.69, -0.51, 1.62, -0.81, 2.76, -0.93], ['z'], ['m', 1.17, 0.66], ['c', -0.21, -0.06, -0.57, -0.06, -0.81, -0.03], ['c', -0.78, 0.12, -1.26, 0.69, -1.41, 1.74], ['c', -0.12, 0.63, -0.15, 1.95, -0.09, 2.79], ['c', 0.12, 1.71, 0.63, 2.40, 1.77, 2.46], ['c', 1.08, 0.03, 1.62, -0.48, 1.80, -1.74], ['c', 0.06, -0.54, 0.06, -3.00, 0.00, -3.54], ['c', -0.15, -1.05, -0.51, -1.53, -1.26, -1.68], ['z']], w: 9.959, h: 14.986 },\n\t'rests.multimeasure': { d: [['M', 0, -4], ['l', 0, 16], ['l', 1, 0], ['l', 0, -5], ['l', 40, 0], ['l', 0, 5], ['l', 1, 0], ['l', 0, -16], ['l', -1, 0], ['l', 0, 5], ['l', -40, 0], ['l', 0, -5], ['z']], w: 42, h: 18 },\n\t'rests.whole': { d: [['M', 0.06, 0.03], ['l', 0.09, -0.06], ['l', 5.46, 0.00], ['l', 5.49, 0.00], ['l', 0.09, 0.06], ['l', 0.06, 0.09], ['l', 0.00, 2.19], ['l', 0.00, 2.19], ['l', -0.06, 0.09], ['l', -0.09, 0.06], ['l', -5.49, 0.00], ['l', -5.46, 0.00], ['l', -0.09, -0.06], ['l', -0.06, -0.09], ['l', 0.00, -2.19], ['l', 0.00, -2.19], ['z']], w: 11.25, h: 4.68 },\n\t'rests.half': { d: [['M', 0.06, -4.62], ['l', 0.09, -0.06], ['l', 5.46, 0.00], ['l', 5.49, 0.00], ['l', 0.09, 0.06], ['l', 0.06, 0.09], ['l', 0.00, 2.19], ['l', 0.00, 2.19], ['l', -0.06, 0.09], ['l', -0.09, 0.06], ['l', -5.49, 0.00], ['l', -5.46, 0.00], ['l', -0.09, -0.06], ['l', -0.06, -0.09], ['l', 0.00, -2.19], ['l', 0.00, -2.19], ['z']], w: 11.25, h: 4.68 },\n\t'rests.quarter': { d: [['M', 1.89, -11.82], ['c', 0.12, -0.06, 0.24, -0.06, 0.36, -0.03], ['c', 0.09, 0.06, 4.74, 5.58, 4.86, 5.82], ['c', 0.21, 0.39, 0.15, 0.78, -0.15, 1.26], ['c', -0.24, 0.33, -0.72, 0.81, -1.62, 1.56], ['c', -0.45, 0.36, -0.87, 0.75, -0.96, 0.84], ['c', -0.93, 0.99, -1.14, 2.49, -0.60, 3.63], ['c', 0.18, 0.39, 0.27, 0.48, 1.32, 1.68], ['c', 1.92, 2.25, 1.83, 2.16, 1.83, 2.34], ['c', 0.00, 0.18, -0.18, 0.36, -0.36, 0.39], ['c', -0.15, 0.00, -0.27, -0.06, -0.48, -0.27], ['c', -0.75, -0.75, -2.46, -1.29, -3.39, -1.08], ['c', -0.45, 0.09, -0.69, 0.27, -0.90, 0.69], ['c', -0.12, 0.30, -0.21, 0.66, -0.24, 1.14], ['c', -0.03, 0.66, 0.09, 1.35, 0.30, 2.01], ['c', 0.15, 0.42, 0.24, 0.66, 0.45, 0.96], ['c', 0.18, 0.24, 0.18, 0.33, 0.03, 0.42], ['c', -0.12, 0.06, -0.18, 0.03, -0.45, -0.30], ['c', -1.08, -1.38, -2.07, -3.36, -2.40, -4.83], ['c', -0.27, -1.05, -0.15, -1.77, 0.27, -2.07], ['c', 0.21, -0.12, 0.42, -0.15, 0.87, -0.15], ['c', 0.87, 0.06, 2.10, 0.39, 3.30, 0.90], ['l', 0.39, 0.18], ['l', -1.65, -1.95], ['c', -2.52, -2.97, -2.61, -3.09, -2.70, -3.27], ['c', -0.09, -0.24, -0.12, -0.48, -0.03, -0.75], ['c', 0.15, -0.48, 0.57, -0.96, 1.83, -2.01], ['c', 0.45, -0.36, 0.84, -0.72, 0.93, -0.78], ['c', 0.69, -0.75, 1.02, -1.80, 0.90, -2.79], ['c', -0.06, -0.33, -0.21, -0.84, -0.39, -1.11], ['c', -0.09, -0.15, -0.45, -0.60, -0.81, -1.05], ['c', -0.36, -0.42, -0.69, -0.81, -0.72, -0.87], ['c', -0.09, -0.18, 0.00, -0.42, 0.21, -0.51], ['z']], w: 7.888, h: 21.435 },\n\t'rests.8th': { d: [['M', 1.68, -6.12], ['c', 0.66, -0.09, 1.23, 0.09, 1.68, 0.51], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.09, 0.33, 0.18, 0.66, 0.21, 0.72], ['c', 0.12, 0.27, 0.33, 0.45, 0.60, 0.48], ['c', 0.12, 0.00, 0.18, 0.00, 0.33, -0.09], ['c', 0.39, -0.18, 1.32, -1.29, 1.68, -1.98], ['c', 0.09, -0.21, 0.24, -0.30, 0.39, -0.30], ['c', 0.12, 0.00, 0.27, 0.09, 0.33, 0.18], ['c', 0.03, 0.06, -0.27, 1.11, -1.86, 6.42], ['c', -1.02, 3.48, -1.89, 6.39, -1.92, 6.42], ['c', 0.00, 0.03, -0.12, 0.12, -0.24, 0.15], ['c', -0.18, 0.09, -0.21, 0.09, -0.45, 0.09], ['c', -0.24, 0.00, -0.30, 0.00, -0.48, -0.06], ['c', -0.09, -0.06, -0.21, -0.12, -0.21, -0.15], ['c', -0.06, -0.03, 0.15, -0.57, 1.68, -4.92], ['c', 0.96, -2.67, 1.74, -4.89, 1.71, -4.89], ['l', -0.51, 0.15], ['c', -1.08, 0.36, -1.74, 0.48, -2.55, 0.48], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.33, -0.45, 0.84, -0.81, 1.38, -0.90], ['z']], w: 7.534, h: 13.883 },\n\t'rests.16th': { d: [['M', 3.33, -6.12], ['c', 0.66, -0.09, 1.23, 0.09, 1.68, 0.51], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.09, 0.33, 0.18, 0.66, 0.21, 0.72], ['c', 0.15, 0.39, 0.57, 0.57, 0.87, 0.42], ['c', 0.39, -0.18, 1.20, -1.23, 1.62, -2.07], ['c', 0.06, -0.15, 0.24, -0.24, 0.36, -0.24], ['c', 0.12, 0.00, 0.27, 0.09, 0.33, 0.18], ['c', 0.03, 0.06, -0.45, 1.86, -2.67, 10.17], ['c', -1.50, 5.55, -2.73, 10.14, -2.76, 10.17], ['c', -0.03, 0.03, -0.12, 0.12, -0.24, 0.15], ['c', -0.18, 0.09, -0.21, 0.09, -0.45, 0.09], ['c', -0.24, 0.00, -0.30, 0.00, -0.48, -0.06], ['c', -0.09, -0.06, -0.21, -0.12, -0.21, -0.15], ['c', -0.06, -0.03, 0.12, -0.57, 1.44, -4.92], ['c', 0.81, -2.67, 1.47, -4.86, 1.47, -4.89], ['c', -0.03, 0.00, -0.27, 0.06, -0.54, 0.15], ['c', -1.08, 0.36, -1.77, 0.48, -2.58, 0.48], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.72, -1.05, 2.22, -1.23, 3.06, -0.42], ['c', 0.30, 0.33, 0.42, 0.60, 0.60, 1.38], ['c', 0.09, 0.45, 0.21, 0.78, 0.33, 0.90], ['c', 0.09, 0.09, 0.27, 0.18, 0.45, 0.21], ['c', 0.12, 0.00, 0.18, 0.00, 0.33, -0.09], ['c', 0.33, -0.15, 1.02, -0.93, 1.41, -1.59], ['c', 0.12, -0.21, 0.18, -0.39, 0.39, -1.08], ['c', 0.66, -2.10, 1.17, -3.84, 1.17, -3.87], ['c', 0.00, 0.00, -0.21, 0.06, -0.42, 0.15], ['c', -0.51, 0.15, -1.20, 0.33, -1.68, 0.42], ['c', -0.33, 0.06, -0.51, 0.06, -0.96, 0.06], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.33, -0.45, 0.84, -0.81, 1.38, -0.90], ['z']], w: 9.724, h: 21.383 },\n\t'rests.32nd': { d: [['M', 4.23, -13.62], ['c', 0.66, -0.09, 1.23, 0.09, 1.68, 0.51], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.09, 0.33, 0.18, 0.66, 0.21, 0.72], ['c', 0.12, 0.27, 0.33, 0.45, 0.60, 0.48], ['c', 0.12, 0.00, 0.18, 0.00, 0.27, -0.06], ['c', 0.33, -0.21, 0.99, -1.11, 1.44, -1.98], ['c', 0.09, -0.24, 0.21, -0.33, 0.39, -0.33], ['c', 0.12, 0.00, 0.27, 0.09, 0.33, 0.18], ['c', 0.03, 0.06, -0.57, 2.67, -3.21, 13.89], ['c', -1.80, 7.62, -3.30, 13.89, -3.30, 13.92], ['c', -0.03, 0.06, -0.12, 0.12, -0.24, 0.18], ['c', -0.21, 0.09, -0.24, 0.09, -0.48, 0.09], ['c', -0.24, 0.00, -0.30, 0.00, -0.48, -0.06], ['c', -0.09, -0.06, -0.21, -0.12, -0.21, -0.15], ['c', -0.06, -0.03, 0.09, -0.57, 1.23, -4.92], ['c', 0.69, -2.67, 1.26, -4.86, 1.29, -4.89], ['c', 0.00, -0.03, -0.12, -0.03, -0.48, 0.12], ['c', -1.17, 0.39, -2.22, 0.57, -3.00, 0.54], ['c', -0.42, -0.03, -0.75, -0.12, -1.11, -0.30], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.72, -1.05, 2.22, -1.23, 3.06, -0.42], ['c', 0.30, 0.33, 0.42, 0.60, 0.60, 1.38], ['c', 0.09, 0.45, 0.21, 0.78, 0.33, 0.90], ['c', 0.12, 0.09, 0.30, 0.18, 0.48, 0.21], ['c', 0.12, 0.00, 0.18, 0.00, 0.30, -0.09], ['c', 0.42, -0.21, 1.29, -1.29, 1.56, -1.89], ['c', 0.03, -0.12, 1.23, -4.59, 1.23, -4.65], ['c', 0.00, -0.03, -0.18, 0.03, -0.39, 0.12], ['c', -0.63, 0.18, -1.20, 0.36, -1.74, 0.45], ['c', -0.39, 0.06, -0.54, 0.06, -1.02, 0.06], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.72, -1.05, 2.22, -1.23, 3.06, -0.42], ['c', 0.30, 0.33, 0.42, 0.60, 0.60, 1.38], ['c', 0.09, 0.45, 0.21, 0.78, 0.33, 0.90], ['c', 0.18, 0.18, 0.51, 0.27, 0.72, 0.15], ['c', 0.30, -0.12, 0.69, -0.57, 1.08, -1.17], ['c', 0.42, -0.60, 0.39, -0.51, 1.05, -3.03], ['c', 0.33, -1.26, 0.60, -2.31, 0.60, -2.34], ['c', 0.00, 0.00, -0.21, 0.03, -0.45, 0.12], ['c', -0.57, 0.18, -1.14, 0.33, -1.62, 0.42], ['c', -0.33, 0.06, -0.51, 0.06, -0.96, 0.06], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.33, -0.45, 0.84, -0.81, 1.38, -0.90], ['z']], w: 11.373, h: 28.883 },\n\t'rests.64th': { d: [['M', 5.13, -13.62], ['c', 0.66, -0.09, 1.23, 0.09, 1.68, 0.51], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.15, 0.63, 0.21, 0.81, 0.33, 0.96], ['c', 0.18, 0.21, 0.54, 0.30, 0.75, 0.18], ['c', 0.24, -0.12, 0.63, -0.66, 1.08, -1.56], ['c', 0.33, -0.66, 0.39, -0.72, 0.60, -0.72], ['c', 0.12, 0.00, 0.27, 0.09, 0.33, 0.18], ['c', 0.03, 0.06, -0.69, 3.66, -3.54, 17.64], ['c', -1.95, 9.66, -3.57, 17.61, -3.57, 17.64], ['c', -0.03, 0.06, -0.12, 0.12, -0.24, 0.18], ['c', -0.21, 0.09, -0.24, 0.09, -0.48, 0.09], ['c', -0.24, 0.00, -0.30, 0.00, -0.48, -0.06], ['c', -0.09, -0.06, -0.21, -0.12, -0.21, -0.15], ['c', -0.06, -0.03, 0.06, -0.57, 1.05, -4.95], ['c', 0.60, -2.70, 1.08, -4.89, 1.08, -4.92], ['c', 0.00, 0.00, -0.24, 0.06, -0.51, 0.15], ['c', -0.66, 0.24, -1.20, 0.36, -1.77, 0.48], ['c', -0.42, 0.06, -0.57, 0.06, -1.05, 0.06], ['c', -0.69, 0.00, -0.87, -0.03, -1.35, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.72, -1.05, 2.22, -1.23, 3.06, -0.42], ['c', 0.30, 0.33, 0.42, 0.60, 0.60, 1.38], ['c', 0.09, 0.45, 0.21, 0.78, 0.33, 0.90], ['c', 0.09, 0.09, 0.27, 0.18, 0.45, 0.21], ['c', 0.21, 0.03, 0.39, -0.09, 0.72, -0.42], ['c', 0.45, -0.45, 1.02, -1.26, 1.17, -1.65], ['c', 0.03, -0.09, 0.27, -1.14, 0.54, -2.34], ['c', 0.27, -1.20, 0.48, -2.19, 0.51, -2.22], ['c', 0.00, -0.03, -0.09, -0.03, -0.48, 0.12], ['c', -1.17, 0.39, -2.22, 0.57, -3.00, 0.54], ['c', -0.42, -0.03, -0.75, -0.12, -1.11, -0.30], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.36, -0.54, 0.96, -0.87, 1.65, -0.93], ['c', 0.54, -0.03, 1.02, 0.15, 1.41, 0.54], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.09, 0.33, 0.18, 0.66, 0.21, 0.72], ['c', 0.15, 0.39, 0.57, 0.57, 0.90, 0.42], ['c', 0.36, -0.18, 1.20, -1.26, 1.47, -1.89], ['c', 0.03, -0.09, 0.30, -1.20, 0.57, -2.43], ['l', 0.51, -2.28], ['l', -0.54, 0.18], ['c', -1.11, 0.36, -1.80, 0.48, -2.61, 0.48], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.36, -0.54, 0.96, -0.87, 1.65, -0.93], ['c', 0.54, -0.03, 1.02, 0.15, 1.41, 0.54], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.15, 0.63, 0.21, 0.81, 0.33, 0.96], ['c', 0.21, 0.21, 0.54, 0.30, 0.75, 0.18], ['c', 0.36, -0.18, 0.93, -0.93, 1.29, -1.68], ['c', 0.12, -0.24, 0.18, -0.48, 0.63, -2.55], ['l', 0.51, -2.31], ['c', 0.00, -0.03, -0.18, 0.03, -0.39, 0.12], ['c', -1.14, 0.36, -2.10, 0.54, -2.82, 0.51], ['c', -0.42, -0.03, -0.75, -0.12, -1.11, -0.30], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.33, -0.45, 0.84, -0.81, 1.38, -0.90], ['z']], w: 12.453, h: 36.383 },\n\t'rests.128th': { d: [['M', 6.03, -21.12], ['c', 0.66, -0.09, 1.23, 0.09, 1.68, 0.51], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.09, 0.33, 0.18, 0.66, 0.21, 0.72], ['c', 0.12, 0.27, 0.33, 0.45, 0.60, 0.48], ['c', 0.21, 0.00, 0.33, -0.06, 0.54, -0.36], ['c', 0.15, -0.21, 0.54, -0.93, 0.78, -1.47], ['c', 0.15, -0.33, 0.18, -0.39, 0.30, -0.48], ['c', 0.18, -0.09, 0.45, 0.00, 0.51, 0.15], ['c', 0.03, 0.09, -7.11, 42.75, -7.17, 42.84], ['c', -0.03, 0.03, -0.15, 0.09, -0.24, 0.15], ['c', -0.18, 0.06, -0.24, 0.06, -0.45, 0.06], ['c', -0.24, 0.00, -0.30, 0.00, -0.48, -0.06], ['c', -0.09, -0.06, -0.21, -0.12, -0.21, -0.15], ['c', -0.06, -0.03, 0.03, -0.57, 0.84, -4.98], ['c', 0.51, -2.70, 0.93, -4.92, 0.90, -4.92], ['c', 0.00, 0.00, -0.15, 0.06, -0.36, 0.12], ['c', -0.78, 0.27, -1.62, 0.48, -2.31, 0.57], ['c', -0.15, 0.03, -0.54, 0.03, -0.81, 0.03], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.36, -0.54, 0.96, -0.87, 1.65, -0.93], ['c', 0.54, -0.03, 1.02, 0.15, 1.41, 0.54], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.09, 0.33, 0.18, 0.66, 0.21, 0.72], ['c', 0.12, 0.27, 0.33, 0.45, 0.63, 0.48], ['c', 0.12, 0.00, 0.18, 0.00, 0.30, -0.09], ['c', 0.42, -0.21, 1.14, -1.11, 1.50, -1.83], ['c', 0.12, -0.27, 0.12, -0.27, 0.54, -2.52], ['c', 0.24, -1.23, 0.42, -2.25, 0.39, -2.25], ['c', 0.00, 0.00, -0.24, 0.06, -0.51, 0.18], ['c', -1.26, 0.39, -2.25, 0.57, -3.06, 0.54], ['c', -0.42, -0.03, -0.75, -0.12, -1.11, -0.30], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.36, -0.54, 0.96, -0.87, 1.65, -0.93], ['c', 0.54, -0.03, 1.02, 0.15, 1.41, 0.54], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.15, 0.63, 0.21, 0.81, 0.33, 0.96], ['c', 0.18, 0.21, 0.51, 0.30, 0.75, 0.18], ['c', 0.36, -0.15, 1.05, -0.99, 1.41, -1.77], ['l', 0.15, -0.30], ['l', 0.42, -2.25], ['c', 0.21, -1.26, 0.42, -2.28, 0.39, -2.28], ['l', -0.51, 0.15], ['c', -1.11, 0.39, -1.89, 0.51, -2.70, 0.51], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.36, -0.54, 0.96, -0.87, 1.65, -0.93], ['c', 0.54, -0.03, 1.02, 0.15, 1.41, 0.54], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.15, 0.63, 0.21, 0.81, 0.33, 0.96], ['c', 0.18, 0.18, 0.48, 0.27, 0.72, 0.21], ['c', 0.33, -0.12, 1.14, -1.26, 1.41, -1.95], ['c', 0.00, -0.09, 0.21, -1.11, 0.45, -2.34], ['c', 0.21, -1.20, 0.39, -2.22, 0.39, -2.28], ['c', 0.03, -0.03, 0.00, -0.03, -0.45, 0.12], ['c', -0.57, 0.18, -1.20, 0.33, -1.71, 0.42], ['c', -0.30, 0.06, -0.51, 0.06, -0.93, 0.06], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.36, -0.54, 0.96, -0.87, 1.65, -0.93], ['c', 0.54, -0.03, 1.02, 0.15, 1.41, 0.54], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.09, 0.33, 0.18, 0.66, 0.21, 0.72], ['c', 0.12, 0.27, 0.33, 0.45, 0.60, 0.48], ['c', 0.18, 0.00, 0.36, -0.09, 0.57, -0.33], ['c', 0.33, -0.36, 0.78, -1.14, 0.93, -1.56], ['c', 0.03, -0.12, 0.24, -1.20, 0.45, -2.40], ['c', 0.24, -1.20, 0.42, -2.22, 0.42, -2.28], ['c', 0.03, -0.03, 0.00, -0.03, -0.39, 0.09], ['c', -1.05, 0.36, -1.80, 0.48, -2.58, 0.48], ['c', -0.63, 0.00, -0.84, -0.03, -1.29, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.33, -0.45, 0.84, -0.81, 1.38, -0.90], ['z']], w: 12.992, h: 43.883 },\n\t'accidentals.sharp': { d: [['M', 5.73, -11.19], ['c', 0.21, -0.12, 0.54, -0.03, 0.66, 0.24], ['c', 0.06, 0.12, 0.06, 0.21, 0.06, 2.31], ['c', 0.00, 1.23, 0.00, 2.22, 0.03, 2.22], ['c', 0.00, 0.00, 0.27, -0.12, 0.60, -0.24], ['c', 0.69, -0.27, 0.78, -0.30, 0.96, -0.15], ['c', 0.21, 0.15, 0.21, 0.18, 0.21, 1.38], ['c', 0.00, 1.02, 0.00, 1.11, -0.06, 1.20], ['c', -0.03, 0.06, -0.09, 0.12, -0.12, 0.15], ['c', -0.06, 0.03, -0.42, 0.21, -0.84, 0.36], ['l', -0.75, 0.33], ['l', -0.03, 2.43], ['c', 0.00, 1.32, 0.00, 2.43, 0.03, 2.43], ['c', 0.00, 0.00, 0.27, -0.12, 0.60, -0.24], ['c', 0.69, -0.27, 0.78, -0.30, 0.96, -0.15], ['c', 0.21, 0.15, 0.21, 0.18, 0.21, 1.38], ['c', 0.00, 1.02, 0.00, 1.11, -0.06, 1.20], ['c', -0.03, 0.06, -0.09, 0.12, -0.12, 0.15], ['c', -0.06, 0.03, -0.42, 0.21, -0.84, 0.36], ['l', -0.75, 0.33], ['l', -0.03, 2.52], ['c', 0.00, 2.28, -0.03, 2.55, -0.06, 2.64], ['c', -0.21, 0.36, -0.72, 0.36, -0.93, 0.00], ['c', -0.03, -0.09, -0.06, -0.33, -0.06, -2.43], ['l', 0.00, -2.31], ['l', -1.29, 0.51], ['l', -1.26, 0.51], ['l', 0.00, 2.43], ['c', 0.00, 2.58, 0.00, 2.52, -0.15, 2.67], ['c', -0.06, 0.09, -0.27, 0.18, -0.36, 0.18], ['c', -0.12, 0.00, -0.33, -0.09, -0.39, -0.18], ['c', -0.15, -0.15, -0.15, -0.09, -0.15, -2.43], ['c', 0.00, -1.23, 0.00, -2.22, -0.03, -2.22], ['c', 0.00, 0.00, -0.27, 0.12, -0.60, 0.24], ['c', -0.69, 0.27, -0.78, 0.30, -0.96, 0.15], ['c', -0.21, -0.15, -0.21, -0.18, -0.21, -1.38], ['c', 0.00, -1.02, 0.00, -1.11, 0.06, -1.20], ['c', 0.03, -0.06, 0.09, -0.12, 0.12, -0.15], ['c', 0.06, -0.03, 0.42, -0.21, 0.84, -0.36], ['l', 0.78, -0.33], ['l', 0.00, -2.43], ['c', 0.00, -1.32, 0.00, -2.43, -0.03, -2.43], ['c', 0.00, 0.00, -0.27, 0.12, -0.60, 0.24], ['c', -0.69, 0.27, -0.78, 0.30, -0.96, 0.15], ['c', -0.21, -0.15, -0.21, -0.18, -0.21, -1.38], ['c', 0.00, -1.02, 0.00, -1.11, 0.06, -1.20], ['c', 0.03, -0.06, 0.09, -0.12, 0.12, -0.15], ['c', 0.06, -0.03, 0.42, -0.21, 0.84, -0.36], ['l', 0.78, -0.33], ['l', 0.00, -2.52], ['c', 0.00, -2.28, 0.03, -2.55, 0.06, -2.64], ['c', 0.21, -0.36, 0.72, -0.36, 0.93, 0.00], ['c', 0.03, 0.09, 0.06, 0.33, 0.06, 2.43], ['l', 0.03, 2.31], ['l', 1.26, -0.51], ['l', 1.26, -0.51], ['l', 0.00, -2.43], ['c', 0.00, -2.28, 0.00, -2.43, 0.06, -2.55], ['c', 0.06, -0.12, 0.12, -0.18, 0.27, -0.24], ['z'], ['m', -0.33, 10.65], ['l', 0.00, -2.43], ['l', -1.29, 0.51], ['l', -1.26, 0.51], ['l', 0.00, 2.46], ['l', 0.00, 2.43], ['l', 0.09, -0.03], ['c', 0.06, -0.03, 0.63, -0.27, 1.29, -0.51], ['l', 1.17, -0.48], ['l', 0.00, -2.46], ['z']], w: 8.25, h: 22.462 },\n\t'accidentals.halfsharp': { d: [['M', 2.43, -10.05], ['c', 0.21, -0.12, 0.54, -0.03, 0.66, 0.24], ['c', 0.06, 0.12, 0.06, 0.21, 0.06, 2.01], ['c', 0.00, 1.05, 0.00, 1.89, 0.03, 1.89], ['l', 0.72, -0.48], ['c', 0.69, -0.48, 0.69, -0.51, 0.87, -0.51], ['c', 0.15, 0.00, 0.18, 0.03, 0.27, 0.09], ['c', 0.21, 0.15, 0.21, 0.18, 0.21, 1.41], ['c', 0.00, 1.11, -0.03, 1.14, -0.09, 1.23], ['c', -0.03, 0.03, -0.48, 0.39, -1.02, 0.75], ['l', -0.99, 0.66], ['l', 0.00, 2.37], ['c', 0.00, 1.32, 0.00, 2.37, 0.03, 2.37], ['l', 0.72, -0.48], ['c', 0.69, -0.48, 0.69, -0.51, 0.87, -0.51], ['c', 0.15, 0.00, 0.18, 0.03, 0.27, 0.09], ['c', 0.21, 0.15, 0.21, 0.18, 0.21, 1.41], ['c', 0.00, 1.11, -0.03, 1.14, -0.09, 1.23], ['c', -0.03, 0.03, -0.48, 0.39, -1.02, 0.75], ['l', -0.99, 0.66], ['l', 0.00, 2.25], ['c', 0.00, 1.95, 0.00, 2.28, -0.06, 2.37], ['c', -0.06, 0.12, -0.12, 0.21, -0.24, 0.27], ['c', -0.27, 0.12, -0.54, 0.03, -0.69, -0.24], ['c', -0.06, -0.12, -0.06, -0.21, -0.06, -2.01], ['c', 0.00, -1.05, 0.00, -1.89, -0.03, -1.89], ['l', -0.72, 0.48], ['c', -0.69, 0.48, -0.69, 0.48, -0.87, 0.48], ['c', -0.15, 0.00, -0.18, 0.00, -0.27, -0.06], ['c', -0.21, -0.15, -0.21, -0.18, -0.21, -1.41], ['c', 0.00, -1.11, 0.03, -1.14, 0.09, -1.23], ['c', 0.03, -0.03, 0.48, -0.39, 1.02, -0.75], ['l', 0.99, -0.66], ['l', 0.00, -2.37], ['c', 0.00, -1.32, 0.00, -2.37, -0.03, -2.37], ['l', -0.72, 0.48], ['c', -0.69, 0.48, -0.69, 0.48, -0.87, 0.48], ['c', -0.15, 0.00, -0.18, 0.00, -0.27, -0.06], ['c', -0.21, -0.15, -0.21, -0.18, -0.21, -1.41], ['c', 0.00, -1.11, 0.03, -1.14, 0.09, -1.23], ['c', 0.03, -0.03, 0.48, -0.39, 1.02, -0.75], ['l', 0.99, -0.66], ['l', 0.00, -2.25], ['c', 0.00, -2.13, 0.00, -2.28, 0.06, -2.40], ['c', 0.06, -0.12, 0.12, -0.18, 0.27, -0.24], ['z']], w: 5.25, h: 20.174 },\n\t'accidentals.nat': { d: [['M', 0.21, -11.40], ['c', 0.24, -0.06, 0.78, 0.00, 0.99, 0.15], ['c', 0.03, 0.03, 0.03, 0.48, 0.00, 2.61], ['c', -0.03, 1.44, -0.03, 2.61, -0.03, 2.61], ['c', 0.00, 0.03, 0.75, -0.09, 1.68, -0.24], ['c', 0.96, -0.18, 1.71, -0.27, 1.74, -0.27], ['c', 0.15, 0.03, 0.27, 0.15, 0.36, 0.30], ['l', 0.06, 0.12], ['l', 0.09, 8.67], ['c', 0.09, 6.96, 0.12, 8.67, 0.09, 8.67], ['c', -0.03, 0.03, -0.12, 0.06, -0.21, 0.09], ['c', -0.24, 0.09, -0.72, 0.09, -0.96, 0.00], ['c', -0.09, -0.03, -0.18, -0.06, -0.21, -0.09], ['c', -0.03, -0.03, -0.03, -0.48, 0.00, -2.61], ['c', 0.03, -1.44, 0.03, -2.61, 0.03, -2.61], ['c', 0.00, -0.03, -0.75, 0.09, -1.68, 0.24], ['c', -0.96, 0.18, -1.71, 0.27, -1.74, 0.27], ['c', -0.15, -0.03, -0.27, -0.15, -0.36, -0.30], ['l', -0.06, -0.15], ['l', -0.09, -7.53], ['c', -0.06, -4.14, -0.09, -8.04, -0.12, -8.67], ['l', 0.00, -1.11], ['l', 0.15, -0.06], ['c', 0.09, -0.03, 0.21, -0.06, 0.27, -0.09], ['z'], ['m', 3.75, 8.40], ['c', 0.00, -0.33, 0.00, -0.42, -0.03, -0.42], ['c', -0.12, 0.00, -2.79, 0.45, -2.79, 0.48], ['c', -0.03, 0.00, -0.09, 6.30, -0.09, 6.33], ['c', 0.03, 0.00, 2.79, -0.45, 2.82, -0.48], ['c', 0.00, 0.00, 0.09, -4.53, 0.09, -5.91], ['z']], w: 5.4, h: 22.8 },\n\t'accidentals.flat': { d: [['M', -0.36, -14.07], ['c', 0.33, -0.06, 0.87, 0.00, 1.08, 0.15], ['c', 0.06, 0.03, 0.06, 0.36, -0.03, 5.25], ['c', -0.06, 2.85, -0.09, 5.19, -0.09, 5.19], ['c', 0.00, 0.03, 0.12, -0.03, 0.24, -0.12], ['c', 0.63, -0.42, 1.41, -0.66, 2.19, -0.72], ['c', 0.81, -0.03, 1.47, 0.21, 2.04, 0.78], ['c', 0.57, 0.54, 0.87, 1.26, 0.93, 2.04], ['c', 0.03, 0.57, -0.09, 1.08, -0.36, 1.62], ['c', -0.42, 0.81, -1.02, 1.38, -2.82, 2.61], ['c', -1.14, 0.78, -1.44, 1.02, -1.80, 1.44], ['c', -0.18, 0.18, -0.39, 0.39, -0.45, 0.42], ['c', -0.27, 0.18, -0.57, 0.15, -0.81, -0.06], ['c', -0.06, -0.09, -0.12, -0.18, -0.15, -0.27], ['c', -0.03, -0.06, -0.09, -3.27, -0.18, -8.34], ['c', -0.09, -4.53, -0.15, -8.58, -0.18, -9.03], ['l', 0.00, -0.78], ['l', 0.12, -0.06], ['c', 0.06, -0.03, 0.18, -0.09, 0.27, -0.12], ['z'], ['m', 3.18, 11.01], ['c', -0.21, -0.12, -0.54, -0.15, -0.81, -0.06], ['c', -0.54, 0.15, -0.99, 0.63, -1.17, 1.26], ['c', -0.06, 0.30, -0.12, 2.88, -0.06, 3.87], ['c', 0.03, 0.42, 0.03, 0.81, 0.06, 0.90], ['l', 0.03, 0.12], ['l', 0.45, -0.39], ['c', 0.63, -0.54, 1.26, -1.17, 1.56, -1.59], ['c', 0.30, -0.42, 0.60, -0.99, 0.72, -1.41], ['c', 0.18, -0.69, 0.09, -1.47, -0.18, -2.07], ['c', -0.15, -0.30, -0.33, -0.51, -0.60, -0.63], ['z']], w: 6.75, h: 18.801 },\n\t'accidentals.halfflat': { d: [['M', 4.83, -14.07], ['c', 0.33, -0.06, 0.87, 0.00, 1.08, 0.15], ['c', 0.06, 0.03, 0.06, 0.60, -0.12, 9.06], ['c', -0.09, 5.55, -0.15, 9.06, -0.18, 9.12], ['c', -0.03, 0.09, -0.09, 0.18, -0.15, 0.27], ['c', -0.24, 0.21, -0.54, 0.24, -0.81, 0.06], ['c', -0.06, -0.03, -0.27, -0.24, -0.45, -0.42], ['c', -0.36, -0.42, -0.66, -0.66, -1.80, -1.44], ['c', -1.23, -0.84, -1.83, -1.32, -2.25, -1.77], ['c', -0.66, -0.78, -0.96, -1.56, -0.93, -2.46], ['c', 0.09, -1.41, 1.11, -2.58, 2.40, -2.79], ['c', 0.30, -0.06, 0.84, -0.03, 1.23, 0.06], ['c', 0.54, 0.12, 1.08, 0.33, 1.53, 0.63], ['c', 0.12, 0.09, 0.24, 0.15, 0.24, 0.12], ['c', 0.00, 0.00, -0.12, -8.37, -0.18, -9.75], ['l', 0.00, -0.66], ['l', 0.12, -0.06], ['c', 0.06, -0.03, 0.18, -0.09, 0.27, -0.12], ['z'], ['m', -1.65, 10.95], ['c', -0.60, -0.18, -1.08, 0.09, -1.38, 0.69], ['c', -0.27, 0.60, -0.36, 1.38, -0.18, 2.07], ['c', 0.12, 0.42, 0.42, 0.99, 0.72, 1.41], ['c', 0.30, 0.42, 0.93, 1.05, 1.56, 1.59], ['l', 0.48, 0.39], ['l', 0.00, -0.12], ['c', 0.03, -0.09, 0.03, -0.48, 0.06, -0.90], ['c', 0.03, -0.57, 0.03, -1.08, 0.00, -2.22], ['c', -0.03, -1.62, -0.03, -1.62, -0.24, -2.07], ['c', -0.21, -0.42, -0.60, -0.75, -1.02, -0.84], ['z']], w: 6.728, h: 18.801 },\n\t'accidentals.dblflat': { d: [['M', -0.36, -14.07], ['c', 0.33, -0.06, 0.87, 0.00, 1.08, 0.15], ['c', 0.06, 0.03, 0.06, 0.36, -0.03, 5.25], ['c', -0.06, 2.85, -0.09, 5.19, -0.09, 5.19], ['c', 0.00, 0.03, 0.12, -0.03, 0.24, -0.12], ['c', 0.63, -0.42, 1.41, -0.66, 2.19, -0.72], ['c', 0.81, -0.03, 1.47, 0.21, 2.04, 0.78], ['c', 0.57, 0.54, 0.87, 1.26, 0.93, 2.04], ['c', 0.03, 0.57, -0.09, 1.08, -0.36, 1.62], ['c', -0.42, 0.81, -1.02, 1.38, -2.82, 2.61], ['c', -1.14, 0.78, -1.44, 1.02, -1.80, 1.44], ['c', -0.18, 0.18, -0.39, 0.39, -0.45, 0.42], ['c', -0.27, 0.18, -0.57, 0.15, -0.81, -0.06], ['c', -0.06, -0.09, -0.12, -0.18, -0.15, -0.27], ['c', -0.03, -0.06, -0.09, -3.27, -0.18, -8.34], ['c', -0.09, -4.53, -0.15, -8.58, -0.18, -9.03], ['l', 0.00, -0.78], ['l', 0.12, -0.06], ['c', 0.06, -0.03, 0.18, -0.09, 0.27, -0.12], ['z'], ['m', 3.18, 11.01], ['c', -0.21, -0.12, -0.54, -0.15, -0.81, -0.06], ['c', -0.54, 0.15, -0.99, 0.63, -1.17, 1.26], ['c', -0.06, 0.30, -0.12, 2.88, -0.06, 3.87], ['c', 0.03, 0.42, 0.03, 0.81, 0.06, 0.90], ['l', 0.03, 0.12], ['l', 0.45, -0.39], ['c', 0.63, -0.54, 1.26, -1.17, 1.56, -1.59], ['c', 0.30, -0.42, 0.60, -0.99, 0.72, -1.41], ['c', 0.18, -0.69, 0.09, -1.47, -0.18, -2.07], ['c', -0.15, -0.30, -0.33, -0.51, -0.60, -0.63], ['z'], ['m', 3, -11], ['c', 0.33, -0.06, 0.87, 0.00, 1.08, 0.15], ['c', 0.06, 0.03, 0.06, 0.36, -0.03, 5.25], ['c', -0.06, 2.85, -0.09, 5.19, -0.09, 5.19], ['c', 0.00, 0.03, 0.12, -0.03, 0.24, -0.12], ['c', 0.63, -0.42, 1.41, -0.66, 2.19, -0.72], ['c', 0.81, -0.03, 1.47, 0.21, 2.04, 0.78], ['c', 0.57, 0.54, 0.87, 1.26, 0.93, 2.04], ['c', 0.03, 0.57, -0.09, 1.08, -0.36, 1.62], ['c', -0.42, 0.81, -1.02, 1.38, -2.82, 2.61], ['c', -1.14, 0.78, -1.44, 1.02, -1.80, 1.44], ['c', -0.18, 0.18, -0.39, 0.39, -0.45, 0.42], ['c', -0.27, 0.18, -0.57, 0.15, -0.81, -0.06], ['c', -0.06, -0.09, -0.12, -0.18, -0.15, -0.27], ['c', -0.03, -0.06, -0.09, -3.27, -0.18, -8.34], ['c', -0.09, -4.53, -0.15, -8.58, -0.18, -9.03], ['l', 0.00, -0.78], ['l', 0.12, -0.06], ['c', 0.06, -0.03, 0.18, -0.09, 0.27, -0.12], ['z'], ['m', 3.18, 11.01], ['c', -0.21, -0.12, -0.54, -0.15, -0.81, -0.06], ['c', -0.54, 0.15, -0.99, 0.63, -1.17, 1.26], ['c', -0.06, 0.30, -0.12, 2.88, -0.06, 3.87], ['c', 0.03, 0.42, 0.03, 0.81, 0.06, 0.90], ['l', 0.03, 0.12], ['l', 0.45, -0.39], ['c', 0.63, -0.54, 1.26, -1.17, 1.56, -1.59], ['c', 0.30, -0.42, 0.60, -0.99, 0.72, -1.41], ['c', 0.18, -0.69, 0.09, -1.47, -0.18, -2.07], ['c', -0.15, -0.30, -0.33, -0.51, -0.60, -0.63], ['z']], w: 12.1, h: 18.804 },\n\t'accidentals.dblsharp': { d: [['M', -0.18, -3.96], ['c', 0.06, -0.03, 0.12, -0.06, 0.15, -0.06], ['c', 0.09, 0.00, 2.76, 0.27, 2.79, 0.30], ['c', 0.12, 0.03, 0.15, 0.12, 0.15, 0.51], ['c', 0.06, 0.96, 0.24, 1.59, 0.57, 2.10], ['c', 0.06, 0.09, 0.15, 0.21, 0.18, 0.24], ['l', 0.09, 0.06], ['l', 0.09, -0.06], ['c', 0.03, -0.03, 0.12, -0.15, 0.18, -0.24], ['c', 0.33, -0.51, 0.51, -1.14, 0.57, -2.10], ['c', 0.00, -0.39, 0.03, -0.45, 0.12, -0.51], ['c', 0.03, 0.00, 0.66, -0.09, 1.44, -0.15], ['c', 1.47, -0.15, 1.50, -0.15, 1.56, -0.03], ['c', 0.03, 0.06, 0.00, 0.42, -0.09, 1.44], ['c', -0.09, 0.72, -0.15, 1.35, -0.15, 1.38], ['c', 0.00, 0.03, -0.03, 0.09, -0.06, 0.12], ['c', -0.06, 0.06, -0.12, 0.09, -0.51, 0.09], ['c', -1.08, 0.06, -1.80, 0.30, -2.28, 0.75], ['l', -0.12, 0.09], ['l', 0.09, 0.09], ['c', 0.12, 0.15, 0.39, 0.33, 0.63, 0.45], ['c', 0.42, 0.18, 0.96, 0.27, 1.68, 0.33], ['c', 0.39, 0.00, 0.45, 0.03, 0.51, 0.09], ['c', 0.03, 0.03, 0.06, 0.09, 0.06, 0.12], ['c', 0.00, 0.03, 0.06, 0.66, 0.15, 1.38], ['c', 0.09, 1.02, 0.12, 1.38, 0.09, 1.44], ['c', -0.06, 0.12, -0.09, 0.12, -1.56, -0.03], ['c', -0.78, -0.06, -1.41, -0.15, -1.44, -0.15], ['c', -0.09, -0.06, -0.12, -0.12, -0.12, -0.54], ['c', -0.06, -0.93, -0.24, -1.56, -0.57, -2.07], ['c', -0.06, -0.09, -0.15, -0.21, -0.18, -0.24], ['l', -0.09, -0.06], ['l', -0.09, 0.06], ['c', -0.03, 0.03, -0.12, 0.15, -0.18, 0.24], ['c', -0.33, 0.51, -0.51, 1.14, -0.57, 2.07], ['c', 0.00, 0.42, -0.03, 0.48, -0.12, 0.54], ['c', -0.03, 0.00, -0.66, 0.09, -1.44, 0.15], ['c', -1.47, 0.15, -1.50, 0.15, -1.56, 0.03], ['c', -0.03, -0.06, 0.00, -0.42, 0.09, -1.44], ['c', 0.09, -0.72, 0.15, -1.35, 0.15, -1.38], ['c', 0.00, -0.03, 0.03, -0.09, 0.06, -0.12], ['c', 0.06, -0.06, 0.12, -0.09, 0.51, -0.09], ['c', 0.72, -0.06, 1.26, -0.15, 1.68, -0.33], ['c', 0.24, -0.12, 0.51, -0.30, 0.63, -0.45], ['l', 0.09, -0.09], ['l', -0.12, -0.09], ['c', -0.48, -0.45, -1.20, -0.69, -2.28, -0.75], ['c', -0.39, 0.00, -0.45, -0.03, -0.51, -0.09], ['c', -0.03, -0.03, -0.06, -0.09, -0.06, -0.12], ['c', 0.00, -0.03, -0.06, -0.63, -0.12, -1.38], ['c', -0.09, -0.72, -0.15, -1.35, -0.15, -1.38], ['z']], w: 7.95, h: 7.977 },\n\t'dots.dot': { d: [['M', 1.32, -1.68], ['c', 0.09, -0.03, 0.27, -0.06, 0.39, -0.06], ['c', 0.96, 0.00, 1.74, 0.78, 1.74, 1.71], ['c', 0.00, 0.96, -0.78, 1.74, -1.71, 1.74], ['c', -0.96, 0.00, -1.74, -0.78, -1.74, -1.71], ['c', 0.00, -0.78, 0.54, -1.50, 1.32, -1.68], ['z']], w: 3.45, h: 3.45 },\n\t'noteheads.dbl': { d: [['M', -0.69, -4.02], ['c', 0.18, -0.09, 0.36, -0.09, 0.54, 0.00], ['c', 0.18, 0.09, 0.24, 0.15, 0.33, 0.30], ['c', 0.06, 0.15, 0.06, 0.18, 0.06, 1.41], ['l', 0.00, 1.23], ['l', 0.12, -0.18], ['c', 0.72, -1.26, 2.64, -2.31, 4.86, -2.64], ['c', 0.81, -0.15, 1.11, -0.15, 2.13, -0.15], ['c', 0.99, 0.00, 1.29, 0.00, 2.10, 0.15], ['c', 0.75, 0.12, 1.38, 0.27, 2.04, 0.54], ['c', 1.35, 0.51, 2.34, 1.26, 2.82, 2.10], ['l', 0.12, 0.18], ['l', 0.00, -1.23], ['c', 0.00, -1.20, 0.00, -1.26, 0.06, -1.38], ['c', 0.09, -0.18, 0.15, -0.24, 0.33, -0.33], ['c', 0.18, -0.09, 0.36, -0.09, 0.54, 0.00], ['c', 0.18, 0.09, 0.24, 0.15, 0.33, 0.30], ['l', 0.06, 0.15], ['l', 0.00, 3.54], ['l', 0.00, 3.54], ['l', -0.06, 0.15], ['c', -0.09, 0.18, -0.15, 0.24, -0.33, 0.33], ['c', -0.18, 0.09, -0.36, 0.09, -0.54, 0.00], ['c', -0.18, -0.09, -0.24, -0.15, -0.33, -0.33], ['c', -0.06, -0.12, -0.06, -0.18, -0.06, -1.38], ['l', 0.00, -1.23], ['l', -0.12, 0.18], ['c', -0.48, 0.84, -1.47, 1.59, -2.82, 2.10], ['c', -0.84, 0.33, -1.71, 0.54, -2.85, 0.66], ['c', -0.45, 0.06, -2.16, 0.06, -2.61, 0.00], ['c', -1.14, -0.12, -2.01, -0.33, -2.85, -0.66], ['c', -1.35, -0.51, -2.34, -1.26, -2.82, -2.10], ['l', -0.12, -0.18], ['l', 0.00, 1.23], ['c', 0.00, 1.23, 0.00, 1.26, -0.06, 1.38], ['c', -0.09, 0.18, -0.15, 0.24, -0.33, 0.33], ['c', -0.18, 0.09, -0.36, 0.09, -0.54, 0.00], ['c', -0.18, -0.09, -0.24, -0.15, -0.33, -0.33], ['l', -0.06, -0.15], ['l', 0.00, -3.54], ['c', 0.00, -3.48, 0.00, -3.54, 0.06, -3.66], ['c', 0.09, -0.18, 0.15, -0.24, 0.33, -0.33], ['z'], ['m', 7.71, 0.63], ['c', -0.36, -0.06, -0.90, -0.06, -1.14, 0.00], ['c', -0.30, 0.03, -0.66, 0.24, -0.87, 0.42], ['c', -0.60, 0.54, -0.90, 1.62, -0.75, 2.82], ['c', 0.12, 0.93, 0.51, 1.68, 1.11, 2.31], ['c', 0.75, 0.72, 1.83, 1.20, 2.85, 1.26], ['c', 1.05, 0.06, 1.83, -0.54, 2.10, -1.65], ['c', 0.21, -0.90, 0.12, -1.95, -0.24, -2.82], ['c', -0.36, -0.81, -1.08, -1.53, -1.95, -1.95], ['c', -0.30, -0.15, -0.78, -0.30, -1.11, -0.39], ['z']], w: 16.83, h: 8.145 },\n\t'noteheads.whole': { d: [['M', 6.51, -4.05], ['c', 0.51, -0.03, 2.01, 0.00, 2.52, 0.03], ['c', 1.41, 0.18, 2.64, 0.51, 3.72, 1.08], ['c', 1.20, 0.63, 1.95, 1.41, 2.19, 2.31], ['c', 0.09, 0.33, 0.09, 0.90, 0.00, 1.23], ['c', -0.24, 0.90, -0.99, 1.68, -2.19, 2.31], ['c', -1.08, 0.57, -2.28, 0.90, -3.75, 1.08], ['c', -0.66, 0.06, -2.31, 0.06, -2.97, 0.00], ['c', -1.47, -0.18, -2.67, -0.51, -3.75, -1.08], ['c', -1.20, -0.63, -1.95, -1.41, -2.19, -2.31], ['c', -0.09, -0.33, -0.09, -0.90, 0.00, -1.23], ['c', 0.24, -0.90, 0.99, -1.68, 2.19, -2.31], ['c', 1.20, -0.63, 2.61, -0.99, 4.23, -1.11], ['z'], ['m', 0.57, 0.66], ['c', -0.87, -0.15, -1.53, 0.00, -2.04, 0.51], ['c', -0.15, 0.15, -0.24, 0.27, -0.33, 0.48], ['c', -0.24, 0.51, -0.36, 1.08, -0.33, 1.77], ['c', 0.03, 0.69, 0.18, 1.26, 0.42, 1.77], ['c', 0.60, 1.17, 1.74, 1.98, 3.18, 2.22], ['c', 1.11, 0.21, 1.95, -0.15, 2.34, -0.99], ['c', 0.24, -0.51, 0.36, -1.08, 0.33, -1.80], ['c', -0.06, -1.11, -0.45, -2.04, -1.17, -2.76], ['c', -0.63, -0.63, -1.47, -1.05, -2.40, -1.20], ['z']], w: 14.985, h: 8.097 },\n\t'noteheads.half': { d: [['M', 7.44, -4.05], ['c', 0.06, -0.03, 0.27, -0.03, 0.48, -0.03], ['c', 1.05, 0.00, 1.71, 0.24, 2.10, 0.81], ['c', 0.42, 0.60, 0.45, 1.35, 0.18, 2.40], ['c', -0.42, 1.59, -1.14, 2.73, -2.16, 3.39], ['c', -1.41, 0.93, -3.18, 1.44, -5.40, 1.53], ['c', -1.17, 0.03, -1.89, -0.21, -2.28, -0.81], ['c', -0.42, -0.60, -0.45, -1.35, -0.18, -2.40], ['c', 0.42, -1.59, 1.14, -2.73, 2.16, -3.39], ['c', 0.63, -0.42, 1.23, -0.72, 1.98, -0.96], ['c', 0.90, -0.30, 1.65, -0.42, 3.12, -0.54], ['z'], ['m', 1.29, 0.87], ['c', -0.27, -0.09, -0.63, -0.12, -0.90, -0.03], ['c', -0.72, 0.24, -1.53, 0.69, -3.27, 1.80], ['c', -2.34, 1.50, -3.30, 2.25, -3.57, 2.79], ['c', -0.36, 0.72, -0.06, 1.50, 0.66, 1.77], ['c', 0.24, 0.12, 0.69, 0.09, 0.99, 0.00], ['c', 0.84, -0.30, 1.92, -0.93, 4.14, -2.37], ['c', 1.62, -1.08, 2.37, -1.71, 2.61, -2.19], ['c', 0.36, -0.72, 0.06, -1.50, -0.66, -1.77], ['z']], w: 10.37, h: 8.132 },\n\t'noteheads.quarter': { d: [['M', 6.09, -4.05], ['c', 0.36, -0.03, 1.20, 0.00, 1.53, 0.06], ['c', 1.17, 0.24, 1.89, 0.84, 2.16, 1.83], ['c', 0.06, 0.18, 0.06, 0.30, 0.06, 0.66], ['c', 0.00, 0.45, 0.00, 0.63, -0.15, 1.08], ['c', -0.66, 2.04, -3.06, 3.93, -5.52, 4.38], ['c', -0.54, 0.09, -1.44, 0.09, -1.83, 0.03], ['c', -1.23, -0.27, -1.98, -0.87, -2.25, -1.86], ['c', -0.06, -0.18, -0.06, -0.30, -0.06, -0.66], ['c', 0.00, -0.45, 0.00, -0.63, 0.15, -1.08], ['c', 0.24, -0.78, 0.75, -1.53, 1.44, -2.22], ['c', 1.20, -1.20, 2.85, -2.01, 4.47, -2.22], ['z']], w: 9.81, h: 8.094 },\n\t'noteheads.slash.nostem': { d: [['M', 9.30, -7.77], ['c', 0.06, -0.06, 0.18, -0.06, 1.71, -0.06], ['l', 1.65, 0.00], ['l', 0.09, 0.09], ['c', 0.06, 0.06, 0.06, 0.09, 0.06, 0.15], ['c', -0.03, 0.12, -9.21, 15.24, -9.30, 15.33], ['c', -0.06, 0.06, -0.18, 0.06, -1.71, 0.06], ['l', -1.65, 0.00], ['l', -0.09, -0.09], ['c', -0.06, -0.06, -0.06, -0.09, -0.06, -0.15], ['c', 0.03, -0.12, 9.21, -15.24, 9.30, -15.33], ['z']], w: 12.81, h: 15.63 },\n\t'noteheads.indeterminate': { d: [['M', 0.78, -4.05], ['c', 0.12, -0.03, 0.24, -0.03, 0.36, 0.03], ['c', 0.03, 0.03, 0.93, 0.72, 1.95, 1.56], ['l', 1.86, 1.50], ['l', 1.86, -1.50], ['c', 1.02, -0.84, 1.92, -1.53, 1.95, -1.56], ['c', 0.21, -0.12, 0.33, -0.09, 0.75, 0.24], ['c', 0.30, 0.27, 0.36, 0.36, 0.36, 0.54], ['c', 0.00, 0.03, -0.03, 0.12, -0.06, 0.18], ['c', -0.03, 0.06, -0.90, 0.75, -1.89, 1.56], ['l', -1.80, 1.47], ['c', 0.00, 0.03, 0.81, 0.69, 1.80, 1.50], ['c', 0.99, 0.81, 1.86, 1.50, 1.89, 1.56], ['c', 0.03, 0.06, 0.06, 0.15, 0.06, 0.18], ['c', 0.00, 0.18, -0.06, 0.27, -0.36, 0.54], ['c', -0.42, 0.33, -0.54, 0.36, -0.75, 0.24], ['c', -0.03, -0.03, -0.93, -0.72, -1.95, -1.56], ['l', -1.86, -1.50], ['l', -1.86, 1.50], ['c', -1.02, 0.84, -1.92, 1.53, -1.95, 1.56], ['c', -0.21, 0.12, -0.33, 0.09, -0.75, -0.24], ['c', -0.30, -0.27, -0.36, -0.36, -0.36, -0.54], ['c', 0.00, -0.03, 0.03, -0.12, 0.06, -0.18], ['c', 0.03, -0.06, 0.90, -0.75, 1.89, -1.56], ['l', 1.80, -1.47], ['c', 0.00, -0.03, -0.81, -0.69, -1.80, -1.50], ['c', -0.99, -0.81, -1.86, -1.50, -1.89, -1.56], ['c', -0.06, -0.12, -0.09, -0.21, -0.03, -0.36], ['c', 0.03, -0.09, 0.57, -0.57, 0.72, -0.63], ['z']], w: 9.843, h: 8.139 },\n\t'scripts.ufermata': { d: [['M', -0.75, -10.77], ['c', 0.12, 0.00, 0.45, -0.03, 0.69, -0.03], ['c', 2.91, -0.03, 5.55, 1.53, 7.41, 4.35], ['c', 1.17, 1.71, 1.95, 3.72, 2.43, 6.03], ['c', 0.12, 0.51, 0.12, 0.57, 0.03, 0.69], ['c', -0.12, 0.21, -0.48, 0.27, -0.69, 0.12], ['c', -0.12, -0.09, -0.18, -0.24, -0.27, -0.69], ['c', -0.78, -3.63, -3.42, -6.54, -6.78, -7.38], ['c', -0.78, -0.21, -1.20, -0.24, -2.07, -0.24], ['c', -0.63, 0.00, -0.84, 0.00, -1.20, 0.06], ['c', -1.83, 0.27, -3.42, 1.08, -4.80, 2.37], ['c', -1.41, 1.35, -2.40, 3.21, -2.85, 5.19], ['c', -0.09, 0.45, -0.15, 0.60, -0.27, 0.69], ['c', -0.21, 0.15, -0.57, 0.09, -0.69, -0.12], ['c', -0.09, -0.12, -0.09, -0.18, 0.03, -0.69], ['c', 0.33, -1.62, 0.78, -3.00, 1.47, -4.38], ['c', 1.77, -3.54, 4.44, -5.67, 7.56, -5.97], ['z'], ['m', 0.33, 7.47], ['c', 1.38, -0.30, 2.58, 0.90, 2.31, 2.25], ['c', -0.15, 0.72, -0.78, 1.35, -1.47, 1.50], ['c', -1.38, 0.27, -2.58, -0.93, -2.31, -2.31], ['c', 0.15, -0.69, 0.78, -1.29, 1.47, -1.44], ['z']], w: 19.748, h: 11.289 },\n\t'scripts.dfermata': { d: [['M', -9.63, -0.42], ['c', 0.15, -0.09, 0.36, -0.06, 0.51, 0.03], ['c', 0.12, 0.09, 0.18, 0.24, 0.27, 0.66], ['c', 0.78, 3.66, 3.42, 6.57, 6.78, 7.41], ['c', 0.78, 0.21, 1.20, 0.24, 2.07, 0.24], ['c', 0.63, 0.00, 0.84, 0.00, 1.20, -0.06], ['c', 1.83, -0.27, 3.42, -1.08, 4.80, -2.37], ['c', 1.41, -1.35, 2.40, -3.21, 2.85, -5.22], ['c', 0.09, -0.42, 0.15, -0.57, 0.27, -0.66], ['c', 0.21, -0.15, 0.57, -0.09, 0.69, 0.12], ['c', 0.09, 0.12, 0.09, 0.18, -0.03, 0.69], ['c', -0.33, 1.62, -0.78, 3.00, -1.47, 4.38], ['c', -1.92, 3.84, -4.89, 6.00, -8.31, 6.00], ['c', -3.42, 0.00, -6.39, -2.16, -8.31, -6.00], ['c', -0.48, -0.96, -0.84, -1.92, -1.14, -2.97], ['c', -0.18, -0.69, -0.42, -1.74, -0.42, -1.92], ['c', 0.00, -0.12, 0.09, -0.27, 0.24, -0.33], ['z'], ['m', 9.21, 0.00], ['c', 1.20, -0.27, 2.34, 0.63, 2.34, 1.86], ['c', 0.00, 0.90, -0.66, 1.68, -1.50, 1.89], ['c', -1.38, 0.27, -2.58, -0.93, -2.31, -2.31], ['c', 0.15, -0.69, 0.78, -1.29, 1.47, -1.44], ['z']], w: 19.744, h: 11.274 },\n\t'scripts.sforzato': { d: [['M', -6.45, -3.69], ['c', 0.06, -0.03, 0.15, -0.06, 0.18, -0.06], ['c', 0.06, 0.00, 2.85, 0.72, 6.24, 1.59], ['l', 6.33, 1.65], ['c', 0.33, 0.06, 0.45, 0.21, 0.45, 0.51], ['c', 0.00, 0.30, -0.12, 0.45, -0.45, 0.51], ['l', -6.33, 1.65], ['c', -3.39, 0.87, -6.18, 1.59, -6.21, 1.59], ['c', -0.21, 0.00, -0.48, -0.24, -0.51, -0.45], ['c', 0.00, -0.15, 0.06, -0.36, 0.18, -0.45], ['c', 0.09, -0.06, 0.87, -0.27, 3.84, -1.05], ['c', 2.04, -0.54, 3.84, -0.99, 4.02, -1.02], ['c', 0.15, -0.06, 1.14, -0.24, 2.22, -0.42], ['c', 1.05, -0.18, 1.92, -0.36, 1.92, -0.36], ['c', 0.00, 0.00, -0.87, -0.18, -1.92, -0.36], ['c', -1.08, -0.18, -2.07, -0.36, -2.22, -0.42], ['c', -0.18, -0.03, -1.98, -0.48, -4.02, -1.02], ['c', -2.97, -0.78, -3.75, -0.99, -3.84, -1.05], ['c', -0.12, -0.09, -0.18, -0.30, -0.18, -0.45], ['c', 0.03, -0.15, 0.15, -0.30, 0.30, -0.39], ['z']], w: 13.5, h: 7.5 },\n\t'scripts.staccato': { d: [['M', -0.36, -1.47], ['c', 0.93, -0.21, 1.86, 0.51, 1.86, 1.47], ['c', 0.00, 0.93, -0.87, 1.65, -1.80, 1.47], ['c', -0.54, -0.12, -1.02, -0.57, -1.14, -1.08], ['c', -0.21, -0.81, 0.27, -1.65, 1.08, -1.86], ['z']], w: 2.989, h: 3.004 },\n\t'scripts.tenuto': { d: [['M', -4.20, -0.48], ['l', 0.12, -0.06], ['l', 4.08, 0.00], ['l', 4.08, 0.00], ['l', 0.12, 0.06], ['c', 0.39, 0.21, 0.39, 0.75, 0.00, 0.96], ['l', -0.12, 0.06], ['l', -4.08, 0.00], ['l', -4.08, 0.00], ['l', -0.12, -0.06], ['c', -0.39, -0.21, -0.39, -0.75, 0.00, -0.96], ['z']], w: 8.985, h: 1.08 },\n\t'scripts.umarcato': { d: [['M', -0.15, -8.19], ['c', 0.15, -0.12, 0.36, -0.03, 0.45, 0.15], ['c', 0.21, 0.42, 3.45, 7.65, 3.45, 7.71], ['c', 0.00, 0.12, -0.12, 0.27, -0.21, 0.30], ['c', -0.03, 0.03, -0.51, 0.03, -1.14, 0.03], ['c', -1.05, 0.00, -1.08, 0.00, -1.17, -0.06], ['c', -0.09, -0.06, -0.24, -0.36, -1.17, -2.40], ['c', -0.57, -1.29, -1.05, -2.34, -1.08, -2.34], ['c', 0.00, -0.03, -0.51, 1.02, -1.08, 2.34], ['c', -0.93, 2.07, -1.08, 2.34, -1.14, 2.40], ['c', -0.06, 0.03, -0.15, 0.06, -0.18, 0.06], ['c', -0.15, 0.00, -0.33, -0.18, -0.33, -0.33], ['c', 0.00, -0.06, 3.24, -7.32, 3.45, -7.71], ['c', 0.03, -0.06, 0.09, -0.15, 0.15, -0.15], ['z']], w: 7.5, h: 8.245 },\n\t'scripts.dmarcato': { d: [['M', -3.57, 0.03], ['c', 0.03, 0.00, 0.57, -0.03, 1.17, -0.03], ['c', 1.05, 0.00, 1.08, 0.00, 1.17, 0.06], ['c', 0.09, 0.06, 0.24, 0.36, 1.17, 2.40], ['c', 0.57, 1.29, 1.05, 2.34, 1.08, 2.34], ['c', 0.00, 0.03, 0.51, -1.02, 1.08, -2.34], ['c', 0.93, -2.07, 1.08, -2.34, 1.14, -2.40], ['c', 0.06, -0.03, 0.15, -0.06, 0.18, -0.06], ['c', 0.15, 0.00, 0.33, 0.18, 0.33, 0.33], ['c', 0.00, 0.09, -3.45, 7.74, -3.54, 7.83], ['c', -0.12, 0.12, -0.30, 0.12, -0.42, 0.00], ['c', -0.09, -0.09, -3.54, -7.74, -3.54, -7.83], ['c', 0.00, -0.09, 0.12, -0.27, 0.18, -0.30], ['z']], w: 7.5, h: 8.25 },\n\t'scripts.stopped': { d: [['M', -0.27, -4.08], ['c', 0.18, -0.09, 0.36, -0.09, 0.54, 0.00], ['c', 0.18, 0.09, 0.24, 0.15, 0.33, 0.30], ['l', 0.06, 0.15], ['l', 0.00, 1.50], ['l', 0.00, 1.47], ['l', 1.47, 0.00], ['l', 1.50, 0.00], ['l', 0.15, 0.06], ['c', 0.15, 0.09, 0.21, 0.15, 0.30, 0.33], ['c', 0.09, 0.18, 0.09, 0.36, 0.00, 0.54], ['c', -0.09, 0.18, -0.15, 0.24, -0.33, 0.33], ['c', -0.12, 0.06, -0.18, 0.06, -1.62, 0.06], ['l', -1.47, 0.00], ['l', 0.00, 1.47], ['l', 0.00, 1.47], ['l', -0.06, 0.15], ['c', -0.09, 0.18, -0.15, 0.24, -0.33, 0.33], ['c', -0.18, 0.09, -0.36, 0.09, -0.54, 0.00], ['c', -0.18, -0.09, -0.24, -0.15, -0.33, -0.33], ['l', -0.06, -0.15], ['l', 0.00, -1.47], ['l', 0.00, -1.47], ['l', -1.47, 0.00], ['c', -1.44, 0.00, -1.50, 0.00, -1.62, -0.06], ['c', -0.18, -0.09, -0.24, -0.15, -0.33, -0.33], ['c', -0.09, -0.18, -0.09, -0.36, 0.00, -0.54], ['c', 0.09, -0.18, 0.15, -0.24, 0.33, -0.33], ['l', 0.15, -0.06], ['l', 1.47, 0.00], ['l', 1.47, 0.00], ['l', 0.00, -1.47], ['c', 0.00, -1.44, 0.00, -1.50, 0.06, -1.62], ['c', 0.09, -0.18, 0.15, -0.24, 0.33, -0.33], ['z']], w: 8.295, h: 8.295 },\n\t'scripts.upbow': { d: [['M', -4.65, -15.54], ['c', 0.12, -0.09, 0.36, -0.06, 0.48, 0.03], ['c', 0.03, 0.03, 0.09, 0.09, 0.12, 0.15], ['c', 0.03, 0.06, 0.66, 2.13, 1.41, 4.62], ['c', 1.35, 4.41, 1.38, 4.56, 2.01, 6.96], ['l', 0.63, 2.46], ['l', 0.63, -2.46], ['c', 0.63, -2.40, 0.66, -2.55, 2.01, -6.96], ['c', 0.75, -2.49, 1.38, -4.56, 1.41, -4.62], ['c', 0.06, -0.15, 0.18, -0.21, 0.36, -0.24], ['c', 0.15, 0.00, 0.30, 0.06, 0.39, 0.18], ['c', 0.15, 0.21, 0.24, -0.18, -2.10, 7.56], ['c', -1.20, 3.96, -2.22, 7.32, -2.25, 7.41], ['c', 0.00, 0.12, -0.06, 0.27, -0.09, 0.30], ['c', -0.12, 0.21, -0.60, 0.21, -0.72, 0.00], ['c', -0.03, -0.03, -0.09, -0.18, -0.09, -0.30], ['c', -0.03, -0.09, -1.05, -3.45, -2.25, -7.41], ['c', -2.34, -7.74, -2.25, -7.35, -2.10, -7.56], ['c', 0.03, -0.03, 0.09, -0.09, 0.15, -0.12], ['z']], w: 9.73, h: 15.608 },\n\t'scripts.downbow': { d: [['M', -5.55, -9.93], ['l', 0.09, -0.06], ['l', 5.46, 0.00], ['l', 5.46, 0.00], ['l', 0.09, 0.06], ['l', 0.06, 0.09], ['l', 0.00, 4.77], ['c', 0.00, 5.28, 0.00, 4.89, -0.18, 5.01], ['c', -0.18, 0.12, -0.42, 0.06, -0.54, -0.12], ['c', -0.06, -0.09, -0.06, -0.18, -0.06, -2.97], ['l', 0.00, -2.85], ['l', -4.83, 0.00], ['l', -4.83, 0.00], ['l', 0.00, 2.85], ['c', 0.00, 2.79, 0.00, 2.88, -0.06, 2.97], ['c', -0.15, 0.24, -0.51, 0.24, -0.66, 0.00], ['c', -0.06, -0.09, -0.06, -0.21, -0.06, -4.89], ['l', 0.00, -4.77], ['z']], w: 11.22, h: 9.992 },\n\t'scripts.turn': { d: [['M', -4.77, -3.90], ['c', 0.36, -0.06, 1.05, -0.06, 1.44, 0.03], ['c', 0.78, 0.15, 1.50, 0.51, 2.34, 1.14], ['c', 0.60, 0.45, 1.05, 0.87, 2.22, 2.01], ['c', 1.11, 1.08, 1.62, 1.50, 2.22, 1.86], ['c', 0.60, 0.36, 1.32, 0.57, 1.92, 0.57], ['c', 0.90, 0.00, 1.71, -0.57, 1.89, -1.35], ['c', 0.24, -0.93, -0.39, -1.89, -1.35, -2.10], ['l', -0.15, -0.06], ['l', -0.09, 0.15], ['c', -0.03, 0.09, -0.15, 0.24, -0.24, 0.33], ['c', -0.72, 0.72, -2.04, 0.54, -2.49, -0.36], ['c', -0.48, -0.93, 0.03, -1.86, 1.17, -2.19], ['c', 0.30, -0.09, 1.02, -0.09, 1.35, 0.00], ['c', 0.99, 0.27, 1.74, 0.87, 2.25, 1.83], ['c', 0.69, 1.41, 0.63, 3.00, -0.21, 4.26], ['c', -0.21, 0.30, -0.69, 0.81, -0.99, 1.02], ['c', -0.30, 0.21, -0.84, 0.45, -1.17, 0.54], ['c', -1.23, 0.36, -2.49, 0.15, -3.72, -0.60], ['c', -0.75, -0.48, -1.41, -1.02, -2.85, -2.46], ['c', -1.11, -1.08, -1.62, -1.50, -2.22, -1.86], ['c', -0.60, -0.36, -1.32, -0.57, -1.92, -0.57], ['c', -0.90, 0.00, -1.71, 0.57, -1.89, 1.35], ['c', -0.24, 0.93, 0.39, 1.89, 1.35, 2.10], ['l', 0.15, 0.06], ['l', 0.09, -0.15], ['c', 0.03, -0.09, 0.15, -0.24, 0.24, -0.33], ['c', 0.72, -0.72, 2.04, -0.54, 2.49, 0.36], ['c', 0.48, 0.93, -0.03, 1.86, -1.17, 2.19], ['c', -0.30, 0.09, -1.02, 0.09, -1.35, 0.00], ['c', -0.99, -0.27, -1.74, -0.87, -2.25, -1.83], ['c', -0.69, -1.41, -0.63, -3.00, 0.21, -4.26], ['c', 0.21, -0.30, 0.69, -0.81, 0.99, -1.02], ['c', 0.48, -0.33, 1.11, -0.57, 1.74, -0.66], ['z']], w: 16.366, h: 7.893 },\n\t'scripts.trill': { d: [['M', -0.51, -16.02], ['c', 0.12, -0.09, 0.21, -0.18, 0.21, -0.18], ['l', -0.81, 4.02], ['l', -0.81, 4.02], ['c', 0.03, 0.00, 0.51, -0.27, 1.08, -0.60], ['c', 0.60, -0.30, 1.14, -0.63, 1.26, -0.66], ['c', 1.14, -0.54, 2.31, -0.60, 3.09, -0.18], ['c', 0.27, 0.15, 0.54, 0.36, 0.60, 0.51], ['l', 0.06, 0.12], ['l', 0.21, -0.21], ['c', 0.90, -0.81, 2.22, -0.99, 3.12, -0.42], ['c', 0.60, 0.42, 0.90, 1.14, 0.78, 2.07], ['c', -0.15, 1.29, -1.05, 2.31, -1.95, 2.25], ['c', -0.48, -0.03, -0.78, -0.30, -0.96, -0.81], ['c', -0.09, -0.27, -0.09, -0.90, -0.03, -1.20], ['c', 0.21, -0.75, 0.81, -1.23, 1.59, -1.32], ['l', 0.24, -0.03], ['l', -0.09, -0.12], ['c', -0.51, -0.66, -1.62, -0.63, -2.31, 0.03], ['c', -0.39, 0.42, -0.30, 0.09, -1.23, 4.77], ['l', -0.81, 4.14], ['c', -0.03, 0.00, -0.12, -0.03, -0.21, -0.09], ['c', -0.33, -0.15, -0.54, -0.18, -0.99, -0.18], ['c', -0.42, 0.00, -0.66, 0.03, -1.05, 0.18], ['c', -0.12, 0.06, -0.21, 0.09, -0.21, 0.09], ['c', 0.00, -0.03, 0.36, -1.86, 0.81, -4.11], ['c', 0.90, -4.47, 0.87, -4.26, 0.69, -4.53], ['c', -0.21, -0.36, -0.66, -0.51, -1.17, -0.36], ['c', -0.15, 0.06, -2.22, 1.14, -2.58, 1.38], ['c', -0.12, 0.09, -0.12, 0.09, -0.21, 0.60], ['l', -0.09, 0.51], ['l', 0.21, 0.24], ['c', 0.63, 0.75, 1.02, 1.47, 1.20, 2.19], ['c', 0.06, 0.27, 0.06, 0.36, 0.06, 0.81], ['c', 0.00, 0.42, 0.00, 0.54, -0.06, 0.78], ['c', -0.15, 0.54, -0.33, 0.93, -0.63, 1.35], ['c', -0.18, 0.24, -0.57, 0.63, -0.81, 0.78], ['c', -0.24, 0.15, -0.63, 0.36, -0.84, 0.42], ['c', -0.27, 0.06, -0.66, 0.06, -0.87, 0.03], ['c', -0.81, -0.18, -1.32, -1.05, -1.38, -2.46], ['c', -0.03, -0.60, 0.03, -0.99, 0.33, -2.46], ['c', 0.21, -1.08, 0.24, -1.32, 0.21, -1.29], ['c', -1.20, 0.48, -2.40, 0.75, -3.21, 0.72], ['c', -0.69, -0.06, -1.17, -0.30, -1.41, -0.72], ['c', -0.39, -0.75, -0.12, -1.80, 0.66, -2.46], ['c', 0.24, -0.18, 0.69, -0.42, 1.02, -0.51], ['c', 0.69, -0.18, 1.53, -0.15, 2.31, 0.09], ['c', 0.30, 0.09, 0.75, 0.30, 0.99, 0.45], ['c', 0.12, 0.09, 0.15, 0.09, 0.15, 0.03], ['c', 0.03, -0.03, 0.33, -1.59, 0.72, -3.45], ['c', 0.36, -1.86, 0.66, -3.42, 0.69, -3.45], ['c', 0.00, -0.03, 0.03, -0.03, 0.21, 0.03], ['c', 0.21, 0.06, 0.27, 0.06, 0.48, 0.06], ['c', 0.42, -0.03, 0.78, -0.18, 1.26, -0.48], ['c', 0.15, -0.12, 0.36, -0.27, 0.48, -0.39], ['z'], ['m', -5.73, 7.68], ['c', -0.27, -0.03, -0.96, -0.06, -1.20, -0.03], ['c', -0.81, 0.12, -1.35, 0.57, -1.50, 1.20], ['c', -0.18, 0.66, 0.12, 1.14, 0.75, 1.29], ['c', 0.66, 0.12, 1.92, -0.12, 3.18, -0.66], ['l', 0.33, -0.15], ['l', 0.09, -0.39], ['c', 0.06, -0.21, 0.09, -0.42, 0.09, -0.45], ['c', 0.00, -0.03, -0.45, -0.30, -0.75, -0.45], ['c', -0.27, -0.15, -0.66, -0.27, -0.99, -0.36], ['z'], ['m', 4.29, 3.63], ['c', -0.24, -0.39, -0.51, -0.75, -0.51, -0.69], ['c', -0.06, 0.12, -0.39, 1.92, -0.45, 2.28], ['c', -0.09, 0.54, -0.12, 1.14, -0.06, 1.38], ['c', 0.06, 0.42, 0.21, 0.60, 0.51, 0.57], ['c', 0.39, -0.06, 0.75, -0.48, 0.93, -1.14], ['c', 0.09, -0.33, 0.09, -1.05, 0.00, -1.38], ['c', -0.09, -0.39, -0.24, -0.69, -0.42, -1.02], ['z']], w: 17.963, h: 16.49 },\n\t'scripts.segno': { d: [['M', -3.72, -11.22], ['c', 0.78, -0.09, 1.59, 0.03, 2.31, 0.42], ['c', 1.20, 0.60, 2.01, 1.71, 2.31, 3.09], ['c', 0.09, 0.42, 0.09, 1.20, 0.03, 1.50], ['c', -0.15, 0.45, -0.39, 0.81, -0.66, 0.93], ['c', -0.33, 0.18, -0.84, 0.21, -1.23, 0.15], ['c', -0.81, -0.18, -1.32, -0.93, -1.26, -1.89], ['c', 0.03, -0.36, 0.09, -0.57, 0.24, -0.90], ['c', 0.15, -0.33, 0.45, -0.60, 0.72, -0.75], ['c', 0.12, -0.06, 0.18, -0.09, 0.18, -0.12], ['c', 0.00, -0.03, -0.03, -0.15, -0.09, -0.24], ['c', -0.18, -0.45, -0.54, -0.87, -0.96, -1.08], ['c', -1.11, -0.57, -2.34, -0.18, -2.88, 0.90], ['c', -0.24, 0.51, -0.33, 1.11, -0.24, 1.83], ['c', 0.27, 1.92, 1.50, 3.54, 3.93, 5.13], ['c', 0.48, 0.33, 1.26, 0.78, 1.29, 0.78], ['c', 0.03, 0.00, 1.35, -2.19, 2.94, -4.89], ['l', 2.88, -4.89], ['l', 0.84, 0.00], ['l', 0.87, 0.00], ['l', -0.03, 0.06], ['c', -0.15, 0.21, -6.15, 10.41, -6.15, 10.44], ['c', 0.00, 0.00, 0.21, 0.15, 0.48, 0.27], ['c', 2.61, 1.47, 4.35, 3.03, 5.13, 4.65], ['c', 1.14, 2.34, 0.51, 5.07, -1.44, 6.39], ['c', -0.66, 0.42, -1.32, 0.63, -2.13, 0.69], ['c', -2.01, 0.09, -3.81, -1.41, -4.26, -3.54], ['c', -0.09, -0.42, -0.09, -1.20, -0.03, -1.50], ['c', 0.15, -0.45, 0.39, -0.81, 0.66, -0.93], ['c', 0.33, -0.18, 0.84, -0.21, 1.23, -0.15], ['c', 0.81, 0.18, 1.32, 0.93, 1.26, 1.89], ['c', -0.03, 0.36, -0.09, 0.57, -0.24, 0.90], ['c', -0.15, 0.33, -0.45, 0.60, -0.72, 0.75], ['c', -0.12, 0.06, -0.18, 0.09, -0.18, 0.12], ['c', 0.00, 0.03, 0.03, 0.15, 0.09, 0.24], ['c', 0.18, 0.45, 0.54, 0.87, 0.96, 1.08], ['c', 1.11, 0.57, 2.34, 0.18, 2.88, -0.90], ['c', 0.24, -0.51, 0.33, -1.11, 0.24, -1.83], ['c', -0.27, -1.92, -1.50, -3.54, -3.93, -5.13], ['c', -0.48, -0.33, -1.26, -0.78, -1.29, -0.78], ['c', -0.03, 0.00, -1.35, 2.19, -2.91, 4.89], ['l', -2.88, 4.89], ['l', -0.87, 0.00], ['l', -0.87, 0.00], ['l', 0.03, -0.06], ['c', 0.15, -0.21, 6.15, -10.41, 6.15, -10.44], ['c', 0.00, 0.00, -0.21, -0.15, -0.48, -0.30], ['c', -2.61, -1.44, -4.35, -3.00, -5.13, -4.62], ['c', -0.90, -1.89, -0.72, -4.02, 0.48, -5.52], ['c', 0.69, -0.84, 1.68, -1.41, 2.73, -1.53], ['z'], ['m', 8.76, 9.09], ['c', 0.03, -0.03, 0.15, -0.03, 0.27, -0.03], ['c', 0.33, 0.03, 0.57, 0.18, 0.72, 0.48], ['c', 0.09, 0.18, 0.09, 0.57, 0.00, 0.75], ['c', -0.09, 0.18, -0.21, 0.30, -0.36, 0.39], ['c', -0.15, 0.06, -0.21, 0.06, -0.39, 0.06], ['c', -0.21, 0.00, -0.27, 0.00, -0.39, -0.06], ['c', -0.30, -0.15, -0.48, -0.45, -0.48, -0.75], ['c', 0.00, -0.39, 0.24, -0.72, 0.63, -0.84], ['z'], ['m', -10.53, 2.61], ['c', 0.03, -0.03, 0.15, -0.03, 0.27, -0.03], ['c', 0.33, 0.03, 0.57, 0.18, 0.72, 0.48], ['c', 0.09, 0.18, 0.09, 0.57, 0.00, 0.75], ['c', -0.09, 0.18, -0.21, 0.30, -0.36, 0.39], ['c', -0.15, 0.06, -0.21, 0.06, -0.39, 0.06], ['c', -0.21, 0.00, -0.27, 0.00, -0.39, -0.06], ['c', -0.30, -0.15, -0.48, -0.45, -0.48, -0.75], ['c', 0.00, -0.39, 0.24, -0.72, 0.63, -0.84], ['z']], w: 15, h: 22.504 },\n\t'scripts.coda': { d: [['M', -0.21, -10.47], ['c', 0.18, -0.12, 0.42, -0.06, 0.54, 0.12], ['c', 0.06, 0.09, 0.06, 0.18, 0.06, 1.50], ['l', 0.00, 1.38], ['l', 0.18, 0.00], ['c', 0.39, 0.06, 0.96, 0.24, 1.38, 0.48], ['c', 1.68, 0.93, 2.82, 3.24, 3.03, 6.12], ['c', 0.03, 0.24, 0.03, 0.45, 0.03, 0.45], ['c', 0.00, 0.03, 0.60, 0.03, 1.35, 0.03], ['c', 1.50, 0.00, 1.47, 0.00, 1.59, 0.18], ['c', 0.09, 0.12, 0.09, 0.30, 0.00, 0.42], ['c', -0.12, 0.18, -0.09, 0.18, -1.59, 0.18], ['c', -0.75, 0.00, -1.35, 0.00, -1.35, 0.03], ['c', 0.00, 0.00, 0.00, 0.21, -0.03, 0.42], ['c', -0.24, 3.15, -1.53, 5.58, -3.45, 6.36], ['c', -0.27, 0.12, -0.72, 0.24, -0.96, 0.27], ['l', -0.18, 0.00], ['l', 0.00, 1.38], ['c', 0.00, 1.32, 0.00, 1.41, -0.06, 1.50], ['c', -0.15, 0.24, -0.51, 0.24, -0.66, 0.00], ['c', -0.06, -0.09, -0.06, -0.18, -0.06, -1.50], ['l', 0.00, -1.38], ['l', -0.18, 0.00], ['c', -0.39, -0.06, -0.96, -0.24, -1.38, -0.48], ['c', -1.68, -0.93, -2.82, -3.24, -3.03, -6.15], ['c', -0.03, -0.21, -0.03, -0.42, -0.03, -0.42], ['c', 0.00, -0.03, -0.60, -0.03, -1.35, -0.03], ['c', -1.50, 0.00, -1.47, 0.00, -1.59, -0.18], ['c', -0.09, -0.12, -0.09, -0.30, 0.00, -0.42], ['c', 0.12, -0.18, 0.09, -0.18, 1.59, -0.18], ['c', 0.75, 0.00, 1.35, 0.00, 1.35, -0.03], ['c', 0.00, 0.00, 0.00, -0.21, 0.03, -0.45], ['c', 0.24, -3.12, 1.53, -5.55, 3.45, -6.33], ['c', 0.27, -0.12, 0.72, -0.24, 0.96, -0.27], ['l', 0.18, 0.00], ['l', 0.00, -1.38], ['c', 0.00, -1.53, 0.00, -1.50, 0.18, -1.62], ['z'], ['m', -0.18, 6.93], ['c', 0.00, -2.97, 0.00, -3.15, -0.06, -3.15], ['c', -0.09, 0.00, -0.51, 0.15, -0.66, 0.21], ['c', -0.87, 0.51, -1.38, 1.62, -1.56, 3.51], ['c', -0.06, 0.54, -0.12, 1.59, -0.12, 2.16], ['l', 0.00, 0.42], ['l', 1.20, 0.00], ['l', 1.20, 0.00], ['l', 0.00, -3.15], ['z'], ['m', 1.17, -3.06], ['c', -0.09, -0.03, -0.21, -0.06, -0.27, -0.09], ['l', -0.12, 0.00], ['l', 0.00, 3.15], ['l', 0.00, 3.15], ['l', 1.20, 0.00], ['l', 1.20, 0.00], ['l', 0.00, -0.81], ['c', -0.06, -2.40, -0.33, -3.69, -0.93, -4.59], ['c', -0.27, -0.39, -0.66, -0.69, -1.08, -0.81], ['z'], ['m', -1.17, 10.14], ['l', 0.00, -3.15], ['l', -1.20, 0.00], ['l', -1.20, 0.00], ['l', 0.00, 0.81], ['c', 0.03, 0.96, 0.06, 1.47, 0.15, 2.13], ['c', 0.24, 2.04, 0.96, 3.12, 2.13, 3.36], ['l', 0.12, 0.00], ['l', 0.00, -3.15], ['z'], ['m', 3.18, -2.34], ['l', 0.00, -0.81], ['l', -1.20, 0.00], ['l', -1.20, 0.00], ['l', 0.00, 3.15], ['l', 0.00, 3.15], ['l', 0.12, 0.00], ['c', 1.17, -0.24, 1.89, -1.32, 2.13, -3.36], ['c', 0.09, -0.66, 0.12, -1.17, 0.15, -2.13], ['z']], w: 16.035, h: 21.062 },\n\t'scripts.comma': { d: [['M', 1.14, -4.62], ['c', 0.30, -0.12, 0.69, -0.03, 0.93, 0.15], ['c', 0.12, 0.12, 0.36, 0.45, 0.51, 0.78], ['c', 0.90, 1.77, 0.54, 4.05, -1.08, 6.75], ['c', -0.36, 0.63, -0.87, 1.38, -0.96, 1.44], ['c', -0.18, 0.12, -0.42, 0.06, -0.54, -0.12], ['c', -0.09, -0.18, -0.09, -0.30, 0.12, -0.60], ['c', 0.96, -1.44, 1.44, -2.97, 1.38, -4.35], ['c', -0.06, -0.93, -0.30, -1.68, -0.78, -2.46], ['c', -0.27, -0.39, -0.33, -0.63, -0.24, -0.96], ['c', 0.09, -0.27, 0.36, -0.54, 0.66, -0.63], ['z']], w: 3.042, h: 9.237 },\n\t'scripts.roll': { d: [['M', 1.95, -6.00], ['c', 0.21, -0.09, 0.36, -0.09, 0.57, 0.00], ['c', 0.39, 0.15, 0.63, 0.39, 1.47, 1.35], ['c', 0.66, 0.75, 0.78, 0.87, 1.08, 1.05], ['c', 0.75, 0.45, 1.65, 0.42, 2.40, -0.06], ['c', 0.12, -0.09, 0.27, -0.27, 0.54, -0.60], ['c', 0.42, -0.54, 0.51, -0.63, 0.69, -0.63], ['c', 0.09, 0.00, 0.30, 0.12, 0.36, 0.21], ['c', 0.09, 0.12, 0.12, 0.30, 0.03, 0.42], ['c', -0.06, 0.12, -3.15, 3.90, -3.30, 4.08], ['c', -0.06, 0.06, -0.18, 0.12, -0.27, 0.18], ['c', -0.27, 0.12, -0.60, 0.06, -0.99, -0.27], ['c', -0.27, -0.21, -0.42, -0.39, -1.08, -1.14], ['c', -0.63, -0.72, -0.81, -0.90, -1.17, -1.08], ['c', -0.36, -0.18, -0.57, -0.21, -0.99, -0.21], ['c', -0.39, 0.00, -0.63, 0.03, -0.93, 0.18], ['c', -0.36, 0.15, -0.51, 0.27, -0.90, 0.81], ['c', -0.24, 0.27, -0.45, 0.51, -0.48, 0.54], ['c', -0.12, 0.09, -0.27, 0.06, -0.39, 0.00], ['c', -0.24, -0.15, -0.33, -0.39, -0.21, -0.60], ['c', 0.09, -0.12, 3.18, -3.87, 3.33, -4.02], ['c', 0.06, -0.06, 0.18, -0.15, 0.24, -0.21], ['z']], w: 10.817, h: 6.125 },\n\t'scripts.prall': { d: [['M', -4.38, -3.69], ['c', 0.06, -0.03, 0.18, -0.06, 0.24, -0.06], ['c', 0.30, 0.00, 0.27, -0.03, 1.89, 1.95], ['l', 1.53, 1.83], ['c', 0.03, 0.00, 0.57, -0.84, 1.23, -1.83], ['c', 1.14, -1.68, 1.23, -1.83, 1.35, -1.89], ['c', 0.06, -0.03, 0.18, -0.06, 0.24, -0.06], ['c', 0.30, 0.00, 0.27, -0.03, 1.89, 1.95], ['l', 1.53, 1.83], ['l', 0.48, -0.69], ['c', 0.51, -0.78, 0.54, -0.84, 0.69, -0.90], ['c', 0.42, -0.18, 0.87, 0.15, 0.81, 0.60], ['c', -0.03, 0.12, -0.30, 0.51, -1.50, 2.37], ['c', -1.38, 2.07, -1.50, 2.22, -1.62, 2.28], ['c', -0.06, 0.03, -0.18, 0.06, -0.24, 0.06], ['c', -0.30, 0.00, -0.27, 0.03, -1.89, -1.95], ['l', -1.53, -1.83], ['c', -0.03, 0.00, -0.57, 0.84, -1.23, 1.83], ['c', -1.14, 1.68, -1.23, 1.83, -1.35, 1.89], ['c', -0.06, 0.03, -0.18, 0.06, -0.24, 0.06], ['c', -0.30, 0.00, -0.27, 0.03, -1.89, -1.95], ['l', -1.53, -1.83], ['l', -0.48, 0.69], ['c', -0.51, 0.78, -0.54, 0.84, -0.69, 0.90], ['c', -0.42, 0.18, -0.87, -0.15, -0.81, -0.60], ['c', 0.03, -0.12, 0.30, -0.51, 1.50, -2.37], ['c', 1.38, -2.07, 1.50, -2.22, 1.62, -2.28], ['z']], w: 15.011, h: 7.5 },\n\t'scripts.arpeggio': { d: [['M', 1.5, 0], ['c', 1.5, 2, 1.5, 3, 1.5, 3], ['s', 0, 1, -2, 1.5], ['s', -0.5, 3, 1, 5.5], ['l', 1.5, 0], ['s', -1.75, -2, -1.9, -3.25], ['s', 2.15, -0.6, 2.95, -1.6], ['s', 0.45, -1, 0.5, -1.25], ['s', 0, -1, -2, -3.9], ['l', -1.5, 0], ['z']], w: 5, h: 10 },\n\t'scripts.mordent': { d: [['M', -0.21, -4.95], ['c', 0.27, -0.15, 0.63, 0.00, 0.75, 0.27], ['c', 0.06, 0.12, 0.06, 0.24, 0.06, 1.44], ['l', 0.00, 1.29], ['l', 0.57, -0.84], ['c', 0.51, -0.75, 0.57, -0.84, 0.69, -0.90], ['c', 0.06, -0.03, 0.18, -0.06, 0.24, -0.06], ['c', 0.30, 0.00, 0.27, -0.03, 1.89, 1.95], ['l', 1.53, 1.83], ['l', 0.48, -0.69], ['c', 0.51, -0.78, 0.54, -0.84, 0.69, -0.90], ['c', 0.42, -0.18, 0.87, 0.15, 0.81, 0.60], ['c', -0.03, 0.12, -0.30, 0.51, -1.50, 2.37], ['c', -1.38, 2.07, -1.50, 2.22, -1.62, 2.28], ['c', -0.06, 0.03, -0.18, 0.06, -0.24, 0.06], ['c', -0.30, 0.00, -0.27, 0.03, -1.83, -1.89], ['c', -0.81, -0.99, -1.50, -1.80, -1.53, -1.86], ['c', -0.06, -0.03, -0.06, -0.03, -0.12, 0.03], ['c', -0.06, 0.06, -0.06, 0.15, -0.06, 2.28], ['c', 0.00, 1.95, 0.00, 2.25, -0.06, 2.34], ['c', -0.18, 0.45, -0.81, 0.48, -1.05, 0.03], ['c', -0.03, -0.06, -0.06, -0.24, -0.06, -1.41], ['l', 0.00, -1.35], ['l', -0.57, 0.84], ['c', -0.54, 0.78, -0.60, 0.87, -0.72, 0.93], ['c', -0.06, 0.03, -0.18, 0.06, -0.24, 0.06], ['c', -0.30, 0.00, -0.27, 0.03, -1.89, -1.95], ['l', -1.53, -1.83], ['l', -0.48, 0.69], ['c', -0.51, 0.78, -0.54, 0.84, -0.69, 0.90], ['c', -0.42, 0.18, -0.87, -0.15, -0.81, -0.60], ['c', 0.03, -0.12, 0.30, -0.51, 1.50, -2.37], ['c', 1.38, -2.07, 1.50, -2.22, 1.62, -2.28], ['c', 0.06, -0.03, 0.18, -0.06, 0.24, -0.06], ['c', 0.30, 0.00, 0.27, -0.03, 1.89, 1.95], ['l', 1.53, 1.83], ['c', 0.03, 0.00, 0.06, -0.06, 0.09, -0.09], ['c', 0.06, -0.12, 0.06, -0.15, 0.06, -2.28], ['c', 0.00, -1.92, 0.00, -2.22, 0.06, -2.31], ['c', 0.06, -0.15, 0.15, -0.24, 0.30, -0.30], ['z']], w: 15.011, h: 10.012 },\n\t'flags.u8th': { d: [['M', -0.42, 3.75], ['l', 0.00, -3.75], ['l', 0.21, 0.00], ['l', 0.21, 0.00], ['l', 0.00, 0.18], ['c', 0.00, 0.30, 0.06, 0.84, 0.12, 1.23], ['c', 0.24, 1.53, 0.90, 3.12, 2.13, 5.16], ['l', 0.99, 1.59], ['c', 0.87, 1.44, 1.38, 2.34, 1.77, 3.09], ['c', 0.81, 1.68, 1.20, 3.06, 1.26, 4.53], ['c', 0.03, 1.53, -0.21, 3.27, -0.75, 5.01], ['c', -0.21, 0.69, -0.51, 1.50, -0.60, 1.59], ['c', -0.09, 0.12, -0.27, 0.21, -0.42, 0.21], ['c', -0.15, 0.00, -0.42, -0.12, -0.51, -0.21], ['c', -0.15, -0.18, -0.18, -0.42, -0.09, -0.66], ['c', 0.15, -0.33, 0.45, -1.20, 0.57, -1.62], ['c', 0.42, -1.38, 0.60, -2.58, 0.60, -3.90], ['c', 0.00, -0.66, 0.00, -0.81, -0.06, -1.11], ['c', -0.39, -2.07, -1.80, -4.26, -4.59, -7.14], ['l', -0.42, -0.45], ['l', -0.21, 0.00], ['l', -0.21, 0.00], ['l', 0.00, -3.75], ['z']], w: 6.692, h: 22.59 },\n\t'flags.u16th': { d: [['M', -0.42, 7.50], ['l', 0.00, -7.50], ['l', 0.21, 0.00], ['l', 0.21, 0.00], ['l', 0.00, 0.39], ['c', 0.06, 1.08, 0.39, 2.19, 0.99, 3.39], ['c', 0.45, 0.90, 0.87, 1.59, 1.95, 3.12], ['c', 1.29, 1.86, 1.77, 2.64, 2.22, 3.57], ['c', 0.45, 0.93, 0.72, 1.80, 0.87, 2.64], ['c', 0.06, 0.51, 0.06, 1.50, 0.00, 1.92], ['c', -0.12, 0.60, -0.30, 1.20, -0.54, 1.71], ['l', -0.09, 0.24], ['l', 0.18, 0.45], ['c', 0.51, 1.20, 0.72, 2.22, 0.69, 3.42], ['c', -0.06, 1.53, -0.39, 3.03, -0.99, 4.53], ['c', -0.30, 0.75, -0.36, 0.81, -0.57, 0.90], ['c', -0.15, 0.09, -0.33, 0.06, -0.48, 0.00], ['c', -0.18, -0.09, -0.27, -0.18, -0.33, -0.33], ['c', -0.09, -0.18, -0.06, -0.30, 0.12, -0.75], ['c', 0.66, -1.41, 1.02, -2.88, 1.08, -4.32], ['c', 0.00, -0.60, -0.03, -1.05, -0.18, -1.59], ['c', -0.30, -1.20, -0.99, -2.40, -2.25, -3.87], ['c', -0.42, -0.48, -1.53, -1.62, -2.19, -2.22], ['l', -0.45, -0.42], ['l', -0.03, 1.11], ['l', 0.00, 1.11], ['l', -0.21, 0.00], ['l', -0.21, 0.00], ['l', 0.00, -7.50], ['z'], ['m', 1.65, 0.09], ['c', -0.30, -0.30, -0.69, -0.72, -0.90, -0.87], ['l', -0.33, -0.33], ['l', 0.00, 0.15], ['c', 0.00, 0.30, 0.06, 0.81, 0.15, 1.26], ['c', 0.27, 1.29, 0.87, 2.61, 2.04, 4.29], ['c', 0.15, 0.24, 0.60, 0.87, 0.96, 1.38], ['l', 1.08, 1.53], ['l', 0.42, 0.63], ['c', 0.03, 0.00, 0.12, -0.36, 0.21, -0.72], ['c', 0.06, -0.33, 0.06, -1.20, 0.00, -1.62], ['c', -0.33, -1.71, -1.44, -3.48, -3.63, -5.70], ['z']], w: 6.693, h: 26.337 },\n\t'flags.u32nd': { d: [['M', -0.42, 11.25], ['l', 0.00, -11.25], ['l', 0.21, 0.00], ['l', 0.21, 0.00], ['l', 0.00, 0.36], ['c', 0.09, 1.68, 0.69, 3.27, 2.07, 5.46], ['l', 0.87, 1.35], ['c', 1.02, 1.62, 1.47, 2.37, 1.86, 3.18], ['c', 0.48, 1.02, 0.78, 1.92, 0.93, 2.88], ['c', 0.06, 0.48, 0.06, 1.50, 0.00, 1.89], ['c', -0.09, 0.42, -0.21, 0.87, -0.36, 1.26], ['l', -0.12, 0.30], ['l', 0.15, 0.39], ['c', 0.69, 1.56, 0.84, 2.88, 0.54, 4.38], ['c', -0.09, 0.45, -0.27, 1.08, -0.45, 1.47], ['l', -0.12, 0.24], ['l', 0.18, 0.36], ['c', 0.33, 0.72, 0.57, 1.56, 0.69, 2.34], ['c', 0.12, 1.02, -0.06, 2.52, -0.42, 3.84], ['c', -0.27, 0.93, -0.75, 2.13, -0.93, 2.31], ['c', -0.18, 0.15, -0.45, 0.18, -0.66, 0.09], ['c', -0.18, -0.09, -0.27, -0.18, -0.33, -0.33], ['c', -0.09, -0.18, -0.06, -0.30, 0.06, -0.60], ['c', 0.21, -0.36, 0.42, -0.90, 0.57, -1.38], ['c', 0.51, -1.41, 0.69, -3.06, 0.48, -4.08], ['c', -0.15, -0.81, -0.57, -1.68, -1.20, -2.55], ['c', -0.72, -0.99, -1.83, -2.13, -3.30, -3.33], ['l', -0.48, -0.42], ['l', -0.03, 1.53], ['l', 0.00, 1.56], ['l', -0.21, 0.00], ['l', -0.21, 0.00], ['l', 0.00, -11.25], ['z'], ['m', 1.26, -3.96], ['c', -0.27, -0.30, -0.54, -0.60, -0.66, -0.72], ['l', -0.18, -0.21], ['l', 0.00, 0.42], ['c', 0.06, 0.87, 0.24, 1.74, 0.66, 2.67], ['c', 0.36, 0.87, 0.96, 1.86, 1.92, 3.18], ['c', 0.21, 0.33, 0.63, 0.87, 0.87, 1.23], ['c', 0.27, 0.39, 0.60, 0.84, 0.75, 1.08], ['l', 0.27, 0.39], ['l', 0.03, -0.12], ['c', 0.12, -0.45, 0.15, -1.05, 0.09, -1.59], ['c', -0.27, -1.86, -1.38, -3.78, -3.75, -6.33], ['z'], ['m', -0.27, 6.09], ['c', -0.27, -0.21, -0.48, -0.42, -0.51, -0.45], ['c', -0.06, -0.03, -0.06, -0.03, -0.06, 0.21], ['c', 0.00, 0.90, 0.30, 2.04, 0.81, 3.09], ['c', 0.48, 1.02, 0.96, 1.77, 2.37, 3.63], ['c', 0.60, 0.78, 1.05, 1.44, 1.29, 1.77], ['c', 0.06, 0.12, 0.15, 0.21, 0.15, 0.18], ['c', 0.03, -0.03, 0.18, -0.57, 0.24, -0.87], ['c', 0.06, -0.45, 0.06, -1.32, -0.03, -1.74], ['c', -0.09, -0.48, -0.24, -0.90, -0.51, -1.44], ['c', -0.66, -1.35, -1.83, -2.70, -3.75, -4.38], ['z']], w: 6.697, h: 32.145 },\n\t'flags.u64th': { d: [['M', -0.42, 15.00], ['l', 0.00, -15.00], ['l', 0.21, 0.00], ['l', 0.21, 0.00], ['l', 0.00, 0.36], ['c', 0.06, 1.20, 0.39, 2.37, 1.02, 3.66], ['c', 0.39, 0.81, 0.84, 1.56, 1.80, 3.09], ['c', 0.81, 1.26, 1.05, 1.68, 1.35, 2.22], ['c', 0.87, 1.50, 1.35, 2.79, 1.56, 4.08], ['c', 0.06, 0.54, 0.06, 1.56, -0.03, 2.04], ['c', -0.09, 0.48, -0.21, 0.99, -0.36, 1.35], ['l', -0.12, 0.27], ['l', 0.12, 0.27], ['c', 0.09, 0.15, 0.21, 0.45, 0.27, 0.66], ['c', 0.69, 1.89, 0.63, 3.66, -0.18, 5.46], ['l', -0.18, 0.39], ['l', 0.15, 0.33], ['c', 0.30, 0.66, 0.51, 1.44, 0.63, 2.10], ['c', 0.06, 0.48, 0.06, 1.35, 0.00, 1.71], ['c', -0.15, 0.57, -0.42, 1.20, -0.78, 1.68], ['l', -0.21, 0.27], ['l', 0.18, 0.33], ['c', 0.57, 1.05, 0.93, 2.13, 1.02, 3.18], ['c', 0.06, 0.72, 0.00, 1.83, -0.21, 2.79], ['c', -0.18, 1.02, -0.63, 2.34, -1.02, 3.09], ['c', -0.15, 0.33, -0.48, 0.45, -0.78, 0.30], ['c', -0.18, -0.09, -0.27, -0.18, -0.33, -0.33], ['c', -0.09, -0.18, -0.06, -0.30, 0.03, -0.54], ['c', 0.75, -1.50, 1.23, -3.45, 1.17, -4.89], ['c', -0.06, -1.02, -0.42, -2.01, -1.17, -3.15], ['c', -0.48, -0.72, -1.02, -1.35, -1.89, -2.22], ['c', -0.57, -0.57, -1.56, -1.50, -1.92, -1.77], ['l', -0.12, -0.09], ['l', 0.00, 1.68], ['l', 0.00, 1.68], ['l', -0.21, 0.00], ['l', -0.21, 0.00], ['l', 0.00, -15.00], ['z'], ['m', 0.93, -8.07], ['c', -0.27, -0.30, -0.48, -0.54, -0.51, -0.54], ['c', 0.00, 0.00, 0.00, 0.69, 0.03, 1.02], ['c', 0.15, 1.47, 0.75, 2.94, 2.04, 4.83], ['l', 1.08, 1.53], ['c', 0.39, 0.57, 0.84, 1.20, 0.99, 1.44], ['c', 0.15, 0.24, 0.30, 0.45, 0.30, 0.45], ['c', 0.00, 0.00, 0.03, -0.09, 0.06, -0.21], ['c', 0.36, -1.59, -0.15, -3.33, -1.47, -5.40], ['c', -0.63, -0.93, -1.35, -1.83, -2.52, -3.12], ['z'], ['m', 0.06, 6.72], ['c', -0.24, -0.21, -0.48, -0.42, -0.51, -0.45], ['l', -0.06, -0.06], ['l', 0.00, 0.33], ['c', 0.00, 1.20, 0.30, 2.34, 0.93, 3.60], ['c', 0.45, 0.90, 0.96, 1.68, 2.25, 3.51], ['c', 0.39, 0.54, 0.84, 1.17, 1.02, 1.44], ['c', 0.21, 0.33, 0.33, 0.51, 0.33, 0.48], ['c', 0.06, -0.09, 0.21, -0.63, 0.30, -0.99], ['c', 0.06, -0.33, 0.06, -0.45, 0.06, -0.96], ['c', 0.00, -0.60, -0.03, -0.84, -0.18, -1.35], ['c', -0.30, -1.08, -1.02, -2.28, -2.13, -3.57], ['c', -0.39, -0.45, -1.44, -1.47, -2.01, -1.98], ['z'], ['m', 0.00, 6.72], ['c', -0.24, -0.21, -0.48, -0.39, -0.51, -0.42], ['l', -0.06, -0.06], ['l', 0.00, 0.33], ['c', 0.00, 1.41, 0.45, 2.82, 1.38, 4.35], ['c', 0.42, 0.72, 0.72, 1.14, 1.86, 2.73], ['c', 0.36, 0.45, 0.75, 0.99, 0.87, 1.20], ['c', 0.15, 0.21, 0.30, 0.36, 0.30, 0.36], ['c', 0.06, 0.00, 0.30, -0.48, 0.39, -0.75], ['c', 0.09, -0.36, 0.12, -0.63, 0.12, -1.05], ['c', -0.06, -1.05, -0.45, -2.04, -1.20, -3.18], ['c', -0.57, -0.87, -1.11, -1.53, -2.07, -2.49], ['c', -0.36, -0.33, -0.84, -0.78, -1.08, -1.02], ['z']], w: 6.682, h: 39.694 },\n\t'flags.d8th': { d: [['M', 5.67, -21.63], ['c', 0.24, -0.12, 0.54, -0.06, 0.69, 0.15], ['c', 0.06, 0.06, 0.21, 0.36, 0.39, 0.66], ['c', 0.84, 1.77, 1.26, 3.36, 1.32, 5.10], ['c', 0.03, 1.29, -0.21, 2.37, -0.81, 3.63], ['c', -0.60, 1.23, -1.26, 2.13, -3.21, 4.38], ['c', -1.35, 1.53, -1.86, 2.19, -2.40, 2.97], ['c', -0.63, 0.93, -1.11, 1.92, -1.38, 2.79], ['c', -0.15, 0.54, -0.27, 1.35, -0.27, 1.80], ['l', 0.00, 0.15], ['l', -0.21, 0.00], ['l', -0.21, 0.00], ['l', 0.00, -3.75], ['l', 0.00, -3.75], ['l', 0.21, 0.00], ['l', 0.21, 0.00], ['l', 0.48, -0.30], ['c', 1.83, -1.11, 3.12, -2.10, 4.17, -3.12], ['c', 0.78, -0.81, 1.32, -1.53, 1.71, -2.31], ['c', 0.45, -0.93, 0.60, -1.74, 0.51, -2.88], ['c', -0.12, -1.56, -0.63, -3.18, -1.47, -4.68], ['c', -0.12, -0.21, -0.15, -0.33, -0.06, -0.51], ['c', 0.06, -0.15, 0.15, -0.24, 0.33, -0.33], ['z']], w: 8.492, h: 21.691 },\n\t'flags.ugrace': { d: [['M', 6.03, 6.93], ['c', 0.15, -0.09, 0.33, -0.06, 0.51, 0.00], ['c', 0.15, 0.09, 0.21, 0.15, 0.30, 0.33], ['c', 0.09, 0.18, 0.06, 0.39, -0.03, 0.54], ['c', -0.06, 0.15, -10.89, 8.88, -11.07, 8.97], ['c', -0.15, 0.09, -0.33, 0.06, -0.48, 0.00], ['c', -0.18, -0.09, -0.24, -0.15, -0.33, -0.33], ['c', -0.09, -0.18, -0.06, -0.39, 0.03, -0.54], ['c', 0.06, -0.15, 10.89, -8.88, 11.07, -8.97], ['z']], w: 12.019, h: 9.954 },\n\t'flags.dgrace': { d: [['M', -6.06, -15.93], ['c', 0.18, -0.09, 0.33, -0.12, 0.48, -0.06], ['c', 0.18, 0.09, 14.01, 8.04, 14.10, 8.10], ['c', 0.12, 0.12, 0.18, 0.33, 0.18, 0.51], ['c', -0.03, 0.21, -0.15, 0.39, -0.36, 0.48], ['c', -0.18, 0.09, -0.33, 0.12, -0.48, 0.06], ['c', -0.18, -0.09, -14.01, -8.04, -14.10, -8.10], ['c', -0.12, -0.12, -0.18, -0.33, -0.18, -0.51], ['c', 0.03, -0.21, 0.15, -0.39, 0.36, -0.48], ['z']], w: 15.12, h: 9.212 },\n\t'flags.d16th': { d: [['M', 6.84, -22.53], ['c', 0.27, -0.12, 0.57, -0.06, 0.72, 0.15], ['c', 0.15, 0.15, 0.33, 0.87, 0.45, 1.56], ['c', 0.06, 0.33, 0.06, 1.35, 0.00, 1.65], ['c', -0.06, 0.33, -0.15, 0.78, -0.27, 1.11], ['c', -0.12, 0.33, -0.45, 0.96, -0.66, 1.32], ['l', -0.18, 0.27], ['l', 0.09, 0.18], ['c', 0.48, 1.02, 0.72, 2.25, 0.69, 3.30], ['c', -0.06, 1.23, -0.42, 2.28, -1.26, 3.45], ['c', -0.57, 0.87, -0.99, 1.32, -3.00, 3.39], ['c', -1.56, 1.56, -2.22, 2.40, -2.76, 3.45], ['c', -0.42, 0.84, -0.66, 1.80, -0.66, 2.55], ['l', 0.00, 0.15], ['l', -0.21, 0.00], ['l', -0.21, 0.00], ['l', 0.00, -7.50], ['l', 0.00, -7.50], ['l', 0.21, 0.00], ['l', 0.21, 0.00], ['l', 0.00, 1.14], ['l', 0.00, 1.11], ['l', 0.27, -0.15], ['c', 1.11, -0.57, 1.77, -0.99, 2.52, -1.47], ['c', 2.37, -1.56, 3.69, -3.15, 4.05, -4.83], ['c', 0.03, -0.18, 0.03, -0.39, 0.03, -0.78], ['c', 0.00, -0.60, -0.03, -0.93, -0.24, -1.50], ['c', -0.06, -0.18, -0.12, -0.39, -0.15, -0.45], ['c', -0.03, -0.24, 0.12, -0.48, 0.36, -0.60], ['z'], ['m', -0.63, 7.50], ['c', -0.06, -0.18, -0.15, -0.36, -0.15, -0.36], ['c', -0.03, 0.00, -0.03, 0.03, -0.06, 0.06], ['c', -0.06, 0.12, -0.96, 1.02, -1.95, 1.98], ['c', -0.63, 0.57, -1.26, 1.17, -1.44, 1.35], ['c', -1.53, 1.62, -2.28, 2.85, -2.55, 4.32], ['c', -0.03, 0.18, -0.03, 0.54, -0.06, 0.99], ['l', 0.00, 0.69], ['l', 0.18, -0.09], ['c', 0.93, -0.54, 2.10, -1.29, 2.82, -1.83], ['c', 0.69, -0.51, 1.02, -0.81, 1.53, -1.29], ['c', 1.86, -1.89, 2.37, -3.66, 1.68, -5.82], ['z']], w: 8.475, h: 22.591 },\n\t'flags.d32nd': { d: [['M', 6.84, -29.13], ['c', 0.27, -0.12, 0.57, -0.06, 0.72, 0.15], ['c', 0.12, 0.12, 0.27, 0.63, 0.36, 1.11], ['c', 0.33, 1.59, 0.06, 3.06, -0.81, 4.47], ['l', -0.18, 0.27], ['l', 0.09, 0.15], ['c', 0.12, 0.24, 0.33, 0.69, 0.45, 1.05], ['c', 0.63, 1.83, 0.45, 3.57, -0.57, 5.22], ['l', -0.18, 0.30], ['l', 0.15, 0.27], ['c', 0.42, 0.87, 0.60, 1.71, 0.57, 2.61], ['c', -0.06, 1.29, -0.48, 2.46, -1.35, 3.78], ['c', -0.54, 0.81, -0.93, 1.29, -2.46, 3.00], ['c', -0.51, 0.54, -1.05, 1.17, -1.26, 1.41], ['c', -1.56, 1.86, -2.25, 3.36, -2.37, 5.01], ['l', 0.00, 0.33], ['l', -0.21, 0.00], ['l', -0.21, 0.00], ['l', 0.00, -11.25], ['l', 0.00, -11.25], ['l', 0.21, 0.00], ['l', 0.21, 0.00], ['l', 0.00, 1.35], ['l', 0.03, 1.35], ['l', 0.78, -0.39], ['c', 1.38, -0.69, 2.34, -1.26, 3.24, -1.92], ['c', 1.38, -1.02, 2.28, -2.13, 2.64, -3.21], ['c', 0.15, -0.48, 0.18, -0.72, 0.18, -1.29], ['c', 0.00, -0.57, -0.06, -0.90, -0.24, -1.47], ['c', -0.06, -0.18, -0.12, -0.39, -0.15, -0.45], ['c', -0.03, -0.24, 0.12, -0.48, 0.36, -0.60], ['z'], ['m', -0.63, 7.20], ['c', -0.09, -0.18, -0.12, -0.21, -0.12, -0.15], ['c', -0.03, 0.09, -1.02, 1.08, -2.04, 2.04], ['c', -1.17, 1.08, -1.65, 1.56, -2.07, 2.04], ['c', -0.84, 0.96, -1.38, 1.86, -1.68, 2.76], ['c', -0.21, 0.57, -0.27, 0.99, -0.30, 1.65], ['l', 0.00, 0.54], ['l', 0.66, -0.33], ['c', 3.57, -1.86, 5.49, -3.69, 5.94, -5.70], ['c', 0.06, -0.39, 0.06, -1.20, -0.03, -1.65], ['c', -0.06, -0.39, -0.24, -0.90, -0.36, -1.20], ['z'], ['m', -0.06, 7.20], ['c', -0.06, -0.15, -0.12, -0.33, -0.15, -0.45], ['l', -0.06, -0.18], ['l', -0.18, 0.21], ['l', -1.83, 1.83], ['c', -0.87, 0.90, -1.77, 1.80, -1.95, 2.01], ['c', -1.08, 1.29, -1.62, 2.31, -1.89, 3.51], ['c', -0.06, 0.30, -0.06, 0.51, -0.09, 0.93], ['l', 0.00, 0.57], ['l', 0.09, -0.06], ['c', 0.75, -0.45, 1.89, -1.26, 2.52, -1.74], ['c', 0.81, -0.66, 1.74, -1.53, 2.22, -2.16], ['c', 1.26, -1.53, 1.68, -3.06, 1.32, -4.47], ['z']], w: 8.385, h: 29.191 },\n\t'flags.d64th': { d: [['M', 7.08, -32.88], ['c', 0.30, -0.12, 0.66, -0.03, 0.78, 0.24], ['c', 0.18, 0.33, 0.27, 2.10, 0.15, 2.64], ['c', -0.09, 0.39, -0.21, 0.78, -0.39, 1.08], ['l', -0.15, 0.30], ['l', 0.09, 0.27], ['c', 0.03, 0.12, 0.09, 0.45, 0.12, 0.69], ['c', 0.27, 1.44, 0.18, 2.55, -0.30, 3.60], ['l', -0.12, 0.33], ['l', 0.06, 0.42], ['c', 0.27, 1.35, 0.33, 2.82, 0.21, 3.63], ['c', -0.12, 0.60, -0.30, 1.23, -0.57, 1.80], ['l', -0.15, 0.27], ['l', 0.03, 0.42], ['c', 0.06, 1.02, 0.06, 2.70, 0.03, 3.06], ['c', -0.15, 1.47, -0.66, 2.76, -1.74, 4.41], ['c', -0.45, 0.69, -0.75, 1.11, -1.74, 2.37], ['c', -1.05, 1.38, -1.50, 1.98, -1.95, 2.73], ['c', -0.93, 1.50, -1.38, 2.82, -1.44, 4.20], ['l', 0.00, 0.42], ['l', -0.21, 0.00], ['l', -0.21, 0.00], ['l', 0.00, -15.00], ['l', 0.00, -15.00], ['l', 0.21, 0.00], ['l', 0.21, 0.00], ['l', 0.00, 1.86], ['l', 0.00, 1.89], ['c', 0.00, 0.00, 0.21, -0.03, 0.45, -0.09], ['c', 2.22, -0.39, 4.08, -1.11, 5.19, -2.01], ['c', 0.63, -0.54, 1.02, -1.14, 1.20, -1.80], ['c', 0.06, -0.30, 0.06, -1.14, -0.03, -1.65], ['c', -0.03, -0.18, -0.06, -0.39, -0.09, -0.48], ['c', -0.03, -0.24, 0.12, -0.48, 0.36, -0.60], ['z'], ['m', -0.45, 6.15], ['c', -0.03, -0.18, -0.06, -0.42, -0.06, -0.54], ['l', -0.03, -0.18], ['l', -0.33, 0.30], ['c', -0.42, 0.36, -0.87, 0.72, -1.68, 1.29], ['c', -1.98, 1.38, -2.25, 1.59, -2.85, 2.16], ['c', -0.75, 0.69, -1.23, 1.44, -1.47, 2.19], ['c', -0.15, 0.45, -0.18, 0.63, -0.21, 1.35], ['l', 0.00, 0.66], ['l', 0.39, -0.18], ['c', 1.83, -0.90, 3.45, -1.95, 4.47, -2.91], ['c', 0.93, -0.90, 1.53, -1.83, 1.74, -2.82], ['c', 0.06, -0.33, 0.06, -0.87, 0.03, -1.32], ['z'], ['m', -0.27, 4.86], ['c', -0.03, -0.21, -0.06, -0.36, -0.06, -0.36], ['c', 0.00, -0.03, -0.12, 0.09, -0.24, 0.24], ['c', -0.39, 0.48, -0.99, 1.08, -2.16, 2.19], ['c', -1.47, 1.38, -1.92, 1.83, -2.46, 2.49], ['c', -0.66, 0.87, -1.08, 1.74, -1.29, 2.58], ['c', -0.09, 0.42, -0.15, 0.87, -0.15, 1.44], ['l', 0.00, 0.54], ['l', 0.48, -0.33], ['c', 1.50, -1.02, 2.58, -1.89, 3.51, -2.82], ['c', 1.47, -1.47, 2.25, -2.85, 2.40, -4.26], ['c', 0.03, -0.39, 0.03, -1.17, -0.03, -1.71], ['z'], ['m', -0.66, 7.68], ['c', 0.03, -0.15, 0.03, -0.60, 0.03, -0.99], ['l', 0.00, -0.72], ['l', -0.27, 0.33], ['l', -1.74, 1.98], ['c', -1.77, 1.92, -2.43, 2.76, -2.97, 3.90], ['c', -0.51, 1.02, -0.72, 1.77, -0.75, 2.91], ['c', 0.00, 0.63, 0.00, 0.63, 0.06, 0.60], ['c', 0.03, -0.03, 0.30, -0.27, 0.63, -0.54], ['c', 0.66, -0.60, 1.86, -1.80, 2.31, -2.31], ['c', 1.65, -1.89, 2.52, -3.54, 2.70, -5.16], ['z']], w: 8.485, h: 32.932 },\n\t'clefs.C': { d: [['M', 0.06, -14.94], ['l', 0.09, -0.06], ['l', 1.92, 0.00], ['l', 1.92, 0.00], ['l', 0.09, 0.06], ['l', 0.06, 0.09], ['l', 0.00, 14.85], ['l', 0.00, 14.82], ['l', -0.06, 0.09], ['l', -0.09, 0.06], ['l', -1.92, 0.00], ['l', -1.92, 0.00], ['l', -0.09, -0.06], ['l', -0.06, -0.09], ['l', 0.00, -14.82], ['l', 0.00, -14.85], ['z'], ['m', 5.37, 0.00], ['c', 0.09, -0.06, 0.09, -0.06, 0.57, -0.06], ['c', 0.45, 0.00, 0.45, 0.00, 0.54, 0.06], ['l', 0.06, 0.09], ['l', 0.00, 7.14], ['l', 0.00, 7.11], ['l', 0.09, -0.06], ['c', 0.18, -0.18, 0.72, -0.84, 0.96, -1.20], ['c', 0.30, -0.45, 0.66, -1.17, 0.84, -1.65], ['c', 0.36, -0.90, 0.57, -1.83, 0.60, -2.79], ['c', 0.03, -0.48, 0.03, -0.54, 0.09, -0.63], ['c', 0.12, -0.18, 0.36, -0.21, 0.54, -0.12], ['c', 0.18, 0.09, 0.21, 0.15, 0.24, 0.66], ['c', 0.06, 0.87, 0.21, 1.56, 0.57, 2.22], ['c', 0.51, 1.02, 1.26, 1.68, 2.22, 1.92], ['c', 0.21, 0.06, 0.33, 0.06, 0.78, 0.06], ['c', 0.45, 0.00, 0.57, 0.00, 0.84, -0.06], ['c', 0.45, -0.12, 0.81, -0.33, 1.08, -0.60], ['c', 0.57, -0.57, 0.87, -1.41, 0.99, -2.88], ['c', 0.06, -0.54, 0.06, -3.00, 0.00, -3.57], ['c', -0.21, -2.58, -0.84, -3.87, -2.16, -4.50], ['c', -0.48, -0.21, -1.17, -0.36, -1.77, -0.36], ['c', -0.69, 0.00, -1.29, 0.27, -1.50, 0.72], ['c', -0.06, 0.15, -0.06, 0.21, -0.06, 0.42], ['c', 0.00, 0.24, 0.00, 0.30, 0.06, 0.45], ['c', 0.12, 0.24, 0.24, 0.39, 0.63, 0.66], ['c', 0.42, 0.30, 0.57, 0.48, 0.69, 0.72], ['c', 0.06, 0.15, 0.06, 0.21, 0.06, 0.48], ['c', 0.00, 0.39, -0.03, 0.63, -0.21, 0.96], ['c', -0.30, 0.60, -0.87, 1.08, -1.50, 1.26], ['c', -0.27, 0.06, -0.87, 0.06, -1.14, 0.00], ['c', -0.78, -0.24, -1.44, -0.87, -1.65, -1.68], ['c', -0.12, -0.42, -0.09, -1.17, 0.09, -1.71], ['c', 0.51, -1.65, 1.98, -2.82, 3.81, -3.09], ['c', 0.84, -0.09, 2.46, 0.03, 3.51, 0.27], ['c', 2.22, 0.57, 3.69, 1.80, 4.44, 3.75], ['c', 0.36, 0.93, 0.57, 2.13, 0.57, 3.36], ['c', 0.00, 1.44, -0.48, 2.73, -1.38, 3.81], ['c', -1.26, 1.50, -3.27, 2.43, -5.28, 2.43], ['c', -0.48, 0.00, -0.51, 0.00, -0.75, -0.09], ['c', -0.15, -0.03, -0.48, -0.21, -0.78, -0.36], ['c', -0.69, -0.36, -0.87, -0.42, -1.26, -0.42], ['c', -0.27, 0.00, -0.30, 0.00, -0.51, 0.09], ['c', -0.57, 0.30, -0.81, 0.90, -0.81, 2.10], ['c', 0.00, 1.23, 0.24, 1.83, 0.81, 2.13], ['c', 0.21, 0.09, 0.24, 0.09, 0.51, 0.09], ['c', 0.39, 0.00, 0.57, -0.06, 1.26, -0.42], ['c', 0.30, -0.15, 0.63, -0.33, 0.78, -0.36], ['c', 0.24, -0.09, 0.27, -0.09, 0.75, -0.09], ['c', 2.01, 0.00, 4.02, 0.93, 5.28, 2.40], ['c', 0.90, 1.11, 1.38, 2.40, 1.38, 3.84], ['c', 0.00, 1.50, -0.30, 2.88, -0.84, 3.96], ['c', -0.78, 1.59, -2.19, 2.64, -4.17, 3.15], ['c', -1.05, 0.24, -2.67, 0.36, -3.51, 0.27], ['c', -1.83, -0.27, -3.30, -1.44, -3.81, -3.09], ['c', -0.18, -0.54, -0.21, -1.29, -0.09, -1.74], ['c', 0.15, -0.60, 0.63, -1.20, 1.23, -1.47], ['c', 0.36, -0.18, 0.57, -0.21, 0.99, -0.21], ['c', 0.42, 0.00, 0.63, 0.03, 1.02, 0.21], ['c', 0.42, 0.21, 0.84, 0.63, 1.05, 1.05], ['c', 0.18, 0.36, 0.21, 0.60, 0.21, 0.96], ['c', 0.00, 0.30, 0.00, 0.36, -0.06, 0.51], ['c', -0.12, 0.24, -0.27, 0.42, -0.69, 0.72], ['c', -0.57, 0.42, -0.69, 0.63, -0.69, 1.08], ['c', 0.00, 0.24, 0.00, 0.30, 0.06, 0.45], ['c', 0.12, 0.21, 0.30, 0.39, 0.57, 0.54], ['c', 0.42, 0.18, 0.87, 0.21, 1.53, 0.15], ['c', 1.08, -0.15, 1.80, -0.57, 2.34, -1.32], ['c', 0.54, -0.75, 0.84, -1.83, 0.99, -3.51], ['c', 0.06, -0.57, 0.06, -3.03, 0.00, -3.57], ['c', -0.12, -1.47, -0.42, -2.31, -0.99, -2.88], ['c', -0.27, -0.27, -0.63, -0.48, -1.08, -0.60], ['c', -0.27, -0.06, -0.39, -0.06, -0.84, -0.06], ['c', -0.45, 0.00, -0.57, 0.00, -0.78, 0.06], ['c', -1.14, 0.27, -2.01, 1.17, -2.46, 2.49], ['c', -0.21, 0.57, -0.30, 0.99, -0.33, 1.65], ['c', -0.03, 0.51, -0.06, 0.57, -0.24, 0.66], ['c', -0.12, 0.06, -0.27, 0.06, -0.39, 0.00], ['c', -0.21, -0.09, -0.21, -0.15, -0.24, -0.75], ['c', -0.09, -1.92, -0.78, -3.72, -2.01, -5.19], ['c', -0.18, -0.21, -0.36, -0.42, -0.39, -0.45], ['l', -0.09, -0.06], ['l', 0.00, 7.11], ['l', 0.00, 7.14], ['l', -0.06, 0.09], ['c', -0.09, 0.06, -0.09, 0.06, -0.54, 0.06], ['c', -0.48, 0.00, -0.48, 0.00, -0.57, -0.06], ['l', -0.06, -0.09], ['l', 0.00, -14.82], ['l', 0.00, -14.85], ['z']], w: 20.31, h: 29.97 },\n\t'clefs.F': { d: [['M', 6.30, -7.80], ['c', 0.36, -0.03, 1.65, 0.00, 2.13, 0.03], ['c', 3.60, 0.42, 6.03, 2.10, 6.93, 4.86], ['c', 0.27, 0.84, 0.36, 1.50, 0.36, 2.58], ['c', 0.00, 0.90, -0.03, 1.35, -0.18, 2.16], ['c', -0.78, 3.78, -3.54, 7.08, -8.37, 9.96], ['c', -1.74, 1.05, -3.87, 2.13, -6.18, 3.12], ['c', -0.39, 0.18, -0.75, 0.33, -0.81, 0.36], ['c', -0.06, 0.03, -0.15, 0.06, -0.18, 0.06], ['c', -0.15, 0.00, -0.33, -0.18, -0.33, -0.33], ['c', 0.00, -0.15, 0.06, -0.21, 0.51, -0.48], ['c', 3.00, -1.77, 5.13, -3.21, 6.84, -4.74], ['c', 0.51, -0.45, 1.59, -1.50, 1.95, -1.95], ['c', 1.89, -2.19, 2.88, -4.32, 3.15, -6.78], ['c', 0.06, -0.42, 0.06, -1.77, 0.00, -2.19], ['c', -0.24, -2.01, -0.93, -3.63, -2.04, -4.71], ['c', -0.63, -0.63, -1.29, -1.02, -2.07, -1.20], ['c', -1.62, -0.39, -3.36, 0.15, -4.56, 1.44], ['c', -0.54, 0.60, -1.05, 1.47, -1.32, 2.22], ['l', -0.09, 0.21], ['l', 0.24, -0.12], ['c', 0.39, -0.21, 0.63, -0.24, 1.11, -0.24], ['c', 0.30, 0.00, 0.45, 0.00, 0.66, 0.06], ['c', 1.92, 0.48, 2.85, 2.55, 1.95, 4.38], ['c', -0.45, 0.99, -1.41, 1.62, -2.46, 1.71], ['c', -1.47, 0.09, -2.91, -0.87, -3.39, -2.25], ['c', -0.18, -0.57, -0.21, -1.32, -0.03, -2.28], ['c', 0.39, -2.25, 1.83, -4.20, 3.81, -5.19], ['c', 0.69, -0.36, 1.59, -0.60, 2.37, -0.69], ['z'], ['m', 11.58, 2.52], ['c', 0.84, -0.21, 1.71, 0.30, 1.89, 1.14], ['c', 0.30, 1.17, -0.72, 2.19, -1.89, 1.89], ['c', -0.99, -0.21, -1.50, -1.32, -1.02, -2.25], ['c', 0.18, -0.39, 0.60, -0.69, 1.02, -0.78], ['z'], ['m', 0.00, 7.50], ['c', 0.84, -0.21, 1.71, 0.30, 1.89, 1.14], ['c', 0.21, 0.87, -0.30, 1.71, -1.14, 1.89], ['c', -0.87, 0.21, -1.71, -0.30, -1.89, -1.14], ['c', -0.21, -0.84, 0.30, -1.71, 1.14, -1.89], ['z']], w: 20.153, h: 23.142 },\n\t'clefs.G': { d: [['M', 9.69, -37.41], ['c', 0.09, -0.09, 0.24, -0.06, 0.36, 0.00], ['c', 0.12, 0.09, 0.57, 0.60, 0.96, 1.11], ['c', 1.77, 2.34, 3.21, 5.85, 3.57, 8.73], ['c', 0.21, 1.56, 0.03, 3.27, -0.45, 4.86], ['c', -0.69, 2.31, -1.92, 4.47, -4.23, 7.44], ['c', -0.30, 0.39, -0.57, 0.72, -0.60, 0.75], ['c', -0.03, 0.06, 0.00, 0.15, 0.18, 0.78], ['c', 0.54, 1.68, 1.38, 4.44, 1.68, 5.49], ['l', 0.09, 0.42], ['l', 0.39, 0.00], ['c', 1.47, 0.09, 2.76, 0.51, 3.96, 1.29], ['c', 1.83, 1.23, 3.06, 3.21, 3.39, 5.52], ['c', 0.09, 0.45, 0.12, 1.29, 0.06, 1.74], ['c', -0.09, 1.02, -0.33, 1.83, -0.75, 2.73], ['c', -0.84, 1.71, -2.28, 3.06, -4.02, 3.72], ['l', -0.33, 0.12], ['l', 0.03, 1.26], ['c', 0.00, 1.74, -0.06, 3.63, -0.21, 4.62], ['c', -0.45, 3.06, -2.19, 5.49, -4.47, 6.21], ['c', -0.57, 0.18, -0.90, 0.21, -1.59, 0.21], ['c', -0.69, 0.00, -1.02, -0.03, -1.65, -0.21], ['c', -1.14, -0.27, -2.13, -0.84, -2.94, -1.65], ['c', -0.99, -0.99, -1.56, -2.16, -1.71, -3.54], ['c', -0.09, -0.81, 0.06, -1.53, 0.45, -2.13], ['c', 0.63, -0.99, 1.83, -1.56, 3.00, -1.53], ['c', 1.50, 0.09, 2.64, 1.32, 2.73, 2.94], ['c', 0.06, 1.47, -0.93, 2.70, -2.37, 2.97], ['c', -0.45, 0.06, -0.84, 0.03, -1.29, -0.09], ['l', -0.21, -0.09], ['l', 0.09, 0.12], ['c', 0.39, 0.54, 0.78, 0.93, 1.32, 1.26], ['c', 1.35, 0.87, 3.06, 1.02, 4.35, 0.36], ['c', 1.44, -0.72, 2.52, -2.28, 2.97, -4.35], ['c', 0.15, -0.66, 0.24, -1.50, 0.30, -3.03], ['c', 0.03, -0.84, 0.03, -2.94, 0.00, -3.00], ['c', -0.03, 0.00, -0.18, 0.00, -0.36, 0.03], ['c', -0.66, 0.12, -0.99, 0.12, -1.83, 0.12], ['c', -1.05, 0.00, -1.71, -0.06, -2.61, -0.30], ['c', -4.02, -0.99, -7.11, -4.35, -7.80, -8.46], ['c', -0.12, -0.66, -0.12, -0.99, -0.12, -1.83], ['c', 0.00, -0.84, 0.00, -1.14, 0.15, -1.92], ['c', 0.36, -2.28, 1.41, -4.62, 3.30, -7.29], ['l', 2.79, -3.60], ['c', 0.54, -0.66, 0.96, -1.20, 0.96, -1.23], ['c', 0.00, -0.03, -0.09, -0.33, -0.18, -0.69], ['c', -0.96, -3.21, -1.41, -5.28, -1.59, -7.68], ['c', -0.12, -1.38, -0.15, -3.09, -0.06, -3.96], ['c', 0.33, -2.67, 1.38, -5.07, 3.12, -7.08], ['c', 0.36, -0.42, 0.99, -1.05, 1.17, -1.14], ['z'], ['m', 2.01, 4.71], ['c', -0.15, -0.30, -0.30, -0.54, -0.30, -0.54], ['c', -0.03, 0.00, -0.18, 0.09, -0.30, 0.21], ['c', -2.40, 1.74, -3.87, 4.20, -4.26, 7.11], ['c', -0.06, 0.54, -0.06, 1.41, -0.03, 1.89], ['c', 0.09, 1.29, 0.48, 3.12, 1.08, 5.22], ['c', 0.15, 0.42, 0.24, 0.78, 0.24, 0.81], ['c', 0.00, 0.03, 0.84, -1.11, 1.23, -1.68], ['c', 1.89, -2.73, 2.88, -5.07, 3.15, -7.53], ['c', 0.09, -0.57, 0.12, -1.74, 0.06, -2.37], ['c', -0.09, -1.23, -0.27, -1.92, -0.87, -3.12], ['z'], ['m', -2.94, 20.70], ['c', -0.21, -0.72, -0.39, -1.32, -0.42, -1.32], ['c', 0.00, 0.00, -1.20, 1.47, -1.86, 2.37], ['c', -2.79, 3.63, -4.02, 6.30, -4.35, 9.30], ['c', -0.03, 0.21, -0.03, 0.69, -0.03, 1.08], ['c', 0.00, 0.69, 0.00, 0.75, 0.06, 1.11], ['c', 0.12, 0.54, 0.27, 0.99, 0.51, 1.47], ['c', 0.69, 1.38, 1.83, 2.55, 3.42, 3.42], ['c', 0.96, 0.54, 2.07, 0.90, 3.21, 1.08], ['c', 0.78, 0.12, 2.04, 0.12, 2.94, -0.03], ['c', 0.51, -0.06, 0.45, -0.03, 0.42, -0.30], ['c', -0.24, -3.33, -0.72, -6.33, -1.62, -10.08], ['c', -0.09, -0.39, -0.18, -0.75, -0.18, -0.78], ['c', -0.03, -0.03, -0.42, 0.00, -0.81, 0.09], ['c', -0.90, 0.18, -1.65, 0.57, -2.22, 1.14], ['c', -0.72, 0.72, -1.08, 1.65, -1.05, 2.64], ['c', 0.06, 0.96, 0.48, 1.83, 1.23, 2.58], ['c', 0.36, 0.36, 0.72, 0.63, 1.17, 0.90], ['c', 0.33, 0.18, 0.36, 0.21, 0.42, 0.33], ['c', 0.18, 0.42, -0.18, 0.90, -0.60, 0.87], ['c', -0.18, -0.03, -0.84, -0.36, -1.26, -0.63], ['c', -0.78, -0.51, -1.38, -1.11, -1.86, -1.83], ['c', -1.77, -2.70, -0.99, -6.42, 1.71, -8.19], ['c', 0.30, -0.21, 0.81, -0.48, 1.17, -0.63], ['c', 0.30, -0.09, 1.02, -0.30, 1.14, -0.30], ['c', 0.06, 0.00, 0.09, 0.00, 0.09, -0.03], ['c', 0.03, -0.03, -0.51, -1.92, -1.23, -4.26], ['z'], ['m', 3.78, 7.41], ['c', -0.18, -0.03, -0.36, -0.06, -0.39, -0.06], ['c', -0.03, 0.00, 0.00, 0.21, 0.18, 1.02], ['c', 0.75, 3.18, 1.26, 6.30, 1.50, 9.09], ['c', 0.06, 0.72, 0.00, 0.69, 0.51, 0.42], ['c', 0.78, -0.36, 1.44, -0.96, 1.98, -1.77], ['c', 1.08, -1.62, 1.20, -3.69, 0.30, -5.55], ['c', -0.81, -1.62, -2.31, -2.79, -4.08, -3.15], ['z']], w: 19.051, h: 57.057 },\n\t'clefs.perc': { d: [['M', 5.07, -7.44], ['l', 0.09, -0.06], ['l', 1.53, 0.00], ['l', 1.53, 0.00], ['l', 0.09, 0.06], ['l', 0.06, 0.09], ['l', 0.00, 7.35], ['l', 0.00, 7.32], ['l', -0.06, 0.09], ['l', -0.09, 0.06], ['l', -1.53, 0.00], ['l', -1.53, 0.00], ['l', -0.09, -0.06], ['l', -0.06, -0.09], ['l', 0.00, -7.32], ['l', 0.00, -7.35], ['z'], ['m', 6.63, 0.00], ['l', 0.09, -0.06], ['l', 1.53, 0.00], ['l', 1.53, 0.00], ['l', 0.09, 0.06], ['l', 0.06, 0.09], ['l', 0.00, 7.35], ['l', 0.00, 7.32], ['l', -0.06, 0.09], ['l', -0.09, 0.06], ['l', -1.53, 0.00], ['l', -1.53, 0.00], ['l', -0.09, -0.06], ['l', -0.06, -0.09], ['l', 0.00, -7.32], ['l', 0.00, -7.35], ['z']], w: 21, h: 14.97 },\n\t'tab.big': { d: [['M', 20.16, -21.66], ['c', 0.24, -0.09, 0.66, 0.09, 0.78, 0.36], ['c', 0.09, 0.21, 0.09, 0.24, -0.18, 0.54], ['c', -0.78, 0.81, -1.86, 1.44, -2.94, 1.71], ['c', -0.87, 0.24, -1.71, 0.24, -2.55, 0.03], ['l', -0.06, -0.03], ['l', -0.18, 0.99], ['c', -0.33, 1.98, -0.75, 4.26, -0.96, 5.04], ['c', -0.42, 1.65, -1.26, 3.18, -2.28, 4.14], ['c', -0.57, 0.57, -1.17, 0.90, -1.86, 1.08], ['c', -0.18, 0.06, -0.33, 0.06, -0.66, 0.06], ['c', -0.54, 0.00, -0.78, -0.03, -1.23, -0.27], ['c', -0.39, -0.18, -0.66, -0.39, -1.38, -0.99], ['c', -0.30, -0.24, -0.66, -0.51, -0.75, -0.57], ['c', -0.21, -0.15, -0.27, -0.24, -0.24, -0.45], ['c', 0.06, -0.27, 0.36, -0.60, 0.60, -0.66], ['c', 0.18, -0.03, 0.33, 0.06, 0.90, 0.57], ['c', 0.48, 0.42, 0.72, 0.57, 0.93, 0.69], ['c', 0.66, 0.33, 1.38, 0.21, 1.95, -0.36], ['c', 0.63, -0.60, 1.05, -1.62, 1.23, -3.00], ['c', 0.03, -0.18, 0.09, -0.66, 0.09, -1.11], ['c', 0.09, -1.56, 0.33, -3.81, 0.57, -5.49], ['c', 0.06, -0.33, 0.09, -0.63, 0.09, -0.63], ['c', -0.03, -0.03, -0.81, -0.12, -1.02, -0.12], ['c', -0.57, 0.00, -1.32, 0.12, -1.80, 0.33], ['c', -0.87, 0.30, -1.35, 0.78, -1.50, 1.41], ['c', -0.18, 0.63, 0.09, 1.26, 0.66, 1.65], ['c', 0.12, 0.06, 0.15, 0.12, 0.18, 0.24], ['c', 0.09, 0.27, 0.06, 0.57, -0.09, 0.75], ['c', -0.03, 0.06, -0.12, 0.09, -0.27, 0.15], ['c', -0.72, 0.21, -1.44, 0.15, -2.10, -0.18], ['c', -0.54, -0.27, -0.96, -0.66, -1.20, -1.14], ['c', -0.39, -0.75, -0.33, -1.74, 0.15, -2.52], ['c', 0.27, -0.42, 0.84, -0.93, 1.41, -1.23], ['c', 1.17, -0.57, 2.88, -0.90, 4.80, -0.90], ['c', 0.69, 0.00, 0.78, 0.00, 1.08, 0.06], ['c', 0.45, 0.09, 1.11, 0.30, 2.07, 0.60], ['c', 1.47, 0.48, 1.83, 0.57, 2.55, 0.54], ['c', 1.02, -0.06, 2.04, -0.45, 2.94, -1.11], ['c', 0.12, -0.09, 0.24, -0.18, 0.27, -0.18], ['z'], ['m', -5.88, 13.05], ['c', 0.21, -0.03, 0.81, 0.00, 1.08, 0.06], ['c', 0.48, 0.12, 0.90, 0.42, 0.99, 0.69], ['c', 0.03, 0.09, 0.03, 0.15, 0.00, 0.27], ['c', 0.00, 0.09, -0.03, 0.57, -0.06, 1.08], ['c', -0.09, 2.19, -0.24, 5.76, -0.39, 8.28], ['c', -0.06, 1.53, -0.06, 1.77, 0.03, 2.01], ['c', 0.09, 0.18, 0.15, 0.24, 0.30, 0.30], ['c', 0.24, 0.12, 0.54, 0.06, 1.23, -0.27], ['c', 0.57, -0.27, 0.66, -0.30, 0.75, -0.24], ['c', 0.09, 0.06, 0.18, 0.30, 0.18, 0.45], ['c', 0.00, 0.33, -0.15, 0.51, -0.45, 0.63], ['c', -0.12, 0.03, -0.39, 0.15, -0.60, 0.27], ['c', -1.17, 0.60, -1.38, 0.69, -1.80, 0.72], ['c', -0.45, 0.03, -0.78, -0.09, -1.08, -0.39], ['c', -0.39, -0.42, -0.66, -1.20, -1.02, -3.12], ['c', -0.24, -1.23, -0.36, -2.07, -0.54, -3.75], ['l', 0.00, -0.18], ['l', -0.36, 0.45], ['c', -0.60, 0.75, -1.32, 1.59, -1.95, 2.25], ['c', -0.15, 0.18, -0.27, 0.30, -0.27, 0.33], ['c', 0.00, 0.00, 0.06, 0.09, 0.15, 0.18], ['c', 0.24, 0.33, 0.60, 0.57, 1.05, 0.69], ['c', 0.18, 0.06, 0.30, 0.06, 0.69, 0.06], ['l', 0.48, 0.03], ['l', 0.06, 0.12], ['c', 0.15, 0.27, 0.03, 0.72, -0.21, 0.90], ['c', -0.18, 0.12, -0.93, 0.27, -1.41, 0.27], ['c', -0.84, 0.00, -1.59, -0.30, -1.98, -0.84], ['l', -0.12, -0.15], ['l', -0.45, 0.42], ['c', -0.99, 0.87, -1.53, 1.32, -2.16, 1.74], ['c', -0.78, 0.51, -1.50, 0.84, -2.10, 0.93], ['c', -0.69, 0.12, -1.20, 0.03, -1.95, -0.42], ['c', -0.21, -0.12, -0.51, -0.27, -0.66, -0.36], ['c', -0.24, -0.12, -0.30, -0.18, -0.33, -0.24], ['c', -0.12, -0.27, 0.15, -0.78, 0.45, -0.93], ['c', 0.24, -0.12, 0.33, -0.09, 0.90, 0.18], ['c', 0.60, 0.30, 0.84, 0.39, 1.20, 0.36], ['c', 0.87, -0.09, 1.77, -0.69, 3.24, -2.31], ['c', 2.67, -2.85, 4.59, -5.94, 5.70, -9.15], ['c', 0.15, -0.45, 0.24, -0.63, 0.42, -0.81], ['c', 0.21, -0.24, 0.60, -0.45, 0.99, -0.51], ['z'], ['m', -3.99, 16.05], ['c', 0.18, 0.00, 0.69, -0.03, 1.17, 0.00], ['c', 3.27, 0.03, 5.37, 0.75, 6.00, 2.07], ['c', 0.45, 0.99, 0.12, 2.40, -0.81, 3.42], ['c', -0.24, 0.27, -0.57, 0.57, -0.84, 0.75], ['c', -0.09, 0.06, -0.18, 0.09, -0.18, 0.12], ['c', 0.00, 0.00, 0.18, 0.03, 0.42, 0.09], ['c', 1.23, 0.30, 2.01, 0.81, 2.37, 1.59], ['c', 0.27, 0.54, 0.30, 1.32, 0.09, 2.10], ['c', -0.12, 0.36, -0.45, 1.05, -0.69, 1.35], ['c', -0.87, 1.17, -2.10, 1.92, -3.54, 2.25], ['c', -0.36, 0.06, -0.48, 0.06, -0.96, 0.06], ['c', -0.45, 0.00, -0.66, 0.00, -0.84, -0.03], ['c', -0.84, -0.18, -1.47, -0.51, -2.07, -1.11], ['c', -0.33, -0.33, -0.45, -0.51, -0.45, -0.63], ['c', 0.00, -0.06, 0.03, -0.15, 0.06, -0.24], ['c', 0.18, -0.33, 0.69, -0.60, 0.93, -0.48], ['c', 0.03, 0.03, 0.15, 0.12, 0.27, 0.24], ['c', 0.39, 0.42, 0.99, 0.57, 1.62, 0.45], ['c', 1.05, -0.21, 1.98, -1.02, 2.31, -2.01], ['c', 0.48, -1.53, -0.48, -2.55, -2.58, -2.67], ['c', -0.21, 0.00, -0.36, -0.03, -0.42, -0.06], ['c', -0.15, -0.09, -0.21, -0.51, -0.06, -0.78], ['c', 0.12, -0.27, 0.24, -0.33, 0.60, -0.36], ['c', 0.57, -0.06, 1.11, -0.42, 1.50, -0.99], ['c', 0.48, -0.72, 0.54, -1.59, 0.18, -2.31], ['c', -0.12, -0.21, -0.45, -0.54, -0.69, -0.69], ['c', -0.33, -0.21, -0.93, -0.45, -1.35, -0.51], ['l', -0.12, -0.03], ['l', -0.06, 0.48], ['c', -0.54, 2.94, -1.14, 6.24, -1.29, 6.75], ['c', -0.33, 1.35, -0.93, 2.61, -1.65, 3.60], ['c', -0.30, 0.36, -0.81, 0.90, -1.14, 1.14], ['c', -0.30, 0.24, -0.84, 0.48, -1.14, 0.57], ['c', -0.33, 0.09, -0.96, 0.09, -1.26, 0.03], ['c', -0.45, -0.12, -0.87, -0.39, -1.53, -0.96], ['c', -0.24, -0.15, -0.51, -0.39, -0.63, -0.48], ['c', -0.30, -0.21, -0.33, -0.33, -0.21, -0.63], ['c', 0.12, -0.18, 0.27, -0.36, 0.42, -0.45], ['c', 0.27, -0.12, 0.36, -0.09, 0.87, 0.33], ['c', 0.78, 0.60, 1.08, 0.75, 1.65, 0.72], ['c', 0.45, -0.03, 0.81, -0.21, 1.17, -0.54], ['c', 0.87, -0.90, 1.38, -2.85, 1.38, -5.37], ['c', 0.00, -0.60, 0.03, -1.11, 0.12, -2.04], ['c', 0.06, -0.69, 0.24, -2.01, 0.33, -2.58], ['c', 0.06, -0.24, 0.06, -0.42, 0.06, -0.42], ['c', 0.00, 0.00, -0.12, 0.03, -0.21, 0.09], ['c', -1.44, 0.57, -2.16, 1.65, -1.74, 2.55], ['c', 0.09, 0.15, 0.18, 0.24, 0.27, 0.33], ['c', 0.24, 0.21, 0.30, 0.27, 0.33, 0.39], ['c', 0.06, 0.24, 0.00, 0.63, -0.15, 0.78], ['c', -0.09, 0.12, -0.54, 0.21, -0.96, 0.24], ['c', -1.02, 0.03, -2.01, -0.48, -2.43, -1.32], ['c', -0.21, -0.45, -0.27, -0.90, -0.15, -1.44], ['c', 0.06, -0.27, 0.21, -0.66, 0.39, -0.93], ['c', 0.87, -1.29, 3.00, -2.22, 5.64, -2.43], ['z']], w: 19.643, h: 43.325 },\n\t'tab.tiny': { d: [['M', 16.02, -17.25], ['c', 0.12, -0.09, 0.15, -0.09, 0.27, -0.09], ['c', 0.21, 0.03, 0.51, 0.30, 0.51, 0.45], ['c', 0.00, 0.06, -0.12, 0.18, -0.30, 0.36], ['c', -1.11, 1.08, -2.55, 1.59, -3.84, 1.41], ['c', -0.15, -0.03, -0.33, -0.06, -0.39, -0.09], ['c', -0.06, -0.03, -0.09, -0.03, -0.12, -0.03], ['c', 0.00, 0.00, -0.06, 0.42, -0.15, 0.93], ['c', -0.33, 2.01, -0.66, 3.69, -0.84, 4.26], ['c', -0.42, 1.41, -1.23, 2.67, -2.16, 3.33], ['c', -0.27, 0.18, -0.75, 0.42, -0.99, 0.48], ['c', -0.30, 0.09, -0.72, 0.09, -1.02, 0.06], ['c', -0.45, -0.09, -0.84, -0.33, -1.53, -0.90], ['c', -0.21, -0.18, -0.51, -0.39, -0.63, -0.48], ['c', -0.27, -0.21, -0.30, -0.24, -0.30, -0.36], ['c', 0.00, -0.12, 0.09, -0.36, 0.18, -0.45], ['c', 0.09, -0.09, 0.27, -0.18, 0.36, -0.18], ['c', 0.12, 0.00, 0.30, 0.12, 0.66, 0.45], ['c', 0.57, 0.51, 0.87, 0.69, 1.23, 0.72], ['c', 0.93, 0.06, 1.68, -0.78, 1.98, -2.37], ['c', 0.09, -0.39, 0.15, -0.75, 0.18, -1.53], ['c', 0.06, -0.99, 0.24, -2.79, 0.42, -4.05], ['c', 0.03, -0.30, 0.06, -0.57, 0.06, -0.60], ['c', 0.00, -0.06, -0.03, -0.09, -0.15, -0.12], ['c', -0.90, -0.18, -2.13, 0.06, -2.76, 0.57], ['c', -0.36, 0.30, -0.51, 0.60, -0.51, 1.02], ['c', 0.00, 0.45, 0.15, 0.75, 0.48, 0.99], ['c', 0.06, 0.06, 0.15, 0.18, 0.18, 0.24], ['c', 0.12, 0.24, 0.03, 0.63, -0.15, 0.69], ['c', -0.24, 0.12, -0.60, 0.15, -0.90, 0.15], ['c', -0.36, -0.03, -0.57, -0.09, -0.87, -0.24], ['c', -0.78, -0.36, -1.23, -1.11, -1.20, -1.92], ['c', 0.12, -1.53, 1.74, -2.49, 4.62, -2.70], ['c', 1.20, -0.09, 1.47, -0.03, 3.33, 0.57], ['c', 0.90, 0.30, 1.14, 0.36, 1.56, 0.39], ['c', 0.45, 0.00, 0.93, -0.06, 1.38, -0.21], ['c', 0.51, -0.18, 0.81, -0.33, 1.41, -0.75], ['z'], ['m', -4.68, 10.38], ['c', 0.39, -0.06, 0.84, 0.00, 1.20, 0.15], ['c', 0.24, 0.12, 0.36, 0.21, 0.45, 0.36], ['l', 0.09, 0.09], ['l', -0.06, 1.41], ['c', -0.09, 2.19, -0.18, 3.96, -0.27, 5.49], ['c', -0.03, 0.78, -0.06, 1.59, -0.06, 1.86], ['c', 0.00, 0.42, 0.00, 0.48, 0.06, 0.57], ['c', 0.06, 0.18, 0.18, 0.24, 0.36, 0.27], ['c', 0.18, 0.00, 0.39, -0.06, 0.84, -0.27], ['c', 0.45, -0.21, 0.54, -0.24, 0.63, -0.18], ['c', 0.12, 0.12, 0.15, 0.54, 0.03, 0.69], ['c', -0.03, 0.03, -0.15, 0.12, -0.27, 0.18], ['c', -0.15, 0.03, -0.30, 0.12, -0.36, 0.15], ['c', -0.87, 0.45, -1.02, 0.51, -1.26, 0.57], ['c', -0.33, 0.09, -0.60, 0.06, -0.84, -0.06], ['c', -0.42, -0.18, -0.63, -0.60, -0.87, -1.44], ['c', -0.30, -1.23, -0.57, -2.97, -0.66, -4.08], ['c', 0.00, -0.18, -0.03, -0.30, -0.03, -0.33], ['l', -0.06, 0.06], ['c', -0.18, 0.27, -1.11, 1.38, -1.68, 2.01], ['l', -0.33, 0.33], ['l', 0.06, 0.09], ['c', 0.06, 0.15, 0.27, 0.33, 0.48, 0.42], ['c', 0.27, 0.18, 0.51, 0.24, 0.96, 0.27], ['l', 0.39, 0.00], ['l', 0.03, 0.12], ['c', 0.12, 0.21, 0.03, 0.57, -0.15, 0.69], ['c', -0.03, 0.03, -0.21, 0.09, -0.36, 0.15], ['c', -0.27, 0.06, -0.39, 0.06, -0.75, 0.06], ['c', -0.48, 0.00, -0.75, -0.03, -1.08, -0.21], ['c', -0.21, -0.12, -0.51, -0.36, -0.57, -0.48], ['l', -0.03, -0.09], ['l', -0.39, 0.36], ['c', -1.47, 1.35, -2.49, 1.98, -3.42, 2.13], ['c', -0.54, 0.09, -0.96, -0.03, -1.62, -0.39], ['c', -0.21, -0.15, -0.45, -0.27, -0.54, -0.30], ['c', -0.18, -0.09, -0.21, -0.21, -0.12, -0.45], ['c', 0.06, -0.27, 0.33, -0.48, 0.54, -0.48], ['c', 0.03, 0.00, 0.27, 0.09, 0.48, 0.21], ['c', 0.48, 0.24, 0.69, 0.27, 0.99, 0.27], ['c', 0.60, -0.06, 1.17, -0.42, 2.10, -1.35], ['c', 2.22, -2.22, 4.02, -4.98, 4.95, -7.59], ['c', 0.21, -0.57, 0.30, -0.78, 0.48, -0.93], ['c', 0.15, -0.15, 0.42, -0.27, 0.66, -0.33], ['z'], ['m', -3.06, 12.84], ['c', 0.27, -0.03, 1.68, 0.00, 2.01, 0.03], ['c', 1.92, 0.18, 3.15, 0.69, 3.63, 1.50], ['c', 0.18, 0.33, 0.24, 0.51, 0.21, 0.93], ['c', 0.00, 0.45, -0.06, 0.72, -0.24, 1.11], ['c', -0.24, 0.51, -0.69, 1.02, -1.17, 1.35], ['c', -0.21, 0.15, -0.21, 0.15, -0.12, 0.18], ['c', 0.72, 0.15, 1.11, 0.30, 1.50, 0.57], ['c', 0.39, 0.24, 0.63, 0.57, 0.75, 0.96], ['c', 0.09, 0.30, 0.09, 0.96, 0.00, 1.29], ['c', -0.15, 0.57, -0.39, 1.05, -0.78, 1.50], ['c', -0.66, 0.75, -1.62, 1.32, -2.61, 1.53], ['c', -0.27, 0.06, -0.42, 0.06, -0.84, 0.06], ['c', -0.48, 0.00, -0.57, 0.00, -0.81, -0.06], ['c', -0.60, -0.18, -1.05, -0.42, -1.47, -0.81], ['c', -0.36, -0.39, -0.42, -0.51, -0.30, -0.75], ['c', 0.12, -0.21, 0.39, -0.39, 0.60, -0.39], ['c', 0.09, 0.00, 0.15, 0.03, 0.33, 0.18], ['c', 0.12, 0.12, 0.27, 0.24, 0.36, 0.27], ['c', 0.96, 0.48, 2.46, -0.33, 2.82, -1.50], ['c', 0.24, -0.81, -0.03, -1.44, -0.69, -1.77], ['c', -0.39, -0.21, -1.02, -0.33, -1.53, -0.33], ['c', -0.18, 0.00, -0.21, 0.00, -0.27, -0.09], ['c', -0.06, -0.09, -0.06, -0.30, -0.03, -0.48], ['c', 0.06, -0.18, 0.18, -0.36, 0.33, -0.36], ['c', 0.39, -0.06, 0.51, -0.09, 0.72, -0.18], ['c', 0.69, -0.36, 1.11, -1.23, 0.99, -2.01], ['c', -0.09, -0.51, -0.42, -0.90, -0.93, -1.17], ['c', -0.24, -0.12, -0.60, -0.27, -0.87, -0.30], ['c', -0.09, -0.03, -0.09, -0.03, -0.12, 0.12], ['c', 0.00, 0.09, -0.21, 1.11, -0.42, 2.25], ['c', -0.66, 3.75, -0.72, 3.99, -1.26, 5.07], ['c', -0.90, 1.89, -2.25, 2.85, -3.48, 2.61], ['c', -0.39, -0.09, -0.69, -0.27, -1.38, -0.84], ['c', -0.63, -0.51, -0.63, -0.48, -0.63, -0.60], ['c', 0.00, -0.18, 0.18, -0.48, 0.39, -0.57], ['c', 0.21, -0.12, 0.30, -0.09, 0.81, 0.33], ['c', 0.15, 0.15, 0.39, 0.30, 0.54, 0.36], ['c', 0.18, 0.12, 0.27, 0.12, 0.48, 0.15], ['c', 0.99, 0.06, 1.71, -0.78, 2.04, -2.46], ['c', 0.12, -0.66, 0.18, -1.14, 0.21, -2.22], ['c', 0.03, -1.23, 0.12, -2.25, 0.36, -3.63], ['c', 0.03, -0.24, 0.06, -0.45, 0.06, -0.48], ['c', -0.06, -0.03, -0.66, 0.27, -0.90, 0.42], ['c', -0.06, 0.06, -0.21, 0.18, -0.33, 0.30], ['c', -0.57, 0.57, -0.60, 1.35, -0.06, 1.74], ['c', 0.18, 0.12, 0.24, 0.24, 0.21, 0.51], ['c', -0.03, 0.30, -0.15, 0.42, -0.57, 0.48], ['c', -1.11, 0.24, -2.22, -0.42, -2.43, -1.38], ['c', -0.09, -0.45, 0.03, -1.02, 0.30, -1.47], ['c', 0.18, -0.24, 0.60, -0.63, 0.90, -0.84], ['c', 0.90, -0.60, 2.28, -1.02, 3.69, -1.11], ['z']], w: 15.709, h: 34.656 },\n\t'timesig.common': { d: [['M', 6.66, -7.83], ['c', 0.72, -0.06, 1.41, -0.03, 1.98, 0.09], ['c', 1.20, 0.27, 2.34, 0.96, 3.09, 1.92], ['c', 0.63, 0.81, 1.08, 1.86, 1.14, 2.73], ['c', 0.06, 1.02, -0.51, 1.92, -1.44, 2.22], ['c', -0.24, 0.09, -0.30, 0.09, -0.63, 0.09], ['c', -0.33, 0.00, -0.42, 0.00, -0.63, -0.06], ['c', -0.66, -0.24, -1.14, -0.63, -1.41, -1.20], ['c', -0.15, -0.30, -0.21, -0.51, -0.24, -0.90], ['c', -0.06, -1.08, 0.57, -2.04, 1.56, -2.37], ['c', 0.18, -0.06, 0.27, -0.06, 0.63, -0.06], ['l', 0.45, 0.00], ['c', 0.06, 0.03, 0.09, 0.03, 0.09, 0.00], ['c', 0.00, 0.00, -0.09, -0.12, -0.24, -0.27], ['c', -1.02, -1.11, -2.55, -1.68, -4.08, -1.50], ['c', -1.29, 0.15, -2.04, 0.69, -2.40, 1.74], ['c', -0.36, 0.93, -0.42, 1.89, -0.42, 5.37], ['c', 0.00, 2.97, 0.06, 3.96, 0.24, 4.77], ['c', 0.24, 1.08, 0.63, 1.68, 1.41, 2.07], ['c', 0.81, 0.39, 2.16, 0.45, 3.18, 0.09], ['c', 1.29, -0.45, 2.37, -1.53, 3.03, -2.97], ['c', 0.15, -0.33, 0.33, -0.87, 0.39, -1.17], ['c', 0.09, -0.24, 0.15, -0.36, 0.30, -0.39], ['c', 0.21, -0.03, 0.42, 0.15, 0.39, 0.36], ['c', -0.06, 0.39, -0.42, 1.38, -0.69, 1.89], ['c', -0.96, 1.80, -2.49, 2.94, -4.23, 3.18], ['c', -0.99, 0.12, -2.58, -0.06, -3.63, -0.45], ['c', -0.96, -0.36, -1.71, -0.84, -2.40, -1.50], ['c', -1.11, -1.11, -1.80, -2.61, -2.04, -4.56], ['c', -0.06, -0.60, -0.06, -2.01, 0.00, -2.61], ['c', 0.24, -1.95, 0.90, -3.45, 2.01, -4.56], ['c', 0.69, -0.66, 1.44, -1.11, 2.37, -1.47], ['c', 0.63, -0.24, 1.47, -0.42, 2.22, -0.48], ['z']], w: 13.038, h: 15.689 },\n\t'timesig.cut': { d: [['M', 6.24, -10.44], ['c', 0.09, -0.06, 0.09, -0.06, 0.48, -0.06], ['c', 0.36, 0.00, 0.36, 0.00, 0.45, 0.06], ['l', 0.06, 0.09], ['l', 0.00, 1.23], ['l', 0.00, 1.26], ['l', 0.27, 0.00], ['c', 1.26, 0.00, 2.49, 0.45, 3.48, 1.29], ['c', 1.05, 0.87, 1.80, 2.28, 1.89, 3.48], ['c', 0.06, 1.02, -0.51, 1.92, -1.44, 2.22], ['c', -0.24, 0.09, -0.30, 0.09, -0.63, 0.09], ['c', -0.33, 0.00, -0.42, 0.00, -0.63, -0.06], ['c', -0.66, -0.24, -1.14, -0.63, -1.41, -1.20], ['c', -0.15, -0.30, -0.21, -0.51, -0.24, -0.90], ['c', -0.06, -1.08, 0.57, -2.04, 1.56, -2.37], ['c', 0.18, -0.06, 0.27, -0.06, 0.63, -0.06], ['l', 0.45, 0.00], ['c', 0.06, 0.03, 0.09, 0.03, 0.09, 0.00], ['c', 0.00, -0.03, -0.45, -0.51, -0.66, -0.69], ['c', -0.87, -0.69, -1.83, -1.05, -2.94, -1.11], ['l', -0.42, 0.00], ['l', 0.00, 7.17], ['l', 0.00, 7.14], ['l', 0.42, 0.00], ['c', 0.69, -0.03, 1.23, -0.18, 1.86, -0.51], ['c', 1.05, -0.51, 1.89, -1.47, 2.46, -2.70], ['c', 0.15, -0.33, 0.33, -0.87, 0.39, -1.17], ['c', 0.09, -0.24, 0.15, -0.36, 0.30, -0.39], ['c', 0.21, -0.03, 0.42, 0.15, 0.39, 0.36], ['c', -0.03, 0.24, -0.21, 0.78, -0.39, 1.20], ['c', -0.96, 2.37, -2.94, 3.90, -5.13, 3.90], ['l', -0.30, 0.00], ['l', 0.00, 1.26], ['l', 0.00, 1.23], ['l', -0.06, 0.09], ['c', -0.09, 0.06, -0.09, 0.06, -0.45, 0.06], ['c', -0.39, 0.00, -0.39, 0.00, -0.48, -0.06], ['l', -0.06, -0.09], ['l', 0.00, -1.29], ['l', 0.00, -1.29], ['l', -0.21, -0.03], ['c', -1.23, -0.21, -2.31, -0.63, -3.21, -1.29], ['c', -0.15, -0.09, -0.45, -0.36, -0.66, -0.57], ['c', -1.11, -1.11, -1.80, -2.61, -2.04, -4.56], ['c', -0.06, -0.60, -0.06, -2.01, 0.00, -2.61], ['c', 0.24, -1.95, 0.93, -3.45, 2.04, -4.59], ['c', 0.42, -0.39, 0.78, -0.66, 1.26, -0.93], ['c', 0.75, -0.45, 1.65, -0.75, 2.61, -0.90], ['l', 0.21, -0.03], ['l', 0.00, -1.29], ['l', 0.00, -1.29], ['z'], ['m', -0.06, 10.44], ['c', 0.00, -5.58, 0.00, -6.99, -0.03, -6.99], ['c', -0.15, 0.00, -0.63, 0.27, -0.87, 0.45], ['c', -0.45, 0.36, -0.75, 0.93, -0.93, 1.77], ['c', -0.18, 0.81, -0.24, 1.80, -0.24, 4.74], ['c', 0.00, 2.97, 0.06, 3.96, 0.24, 4.77], ['c', 0.24, 1.08, 0.66, 1.68, 1.41, 2.07], ['c', 0.12, 0.06, 0.30, 0.12, 0.33, 0.15], ['l', 0.09, 0.00], ['l', 0.00, -6.96], ['z']], w: 13.038, h: 20.97 },\n\t'timesig.imperfectum': { d: [['M', 13, -5], ['a', 8, 8, 0, 1, 0, 0, 10]], w: 13.038, h: 20.97 },\n\t'timesig.imperfectum2': { d: [['M', 13, -5], ['a', 8, 8, 0, 1, 0, 0, 10]], w: 13.038, h: 20.97 },\n\t'timesig.perfectum': { d: [['M', 13, -5], ['a', 8, 8, 0, 1, 0, 0, 10]], w: 13.038, h: 20.97 },\n\t'timesig.perfectum2': { d: [['M', 13, -5], ['a', 8, 8, 0, 1, 0, 0, 10]], w: 13.038, h: 20.97 },\n\t'f': { d: [['M', 9.93, -14.28], ['c', 1.53, -0.18, 2.88, 0.45, 3.12, 1.50], ['c', 0.12, 0.51, 0.00, 1.32, -0.27, 1.86], ['c', -0.15, 0.30, -0.42, 0.57, -0.63, 0.69], ['c', -0.69, 0.36, -1.56, 0.03, -1.83, -0.69], ['c', -0.09, -0.24, -0.09, -0.69, 0.00, -0.87], ['c', 0.06, -0.12, 0.21, -0.24, 0.45, -0.42], ['c', 0.42, -0.24, 0.57, -0.45, 0.60, -0.72], ['c', 0.03, -0.33, -0.09, -0.39, -0.63, -0.42], ['c', -0.30, 0.00, -0.45, 0.00, -0.60, 0.03], ['c', -0.81, 0.21, -1.35, 0.93, -1.74, 2.46], ['c', -0.06, 0.27, -0.48, 2.25, -0.48, 2.31], ['c', 0.00, 0.03, 0.39, 0.03, 0.90, 0.03], ['c', 0.72, 0.00, 0.90, 0.00, 0.99, 0.06], ['c', 0.42, 0.15, 0.45, 0.72, 0.03, 0.90], ['c', -0.12, 0.06, -0.24, 0.06, -1.17, 0.06], ['l', -1.05, 0.00], ['l', -0.78, 2.55], ['c', -0.45, 1.41, -0.87, 2.79, -0.96, 3.06], ['c', -0.87, 2.37, -2.37, 4.74, -3.78, 5.91], ['c', -1.05, 0.90, -2.04, 1.23, -3.09, 1.08], ['c', -1.11, -0.18, -1.89, -0.78, -2.04, -1.59], ['c', -0.12, -0.66, 0.15, -1.71, 0.54, -2.19], ['c', 0.69, -0.75, 1.86, -0.54, 2.22, 0.39], ['c', 0.06, 0.15, 0.09, 0.27, 0.09, 0.48], ['c', 0.00, 0.24, -0.03, 0.27, -0.12, 0.42], ['c', -0.03, 0.09, -0.15, 0.18, -0.27, 0.27], ['c', -0.09, 0.06, -0.27, 0.21, -0.36, 0.27], ['c', -0.24, 0.18, -0.36, 0.36, -0.39, 0.60], ['c', -0.03, 0.33, 0.09, 0.39, 0.63, 0.42], ['c', 0.42, 0.00, 0.63, -0.03, 0.90, -0.15], ['c', 0.60, -0.30, 0.96, -0.96, 1.38, -2.64], ['c', 0.09, -0.42, 0.63, -2.55, 1.17, -4.77], ['l', 1.02, -4.08], ['c', 0.00, -0.03, -0.36, -0.03, -0.81, -0.03], ['c', -0.72, 0.00, -0.81, 0.00, -0.93, -0.06], ['c', -0.42, -0.18, -0.39, -0.75, 0.03, -0.90], ['c', 0.09, -0.06, 0.27, -0.06, 1.05, -0.06], ['l', 0.96, 0.00], ['l', 0.00, -0.09], ['c', 0.06, -0.18, 0.30, -0.72, 0.51, -1.17], ['c', 1.20, -2.46, 3.30, -4.23, 5.34, -4.50], ['z']], w: 16.155, h: 19.445 },\n\t'm': { d: [['M', 2.79, -8.91], ['c', 0.09, 0.00, 0.30, -0.03, 0.45, -0.03], ['c', 0.24, 0.03, 0.30, 0.03, 0.45, 0.12], ['c', 0.36, 0.15, 0.63, 0.54, 0.75, 1.02], ['l', 0.03, 0.21], ['l', 0.33, -0.30], ['c', 0.69, -0.69, 1.38, -1.02, 2.07, -1.02], ['c', 0.27, 0.00, 0.33, 0.00, 0.48, 0.06], ['c', 0.21, 0.09, 0.48, 0.36, 0.63, 0.60], ['c', 0.03, 0.09, 0.12, 0.27, 0.18, 0.42], ['c', 0.03, 0.15, 0.09, 0.27, 0.12, 0.27], ['c', 0.00, 0.00, 0.09, -0.09, 0.18, -0.21], ['c', 0.33, -0.39, 0.87, -0.81, 1.29, -0.99], ['c', 0.78, -0.33, 1.47, -0.21, 2.01, 0.33], ['c', 0.30, 0.33, 0.48, 0.69, 0.60, 1.14], ['c', 0.09, 0.42, 0.06, 0.54, -0.54, 3.06], ['c', -0.33, 1.29, -0.57, 2.40, -0.57, 2.43], ['c', 0.00, 0.12, 0.09, 0.21, 0.21, 0.21], ['c', 0.24, 0.00, 0.75, -0.30, 1.20, -0.72], ['c', 0.45, -0.39, 0.60, -0.45, 0.78, -0.27], ['c', 0.18, 0.18, 0.09, 0.36, -0.45, 0.87], ['c', -1.05, 0.96, -1.83, 1.47, -2.58, 1.71], ['c', -0.93, 0.33, -1.53, 0.21, -1.80, -0.33], ['c', -0.06, -0.15, -0.06, -0.21, -0.06, -0.45], ['c', 0.00, -0.24, 0.03, -0.48, 0.60, -2.82], ['c', 0.42, -1.71, 0.60, -2.64, 0.63, -2.79], ['c', 0.03, -0.57, -0.30, -0.75, -0.84, -0.48], ['c', -0.24, 0.12, -0.54, 0.39, -0.66, 0.63], ['c', -0.03, 0.09, -0.42, 1.38, -0.90, 3.00], ['c', -0.90, 3.15, -0.84, 3.00, -1.14, 3.15], ['l', -0.15, 0.09], ['l', -0.78, 0.00], ['c', -0.60, 0.00, -0.78, 0.00, -0.84, -0.06], ['c', -0.09, -0.03, -0.18, -0.18, -0.18, -0.27], ['c', 0.00, -0.03, 0.36, -1.38, 0.84, -2.97], ['c', 0.57, -2.04, 0.81, -2.97, 0.84, -3.12], ['c', 0.03, -0.54, -0.30, -0.72, -0.84, -0.45], ['c', -0.24, 0.12, -0.57, 0.42, -0.66, 0.63], ['c', -0.06, 0.09, -0.51, 1.44, -1.05, 2.97], ['c', -0.51, 1.56, -0.99, 2.85, -0.99, 2.91], ['c', -0.06, 0.12, -0.21, 0.24, -0.36, 0.30], ['c', -0.12, 0.06, -0.21, 0.06, -0.90, 0.06], ['c', -0.60, 0.00, -0.78, 0.00, -0.84, -0.06], ['c', -0.09, -0.03, -0.18, -0.18, -0.18, -0.27], ['c', 0.00, -0.03, 0.45, -1.38, 0.99, -2.97], ['c', 1.05, -3.18, 1.05, -3.18, 0.93, -3.45], ['c', -0.12, -0.27, -0.39, -0.30, -0.72, -0.15], ['c', -0.54, 0.27, -1.14, 1.17, -1.56, 2.40], ['c', -0.06, 0.15, -0.15, 0.30, -0.18, 0.36], ['c', -0.21, 0.21, -0.57, 0.27, -0.72, 0.09], ['c', -0.09, -0.09, -0.06, -0.21, 0.06, -0.63], ['c', 0.48, -1.26, 1.26, -2.46, 2.01, -3.21], ['c', 0.57, -0.54, 1.20, -0.87, 1.83, -1.02], ['z']], w: 14.687, h: 9.126 },\n\t'p': { d: [['M', 1.92, -8.70], ['c', 0.27, -0.09, 0.81, -0.06, 1.11, 0.03], ['c', 0.54, 0.18, 0.93, 0.51, 1.17, 0.99], ['c', 0.09, 0.15, 0.15, 0.33, 0.18, 0.36], ['l', 0.00, 0.12], ['l', 0.30, -0.27], ['c', 0.66, -0.60, 1.35, -1.02, 2.13, -1.20], ['c', 0.21, -0.06, 0.33, -0.06, 0.78, -0.06], ['c', 0.45, 0.00, 0.51, 0.00, 0.84, 0.09], ['c', 1.29, 0.33, 2.07, 1.32, 2.25, 2.79], ['c', 0.09, 0.81, -0.09, 2.01, -0.45, 2.79], ['c', -0.54, 1.26, -1.86, 2.55, -3.18, 3.03], ['c', -0.45, 0.18, -0.81, 0.24, -1.29, 0.24], ['c', -0.69, -0.03, -1.35, -0.18, -1.86, -0.45], ['c', -0.30, -0.15, -0.51, -0.18, -0.69, -0.09], ['c', -0.09, 0.03, -0.18, 0.09, -0.18, 0.12], ['c', -0.09, 0.12, -1.05, 2.94, -1.05, 3.06], ['c', 0.00, 0.24, 0.18, 0.48, 0.51, 0.63], ['c', 0.18, 0.06, 0.54, 0.15, 0.75, 0.15], ['c', 0.21, 0.00, 0.36, 0.06, 0.42, 0.18], ['c', 0.12, 0.18, 0.06, 0.42, -0.12, 0.54], ['c', -0.09, 0.03, -0.15, 0.03, -0.78, 0.00], ['c', -1.98, -0.15, -3.81, -0.15, -5.79, 0.00], ['c', -0.63, 0.03, -0.69, 0.03, -0.78, 0.00], ['c', -0.24, -0.15, -0.24, -0.57, 0.03, -0.66], ['c', 0.06, -0.03, 0.48, -0.09, 0.99, -0.12], ['c', 0.87, -0.06, 1.11, -0.09, 1.35, -0.21], ['c', 0.18, -0.06, 0.33, -0.18, 0.39, -0.30], ['c', 0.06, -0.12, 3.24, -9.42, 3.27, -9.60], ['c', 0.06, -0.33, 0.03, -0.57, -0.15, -0.69], ['c', -0.09, -0.06, -0.12, -0.06, -0.30, -0.06], ['c', -0.69, 0.06, -1.53, 1.02, -2.28, 2.61], ['c', -0.09, 0.21, -0.21, 0.45, -0.27, 0.51], ['c', -0.09, 0.12, -0.33, 0.24, -0.48, 0.24], ['c', -0.18, 0.00, -0.36, -0.15, -0.36, -0.30], ['c', 0.00, -0.24, 0.78, -1.83, 1.26, -2.55], ['c', 0.72, -1.11, 1.47, -1.74, 2.28, -1.92], ['z'], ['m', 5.37, 1.47], ['c', -0.27, -0.12, -0.75, -0.03, -1.14, 0.21], ['c', -0.75, 0.48, -1.47, 1.68, -1.89, 3.15], ['c', -0.45, 1.47, -0.42, 2.34, 0.00, 2.70], ['c', 0.45, 0.39, 1.26, 0.21, 1.83, -0.36], ['c', 0.51, -0.51, 0.99, -1.68, 1.38, -3.27], ['c', 0.30, -1.17, 0.33, -1.74, 0.15, -2.13], ['c', -0.09, -0.15, -0.15, -0.21, -0.33, -0.30], ['z']], w: 14.689, h: 13.127 },\n\t'r': { d: [['M', 6.33, -9.12], ['c', 0.27, -0.03, 0.93, 0.00, 1.20, 0.06], ['c', 0.84, 0.21, 1.23, 0.81, 1.02, 1.53], ['c', -0.24, 0.75, -0.90, 1.17, -1.56, 0.96], ['c', -0.33, -0.09, -0.51, -0.30, -0.66, -0.75], ['c', -0.03, -0.12, -0.09, -0.24, -0.12, -0.30], ['c', -0.09, -0.15, -0.30, -0.24, -0.48, -0.24], ['c', -0.57, 0.00, -1.38, 0.54, -1.65, 1.08], ['c', -0.06, 0.15, -0.33, 1.17, -0.90, 3.27], ['c', -0.57, 2.31, -0.81, 3.12, -0.87, 3.21], ['c', -0.03, 0.06, -0.12, 0.15, -0.18, 0.21], ['l', -0.12, 0.06], ['l', -0.81, 0.03], ['c', -0.69, 0.00, -0.81, 0.00, -0.90, -0.03], ['c', -0.09, -0.06, -0.18, -0.21, -0.18, -0.30], ['c', 0.00, -0.06, 0.39, -1.62, 0.90, -3.51], ['c', 0.84, -3.24, 0.87, -3.45, 0.87, -3.72], ['c', 0.00, -0.21, 0.00, -0.27, -0.03, -0.36], ['c', -0.12, -0.15, -0.21, -0.24, -0.42, -0.24], ['c', -0.24, 0.00, -0.45, 0.15, -0.78, 0.42], ['c', -0.33, 0.36, -0.45, 0.54, -0.72, 1.14], ['c', -0.03, 0.12, -0.21, 0.24, -0.36, 0.27], ['c', -0.12, 0.00, -0.15, 0.00, -0.24, -0.06], ['c', -0.18, -0.12, -0.18, -0.21, -0.06, -0.54], ['c', 0.21, -0.57, 0.42, -0.93, 0.78, -1.32], ['c', 0.54, -0.51, 1.20, -0.81, 1.95, -0.87], ['c', 0.81, -0.03, 1.53, 0.30, 1.92, 0.87], ['l', 0.12, 0.18], ['l', 0.09, -0.09], ['c', 0.57, -0.45, 1.41, -0.84, 2.19, -0.96], ['z']], w: 9.41, h: 9.132 },\n\t's': { d: [['M', 4.47, -8.73], ['c', 0.09, 0.00, 0.36, -0.03, 0.57, -0.03], ['c', 0.75, 0.03, 1.29, 0.24, 1.71, 0.63], ['c', 0.51, 0.54, 0.66, 1.26, 0.36, 1.83], ['c', -0.24, 0.42, -0.63, 0.57, -1.11, 0.42], ['c', -0.33, -0.09, -0.60, -0.36, -0.60, -0.57], ['c', 0.00, -0.03, 0.06, -0.21, 0.15, -0.39], ['c', 0.12, -0.21, 0.15, -0.33, 0.18, -0.48], ['c', 0.00, -0.24, -0.06, -0.48, -0.15, -0.60], ['c', -0.15, -0.21, -0.42, -0.24, -0.75, -0.15], ['c', -0.27, 0.06, -0.48, 0.18, -0.69, 0.36], ['c', -0.39, 0.39, -0.51, 0.96, -0.33, 1.38], ['c', 0.09, 0.21, 0.42, 0.51, 0.78, 0.72], ['c', 1.11, 0.69, 1.59, 1.11, 1.89, 1.68], ['c', 0.21, 0.39, 0.24, 0.78, 0.15, 1.29], ['c', -0.18, 1.20, -1.17, 2.16, -2.52, 2.52], ['c', -1.02, 0.24, -1.95, 0.12, -2.70, -0.42], ['c', -0.72, -0.51, -0.99, -1.47, -0.60, -2.19], ['c', 0.24, -0.48, 0.72, -0.63, 1.17, -0.42], ['c', 0.33, 0.18, 0.54, 0.45, 0.57, 0.81], ['c', 0.00, 0.21, -0.03, 0.30, -0.33, 0.51], ['c', -0.33, 0.24, -0.39, 0.42, -0.27, 0.69], ['c', 0.06, 0.15, 0.21, 0.27, 0.45, 0.33], ['c', 0.30, 0.09, 0.87, 0.09, 1.20, 0.00], ['c', 0.75, -0.21, 1.23, -0.72, 1.29, -1.35], ['c', 0.03, -0.42, -0.15, -0.81, -0.54, -1.20], ['c', -0.24, -0.24, -0.48, -0.42, -1.41, -1.02], ['c', -0.69, -0.42, -1.05, -0.93, -1.05, -1.47], ['c', 0.00, -0.39, 0.12, -0.87, 0.30, -1.23], ['c', 0.27, -0.57, 0.78, -1.05, 1.38, -1.35], ['c', 0.24, -0.12, 0.63, -0.27, 0.90, -0.30], ['z']], w: 6.632, h: 8.758 },\n\t'z': { d: [['M', 2.64, -7.95], ['c', 0.36, -0.09, 0.81, -0.03, 1.71, 0.27], ['c', 0.78, 0.21, 0.96, 0.27, 1.74, 0.30], ['c', 0.87, 0.06, 1.02, 0.03, 1.38, -0.21], ['c', 0.21, -0.15, 0.33, -0.15, 0.48, -0.06], ['c', 0.15, 0.09, 0.21, 0.30, 0.15, 0.45], ['c', -0.03, 0.06, -1.26, 1.26, -2.76, 2.67], ['l', -2.73, 2.55], ['l', 0.54, 0.03], ['c', 0.54, 0.03, 0.72, 0.03, 2.01, 0.15], ['c', 0.36, 0.03, 0.90, 0.06, 1.20, 0.09], ['c', 0.66, 0.00, 0.81, -0.03, 1.02, -0.24], ['c', 0.30, -0.30, 0.39, -0.72, 0.27, -1.23], ['c', -0.06, -0.27, -0.06, -0.27, -0.03, -0.39], ['c', 0.15, -0.30, 0.54, -0.27, 0.69, 0.03], ['c', 0.15, 0.33, 0.27, 1.02, 0.27, 1.50], ['c', 0.00, 1.47, -1.11, 2.70, -2.52, 2.79], ['c', -0.57, 0.03, -1.02, -0.09, -2.01, -0.51], ['c', -1.02, -0.42, -1.23, -0.48, -2.13, -0.54], ['c', -0.81, -0.06, -0.96, -0.03, -1.26, 0.18], ['c', -0.12, 0.06, -0.24, 0.12, -0.27, 0.12], ['c', -0.27, 0.00, -0.45, -0.30, -0.36, -0.51], ['c', 0.03, -0.06, 1.32, -1.32, 2.91, -2.79], ['l', 2.88, -2.73], ['c', -0.03, 0.00, -0.21, 0.03, -0.42, 0.06], ['c', -0.21, 0.03, -0.78, 0.09, -1.23, 0.12], ['c', -1.11, 0.12, -1.23, 0.15, -1.95, 0.27], ['c', -0.72, 0.15, -1.17, 0.18, -1.29, 0.09], ['c', -0.27, -0.18, -0.21, -0.75, 0.12, -1.26], ['c', 0.39, -0.60, 0.93, -1.02, 1.59, -1.20], ['z']], w: 8.573, h: 8.743 },\n\t'+': { d: [['M', 3.48, -9.3], ['c', 0.18, -0.09, 0.36, -0.09, 0.54, 0.00], ['c', 0.18, 0.09, 0.24, 0.15, 0.33, 0.30], ['l', 0.06, 0.15], ['l', 0.00, 1.29], ['l', 0.00, 1.29], ['l', 1.29, 0.00], ['c', 1.23, 0.00, 1.29, 0.00, 1.41, 0.06], ['c', 0.06, 0.03, 0.15, 0.09, 0.18, 0.12], ['c', 0.12, 0.09, 0.21, 0.33, 0.21, 0.48], ['c', 0.00, 0.15, -0.09, 0.39, -0.21, 0.48], ['c', -0.03, 0.03, -0.12, 0.09, -0.18, 0.12], ['c', -0.12, 0.06, -0.18, 0.06, -1.41, 0.06], ['l', -1.29, 0.00], ['l', 0.00, 1.29], ['c', 0.00, 1.23, 0.00, 1.29, -0.06, 1.41], ['c', -0.09, 0.18, -0.15, 0.24, -0.30, 0.33], ['c', -0.21, 0.09, -0.39, 0.09, -0.57, 0.00], ['c', -0.18, -0.09, -0.24, -0.15, -0.33, -0.33], ['c', -0.06, -0.12, -0.06, -0.18, -0.06, -1.41], ['l', 0.00, -1.29], ['l', -1.29, 0.00], ['c', -1.23, 0.00, -1.29, 0.00, -1.41, -0.06], ['c', -0.18, -0.09, -0.24, -0.15, -0.33, -0.33], ['c', -0.09, -0.18, -0.09, -0.36, 0.00, -0.54], ['c', 0.09, -0.18, 0.15, -0.24, 0.33, -0.33], ['l', 0.15, -0.06], ['l', 1.26, 0.00], ['l', 1.29, 0.00], ['l', 0.00, -1.29], ['c', 0.00, -1.23, 0.00, -1.29, 0.06, -1.41], ['c', 0.09, -0.18, 0.15, -0.24, 0.33, -0.33], ['z']], w: 7.507, h: 7.515 },\n\t',': { d: [['M', 1.85, -3.36], ['c', 0.57, -0.15, 1.17, 0.03, 1.59, 0.45], ['c', 0.45, 0.45, 0.60, 0.96, 0.51, 1.89], ['c', -0.09, 1.23, -0.42, 2.46, -0.99, 3.93], ['c', -0.30, 0.72, -0.72, 1.62, -0.78, 1.68], ['c', -0.18, 0.21, -0.51, 0.18, -0.66, -0.06], ['c', -0.03, -0.06, -0.06, -0.15, -0.06, -0.18], ['c', 0.00, -0.06, 0.12, -0.33, 0.24, -0.63], ['c', 0.84, -1.80, 1.02, -2.61, 0.69, -3.24], ['c', -0.12, -0.24, -0.27, -0.36, -0.75, -0.60], ['c', -0.36, -0.15, -0.42, -0.21, -0.60, -0.39], ['c', -0.69, -0.69, -0.69, -1.71, 0.00, -2.40], ['c', 0.21, -0.21, 0.51, -0.39, 0.81, -0.45], ['z']], w: 3.452, h: 8.143 },\n\t'-': { d: [['M', 0.18, -5.34], ['c', 0.09, -0.06, 0.15, -0.06, 2.31, -0.06], ['c', 2.46, 0.00, 2.37, 0.00, 2.46, 0.21], ['c', 0.12, 0.21, 0.03, 0.42, -0.15, 0.54], ['c', -0.09, 0.06, -0.15, 0.06, -2.28, 0.06], ['c', -2.16, 0.00, -2.22, 0.00, -2.31, -0.06], ['c', -0.27, -0.15, -0.27, -0.54, -0.03, -0.69], ['z']], w: 5.001, h: 0.81 },\n\t'.': { d: [['M', 1.32, -3.36], ['c', 1.05, -0.27, 2.10, 0.57, 2.10, 1.65], ['c', 0.00, 1.08, -1.05, 1.92, -2.10, 1.65], ['c', -0.90, -0.21, -1.50, -1.14, -1.26, -2.04], ['c', 0.12, -0.63, 0.63, -1.11, 1.26, -1.26], ['z']], w: 3.413, h: 3.402 },\n\t'scripts.wedge': { d: [['M', -3.66, -7.44], ['c', 0.06, -0.09, 0.00, -0.09, 0.81, 0.03], ['c', 1.86, 0.30, 3.84, 0.30, 5.73, 0.00], ['c', 0.78, -0.12, 0.72, -0.12, 0.78, -0.03], ['c', 0.15, 0.15, 0.12, 0.24, -0.24, 0.60], ['c', -0.93, 0.93, -1.98, 2.76, -2.67, 4.62], ['c', -0.30, 0.78, -0.51, 1.71, -0.51, 2.13], ['c', 0.00, 0.15, 0.00, 0.18, -0.06, 0.27], ['c', -0.12, 0.09, -0.24, 0.09, -0.36, 0.00], ['c', -0.06, -0.09, -0.06, -0.12, -0.06, -0.27], ['c', 0.00, -0.42, -0.21, -1.35, -0.51, -2.13], ['c', -0.69, -1.86, -1.74, -3.69, -2.67, -4.62], ['c', -0.36, -0.36, -0.39, -0.45, -0.24, -0.60], ['z']], w: 7.49, h: 7.752 },\n\t'scripts.thumb': { d: [['M', -0.54, -3.69], ['c', 0.15, -0.03, 0.36, -0.06, 0.51, -0.06], ['c', 1.44, 0.00, 2.58, 1.11, 2.94, 2.85], ['c', 0.09, 0.48, 0.09, 1.32, 0.00, 1.80], ['c', -0.27, 1.41, -1.08, 2.43, -2.16, 2.73], ['l', -0.18, 0.06], ['l', 0.00, 0.12], ['c', 0.03, 0.06, 0.06, 0.45, 0.09, 0.87], ['c', 0.03, 0.57, 0.03, 0.78, 0.00, 0.84], ['c', -0.09, 0.27, -0.39, 0.48, -0.66, 0.48], ['c', -0.27, 0.00, -0.57, -0.21, -0.66, -0.48], ['c', -0.03, -0.06, -0.03, -0.27, 0.00, -0.84], ['c', 0.03, -0.42, 0.06, -0.81, 0.09, -0.87], ['l', 0.00, -0.12], ['l', -0.18, -0.06], ['c', -1.08, -0.30, -1.89, -1.32, -2.16, -2.73], ['c', -0.09, -0.48, -0.09, -1.32, 0.00, -1.80], ['c', 0.15, -0.84, 0.51, -1.53, 1.02, -2.04], ['c', 0.39, -0.39, 0.84, -0.63, 1.35, -0.75], ['z'], ['m', 1.05, 0.90], ['c', -0.15, -0.09, -0.21, -0.09, -0.45, -0.12], ['c', -0.15, 0.00, -0.30, 0.03, -0.39, 0.03], ['c', -0.57, 0.18, -0.90, 0.72, -1.08, 1.74], ['c', -0.06, 0.48, -0.06, 1.80, 0.00, 2.28], ['c', 0.15, 0.90, 0.42, 1.44, 0.90, 1.65], ['c', 0.18, 0.09, 0.21, 0.09, 0.51, 0.09], ['c', 0.30, 0.00, 0.33, 0.00, 0.51, -0.09], ['c', 0.48, -0.21, 0.75, -0.75, 0.90, -1.65], ['c', 0.03, -0.27, 0.03, -0.54, 0.03, -1.14], ['c', 0.00, -0.60, 0.00, -0.87, -0.03, -1.14], ['c', -0.15, -0.90, -0.45, -1.44, -0.90, -1.65], ['z']], w: 5.955, h: 9.75 },\n\t'scripts.open': { d: [['M', -0.54, -3.69], ['c', 0.15, -0.03, 0.36, -0.06, 0.51, -0.06], ['c', 1.44, 0.00, 2.58, 1.11, 2.94, 2.85], ['c', 0.09, 0.48, 0.09, 1.32, 0.00, 1.80], ['c', -0.33, 1.74, -1.47, 2.85, -2.91, 2.85], ['c', -1.44, 0.00, -2.58, -1.11, -2.91, -2.85], ['c', -0.09, -0.48, -0.09, -1.32, 0.00, -1.80], ['c', 0.15, -0.84, 0.51, -1.53, 1.02, -2.04], ['c', 0.39, -0.39, 0.84, -0.63, 1.35, -0.75], ['z'], ['m', 1.11, 0.90], ['c', -0.21, -0.09, -0.27, -0.09, -0.51, -0.12], ['c', -0.30, 0.00, -0.42, 0.03, -0.66, 0.15], ['c', -0.24, 0.12, -0.51, 0.39, -0.66, 0.63], ['c', -0.54, 0.93, -0.63, 2.64, -0.21, 3.81], ['c', 0.21, 0.54, 0.51, 0.90, 0.93, 1.11], ['c', 0.21, 0.09, 0.24, 0.09, 0.54, 0.09], ['c', 0.30, 0.00, 0.33, 0.00, 0.54, -0.09], ['c', 0.42, -0.21, 0.72, -0.57, 0.93, -1.11], ['c', 0.36, -0.99, 0.36, -2.37, 0.00, -3.36], ['c', -0.21, -0.54, -0.51, -0.90, -0.90, -1.11], ['z']], w: 5.955, h: 7.5 },\n\t'scripts.longphrase': { d: [['M', 1.47, -15.09], ['c', 0.36, -0.09, 0.66, -0.18, 0.69, -0.18], ['c', 0.06, 0.00, 0.06, 0.54, 0.06, 11.25], ['l', 0.00, 11.25], ['l', -0.63, 0.15], ['c', -0.66, 0.18, -1.44, 0.39, -1.50, 0.39], ['c', -0.03, 0.00, -0.03, -3.39, -0.03, -11.25], ['l', 0.00, -11.25], ['l', 0.36, -0.09], ['c', 0.21, -0.06, 0.66, -0.18, 1.05, -0.27], ['z']], w: 2.16, h: 23.04 },\n\t'scripts.mediumphrase': { d: [['M', 1.47, -7.59], ['c', 0.36, -0.09, 0.66, -0.18, 0.69, -0.18], ['c', 0.06, 0.00, 0.06, 0.39, 0.06, 7.50], ['l', 0.00, 7.50], ['l', -0.63, 0.15], ['c', -0.66, 0.18, -1.44, 0.39, -1.50, 0.39], ['c', -0.03, 0.00, -0.03, -2.28, -0.03, -7.50], ['l', 0.00, -7.50], ['l', 0.36, -0.09], ['c', 0.21, -0.06, 0.66, -0.18, 1.05, -0.27], ['z']], w: 2.16, h: 15.54 },\n\t'scripts.shortphrase': { d: [['M', 1.47, -7.59], ['c', 0.36, -0.09, 0.66, -0.18, 0.69, -0.18], ['c', 0.06, 0.00, 0.06, 0.21, 0.06, 3.75], ['l', 0.00, 3.75], ['l', -0.42, 0.09], ['c', -0.57, 0.18, -1.65, 0.45, -1.71, 0.45], ['c', -0.03, 0.00, -0.03, -0.72, -0.03, -3.75], ['l', 0.00, -3.75], ['l', 0.36, -0.09], ['c', 0.21, -0.06, 0.66, -0.18, 1.05, -0.27], ['z']], w: 2.16, h: 8.04 },\n\t'scripts.snap': { d: [['M', 4.50, -3.39], ['c', 0.36, -0.03, 0.96, -0.03, 1.35, 0.00], ['c', 1.56, 0.15, 3.15, 0.90, 4.20, 2.01], ['c', 0.24, 0.27, 0.33, 0.42, 0.33, 0.60], ['c', 0.00, 0.27, 0.03, 0.24, -2.46, 2.22], ['c', -1.29, 1.02, -2.40, 1.86, -2.49, 1.92], ['c', -0.18, 0.09, -0.30, 0.09, -0.48, 0.00], ['c', -0.09, -0.06, -1.20, -0.90, -2.49, -1.92], ['c', -2.49, -1.98, -2.46, -1.95, -2.46, -2.22], ['c', 0.00, -0.18, 0.09, -0.33, 0.33, -0.60], ['c', 1.05, -1.08, 2.64, -1.86, 4.17, -2.01], ['z'], ['m', 1.29, 1.17], ['c', -1.47, -0.15, -2.97, 0.30, -4.14, 1.20], ['l', -0.18, 0.15], ['l', 0.06, 0.09], ['c', 0.15, 0.12, 3.63, 2.85, 3.66, 2.85], ['c', 0.03, 0.00, 3.51, -2.73, 3.66, -2.85], ['l', 0.06, -0.09], ['l', -0.18, -0.15], ['c', -0.84, -0.66, -1.89, -1.08, -2.94, -1.20], ['z']], w: 10.38, h: 6.84 }\n};\n\n// Custom characters that weren't generated from the font:\nglyphs['noteheads.slash.whole'] = { d: [['M', 5, -5], ['l', 1, 1], ['l', -5, 5], ['l', -1, -1], ['z'], ['m', 4, 6], ['l', -5, -5], ['l', 2, -2], ['l', 5, 5], ['z'], ['m', 0, -2], ['l', 1, 1], ['l', -5, 5], ['l', -1, -1], ['z'], ['m', -4, 6], ['l', -5, -5], ['l', 2, -2], ['l', 5, 5], ['z']], w: 10.81, h: 15.63 };\n\nglyphs['noteheads.slash.quarter'] = { d: [['M', 9, -6], ['l', 0, 4], ['l', -9, 9], ['l', 0, -4], ['z']], w: 9, h: 9 };\n\nglyphs['noteheads.harmonic.quarter'] = { d: [['M', 3.63, -4.02], ['c', 0.09, -0.06, 0.18, -0.09, 0.24, -0.03], ['c', 0.03, 0.03, 0.87, 0.93, 1.83, 2.01], ['c', 1.50, 1.65, 1.80, 1.98, 1.80, 2.04], ['c', 0.00, 0.06, -0.30, 0.39, -1.80, 2.04], ['c', -0.96, 1.08, -1.80, 1.98, -1.83, 2.01], ['c', -0.06, 0.06, -0.15, 0.03, -0.24, -0.03], ['c', -0.12, -0.09, -3.54, -3.84, -3.60, -3.93], ['c', -0.03, -0.03, -0.03, -0.09, -0.03, -0.15], ['c', 0.03, -0.06, 3.45, -3.84, 3.63, -3.96], ['z']], w: 7.5, h: 8.165 };\n\nglyphs['noteheads.triangle.quarter'] = { d: [['M', 0, 4], ['l', 9, 0], ['l', -4.5, -9], ['z']], w: 9, h: 9 };\n\nvar pathClone = function (pathArray) {\n\tvar res = [];\n\tfor (var i = 0, ii = pathArray.length; i < ii; i++) {\n\t\tres[i] = [];\n\t\tfor (var j = 0, jj = pathArray[i].length; j < jj; j++) {\n\t\t\tres[i][j] = pathArray[i][j];\n\t\t}\n\t}\n\treturn res;\n};\n\nvar pathScale = function (pathArray, kx, ky) {\n\tfor (var i = 0, ii = pathArray.length; i < ii; i++) {\n\t\tvar p = pathArray[i];\n\t\tvar j, jj;\n\t\tfor (j = 1, jj = p.length; j < jj; j++) {\n\t\t\tp[j] *= (j % 2) ? kx : ky;\n\t\t}\n\t}\n};\n\nvar Glyphs = {\n\tprintSymbol: function (x, y, symb, paper, attrs) {\n\t\tif (!glyphs[symb]) return null;\n\t\tvar pathArray = pathClone(glyphs[symb].d);\n\t\tpathArray[0][1] += x;\n\t\tpathArray[0][2] += y;\n\t\tvar path = \"\";\n\t\tfor (var i = 0; i < pathArray.length; i++)\n\t\t\tpath += pathArray[i].join(\" \");\n\t\tattrs.path = path;\n\t\treturn paper.path(attrs);\n\t},\n\n\tgetPathForSymbol: function (x, y, symb, scalex, scaley) {\n\t\tscalex = scalex || 1;\n\t\tscaley = scaley || 1;\n\t\tif (!glyphs[symb]) return null;\n\t\tvar pathArray = pathClone(glyphs[symb].d);\n\t\tif (scalex !== 1 || scaley !== 1) pathScale(pathArray, scalex, scaley);\n\t\tpathArray[0][1] += x;\n\t\tpathArray[0][2] += y;\n\n\t\treturn pathArray;\n\t},\n\n\tgetSymbolWidth: function (symbol) {\n\t\tif (glyphs[symbol]) return glyphs[symbol].w;\n\t\treturn 0;\n\t},\n\n\tsymbolHeightInPitches: function (symbol) {\n\t\tvar height = glyphs[symbol] ? glyphs[symbol].h : 0;\n\t\treturn height / spacing.STEP;\n\t},\n\n\tgetSymbolAlign: function (symbol) {\n\t\tif (symbol.substring(0, 7) === \"scripts\" &&\n\t\t\tsymbol !== \"scripts.roll\") {\n\t\t\treturn \"center\";\n\t\t}\n\t\treturn \"left\";\n\t},\n\n\tgetYCorr: function (symbol) {\n\t\tswitch (symbol) {\n\t\t\tcase \"0\":\n\t\t\tcase \"1\":\n\t\t\tcase \"2\":\n\t\t\tcase \"3\":\n\t\t\tcase \"4\":\n\t\t\tcase \"5\":\n\t\t\tcase \"6\":\n\t\t\tcase \"7\":\n\t\t\tcase \"8\":\n\t\t\tcase \"9\":\n\t\t\tcase \"+\": return -2;\n\t\t\tcase \"timesig.common\":\n\t\t\tcase \"timesig.cut\": return 0;\n\t\t\tcase \"flags.d32nd\": return -1;\n\t\t\tcase \"flags.d64th\": return -2;\n\t\t\tcase \"flags.u32nd\": return 1;\n\t\t\tcase \"flags.u64th\": return 3;\n\t\t\tcase \"rests.whole\": return 1;\n\t\t\tcase \"rests.half\": return -1;\n\t\t\tcase \"rests.8th\": return -1;\n\t\t\tcase \"rests.quarter\": return -1;\n\t\t\tcase \"rests.16th\": return -1;\n\t\t\tcase \"rests.32nd\": return -1;\n\t\t\tcase \"rests.64th\": return -1;\n\t\t\tcase \"f\":\n\t\t\tcase \"m\":\n\t\t\tcase \"p\":\n\t\t\tcase \"s\":\n\t\t\tcase \"z\":\n\t\t\t\treturn -4;\n\t\t\tcase \"scripts.trill\":\n\t\t\tcase \"scripts.upbow\":\n\t\t\tcase \"scripts.downbow\":\n\t\t\t\treturn -2;\n\t\t\tcase \"scripts.ufermata\":\n\t\t\tcase \"scripts.wedge\":\n\t\t\tcase \"scripts.roll\":\n\t\t\tcase \"scripts.shortphrase\":\n\t\t\tcase \"scripts.longphrase\":\n\t\t\t\treturn -1;\n\t\t\tcase \"scripts.dfermata\":\n\t\t\t\treturn 1;\n\t\t\tdefault: return 0;\n\t\t}\n\t},\n\tsetSymbol: function (name, path) {\n\t\tglyphs[name] = path;\n\t}\n};\n\nmodule.exports = Glyphs; // we need the glyphs for layout information\n","function germanNote(note) {\n\tswitch (note) {\n\t\tcase \"B#\": return \"H#\";\n\t\tcase \"B♯\": return \"H♯\";\n\t\tcase \"B\": return \"H\";\n\t\tcase \"Bb\": return \"B\";\n\t\tcase \"B♭\": return \"B\";\n\t}\n\treturn note;\n}\n\nfunction translateChord(chordString, jazzchords, germanAlphabet) {\n\tvar lines = chordString.split(\"\\n\");\n\tfor (let i = 0; i < lines.length; i++) {\n\t\tlet chord = lines[i];\n\t\t// If the chord isn't in a recognizable format then just skip it.\n\t\tlet reg = chord.match(/^([ABCDEFG][♯♭]?)?([^\\/]+)?(\\/([ABCDEFG][#b♯♭]?))?/);\n\t\tif (!reg) {\n\t\t\tcontinue;\n\t\t}\n\t\tlet baseChord = reg[1] || \"\";\n\t\tlet modifier = reg[2] || \"\";\n\t\tlet bassNote = reg[4] || \"\";\n\t\tif (germanAlphabet) {\n\t\t\tbaseChord = germanNote(baseChord);\n\t\t\tbassNote = germanNote(bassNote);\n\t\t}\n\t\t// This puts markers in the pieces of the chord that are read by the svg creator.\n\t\t// After the main part of the chord (the letter, a sharp or flat, and \"m\") a marker is added. Before a slash a marker is added.\n\t\tconst marker = jazzchords ? \"\\x03\" : \"\";\n\t\tconst bass = bassNote ? \"/\" + bassNote : \"\";\n\t\tlines[i] = [baseChord, modifier, bass].join(marker);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nmodule.exports = translateChord;\n","var drawTempo = require('./tempo');\nvar drawRelativeElement = require('./relative');\nvar spacing = require('../helpers/spacing');\nvar setClass = require('../helpers/set-class');\nvar elementGroup = require('./group-elements');\n\nfunction drawAbsolute(renderer, params, bartop, selectables, staffPos) {\n\tif (params.invisible) return;\n\tvar isTempo = params.children.length > 0 && params.children[0].type === \"TempoElement\";\n\tparams.elemset = [];\n\telementGroup.beginGroup(renderer.paper, renderer.controller);\n\tfor (var i = 0; i < params.children.length; i++) {\n\t\tvar child = params.children[i];\n\t\tswitch (child.type) {\n\t\t\tcase \"TempoElement\":\n\t\t\t\tdrawTempo(renderer, child);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tvar el = drawRelativeElement(renderer, child, bartop);\n\t\t\t\tif (child.type === \"symbol\" && child.c && child.c.indexOf('notehead') >= 0) {\n\t\t\t\t\tel.setAttribute('class', 'abcjs-notehead')\n\t\t\t\t}\n\t\t}\n\t}\n\tvar klass = params.type;\n\tif (params.type === 'note' || params.type === 'rest') {\n\t\tparams.counters = renderer.controller.classes.getCurrent();\n\t\tklass += ' d' + Math.round(params.durationClass * 1000) / 1000;\n\t\tklass = klass.replace(/\\./g, '-');\n\t\tif (params.abcelem.pitches) {\n\t\t\tfor (var j = 0; j < params.abcelem.pitches.length; j++) {\n\t\t\t\tklass += ' p' + params.abcelem.pitches[j].pitch;\n\t\t\t}\n\t\t}\n\t}\n\tvar g = elementGroup.endGroup(klass, params.type);\n\tif (g) {\n\t\t// TODO-PER-HACK! This corrects the classes because the tablature is not being created at the right time.\n\t\tif (params.cloned) {\n\t\t\tparams.cloned.overrideClasses = g.className.baseVal\n\t\t}\n\t\tif (params.overrideClasses) {\n\t\t\tvar type = g.classList && g.classList.length > 0 ? g.classList[0] + ' ' : ''\n\t\t\tg.setAttribute(\"class\", type + params.overrideClasses)\n\t\t}\n\t\tif (isTempo) {\n\t\t\tparams.startChar = params.abcelem.startChar;\n\t\t\tparams.endChar = params.abcelem.endChar;\n\t\t\tselectables.add(params, g, false, staffPos);\n\t\t} else {\n\t\t\tparams.elemset.push(g);\n\t\t\tvar isSelectable = false;\n\t\t\tif (params.type === 'note' || params.type === 'tabNumber') {\n\t\t\t\tisSelectable = true;\n\t\t\t}\n\t\t\tselectables.add(params, g, isSelectable, staffPos);\n\t\t}\n\t} else if (params.elemset.length > 0)\n\t\tselectables.add(params, params.elemset[0], params.type === 'note', staffPos);\n\t// If there was no output, then don't add to the selectables. This happens when using the \"y\" spacer, for instance.\n\n\tif (params.klass)\n\t\tsetClass(params.elemset, \"mark\", \"\", \"#00ff00\");\n\tif (params.hint)\n\t\tsetClass(params.elemset, \"abcjs-hint\", \"\", null);\n\tparams.abcelem.abselem = params;\n\n\tif (params.heads && params.heads.length > 0) {\n\t\tparams.notePositions = [];\n\t\tfor (var jj = 0; jj < params.heads.length; jj++) {\n\t\t\tparams.notePositions.push({\n\t\t\t\tx: params.heads[jj].x + params.heads[jj].w / 2,\n\t\t\t\ty: staffPos.zero - params.heads[jj].pitch * spacing.STEP\n\t\t\t});\n\t\t}\n\t}\n}\n\nmodule.exports = drawAbsolute;\n","var printPath = require('./print-path');\nvar roundNumber = require(\"./round-number\");\n\nfunction drawBeam(renderer, params) {\n\tif (params.beams.length === 0) return;\n\n\tvar pathString = \"\";\n\tfor (var i = 0; i < params.beams.length; i++) {\n\t\tvar beam = params.beams[i];\n\t\tif (beam.split) {\n\t\t\tvar slope = getSlope(renderer, beam.startX, beam.startY, beam.endX, beam.endY);\n\t\t\tvar xes = [];\n\t\t\tfor (var j = 0; j < beam.split.length; j += 2) {\n\t\t\t\txes.push([beam.split[j], beam.split[j + 1]]);\n\t\t\t}\n\t\t\tfor (j = 0; j < xes.length; j++) {\n\t\t\t\tvar y1 = getY(beam.startX, beam.startY, slope, xes[j][0]);\n\t\t\t\tvar y2 = getY(beam.startX, beam.startY, slope, xes[j][1]);\n\t\t\t\tpathString += draw(renderer, xes[j][0], y1, xes[j][1], y2, beam.dy);\n\t\t\t}\n\t\t} else\n\t\t\tpathString += draw(renderer, beam.startX, beam.startY, beam.endX, beam.endY, beam.dy);\n\t}\n\tvar durationClass = (\"abcjs-d\" + params.duration).replace(/\\./g, \"-\");\n\tvar klasses = renderer.controller.classes.generate('beam-elem ' + durationClass);\n\tvar el = printPath(renderer, {\n\t\tpath: pathString,\n\t\tstroke: \"none\",\n\t\tfill: renderer.foregroundColor,\n\t\t'class': klasses\n\t});\n\treturn [el];\n}\n\nfunction draw(renderer, startX, startY, endX, endY, dy) {\n\t// the X coordinates are actual coordinates, but the Y coordinates are in pitches.\n\tstartY = roundNumber(renderer.calcY(startY));\n\tendY = roundNumber(renderer.calcY(endY));\n\tstartX = roundNumber(startX);\n\tendX = roundNumber(endX);\n\tvar startY2 = roundNumber(startY + dy);\n\tvar endY2 = roundNumber(endY + dy);\n\treturn \"M\" + startX + \" \" + startY + \" L\" + endX + \" \" + endY +\n\t\t\"L\" + endX + \" \" + endY2 + \" L\" + startX + \" \" + startY2 + \"z\";\n}\n\nfunction getSlope(renderer, startX, startY, endX, endY) {\n\treturn (endY - startY) / (endX - startX);\n}\n\nfunction getY(startX, startY, slope, currentX) {\n\tvar x = currentX - startX;\n\treturn startY + x * slope;\n}\n\nmodule.exports = drawBeam;\n","var sprintf = require('./sprintf');\nvar spacing = require('../helpers/spacing');\nvar renderText = require('./text');\n\nfunction drawBrace(renderer, params, selectables) {\n\t// The absoluteY number is the spot where the note on the first ledger line is drawn (i.e. middle C if treble clef)\n\t// The STEP offset here moves it to the top and bottom lines\n\tvar startY = params.startVoice.staff.absoluteY - spacing.STEP * 10;\n\tif (params.endVoice && params.endVoice.staff)\n\t\tparams.endY = params.endVoice.staff.absoluteY - spacing.STEP * 2;\n\telse if (params.lastContinuedVoice && params.lastContinuedVoice.staff)\n\t\tparams.endY = params.lastContinuedVoice.staff.absoluteY - spacing.STEP * 2;\n\telse\n\t\tparams.endY = params.startVoice.staff.absoluteY - spacing.STEP * 2;\n\treturn draw(renderer, params.x, startY, params.endY, params.type, params.header, selectables);\n}\n\nfunction straightPath(renderer, xLeft, yTop, yBottom, type) {\n\txLeft += spacing.STEP;\n\tvar xLineWidth = spacing.STEP * 0.75;\n\tvar yOverlap = spacing.STEP * 0.75;\n\tvar height = yBottom - yTop;\n\t// Straight line\n\tvar pathString = sprintf(\"M %f %f l %f %f l %f %f l %f %f z\",\n\t\txLeft, yTop - yOverlap, // top left line\n\t\t0, height + yOverlap * 2, // bottom left line\n\t\txLineWidth, 0, // bottom right line\n\t\t0, - (height + yOverlap * 2) // top right line\n\t);\n\t// Top arm\n\tvar wCurve = spacing.STEP * 2;\n\tvar hCurve = spacing.STEP;\n\tpathString += sprintf(\"M %f %f q %f %f %f %f q %f %f %f %f z\",\n\t\txLeft + xLineWidth, yTop - yOverlap, // top left arm\n\t\twCurve * 0.6, hCurve * 0.2,\n\t\twCurve, -hCurve, // right point\n\t\t-wCurve * 0.1, hCurve * 0.3,\n\t\t-wCurve, hCurve + spacing.STEP // left bottom\n\t);\n\t// Bottom arm\n\tpathString += sprintf(\"M %f %f q %f %f %f %f q %f %f %f %f z\",\n\t\txLeft + xLineWidth, yTop + yOverlap + height, // bottom left arm\n\t\twCurve * 0.6, -hCurve * 0.2,\n\t\twCurve, hCurve, // right point\n\t\t-wCurve * 0.1, -hCurve * 0.3,\n\t\t-wCurve, -hCurve - spacing.STEP // left bottom\n\t);\n\treturn renderer.paper.path({ path: pathString, stroke: renderer.foregroundColor, fill: renderer.foregroundColor, 'class': renderer.controller.classes.generate(type), \"data-name\": type });\n}\n\nfunction curvyPath(renderer, xLeft, yTop, yBottom, type) {\n\tvar yHeight = yBottom - yTop;\n\n\tvar pathString = curve(xLeft,\n\t\tyTop,\n\t\t[7.5, -8, 21, 0, 18.5, -10.5, 7.5],\n\t\t[0, yHeight / 5.5, yHeight / 3.14, yHeight / 2, yHeight / 2.93, yHeight / 4.88, 0]);\n\n\tpathString += curve(xLeft,\n\t\tyTop,\n\t\t[0, 17.5, -7.5, 6.6, -5, 20, 0],\n\t\t[yHeight / 2, yHeight / 1.46, yHeight / 1.22, yHeight, yHeight / 1.19, yHeight / 1.42, yHeight / 2]);\n\n\treturn renderer.paper.path({ path: pathString, stroke: renderer.foregroundColor, fill: renderer.foregroundColor, 'class': renderer.controller.classes.generate(type), \"data-name\": type });\n}\n\nfunction curve(xLeft, yTop, xCurve, yCurve) {\n\treturn sprintf(\"M %f %f C %f %f %f %f %f %f C %f %f %f %f %f %f z\",\n\t\txLeft + xCurve[0], yTop + yCurve[0],\n\t\txLeft + xCurve[1], yTop + yCurve[1],\n\t\txLeft + xCurve[2], yTop + yCurve[2],\n\t\txLeft + xCurve[3], yTop + yCurve[3],\n\t\txLeft + xCurve[4], yTop + yCurve[4],\n\t\txLeft + xCurve[5], yTop + yCurve[5],\n\t\txLeft + xCurve[6], yTop + yCurve[6]);\n}\n\nvar draw = function (renderer, xLeft, yTop, yBottom, type, header, selectables) {//Tony\n\tvar ret;\n\tif (header) {\n\t\trenderer.paper.openGroup({ klass: renderer.controller.classes.generate(\"staff-extra voice-name\"), \"data-name\": type });\n\t\tvar position = yTop + (yBottom - yTop) / 2;\n\t\tposition = position - renderer.controller.getTextSize.baselineToCenter(header, \"voicefont\", 'staff-extra voice-name', 0, 1);\n\n\t\trenderText(renderer, {\n\t\t\tx: renderer.padding.left,\n\t\t\ty: position,\n\t\t\ttext: header,\n\t\t\ttype: 'voicefont',\n\t\t\tklass: 'staff-extra voice-name',\n\t\t\tanchor: 'start',\n\t\t\tcenterVertically: true\n\t\t});\n\t}\n\tif (type === \"brace\")\n\t\tret = curvyPath(renderer, xLeft, yTop, yBottom, type);\n\telse if (type === \"bracket\")\n\t\tret = straightPath(renderer, xLeft, yTop, yBottom, type);\n\tif (header) {\n\t\tret = renderer.paper.closeGroup();\n\t}\n\tselectables.wrapSvgEl({ el_type: type, startChar: -1, endChar: -1 }, ret);\n\n\treturn ret;\n};\nmodule.exports = drawBrace;\n","var sprintf = require('./sprintf');\nvar printPath = require('./print-path');\nvar roundNumber = require(\"./round-number\");\n\nfunction drawCrescendo(renderer, params, selectables) {\n\tif (params.pitch === undefined)\n\t\twindow.console.error(\"Crescendo Element y-coordinate not set.\");\n\tvar y = renderer.calcY(params.pitch) + 4; // This is the top pixel to use (it is offset a little so that it looks good with the volume marks.)\n\tvar height = 8;\n\n\t// TODO-PER: This is just a quick hack to make the dynamic marks not crash if they are mismatched. See the slur treatment for the way to get the beginning and end.\n\tvar left = params.anchor1 ? params.anchor1.x : 0;\n\tvar right = params.anchor2 ? params.anchor2.x : 800;\n\n\tvar el;\n\tif (params.dir === \"<\") {\n\t\tel = drawLine(renderer, y + height / 2, y, y + height / 2, y + height, left, right);\n\t} else {\n\t\tel = drawLine(renderer, y, y + height / 2, y + height, y + height / 2, left, right);\n\t}\n\tselectables.wrapSvgEl({ el_type: \"dynamicDecoration\", startChar: -1, endChar: -1 }, el);\n\treturn [el];\n}\n\nvar drawLine = function (renderer, y1, y2, y3, y4, left, right) {\n\ty1 = roundNumber(y1);\n\ty2 = roundNumber(y2);\n\ty3 = roundNumber(y3);\n\ty4 = roundNumber(y4);\n\tleft = roundNumber(left);\n\tright = roundNumber(right);\n\n\tvar pathString = sprintf(\"M %f %f L %f %f M %f %f L %f %f\",\n\t\tleft, y1, right, y2, left, y3, right, y4);\n\treturn printPath(renderer, { path: pathString, highlight: \"stroke\", stroke: renderer.foregroundColor, 'class': renderer.controller.classes.generate('dynamics decoration'), \"data-name\": \"dynamics\" });\n};\n\nmodule.exports = drawCrescendo;\n","function printDebugBox(renderer, attr, comment) {\n\tvar box = renderer.paper.rectBeneath(attr);\n\tif (comment)\n\t\trenderer.paper.text(comment, { x: 0, y: attr.y + 7, \"text-anchor\": \"start\", \"font-size\": \"14px\", fill: \"rgba(0,0,255,.4)\", stroke: \"rgba(0,0,255,.4)\" });\n\treturn box;\n}\n\nmodule.exports = printDebugBox;\n","var drawStaffGroup = require('./staff-group');\nvar setPaperSize = require('./set-paper-size');\nvar nonMusic = require('./non-music');\nvar spacing = require('../helpers/spacing');\nvar Selectables = require('./selectables');\n\nfunction draw(renderer, classes, abcTune, width, maxWidth, responsive, scale, selectTypes, tuneNumber, lineOffset) {\n\tvar selectables = new Selectables(renderer.paper, selectTypes, tuneNumber);\n\tvar groupClasses = {}\n\tif (classes.shouldAddClasses)\n\t\tgroupClasses.klass = \"abcjs-meta-top\"\n\trenderer.paper.openGroup(groupClasses)\n\trenderer.moveY(renderer.padding.top);\n\tnonMusic(renderer, abcTune.topText, selectables);\n\trenderer.paper.closeGroup()\n\trenderer.moveY(renderer.spacing.music);\n\tvar staffgroups = [];\n\tfor (var line = 0; line < abcTune.lines.length; line++) {\n\t\tclasses.incrLine();\n\t\tvar abcLine = abcTune.lines[line];\n\t\tif (abcLine.staff) {\n\t\t\tif (classes.shouldAddClasses)\n\t\t\t\tgroupClasses.klass = \"abcjs-staff-wrapper abcjs-l\" + classes.lineNumber\n\t\t\trenderer.paper.openGroup(groupClasses)\n\t\t\tif (abcLine.vskip) {\n\t\t\t\trenderer.moveY(abcLine.vskip);\n\t\t\t}\n\t\t\tif (staffgroups.length >= 1)\n\t\t\t\taddStaffPadding(renderer, renderer.spacing.staffSeparation, staffgroups[staffgroups.length - 1], abcLine.staffGroup);\n\t\t\tvar staffgroup = engraveStaffLine(renderer, abcLine.staffGroup, selectables, line);\n\t\t\tstaffgroup.line = lineOffset + line; // If there are non-music lines then the staffgroup array won't line up with the line array, so this keeps track.\n\t\t\tstaffgroups.push(staffgroup);\n\t\t\trenderer.paper.closeGroup()\n\t\t} else if (abcLine.nonMusic) {\n\t\t\tif (classes.shouldAddClasses)\n\t\t\t\tgroupClasses.klass = \"abcjs-non-music\"\n\t\t\trenderer.paper.openGroup(groupClasses)\n\t\t\tnonMusic(renderer, abcLine.nonMusic, selectables);\n\t\t\trenderer.paper.closeGroup()\n\t\t}\n\t}\n\n\tclasses.reset();\n\tif (abcTune.bottomText && abcTune.bottomText.rows && abcTune.bottomText.rows.length > 0) {\n\t\tif (classes.shouldAddClasses)\n\t\t\tgroupClasses.klass = \"abcjs-meta-bottom\"\n\t\trenderer.paper.openGroup(groupClasses)\n\t\trenderer.moveY(24); // TODO-PER: Empirically discovered. What variable should this be?\n\t\tnonMusic(renderer, abcTune.bottomText, selectables);\n\t\trenderer.paper.closeGroup()\n\t}\n\tsetPaperSize(renderer, maxWidth, scale, responsive);\n\treturn { staffgroups: staffgroups, selectables: selectables.getElements() };\n}\n\nfunction engraveStaffLine(renderer, staffGroup, selectables, lineNumber) {\n\tdrawStaffGroup(renderer, staffGroup, selectables, lineNumber);\n\tvar height = staffGroup.height * spacing.STEP;\n\trenderer.y += height;\n\treturn staffGroup;\n}\n\nfunction addStaffPadding(renderer, staffSeparation, lastStaffGroup, thisStaffGroup) {\n\tvar lastStaff = lastStaffGroup.staffs[lastStaffGroup.staffs.length - 1];\n\tvar lastBottomLine = -(lastStaff.bottom - 2); // The 2 is because the scale goes to 2 below the last line.\n\tvar nextTopLine = thisStaffGroup.staffs[0].top - 10; // Because 10 represents the top line.\n\tvar naturalSeparation = nextTopLine + lastBottomLine; // This is how far apart they'd be without extra spacing\n\tvar separationInPixels = naturalSeparation * spacing.STEP;\n\tif (separationInPixels < staffSeparation)\n\t\trenderer.moveY(staffSeparation - separationInPixels);\n}\n\nmodule.exports = draw;\n","var printSymbol = require('./print-symbol');\n\nfunction drawDynamics(renderer, params, selectables) {\n\tif (params.pitch === undefined)\n\t\twindow.console.error(\"Dynamic Element y-coordinate not set.\");\n\tvar scalex = 1;\n\tvar scaley = 1;\n\tvar el = printSymbol(renderer, params.anchor.x, params.pitch, params.dec, {\n\t\tscalex: scalex,\n\t\tscaley: scaley,\n\t\tklass: renderer.controller.classes.generate('decoration dynamics'),\n\t\tfill: renderer.foregroundColor,\n\t\tstroke: \"none\",\n\t\tname: \"dynamics\"\n\t});\n\tselectables.wrapSvgEl({ el_type: \"dynamicDecoration\", startChar: -1, endChar: -1, decoration: params.dec }, el);\n\treturn [el];\n}\n\nmodule.exports = drawDynamics;\n","var sprintf = require('./sprintf');\nvar renderText = require('./text');\nvar printPath = require('./print-path');\nvar roundNumber = require(\"./round-number\");\n\nfunction drawEnding(renderer, params, linestartx, lineendx, selectables) {\n\tif (params.pitch === undefined)\n\t\twindow.console.error(\"Ending Element y-coordinate not set.\");\n\tvar y = roundNumber(renderer.calcY(params.pitch));\n\tvar height = 20;\n\tvar pathString = '';\n\n\tif (params.anchor1) {\n\t\tlinestartx = roundNumber(params.anchor1.x + params.anchor1.w);\n\t\tpathString += sprintf(\"M %f %f L %f %f \",\n\t\t\tlinestartx, y, linestartx, roundNumber(y + height));\n\t}\n\n\tif (params.anchor2) {\n\t\tlineendx = roundNumber(params.anchor2.x);\n\t\tpathString += sprintf(\"M %f %f L %f %f \",\n\t\t\tlineendx, y, lineendx, roundNumber(y + height));\n\t}\n\n\tpathString += sprintf(\"M %f %f L %f %f \",\n\t\tlinestartx, y, lineendx, y);\n\n\trenderer.paper.openGroup({ klass: renderer.controller.classes.generate(\"ending\"), \"data-name\": \"ending\" });\n\tprintPath(renderer, { path: pathString, stroke: renderer.foregroundColor, fill: renderer.foregroundColor, \"data-name\": \"line\" });\n\tif (params.anchor1)\n\t\trenderText(renderer, {\n\t\t\tx: roundNumber(linestartx + 5),\n\t\t\ty: roundNumber(renderer.calcY(params.pitch - 0.5)),\n\t\t\ttext: params.text,\n\t\t\ttype: 'repeatfont',\n\t\t\tklass: 'ending',\n\t\t\tanchor: \"start\",\n\t\t\tnoClass: true,\n\t\t\tname: params.text\n\t\t});\n\tvar g = renderer.paper.closeGroup();\n\tselectables.wrapSvgEl({ el_type: \"ending\", startChar: -1, endChar: -1 }, g);\n\treturn [g];\n}\n\nmodule.exports = drawEnding;\n","var sprintf = require('./sprintf');\nvar printPath = require('./print-path');\nvar roundNumber = require(\"./round-number\");\n\nfunction drawGlissando(renderer, params, selectables) {\n\tif (!params.anchor1 || !params.anchor2 || !params.anchor1.heads || !params.anchor2.heads || params.anchor1.heads.length === 0 || params.anchor2.heads.length === 0)\n\t\twindow.console.error(\"Glissando Element not set.\");\n\n\tvar margin = 4;\n\tvar leftY = renderer.calcY(params.anchor1.heads[0].pitch)\n\tvar rightY = renderer.calcY(params.anchor2.heads[0].pitch)\n\tvar leftX = params.anchor1.x + params.anchor1.w / 2\n\tvar rightX = params.anchor2.x + params.anchor2.w / 2\n\t\n\tvar len = lineLength(leftX, leftY, rightX, rightY)\n\tvar marginLeft = params.anchor1.w / 2 + margin\n\tvar marginRight = params.anchor2.w / 2 + margin\n\tvar s = slope(leftX, leftY, rightX, rightY)\n\tvar leftYAdj = getY(leftY, s, marginLeft)\n\tvar rightYAdj = getY(rightY, s, -marginRight)\n\tvar num = numSquigglies(len - marginLeft - marginRight)\n\n\tvar el = drawSquiggly(renderer, leftX + marginLeft, leftYAdj, num, s)\n\tselectables.wrapSvgEl({ el_type: \"glissando\", startChar: -1, endChar: -1 }, el);\n\treturn [el];\n}\n\nfunction lineLength(leftX, leftY, rightX, rightY) {\n\t// The length from notehead center to notehead center.\n\tvar w = rightX - leftX\n\tvar h = rightY - leftY\n\treturn Math.sqrt(w * w + h * h)\n}\n\nfunction slope(leftX, leftY, rightX, rightY) {\n\treturn (rightY - leftY) / (rightX - leftX)\n}\n\nfunction getY(y, slope, xOfs) {\n\treturn roundNumber(y + (xOfs) * slope);\n}\n\nfunction numSquigglies(length) {\n\tvar endLen = 5; // The width of the end - that is, the non repeating part\n\treturn Math.max(2, Math.floor((length - endLen * 2) / 6));\n}\n\nvar leftStart = [[3.5, -4.8]]\nvar right = [[1.5, -1], [.3, -.3], [-3.5, 3.8]]\nvar leftEnd = [[-1.5, 2]]\nvar top = [[3, 4], [3, -4]]\nvar bottom = [[-3, 4], [-3, -4]]\n\nfunction segment(arr, slope) {\n\tvar ret = \"\";\n\tfor (var i = 0; i < arr.length; i++) {\n\t\tret += 'l' + arr[i][0] + ' ' + getY(arr[i][1], slope, arr[i][0])\n\t}\n\treturn ret\n}\n\nvar drawSquiggly = function (renderer, x, y, num, slope) {\n\tvar p = sprintf(\"M %f %f\", x, y);\n\tp += segment(leftStart, slope)\n\tvar i\n\tfor (i = 0; i < num; i++) {\n\t\tp += segment(top, slope)\n\t}\n\tp += segment(right, slope)\n\tfor (i = 0; i < num; i++)\n\t\tp += segment(bottom, slope)\n\tp += segment(leftEnd, slope) + 'z'\n\treturn printPath(renderer, { path: p, highlight: \"stroke\", stroke: renderer.foregroundColor, 'class': renderer.controller.classes.generate('decoration'), \"data-name\": \"glissando\" });\n}\n\nmodule.exports = drawGlissando;\n","/**\n * Begin a group of glyphs that will always be moved, scaled and highlighted together\n */\n\nvar roundNumber = require(\"./round-number\");\n\nfunction Group() {\n\tthis.ingroup = false;\n}\n\nGroup.prototype.beginGroup = function (paper, controller) {\n\tthis.paper = paper;\n\tthis.controller = controller;\n\tthis.path = [];\n\tthis.lastM = [0, 0];\n\tthis.ingroup = true;\n\tthis.paper.openGroup();\n};\n\nGroup.prototype.isInGroup = function () {\n\treturn this.ingroup;\n}\n\nGroup.prototype.addPath = function (path) {\n\tpath = path || [];\n\tif (path.length === 0) return;\n\tpath[0][0] = \"m\";\n\tpath[0][1] = roundNumber(path[0][1] - this.lastM[0]);\n\tpath[0][2] = roundNumber(path[0][2] - this.lastM[1]);\n\tthis.lastM[0] += path[0][1];\n\tthis.lastM[1] += path[0][2];\n\tthis.path.push(path[0]);\n\tfor (var i = 1, ii = path.length; i < ii; i++) {\n\t\tif (path[i][0] === \"m\") {\n\t\t\tthis.lastM[0] += path[i][1];\n\t\t\tthis.lastM[1] += path[i][2];\n\t\t}\n\t\tthis.path.push(path[i]);\n\t}\n};\n\n/**\n * End a group of glyphs that will always be moved, scaled and highlighted together\n */\nGroup.prototype.endGroup = function (klass, name) {\n\tthis.ingroup = false;\n\t//if (this.path.length === 0) return null;\n\tvar path = \"\";\n\tfor (var i = 0; i < this.path.length; i++)\n\t\tpath += this.path[i].join(\" \");\n\tthis.path = [];\n\n\tvar ret = this.paper.closeGroup();\n\tif (ret) {\n\t\tret.setAttribute(\"class\", this.controller.classes.generate(klass))\n\t\tret.setAttribute(\"fill\", this.controller.renderer.foregroundColor)\n\t\tret.setAttribute(\"stroke\", \"none\")\n\t\tret.setAttribute(\"data-name\", name)\n\t}\n\treturn ret;\n};\n\n// There is just a singleton of this object.\nvar elementGroup = new Group();\n\nmodule.exports = elementGroup;\n","var drawSeparator = require('./separator');\nvar renderText = require('./text');\n\nfunction nonMusic(renderer, obj, selectables) {\n\tfor (var i = 0; i < obj.rows.length; i++) {\n\t\tvar row = obj.rows[i];\n\t\tif (row.absmove) {\n\t\t\trenderer.absolutemoveY(row.absmove);\n\t\t} else if (row.move) {\n\t\t\trenderer.moveY(row.move);\n\t\t} else if (row.text || row.phrases) {\n\t\t\tvar x = row.left ? row.left : 0;\n\t\t\tvar el = renderText(renderer, {\n\t\t\t\tx: x,\n\t\t\t\ty: renderer.y,\n\t\t\t\ttext: row.text,\n\t\t\t\tphrases: row.phrases,\n\t\t\t\t'dominant-baseline': row['dominant-baseline'],\n\t\t\t\ttype: row.font,\n\t\t\t\tklass: row.klass,\n\t\t\t\tname: row.name,\n\t\t\t\tanchor: row.anchor\n\t\t\t});\n\t\t\tif (row.absElemType) {\n\t\t\t\tselectables.wrapSvgEl({\n\t\t\t\t\tel_type: row.absElemType,\n\t\t\t\t\tname: row.name,\n\t\t\t\t\tstartChar: row.startChar,\n\t\t\t\t\tendChar: row.endChar,\n\t\t\t\t\ttext: row.text\n\t\t\t\t}, el);\n\t\t\t}\n\t\t} else if (row.separator) {\n\t\t\tdrawSeparator(renderer, row.separator)\n\t\t} else if (row.startGroup) {\n\t\t\trenderer.paper.openGroup({ klass: row.klass, \"data-name\": row.name });\n\t\t} else if (row.endGroup) {\n\t\t\t// TODO-PER: also create a history element with the title \"row.endGroup\"\n\t\t\tvar g = renderer.paper.closeGroup();\n\t\t\tif (row.absElemType)\n\t\t\t\tselectables.wrapSvgEl({\n\t\t\t\t\tel_type: row.absElemType,\n\t\t\t\t\tname: row.name,\n\t\t\t\t\tstartChar: row.startChar,\n\t\t\t\t\tendChar: row.endChar,\n\t\t\t\t\ttext: \"\"\n\t\t\t\t}, g);\n\t\t}\n\t}\n}\n\nmodule.exports = nonMusic;\n","var sprintf = require('./sprintf');\nvar roundNumber = require(\"./round-number\");\n\nfunction printLine(renderer, x1, x2, y, klass, name, dy) {\n\tvar fill = renderer.foregroundColor;\n\tx1 = roundNumber(x1);\n\tx2 = roundNumber(x2);\n\tvar y1 = roundNumber(y - dy);\n\tvar y2 = roundNumber(y + dy);\n\t// TODO-PER: This fixes a firefox bug where it isn't displayed\n\tif (renderer.firefox112) {\n\t\ty += dy / 2; // Because the y coordinate is the edge of where the line goes but the width widens from the middle.\n\t\tvar attr = {\n\t\t\tx1: x1,\n\t\t\tx2: x2,\n\t\t\ty1: y,\n\t\t\ty2: y,\n\t\t\tstroke: renderer.foregroundColor,\n\t\t\t'stroke-width': Math.abs(dy*2)\n\t\t}\n\t\tif (klass)\n\t\t\tattr['class'] = klass;\n\t\tif (name)\n\t\t\tattr['data-name'] = name;\n\t\t\n\t\treturn renderer.paper.lineToBack(attr);\n\t}\n\n\tvar pathString = sprintf(\"M %f %f L %f %f L %f %f L %f %f z\", x1, y1, x2, y1,\n\t\tx2, y2, x1, y2);\n\tvar options = { path: pathString, stroke: \"none\", fill: fill };\n\tif (name)\n\t\toptions['data-name'] = name;\n\tif (klass)\n\t\toptions['class'] = klass;\n\tvar ret = renderer.paper.pathToBack(options);\n\n\treturn ret;\n}\n\nmodule.exports = printLine;\n\n","function printPath(renderer, attrs, params) {\n\tvar ret = renderer.paper.path(attrs);\n\n\treturn ret;\n}\n\nmodule.exports = printPath;\n","var elementGroup = require('./group-elements');\nvar roundNumber = require(\"./round-number\");\n\nfunction printStem(renderer, x, dx, y1, y2, klass, name) {\n\tif (dx < 0 || y1 < y2) { // correct path \"handedness\" for intersection with other elements\n\t\tvar tmp = roundNumber(y2);\n\t\ty2 = roundNumber(y1);\n\t\ty1 = tmp;\n\t} else {\n\t\ty1 = roundNumber(y1);\n\t\ty2 = roundNumber(y2);\n\t}\n\tx = roundNumber(x);\n\tvar x2 = roundNumber(x + dx);\n\t// TODO-PER: This fixes a firefox bug where it isn't displayed\n\tif (renderer.firefox112) {\n\t\tx += dx / 2; // Because the x coordinate is the edge of where the line goes but the width widens from the middle.\n\t\tvar attr = {\n\t\t\tx1: x,\n\t\t\tx2: x,\n\t\t\ty1: y1,\n\t\t\ty2: y2,\n\t\t\tstroke: renderer.foregroundColor,\n\t\t\t'stroke-width': Math.abs(dx)\n\t\t}\n\t\tif (klass)\n\t\t\tattr['class'] = klass;\n\t\tif (name)\n\t\t\tattr['data-name'] = name;\n\t\t\n\t\treturn renderer.paper.lineToBack(attr);\n\t}\n\tvar pathArray = [[\"M\", x, y1], [\"L\", x, y2], [\"L\", x2, y2], [\"L\", x2, y1], [\"z\"]];\n\tvar attr = { path: \"\" };\n\tfor (var i = 0; i < pathArray.length; i++)\n\t\tattr.path += pathArray[i].join(\" \");\n\tif (klass)\n\t\tattr['class'] = klass;\n\tif (name)\n\t\tattr['data-name'] = name;\n\tif (!elementGroup.isInGroup()) {\n\t\tattr.stroke = \"none\";\n\t\tattr.fill = renderer.foregroundColor;\n\t}\n\treturn renderer.paper.pathToBack(attr);\n}\n\nmodule.exports = printStem;\n","var renderText = require('./text');\nvar glyphs = require('../creation/glyphs');\nvar elementGroup = require('./group-elements');\n\n/**\n * assumes this.y is set appropriately\n * if symbol is a multichar string without a . (as in scripts.staccato) 1 symbol per char is assumed\n * not scaled if not in printgroup\n */\nfunction printSymbol(renderer, x, offset, symbol, options) {\n\t// TODO-PER: what happened to scalex, and scaley? That might have been a bug introduced in refactoring\n\tvar el;\n\tvar ycorr;\n\tif (!symbol) return null;\n\tif (symbol.length > 1 && symbol.indexOf(\".\") < 0) {\n\t\tvar groupClass = elementGroup.isInGroup() ? '' : options.klass // If this is already in a group then don't repeat the classes for the sub-group)\n\t\trenderer.paper.openGroup({ \"data-name\": options.name, klass: groupClass });\n\t\tvar dx = 0;\n\t\tfor (var i = 0; i < symbol.length; i++) {\n\t\t\tvar s = symbol[i];\n\t\t\tycorr = glyphs.getYCorr(s);\n\t\t\tel = glyphs.printSymbol(x + dx, renderer.calcY(offset + ycorr), s, renderer.paper, { stroke: options.stroke, fill: options.fill });\n\t\t\tif (el) {\n\t\t\t\tif (i < symbol.length - 1)\n\t\t\t\t\tdx += kernSymbols(s, symbol[i + 1], glyphs.getSymbolWidth(s));\n\t\t\t} else {\n\t\t\t\trenderText(renderer, { x: x, y: renderer.y, text: \"no symbol:\" + symbol, type: \"debugfont\", klass: 'debug-msg', anchor: 'start' }, false);\n\t\t\t}\n\t\t}\n\t\tvar g = renderer.paper.closeGroup();\n\t\treturn g;\n\t} else {\n\t\tycorr = glyphs.getYCorr(symbol);\n\t\tif (elementGroup.isInGroup()) {\n\t\t\tel = glyphs.printSymbol(x, renderer.calcY(offset + ycorr), symbol, renderer.paper, { \"data-name\": options.name });\n\t\t} else {\n\t\t\tel = glyphs.printSymbol(x, renderer.calcY(offset + ycorr), symbol, renderer.paper, { klass: options.klass, stroke: options.stroke, fill: options.fill, \"data-name\": options.name });\n\t\t}\n\t\tif (el) {\n\t\t\treturn el;\n\t\t}\n\t\trenderText(renderer, { x: x, y: renderer.y, text: \"no symbol:\" + symbol, type: \"debugfont\", klass: 'debug-msg', anchor: 'start' }, false);\n\t\treturn null;\n\t}\n}\n\nfunction kernSymbols(lastSymbol, thisSymbol, lastSymbolWidth) {\n\t// This is just some adjustments to make it look better.\n\tvar width = lastSymbolWidth;\n\tif (lastSymbol === 'f' && thisSymbol === 'f')\n\t\twidth = width * 2 / 3;\n\tif (lastSymbol === 'p' && thisSymbol === 'p')\n\t\twidth = width * 5 / 6;\n\tif (lastSymbol === 'f' && thisSymbol === 'z')\n\t\twidth = width * 5 / 8;\n\treturn width;\n}\n\nmodule.exports = printSymbol;\n","var renderText = require('./text');\nvar printStem = require('./print-stem');\nvar printStaffLine = require('./staff-line');\nvar printSymbol = require('./print-symbol');\n\nfunction drawRelativeElement(renderer, params, bartop) {\n\tif (params.pitch === undefined)\n\t\twindow.console.error(params.type + \" Relative Element y-coordinate not set.\");\n\tvar y = renderer.calcY(params.pitch);\n\tswitch (params.type) {\n\t\tcase \"symbol\":\n\t\t\tif (params.c === null) return null;\n\t\t\tvar klass = \"symbol\";\n\t\t\tif (params.klass) klass += \" \" + params.klass;\n\t\t\tparams.graphelem = printSymbol(renderer, params.x, params.pitch, params.c, {\n\t\t\t\tscalex: params.scalex,\n\t\t\t\tscaley: params.scaley,\n\t\t\t\tklass: renderer.controller.classes.generate(klass),\n\t\t\t\t//\t\t\t\tfill:\"none\",\n\t\t\t\t//\t\t\t\tstroke: renderer.foregroundColor,\n\t\t\t\tname: params.name\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"debug\":\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x, y: renderer.calcY(15), text: \"\" + params.c, type: \"debugfont\", klass: renderer.controller.classes.generate('debug-msg'), anchor: 'start', centerVertically: false, dim: params.dim }, false);\n\t\t\tbreak;\n\t\tcase \"tabNumber\":\n\t\t\tvar hAnchor = \"middle\";\n\t\t\tvar tabFont = \"tabnumberfont\";\n\t\t\tvar tabClass = 'abcjs-tab-number';\n\t\t\tif (params.isGrace) {\n\t\t\t\ttabFont = \"tabgracefont\";\n\t\t\t\ty += 2.5;\n\t\t\t\ttabClass = 'tab-grace'\n\t\t\t}\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x, y: y, text: \"\" + params.c, type: tabFont, klass: renderer.controller.classes.generate(tabClass), anchor: hAnchor, centerVertically: false, dim: params.dim, cursor: 'default' }, false);\n\t\t\tbreak;\n\t\tcase \"barNumber\":\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x, y: y, text: \"\" + params.c, type: \"measurefont\", klass: renderer.controller.classes.generate('bar-number'), anchor: \"middle\", dim: params.dim, name: \"bar-number\" }, true);\n\t\t\tbreak;\n\t\tcase \"lyric\":\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x, y: y, text: params.c, type: \"vocalfont\", klass: renderer.controller.classes.generate('lyric'), anchor: \"middle\", dim: params.dim, name: \"lyric\" }, false);\n\t\t\tbreak;\n\t\tcase \"chord\":\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x, y: y, text: params.c, type: 'gchordfont', klass: renderer.controller.classes.generate(\"chord\"), anchor: \"middle\", dim: params.dim, lane: params.getLane(), name: \"chord\" }, false);\n\t\t\tbreak;\n\t\tcase \"decoration\":\n\t\t\t// The +6 is to compensate for the placement of text in svg: to be on the same row as symbols, the y-coord needs to compensate for the center line.\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x, y: y + 6, text: params.c, type: 'annotationfont', klass: renderer.controller.classes.generate(\"annotation\"), anchor: params.anchor, centerVertically: true, dim: params.dim }, false);\n\t\t\tbreak;\n\t\tcase \"text\":\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x, y: y, text: params.c, type: 'annotationfont', klass: renderer.controller.classes.generate(\"annotation\"), anchor: \"start\", centerVertically: params.centerVertically, dim: params.dim, lane: params.getLane(), name: \"annotation\" }, false);\n\t\t\tbreak;\n\t\tcase \"multimeasure-text\":\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x + params.w / 2, y: y, text: params.c, type: 'tempofont', klass: renderer.controller.classes.generate(\"rest\"), anchor: \"middle\", centerVertically: false, dim: params.dim }, false);\n\t\t\tbreak;\n\t\tcase \"part\":\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x, y: y, text: params.c, type: 'partsfont', klass: renderer.controller.classes.generate(\"part\"), anchor: \"start\", dim: params.dim, name: params.c }, true);\n\t\t\tbreak;\n\t\tcase \"bar\":\n\t\t\tparams.graphelem = printStem(renderer, params.x, params.linewidth + renderer.lineThickness, y, (bartop) ? bartop : renderer.calcY(params.pitch2), null, \"bar\"); break; // bartop can't be 0\n\t\tcase \"stem\":\n\t\t\tvar stemWidth = params.linewidth > 0 ? params.linewidth + renderer.lineThickness : params.linewidth - renderer.lineThickness\n\t\t\tparams.graphelem = printStem(renderer, params.x, stemWidth, y, renderer.calcY(params.pitch2), 'abcjs-stem', 'stem'); break;\n\t\tcase \"ledger\":\n\t\t\tparams.graphelem = printStaffLine(renderer, params.x, params.x + params.w, params.pitch, \"abcjs-ledger\", \"ledger\", 0.35 + renderer.lineThickness); break;\n\t}\n\tif (params.scalex !== 1 && params.graphelem) {\n\t\tscaleExistingElem(renderer.paper, params.graphelem, params.scalex, params.scaley, params.x, y);\n\t}\n\treturn params.graphelem;\n}\n\nfunction scaleExistingElem(paper, elem, scaleX, scaleY, x, y) {\n\tpaper.setAttributeOnElement(elem, { style: \"transform:scale(\" + scaleX + \",\" + scaleY + \");transform-origin:\" + x + \"px \" + y + \"px;\" });\n}\n\nmodule.exports = drawRelativeElement;\n","function roundNumber(x) {\n\treturn parseFloat(x.toFixed(2));\n}\n\nmodule.exports = roundNumber;\n","var highlight = require('../interactive/highlight');\nvar unhighlight = require('../interactive/unhighlight');\n\nfunction Selectables(paper, selectTypes, tuneNumber) {\n\tthis.elements = [];\n\tthis.paper = paper;\n\tthis.tuneNumber = tuneNumber;\n\tthis.selectTypes = selectTypes;\n}\n\nSelectables.prototype.getElements = function () {\n\treturn this.elements;\n};\n\nSelectables.prototype.add = function (absEl, svgEl, isNoteOrTabNumber, staffPos) {\n\tif (!this.canSelect(absEl))\n\t\treturn;\n\tvar params;\n\tif (this.selectTypes === undefined)\n\t\tparams = { selectable: false, \"data-index\": this.elements.length }; // This is the old behavior.\n\telse\n\t\tparams = { selectable: true, tabindex: 0, \"data-index\": this.elements.length };\n\tthis.paper.setAttributeOnElement(svgEl, params);\n\tvar sel = { absEl: absEl, svgEl: svgEl, isDraggable: isNoteOrTabNumber };\n\tif (staffPos !== undefined)\n\t\tsel.staffPos = staffPos;\n\tthis.elements.push(sel);\n\n};\n\nSelectables.prototype.canSelect = function (absEl) {\n\tif (this.selectTypes === false)\n\t\treturn false;\n\tif (!absEl || !absEl.abcelem)\n\t\treturn false;\n\tif (this.selectTypes === true)\n\t\treturn true;\n\tif (this.selectTypes === undefined) {\n\t\t// by default, only notes and tab numbers can be clicked.\n\t\tif (absEl.abcelem.el_type === 'note' || absEl.abcelem.el_type === 'tabNumber') {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\treturn this.selectTypes.indexOf(absEl.abcelem.el_type) >= 0;\n};\n\nSelectables.prototype.wrapSvgEl = function (abcelem, el) {\n\tvar absEl = {\n\t\ttuneNumber: this.tuneNumber,\n\t\tabcelem: abcelem,\n\t\telemset: [el],\n\t\thighlight: highlight,\n\t\tunhighlight: unhighlight\n\t};\n\tthis.add(absEl, el, false);\n};\n\nmodule.exports = Selectables;\n","function drawSeparator(renderer, width) {\n\tvar fill = \"rgba(0,0,0,255)\";\n\tvar stroke = \"rgba(0,0,0,0)\";\n\tvar y = Math.round(renderer.y);\n\tvar staffWidth = renderer.controller.width;\n\tvar x1 = (staffWidth - width) / 2;\n\tvar x2 = x1 + width;\n\tvar pathString = 'M ' + x1 + ' ' + y +\n\t\t' L ' + x2 + ' ' + y +\n\t\t' L ' + x2 + ' ' + (y + 1) +\n\t\t' L ' + x1 + ' ' + (y + 1) +\n\t\t' L ' + x1 + ' ' + y + ' z';\n\trenderer.paper.pathToBack({ path: pathString, stroke: stroke, fill: fill, 'class': renderer.controller.classes.generate('defined-text') });\n}\n\nmodule.exports = drawSeparator;\n","function setPaperSize(renderer, maxwidth, scale, responsive) {\n\tvar w = (maxwidth + renderer.padding.left + renderer.padding.right) * scale;\n\tvar h = (renderer.y + renderer.padding.bottom) * scale;\n\tif (renderer.isPrint)\n\t\th = Math.max(h, 1056); // 11in x 72pt/in x 1.33px/pt\n\t// TODO-PER: We are letting the page get as long as it needs now, but eventually that should go to a second page.\n\n\t// for accessibility\n\tif (renderer.ariaLabel !== '') {\n\t\tvar text = \"Sheet Music\";\n\t\tif (renderer.abctune && renderer.abctune.metaText && renderer.abctune.metaText.title)\n\t\t\ttext += \" for \\\"\" + renderer.abctune.metaText.title + '\"';\n\t\trenderer.paper.setTitle(text);\n\t\tvar label = renderer.ariaLabel ? renderer.ariaLabel : text;\n\t\trenderer.paper.setAttribute(\"aria-label\", label);\n\t}\n\n\t// for dragging - don't select during drag\n\tvar styles = [\n\t\t\"-webkit-touch-callout: none;\",\n\t\t\"-webkit-user-select: none;\",\n\t\t\"-khtml-user-select: none;\",\n\t\t\"-moz-user-select: none;\",\n\t\t\"-ms-user-select: none;\",\n\t\t\"user-select: none;\"\n\t];\n\trenderer.paper.insertStyles(\".abcjs-dragging-in-progress text, .abcjs-dragging-in-progress tspan {\" + styles.join(\" \") + \"}\");\n\n\tvar parentStyles = { overflow: \"hidden\" };\n\tif (responsive === 'resize') {\n\t\trenderer.paper.setResponsiveWidth(w, h);\n\t} else {\n\t\tparentStyles.width = \"\";\n\t\tparentStyles.height = h + \"px\";\n\t\tif (scale < 1) {\n\t\t\tparentStyles.width = w + \"px\";\n\t\t\trenderer.paper.setSize(w / scale, h / scale);\n\t\t} else\n\t\t\trenderer.paper.setSize(w, h);\n\t}\n\trenderer.paper.setScale(scale);\n\trenderer.paper.setParentStyles(parentStyles);\n}\n\nmodule.exports = setPaperSize;\n","/**\n * sprintf() for JavaScript v.0.4\n *\n Copyright (c) 2007-present, Alexandru Mărășteanu <hello@alexei.ro>\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n * Neither the name of this software nor the names of its contributors may be\n used to endorse or promote products derived from this software without\n specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n//function str_repeat(i, m) { for (var o = []; m > 0; o[--m] = i); return(o.join('')); }\n\nvar sprintf = function () {\n\tvar i = 0, a, f = arguments[i++], o = [], m, p, c, x;\n\twhile (f) {\n\t\tif (m = /^[^\\x25]+/.exec(f)) o.push(m[0]);\n\t\telse if (m = /^\\x25{2}/.exec(f)) o.push('%');\n\t\telse if (m = /^\\x25(?:(\\d+)\\$)?(\\+)?(0|'[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-fosuxX])/.exec(f)) {\n\t\t\tif (((a = arguments[m[1] || i++]) == null) || (a == undefined)) throw (\"Too few arguments.\");\n\t\t\tif (/[^s]/.test(m[7]) && (typeof (a) != 'number'))\n\t\t\t\tthrow (\"Expecting number but found \" + typeof (a));\n\t\t\tswitch (m[7]) {\n\t\t\t\tcase 'b': a = a.toString(2); break;\n\t\t\t\tcase 'c': a = String.fromCharCode(a); break;\n\t\t\t\tcase 'd': a = parseInt(a); break;\n\t\t\t\tcase 'e': a = m[6] ? a.toExponential(m[6]) : a.toExponential(); break;\n\t\t\t\tcase 'f': a = m[6] ? parseFloat(a).toFixed(m[6]) : parseFloat(a); break;\n\t\t\t\tcase 'o': a = a.toString(8); break;\n\t\t\t\tcase 's': a = ((a = String(a)) && m[6] ? a.substring(0, m[6]) : a); break;\n\t\t\t\tcase 'u': a = Math.abs(a); break;\n\t\t\t\tcase 'x': a = a.toString(16); break;\n\t\t\t\tcase 'X': a = a.toString(16).toUpperCase(); break;\n\t\t\t}\n\t\t\ta = (/[def]/.test(m[7]) && m[2] && a > 0 ? '+' + a : a);\n\t\t\tc = m[3] ? m[3] == '0' ? '0' : m[3][1] : ' ';\n\t\t\tx = m[5] - String(a).length;\n\t\t\tp = m[5] ? str_repeat(c, x) : '';\n\t\t\to.push(m[4] ? a + p : p + a);\n\t\t}\n\t\telse throw (\"Huh ?!\");\n\t\tf = f.substring(m[0].length);\n\t}\n\treturn o.join('');\n};\n\nmodule.exports = sprintf;\n","var spacing = require('../helpers/spacing');\nvar drawBrace = require('./brace');\nvar drawVoice = require('./voice');\nvar printStaff = require('./staff');\nvar printDebugBox = require('./debug-box');\nvar printStem = require('./print-stem');\nvar nonMusic = require('./non-music');\n\nfunction drawStaffGroup(renderer, params, selectables, lineNumber) {\n\t// We enter this method with renderer.y pointing to the topmost coordinate that we're allowed to draw.\n\t// All of the children that will be drawn have a relative \"pitch\" set, where zero is the first ledger line below the staff.\n\t// renderer.y will be offset at the beginning of each staff by the amount required to make the relative pitch work.\n\t// If there are multiple staves, then renderer.y will be incremented for each new staff.\n\n\tvar colorIndex;\n\n\t// An invisible marker is useful to be able to find where each system starts.\n\t//addInvisibleMarker(renderer, \"abcjs-top-of-system\");\n\n\tvar startY = renderer.y; // So that it can be restored after we're done.\n\t// Set the absolute Y position for each staff here, so the voice drawing below can just use if.\n\tfor (var j = 0; j < params.staffs.length; j++) {\n\t\tvar staff1 = params.staffs[j];\n\t\t//renderer.printHorizontalLine(50, renderer.y, \"start\");\n\t\trenderer.moveY(spacing.STEP, staff1.top);\n\t\tstaff1.absoluteY = renderer.y;\n\t\tif (renderer.showDebug) {\n\t\t\tif (renderer.showDebug.indexOf(\"box\") >= 0 && staff1.voices) {\n\t\t\t\tboxAllElements(renderer, params.voices, staff1.voices);\n\t\t\t}\n\t\t\tif (renderer.showDebug.indexOf(\"grid\") >= 0) {\n\t\t\t\trenderer.paper.dottedLine({ x1: renderer.padding.left, x2: renderer.padding.left + renderer.controller.width, y1: startY, y2: startY, stroke: \"#0000ff\" });\n\t\t\t\tprintDebugBox(renderer,\n\t\t\t\t\t{\n\t\t\t\t\t\tx: renderer.padding.left,\n\t\t\t\t\t\ty: renderer.calcY(staff1.originalTop),\n\t\t\t\t\t\twidth: renderer.controller.width,\n\t\t\t\t\t\theight: renderer.calcY(staff1.originalBottom) - renderer.calcY(staff1.originalTop),\n\t\t\t\t\t\tfill: renderer.foregroundColor,\n\t\t\t\t\t\tstroke: renderer.foregroundColor,\n\t\t\t\t\t\t\"fill-opacity\": 0.1,\n\t\t\t\t\t\t\"stroke-opacity\": 0.1\n\t\t\t\t\t});\n\t\t\t\tcolorIndex = 0;\n\t\t\t\tdebugPrintGridItem(staff1, 'chordHeightAbove');\n\t\t\t\tdebugPrintGridItem(staff1, 'chordHeightBelow');\n\t\t\t\tdebugPrintGridItem(staff1, 'dynamicHeightAbove');\n\t\t\t\tdebugPrintGridItem(staff1, 'dynamicHeightBelow');\n\t\t\t\tdebugPrintGridItem(staff1, 'endingHeightAbove');\n\t\t\t\tdebugPrintGridItem(staff1, 'lyricHeightAbove');\n\t\t\t\tdebugPrintGridItem(staff1, 'lyricHeightBelow');\n\t\t\t\tdebugPrintGridItem(staff1, 'partHeightAbove');\n\t\t\t\tdebugPrintGridItem(staff1, 'tempoHeightAbove');\n\t\t\t\tdebugPrintGridItem(staff1, 'volumeHeightAbove');\n\t\t\t\tdebugPrintGridItem(staff1, 'volumeHeightBelow');\n\t\t\t}\n\t\t}\n\t\trenderer.moveY(spacing.STEP, -staff1.bottom);\n\t\tif (renderer.showDebug) {\n\t\t\tif (renderer.showDebug.indexOf(\"grid\") >= 0) {\n\t\t\t\trenderer.paper.dottedLine({\n\t\t\t\t\tx1: renderer.padding.left,\n\t\t\t\t\tx2: renderer.padding.left + renderer.controller.width,\n\t\t\t\t\ty1: renderer.y,\n\t\t\t\t\ty2: renderer.y,\n\t\t\t\t\tstroke: \"#0000aa\"\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\tvar topLine; // these are to connect multiple staves. We need to remember where they are.\n\tvar bottomLine;\n\n\tvar linePitch = 2;\n\tvar bartop = 0;\n\tfor (var i = 0; i < params.voices.length; i++) {\n\t\tvar staff = params.voices[i].staff;\n\t\tvar tabName = params.voices[i].tabNameInfos;\n\t\trenderer.y = staff.absoluteY;\n\t\trenderer.controller.classes.incrVoice();\n\t\t//renderer.y = staff.y;\n\t\t// offset for starting the counting at middle C\n\t\tif (!params.voices[i].duplicate) {\n\t\t\t//\t\t\trenderer.moveY(spacing.STEP, staff.top);\n\t\t\tif (!topLine) topLine = renderer.calcY(10);\n\t\t\tbottomLine = renderer.calcY(linePitch);\n\t\t\tif (staff.lines !== 0) {\n\t\t\t\tif (staff.linePitch) {\n\t\t\t\t\tlinePitch = staff.linePitch;\n\t\t\t\t}\n\t\t\t\trenderer.controller.classes.newMeasure();\n\t\t\t\tvar lines = printStaff(renderer, params.startx, params.w, staff.lines, staff.linePitch, 0.35);\n\t\t\t\tbottomLine = lines[1];\n\t\t\t\tstaff.bottomLine = bottomLine;\n\t\t\t\tstaff.topLine = lines[0];\n\t\t\t\t// rework bartop when tabs are present with current staff\n\t\t\t\tif (staff.hasTab) {\n\t\t\t\t\t// do not link to staff above  (ugly looking)\n\t\t\t\t\tbartop = staff.topLine;\n\t\t\t\t}\n\t\t\t\tif (staff.hasStaff) {\n\t\t\t\t\t// this is a tab\n\t\t\t\t\tbartop = staff.hasStaff.topLine;\n\t\t\t\t\tparams.voices[i].barto = true;\n\t\t\t\t\tparams.voices[i].topLine = topLine;\n\t\t\t\t}\n\n\t\t\t}\n\t\t\tprintBrace(renderer, staff.absoluteY, params.brace, i, selectables);\n\t\t\tprintBrace(renderer, staff.absoluteY, params.bracket, i, selectables);\n\t\t}\n\t\tdrawVoice(renderer, params.voices[i], bartop, selectables, {\n\t\t\ttop: startY,\n\t\t\tzero: renderer.y,\n\t\t\theight: params.height * spacing.STEP\n\t\t});\n\t\tvar tabNameHeight = 0;\n\t\tif (tabName) {\n\t\t\t// print tab infos on staffBottom\n\t\t\tvar r = { rows: [] };\n\t\t\tr.rows.push({ absmove: bottomLine + 2 });\n\t\t\tvar leftMargin = 8;\n\t\t\tr.rows.push({ left: params.startx + leftMargin, text: tabName.name, font: 'tablabelfont', klass: 'text instrument-name', anchor: 'start' });\n\t\t\tr.rows.push({ move: tabName.textSize.height });\n\t\t\tnonMusic(renderer, r);\n\t\t\ttabNameHeight = tabName.textSize.height;\n\t\t}\n\n\t\trenderer.controller.classes.newMeasure();\n\t\tif (!params.voices[i].duplicate) {\n\t\t\tbartop = renderer.calcY(2 + tabNameHeight); // This connects the bar lines between two different staves.\n\t\t\t//\t\t\tif (staff.bottom < 0)\n\t\t\t//\t\t\t\trenderer.moveY(spacing.STEP, -staff.bottom);\n\t\t}\n\t}\n\trenderer.controller.classes.newMeasure();\n\n\t// connect all the staves together with a vertical line\n\tvar staffSize = params.staffs.length;\n\tif (staffSize > 1) {\n\t\ttopLine = params.staffs[0].topLine;\n\t\tbottomLine = params.staffs[staffSize - 1].bottomLine;\n\t\tprintStem(renderer, params.startx, 0.6, topLine, bottomLine, null);\n\t}\n\trenderer.y = startY;\n\n\tfunction debugPrintGridItem(staff, key) {\n\t\tvar colors = [\"rgb(207,27,36)\", \"rgb(168,214,80)\", \"rgb(110,161,224)\", \"rgb(191,119,218)\", \"rgb(195,30,151)\",\n\t\t\t\"rgb(31,170,177)\", \"rgb(220,166,142)\"];\n\t\tif (staff.positionY && staff.positionY[key]) {\n\t\t\tvar height = staff.specialY[key] * spacing.STEP;\n\t\t\tif (key === \"chordHeightAbove\" && staff.specialY.chordLines && staff.specialY.chordLines.above)\n\t\t\t\theight *= staff.specialY.chordLines.above;\n\t\t\tif (key === \"chordHeightBelow\" && staff.specialY.chordLines && staff.specialY.chordLines.below)\n\t\t\t\theight *= staff.specialY.chordLines.below;\n\t\t\tprintDebugBox(renderer,\n\t\t\t\t{\n\t\t\t\t\tx: renderer.padding.left,\n\t\t\t\t\ty: renderer.calcY(staff.positionY[key]),\n\t\t\t\t\twidth: renderer.controller.width,\n\t\t\t\t\theight: height,\n\t\t\t\t\tfill: colors[colorIndex],\n\t\t\t\t\tstroke: colors[colorIndex],\n\t\t\t\t\t\"fill-opacity\": 0.4,\n\t\t\t\t\t\"stroke-opacity\": 0.4\n\t\t\t\t},\n\t\t\t\tkey.substr(0, 4));\n\t\t\tcolorIndex += 1; if (colorIndex > 6) colorIndex = 0;\n\t\t}\n\t}\n}\n\nfunction printBrace(renderer, absoluteY, brace, index, selectables) {\n\tif (brace) {\n\t\tfor (var i = 0; i < brace.length; i++) {\n\t\t\tif (brace[i].isStartVoice(index)) {\n\t\t\t\tbrace[i].startY = absoluteY - spacing.STEP * 10;\n\t\t\t\tbrace[i].elemset = drawBrace(renderer, brace[i], selectables);\n\t\t\t}\n\t\t}\n\t}\n}\n\n// function addInvisibleMarker(renderer, className) {\n// \tvar y = Math.round(renderer.y);\n// \trenderer.paper.pathToBack({path:\"M 0 \" + y + \" L 0 0\", stroke:\"none\", fill:\"none\", \"stroke-opacity\": 0, \"fill-opacity\": 0, 'class': renderer.controller.classes.generate(className), 'data-vertical': y });\n// }\n\nfunction boxAllElements(renderer, voices, which) {\n\tfor (var i = 0; i < which.length; i++) {\n\t\tvar children = voices[which[i]].children;\n\t\tfor (var j = 0; j < children.length; j++) {\n\t\t\tvar elem = children[j];\n\t\t\tvar coords = elem.getFixedCoords();\n\t\t\tif (elem.invisible || coords.t === undefined || coords.b === undefined)\n\t\t\t\tcontinue;\n\t\t\tvar height = (coords.t - coords.b) * spacing.STEP;\n\t\t\tprintDebugBox(renderer,\n\t\t\t\t{\n\t\t\t\t\tx: coords.x,\n\t\t\t\t\ty: renderer.calcY(coords.t),\n\t\t\t\t\twidth: coords.w,\n\t\t\t\t\theight: height,\n\t\t\t\t\tfill: \"#88e888\",\n\t\t\t\t\t\"fill-opacity\": 0.4,\n\t\t\t\t\tstroke: \"#4aa93d\",\n\t\t\t\t\t\"stroke-opacity\": 0.8\n\t\t\t\t});\n\n\t\t\tfor (var k = 0; k < elem.children.length; k++) {\n\t\t\t\tvar relElem = elem.children[k];\n\t\t\t\tvar chord = relElem.getChordDim();\n\t\t\t\tif (chord) {\n\t\t\t\t\tvar y = renderer.calcY(relElem.pitch);\n\t\t\t\t\ty += relElem.dim.font.size * relElem.getLane();\n\t\t\t\t\tprintDebugBox(renderer,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tx: chord.left,\n\t\t\t\t\t\t\ty: y,\n\t\t\t\t\t\t\twidth: chord.right - chord.left,\n\t\t\t\t\t\t\theight: relElem.dim.font.size,\n\t\t\t\t\t\t\tfill: \"none\",\n\t\t\t\t\t\t\tstroke: \"#4aa93d\",\n\t\t\t\t\t\t\t\"stroke-opacity\": 0.8\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nmodule.exports = drawStaffGroup;\n","var printLine = require('./print-line');\n\nfunction printStaffLine(renderer, x1, x2, pitch, klass, name, dy) {\n\tvar y = renderer.calcY(pitch);\n\treturn printLine(renderer, x1, x2, y, klass, name, dy);\n}\n\nmodule.exports = printStaffLine;\n\n","var printStaffLine = require('./staff-line');\n\nfunction printStaff(renderer, startx, endx, numLines, linePitch, dy) {\n\tvar klass = \"abcjs-top-line\";\n\tvar pitch = 2;\n\tif (linePitch) {\n\t\tpitch = linePitch;\n\t}\n\trenderer.paper.openGroup({ prepend: true, klass: renderer.controller.classes.generate(\"abcjs-staff\") });\n\t// If there is one line, it is the B line. Otherwise, the bottom line is the E line.\n\tvar firstYLine = 0;\n\tvar lastYLine = 0;\n\tif (numLines === 1) {\n\t\tprintStaffLine(renderer, startx, endx, 6, klass, null, dy + renderer.lineThickness);\n\t\tfirstYLine = renderer.calcY(10);\n\t\tlastYLine = renderer.calcY(2);\n\t} else {\n\n\t\tfor (var i = numLines - 1; i >= 0; i--) {\n\t\t\tvar curpitch = (i + 1) * pitch;\n\t\t\tlastYLine = renderer.calcY(curpitch);\n\t\t\tif (firstYLine === 0) {\n\t\t\t\tfirstYLine = lastYLine;\n\t\t\t}\n\t\t\tprintStaffLine(renderer, startx, endx, curpitch, klass, null, dy + renderer.lineThickness);\n\t\t\tklass = undefined;\n\t\t}\n\t}\n\trenderer.paper.closeGroup();\n\treturn [firstYLine, lastYLine];\n}\n\nmodule.exports = printStaff;\n","var drawRelativeElement = require('./relative');\nvar renderText = require('./text');\n\nfunction drawTempo(renderer, params) {\n\tvar x = params.x;\n\tif (params.pitch === undefined)\n\t\twindow.console.error(\"Tempo Element y-coordinate not set.\");\n\n\t//var tempoGroup;\n\tparams.tempo.el_type = \"tempo\";\n\t//\trenderer.wrapInAbsElem(params.tempo, \"abcjs-tempo\", function () {\n\t//renderer.paper.openGroup({klass: renderer.controller.classes.generate(\"tempo wha\")});\n\t// The text is aligned with extra room for descenders but numbers look like they are a little too high, so bump it a little.\n\tvar descenderHeight = 2;\n\tvar y = renderer.calcY(params.pitch) + 2;\n\tvar text;\n\tvar size;\n\tif (params.tempo.preString) {\n\t\ttext = renderText(renderer, { x: x, y: y, text: params.tempo.preString, type: 'tempofont', klass: 'abcjs-tempo', anchor: \"start\", noClass: true, name: \"pre\" }, true);\n\t\tsize = renderer.controller.getTextSize.calc(params.tempo.preString, 'tempofont', 'tempo', text);\n\t\tvar preWidth = size.width;\n\t\tvar charWidth = preWidth / params.tempo.preString.length; // Just get some average number to increase the spacing.\n\t\tx += preWidth + charWidth;\n\t}\n\tif (params.note) {\n\t\tparams.note.setX(x);\n\t\tfor (var i = 0; i < params.note.children.length; i++)\n\t\t\tdrawRelativeElement(renderer, params.note.children[i], x);\n\t\tx += (params.note.w + 5);\n\t\tvar str = \"= \" + params.tempo.bpm;\n\t\ttext = renderText(renderer, { x: x, y: y, text: str, type: 'tempofont', klass: 'abcjs-tempo', anchor: \"start\", noClass: true, name: \"beats\" });\n\t\tsize = renderer.controller.getTextSize.calc(str, 'tempofont', 'tempo', text);\n\t\tvar postWidth = size.width;\n\t\tvar charWidth2 = postWidth / str.length; // Just get some average number to increase the spacing.\n\t\tx += postWidth + charWidth2;\n\t}\n\tif (params.tempo.postString) {\n\t\trenderText(renderer, { x: x, y: y, text: params.tempo.postString, type: 'tempofont', klass: 'abcjs-tempo', anchor: \"start\", noClass: true, name: \"post\" }, true);\n\t}\n\t//tempoGroup = renderer.paper.closeGroup();\n\t//\t});\n\t//return [tempoGroup];\n}\n\nmodule.exports = drawTempo;\n","var roundNumber = require(\"./round-number\");\n\nfunction renderText(renderer, params, alreadyInGroup) {\n\tvar y = params.y;\n\n\t// TODO-PER: Probably need to merge the regular text and rich text better. At the least, rich text loses the font box.\n\tif (params.phrases) {\n\t\t//richTextLine = function (phrases, x, y, klass, anchor, target)\n\t\tvar elem = renderer.paper.richTextLine(params.phrases, params.x, params.y, params.klass, params.anchor);\n\t\treturn elem;\n\t}\n\n\tif (params.lane) {\n\t\tvar laneMargin = params.dim.font.size * 0.25;\n\t\ty += (params.dim.font.size + laneMargin) * params.lane;\n\t}\n\n\tvar hash;\n\tif (params.dim) {\n\t\thash = params.dim;\n\t\thash.attr.class = params.klass;\n\t} else\n\t\thash = renderer.controller.getFontAndAttr.calc(params.type, params.klass);\n\tif (params.anchor)\n\t\thash.attr[\"text-anchor\"] = params.anchor;\n\tif (params['dominant-baseline'])\n\t\thash.attr[\"dominant-baseline\"] = params['dominant-baseline'];\n\thash.attr.x = params.x;\n\thash.attr.y = y;\n\tif (!params.centerVertically)\n\t\thash.attr.y += hash.font.size;\n\tif (params.type === 'debugfont') {\n\t\tconsole.log(\"Debug msg: \" + params.text);\n\t\thash.attr.stroke = \"#ff0000\";\n\t}\n\tif (params.cursor) {\n\t\thash.attr.cursor = params.cursor;\n\t}\n\n\tvar text = params.text.replace(/\\n\\n/g, \"\\n \\n\");\n\ttext = text.replace(/^\\n/, \"\\xA0\\n\");\n\n\tif (hash.font.box) {\n\t\tif (!alreadyInGroup)\n\t\t\trenderer.paper.openGroup({ klass: hash.attr['class'], fill: renderer.foregroundColor, \"data-name\": params.name });\n\t\tif (hash.attr[\"text-anchor\"] === \"end\") {\n\t\t\thash.attr.x -= hash.font.padding;\n\t\t} else if (hash.attr[\"text-anchor\"] === \"start\") {\n\t\t\thash.attr.x += hash.font.padding;\n\t\t}\n\t\thash.attr.y += hash.font.padding;\n\t\tdelete hash.attr['class'];\n\t}\n\tif (params.noClass)\n\t\tdelete hash.attr['class'];\n\thash.attr.x = roundNumber(hash.attr.x);\n\thash.attr.y = roundNumber(hash.attr.y);\n\tif (params.name)\n\t\thash.attr[\"data-name\"] = params.name;\n\tvar elem = renderer.paper.text(text, hash.attr);\n\tif (hash.font.box) {\n\t\tvar size = elem.getBBox();\n\n\t\tvar delta = 0;\n\t\tif (hash.attr[\"text-anchor\"] === \"middle\") {\n\t\t\tdelta = size.width / 2 + hash.font.padding;\n\t\t} else if (hash.attr[\"text-anchor\"] === \"end\") {\n\t\t\tdelta = size.width + hash.font.padding * 2;\n\t\t}\n\t\tvar deltaY = 0;\n\t\tif (params.centerVertically) {\n\t\t\tdeltaY = size.height - hash.font.padding;\n\t\t}\n\t\trenderer.paper.rect({ \"data-name\": \"box\", x: Math.round(params.x - delta), y: Math.round(y - deltaY), width: Math.round(size.width + hash.font.padding * 2), height: Math.round(size.height + hash.font.padding * 2) });\n\t\tif (!alreadyInGroup)\n\t\t\telem = renderer.paper.closeGroup();\n\t}\n\treturn elem;\n}\n\nmodule.exports = renderText;\n","var sprintf = require('./sprintf');\nvar roundNumber = require(\"./round-number\");\n\nfunction drawTie(renderer, params, linestartx, lineendx, selectables) {\n\tlayout(params, linestartx, lineendx);\n\n\tvar klass = '';\n\tif (params.anchor1) {\n\t\tklass += 'abcjs-start-m' + params.anchor1.parent.counters.measure + '-n' + params.anchor1.parent.counters.note;\n\t} else\n\t\tklass += 'abcjs-start-edge';\n\tif (params.anchor2) {\n\t\tklass += ' abcjs-end-m' + params.anchor2.parent.counters.measure + '-n' + params.anchor2.parent.counters.note;\n\t} else\n\t\tklass += ' abcjs-end-edge';\n\tif (params.hint)\n\t\tklass = \"abcjs-hint\";\n\tvar fudgeY = params.fixedY ? 1.5 : 0; // TODO-PER: This just compensates for drawArc, which contains too much knowledge of ties and slurs.\n\tvar el = drawArc(renderer, params.startX, params.endX, params.startY + fudgeY, params.endY + fudgeY, params.above, klass, params.isTie, params.dotted);\n\tvar startChar = -1\n\t// This gets the start and end points of the contents of the slur. We assume that the parenthesis are just to the outside of that.\n\tif (params.anchor1 && !params.isTie)\n\t\tstartChar = params.anchor1.parent.abcelem.startChar - 1\n\tvar endChar = -1\n\tif (params.anchor2 && !params.isTie)\n\t\tendChar = params.anchor2.parent.abcelem.endChar + 1\n\n\tselectables.wrapSvgEl({ el_type: \"slur\", startChar: startChar, endChar: endChar }, el);\n\treturn [el];\n}\n\n// TODO-PER: I think params part should have been done earlier in the layout pass.\nvar layout = function (params, lineStartX, lineEndX) {\n\t// We now have all of the input variables set, so we can figure out the start and ending x,y coordinates, and finalize the direction of the arc.\n\n\t// Ties and slurs are handled a little differently, so do calculations for them separately.\n\tif (!params.anchor1 || !params.anchor2)\n\t\tparams.isTie = true; // if the slur goes off the end of the line, then draw it like a tie\n\telse if (params.anchor1.pitch === params.anchor2.pitch && params.internalNotes.length === 0)\n\t\tparams.isTie = true;\n\telse\n\t\tparams.isTie = false;\n\n\tif (params.isTie) {\n\t\tparams.calcTieDirection();\n\t\tparams.calcX(lineStartX, lineEndX);\n\t\tparams.calcTieY();\n\n\t} else {\n\t\tparams.calcSlurDirection();\n\t\tparams.calcX(lineStartX, lineEndX);\n\t\tparams.calcSlurY();\n\t}\n\tparams.avoidCollisionAbove();\n};\n\nvar drawArc = function (renderer, x1, x2, pitch1, pitch2, above, klass, isTie, dotted) {\n\t// If it is a tie vs. a slur, draw it shallower.\n\tvar spacing = isTie ? 1.2 : 1.5;\n\n\tx1 = roundNumber(x1 + 6);\n\tx2 = roundNumber(x2 + 4);\n\tpitch1 = pitch1 + ((above) ? spacing : -spacing);\n\tpitch2 = pitch2 + ((above) ? spacing : -spacing);\n\tvar y1 = roundNumber(renderer.calcY(pitch1));\n\tvar y2 = roundNumber(renderer.calcY(pitch2));\n\n\t//unit direction vector\n\tvar dx = x2 - x1;\n\tvar dy = y2 - y1;\n\tvar norm = Math.sqrt(dx * dx + dy * dy);\n\tvar ux = dx / norm;\n\tvar uy = dy / norm;\n\n\tvar flatten = norm / 3.5;\n\tvar maxFlatten = isTie ? 10 : 25;  // If it is a tie vs. a slur, draw it shallower.\n\tvar curve = ((above) ? -1 : 1) * Math.min(maxFlatten, Math.max(4, flatten));\n\n\tvar controlx1 = roundNumber(x1 + flatten * ux - curve * uy);\n\tvar controly1 = roundNumber(y1 + flatten * uy + curve * ux);\n\tvar controlx2 = roundNumber(x2 - flatten * ux - curve * uy);\n\tvar controly2 = roundNumber(y2 - flatten * uy + curve * ux);\n\tvar thickness = 2;\n\tif (klass)\n\t\tklass += ' slur';\n\telse\n\t\tklass = 'slur';\n\tklass += isTie ? ' tie' : ' legato';\n\tvar ret;\n\tif (dotted) {\n\t\tklass += ' dotted';\n\t\tvar pathString2 = sprintf(\"M %f %f C %f %f %f %f %f %f\", x1, y1,\n\t\t\tcontrolx1, controly1, controlx2, controly2, x2, y2);\n\t\tret = renderer.paper.path({ path: pathString2, stroke: renderer.foregroundColor, fill: \"none\", 'stroke-dasharray': \"5 5\", 'class': renderer.controller.classes.generate(klass), \"data-name\": isTie ? \"tie\" : \"slur\" });\n\t} else {\n\t\tvar pathString = sprintf(\"M %f %f C %f %f %f %f %f %f C %f %f %f %f %f %f z\", x1, y1,\n\t\t\tcontrolx1, controly1, controlx2, controly2, x2, y2,\n\t\t\troundNumber(controlx2 - thickness * uy), roundNumber(controly2 + thickness * ux), roundNumber(controlx1 - thickness * uy), roundNumber(controly1 + thickness * ux), x1, y1);\n\t\tret = renderer.paper.path({ path: pathString, stroke: \"none\", fill: renderer.foregroundColor, 'class': renderer.controller.classes.generate(klass), \"data-name\": isTie ? \"tie\" : \"slur\" });\n\t}\n\n\treturn ret;\n};\n\nmodule.exports = drawTie;\n","var sprintf = require('./sprintf');\nvar renderText = require('./text');\nvar printPath = require('./print-path');\nvar roundNumber = require(\"./round-number\");\n\nfunction drawTriplet(renderer, params, selectables) {\n\trenderer.paper.openGroup({ klass: renderer.controller.classes.generate('triplet ' + params.durationClass), \"data-name\": \"triplet\" });\n\tif (!params.hasBeam) {\n\t\tdrawBracket(renderer, params.anchor1.x, params.startNote, params.anchor2.x + params.anchor2.w, params.endNote);\n\t}\n\t// HACK: adjust the position of \"3\". It is too high in all cases so we fudge it by subtracting 1 here.\n\trenderText(renderer, { x: params.xTextPos, y: renderer.calcY(params.yTextPos - 1), text: \"\" + params.number, type: 'tripletfont', anchor: \"middle\", centerVertically: true, noClass: true, name: \"\" + params.number }, true);\n\tvar g = renderer.paper.closeGroup();\n\tselectables.wrapSvgEl({ el_type: \"triplet\", startChar: -1, endChar: -1 }, g);\n\treturn g;\n}\n\nfunction drawLine(l, t, r, b) {\n\treturn sprintf(\"M %f %f L %f %f\", roundNumber(l), roundNumber(t), roundNumber(r), roundNumber(b));\n}\n\nfunction drawBracket(renderer, x1, y1, x2, y2) {\n\ty1 = renderer.calcY(y1);\n\ty2 = renderer.calcY(y2);\n\tvar bracketHeight = 5;\n\n\t// Draw vertical lines at the beginning and end\n\tvar pathString = \"\";\n\tpathString += drawLine(x1, y1, x1, y1 + bracketHeight);\n\tpathString += drawLine(x2, y2, x2, y2 + bracketHeight);\n\n\t// figure out midpoints to draw the broken line.\n\tvar midX = x1 + (x2 - x1) / 2;\n\t//var midY = y1 + (y2-y1)/2;\n\tvar gapWidth = 8;\n\tvar slope = (y2 - y1) / (x2 - x1);\n\tvar leftEndX = midX - gapWidth;\n\tvar leftEndY = y1 + (leftEndX - x1) * slope;\n\tpathString += drawLine(x1, y1, leftEndX, leftEndY);\n\tvar rightStartX = midX + gapWidth;\n\tvar rightStartY = y1 + (rightStartX - x1) * slope;\n\tpathString += drawLine(rightStartX, rightStartY, x2, y2);\n\tprintPath(renderer, { path: pathString, stroke: renderer.foregroundColor, \"data-name\": \"triplet-bracket\" });\n}\n\nmodule.exports = drawTriplet;\n","var drawGlissando = require('./glissando');\nvar drawCrescendo = require('./crescendo');\nvar drawDynamics = require('./dynamics');\nvar drawTriplet = require('./triplet');\nvar drawEnding = require('./ending');\nvar drawTie = require('./tie');\nvar drawBeam = require('./beam');\nvar renderText = require('./text');\nvar drawAbsolute = require('./absolute');\n\nfunction drawVoice(renderer, params, bartop, selectables, staffPos) {\n\tvar width = params.w - 1;\n\trenderer.staffbottom = params.staff.bottom;\n\tvar saveColor = renderer.foregroundColor\n\tif (params.color)\n\t\trenderer.foregroundColor = params.color\n\n\tif (params.header) { // print voice name\n\t\tvar textEl = renderText(renderer, { x: renderer.padding.left, y: renderer.calcY(params.headerPosition), text: params.header, type: 'voicefont', klass: 'staff-extra voice-name', anchor: 'start', centerVertically: true, name: \"voice-name\" }, true);\n\t\tselectables.wrapSvgEl({ el_type: \"voiceName\", startChar: -1, endChar: -1, text: params.header }, textEl);\n\t}\n\n\tvar i;\n\tvar child;\n\tvar foundNote = false;\n\tfor (i = 0; i < params.children.length; i++) {\n\t\tchild = params.children[i];\n\t\tif (child.type === 'note' || child.type === 'rest')\n\t\t\tfoundNote = true;\n\t\tvar justInitializedMeasureNumber = false;\n\t\tif (child.type !== 'staff-extra' && !renderer.controller.classes.isInMeasure()) {\n\t\t\trenderer.controller.classes.startMeasure();\n\t\t\tjustInitializedMeasureNumber = true;\n\t\t}\n\t\tif (params.staff.isTabStaff) {\n\t\t\tchild.invisible = false;\n\t\t\tif (child.type == 'bar') {\n\t\t\t\tif (child.abcelem.lastBar) {\n\t\t\t\t\tbartop = params.topLine;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdrawAbsolute(renderer, child, (params.barto || i === params.children.length - 1) ? bartop : 0, selectables, staffPos);\n\n\t\tif (child.type === 'note' || isNonSpacerRest(child))\n\t\t\trenderer.controller.classes.incrNote();\n\t\tif (child.type === 'bar' && !justInitializedMeasureNumber && foundNote) {\n\t\t\trenderer.controller.classes.incrMeasure();\n\t\t}\n\t}\n\n\trenderer.controller.classes.startMeasure();\n\n\tfor (i = 0; i < params.beams.length; i++) {\n\t\tvar beam = params.beams[i];\n\t\tif (beam === 'bar') {\n\t\t\trenderer.controller.classes.incrMeasure();\n\t\t} else\n\t\t\tdrawBeam(renderer, beam, selectables); // beams must be drawn first for proper printing of triplets, slurs and ties.\n\t}\n\n\trenderer.controller.classes.startMeasure();\n\tfor (i = 0; i < params.otherchildren.length; i++) {\n\t\tchild = params.otherchildren[i];\n\t\tif (child === 'bar') {\n\t\t\trenderer.controller.classes.incrMeasure();\n\t\t} else {\n\t\t\tswitch (child.type) {\n\t\t\t\tcase \"GlissandoElem\":\n\t\t\t\t\tchild.elemset = drawGlissando(renderer, child, selectables);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"CrescendoElem\":\n\t\t\t\t\tchild.elemset = drawCrescendo(renderer, child, selectables);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"DynamicDecoration\":\n\t\t\t\t\tchild.elemset = drawDynamics(renderer, child, selectables);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"TripletElem\":\n\t\t\t\t\tdrawTriplet(renderer, child, selectables);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"EndingElem\":\n\t\t\t\t\tchild.elemset = drawEnding(renderer, child, params.startx + 10, width, selectables);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"TieElem\":\n\t\t\t\t\tchild.elemset = drawTie(renderer, child, params.startx + 10, width, selectables);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.log(child);\n\t\t\t\t\tdrawAbsolute(renderer, child, params.startx + 10, width, selectables, staffPos);\n\t\t\t}\n\t\t}\n\t}\n\trenderer.foregroundColor = saveColor\n\n}\n\nfunction isNonSpacerRest(elem) {\n\tif (elem.type !== 'rest')\n\t\treturn false;\n\tif (elem.abcelem && elem.abcelem.rest && elem.abcelem.rest.type !== 'spacer')\n\t\treturn true;\n\treturn false;\n}\n\nmodule.exports = drawVoice;\n","//    abc_engraver_controller.js: Controls the engraving process of an ABCJS abstract syntax tree as produced by ABCJS/parse\n\n/*global Math */\n\nvar spacing = require('./helpers/spacing');\nvar AbstractEngraver = require('./creation/abstract-engraver');\nvar Renderer = require('./renderer');\nvar FreeText = require('./creation/elements/free-text');\nvar Separator = require('./creation/elements/separator');\nvar Subtitle = require('./creation/elements/subtitle');\nvar TopText = require('./creation/elements/top-text');\nvar BottomText = require('./creation/elements/bottom-text');\nvar setupSelection = require('./interactive/selection');\nvar layout = require('./layout/layout');\nvar Classes = require('./helpers/classes');\nvar GetFontAndAttr = require('./helpers/get-font-and-attr');\nvar GetTextSize = require('./helpers/get-text-size');\nvar draw = require('./draw/draw');\nvar tablatures = require('../api/abc_tablatures');\nvar findSelectableElement = require('./interactive/find-selectable-element');\n\n/**\n * @class\n * Controls the engraving process, from ABCJS Abstract Syntax Tree (ABCJS AST) to rendered score sheet\n *\n * Call engraveABC to run the process. This creates a graphelems ABCJS Abstract Engraving Structure (ABCJS AES) that can be accessed through this.staffgroups\n * this data structure is first laid out (giving the graphelems x and y coordinates) and then drawn onto the renderer\n * each ABCJS AES represents a single staffgroup - all elements that are not in a staffgroup are rendered directly by the controller\n *\n * elements in ABCJS AES know their \"source data\" in the ABCJS AST, and their \"target shape\"\n * in the renderer for highlighting purposes\n *\n */\nvar EngraverController = function (paper, params) {\n\tparams = params || {};\n\tthis.findSelectableElement = findSelectableElement;\n\tthis.oneSvgPerLine = params.oneSvgPerLine;\n\tthis.selectionColor = params.selectionColor;\n\tthis.dragColor = params.dragColor ? params.dragColor : params.selectionColor;\n\tthis.dragging = !!params.dragging;\n\tthis.selectTypes = params.selectTypes;\n\tthis.responsive = params.responsive;\n\tthis.space = 3 * spacing.SPACE;\n\tthis.initialClef = params.initialClef;\n\tthis.timeBasedLayout = params.timeBasedLayout;\n\tthis.expandToWidest = !!params.expandToWidest;\n\tthis.scale = params.scale ? parseFloat(params.scale) : 0;\n\tthis.classes = new Classes({ shouldAddClasses: params.add_classes });\n\tif (!(this.scale > 0.1))\n\t\tthis.scale = undefined;\n\n\tif (params.staffwidth) {\n\t\t// Note: Normally all measurements to the engraver are in POINTS. However, if a person is formatting for the\n\t\t// screen and directly inputting the width, then it is more logical to have the measurement in pixels.\n\t\tthis.staffwidthScreen = params.staffwidth;\n\t\tthis.staffwidthPrint = params.staffwidth;\n\t} else {\n\t\tthis.staffwidthScreen = 740; // TODO-PER: Not sure where this number comes from, but this is how it's always been.\n\t\tthis.staffwidthPrint = 680; // The number of pixels in 8.5\", after 1cm of margin has been removed.\n\t}\n\tthis.listeners = [];\n\tif (params.clickListener)\n\t\tthis.addSelectListener(params.clickListener);\n\n\tthis.renderer = new Renderer(paper);\n\tthis.renderer.setPaddingOverride(params);\n\tif (params.showDebug)\n\t\tthis.renderer.showDebug = params.showDebug;\n\tif (params.jazzchords)\n\t\tthis.jazzchords = params.jazzchords;\n\tif (params.accentAbove)\n\t\tthis.accentAbove = params.accentAbove;\n\tif (params.germanAlphabet)\n\t\tthis.germanAlphabet = params.germanAlphabet;\n\tif (params.lineThickness)\n\t\tthis.lineThickness = params.lineThickness;\n\tthis.renderer.controller = this; // TODO-GD needed for highlighting\n\tthis.renderer.foregroundColor = params.foregroundColor ? params.foregroundColor : \"currentColor\";\n\tif (params.ariaLabel !== undefined)\n\t\tthis.renderer.ariaLabel = params.ariaLabel;\n\tthis.renderer.minPadding = params.minPadding ? params.minPadding : 0;\n\n\tthis.reset();\n};\n\nEngraverController.prototype.reset = function () {\n\tthis.selected = [];\n\tthis.staffgroups = [];\n\tif (this.engraver)\n\t\tthis.engraver.reset();\n\tthis.engraver = null;\n\tthis.renderer.reset();\n\tthis.dragTarget = null;\n\tthis.dragIndex = -1;\n\tthis.dragMouseStart = { x: -1, y: -1 };\n\tthis.dragYStep = 0;\n\tif (this.lineThickness)\n\t\tthis.renderer.setLineThickness(this.lineThickness)\n};\n\n/**\n * run the engraving process\n */\nEngraverController.prototype.engraveABC = function (abctunes, tuneNumber, lineOffset) {\n\tif (abctunes[0] === undefined) {\n\t\tabctunes = [abctunes];\n\t}\n\tthis.reset();\n\n\tfor (var i = 0; i < abctunes.length; i++) {\n\t\tif (tuneNumber === undefined)\n\t\t\ttuneNumber = i;\n\t\tthis.getFontAndAttr = new GetFontAndAttr(abctunes[i].formatting, this.classes);\n\t\tthis.getTextSize = new GetTextSize(this.getFontAndAttr, this.renderer.paper);\n\t\tthis.engraveTune(abctunes[i], tuneNumber, lineOffset);\n\t}\n};\n\n/**\n * Some of the items on the page are not scaled, so adjust them in the opposite direction of scaling to cancel out the scaling.\n */\nEngraverController.prototype.adjustNonScaledItems = function (scale) {\n\tthis.width /= scale;\n\tthis.renderer.adjustNonScaledItems(scale);\n};\n\nEngraverController.prototype.getMeasureWidths = function (abcTune) {\n\tthis.reset();\n\tthis.getFontAndAttr = new GetFontAndAttr(abcTune.formatting, this.classes);\n\tthis.getTextSize = new GetTextSize(this.getFontAndAttr, this.renderer.paper);\n\tvar origJazzChords = this.jazzchords\n\n\tthis.setupTune(abcTune, 0);\n\tthis.constructTuneElements(abcTune);\n\t// layout() sets the x-coordinate of the abcTune element here:\n\t// abcTune.lines[0].staffGroup.voices[0].children[0].x\n\tlayout(this.renderer, abcTune, 0, this.space, this.timeBasedLayout);\n\n\tvar ret = [];\n\tvar section;\n\n\tvar needNewSection = true;\n\tfor (var i = 0; i < abcTune.lines.length; i++) {\n\t\tvar abcLine = abcTune.lines[i];\n\t\tif (abcLine.staff) {\n\t\t\tif (needNewSection) {\n\t\t\t\tsection = {\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tmeasureWidths: [],\n\t\t\t\t\t//height: this.renderer.padding.top + this.renderer.spacing.music + this.renderer.padding.bottom + 24, // the 24 is the empirical value added to the bottom of all tunes.\n\t\t\t\t\ttotal: 0\n\t\t\t\t};\n\t\t\t\tret.push(section);\n\t\t\t\tneedNewSection = false;\n\t\t\t}\n\t\t\t// At this point, the voices are laid out so that the bar lines are even with each other. So we just need to get the placement of the first voice.\n\t\t\tif (abcLine.staffGroup.voices.length > 0) {\n\t\t\t\tvar voice = abcLine.staffGroup.voices[0];\n\t\t\t\tvar foundNotStaffExtra = false;\n\t\t\t\tvar lastXPosition = 0;\n\t\t\t\tfor (var k = 0; k < voice.children.length; k++) {\n\t\t\t\t\tvar child = voice.children[k];\n\t\t\t\t\tif (!foundNotStaffExtra && !child.isClef && !child.isKeySig) {\n\t\t\t\t\t\tfoundNotStaffExtra = true;\n\t\t\t\t\t\tsection.left = child.x;\n\t\t\t\t\t\tlastXPosition = child.x;\n\t\t\t\t\t}\n\t\t\t\t\tif (child.type === 'bar') {\n\t\t\t\t\t\tsection.measureWidths.push(child.x - lastXPosition);\n\t\t\t\t\t\tsection.total += (child.x - lastXPosition);\n\t\t\t\t\t\tlastXPosition = child.x;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t//section.height += calcHeight(abcLine.staffGroup) * spacing.STEP;\n\t\t} else\n\t\t\tneedNewSection = true;\n\t}\n\tthis.jazzchords = origJazzChords\n\treturn ret;\n};\n\nEngraverController.prototype.setupTune = function (abcTune, tuneNumber) {\n\tthis.classes.reset();\n\n\tif (abcTune.formatting.jazzchords !== undefined)\n\t\tthis.jazzchords = abcTune.formatting.jazzchords;\n\tif (abcTune.formatting.accentAbove !== undefined)\n\t\tthis.accentAbove = abcTune.formatting.accentAbove;\n\n\tthis.renderer.newTune(abcTune);\n\tthis.engraver = new AbstractEngraver(this.getTextSize, tuneNumber, {\n\t\tbagpipes: abcTune.formatting.bagpipes,\n\t\tflatbeams: abcTune.formatting.flatbeams,\n\t\tgraceSlurs: abcTune.formatting.graceSlurs !== false, // undefined is the default, which is true\n\t\tpercmap: abcTune.formatting.percmap,\n\t\tinitialClef: this.initialClef,\n\t\tjazzchords: this.jazzchords,\n\t\ttimeBasedLayout: this.timeBasedLayout,\n\t\taccentAbove: this.accentAbove,\n\t\tgermanAlphabet: this.germanAlphabet\n\t});\n\tthis.engraver.setStemHeight(this.renderer.spacing.stemHeight);\n\tthis.engraver.measureLength = abcTune.getMeterFraction().num / abcTune.getMeterFraction().den;\n\tif (abcTune.formatting.staffwidth) {\n\t\tthis.width = abcTune.formatting.staffwidth * 1.33; // The width is expressed in pt; convert to px.\n\t} else {\n\t\tthis.width = this.renderer.isPrint ? this.staffwidthPrint : this.staffwidthScreen;\n\t}\n\n\tvar scale = abcTune.formatting.scale ? abcTune.formatting.scale : this.scale;\n\tif (this.responsive === \"resize\") // The resizing will mess with the scaling, so just don't do it explicitly.\n\t\tscale = undefined;\n\tif (scale === undefined) scale = this.renderer.isPrint ? 0.75 : 1;\n\tthis.adjustNonScaledItems(scale);\n\treturn scale;\n};\n\nEngraverController.prototype.constructTuneElements = function (abcTune) {\n\tabcTune.topText = new TopText(abcTune.metaText, abcTune.metaTextInfo, abcTune.formatting, abcTune.lines, this.width, this.renderer.isPrint, this.renderer.padding.left, this.renderer.spacing, this.classes.shouldAddClasses, this.getTextSize);\n\n\t// Generate the raw staff line data\n\tvar i;\n\tvar abcLine;\n\tvar hasPrintedTempo = false;\n\tvar hasSeenNonSubtitle = false;\n\tfor (i = 0; i < abcTune.lines.length; i++) {\n\t\tabcLine = abcTune.lines[i];\n\t\tif (abcLine.staff) {\n\t\t\thasSeenNonSubtitle = true;\n\t\t\tabcLine.staffGroup = this.engraver.createABCLine(abcLine.staff, !hasPrintedTempo ? abcTune.metaText.tempo : null, i);\n\t\t\thasPrintedTempo = true;\n\t\t} else if (abcLine.subtitle) {\n\t\t\t// If the subtitle is at the top, then it was already accounted for. So skip all subtitles until the first non-subtitle line.\n\t\t\tif (hasSeenNonSubtitle) {\n\t\t\t\tvar center = this.width / 2 + this.renderer.padding.left;\n\t\t\t\tabcLine.nonMusic = new Subtitle(this.renderer.spacing.subtitle, abcTune.formatting, abcLine.subtitle, center, this.renderer.padding.left, this.getTextSize);\n\t\t\t}\n\t\t} else if (abcLine.text !== undefined) {\n\t\t\thasSeenNonSubtitle = true;\n\t\t\tabcLine.nonMusic = new FreeText(abcLine.text, abcLine.vskip, this.getFontAndAttr, this.renderer.padding.left, this.width, this.getTextSize);\n\t\t} else if (abcLine.separator !== undefined && abcLine.separator.lineLength) {\n\t\t\thasSeenNonSubtitle = true;\n\t\t\tabcLine.nonMusic = new Separator(abcLine.separator.spaceAbove, abcLine.separator.lineLength, abcLine.separator.spaceBelow);\n\t\t}\n\t}\n\tabcTune.bottomText = new BottomText(abcTune.metaText, this.width, this.renderer.isPrint, this.renderer.padding.left, this.renderer.spacing, this.classes.shouldAddClasses, this.getTextSize);\n};\n\nEngraverController.prototype.engraveTune = function (abcTune, tuneNumber, lineOffset) {\n\n\tvar origJazzChords = this.jazzchords\n\tvar scale = this.setupTune(abcTune, tuneNumber);\n  \n\t// Create all of the element objects that will appear on the page.\n\tthis.constructTuneElements(abcTune);\n  \n\t//Set the top text now that we know the width\n  \n\t// Do all the positioning, both horizontally and vertically\n\tvar maxWidth = layout(this.renderer, abcTune, this.width, this.space, this.expandToWidest, this.timeBasedLayout);\n  \n\t//Set the top text now that we know the width\n\tif (this.expandToWidest && maxWidth > this.width + 1) {\n  \n\t\tabcTune.topText = new TopText(abcTune.metaText, abcTune.metaTextInfo, abcTune.formatting, abcTune.lines, maxWidth, this.renderer.isPrint, this.renderer.padding.left, this.renderer.spacing, this.classes.shouldAddClasses, this.getTextSize);\n  \n\t\tif ((abcTune.lines)&&(abcTune.lines.length > 0)){\n\t\t\tvar nlines = abcTune.lines.length;\n\n\t\t\tfor (var i=0;i<nlines;++i){\n\t\t\t\tvar entry = abcTune.lines[i];\n\t\t\t\tif (entry.nonMusic){\n\t\t\t\t\tif ((entry.nonMusic.rows) && (entry.nonMusic.rows.length > 0)){\n\t\t\t\t\t\tvar nRows = entry.nonMusic.rows.length;\n\t\t\t\t\t\tfor (var j=0;j<nRows;++j){\n\t\t\t\t\t\t\tvar thisRow = entry.nonMusic.rows[j];\n\t\t\t\t\t\t\t// Recenter the element if it's a subtitle or centered text \n\t\t\t\t\t\t\tif (thisRow.left){\n\t\t\t\t\t\t\t\tif (entry.subtitle){\n\t\t\t\t\t\t\t\t\tthisRow.left = (maxWidth/2) + this.renderer.padding.left;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tif ((entry.text)&&(entry.text.length>0)){\n\t\t\t\t\t\t\t\t\t\tif (entry.text[0].center){\n\t\t\t\t\t\t\t\t\t\t\tthisRow.left = (maxWidth/2) + this.renderer.padding.left;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Deal with tablature for staff\n\tif (abcTune.tablatures) {\n\t  tablatures.layoutTablatures(this.renderer, abcTune);\n\t}\n  \n\t// Do all the writing to the SVG\n\tvar ret = draw(this.renderer, this.classes, abcTune, this.width, maxWidth, this.responsive, scale, this.selectTypes, tuneNumber, lineOffset);\n\tthis.staffgroups = ret.staffgroups;\n\tthis.selectables = ret.selectables;\n\tif (this.oneSvgPerLine) {\n\t  var div = this.renderer.paper.svg.parentNode;\n\t  this.svgs = splitSvgIntoLines(this.renderer, div, abcTune.metaText.title, this.responsive, scale);\n\t} else {\n\t  this.svgs = [this.renderer.paper.svg];\n\t}\n\tsetupSelection(this, this.svgs);\n\t\n\tthis.jazzchords = origJazzChords\n};\n\nfunction splitSvgIntoLines(renderer, output, title, responsive, scale) {\n\t// Each line is a top level <g> in the svg. To split it into separate\n\t// svgs iterate through each of those and put them in a new svg. Since\n\t// they are placed absolutely, the viewBox needs to be manipulated to\n\t// get the correct vertical positioning.\n\t// We copy all the attributes from the original svg except for the aria-label\n\t// since we want that to include a count. And the height is now a fraction of the original svg.\n\tif (!title) title = \"Untitled\"\n\tvar source = output.querySelector(\"svg\")\n\tif (responsive === 'resize')\n\t\toutput.style.paddingBottom = ''\n\tvar style = source.querySelector(\"style\")\n\tvar width = responsive === 'resize' ? source.viewBox.baseVal.width : source.getAttribute(\"width\")\n\tvar sections = output.querySelectorAll(\"svg > g\") // each section is a line, or the top matter or the bottom matter, or text that has been inserted.\n\tvar nextTop = 0 // There are often gaps between the elements for spacing, so the actual top and height needs to be inferred.\n\tvar wrappers = [] // Create all the elements and place them at once because we use the current svg to get data. It would disappear after placing the first line.\n\tvar svgs = []\n\tfor (var i = 0; i < sections.length; i++) {\n\t\tvar section = sections[i]\n\t\tvar box = section.getBBox()\n\t\tvar gapBetweenLines = box.y - nextTop // take the margin into account\n\t\tvar height = box.height + gapBetweenLines;\n\t\tvar wrapper = document.createElement(\"div\");\n\t\tvar divStyles = \"overflow: hidden;\"\n\t\tif (responsive !== 'resize')\n\t\t\tdivStyles += \"height:\" + (height * scale) + \"px;\"\n\t\twrapper.setAttribute(\"style\", divStyles)\n\t\tvar svg = duplicateSvg(source)\n\t\tvar fullTitle = \"Sheet Music for \\\"\" + title + \"\\\" section \" + (i + 1)\n\t\tsvg.setAttribute(\"aria-label\", fullTitle)\n\t\tif (responsive !== 'resize')\n\t\t\tsvg.setAttribute(\"height\", height)\n\t\tif (responsive === 'resize')\n\t\t\tsvg.style.position = ''\n\t\t// TODO-PER: Hack! Not sure why this is needed.\n\t\tvar viewBoxHeight = renderer.firefox112 ? height+1 : height\n\t\tsvg.setAttribute(\"viewBox\", \"0 \" + nextTop + \" \" + width + \" \" + viewBoxHeight)\n\t\tsvg.appendChild(style.cloneNode(true))\n\t\tvar titleEl = document.createElement(\"title\")\n\t\ttitleEl.innerText = fullTitle\n\t\tsvg.appendChild(titleEl)\n\t\tsvg.appendChild(section)\n\n\t\twrapper.appendChild(svg)\n\t\tsvgs.push(svg)\n\t\toutput.appendChild(wrapper)\n\t\t//wrappers.push(wrapper)\n\t\tnextTop = box.y + box.height\n\t}\n\t// for (i = 0; i < wrappers.length; i++)\n\t// \toutput.appendChild(wrappers[i])\n\toutput.removeChild(source)\n\treturn svgs;\n}\n\nfunction duplicateSvg(source) {\n\tvar svgNS = \"http://www.w3.org/2000/svg\";\n\tvar svg = document.createElementNS(svgNS, \"svg\");\n\tfor (var i = 0; i < source.attributes.length; i++) {\n\t\tvar attr = source.attributes[i];\n\t\tif (attr.name !== \"height\" && attr.name != \"aria-label\")\n\t\t\tsvg.setAttribute(attr.name, attr.value)\n\t}\n\treturn svg;\n}\n\nEngraverController.prototype.getDim = function (historyEl) {\n\t// Get the dimensions on demand because the getBBox call is expensive.\n\tif (!historyEl.dim) {\n\t\tvar box = historyEl.svgEl.getBBox();\n\t\thistoryEl.dim = { left: Math.round(box.x), top: Math.round(box.y), right: Math.round(box.x + box.width), bottom: Math.round(box.y + box.height) };\n\t}\n\treturn historyEl.dim;\n};\n\nEngraverController.prototype.addSelectListener = function (clickListener) {\n\tthis.listeners[this.listeners.length] = clickListener;\n};\n\nmodule.exports = EngraverController;\n","var Classes = function Classes(options) {\n\tthis.shouldAddClasses = options.shouldAddClasses;\n\tthis.reset();\n}\n\nClasses.prototype.reset = function () {\n\tthis.lineNumber = null;\n\tthis.voiceNumber = null;\n\tthis.measureNumber = null;\n\tthis.measureTotalPerLine = [];\n\tthis.noteNumber = null;\n}\n\nClasses.prototype.incrLine = function () {\n\tif (this.lineNumber === null)\n\t\tthis.lineNumber = 0;\n\telse\n\t\tthis.lineNumber++;\n\tthis.voiceNumber = null;\n\tthis.measureNumber = null;\n\tthis.noteNumber = null;\n};\n\nClasses.prototype.incrVoice = function () {\n\tif (this.voiceNumber === null)\n\t\tthis.voiceNumber = 0;\n\telse\n\t\tthis.voiceNumber++;\n\tthis.measureNumber = null;\n\tthis.noteNumber = null;\n};\n\nClasses.prototype.isInMeasure = function () {\n\treturn this.measureNumber !== null;\n};\n\nClasses.prototype.newMeasure = function () {\n\tif (this.measureNumber)\n\t\tthis.measureTotalPerLine[this.lineNumber] = this.measureNumber;\n\tthis.measureNumber = null;\n\tthis.noteNumber = null;\n};\n\nClasses.prototype.startMeasure = function () {\n\tthis.measureNumber = 0;\n\tthis.noteNumber = 0;\n};\n\nClasses.prototype.incrMeasure = function () {\n\tthis.measureNumber++;\n\tthis.noteNumber = 0;\n};\n\nClasses.prototype.incrNote = function () {\n\tthis.noteNumber++;\n};\n\nClasses.prototype.measureTotal = function () {\n\tvar total = 0;\n\tfor (var i = 0; i < this.lineNumber; i++)\n\t\ttotal += this.measureTotalPerLine[i] ? this.measureTotalPerLine[i] : 0; // This can be null when non-music things are present.\n\tif (this.measureNumber)\n\t\ttotal += this.measureNumber;\n\treturn total;\n};\n\nClasses.prototype.getCurrent = function (c) {\n\treturn {\n\t\tline: this.lineNumber,\n\t\tmeasure: this.measureNumber,\n\t\tmeasureTotal: this.measureTotal(),\n\t\tvoice: this.voiceNumber,\n\t\tnote: this.noteNumber\n\t};\n};\n\nClasses.prototype.generate = function (c) {\n\tif (!this.shouldAddClasses)\n\t\treturn \"\";\n\tvar ret = [];\n\tif (c && c.length > 0) ret.push(c);\n\tif (c === \"abcjs-tab-number\") // TODO-PER-HACK! straighten out the tablature\n\t\treturn ret.join(' ')\n\tif (c === \"text instrument-name\")\n\t\treturn \"abcjs-text abcjs-instrument-name\"\n\tif (this.lineNumber !== null) ret.push(\"l\" + this.lineNumber);\n\tif (this.measureNumber !== null) ret.push(\"m\" + this.measureNumber);\n\tif (this.measureNumber !== null) ret.push(\"mm\" + this.measureTotal()); // measureNumber is null between measures so this is still the test for measureTotal\n\tif (this.voiceNumber !== null) ret.push(\"v\" + this.voiceNumber);\n\tif (c && (c.indexOf('note') >= 0 || c.indexOf('rest') >= 0 || c.indexOf('lyric') >= 0) && this.noteNumber !== null) ret.push(\"n\" + this.noteNumber);\n\t// add a prefix to all classes that abcjs adds.\n\tif (ret.length > 0) {\n\t\tret = ret.join(' '); // Some strings are compound classes - that is, specify more than one class in a string.\n\t\tret = ret.split(' ');\n\t\tfor (var i = 0; i < ret.length; i++) {\n\t\t\tif (ret[i].indexOf('abcjs-') !== 0 && ret[i].length > 0) // if the prefix doesn't already exist and the class is not blank.\n\t\t\t\tret[i] = 'abcjs-' + ret[i];\n\t\t}\n\t}\n\treturn ret.join(' ');\n};\n\n\nmodule.exports = Classes;\n","var GetFontAndAttr = function GetFontAndAttr(formatting, classes) {\n\tthis.formatting = formatting;\n\tthis.classes = classes;\n};\n\nGetFontAndAttr.prototype.updateFonts = function (fontOverrides) {\n\tif (fontOverrides.gchordfont)\n\t\tthis.formatting.gchordfont = fontOverrides.gchordfont;\n\tif (fontOverrides.tripletfont)\n\t\tthis.formatting.tripletfont = fontOverrides.tripletfont;\n\tif (fontOverrides.annotationfont)\n\t\tthis.formatting.annotationfont = fontOverrides.annotationfont;\n\tif (fontOverrides.vocalfont)\n\t\tthis.formatting.vocalfont = fontOverrides.vocalfont;\n};\n\nGetFontAndAttr.prototype.getFamily = function (type) {\n\tif (type[0] === '\"' && type[type.length-1] === '\"') {\n\t\treturn type.substring(1, type.length-1)\n\t}\n\treturn type\n};\n\nGetFontAndAttr.prototype.calc = function (type, klass) {\n\tvar font;\n\tif (typeof type === 'string') {\n\t\tfont = this.formatting[type];\n\t\t// Raphael deliberately changes the font units to pixels for some reason, so we need to change points to pixels here.\n\t\tif (font)\n\t\t\tfont = { face: font.face, size: Math.round(font.size * 4 / 3), decoration: font.decoration, style: font.style, weight: font.weight, box: font.box };\n\t\telse\n\t\t\tfont = { face: \"Arial\", size: Math.round(12 * 4 / 3), decoration: \"underline\", style: \"normal\", weight: \"normal\" };\n\t} else\n\t\tfont = { face: type.face, size: Math.round(type.size * 4 / 3), decoration: type.decoration, style: type.style, weight: type.weight, box: type.box };\n\tvar paddingPercent = this.formatting.fontboxpadding ? this.formatting.fontboxpadding : 0.1\n\tfont.padding = font.size * paddingPercent;\n\n\tvar attr = {\n\t\t\"font-size\": font.size, 'font-style': font.style,\n\t\t\"font-family\": this.getFamily(font.face), 'font-weight': font.weight, 'text-decoration': font.decoration,\n\t\t'class': this.classes.generate(klass)\n\t};\n\treturn { font: font, attr: attr };\n};\n\nmodule.exports = GetFontAndAttr;\n","var GetTextSize = function GetTextSize(getFontAndAttr, svg) {\n\tthis.getFontAndAttr = getFontAndAttr;\n\tthis.svg = svg;\n};\n\nGetTextSize.prototype.updateFonts = function (fontOverrides) {\n\tthis.getFontAndAttr.updateFonts(fontOverrides);\n};\n\nGetTextSize.prototype.attr = function (type, klass) {\n\treturn this.getFontAndAttr.calc(type, klass);\n};\n\nGetTextSize.prototype.getFamily = function (type) {\n\tif (type[0] === '\"' && type[type.length-1] === '\"') {\n\t\treturn type.substring(1, type.length-1)\n\t}\n\treturn type\n};\n\nGetTextSize.prototype.calc = function (text, type, klass, el) {\n\tvar hash;\n\t// This can be passed in either a string or a font. If it is a string it names one of the standard fonts.\n\tif (typeof type === 'string')\n\t\thash = this.attr(type, klass);\n\telse {\n\t\thash = {\n\t\t\tfont: {\n\t\t\t\tface: type.face,\n\t\t\t\tsize: type.size,\n\t\t\t\tdecoration: type.decoration,\n\t\t\t\tstyle: type.style,\n\t\t\t\tweight: type.weight\n\t\t\t},\n\t\t\tattr: {\n\t\t\t\t\"font-size\": type.size,\n\t\t\t\t\"font-style\": type.style,\n\t\t\t\t\"font-family\": this.getFamily(type.face),\n\t\t\t\t\"font-weight\": type.weight,\n\t\t\t\t\"text-decoration\": type.decoration,\n\t\t\t\t\"class\": this.getFontAndAttr.classes.generate(klass)\n\t\t\t}\n\t\t}\n\t}\n\tvar size = this.svg.getTextSize(text, hash.attr, el);\n\tif (hash.font.box) {\n\t\t// Add padding and an equal margin to each side.\n\t\treturn { height: size.height + hash.font.padding * 4, width: size.width + hash.font.padding * 4 };\n\t}\n\treturn size;\n};\n\nGetTextSize.prototype.baselineToCenter = function (text, type, klass, index, total) {\n\t// This is for the case where SVG wants to use the baseline of the first line as the Y coordinate.\n\t// If there are multiple lines of text or there is an array of text then that will not be centered so this adjusts it.\n\tvar height = this.calc(text, type, klass).height;\n\tvar fontHeight = this.attr(type, klass).font.size;\n\n\treturn height * 0.5 + (total - index - 2) * fontHeight;\n};\n\n\nmodule.exports = GetTextSize;\n","var setClass = function (elemset, addClass, removeClass, color) {\n\tif (!elemset)\n\t\treturn;\n\tfor (var i = 0; i < elemset.length; i++) {\n\t\tvar el = elemset[i];\n\t\tvar attr = el.getAttribute(\"highlight\");\n\t\tif (!attr) attr = \"fill\";\n\t\tel.setAttribute(attr, color);\n\t\tvar kls = el.getAttribute(\"class\");\n\t\tif (!kls) kls = \"\";\n\t\tkls = kls.replace(removeClass, \"\");\n\t\tkls = kls.replace(addClass, \"\");\n\t\tif (addClass.length > 0) {\n\t\t\tif (kls.length > 0 && kls[kls.length - 1] !== ' ') kls += \" \";\n\t\t\tkls += addClass;\n\t\t}\n\t\tel.setAttribute(\"class\", kls);\n\t}\n};\n\nmodule.exports = setClass;\n","var spacing = {};\n\nspacing.FONTEM = 360;\nspacing.FONTSIZE = 30;\nspacing.STEP = spacing.FONTSIZE * 93 / 720;\nspacing.SPACE = 10;\nspacing.TOPNOTE = 15;\nspacing.STAVEHEIGHT = 100;\nspacing.INDENT = 50;\n\nmodule.exports = spacing;\n","function findNumber(klass, match, target, name) {\n\tif (klass.indexOf(match) === 0) {\n\t\tvar value = klass.replace(match, '');\n\t\tvar num = parseInt(value, 10);\n\t\tif ('' + num === value)\n\t\t\ttarget[name] = num;\n\t}\n}\n\nfunction createAnalysis(target, ev) {\n\tvar classes = [];\n\tif (target.absEl.elemset) {\n\t\tvar classObj = {};\n\t\tfor (var j = 0; j < target.absEl.elemset.length; j++) {\n\t\t\tvar es = target.absEl.elemset[j];\n\t\t\tif (es) {\n\t\t\t\tvar klass = es.getAttribute(\"class\").split(' ');\n\t\t\t\tfor (var k = 0; k < klass.length; k++)\n\t\t\t\t\tclassObj[klass[k]] = true;\n\t\t\t}\n\t\t}\n\t\tfor (var kk = 0; kk < Object.keys(classObj).length; kk++)\n\t\t\tclasses.push(Object.keys(classObj)[kk]);\n\t}\n\tvar analysis = {};\n\tfor (var ii = 0; ii < classes.length; ii++) {\n\t\tfindNumber(classes[ii], \"abcjs-v\", analysis, \"voice\");\n\t\tfindNumber(classes[ii], \"abcjs-l\", analysis, \"line\");\n\t\tfindNumber(classes[ii], \"abcjs-m\", analysis, \"measure\");\n\t}\n\tif (target.staffPos)\n\t\tanalysis.staffPos = target.staffPos;\n\tvar closest = ev.target;\n\twhile (closest && closest.dataset && !closest.dataset.name && closest.tagName.toLowerCase() !== 'svg')\n\t\tclosest = closest.parentNode;\n\tvar parent = ev.target;\n\twhile (parent && parent.dataset && !parent.dataset.index && parent.tagName.toLowerCase() !== 'svg')\n\t\tparent = parent.parentNode;\n\tif (parent && parent.dataset) {\n\t\tanalysis.name = parent.dataset.name;\n\t\tanalysis.clickedName = closest.dataset.name;\n\t\tanalysis.parentClasses = parent.classList;\n\t}\n\tif (closest && closest.classList)\n\t\tanalysis.clickedClasses = closest.classList;\n\tanalysis.selectableElement = target.svgEl;\n\treturn {classes: classes, analysis: analysis}\n}\n\nmodule.exports = createAnalysis;\n","var createAnalysis = require('./create-analysis');\n\nfunction findSelectableElement(event) {\n\tvar selectable = event\n\twhile (selectable && selectable.attributes && selectable.tagName.toLowerCase() !== 'svg' && !selectable.attributes.selectable) {\n\t\tselectable = selectable.parentNode\n\t}\n\tif (selectable && selectable.attributes && selectable.attributes.selectable) {\n\t\tvar index = selectable.attributes['data-index'].nodeValue\n\t\tif (index) {\n\t\t\tindex = parseInt(index, 10)\n\t\t\tif (index >= 0 && index < this.selectables.length) {\n\t\t\t\tvar element = this.selectables[index]\n\t\t\t\tvar ret = createAnalysis(element, event)\n\t\t\t\tret.index = index\n\t\t\t\tret.element = element\n\t\t\t\treturn ret\n\t\t\t}\n\t\t}\n\t}\n\treturn null\n}\n\nmodule.exports = findSelectableElement;\n","var setClass = require('../helpers/set-class');\n\nvar highlight = function (klass, color) {\n\tif (klass === undefined)\n\t\tklass = \"abcjs-note_selected\";\n\tif (color === undefined)\n\t\tcolor = \"#ff0000\";\n\tsetClass(this.elemset, klass, \"\", color);\n};\n\nmodule.exports = highlight;\n","var spacing = require('../helpers/spacing');\nvar createAnalysis = require('./create-analysis');\n\nfunction setupSelection(engraver, svgs) {\n\tengraver.rangeHighlight = rangeHighlight;\n\tif (engraver.dragging) {\n\t\tfor (var h = 0; h < engraver.selectables.length; h++) {\n\t\t\tvar hist = engraver.selectables[h];\n\t\t\tif (hist.svgEl.getAttribute(\"selectable\") === \"true\") {\n\t\t\t\thist.svgEl.setAttribute(\"tabindex\", 0);\n\t\t\t\thist.svgEl.setAttribute(\"data-index\", h);\n\t\t\t\thist.svgEl.addEventListener(\"keydown\", keyboardDown.bind(engraver));\n\t\t\t\thist.svgEl.addEventListener(\"keyup\", keyboardSelection.bind(engraver));\n\t\t\t\thist.svgEl.addEventListener(\"focus\", elementFocused.bind(engraver));\n\t\t\t}\n\t\t}\n\t}\n\tfor (var i = 0; i < svgs.length; i++) {\n\t\tsvgs[i].addEventListener('touchstart', mouseDown.bind(engraver), { passive: true });\n\t\tsvgs[i].addEventListener('touchmove', mouseMove.bind(engraver), { passive: true });\n\t\tsvgs[i].addEventListener('touchend', mouseUp.bind(engraver), { passive: true });\n\t\tsvgs[i].addEventListener('mousedown', mouseDown.bind(engraver));\n\t\tsvgs[i].addEventListener('mousemove', mouseMove.bind(engraver));\n\t\tsvgs[i].addEventListener('mouseup', mouseUp.bind(engraver));\n\t}\n}\n\nfunction getCoord(ev) {\n\tvar scaleX = 1;\n\tvar scaleY = 1;\n\tvar svg = ev.target.closest('svg')\n\tvar yOffset = 0\n\n\t// when renderer.options.responsive === 'resize' the click coords are in relation to the HTML\n\t// element, we need to convert to the SVG viewBox coords\n\tif (svg && svg.viewBox && svg.viewBox.baseVal) { // Firefox passes null to this when no viewBox is given\n\t\t// Chrome makes these values null when no viewBox is given.\n\t\tif (svg.viewBox.baseVal.width !== 0)\n\t\t\tscaleX = svg.viewBox.baseVal.width / svg.clientWidth\n\t\tif (svg.viewBox.baseVal.height !== 0)\n\t\t\tscaleY = svg.viewBox.baseVal.height / svg.clientHeight\n\t\tyOffset = svg.viewBox.baseVal.y\n\t}\n\n\tvar svgClicked = ev.target && ev.target.tagName === \"svg\";\n\tvar x;\n\tvar y;\n\tif (svgClicked) {\n\t\tx = ev.offsetX;\n\t\ty = ev.offsetY;\n\t} else {\n\t\tx = ev.layerX;\n\t\ty = ev.layerY;\n\t}\n\n\tx = x * scaleX;\n\ty = y * scaleY;\n\t//console.log(x, y)\n\n\treturn [x, y + yOffset];\n}\n\nfunction elementFocused(ev) {\n\t// If there had been another element focused and is being dragged, then report that before setting the new element up.\n\tif (this.dragMechanism === \"keyboard\" && this.dragYStep !== 0 && this.dragTarget)\n\t\tnotifySelect.bind(this)(this.dragTarget, this.dragYStep, this.selectables.length, this.dragIndex, ev);\n\n\tthis.dragYStep = 0;\n}\n\nfunction keyboardDown(ev) {\n\t// Swallow the up and down arrow events - they will be used for dragging with the keyboard\n\tswitch (ev.keyCode) {\n\t\tcase 38:\n\t\tcase 40:\n\t\t\tev.preventDefault();\n\t}\n}\n\nfunction keyboardSelection(ev) {\n\t// \"this\" is the EngraverController because of the bind(this) when setting the event listener.\n\tvar handled = false;\n\tvar index = ev.target.dataset.index;\n\tswitch (ev.keyCode) {\n\t\tcase 13:\n\t\tcase 32:\n\t\t\thandled = true;\n\t\t\tthis.dragTarget = this.selectables[index];\n\t\t\tthis.dragIndex = index;\n\t\t\tthis.dragMechanism = \"keyboard\";\n\t\t\tmouseUp.bind(this)(ev);\n\t\t\tbreak;\n\t\tcase 38: // arrow up\n\t\t\thandled = true;\n\t\t\tthis.dragTarget = this.selectables[index];\n\t\t\tthis.dragIndex = index;\n\t\t\tif (this.dragTarget && this.dragTarget.isDraggable) {\n\t\t\t\tif (this.dragging && this.dragTarget.isDraggable)\n\t\t\t\t\tthis.dragTarget.absEl.highlight(undefined, this.dragColor);\n\t\t\t\tthis.dragYStep--;\n\t\t\t\tthis.dragTarget.svgEl.setAttribute(\"transform\", \"translate(0,\" + (this.dragYStep * spacing.STEP) + \")\");\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 40: // arrow down\n\t\t\thandled = true;\n\t\t\tthis.dragTarget = this.selectables[index];\n\t\t\tthis.dragIndex = index;\n\t\t\tthis.dragMechanism = \"keyboard\";\n\t\t\tif (this.dragTarget && this.dragTarget.isDraggable) {\n\t\t\t\tif (this.dragging && this.dragTarget.isDraggable)\n\t\t\t\t\tthis.dragTarget.absEl.highlight(undefined, this.dragColor);\n\t\t\t\tthis.dragYStep++;\n\t\t\t\tthis.dragTarget.svgEl.setAttribute(\"transform\", \"translate(0,\" + (this.dragYStep * spacing.STEP) + \")\");\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 9: // tab\n\t\t\t// This is losing focus - if there had been dragging, then do the callback\n\t\t\tif (this.dragYStep !== 0) {\n\t\t\t\tmouseUp.bind(this)(ev);\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\t//console.log(ev);\n\t\t\tbreak;\n\t}\n\tif (handled)\n\t\tev.preventDefault();\n}\n\nfunction findElementInHistory(selectables, el) {\n\tif (!el)\n\t\treturn -1;\n\tfor (var i = 0; i < selectables.length; i++) {\n\t\tif (el.dataset.index === selectables[i].svgEl.dataset.index)\n\t\t\treturn i;\n\t}\n\treturn -1;\n}\n\nfunction findElementByCoord(self, x, y) {\n\tvar minDistance = 9999999;\n\tvar closestIndex = -1;\n\tfor (var i = 0; i < self.selectables.length && minDistance > 0; i++) {\n\t\tvar el = self.selectables[i];\n\n\t\tself.getDim(el);\n\t\tif (el.dim.left < x && el.dim.right > x && el.dim.top < y && el.dim.bottom > y) {\n\t\t\t// See if it is a direct hit on an element - if so, definitely take it (there are no overlapping elements)\n\t\t\tclosestIndex = i;\n\t\t\tminDistance = 0;\n\t\t} else if (el.dim.top < y && el.dim.bottom > y) {\n\t\t\t// See if it is the same vertical as the element. Then the distance is the x difference\n\t\t\tvar horiz = Math.min(Math.abs(el.dim.left - x), Math.abs(el.dim.right - x));\n\t\t\tif (horiz < minDistance) {\n\t\t\t\tminDistance = horiz;\n\t\t\t\tclosestIndex = i;\n\t\t\t}\n\t\t} else if (el.dim.left < x && el.dim.right > x) {\n\t\t\t// See if it is the same horizontal as the element. Then the distance is the y difference\n\t\t\tvar vert = Math.min(Math.abs(el.dim.top - y), Math.abs(el.dim.bottom - y));\n\t\t\tif (vert < minDistance) {\n\t\t\t\tminDistance = vert;\n\t\t\t\tclosestIndex = i;\n\t\t\t}\n\t\t} else {\n\t\t\t// figure out the distance to this element.\n\t\t\tvar dx = Math.abs(x - el.dim.left) > Math.abs(x - el.dim.right) ? Math.abs(x - el.dim.right) : Math.abs(x - el.dim.left);\n\t\t\tvar dy = Math.abs(y - el.dim.top) > Math.abs(y - el.dim.bottom) ? Math.abs(y - el.dim.bottom) : Math.abs(y - el.dim.top);\n\t\t\tvar hypotenuse = Math.sqrt(dx * dx + dy * dy);\n\t\t\tif (hypotenuse < minDistance) {\n\t\t\t\tminDistance = hypotenuse;\n\t\t\t\tclosestIndex = i;\n\t\t\t}\n\t\t}\n\t}\n\treturn (closestIndex >= 0 && minDistance <= 12) ? closestIndex : -1;\n}\n\nfunction getBestMatchCoordinates(dim, ev, scale) {\n\t// Different browsers have conflicting meanings for the coordinates that are returned.\n\t// If the item we want is clicked on directly, then we will just see what is the best match.\n\t// This seems like less of a hack than browser sniffing.\n\tif (dim.x <= ev.offsetX && dim.x + dim.width >= ev.offsetX &&\n\t\tdim.y <= ev.offsetY && dim.y + dim.height >= ev.offsetY)\n\t\treturn [ev.offsetX, ev.offsetY];\n\t// Firefox returns a weird value for offset, but layer is correct.\n\t// Safari and Chrome return the correct value for offset, but layer is multiplied by the scale (that is, if it were rendered with { scale: 2 })\n\t// For instance (if scale is 2):\n\t// Firefox: { offsetY: 5, layerY: 335 }\n\t// Others: {offsetY: 335, layerY: 670} (there could be a little rounding, so the number might not be exactly 2x)\n\t// So, if layerY/scale is approx. offsetY, then use offsetY, otherwise use layerY\n\tvar epsilon = Math.abs(ev.layerY / scale - ev.offsetY);\n\tif (epsilon < 3)\n\t\treturn [ev.offsetX, ev.offsetY];\n\telse\n\t\treturn [ev.layerX, ev.layerY];\n}\n\nfunction getTarget(target) {\n\t// This searches up the dom for the first item containing the attribute \"selectable\", or stopping at the SVG.\n\tif (!target)\n\t\treturn null;\n\tif (target.tagName === \"svg\")\n\t\treturn target;\n\n\tif (!target.getAttribute)\n\t\treturn null;\t\n\tvar found = target.getAttribute(\"selectable\");\n\twhile (!found) {\n\t\tif (!target.parentElement)\n\t\t\tfound = true;\n\t\telse {\n\t\t\ttarget = target.parentElement;\n\t\t\tif (target.tagName === \"svg\")\n\t\t\t\tfound = true;\n\t\t\telse\n\t\t\t\tfound = target.getAttribute(\"selectable\");\n\t\t}\n\t}\n\treturn target;\n}\n\nfunction getMousePosition(self, ev) {\n\t// if the user clicked exactly on an element that we're interested in, then we already have the answer.\n\t// This is more reliable than the calculations because firefox returns different coords for offsetX, offsetY\n\tvar x;\n\tvar y;\n\tvar box;\n\tvar clickedOn = findElementInHistory(self.selectables, getTarget(ev.target));\n\tif (clickedOn >= 0) {\n\t\t// There was a direct hit on an element.\n\t\tbox = getBestMatchCoordinates(self.selectables[clickedOn].svgEl.getBBox(), ev, self.scale);\n\t\tx = box[0];\n\t\ty = box[1];\n\t\t//console.log(\"clicked on\", clickedOn, x, y, self.selectables[clickedOn].svgEl.getBBox(), ev.target.getBBox());\n\t} else {\n\t\t// See if they clicked close to an element.\n\t\tbox = getCoord(ev);\n\t\tx = box[0];\n\t\ty = box[1];\n\t\tclickedOn = findElementByCoord(self, x, y);\n\t\t//console.log(\"clicked near\", clickedOn, x, y, printEl(ev.target));\n\t}\n\treturn { x: x, y: y, clickedOn: clickedOn };\n}\n\nfunction attachMissingTouchEventAttributes(touchEv) {\n\tif (!touchEv || !touchEv.target || !touchEv.touches || touchEv.touches.length < 1)\n\t\treturn\n\tvar rect = touchEv.target.getBoundingClientRect();\n\tvar offsetX = touchEv.touches[0].pageX - rect.left;\n\tvar offsetY = touchEv.touches[0].pageY - rect.top;\n\n\ttouchEv.touches[0].offsetX = offsetX;\n\ttouchEv.touches[0].offsetY = offsetY;\n\n\ttouchEv.touches[0].layerX = touchEv.touches[0].pageX;\n\ttouchEv.touches[0].layerY = touchEv.touches[0].pageY;\n}\n\nfunction mouseDown(ev) {\n\t// \"this\" is the EngraverController because of the bind(this) when setting the event listener.\n\tvar _ev = ev;\n\tif (ev.type === 'touchstart') {\n\t\tattachMissingTouchEventAttributes(ev);\n\t\tif (ev.touches.length > 0)\n\t\t\t_ev = ev.touches[0];\n\t}\n\n\tvar positioning = getMousePosition(this, _ev);\n\n\t// Only start dragging if the user clicked close enough to an element and clicked with the main mouse button.\n\tif (positioning.clickedOn >= 0 && (ev.type === 'touchstart' || ev.button === 0) && this.selectables[positioning.clickedOn]) {\n\t\tthis.dragTarget = this.selectables[positioning.clickedOn];\n\t\tthis.dragIndex = positioning.clickedOn;\n\t\tthis.dragMechanism = \"mouse\";\n\t\tthis.dragMouseStart = { x: positioning.x, y: positioning.y };\n\t\tif (this.dragging && this.dragTarget.isDraggable) {\n\t\t\taddGlobalClass(this.renderer.paper, \"abcjs-dragging-in-progress\");\n\t\t\tthis.dragTarget.absEl.highlight(undefined, this.dragColor);\n\t\t}\n\t}\n}\n\nfunction mouseMove(ev) {\n\tvar _ev = ev;\n\tif (ev.type === 'touchmove') {\n\t\tattachMissingTouchEventAttributes(ev);\n\t\tif (ev.touches.length > 0)\n\t\t\t_ev = ev.touches[0];\n\t}\n\tthis.lastTouchMove = ev;\n\t// \"this\" is the EngraverController because of the bind(this) when setting the event listener.\n\n\tif (!this.dragTarget || !this.dragging || !this.dragTarget.isDraggable || this.dragMechanism !== 'mouse' || !this.dragMouseStart)\n\t\treturn;\n\n\tvar positioning = getMousePosition(this, _ev);\n\n\tvar yDist = Math.round((positioning.y - this.dragMouseStart.y) / spacing.STEP);\n\tif (yDist !== this.dragYStep) {\n\t\tthis.dragYStep = yDist;\n\t\tthis.dragTarget.svgEl.setAttribute(\"transform\", \"translate(0,\" + (yDist * spacing.STEP) + \")\");\n\t}\n}\n\nfunction mouseUp(ev) {\n\t// \"this\" is the EngraverController because of the bind(this) when setting the event listener.\n\tvar _ev = ev;\n\tif (ev.type === 'touchend' && this.lastTouchMove) {\n\t\tattachMissingTouchEventAttributes(this.lastTouchMove);\n\t\tif (this.lastTouchMove && this.lastTouchMove.touches && this.lastTouchMove.touches.length > 0)\n\t\t\t_ev = this.lastTouchMove.touches[0];\n\t}\n\n\tif (!this.dragTarget)\n\t\treturn;\n\n\tclearSelection.bind(this)();\n\tif (this.dragTarget.absEl && this.dragTarget.absEl.highlight) {\n\t\tthis.selected = [this.dragTarget.absEl];\n\t\tthis.dragTarget.absEl.highlight(undefined, this.selectionColor);\n\t}\n\n\tnotifySelect.bind(this)(this.dragTarget, this.dragYStep, this.selectables.length, this.dragIndex, _ev);\n\tif (this.dragTarget.svgEl && this.dragTarget.svgEl.focus) {\n\t\tthis.dragTarget.svgEl.focus();\n\t\tthis.dragTarget = null;\n\t\tthis.dragIndex = -1;\n\t}\n\tremoveGlobalClass(this.renderer.svg, \"abcjs-dragging-in-progress\");\n}\n\nfunction setSelection(dragIndex) {\n\tif (dragIndex >= 0 && dragIndex < this.selectables.length) {\n\t\tthis.dragTarget = this.selectables[dragIndex];\n\t\tthis.dragIndex = dragIndex;\n\t\tthis.dragMechanism = \"keyboard\";\n\t\tmouseUp.bind(this)({ target: this.dragTarget.svgEl });\n\t}\n}\n\n\nfunction notifySelect(target, dragStep, dragMax, dragIndex, ev) {\n\tvar ret = createAnalysis(target, ev)\n\tvar classes = ret.classes\n\tvar analysis = ret.analysis\n\n\tfor (var i = 0; i < this.listeners.length; i++) {\n\t\tthis.listeners[i](target.absEl.abcelem, target.absEl.tuneNumber, classes.join(' '), analysis, { step: dragStep, max: dragMax, index: dragIndex, setSelection: setSelection.bind(this) }, ev);\n\t}\n}\n\nfunction clearSelection() {\n\tfor (var i = 0; i < this.selected.length; i++) {\n\t\tthis.selected[i].unhighlight(undefined, this.renderer.foregroundColor);\n\t}\n\tthis.selected = [];\n}\n\nfunction rangeHighlight(start, end) {\n\tclearSelection.bind(this)();\n\tfor (var line = 0; line < this.staffgroups.length; line++) {\n\t\tvar voices = this.staffgroups[line].voices;\n\t\tfor (var voice = 0; voice < voices.length; voice++) {\n\t\t\tvar elems = voices[voice].children;\n\t\t\tfor (var elem = 0; elem < elems.length; elem++) {\n\t\t\t\t// Since the user can highlight more than an element, or part of an element, a hit is if any of the endpoints\n\t\t\t\t// is inside the other range.\n\t\t\t\tvar elStart = elems[elem].abcelem.startChar;\n\t\t\t\tvar elEnd = elems[elem].abcelem.endChar;\n\t\t\t\tif ((end > elStart && start < elEnd) || ((end === start) && end === elEnd)) {\n\t\t\t\t\t//\t\tif (elems[elem].abcelem.startChar>=start && elems[elem].abcelem.endChar<=end) {\n\t\t\t\t\tthis.selected[this.selected.length] = elems[elem];\n\t\t\t\t\telems[elem].highlight(undefined, this.selectionColor);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction getClassSet(el) {\n\tvar oldClass = el.getAttribute('class');\n\tif (!oldClass)\n\t\toldClass = \"\";\n\tvar klasses = oldClass.split(\" \");\n\tvar obj = {};\n\tfor (var i = 0; i < klasses.length; i++)\n\t\tobj[klasses[i]] = true;\n\treturn obj;\n}\n\nfunction setClassSet(el, klassSet) {\n\tvar klasses = [];\n\tfor (var key in klassSet) {\n\t\tif (klassSet.hasOwnProperty(key))\n\t\t\tklasses.push(key);\n\t}\n\tel.setAttribute('class', klasses.join(' '));\n}\n\nfunction addGlobalClass(svg, klass) {\n\tif (svg) {\n\t\tvar obj = getClassSet(svg.svg);\n\t\tobj[klass] = true;\n\t\tsetClassSet(svg.svg, obj);\n\t}\n}\n\nfunction removeGlobalClass(svg, klass) {\n\tif (svg) {\n\t\tvar obj = getClassSet(svg.svg);\n\t\tdelete obj[klass];\n\t\tsetClassSet(svg.svg, obj);\n\t}\n}\n\nmodule.exports = setupSelection;\n","var setClass = require('../helpers/set-class');\n\nvar unhighlight = function (klass, color) {\n\tif (klass === undefined)\n\t\tklass = \"abcjs-note_selected\";\n\tif (color === undefined)\n\t\tcolor = \"#000000\";\n\tsetClass(this.elemset, \"\", klass, color);\n};\n\nmodule.exports = unhighlight;\n","var RelativeElement = require('../creation/elements/relative-element');\nvar spacing = require('../helpers/spacing');\nvar getBarYAt = require('./get-bar-y-at');\n\nvar layoutBeam = function (beam) {\n\tif (beam.elems.length === 0 || beam.allrests) return;\n\n\tvar dy = calcDy(beam.stemsUp, beam.isgrace); // This is the width of the beam line.\n\n\t// create the main beam\n\tvar firstElement = beam.elems[0];\n\tvar lastElement = beam.elems[beam.elems.length - 1];\n\tvar minStemHeight = 0; // The following is to leave space for \"!///!\" marks.\n\tvar referencePitch = beam.stemsUp ? firstElement.abcelem.maxpitch : firstElement.abcelem.minpitch;\n\tminStemHeight = minStem(firstElement, beam.stemsUp, referencePitch, minStemHeight);\n\tminStemHeight = minStem(lastElement, beam.stemsUp, referencePitch, minStemHeight);\n\tminStemHeight = Math.max(beam.stemHeight, minStemHeight + 3); // TODO-PER: The 3 is the width of a 16th beam. The actual height of the beam should be used instead.\n\tvar yPos = calcYPos(beam.average, beam.elems.length, minStemHeight, beam.stemsUp, firstElement.abcelem.averagepitch, lastElement.abcelem.averagepitch, beam.isflat, beam.min, beam.max, beam.isgrace);\n\tvar xPos = calcXPos(beam.stemsUp, firstElement, lastElement);\n\tbeam.addBeam({ startX: xPos[0], endX: xPos[1], startY: yPos[0], endY: yPos[1], dy: dy });\n\n\t// create the rest of the beams (in the case of 1/16th notes, etc.\n\tvar beams = createAdditionalBeams(beam.elems, beam.stemsUp, beam.beams[0], beam.isgrace, dy);\n\tfor (var i = 0; i < beams.length; i++)\n\t\tbeam.addBeam(beams[i]);\n\n\t// Now that the main beam is defined, we know how tall the stems should be, so create them and attach them to the original notes.\n\tcreateStems(beam.elems, beam.stemsUp, beam.beams[0], dy, beam.mainNote);\n};\n\nvar getDurlog = function (duration) {\n\t// TODO-PER: This is a hack to prevent a Chrome lockup. Duration should have been defined already,\n\t// but there's definitely a case where it isn't. [Probably something to do with triplets.]\n\tif (duration === undefined) {\n\t\treturn 0;\n\t}\n\t//        console.log(\"getDurlog: \" + duration);\n\treturn Math.floor(Math.log(duration) / Math.log(2));\n};\n\n//\n// private functions\n//\nfunction minStem(element, stemsUp, referencePitch, minStemHeight) {\n\tif (!element.children)\n\t\treturn minStemHeight;\n\tfor (var i = 0; i < element.children.length; i++) {\n\t\tvar elem = element.children[i];\n\t\tif (stemsUp && elem.top !== undefined && elem.c === \"flags.ugrace\")\n\t\t\tminStemHeight = Math.max(minStemHeight, elem.top - referencePitch);\n\t\telse if (!stemsUp && elem.bottom !== undefined && elem.c === \"flags.ugrace\")\n\t\t\tminStemHeight = Math.max(minStemHeight, referencePitch - elem.bottom + 7); // The extra 7 is because we are measuring the slash from the top.\n\t}\n\treturn minStemHeight;\n}\n\nfunction calcSlant(leftAveragePitch, rightAveragePitch, numStems, isFlat) {\n\tif (isFlat)\n\t\treturn 0;\n\tvar slant = leftAveragePitch - rightAveragePitch;\n\tvar maxSlant = numStems / 2;\n\n\tif (slant > maxSlant) slant = maxSlant;\n\tif (slant < -maxSlant) slant = -maxSlant;\n\treturn slant;\n}\n\nfunction calcDy(asc, isGrace) {\n\tvar dy = (asc) ? spacing.STEP : -spacing.STEP;\n\tif (isGrace) dy = dy * 0.4;\n\treturn dy;\n}\n\nfunction calcXPos(asc, firstElement, lastElement) {\n\tvar starthead = firstElement.heads[asc ? 0 : firstElement.heads.length - 1];\n\tvar endhead = lastElement.heads[asc ? 0 : lastElement.heads.length - 1];\n\tvar startX = starthead.x;\n\tif (asc) startX += starthead.w - 0.6;\n\tvar endX = endhead.x;\n\tendX += (asc) ? endhead.w : 0.6;\n\treturn [startX, endX];\n}\n\nfunction calcYPos(average, numElements, stemHeight, asc, firstAveragePitch, lastAveragePitch, isFlat, minPitch, maxPitch, isGrace) {\n\tvar barpos = stemHeight - 2; // (isGrace)? 5:7;\n\tvar barminpos = stemHeight - 2;\n\tvar pos = Math.round(asc ? Math.max(average + barpos, maxPitch + barminpos) : Math.min(average - barpos, minPitch - barminpos));\n\n\tvar slant = calcSlant(firstAveragePitch, lastAveragePitch, numElements, isFlat);\n\tvar startY = pos + Math.floor(slant / 2);\n\tvar endY = pos + Math.floor(-slant / 2);\n\n\t// If the notes are too high or too low, make the beam go down to the middle\n\tif (!isGrace) {\n\t\tif (asc && pos < 6) {\n\t\t\tstartY = 6;\n\t\t\tendY = 6;\n\t\t} else if (!asc && pos > 6) {\n\t\t\tstartY = 6;\n\t\t\tendY = 6;\n\t\t}\n\t}\n\n\treturn [startY, endY];\n}\n\nfunction createStems(elems, asc, beam, dy, mainNote) {\n\tfor (var i = 0; i < elems.length; i++) {\n\t\tvar elem = elems[i];\n\t\tif (elem.abcelem.rest)\n\t\t\tcontinue;\n\t\t// TODO-PER: This is odd. If it is a regular beam then elems is an array of AbsoluteElements, if it is a grace beam then it is an array of objects , so we directly attach the element to the parent. We tell it if is a grace note because they are passed in as a generic object instead of an AbsoluteElement.\n\t\tvar isGrace = elem.addExtra ? false : true;\n\t\tvar parent = isGrace ? mainNote : elem;\n\t\tvar furthestHead = elem.heads[(asc) ? 0 : elem.heads.length - 1];\n\t\tvar ovalDelta = 1 / 5;//(isGrace)?1/3:1/5;\n\t\tvar pitch = furthestHead.pitch + ((asc) ? ovalDelta : -ovalDelta);\n\t\tvar dx = asc ? furthestHead.w : 0; // down-pointing stems start on the left side of the note, up-pointing stems start on the right side, so we offset by the note width.\n\t\tif (!isGrace)\n\t\t\tdx += furthestHead.dx;\n\t\tvar x = furthestHead.x + dx; // this is now the actual x location in pixels.\n\t\tvar bary = getBarYAt(beam.startX, beam.startY, beam.endX, beam.endY, x);\n\t\tvar lineWidth = (asc) ? -0.6 : 0.6;\n\t\tif (!asc)\n\t\t\tbary -= (dy / 2) / spacing.STEP;\t// TODO-PER: This is just a fudge factor so the down-pointing stems don't overlap.\n\t\tif (isGrace)\n\t\t\tdx += elem.heads[0].dx;\n\t\t// TODO-PER-HACK: One type of note head has a different placement of the stem. This should be more generically calculated:\n\t\tif (furthestHead.c === 'noteheads.slash.quarter') {\n\t\t\tif (asc)\n\t\t\t\tpitch += 1;\n\t\t\telse\n\t\t\t\tpitch -= 1;\n\t\t}\n\t\tvar stem = new RelativeElement(null, dx, 0, pitch, {\n\t\t\t\"type\": \"stem\",\n\t\t\t\"pitch2\": bary,\n\t\t\tlinewidth: lineWidth\n\t\t});\n\t\tstem.setX(parent.x); // This is after the x coordinates were set, so we have to set it directly.\n\t\tparent.addRight(stem);\n\t}\n\n}\n\nfunction createAdditionalBeams(elems, asc, beam, isGrace, dy) {\n\tvar beams = [];\n\tvar auxBeams = [];  // auxbeam will be {x, y, durlog, single} auxbeam[0] should match with durlog=-4 (16th) (j=-4-durlog)\n\tfor (var i = 0; i < elems.length; i++) {\n\t\tvar elem = elems[i];\n\t\tif (elem.abcelem.rest)\n\t\t\tcontinue;\n\t\tvar furthestHead = elem.heads[(asc) ? 0 : elem.heads.length - 1];\n\t\tvar x = furthestHead.x + ((asc) ? furthestHead.w : 0);\n\t\tvar bary = getBarYAt(beam.startX, beam.startY, beam.endX, beam.endY, x);\n\n\t\tvar sy = (asc) ? -1.5 : 1.5;\n\t\tif (isGrace) sy = sy * 2 / 3; // This makes the second beam on grace notes closer to the first one.\n\t\tvar duration = elem.abcelem.duration; // get the duration via abcelem because of triplets\n\t\tif (duration === 0) duration = 0.25; // if this is stemless, then we use quarter note as the duration.\n\t\tfor (var durlog = getDurlog(duration); durlog < -3; durlog++) {\n\t\t\tvar index = -4 - durlog;\n\t\t\tif (auxBeams[index]) {\n\t\t\t\tauxBeams[index].single = false;\n\t\t\t} else {\n\t\t\t\tauxBeams[index] = {\n\t\t\t\t\tx: x + ((asc) ? -0.6 : 0), y: bary + sy * (index + 1),\n\t\t\t\t\tdurlog: durlog, single: true\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (i > 0 && elem.abcelem.beambr && elem.abcelem.beambr <= (index + 1)) {\n\t\t\t\tif (!auxBeams[index].split)\n\t\t\t\t\tauxBeams[index].split = [auxBeams[index].x];\n\t\t\t\tvar xPos = calcXPos(asc, elems[i - 1], elem);\n\t\t\t\tif (auxBeams[index].split[auxBeams[index].split.length - 1] >= xPos[0]) {\n\t\t\t\t\t// the reduction in beams leaves a note unattached so create a small flag for it.\n\t\t\t\t\txPos[0] += elem.w;\n\t\t\t\t}\n\t\t\t\tauxBeams[index].split.push(xPos[0]);\n\t\t\t\tauxBeams[index].split.push(xPos[1]);\n\t\t\t}\n\t\t}\n\n\t\tfor (var j = auxBeams.length - 1; j >= 0; j--) {\n\t\t\tif (i === elems.length - 1 || getDurlog(elems[i + 1].abcelem.duration) > (-j - 4)) {\n\n\t\t\t\tvar auxBeamEndX = x;\n\t\t\t\tvar auxBeamEndY = bary + sy * (j + 1);\n\n\n\t\t\t\tif (auxBeams[j].single) {\n\t\t\t\t\tauxBeamEndX = (i === 0) ? x + 5 : x - 5;\n\t\t\t\t\tauxBeamEndY = getBarYAt(beam.startX, beam.startY, beam.endX, beam.endY, auxBeamEndX) + sy * (j + 1);\n\t\t\t\t}\n\t\t\t\tvar b = { startX: auxBeams[j].x, endX: auxBeamEndX, startY: auxBeams[j].y, endY: auxBeamEndY, dy: dy }\n\t\t\t\tif (auxBeams[j].split !== undefined) {\n\t\t\t\t\tvar split = auxBeams[j].split;\n\t\t\t\t\tif (b.endX <= split[split.length - 1]) {\n\t\t\t\t\t\t// the reduction in beams leaves the last note by itself, so create a little flag for it\n\t\t\t\t\t\tsplit[split.length - 1] -= elem.w;\n\t\t\t\t\t}\n\t\t\t\t\tsplit.push(b.endX);\n\t\t\t\t\tb.split = auxBeams[j].split;\n\t\t\t\t}\n\t\t\t\tbeams.push(b);\n\t\t\t\tauxBeams = auxBeams.slice(0, j);\n\t\t\t}\n\t\t}\n\t}\n\treturn beams;\n}\n\nmodule.exports = layoutBeam;\n","function getBarYAt(startx, starty, endx, endy, x) {\n\treturn starty + (endy - starty) / (endx - startx) * (x - startx);\n}\n\nmodule.exports = getBarYAt;\n\n","function getLeftEdgeOfStaff(renderer, getTextSize, voices, brace, bracket) {\n\tvar x = renderer.padding.left;\n\n\t// find out how much space will be taken up by voice headers\n\tvar voiceheaderw = 0;\n\tvar i;\n\tvar size;\n\tfor (i = 0; i < voices.length; i++) {\n\t\tif (voices[i].header) {\n\t\t\tsize = getTextSize.calc(voices[i].header, 'voicefont', '');\n\t\t\tvoiceheaderw = Math.max(voiceheaderw, size.width);\n\t\t}\n\t}\n\tvoiceheaderw = addBraceSize(voiceheaderw, brace, getTextSize);\n\tvoiceheaderw = addBraceSize(voiceheaderw, bracket, getTextSize);\n\n\tif (voiceheaderw) {\n\t\t// Give enough spacing to the right - we use the width of an A for the amount of spacing.\n\t\tvar sizeW = getTextSize.calc(\"A\", 'voicefont', '');\n\t\tvoiceheaderw += sizeW.width;\n\t}\n\tx += voiceheaderw;\n\n\tvar ofs = 0;\n\tofs = setBraceLocation(brace, x, ofs);\n\tofs = setBraceLocation(bracket, x, ofs);\n\treturn x + ofs;\n}\n\nfunction addBraceSize(voiceheaderw, brace, getTextSize) {\n\tif (brace) {\n\t\tfor (var i = 0; i < brace.length; i++) {\n\t\t\tif (brace[i].header) {\n\t\t\t\tvar size = getTextSize.calc(brace[i].header, 'voicefont', '');\n\t\t\t\tvoiceheaderw = Math.max(voiceheaderw, size.width);\n\t\t\t}\n\t\t}\n\t}\n\treturn voiceheaderw;\n}\n\nfunction setBraceLocation(brace, x, ofs) {\n\tif (brace) {\n\t\tfor (var i = 0; i < brace.length; i++) {\n\t\t\tsetLocation(x, brace[i]);\n\t\t\tofs = Math.max(ofs, brace[i].getWidth());\n\t\t}\n\t}\n\treturn ofs;\n}\n\nfunction setLocation(x, element) {\n\telement.x = x;\n}\n\nmodule.exports = getLeftEdgeOfStaff;\n","var getLeftEdgeOfStaff = require('./get-left-edge-of-staff');\n\nfunction layoutInGrid(renderer, staffGroup, timeBasedLayout) {\n\tvar leftEdge = getLeftEdgeOfStaff(renderer, staffGroup.getTextSize, staffGroup.voices, staffGroup.brace, staffGroup.bracket);\n\tvar ret = getTotalDuration(staffGroup, timeBasedLayout.minPadding)\n\tvar totalDuration = ret.totalDuration\n\tvar minSpacing = ret.minSpacing\n\tvar totalWidth = minSpacing * totalDuration\n\tif (timeBasedLayout.minWidth)\n\t\ttotalWidth = Math.max(totalWidth, timeBasedLayout.minWidth)\n\tvar leftAlignPadding = timeBasedLayout.minPadding ? timeBasedLayout.minPadding/2 : 2 // If the padding isn't specified still give it some\n\n\tstaffGroup.startx = leftEdge\n\tstaffGroup.w = totalWidth + leftEdge\n\tfor (var i = 0; i < staffGroup.voices.length; i++) {\n\t\tvar voice = staffGroup.voices[i]\n\t\tvoice.startx = leftEdge\n\t\tvoice.w = totalWidth + leftEdge\n\n\t\tvar x = leftEdge\n\t\tvar afterFixedLeft = false\n\t\tvar durationUnit = 0\n\t\tfor (var j = 0; j < voice.children.length; j++) {\n\t\t\tvar child = voice.children[j]\n\t\t\tif (!afterFixedLeft) {\n\t\t\t\tif (child.duration !== 0) {\n\t\t\t\t\t// We got to the first music element on the line\n\t\t\t\t\tafterFixedLeft = true\n\t\t\t\t\tdurationUnit = (totalWidth + leftEdge - x) / totalDuration\n\t\t\t\t\tstaffGroup.gridStart = x\n\t\t\t\t} else {\n\t\t\t\t\t// We are still doing the preliminary stuff - clef, time sig, etc.\n\t\t\t\t\tchild.x = x\n\t\t\t\t\tx += child.w + child.minspacing\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (afterFixedLeft) {\n\t\t\t\tif (timeBasedLayout.align === 'center')\n\t\t\t\t\tchild.x = x + (child.duration * durationUnit) / 2 - child.w / 2\n\t\t\t\telse {\n\t\t\t\t\t// left align with padding - but no padding for barlines, they should be right aligned.\n\t\t\t\t\t// TODO-PER: it looks better to move bar lines one pixel to right. Not sure why.\n\t\t\t\t\tif (child.duration === 0) {\n\t\t\t\t\t\tchild.x = x + 1 - child.w\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// child.extraw has the width of the accidentals - push the note to the right to take that into consideration. It will be 0 if there is nothing to the left.\n\t\t\t\t\t\tchild.x = x + leftAlignPadding - child.extraw\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tx += child.duration * durationUnit\n\t\t\t}\n\t\t\tfor (var k = 0; k < child.children.length; k++) {\n\t\t\t\tvar grandchild = child.children[k]\n\t\t\t\t// some elements don't have a dx - Tempo, for instance\n\t\t\t\tvar dx = grandchild.dx ? grandchild.dx : 0\n\t\t\t\tgrandchild.x = child.x + dx\n\t\t\t}\n\t\t}\n\t\tstaffGroup.gridEnd = x\n\t}\n\treturn totalWidth\n}\n\nfunction getTotalDuration(staffGroup, timeBasedLayout) {\n\tvar maxSpacing = 0\n\tvar maxCount = 0\n\tfor (var i = 0; i < staffGroup.voices.length; i++) {\n\t\tvar count = 0\n\t\tvar voice = staffGroup.voices[i]\n\t\tfor (var j = 0; j < voice.children.length; j++) {\n\t\t\tvar element = voice.children[j]\n\t\t\tcount += element.duration\n\t\t\tif (element.duration) {\n\t\t\t\tvar width = (element.w+timeBasedLayout) / element.duration\n\t\t\t\tmaxSpacing = Math.max(maxSpacing, width)\n\t\t\t}\n\t\t}\n\t\tmaxCount = Math.max(maxCount, count)\n\t}\n\treturn { totalDuration: maxCount, minSpacing: maxSpacing}\n}\n\nmodule.exports = layoutInGrid;\n","var layoutVoice = require('./voice');\nvar setUpperAndLowerElements = require('./set-upper-and-lower-elements');\nvar layoutStaffGroup = require('./staff-group');\nvar getLeftEdgeOfStaff = require('./get-left-edge-of-staff');\nvar layoutInGrid = require('./layout-in-grid');\n\n// This sets the \"x\" attribute on all the children in abctune.lines\n// It also sets the \"w\" and \"startx\" attributes on \"voices\"\n// It also sets the \"w\" and \"startx\" attributes on \"voices.children\"\nvar layout = function (renderer, abctune, width, space, expandToWidest, timeBasedLayout) {\n\tvar i;\n\tvar abcLine;\n\t// Adjust the x-coordinates to their absolute positions\n\tvar maxWidth = width;\n\tfor (i = 0; i < abctune.lines.length; i++) {\n\t\tabcLine = abctune.lines[i];\n\t\tif (abcLine.staff) {\n\t\t\t// console.log(\"=== line\", i)\n\t\t\tvar thisWidth;\n\t\t\tif (timeBasedLayout !== undefined)\n\t\t\t\tthisWidth = layoutInGrid(renderer, abcLine.staffGroup, timeBasedLayout);\n\t\t\telse\n\t\t\t\tthisWidth = setXSpacing(renderer, maxWidth, space, abcLine.staffGroup, abctune.formatting, i === abctune.lines.length - 1, false);\n\t\t\t// console.log(thisWidth, maxWidth)\n\t\t\tif (Math.round(thisWidth) > Math.round(maxWidth)) { // to take care of floating point weirdness\n\t\t\t\tmaxWidth = thisWidth\n\t\t\t\tif (expandToWidest)\n\t\t\t\t\ti = -1 // do the calculations over with the new width\n\t\t\t}\n\t\t}\n\t}\n\n\t// Layout the beams and add the stems to the beamed notes.\n\tfor (i = 0; i < abctune.lines.length; i++) {\n\t\tabcLine = abctune.lines[i];\n\t\tif (abcLine.staffGroup && abcLine.staffGroup.voices) {\n\t\t\tfor (var j = 0; j < abcLine.staffGroup.voices.length; j++)\n\t\t\t\tlayoutVoice(abcLine.staffGroup.voices[j]);\n\t\t\tsetUpperAndLowerElements(renderer, abcLine.staffGroup);\n\t\t}\n\t}\n\n\t// Set the staff spacing\n\t// TODO-PER: we should have been able to do this by the time we called setUpperAndLowerElements, but for some reason the \"bottom\" element seems to be set as a side effect of setting the X spacing.\n\tfor (i = 0; i < abctune.lines.length; i++) {\n\t\tabcLine = abctune.lines[i];\n\t\tif (abcLine.staffGroup) {\n\t\t\tabcLine.staffGroup.setHeight();\n\t\t}\n\t}\n\treturn maxWidth;\n}\n// Do the x-axis positioning for a single line (a group of related staffs)\nvar setXSpacing = function (renderer, width, space, staffGroup, formatting, isLastLine, debug) {\n\tvar leftEdge = getLeftEdgeOfStaff(renderer, staffGroup.getTextSize, staffGroup.voices, staffGroup.brace, staffGroup.bracket);\n\tvar newspace = space;\n\t//dumpGroup(\"before\", staffGroup)\n\tfor (var it = 0; it < 8; it++) { // TODO-PER: shouldn't need multiple passes, but each pass gets it closer to the right spacing. (Only affects long lines: normal lines break out of this loop quickly.)\n\t\t// console.log(\"iteration\", it)\n\t\tvar ret = layoutStaffGroup(newspace, renderer.minPadding, debug, staffGroup, leftEdge);\n\t\tnewspace = calcHorizontalSpacing(isLastLine, formatting.stretchlast, width + renderer.padding.left, staffGroup.w, newspace, ret.spacingUnits, ret.minSpace, renderer.padding.left + renderer.padding.right);\n\t\tif (debug)\n\t\t\tconsole.log(\"setXSpace\", it, staffGroup.w, newspace, staffGroup.minspace);\n\t\tif (newspace === null) break;\n\t}\n\t//dumpGroup(\"after\",staffGroup)\n\tcenterWholeRests(staffGroup.voices);\n\treturn staffGroup.w - leftEdge\n};\n\nfunction replacer(key, value) {\n\t// Filtering out properties\n\tif (key === 'parent') {\n\t\treturn 'parent';\n\t}\n\tif (key === 'beam') {\n\t\treturn 'beam';\n\t}\n\treturn value;\n}\n\nfunction dumpGroup(label, staffGroup) {\n\tconsole.log(\"=================== \" + label + \" =========================\")\n\tconsole.log(staffGroup)\n\tconsole.log(JSON.stringify(staffGroup, replacer, \"\\t\"))\n}\n\nfunction calcHorizontalSpacing(isLastLine, stretchLast, targetWidth, lineWidth, spacing, spacingUnits, minSpace, padding) {\n\tif (isLastLine) {\n\t\tif (stretchLast === undefined) {\n\t\t\tif (lineWidth / targetWidth < 0.66) return null; // keep this for backward compatibility. The break isn't quite the same for some reason.\n\t\t} else {\n\t\t\t// \"Stretch the last music line of a tune when it lacks less than the float fraction of the page width.\"\n\t\t\tvar lack = 1 - (lineWidth + padding) / targetWidth;\n\t\t\tvar stretch = lack < stretchLast;\n\t\t\tif (!stretch) return null; // don't stretch last line too much\n\t\t}\n\t}\n\tif (Math.abs(targetWidth - lineWidth) < 2) return null; // if we are already near the target width, we're done.\n\tvar relSpace = spacingUnits * spacing;\n\tvar constSpace = lineWidth - relSpace;\n\tif (spacingUnits > 0) {\n\t\tspacing = (targetWidth - constSpace) / spacingUnits;\n\t\tif (spacing * minSpace > 50) {\n\t\t\tspacing = 50 / minSpace;\n\t\t}\n\t\treturn spacing;\n\t}\n\treturn null;\n}\n\nfunction centerWholeRests(voices) {\n\t// whole rests are a special case: if they are by themselves in a measure, then they should be centered.\n\t// (If they are not by themselves, that is probably a user error, but we'll just center it between the two items to either side of it.)\n\tfor (var i = 0; i < voices.length; i++) {\n\t\tvar voice = voices[i];\n\t\t// Look through all of the elements except for the first and last. If the whole note appears there then there isn't anything to center it between anyway.\n\t\tfor (var j = 1; j < voice.children.length - 1; j++) {\n\t\t\tvar absElem = voice.children[j];\n\t\t\tif (absElem.abcelem.rest && (absElem.abcelem.rest.type === 'whole' || absElem.abcelem.rest.type === 'multimeasure')) {\n\t\t\t\tvar before = voice.children[j - 1];\n\t\t\t\tvar after = voice.children[j + 1];\n\t\t\t\tabsElem.center(before, after);\n\t\t\t}\n\t\t}\n\t}\n}\n\nmodule.exports = layout;\n","var spacing = require('../helpers/spacing');\n\nvar setUpperAndLowerElements = function (renderer, staffGroup) {\n\t// Each staff already has the top and bottom set, now we see if there are elements that are always on top and bottom, and resolve their pitch.\n\t// Also, get the overall height of all the staves in this group.\n\tvar lastStaffBottom;\n\tfor (var i = 0; i < staffGroup.staffs.length; i++) {\n\t\tvar staff = staffGroup.staffs[i];\n\t\t// the vertical order of elements that are above is: tempo, part, volume/dynamic, ending/chord, lyric\n\t\t// the vertical order of elements that are below is: lyric, chord, volume/dynamic\n\t\tvar positionY = {\n\t\t\ttempoHeightAbove: 0,\n\t\t\tpartHeightAbove: 0,\n\t\t\tvolumeHeightAbove: 0,\n\t\t\tdynamicHeightAbove: 0,\n\t\t\tendingHeightAbove: 0,\n\t\t\tchordHeightAbove: 0,\n\t\t\tlyricHeightAbove: 0,\n\n\t\t\tlyricHeightBelow: 0,\n\t\t\tchordHeightBelow: 0,\n\t\t\tvolumeHeightBelow: 0,\n\t\t\tdynamicHeightBelow: 0\n\t\t};\n\n\t\tif (renderer.showDebug && renderer.showDebug.indexOf(\"box\") >= 0) {\n\t\t\tstaff.originalTop = staff.top; // This is just being stored for debugging purposes.\n\t\t\tstaff.originalBottom = staff.bottom; // This is just being stored for debugging purposes.\n\t\t}\n\n\t\tincTop(staff, positionY, 'lyricHeightAbove');\n\t\tincTop(staff, positionY, 'chordHeightAbove', staff.specialY.chordLines.above);\n\t\tif (staff.specialY.endingHeightAbove) {\n\t\t\tif (staff.specialY.chordHeightAbove)\n\t\t\t\tstaff.top += 2;\n\t\t\telse\n\t\t\t\tstaff.top += staff.specialY.endingHeightAbove + margin;\n\t\t\tpositionY.endingHeightAbove = staff.top;\n\t\t}\n\t\tif (staff.specialY.dynamicHeightAbove && staff.specialY.volumeHeightAbove) {\n\t\t\tstaff.top += Math.max(staff.specialY.dynamicHeightAbove, staff.specialY.volumeHeightAbove) + margin;\n\t\t\tpositionY.dynamicHeightAbove = staff.top;\n\t\t\tpositionY.volumeHeightAbove = staff.top;\n\t\t} else {\n\t\t\tincTop(staff, positionY, 'dynamicHeightAbove');\n\t\t\tincTop(staff, positionY, 'volumeHeightAbove');\n\t\t}\n\t\tincTop(staff, positionY, 'partHeightAbove');\n\t\tincTop(staff, positionY, 'tempoHeightAbove');\n\n\t\tif (staff.specialY.lyricHeightBelow) {\n\t\t\tstaff.specialY.lyricHeightBelow += renderer.spacing.vocal / spacing.STEP;\n\t\t\tpositionY.lyricHeightBelow = staff.bottom;\n\t\t\tstaff.bottom -= (staff.specialY.lyricHeightBelow + margin);\n\t\t}\n\t\tif (staff.specialY.chordHeightBelow) {\n\t\t\tpositionY.chordHeightBelow = staff.bottom;\n\t\t\tvar hgt = staff.specialY.chordHeightBelow;\n\t\t\tif (staff.specialY.chordLines.below)\n\t\t\t\thgt *= staff.specialY.chordLines.below;\n\t\t\tstaff.bottom -= (hgt + margin);\n\t\t}\n\t\tif (staff.specialY.volumeHeightBelow && staff.specialY.dynamicHeightBelow) {\n\t\t\tpositionY.volumeHeightBelow = staff.bottom;\n\t\t\tpositionY.dynamicHeightBelow = staff.bottom;\n\t\t\tstaff.bottom -= (Math.max(staff.specialY.volumeHeightBelow, staff.specialY.dynamicHeightBelow) + margin);\n\t\t} else if (staff.specialY.volumeHeightBelow) {\n\t\t\tpositionY.volumeHeightBelow = staff.bottom; staff.bottom -= (staff.specialY.volumeHeightBelow + margin);\n\t\t} else if (staff.specialY.dynamicHeightBelow) {\n\t\t\tpositionY.dynamicHeightBelow = staff.bottom; staff.bottom -= (staff.specialY.dynamicHeightBelow + margin);\n\t\t}\n\n\t\tif (renderer.showDebug && renderer.showDebug.indexOf(\"box\") >= 0)\n\t\t\tstaff.positionY = positionY; // This is just being stored for debugging purposes.\n\n\t\tfor (var j = 0; j < staff.voices.length; j++) {\n\t\t\tvar voice = staffGroup.voices[staff.voices[j]];\n\t\t\tsetUpperAndLowerVoiceElements(positionY, voice, renderer.spacing);\n\t\t}\n\t\t// We might need a little space in between staves if the staves haven't been pushed far enough apart by notes or extra vertical stuff.\n\t\t// Only try to put in extra space if this isn't the top staff.\n\t\tif (lastStaffBottom !== undefined) {\n\t\t\tvar thisStaffTop = staff.top - 10;\n\t\t\tvar forcedSpacingBetween = lastStaffBottom + thisStaffTop;\n\t\t\tvar minSpacingInPitches = renderer.spacing.systemStaffSeparation / spacing.STEP;\n\t\t\tvar addedSpace = minSpacingInPitches - forcedSpacingBetween;\n\t\t\tif (addedSpace > 0)\n\t\t\t\tstaff.top += addedSpace;\n\t\t}\n\t\tstaff.top += renderer.spacing.staffTopMargin / spacing.STEP\n\n\t\tlastStaffBottom = 2 - staff.bottom; // the staff starts at position 2 and the bottom variable is negative. Therefore to find out how large the bottom is, we reverse the sign of the bottom, and add the 2 in.\n\n\t\t// Now we need a little margin on the top, so we'll just throw that in.\n\t\t//staff.top += 4;\n\t\t//console.log(\"Staff Y: \",i,heightInPitches,staff.top,staff.bottom);\n\t}\n\t//console.log(\"Staff Height: \",heightInPitches,this.height);\n};\n\nvar margin = 1;\nfunction incTop(staff, positionY, item, count) {\n\tif (staff.specialY[item]) {\n\t\tvar height = staff.specialY[item];\n\t\tif (count)\n\t\t\theight *= count;\n\t\tstaff.top += height + margin;\n\t\tpositionY[item] = staff.top;\n\t}\n}\n\nfunction setUpperAndLowerVoiceElements(positionY, voice, spacing) {\n\tvar i;\n\tvar abselem;\n\tfor (i = 0; i < voice.children.length; i++) {\n\t\tabselem = voice.children[i];\n\t\tsetUpperAndLowerAbsoluteElements(positionY, abselem, spacing);\n\t}\n\tfor (i = 0; i < voice.otherchildren.length; i++) {\n\t\tabselem = voice.otherchildren[i];\n\t\tswitch (abselem.type) {\n\t\t\tcase 'CrescendoElem':\n\t\t\t\tsetUpperAndLowerCrescendoElements(positionY, abselem);\n\t\t\t\tbreak;\n\t\t\tcase 'DynamicDecoration':\n\t\t\t\tsetUpperAndLowerDynamicElements(positionY, abselem);\n\t\t\t\tbreak;\n\t\t\tcase 'EndingElem':\n\t\t\t\tsetUpperAndLowerEndingElements(positionY, abselem);\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\n// For each of the relative elements that can't be placed in advance (because their vertical placement depends on everything\n// else on the line), this iterates through them and sets their pitch. By the time this is called, specialYResolved contains a\n// hash with the vertical placement (in pitch units) for each type.\n// TODO-PER: I think this needs to be separated by \"above\" and \"below\". How do we know that for dynamics at the point where they are being defined, though? We need a pass through all the relative elements to set \"above\" and \"below\".\nfunction setUpperAndLowerAbsoluteElements(specialYResolved, element, spacing) {\n\t// specialYResolved contains the actual pitch for each of the classes of elements.\n\tfor (var i = 0; i < element.children.length; i++) {\n\t\tvar child = element.children[i];\n\t\tfor (var key in element.specialY) { // for each class of element that needs to be placed vertically\n\t\t\tif (element.specialY.hasOwnProperty(key)) {\n\t\t\t\tif (child[key]) { // If this relative element has defined a height for this class of element\n\t\t\t\t\tchild.pitch = specialYResolved[key];\n\t\t\t\t\tif (child.top === undefined) { // TODO-PER: HACK! Not sure this is the right place to do this.\n\t\t\t\t\t\tif (child.type === 'TempoElement') {\n\t\t\t\t\t\t\tsetUpperAndLowerTempoElement(specialYResolved, child);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsetUpperAndLowerRelativeElements(specialYResolved, child, spacing);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telement.pushTop(child.top);\n\t\t\t\t\t\telement.pushBottom(child.bottom);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction setUpperAndLowerCrescendoElements(positionY, element) {\n\tif (element.dynamicHeightAbove)\n\t\telement.pitch = positionY.dynamicHeightAbove;\n\telse\n\t\telement.pitch = positionY.dynamicHeightBelow;\n}\n\nfunction setUpperAndLowerDynamicElements(positionY, element) {\n\tif (element.volumeHeightAbove)\n\t\telement.pitch = positionY.volumeHeightAbove;\n\telse\n\t\telement.pitch = positionY.volumeHeightBelow;\n}\n\nfunction setUpperAndLowerEndingElements(positionY, element) {\n\telement.pitch = positionY.endingHeightAbove - 2;\n}\n\nfunction setUpperAndLowerTempoElement(positionY, element) {\n\telement.pitch = positionY.tempoHeightAbove;\n\telement.top = positionY.tempoHeightAbove;\n\telement.bottom = positionY.tempoHeightAbove;\n\tif (element.note) {\n\t\tvar tempoPitch = element.pitch - element.totalHeightInPitches + 1; // The pitch we receive is the top of the allotted area: change that to practically the bottom.\n\t\telement.note.top = tempoPitch;\n\t\telement.note.bottom = tempoPitch;\n\t\tfor (var i = 0; i < element.note.children.length; i++) {\n\t\t\tvar child = element.note.children[i];\n\t\t\tchild.top += tempoPitch;\n\t\t\tchild.bottom += tempoPitch;\n\t\t\tchild.pitch += tempoPitch;\n\t\t\tif (child.pitch2 !== undefined)\n\t\t\t\tchild.pitch2 += tempoPitch;\n\t\t}\n\t}\n}\n\nfunction setUpperAndLowerRelativeElements(positionY, element, renderSpacing) {\n\tswitch (element.type) {\n\t\tcase \"part\":\n\t\t\telement.top = positionY.partHeightAbove + element.height;\n\t\t\telement.bottom = positionY.partHeightAbove;\n\t\t\tbreak;\n\t\tcase \"text\":\n\t\tcase \"chord\":\n\t\t\tif (element.chordHeightAbove) {\n\t\t\t\telement.top = positionY.chordHeightAbove;\n\t\t\t\telement.bottom = positionY.chordHeightAbove;\n\t\t\t} else {\n\t\t\t\telement.top = positionY.chordHeightBelow;\n\t\t\t\telement.bottom = positionY.chordHeightBelow;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"lyric\":\n\t\t\tif (element.lyricHeightAbove) {\n\t\t\t\telement.top = positionY.lyricHeightAbove;\n\t\t\t\telement.bottom = positionY.lyricHeightAbove;\n\t\t\t} else {\n\t\t\t\telement.top = positionY.lyricHeightBelow + renderSpacing.vocal / spacing.STEP;\n\t\t\t\telement.bottom = positionY.lyricHeightBelow + renderSpacing.vocal / spacing.STEP;\n\t\t\t\telement.pitch -= renderSpacing.vocal / spacing.STEP;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"debug\":\n\t\t\telement.top = positionY.chordHeightAbove;\n\t\t\telement.bottom = positionY.chordHeightAbove;\n\t\t\tbreak;\n\t}\n\tif (element.pitch === undefined || element.top === undefined)\n\t\tconsole.error(\"RelativeElement position not set.\", element.type, element.pitch, element.top, positionY);\n}\n\nmodule.exports = setUpperAndLowerElements;\n","var layoutVoiceElements = require('./voice-elements');\n\nfunction checkLastBarX(voices) {\n\tvar maxX = 0;\n\tfor (var i = 0; i < voices.length; i++) {\n\t\tvar curVoice = voices[i];\n\t\tif (curVoice.children.length > 0) {\n\t\t\tvar lastChild = curVoice.children.length - 1;\n\t\t\tvar maxChild = curVoice.children[lastChild];\n\t\t\tif (maxChild.abcelem.el_type === 'bar') {\n\t\t\t\tvar barX = maxChild.children[0].x;\n\t\t\t\tif (barX > maxX) {\n\t\t\t\t\tmaxX = barX;\n\t\t\t\t} else {\n\t\t\t\t\tmaxChild.children[0].x = maxX;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nvar layoutStaffGroup = function (spacing, minPadding, debug, staffGroup, leftEdge) {\n\tvar epsilon = 0.0000001; // Fudging for inexactness of floating point math.\n\tvar spacingunits = 0; // number of times we will have ended up using the spacing distance (as opposed to fixed width distances)\n\tvar minspace = 1000; // a big number to start off with - used to find out what the smallest space between two notes is -- GD 2014.1.7\n\n\tvar x = leftEdge;\n\tstaffGroup.startx = x;\n\tvar i;\n\n\tvar currentduration = 0;\n\tif (debug) console.log(\"init layout\", spacing);\n\tfor (i = 0; i < staffGroup.voices.length; i++) {\n\t\tlayoutVoiceElements.beginLayout(x, staffGroup.voices[i]);\n\t}\n\n\tvar spacingunit = 0; // number of spacingunits coming from the previously laid out element to this one\n\twhile (!finished(staffGroup.voices)) {\n\t\t// find first duration level to be laid out among candidates across voices\n\t\tcurrentduration = null; // candidate smallest duration level\n\t\tfor (i = 0; i < staffGroup.voices.length; i++) {\n\t\t\tif (!layoutVoiceElements.layoutEnded(staffGroup.voices[i]) && (!currentduration || getDurationIndex(staffGroup.voices[i]) < currentduration))\n\t\t\t\tcurrentduration = getDurationIndex(staffGroup.voices[i]);\n\t\t}\n\n\n\t\t// isolate voices at current duration level\n\t\tvar currentvoices = [];\n\t\tvar othervoices = [];\n\t\tfor (i = 0; i < staffGroup.voices.length; i++) {\n\t\t\tvar durationIndex = getDurationIndex(staffGroup.voices[i]);\n\t\t\t// PER: Because of the inexactness of JS floating point math, we just get close.\n\t\t\tif (durationIndex - currentduration > epsilon) {\n\t\t\t\tothervoices.push(staffGroup.voices[i]);\n\t\t\t\t//console.log(\"out: voice \",i);\n\t\t\t} else {\n\t\t\t\tcurrentvoices.push(staffGroup.voices[i]);\n\t\t\t\t//if (debug) console.log(\"in: voice \",i);\n\t\t\t}\n\t\t}\n\n\t\t// among the current duration level find the one which needs starting furthest right\n\t\tspacingunit = 0; // number of spacingunits coming from the previously laid out element to this one\n\t\tvar spacingduration = 0;\n\t\tfor (i = 0; i < currentvoices.length; i++) {\n\t\t\t//console.log(\"greatest spacing unit\", x, layoutVoiceElements.getNextX(currentvoices[i]), layoutVoiceElements.getSpacingUnits(currentvoices[i]), currentvoices[i].spacingduration);\n\t\t\tif (layoutVoiceElements.getNextX(currentvoices[i]) > x) {\n\t\t\t\tx = layoutVoiceElements.getNextX(currentvoices[i]);\n\t\t\t\tspacingunit = layoutVoiceElements.getSpacingUnits(currentvoices[i]);\n\t\t\t\tspacingduration = currentvoices[i].spacingduration;\n\t\t\t}\n\t\t}\n\t\tspacingunits += spacingunit;\n\t\tminspace = Math.min(minspace, spacingunit);\n\t\tif (debug) console.log(\"currentduration: \", currentduration, spacingunits, minspace);\n\n\t\tvar lastTopVoice = undefined;\n\t\tfor (i = 0; i < currentvoices.length; i++) {\n\t\t\tvar v = currentvoices[i];\n\t\t\tif (v.voicenumber === 0)\n\t\t\t\tlastTopVoice = i;\n\t\t\tvar topVoice = (lastTopVoice !== undefined && currentvoices[lastTopVoice].voicenumber !== v.voicenumber) ? currentvoices[lastTopVoice] : undefined;\n\t\t\tif (!isSameStaff(v, topVoice))\n\t\t\t\ttopVoice = undefined;\n\t\t\tvar voicechildx = layoutVoiceElements.layoutOneItem(x, spacing, v, minPadding, topVoice);\n\t\t\tvar dx = voicechildx - x;\n\t\t\tif (dx > 0) {\n\t\t\t\tx = voicechildx; //update x\n\t\t\t\tfor (var j = 0; j < i; j++) { // shift over all previously laid out elements\n\t\t\t\t\tlayoutVoiceElements.shiftRight(dx, currentvoices[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// remove the value of already counted spacing units in other voices (e.g. if a voice had planned to use up 5 spacing units but is not in line to be laid out at this duration level - where we've used 2 spacing units - then we must use up 3 spacing units, not 5)\n\t\tfor (i = 0; i < othervoices.length; i++) {\n\t\t\tothervoices[i].spacingduration -= spacingduration;\n\t\t\tlayoutVoiceElements.updateNextX(x, spacing, othervoices[i]); // adjust other voices expectations\n\t\t}\n\n\t\t// update indexes of currently laid out elems\n\t\tfor (i = 0; i < currentvoices.length; i++) {\n\t\t\tvar voice = currentvoices[i];\n\t\t\tlayoutVoiceElements.updateIndices(voice);\n\t\t}\n\t} // finished laying out\n\n\n\t// find the greatest remaining x as a base for the width\n\tfor (i = 0; i < staffGroup.voices.length; i++) {\n\t\tif (layoutVoiceElements.getNextX(staffGroup.voices[i]) > x) {\n\t\t\tx = layoutVoiceElements.getNextX(staffGroup.voices[i]);\n\t\t\tspacingunit = layoutVoiceElements.getSpacingUnits(staffGroup.voices[i]);\n\t\t}\n\t}\n\n\t// adjust lastBar when needed (multi staves)\n\tcheckLastBarX(staffGroup.voices);\n\t//console.log(\"greatest remaining\",spacingunit,x);\n\tspacingunits += spacingunit;\n\tstaffGroup.setWidth(x);\n\n\treturn { spacingUnits: spacingunits, minSpace: minspace };\n};\n\n\nfunction finished(voices) {\n\tfor (var i = 0; i < voices.length; i++) {\n\t\tif (!layoutVoiceElements.layoutEnded(voices[i])) return false;\n\t}\n\treturn true;\n}\n\nfunction getDurationIndex(element) {\n\treturn element.durationindex - (element.children[element.i] && (element.children[element.i].duration > 0) ? 0 : 0.0000005); // if the ith element doesn't have a duration (is not a note), its duration index is fractionally before. This enables CLEF KEYSIG TIMESIG PART, etc. to be laid out before we get to the first note of other voices\n}\n\nfunction isSameStaff(voice1, voice2) {\n\tif (!voice1 || !voice1.staff || !voice1.staff.voices || voice1.staff.voices.length === 0)\n\t\treturn false;\n\tif (!voice2 || !voice2.staff || !voice2.staff.voices || voice2.staff.voices.length === 0)\n\t\treturn false;\n\treturn (voice1.staff.voices[0] === voice2.staff.voices[0]);\n}\n\nmodule.exports = layoutStaffGroup;\n","var getBarYAt = require('./get-bar-y-at');\n\nfunction layoutTriplet(element) {\n\t// TODO end and beginning of line (PER: P.S. I'm not sure this can happen: I think the parser will always specify both the start and end points.)\n\tif (element.anchor1 && element.anchor2) {\n\t\telement.hasBeam = !!element.anchor1.parent.beam && element.anchor1.parent.beam === element.anchor2.parent.beam;\n\t\tvar beam = element.anchor1.parent.beam;\n\t\t// if hasBeam is true, then the first and last element in the triplet have the same beam.\n\t\t// We also need to check if the beam doesn't contain other notes so that `(3 dcdcc` will do a bracket.\n\t\tif (element.hasBeam && (beam.elems[0] !== element.anchor1.parent || beam.elems[beam.elems.length - 1] !== element.anchor2.parent))\n\t\t\telement.hasBeam = false;\n\n\t\tif (element.hasBeam) {\n\t\t\t// If there is a beam then we don't need to draw anything except the text. The beam could either be above or below.\n\t\t\tvar left = isAbove(beam) ? element.anchor1.x + element.anchor1.w : element.anchor1.x;\n\t\t\telement.yTextPos = heightAtMidpoint(left, element.anchor2.x, beam);\n\t\t\telement.yTextPos += isAbove(beam) ? 3 : -2; // This creates some space between the beam and the number.\n\t\t\telement.xTextPos = xAtMidpoint(left, element.anchor2.x);\n\t\t\telement.top = element.yTextPos + 1;\n\t\t\telement.bottom = element.yTextPos - 2;\n\t\t\tif (isAbove(beam))\n\t\t\t\telement.endingHeightAbove = 4;\n\t\t} else {\n\t\t\t// If there isn't a beam, then we need to draw the bracket and the text. The bracket is always above.\n\t\t\t// The bracket is never lower than the 'a' line, but is 4 pitches above the first and last notes. If there is\n\t\t\t// a tall note in the middle, the bracket is horizontal and above the highest note.\n\t\t\telement.startNote = Math.max(element.anchor1.parent.top, 9) + 4;\n\t\t\telement.endNote = Math.max(element.anchor2.parent.top, 9) + 4;\n\t\t\t// If it starts or ends on a rest, make the beam horizontal\n\t\t\tif (element.anchor1.parent.type === \"rest\" && element.anchor2.parent.type !== \"rest\")\n\t\t\t\telement.startNote = element.endNote;\n\t\t\telse if (element.anchor2.parent.type === \"rest\" && element.anchor1.parent.type !== \"rest\")\n\t\t\t\telement.endNote = element.startNote;\n\t\t\t// See if the middle note is really high.\n\t\t\tvar max = 0;\n\t\t\tfor (var i = 0; i < element.middleElems.length; i++) {\n\t\t\t\tmax = Math.max(max, element.middleElems[i].top);\n\t\t\t}\n\t\t\tmax += 4;\n\t\t\tif (max > element.startNote || max > element.endNote) {\n\t\t\t\telement.startNote = max;\n\t\t\t\telement.endNote = max;\n\t\t\t}\n\t\t\tif (element.flatBeams) {\n\t\t\t\telement.startNote = Math.max(element.startNote, element.endNote);\n\t\t\t\telement.endNote = Math.max(element.startNote, element.endNote);\n\t\t\t}\n\n\t\t\telement.yTextPos = element.startNote + (element.endNote - element.startNote) / 2;\n\t\t\telement.xTextPos = element.anchor1.x + (element.anchor2.x + element.anchor2.w - element.anchor1.x) / 2;\n\t\t\telement.top = element.yTextPos + 1;\n\t\t}\n\t}\n\tdelete element.middleElems;\n\tdelete element.flatBeams;\n}\n\nfunction isAbove(beam) {\n\treturn beam.stemsUp;\n}\n\n// We can't just use the entire beam for the calculation. The range has to be passed in, because the beam might extend into some unrelated notes. for instance, (3_a'f'e'f'2 when L:16\nfunction heightAtMidpoint(startX, endX, beam) {\n\tif (beam.beams.length === 0)\n\t\treturn 0;\n\tbeam = beam.beams[0];\n\tvar midPoint = startX + (endX - startX) / 2;\n\treturn getBarYAt(beam.startX, beam.startY, beam.endX, beam.endY, midPoint);\n}\n\nfunction xAtMidpoint(startX, endX) {\n\treturn startX + (endX - startX) / 2;\n}\n\nmodule.exports = layoutTriplet;\n","var VoiceElement = function VoiceElements() { }\n\nVoiceElement.beginLayout = function (startx, voice) {\n\tvoice.i = 0;\n\tvoice.durationindex = 0;\n\t//this.ii=this.children.length;\n\tvoice.startx = startx;\n\tvoice.minx = startx; // furthest left to where negatively positioned elements are allowed to go\n\tvoice.nextx = startx; // x position where the next element of this voice should be placed assuming no other voices and no fixed width constraints\n\tvoice.spacingduration = 0; // duration left to be laid out in current iteration (omitting additional spacing due to other aspects, such as bars, dots, sharps and flats)\n};\n\nVoiceElement.layoutEnded = function (voice) {\n\treturn (voice.i >= voice.children.length);\n};\n\nVoiceElement.getNextX = function (voice) {\n\treturn Math.max(voice.minx, voice.nextx);\n};\n\n// number of spacing units expected for next positioning\nVoiceElement.getSpacingUnits = function (voice) {\n\treturn Math.sqrt(voice.spacingduration * 8);\n};\n\n// Try to layout the element at index this.i\n// x - position to try to layout the element at\n// spacing - base spacing\n// can't call this function more than once per iteration\nVoiceElement.layoutOneItem = function (x, spacing, voice, minPadding, firstVoice) {\n\tvar child = voice.children[voice.i];\n\tif (!child) return 0;\n\tvar er = x - voice.minx; // available extrawidth to the left\n\tvar pad = voice.durationindex + child.duration > 0 ? minPadding : 0; // only add padding to the items that aren't fixed to the left edge.\n\t// See if this item overlaps the item in the first voice. If firstVoice is undefined then there's nothing to compare.\n\tif (child.abcelem.el_type === \"note\" && !child.abcelem.rest && voice.voicenumber !== 0 && firstVoice) {\n\t\tvar firstChild = firstVoice.children[firstVoice.i];\n\t\t// It overlaps if the either the child's top or bottom is inside the firstChild's or at least within 1\n\t\t// A special case is if the element is on the same line then it can share a note head, if the notehead is the same\n\t\tvar overlaps = firstChild &&\n\t\t\t((child.abcelem.maxpitch <= firstChild.abcelem.maxpitch + 1 && child.abcelem.maxpitch >= firstChild.abcelem.minpitch - 1) ||\n\t\t\t\t(child.abcelem.minpitch <= firstChild.abcelem.maxpitch + 1 && child.abcelem.minpitch >= firstChild.abcelem.minpitch - 1))\n\t\t// See if they can share a note head\n\t\tif (overlaps && child.abcelem.minpitch === firstChild.abcelem.minpitch && child.abcelem.maxpitch === firstChild.abcelem.maxpitch &&\n\t\t\tfirstChild.heads && firstChild.heads.length > 0 && child.heads && child.heads.length > 0 &&\n\t\t\tfirstChild.heads[0].c === child.heads[0].c)\n\t\t\toverlaps = false;\n\t\t// If this note overlaps the note in the first voice and we haven't moved the note yet (this can be called multiple times)\n\t\tif (overlaps) {\n\t\t\t// I think that firstChild should always have at least one note head, but defensively make sure.\n\t\t\t// There was a problem with this being called more than once so if a value is adjusted then it is saved so it is only adjusted once.\n\t\t\tvar firstChildNoteWidth = firstChild.heads && firstChild.heads.length > 0 ? firstChild.heads[0].realWidth : firstChild.fixed.w;\n\t\t\tif (!child.adjustedWidth)\n\t\t\t\tchild.adjustedWidth = firstChildNoteWidth + child.w;\n\t\t\tchild.w = child.adjustedWidth\n\t\t\tfor (var j = 0; j < child.children.length; j++) {\n\t\t\t\tvar relativeChild = child.children[j];\n\t\t\t\tif (relativeChild.name.indexOf(\"accidental\") < 0) {\n\t\t\t\t\tif (!relativeChild.adjustedWidth)\n\t\t\t\t\t\trelativeChild.adjustedWidth = relativeChild.dx + firstChildNoteWidth;\n\t\t\t\t\trelativeChild.dx = relativeChild.adjustedWidth\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t}\n\tvar extraWidth = getExtraWidth(child, pad);\n\tif (er < extraWidth) { // shift right by needed amount\n\t\t// There's an exception if a bar element is after a Part element, there is no shift.\n\t\tif (voice.i === 0 || child.type !== 'bar' || (voice.children[voice.i - 1].type !== 'part' && voice.children[voice.i - 1].type !== 'tempo'))\n\t\t\tx += extraWidth - er;\n\t}\n\tchild.setX(x);\n\n\tvoice.spacingduration = child.duration;\n\t//update minx\n\tvoice.minx = x + getMinWidth(child); // add necessary layout space\n\tif (voice.i !== voice.children.length - 1) voice.minx += child.minspacing; // add minimumspacing except on last elem\n\n\tthis.updateNextX(x, spacing, voice);\n\n\t// contribute to staff y position\n\t//this.staff.top = Math.max(child.top,this.staff.top);\n\t//this.staff.bottom = Math.min(child.bottom,this.staff.bottom);\n\n\treturn x; // where we end up having placed the child\n};\n\nVoiceElement.shiftRight = function (dx, voice) {\n\tvar child = voice.children[voice.i];\n\tif (!child) return;\n\tchild.setX(child.x + dx);\n\tvoice.minx += dx;\n\tvoice.nextx += dx;\n};\n\n// call when spacingduration has been updated\nVoiceElement.updateNextX = function (x, spacing, voice) {\n\tvoice.nextx = x + (spacing * this.getSpacingUnits(voice));\n};\n\nVoiceElement.updateIndices = function (voice) {\n\tif (!this.layoutEnded(voice)) {\n\t\tvoice.durationindex += voice.children[voice.i].duration;\n\t\tif (voice.children[voice.i].type === 'bar') voice.durationindex = Math.round(voice.durationindex * 64) / 64; // everytime we meet a barline, do rounding to nearest 64th\n\t\tvoice.i++;\n\t}\n};\n\nfunction getExtraWidth(child, minPadding) { // space needed to the left of the note\n\tvar padding = 0;\n\tif (child.type === 'note' || child.type === 'bar')\n\t\tpadding = minPadding;\n\treturn -child.extraw + padding;\n}\n\nfunction getMinWidth(child) { // absolute space taken to the right of the note\n\treturn child.w;\n}\n\nmodule.exports = VoiceElement;\n","var layoutBeam = require('./beam');\nvar getBarYAt = require('./get-bar-y-at');\nvar layoutTriplet = require('./triplet');\n\nvar layoutVoice = function (voice) {\n\tfor (var i = 0; i < voice.beams.length; i++) {\n\t\tif (voice.beams[i].type === 'BeamElem') {\n\t\t\tlayoutBeam(voice.beams[i]);\n\t\t\tmoveDecorations(voice.beams[i]);\n\t\t\t// The above will change the top and bottom of the abselem children, so see if we need to expand our range.\n\t\t\tfor (var j = 0; j < voice.beams[i].elems.length; j++) {\n\t\t\t\tvoice.adjustRange(voice.beams[i].elems[j]);\n\t\t\t}\n\t\t}\n\t}\n\tvoice.staff.specialY.chordLines = setLaneForChord(voice.children);\n\n\t// Now we can layout the triplets\n\tfor (i = 0; i < voice.otherchildren.length; i++) {\n\t\tvar child = voice.otherchildren[i];\n\t\tif (child.type === 'TripletElem') {\n\t\t\tlayoutTriplet(child);\n\t\t\tvoice.adjustRange(child);\n\t\t}\n\t}\n\tvoice.staff.top = Math.max(voice.staff.top, voice.top);\n\tvoice.staff.bottom = Math.min(voice.staff.bottom, voice.bottom);\n};\n\nfunction moveDecorations(beam) {\n\tvar padding = 1.5; // This is the vertical padding between elements, in pitches.\n\tfor (var ch = 0; ch < beam.elems.length; ch++) {\n\t\tvar child = beam.elems[ch];\n\t\tif (child.top) {\n\t\t\t// We now know where the ornaments should have been placed, so move them if they would overlap.\n\t\t\tvar top = yAtNote(child, beam);\n\t\t\tfor (var i = 0; i < child.children.length; i++) {\n\t\t\t\tvar el = child.children[i];\n\t\t\t\tif (el.klass === 'ornament' && el.position !== 'below') {\n\t\t\t\t\tif (el.bottom - padding < top) {\n\t\t\t\t\t\tvar distance = top - el.bottom + padding; // Find the distance that it needs to move and add a little margin so the element doesn't touch the beam.\n\t\t\t\t\t\tel.bottom += distance;\n\t\t\t\t\t\tel.top += distance;\n\t\t\t\t\t\tel.pitch += distance;\n\t\t\t\t\t\ttop = child.top = el.top;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction placeInLane(rightMost, relElem) {\n\t// These items are centered so figure the coordinates accordingly.\n\t// The font reports some extra space so the margin is built in.\n\tvar xCoords = relElem.getChordDim();\n\tif (xCoords) {\n\t\tfor (var i = 0; i < rightMost.length; i++) {\n\t\t\tvar fits = rightMost[i] < xCoords.left;\n\t\t\tif (fits) {\n\t\t\t\tif (i > 0)\n\t\t\t\t\trelElem.putChordInLane(i);\n\t\t\t\trightMost[i] = xCoords.right;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t// If we didn't return early, then we need a new row\n\t\trightMost.push(xCoords.right);\n\t\trelElem.putChordInLane(rightMost.length - 1);\n\t}\n}\n\nfunction setLaneForChord(absElems) {\n\t// Criteria:\n\t// 1) lane numbers start from the bottom so that as many items as possible are in lane 0, closest to the music.\n\t// 2) a chord can have more than one line (for instance \"C\\nD\") each line is a lane.\n\t// 3) if two adjoining items would touch then push the second one to the next lane.\n\t// 4) use as many lanes as is necessary to get everything to not touch.\n\t// 5) leave a margin between items, so use another lane if the chords would have less than a character's width.\n\t// 6) if the chord only has one character, allow it to be closer than if the chord has more than one character.\n\tvar rightMostAbove = [0];\n\tvar rightMostBelow = [0];\n\tvar i;\n\tvar j;\n\tvar relElem;\n\tfor (i = 0; i < absElems.length; i++) {\n\t\tfor (j = 0; j < absElems[i].children.length; j++) {\n\t\t\trelElem = absElems[i].children[j];\n\t\t\tif (relElem.chordHeightAbove) {\n\t\t\t\tplaceInLane(rightMostAbove, relElem);\n\t\t\t}\n\t\t}\n\t\tfor (j = absElems[i].children.length - 1; j >= 0; j--) {\n\t\t\trelElem = absElems[i].children[j];\n\t\t\tif (relElem.chordHeightBelow) {\n\t\t\t\tplaceInLane(rightMostBelow, relElem);\n\t\t\t}\n\t\t}\n\t}\n\t// If we used a second line, then we need to go back and set the first lines.\n\t// Also we need to flip the indexes of the names so that we can count from the top line.\n\tif (rightMostAbove.length > 1 || rightMostBelow.length > 1)\n\t\tsetLane(absElems, rightMostAbove.length, rightMostBelow.length);\n\treturn { above: rightMostAbove.length, below: rightMostBelow.length };\n}\n\nfunction numAnnotationsBelow(absElem) {\n\tvar count = 0;\n\tfor (var j = 0; j < absElem.children.length; j++) {\n\t\tvar relElem = absElem.children[j];\n\t\tif (relElem.chordHeightBelow)\n\t\t\tcount++;\n\t}\n\treturn count;\n}\n\nfunction setLane(absElems, numLanesAbove, numLanesBelow) {\n\tfor (var i = 0; i < absElems.length; i++) {\n\t\tvar below = numAnnotationsBelow(absElems[i]);\n\t\tfor (var j = 0; j < absElems[i].children.length; j++) {\n\t\t\tvar relElem = absElems[i].children[j];\n\t\t\tif (relElem.chordHeightAbove) {\n\t\t\t\trelElem.invertLane(numLanesAbove);\n\t\t\t\t// } else if (relElem.chordHeightBelow) {\n\t\t\t\t// \trelElem.invertLane(below);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction yAtNote(element, beam) {\n\tbeam = beam.beams[0];\n\treturn getBarYAt(beam.startX, beam.startY, beam.endX, beam.endY, element.x);\n}\n\n\nmodule.exports = layoutVoice;\n","//    abc_renderer.js: API to render to SVG/Raphael/whatever rendering engine\n\n/*global Math */\n\nvar spacing = require('./helpers/spacing');\nvar Svg = require('./svg');\n\n/**\n * Implements the API for rendering ABCJS Abstract Rendering Structure to a canvas/paper (e.g. SVG, Raphael, etc)\n * @param {Object} paper\n */\nvar Renderer = function (paper) {\n\tthis.paper = new Svg(paper);\n\tthis.controller = null;\n\n\tthis.space = 3 * spacing.SPACE;\n\tthis.padding = {}; // renderer's padding is managed by the controller\n\tthis.reset();\n\tthis.firefox112 = navigator.userAgent.indexOf('Firefox/112.0') >= 0\n};\n\nRenderer.prototype.reset = function () {\n\n\tthis.paper.clear();\n\tthis.y = 0;\n\tthis.abctune = null;\n\tthis.path = null;\n\tthis.isPrint = false;\n\tthis.lineThickness = 0;\n\tthis.initVerticalSpace();\n};\n\nRenderer.prototype.newTune = function (abcTune) {\n\tthis.abctune = abcTune; // TODO-PER: this is just to get the font info.\n\tthis.setVerticalSpace(abcTune.formatting);\n\t//this.measureNumber = null;\n\t//this.noteNumber = null;\n\tthis.isPrint = abcTune.media === 'print';\n\tthis.setPadding(abcTune);\n};\n\nRenderer.prototype.setLineThickness = function (lineThickness) {\n\tthis.lineThickness = lineThickness\n};\n\nRenderer.prototype.setPaddingOverride = function (params) {\n\tthis.paddingOverride = {\n\t\ttop: params.paddingtop, bottom: params.paddingbottom,\n\t\tright: params.paddingright, left: params.paddingleft\n\t};\n};\n\nRenderer.prototype.setPadding = function (abctune) {\n\t// If the padding is set in the tune, then use that.\n\t// Otherwise, if the padding is set in the override, use that.\n\t// Otherwise, use the defaults (there are a different set of defaults for screen and print.)\n\tfunction setPaddingVariable(self, paddingKey, formattingKey, printDefault, screenDefault) {\n\t\tif (abctune.formatting[formattingKey] !== undefined)\n\t\t\tself.padding[paddingKey] = abctune.formatting[formattingKey];\n\t\telse if (self.paddingOverride[paddingKey] !== undefined)\n\t\t\tself.padding[paddingKey] = self.paddingOverride[paddingKey];\n\t\telse if (self.isPrint)\n\t\t\tself.padding[paddingKey] = printDefault;\n\t\telse\n\t\t\tself.padding[paddingKey] = screenDefault;\n\t}\n\t// 1cm x 0.393701in/cm x 72pt/in x 1.33px/pt = 38px\n\t// 1.8cm x 0.393701in/cm x 72pt/in x 1.33px/pt = 68px\n\tsetPaddingVariable(this, 'top', 'topmargin', 38, 15);\n\tsetPaddingVariable(this, 'bottom', 'botmargin', 38, 15);\n\tsetPaddingVariable(this, 'left', 'leftmargin', 68, 15);\n\tsetPaddingVariable(this, 'right', 'rightmargin', 68, 15);\n};\n\n/**\n * Some of the items on the page are not scaled, so adjust them in the opposite direction of scaling to cancel out the scaling.\n * @param {float} scale\n */\nRenderer.prototype.adjustNonScaledItems = function (scale) {\n\tthis.padding.top /= scale;\n\tthis.padding.bottom /= scale;\n\tthis.padding.left /= scale;\n\tthis.padding.right /= scale;\n\tthis.abctune.formatting.headerfont.size /= scale;\n\tthis.abctune.formatting.footerfont.size /= scale;\n};\n\n/**\n * Set the the values for all the configurable vertical space options.\n */\nRenderer.prototype.initVerticalSpace = function () {\n\t// conversion: 37.7953 = conversion factor for cm to px.\n\t// All of the following values are in px.\n\tthis.spacing = {\n\t\tcomposer: 7.56, // Set the vertical space above the composer.\n\t\tgraceBefore: 8.67, // Define the space before, inside and after the grace notes.\n\t\tgraceInside: 10.67,\n\t\tgraceAfter: 16,\n\t\tinfo: 0, // Set the vertical space above the infoline.\n\t\tlineSkipFactor: 1.1, // Set the factor for spacing between lines of text. (multiply this by the font size)\n\t\tmusic: 7.56, // Set the vertical space above the first staff.\n\t\tparagraphSkipFactor: 0.4, // Set the factor for spacing between text paragraphs. (multiply this by the font size)\n\t\tparts: 11.33, // Set the vertical space above a new part.\n\t\tslurHeight: 1.0, // Set the slur height factor.\n\t\tstaffSeparation: 61.33, // Do not put a staff system closer than <unit> from the previous system.\n\t\tstaffTopMargin: 0,\n\t\tstemHeight: 26.67 + 10, // Set the stem height.\n\t\tsubtitle: 3.78, // Set the vertical space above the subtitle.\n\t\tsystemStaffSeparation: 48, // Do not place the staves closer than <unit> inside a system. * This values applies to all staves when in the tune header. Otherwise, it applies to the next staff\n\t\ttext: 18.9, // Set the vertical space above the history.\n\t\ttitle: 7.56, // Set the vertical space above the title.\n\t\ttop: 30.24, //Set the vertical space above the tunes and on the top of the continuation pages.\n\t\tvocal: 0, // Set the vertical space above the lyrics under the staves.\n\t\twords: 0 // Set the vertical space above the lyrics at the end of the tune.\n\t};\n\t/*\n\tTODO-PER: Handle the x-coordinate spacing items, too.\nmaxshrink <float>Default: 0.65\nSet how much to compress horizontally when music line breaks\nare automatic.\n<float> must be between 0 (natural spacing)\nand 1 (max shrinking).\n\n// This next value is used to compute the natural spacing of\n// the notes. The base spacing of the crotchet is always\n// 40 pts. When the duration of a note type is twice the\n// duration of an other note type, its spacing is multiplied\n// by this factor.\n// The default value causes the note spacing to be multiplied\n// by 2 when its duration is multiplied by 4, i.e. the\n// space of the semibreve is 80 pts and the space of the\n// semiquaver is 20 pts.\n// Setting this value to 1 sets all note spacing to 40 pts.\nnoteSpacingFactor: 1.414, // Set the note spacing factor to <float> (range 1..2).\n\nscale <float> Default: 0.75 Set the page scale factor. Note that the header and footer are not scaled.\n\nstretchlast <float>Default: 0.8\nStretch the last music line of a tune when it exceeds\nthe <float> fraction of the page width.\n<float> range is 0.0 to 1.0.\n\t */\n};\n\nRenderer.prototype.setVerticalSpace = function (formatting) {\n\t// conversion from pts to px 4/3\n\tif (formatting.staffsep !== undefined)\n\t\tthis.spacing.staffSeparation = formatting.staffsep * 4 / 3;\n\tif (formatting.composerspace !== undefined)\n\t\tthis.spacing.composer = formatting.composerspace * 4 / 3;\n\tif (formatting.partsspace !== undefined)\n\t\tthis.spacing.parts = formatting.partsspace * 4 / 3;\n\tif (formatting.textspace !== undefined)\n\t\tthis.spacing.text = formatting.textspace * 4 / 3;\n\tif (formatting.musicspace !== undefined)\n\t\tthis.spacing.music = formatting.musicspace * 4 / 3;\n\tif (formatting.titlespace !== undefined)\n\t\tthis.spacing.title = formatting.titlespace * 4 / 3;\n\tif (formatting.sysstaffsep !== undefined)\n\t\tthis.spacing.systemStaffSeparation = formatting.sysstaffsep * 4 / 3;\n\tif (formatting.stafftopmargin !== undefined)\n\t\tthis.spacing.staffTopMargin = formatting.stafftopmargin * 4 / 3;\n\tif (formatting.subtitlespace !== undefined)\n\t\tthis.spacing.subtitle = formatting.subtitlespace * 4 / 3;\n\tif (formatting.topspace !== undefined)\n\t\tthis.spacing.top = formatting.topspace * 4 / 3;\n\tif (formatting.vocalspace !== undefined)\n\t\tthis.spacing.vocal = formatting.vocalspace * 4 / 3;\n\tif (formatting.wordsspace !== undefined)\n\t\tthis.spacing.words = formatting.wordsspace * 4 / 3;\n};\n\n\n/**\n * Calculates the y for a given pitch value (relative to the stave the renderer is currently printing)\n * @param {number} ofs pitch value (bottom C on a G clef = 0, D=1, etc.)\n */\nRenderer.prototype.calcY = function (ofs) {\n\treturn this.y - ofs * spacing.STEP;\n};\n\nRenderer.prototype.moveY = function (em, numLines) {\n\tif (numLines === undefined) numLines = 1;\n\tthis.y += em * numLines;\n};\n\nRenderer.prototype.absolutemoveY = function (y) {\n\tthis.y = y;\n};\n\nmodule.exports = Renderer;\n","//    abc_voice_element.js: Definition of the VoiceElement class.\n\n/*global module */\n\nvar svgNS = \"http://www.w3.org/2000/svg\";\n\nfunction Svg(wrapper) {\n\tthis.svg = createSvg();\n\tthis.currentGroup = [];\n\twrapper.appendChild(this.svg);\n}\n\nSvg.prototype.clear = function () {\n\tif (this.svg) {\n\t\tvar wrapper = this.svg.parentNode;\n\t\tthis.svg = createSvg();\n\t\tthis.currentGroup = [];\n\t\tif (wrapper) {\n\t\t\t// TODO-PER: If the wrapper is not present, then the underlying div was pulled out from under this instance. It's possible that is still useful (for creating the music off page?)\n\t\t\twrapper.innerHTML = \"\";\n\t\t\twrapper.appendChild(this.svg);\n\t\t}\n\t}\n};\n\nSvg.prototype.setTitle = function (title) {\n\tvar titleEl = document.createElement(\"title\");\n\tvar titleNode = document.createTextNode(title);\n\ttitleEl.appendChild(titleNode);\n\tthis.svg.insertBefore(titleEl, this.svg.firstChild);\n};\n\nSvg.prototype.setResponsiveWidth = function (w, h) {\n\t// this technique is from: http://thenewcode.com/744/Make-SVG-Responsive, thx to https://github.com/iantresman\n\tthis.svg.setAttribute(\"viewBox\", \"0 0 \" + w + \" \" + h);\n\tthis.svg.setAttribute(\"preserveAspectRatio\", \"xMinYMin meet\");\n\tthis.svg.removeAttribute(\"height\");\n\tthis.svg.removeAttribute(\"width\");\n\tthis.svg.style['display'] = \"inline-block\";\n\tthis.svg.style['position'] = \"absolute\";\n\tthis.svg.style['top'] = \"0\";\n\tthis.svg.style['left'] = \"0\";\n\n\tif (this.svg.parentNode) {\n\t\tvar cls = this.svg.parentNode.getAttribute(\"class\");\n\t\tif (!cls)\n\t\t\tthis.svg.parentNode.setAttribute(\"class\", \"abcjs-container\");\n\t\telse if (cls.indexOf(\"abcjs-container\") < 0)\n\t\t\tthis.svg.parentNode.setAttribute(\"class\", cls + \" abcjs-container\");\n\t\tthis.svg.parentNode.style['display'] = \"inline-block\";\n\t\tthis.svg.parentNode.style['position'] = \"relative\";\n\t\tthis.svg.parentNode.style['width'] = \"100%\";\n\t\t// PER: I changed the padding from 100% to this through trial and error.\n\t\t// The example was using a square image, but this music might be either wider or taller.\n\t\tvar padding = h / w * 100;\n\t\tthis.svg.parentNode.style['padding-bottom'] = padding + \"%\";\n\t\tthis.svg.parentNode.style['vertical-align'] = \"middle\";\n\t\tthis.svg.parentNode.style['overflow'] = \"hidden\";\n\t}\n};\n\nSvg.prototype.setSize = function (w, h) {\n\tthis.svg.setAttribute('width', w);\n\tthis.svg.setAttribute('height', h);\n};\n\nSvg.prototype.setAttribute = function (attr, value) {\n\tthis.svg.setAttribute(attr, value);\n};\n\nSvg.prototype.setScale = function (scale) {\n\tif (scale !== 1) {\n\t\tthis.svg.style.transform = \"scale(\" + scale + \",\" + scale + \")\";\n\t\tthis.svg.style['-ms-transform'] = \"scale(\" + scale + \",\" + scale + \")\";\n\t\tthis.svg.style['-webkit-transform'] = \"scale(\" + scale + \",\" + scale + \")\";\n\t\tthis.svg.style['transform-origin'] = \"0 0\";\n\t\tthis.svg.style['-ms-transform-origin-x'] = \"0\";\n\t\tthis.svg.style['-ms-transform-origin-y'] = \"0\";\n\t\tthis.svg.style['-webkit-transform-origin-x'] = \"0\";\n\t\tthis.svg.style['-webkit-transform-origin-y'] = \"0\";\n\t} else {\n\t\tthis.svg.style.transform = \"\";\n\t\tthis.svg.style['-ms-transform'] = \"\";\n\t\tthis.svg.style['-webkit-transform'] = \"\";\n\t}\n};\n\nSvg.prototype.insertStyles = function (styles) {\n\tvar el = document.createElementNS(svgNS, \"style\");\n\tel.textContent = styles;\n\tthis.svg.insertBefore(el, this.svg.firstChild); // prepend is not available on older browsers.\n\t//\tthis.svg.prepend(el);\n};\n\nSvg.prototype.setParentStyles = function (attr) {\n\t// This is needed to get the size right when there is scaling involved.\n\tfor (var key in attr) {\n\t\tif (attr.hasOwnProperty(key)) {\n\t\t\tif (this.svg.parentNode)\n\t\t\t\tthis.svg.parentNode.style[key] = attr[key];\n\t\t}\n\t}\n\t// This is the last thing that gets called, so delete the temporary SVG if one was created\n\tif (this.dummySvg) {\n\t\tvar body = document.querySelector('body');\n\t\tbody.removeChild(this.dummySvg);\n\t\tthis.dummySvg = null;\n\t}\n\n};\n\nfunction constructHLine(x1, y1, x2) {\n\tvar len = x2 - x1;\n\treturn \"M \" + x1 + \" \" + y1 +\n\t\t\" l \" + len + ' ' + 0 +\n\t\t\" l \" + 0 + \" \" + 1 + \" \" +\n\t\t\" l \" + (-len) + \" \" + 0 + \" \" + \" z \";\n}\n\nfunction constructVLine(x1, y1, y2) {\n\tvar len = y2 - y1;\n\treturn \"M \" + x1 + \" \" + y1 +\n\t\t\" l \" + 0 + ' ' + len +\n\t\t\" l \" + 1 + \" \" + 0 + \" \" +\n\t\t\" l \" + 0 + \" \" + (-len) + \" \" + \" z \";\n}\n\nSvg.prototype.rect = function (attr) {\n\t// This uses path instead of rect so that it can be hollow and the color changes with \"fill\" instead of \"stroke\".\n\tvar lines = [];\n\tvar x1 = attr.x;\n\tvar y1 = attr.y;\n\tvar x2 = attr.x + attr.width;\n\tvar y2 = attr.y + attr.height;\n\tlines.push(constructHLine(x1, y1, x2));\n\tlines.push(constructHLine(x1, y2, x2));\n\tlines.push(constructVLine(x2, y1, y2));\n\tlines.push(constructVLine(x1, y2, y1));\n\n\treturn this.path({ path: lines.join(\" \"), stroke: \"none\", \"data-name\": attr[\"data-name\"] });\n};\n\nSvg.prototype.dottedLine = function (attr) {\n\tvar el = document.createElementNS(svgNS, 'line');\n\tel.setAttribute(\"x1\", attr.x1);\n\tel.setAttribute(\"x2\", attr.x2);\n\tel.setAttribute(\"y1\", attr.y1);\n\tel.setAttribute(\"y2\", attr.y2);\n\tel.setAttribute(\"stroke\", attr.stroke);\n\tel.setAttribute(\"stroke-dasharray\", \"5,5\");\n\tthis.svg.insertBefore(el, this.svg.firstChild);\n};\n\nSvg.prototype.rectBeneath = function (attr) {\n\tvar el = document.createElementNS(svgNS, 'rect');\n\tel.setAttribute(\"x\", attr.x);\n\tel.setAttribute(\"width\", attr.width);\n\tel.setAttribute(\"y\", attr.y);\n\tel.setAttribute(\"height\", attr.height);\n\tif (attr.stroke)\n\t\tel.setAttribute(\"stroke\", attr.stroke);\n\tif (attr['stroke-opacity'])\n\t\tel.setAttribute(\"stroke-opacity\", attr['stroke-opacity']);\n\tif (attr.fill)\n\t\tel.setAttribute(\"fill\", attr.fill);\n\tif (attr['fill-opacity'])\n\t\tel.setAttribute(\"fill-opacity\", attr['fill-opacity']);\n\tthis.svg.insertBefore(el, this.svg.firstChild);\n};\n\nSvg.prototype.text = function (text, attr, target) {\n\tvar el = document.createElementNS(svgNS, 'text');\n\tel.setAttribute(\"stroke\", \"none\");\n\tfor (var key in attr) {\n\t\tif (attr.hasOwnProperty(key)) {\n\t\t\tel.setAttribute(key, attr[key]);\n\t\t}\n\t}\n\tvar lines = (\"\" + text).split(\"\\n\");\n\tfor (var i = 0; i < lines.length; i++) {\n\t\tvar line = document.createElementNS(svgNS, 'tspan');\n\t\tline.setAttribute(\"x\", attr.x ? attr.x : 0);\n\t\tif (i !== 0)\n\t\t\tline.setAttribute(\"dy\", \"1.2em\");\n\t\tif (lines[i].indexOf(\"\\x03\") !== -1) {\n\t\t\tvar parts = lines[i].split('\\x03')\n\t\t\tline.textContent = parts[0];\n\t\t\tif (parts[1]) {\n\t\t\t\tvar ts2 = document.createElementNS(svgNS, 'tspan');\n\t\t\t\tts2.setAttribute(\"dy\", \"-0.3em\");\n\t\t\t\tts2.setAttribute(\"style\", \"font-size:0.7em\");\n\t\t\t\tts2.textContent = parts[1];\n\t\t\t\tline.appendChild(ts2);\n\t\t\t}\n\t\t\tif (parts[2]) {\n\t\t\t\tvar dist = parts[1] ? \"0.4em\" : \"0.1em\";\n\t\t\t\tvar ts3 = document.createElementNS(svgNS, 'tspan');\n\t\t\t\tts3.setAttribute(\"dy\", dist);\n\t\t\t\tts3.setAttribute(\"style\", \"font-size:0.7em\");\n\t\t\t\tts3.textContent = parts[2];\n\t\t\t\tline.appendChild(ts3);\n\t\t\t}\n\t\t} else\n\t\t\tline.textContent = lines[i];\n\t\tel.appendChild(line);\n\t}\n\tif (target)\n\t\ttarget.appendChild(el);\n\telse\n\t\tthis.append(el);\n\treturn el;\n};\n\nSvg.prototype.richTextLine = function (phrases, x, y, klass, anchor, target) {\n\tvar el = document.createElementNS(svgNS, 'text');\n\tel.setAttribute(\"stroke\", \"none\");\n\tel.setAttribute(\"class\", klass);\n\tel.setAttribute(\"x\", x);\n\tel.setAttribute(\"y\", y);\n\tel.setAttribute(\"text-anchor\", anchor);\n\tel.setAttribute(\"dominant-baseline\", \"middle\");\n\n\tfor (var i = 0; i < phrases.length; i++) {\n\t\tvar phrase = phrases[i]\n\t\tvar tspan = document.createElementNS(svgNS, 'tspan');\n\t\tvar attrs = Object.keys(phrase.attrs)\n\t\tfor (var j = 0; j < attrs.length; j++) {\n\t\t\tvar value = phrase.attrs[attrs[j]]\n\t\t\tif (value !== '')\n\t\t\t\ttspan.setAttribute(attrs[j], value)\n\t\t}\n\t\ttspan.textContent = phrase.content;\n\n\t\tel.appendChild(tspan);\n\t}\n\n\tif (target)\n\t\ttarget.appendChild(el);\n\telse\n\t\tthis.append(el);\n\treturn el;\n}\n\nSvg.prototype.guessWidth = function (text, attr) {\n\tvar svg = this.createDummySvg();\n\tvar el = this.text(text, attr, svg);\n\tvar size;\n\ttry {\n\t\tsize = el.getBBox();\n\t\tif (isNaN(size.height) || !size.height) // TODO-PER: I don't think this can happen unless there isn't a browser at all.\n\t\t\tsize = { width: attr['font-size'] / 2, height: attr['font-size'] + 2 }; // Just a wild guess.\n\t\telse\n\t\t\tsize = { width: size.width, height: size.height };\n\t} catch (ex) {\n\t\tsize = { width: attr['font-size'] / 2, height: attr['font-size'] + 2 }; // Just a wild guess.\n\t}\n\tsvg.removeChild(el);\n\treturn size;\n};\n\nSvg.prototype.createDummySvg = function () {\n\tif (!this.dummySvg) {\n\t\tthis.dummySvg = createSvg();\n\t\tvar styles = [\n\t\t\t\"display: block !important;\",\n\t\t\t\"height: 1px;\",\n\t\t\t\"width: 1px;\",\n\t\t\t\"position: absolute;\"\n\t\t];\n\t\tthis.dummySvg.setAttribute('style', styles.join(\"\"));\n\t\tvar body = document.querySelector('body');\n\t\tbody.appendChild(this.dummySvg);\n\t}\n\n\treturn this.dummySvg;\n};\n\nvar sizeCache = {};\n\nSvg.prototype.getTextSize = function (text, attr, el) {\n\tif (typeof text === 'number')\n\t\ttext = '' + text;\n\tif (!text || text.match(/^\\s+$/))\n\t\treturn { width: 0, height: 0 };\n\tvar key;\n\tif (text.length < 20) {\n\t\t// The short text tends to be repetitive and getBBox is really slow, so lets cache.\n\t\tkey = text + JSON.stringify(attr);\n\t\tif (sizeCache[key])\n\t\t\treturn sizeCache[key];\n\t}\n\tvar removeLater = !el;\n\tif (!el)\n\t\tel = this.text(text, attr);\n\tvar size;\n\ttry {\n\t\tsize = el.getBBox();\n\t\tif (isNaN(size.height) || !size.height)\n\t\t\tsize = this.guessWidth(text, attr);\n\t\telse\n\t\t\tsize = { width: size.width, height: size.height };\n\t} catch (ex) {\n\t\tsize = this.guessWidth(text, attr);\n\t}\n\tif (removeLater) {\n\t\tif (this.currentGroup.length > 0)\n\t\t\tthis.currentGroup[0].removeChild(el);\n\t\telse\n\t\t\tthis.svg.removeChild(el);\n\t}\n\tif (key)\n\t\tsizeCache[key] = size;\n\treturn size;\n};\n\nSvg.prototype.openGroup = function (options) {\n\toptions = options ? options : {};\n\tvar el = document.createElementNS(svgNS, \"g\");\n\tif (options.klass)\n\t\tel.setAttribute(\"class\", options.klass);\n\tif (options.fill)\n\t\tel.setAttribute(\"fill\", options.fill);\n\tif (options.stroke)\n\t\tel.setAttribute(\"stroke\", options.stroke);\n\tif (options['data-name'])\n\t\tel.setAttribute(\"data-name\", options['data-name']);\n\n\tif (options.prepend)\n\t\tthis.prepend(el);\n\telse\n\t\tthis.append(el);\n\tthis.currentGroup.unshift(el);\n\treturn el;\n};\n\nSvg.prototype.closeGroup = function () {\n\tvar g = this.currentGroup.shift();\n\tif (g && g.children.length === 0) {\n\t\t// If nothing was added to the group it is because all the elements were invisible. We don't need the group, then.\n\t\tg.parentElement.removeChild(g);\n\t\treturn null;\n\t}\n\treturn g;\n};\n\nSvg.prototype.path = function (attr) {\n\tvar el = document.createElementNS(svgNS, \"path\");\n\tfor (var key in attr) {\n\t\tif (attr.hasOwnProperty(key)) {\n\t\t\tif (key === 'path')\n\t\t\t\tel.setAttributeNS(null, 'd', attr.path);\n\t\t\telse if (key === 'klass')\n\t\t\t\tel.setAttributeNS(null, \"class\", attr[key]);\n\t\t\telse if (attr[key] !== undefined)\n\t\t\t\tel.setAttributeNS(null, key, attr[key]);\n\t\t}\n\t}\n\tthis.append(el);\n\treturn el;\n};\n\nSvg.prototype.pathToBack = function (attr) {\n\tvar el = document.createElementNS(svgNS, \"path\");\n\tfor (var key in attr) {\n\t\tif (attr.hasOwnProperty(key)) {\n\t\t\tif (key === 'path')\n\t\t\t\tel.setAttributeNS(null, 'd', attr.path);\n\t\t\telse if (key === 'klass')\n\t\t\t\tel.setAttributeNS(null, \"class\", attr[key]);\n\t\t\telse\n\t\t\t\tel.setAttributeNS(null, key, attr[key]);\n\t\t}\n\t}\n\tthis.prepend(el);\n\treturn el;\n};\n\nSvg.prototype.lineToBack = function (attr) {\n\tvar el = document.createElementNS(svgNS, 'line');\n\tvar keys = Object.keys(attr)\n\tfor (var i = 0; i < keys.length; i++)\n\t\tel.setAttribute(keys[i], attr[keys[i]]);\n\tthis.prepend(el);\n\treturn el;\n};\n\n\nSvg.prototype.append = function (el) {\n\tif (this.currentGroup.length > 0)\n\t\tthis.currentGroup[0].appendChild(el);\n\telse\n\t\tthis.svg.appendChild(el);\n};\n\nSvg.prototype.prepend = function (el) {\n\t// The entire group is prepended, so don't prepend the individual elements.\n\tif (this.currentGroup.length > 0)\n\t\tthis.currentGroup[0].appendChild(el);\n\telse\n\t\tthis.svg.insertBefore(el, this.svg.firstChild);\n};\n\nSvg.prototype.setAttributeOnElement = function (el, attr) {\n\tfor (var key in attr) {\n\t\tif (attr.hasOwnProperty(key)) {\n\t\t\tel.setAttributeNS(null, key, attr[key]);\n\t\t}\n\t}\n};\n\nSvg.prototype.moveElementToChild = function (parent, child) {\n\tparent.appendChild(child);\n};\n\nfunction createSvg() {\n\tvar svg = document.createElementNS(svgNS, \"svg\");\n\tsvg.setAttributeNS(\"http://www.w3.org/2000/xmlns/\", \"xmlns:xlink\", \"http://www.w3.org/1999/xlink\");\n\tsvg.setAttribute('role', 'img');    // for accessibility\n\tsvg.setAttribute('fill', 'currentColor');    // for automatically picking up dark mode and high contrast\n\tsvg.setAttribute('stroke', 'currentColor');    // for automatically picking up dark mode and high contrast\n\treturn svg;\n}\n\n\nmodule.exports = Svg;\n","var version = '6.4.1';\n\nmodule.exports = version;\n","/*\nCopyright (c) 2012-2014 Chris Pettitt\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n*/\n\nmodule.exports = {\n  graphlib: require(\"./lib/graphlib\"),\n\n  layout: require(\"./lib/layout\"),\n  debug: require(\"./lib/debug\"),\n  util: {\n    time: require(\"./lib/util\").time,\n    notime: require(\"./lib/util\").notime\n  },\n  version: require(\"./lib/version\")\n};\n","\"use strict\";\n\nvar _ = require(\"./lodash\");\nvar greedyFAS = require(\"./greedy-fas\");\n\nmodule.exports = {\n  run: run,\n  undo: undo\n};\n\nfunction run(g) {\n  var fas = (g.graph().acyclicer === \"greedy\"\n    ? greedyFAS(g, weightFn(g))\n    : dfsFAS(g));\n  _.forEach(fas, function(e) {\n    var label = g.edge(e);\n    g.removeEdge(e);\n    label.forwardName = e.name;\n    label.reversed = true;\n    g.setEdge(e.w, e.v, label, _.uniqueId(\"rev\"));\n  });\n\n  function weightFn(g) {\n    return function(e) {\n      return g.edge(e).weight;\n    };\n  }\n}\n\nfunction dfsFAS(g) {\n  var fas = [];\n  var stack = {};\n  var visited = {};\n\n  function dfs(v) {\n    if (_.has(visited, v)) {\n      return;\n    }\n    visited[v] = true;\n    stack[v] = true;\n    _.forEach(g.outEdges(v), function(e) {\n      if (_.has(stack, e.w)) {\n        fas.push(e);\n      } else {\n        dfs(e.w);\n      }\n    });\n    delete stack[v];\n  }\n\n  _.forEach(g.nodes(), dfs);\n  return fas;\n}\n\nfunction undo(g) {\n  _.forEach(g.edges(), function(e) {\n    var label = g.edge(e);\n    if (label.reversed) {\n      g.removeEdge(e);\n\n      var forwardName = label.forwardName;\n      delete label.reversed;\n      delete label.forwardName;\n      g.setEdge(e.w, e.v, label, forwardName);\n    }\n  });\n}\n","var _ = require(\"./lodash\");\nvar util = require(\"./util\");\n\nmodule.exports = addBorderSegments;\n\nfunction addBorderSegments(g) {\n  function dfs(v) {\n    var children = g.children(v);\n    var node = g.node(v);\n    if (children.length) {\n      _.forEach(children, dfs);\n    }\n\n    if (_.has(node, \"minRank\")) {\n      node.borderLeft = [];\n      node.borderRight = [];\n      for (var rank = node.minRank, maxRank = node.maxRank + 1;\n        rank < maxRank;\n        ++rank) {\n        addBorderNode(g, \"borderLeft\", \"_bl\", v, node, rank);\n        addBorderNode(g, \"borderRight\", \"_br\", v, node, rank);\n      }\n    }\n  }\n\n  _.forEach(g.children(), dfs);\n}\n\nfunction addBorderNode(g, prop, prefix, sg, sgNode, rank) {\n  var label = { width: 0, height: 0, rank: rank, borderType: prop };\n  var prev = sgNode[prop][rank - 1];\n  var curr = util.addDummyNode(g, \"border\", label, prefix);\n  sgNode[prop][rank] = curr;\n  g.setParent(curr, sg);\n  if (prev) {\n    g.setEdge(prev, curr, { weight: 1 });\n  }\n}\n","\"use strict\";\n\nvar _ = require(\"./lodash\");\n\nmodule.exports = {\n  adjust: adjust,\n  undo: undo\n};\n\nfunction adjust(g) {\n  var rankDir = g.graph().rankdir.toLowerCase();\n  if (rankDir === \"lr\" || rankDir === \"rl\") {\n    swapWidthHeight(g);\n  }\n}\n\nfunction undo(g) {\n  var rankDir = g.graph().rankdir.toLowerCase();\n  if (rankDir === \"bt\" || rankDir === \"rl\") {\n    reverseY(g);\n  }\n\n  if (rankDir === \"lr\" || rankDir === \"rl\") {\n    swapXY(g);\n    swapWidthHeight(g);\n  }\n}\n\nfunction swapWidthHeight(g) {\n  _.forEach(g.nodes(), function(v) { swapWidthHeightOne(g.node(v)); });\n  _.forEach(g.edges(), function(e) { swapWidthHeightOne(g.edge(e)); });\n}\n\nfunction swapWidthHeightOne(attrs) {\n  var w = attrs.width;\n  attrs.width = attrs.height;\n  attrs.height = w;\n}\n\nfunction reverseY(g) {\n  _.forEach(g.nodes(), function(v) { reverseYOne(g.node(v)); });\n\n  _.forEach(g.edges(), function(e) {\n    var edge = g.edge(e);\n    _.forEach(edge.points, reverseYOne);\n    if (_.has(edge, \"y\")) {\n      reverseYOne(edge);\n    }\n  });\n}\n\nfunction reverseYOne(attrs) {\n  attrs.y = -attrs.y;\n}\n\nfunction swapXY(g) {\n  _.forEach(g.nodes(), function(v) { swapXYOne(g.node(v)); });\n\n  _.forEach(g.edges(), function(e) {\n    var edge = g.edge(e);\n    _.forEach(edge.points, swapXYOne);\n    if (_.has(edge, \"x\")) {\n      swapXYOne(edge);\n    }\n  });\n}\n\nfunction swapXYOne(attrs) {\n  var x = attrs.x;\n  attrs.x = attrs.y;\n  attrs.y = x;\n}\n","/*\n * Simple doubly linked list implementation derived from Cormen, et al.,\n * \"Introduction to Algorithms\".\n */\n\nmodule.exports = List;\n\nfunction List() {\n  var sentinel = {};\n  sentinel._next = sentinel._prev = sentinel;\n  this._sentinel = sentinel;\n}\n\nList.prototype.dequeue = function() {\n  var sentinel = this._sentinel;\n  var entry = sentinel._prev;\n  if (entry !== sentinel) {\n    unlink(entry);\n    return entry;\n  }\n};\n\nList.prototype.enqueue = function(entry) {\n  var sentinel = this._sentinel;\n  if (entry._prev && entry._next) {\n    unlink(entry);\n  }\n  entry._next = sentinel._next;\n  sentinel._next._prev = entry;\n  sentinel._next = entry;\n  entry._prev = sentinel;\n};\n\nList.prototype.toString = function() {\n  var strs = [];\n  var sentinel = this._sentinel;\n  var curr = sentinel._prev;\n  while (curr !== sentinel) {\n    strs.push(JSON.stringify(curr, filterOutLinks));\n    curr = curr._prev;\n  }\n  return \"[\" + strs.join(\", \") + \"]\";\n};\n\nfunction unlink(entry) {\n  entry._prev._next = entry._next;\n  entry._next._prev = entry._prev;\n  delete entry._next;\n  delete entry._prev;\n}\n\nfunction filterOutLinks(k, v) {\n  if (k !== \"_next\" && k !== \"_prev\") {\n    return v;\n  }\n}\n","var _ = require(\"./lodash\");\nvar util = require(\"./util\");\nvar Graph = require(\"./graphlib\").Graph;\n\nmodule.exports = {\n  debugOrdering: debugOrdering\n};\n\n/* istanbul ignore next */\nfunction debugOrdering(g) {\n  var layerMatrix = util.buildLayerMatrix(g);\n\n  var h = new Graph({ compound: true, multigraph: true }).setGraph({});\n\n  _.forEach(g.nodes(), function(v) {\n    h.setNode(v, { label: v });\n    h.setParent(v, \"layer\" + g.node(v).rank);\n  });\n\n  _.forEach(g.edges(), function(e) {\n    h.setEdge(e.v, e.w, {}, e.name);\n  });\n\n  _.forEach(layerMatrix, function(layer, i) {\n    var layerV = \"layer\" + i;\n    h.setNode(layerV, { rank: \"same\" });\n    _.reduce(layer, function(u, v) {\n      h.setEdge(u, v, { style: \"invis\" });\n      return v;\n    });\n  });\n\n  return h;\n}\n","/* global window */\n\nvar graphlib;\n\nif (typeof require === \"function\") {\n  try {\n    graphlib = require(\"graphlib\");\n  } catch (e) {\n    // continue regardless of error\n  }\n}\n\nif (!graphlib) {\n  graphlib = window.graphlib;\n}\n\nmodule.exports = graphlib;\n","var _ = require(\"./lodash\");\nvar Graph = require(\"./graphlib\").Graph;\nvar List = require(\"./data/list\");\n\n/*\n * A greedy heuristic for finding a feedback arc set for a graph. A feedback\n * arc set is a set of edges that can be removed to make a graph acyclic.\n * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, \"A fast and\n * effective heuristic for the feedback arc set problem.\" This implementation\n * adjusts that from the paper to allow for weighted edges.\n */\nmodule.exports = greedyFAS;\n\nvar DEFAULT_WEIGHT_FN = _.constant(1);\n\nfunction greedyFAS(g, weightFn) {\n  if (g.nodeCount() <= 1) {\n    return [];\n  }\n  var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN);\n  var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx);\n\n  // Expand multi-edges\n  return _.flatten(_.map(results, function(e) {\n    return g.outEdges(e.v, e.w);\n  }), true);\n}\n\nfunction doGreedyFAS(g, buckets, zeroIdx) {\n  var results = [];\n  var sources = buckets[buckets.length - 1];\n  var sinks = buckets[0];\n\n  var entry;\n  while (g.nodeCount()) {\n    while ((entry = sinks.dequeue()))   { removeNode(g, buckets, zeroIdx, entry); }\n    while ((entry = sources.dequeue())) { removeNode(g, buckets, zeroIdx, entry); }\n    if (g.nodeCount()) {\n      for (var i = buckets.length - 2; i > 0; --i) {\n        entry = buckets[i].dequeue();\n        if (entry) {\n          results = results.concat(removeNode(g, buckets, zeroIdx, entry, true));\n          break;\n        }\n      }\n    }\n  }\n\n  return results;\n}\n\nfunction removeNode(g, buckets, zeroIdx, entry, collectPredecessors) {\n  var results = collectPredecessors ? [] : undefined;\n\n  _.forEach(g.inEdges(entry.v), function(edge) {\n    var weight = g.edge(edge);\n    var uEntry = g.node(edge.v);\n\n    if (collectPredecessors) {\n      results.push({ v: edge.v, w: edge.w });\n    }\n\n    uEntry.out -= weight;\n    assignBucket(buckets, zeroIdx, uEntry);\n  });\n\n  _.forEach(g.outEdges(entry.v), function(edge) {\n    var weight = g.edge(edge);\n    var w = edge.w;\n    var wEntry = g.node(w);\n    wEntry[\"in\"] -= weight;\n    assignBucket(buckets, zeroIdx, wEntry);\n  });\n\n  g.removeNode(entry.v);\n\n  return results;\n}\n\nfunction buildState(g, weightFn) {\n  var fasGraph = new Graph();\n  var maxIn = 0;\n  var maxOut = 0;\n\n  _.forEach(g.nodes(), function(v) {\n    fasGraph.setNode(v, { v: v, \"in\": 0, out: 0 });\n  });\n\n  // Aggregate weights on nodes, but also sum the weights across multi-edges\n  // into a single edge for the fasGraph.\n  _.forEach(g.edges(), function(e) {\n    var prevWeight = fasGraph.edge(e.v, e.w) || 0;\n    var weight = weightFn(e);\n    var edgeWeight = prevWeight + weight;\n    fasGraph.setEdge(e.v, e.w, edgeWeight);\n    maxOut = Math.max(maxOut, fasGraph.node(e.v).out += weight);\n    maxIn  = Math.max(maxIn,  fasGraph.node(e.w)[\"in\"]  += weight);\n  });\n\n  var buckets = _.range(maxOut + maxIn + 3).map(function() { return new List(); });\n  var zeroIdx = maxIn + 1;\n\n  _.forEach(fasGraph.nodes(), function(v) {\n    assignBucket(buckets, zeroIdx, fasGraph.node(v));\n  });\n\n  return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx };\n}\n\nfunction assignBucket(buckets, zeroIdx, entry) {\n  if (!entry.out) {\n    buckets[0].enqueue(entry);\n  } else if (!entry[\"in\"]) {\n    buckets[buckets.length - 1].enqueue(entry);\n  } else {\n    buckets[entry.out - entry[\"in\"] + zeroIdx].enqueue(entry);\n  }\n}\n","\"use strict\";\n\nvar _ = require(\"./lodash\");\nvar acyclic = require(\"./acyclic\");\nvar normalize = require(\"./normalize\");\nvar rank = require(\"./rank\");\nvar normalizeRanks = require(\"./util\").normalizeRanks;\nvar parentDummyChains = require(\"./parent-dummy-chains\");\nvar removeEmptyRanks = require(\"./util\").removeEmptyRanks;\nvar nestingGraph = require(\"./nesting-graph\");\nvar addBorderSegments = require(\"./add-border-segments\");\nvar coordinateSystem = require(\"./coordinate-system\");\nvar order = require(\"./order\");\nvar position = require(\"./position\");\nvar util = require(\"./util\");\nvar Graph = require(\"./graphlib\").Graph;\n\nmodule.exports = layout;\n\nfunction layout(g, opts) {\n  var time = opts && opts.debugTiming ? util.time : util.notime;\n  time(\"layout\", function() {\n    var layoutGraph = \n      time(\"  buildLayoutGraph\", function() { return buildLayoutGraph(g); });\n    time(\"  runLayout\",        function() { runLayout(layoutGraph, time); });\n    time(\"  updateInputGraph\", function() { updateInputGraph(g, layoutGraph); });\n  });\n}\n\nfunction runLayout(g, time) {\n  time(\"    makeSpaceForEdgeLabels\", function() { makeSpaceForEdgeLabels(g); });\n  time(\"    removeSelfEdges\",        function() { removeSelfEdges(g); });\n  time(\"    acyclic\",                function() { acyclic.run(g); });\n  time(\"    nestingGraph.run\",       function() { nestingGraph.run(g); });\n  time(\"    rank\",                   function() { rank(util.asNonCompoundGraph(g)); });\n  time(\"    injectEdgeLabelProxies\", function() { injectEdgeLabelProxies(g); });\n  time(\"    removeEmptyRanks\",       function() { removeEmptyRanks(g); });\n  time(\"    nestingGraph.cleanup\",   function() { nestingGraph.cleanup(g); });\n  time(\"    normalizeRanks\",         function() { normalizeRanks(g); });\n  time(\"    assignRankMinMax\",       function() { assignRankMinMax(g); });\n  time(\"    removeEdgeLabelProxies\", function() { removeEdgeLabelProxies(g); });\n  time(\"    normalize.run\",          function() { normalize.run(g); });\n  time(\"    parentDummyChains\",      function() { parentDummyChains(g); });\n  time(\"    addBorderSegments\",      function() { addBorderSegments(g); });\n  time(\"    order\",                  function() { order(g); });\n  time(\"    insertSelfEdges\",        function() { insertSelfEdges(g); });\n  time(\"    adjustCoordinateSystem\", function() { coordinateSystem.adjust(g); });\n  time(\"    position\",               function() { position(g); });\n  time(\"    positionSelfEdges\",      function() { positionSelfEdges(g); });\n  time(\"    removeBorderNodes\",      function() { removeBorderNodes(g); });\n  time(\"    normalize.undo\",         function() { normalize.undo(g); });\n  time(\"    fixupEdgeLabelCoords\",   function() { fixupEdgeLabelCoords(g); });\n  time(\"    undoCoordinateSystem\",   function() { coordinateSystem.undo(g); });\n  time(\"    translateGraph\",         function() { translateGraph(g); });\n  time(\"    assignNodeIntersects\",   function() { assignNodeIntersects(g); });\n  time(\"    reversePoints\",          function() { reversePointsForReversedEdges(g); });\n  time(\"    acyclic.undo\",           function() { acyclic.undo(g); });\n}\n\n/*\n * Copies final layout information from the layout graph back to the input\n * graph. This process only copies whitelisted attributes from the layout graph\n * to the input graph, so it serves as a good place to determine what\n * attributes can influence layout.\n */\nfunction updateInputGraph(inputGraph, layoutGraph) {\n  _.forEach(inputGraph.nodes(), function(v) {\n    var inputLabel = inputGraph.node(v);\n    var layoutLabel = layoutGraph.node(v);\n\n    if (inputLabel) {\n      inputLabel.x = layoutLabel.x;\n      inputLabel.y = layoutLabel.y;\n\n      if (layoutGraph.children(v).length) {\n        inputLabel.width = layoutLabel.width;\n        inputLabel.height = layoutLabel.height;\n      }\n    }\n  });\n\n  _.forEach(inputGraph.edges(), function(e) {\n    var inputLabel = inputGraph.edge(e);\n    var layoutLabel = layoutGraph.edge(e);\n\n    inputLabel.points = layoutLabel.points;\n    if (_.has(layoutLabel, \"x\")) {\n      inputLabel.x = layoutLabel.x;\n      inputLabel.y = layoutLabel.y;\n    }\n  });\n\n  inputGraph.graph().width = layoutGraph.graph().width;\n  inputGraph.graph().height = layoutGraph.graph().height;\n}\n\nvar graphNumAttrs = [\"nodesep\", \"edgesep\", \"ranksep\", \"marginx\", \"marginy\"];\nvar graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: \"tb\" };\nvar graphAttrs = [\"acyclicer\", \"ranker\", \"rankdir\", \"align\"];\nvar nodeNumAttrs = [\"width\", \"height\"];\nvar nodeDefaults = { width: 0, height: 0 };\nvar edgeNumAttrs = [\"minlen\", \"weight\", \"width\", \"height\", \"labeloffset\"];\nvar edgeDefaults = {\n  minlen: 1, weight: 1, width: 0, height: 0,\n  labeloffset: 10, labelpos: \"r\"\n};\nvar edgeAttrs = [\"labelpos\"];\n\n/*\n * Constructs a new graph from the input graph, which can be used for layout.\n * This process copies only whitelisted attributes from the input graph to the\n * layout graph. Thus this function serves as a good place to determine what\n * attributes can influence layout.\n */\nfunction buildLayoutGraph(inputGraph) {\n  var g = new Graph({ multigraph: true, compound: true });\n  var graph = canonicalize(inputGraph.graph());\n\n  g.setGraph(_.merge({},\n    graphDefaults,\n    selectNumberAttrs(graph, graphNumAttrs),\n    _.pick(graph, graphAttrs)));\n\n  _.forEach(inputGraph.nodes(), function(v) {\n    var node = canonicalize(inputGraph.node(v));\n    g.setNode(v, _.defaults(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults));\n    g.setParent(v, inputGraph.parent(v));\n  });\n\n  _.forEach(inputGraph.edges(), function(e) {\n    var edge = canonicalize(inputGraph.edge(e));\n    g.setEdge(e, _.merge({},\n      edgeDefaults,\n      selectNumberAttrs(edge, edgeNumAttrs),\n      _.pick(edge, edgeAttrs)));\n  });\n\n  return g;\n}\n\n/*\n * This idea comes from the Gansner paper: to account for edge labels in our\n * layout we split each rank in half by doubling minlen and halving ranksep.\n * Then we can place labels at these mid-points between nodes.\n *\n * We also add some minimal padding to the width to push the label for the edge\n * away from the edge itself a bit.\n */\nfunction makeSpaceForEdgeLabels(g) {\n  var graph = g.graph();\n  graph.ranksep /= 2;\n  _.forEach(g.edges(), function(e) {\n    var edge = g.edge(e);\n    edge.minlen *= 2;\n    if (edge.labelpos.toLowerCase() !== \"c\") {\n      if (graph.rankdir === \"TB\" || graph.rankdir === \"BT\") {\n        edge.width += edge.labeloffset;\n      } else {\n        edge.height += edge.labeloffset;\n      }\n    }\n  });\n}\n\n/*\n * Creates temporary dummy nodes that capture the rank in which each edge's\n * label is going to, if it has one of non-zero width and height. We do this\n * so that we can safely remove empty ranks while preserving balance for the\n * label's position.\n */\nfunction injectEdgeLabelProxies(g) {\n  _.forEach(g.edges(), function(e) {\n    var edge = g.edge(e);\n    if (edge.width && edge.height) {\n      var v = g.node(e.v);\n      var w = g.node(e.w);\n      var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e };\n      util.addDummyNode(g, \"edge-proxy\", label, \"_ep\");\n    }\n  });\n}\n\nfunction assignRankMinMax(g) {\n  var maxRank = 0;\n  _.forEach(g.nodes(), function(v) {\n    var node = g.node(v);\n    if (node.borderTop) {\n      node.minRank = g.node(node.borderTop).rank;\n      node.maxRank = g.node(node.borderBottom).rank;\n      maxRank = _.max(maxRank, node.maxRank);\n    }\n  });\n  g.graph().maxRank = maxRank;\n}\n\nfunction removeEdgeLabelProxies(g) {\n  _.forEach(g.nodes(), function(v) {\n    var node = g.node(v);\n    if (node.dummy === \"edge-proxy\") {\n      g.edge(node.e).labelRank = node.rank;\n      g.removeNode(v);\n    }\n  });\n}\n\nfunction translateGraph(g) {\n  var minX = Number.POSITIVE_INFINITY;\n  var maxX = 0;\n  var minY = Number.POSITIVE_INFINITY;\n  var maxY = 0;\n  var graphLabel = g.graph();\n  var marginX = graphLabel.marginx || 0;\n  var marginY = graphLabel.marginy || 0;\n\n  function getExtremes(attrs) {\n    var x = attrs.x;\n    var y = attrs.y;\n    var w = attrs.width;\n    var h = attrs.height;\n    minX = Math.min(minX, x - w / 2);\n    maxX = Math.max(maxX, x + w / 2);\n    minY = Math.min(minY, y - h / 2);\n    maxY = Math.max(maxY, y + h / 2);\n  }\n\n  _.forEach(g.nodes(), function(v) { getExtremes(g.node(v)); });\n  _.forEach(g.edges(), function(e) {\n    var edge = g.edge(e);\n    if (_.has(edge, \"x\")) {\n      getExtremes(edge);\n    }\n  });\n\n  minX -= marginX;\n  minY -= marginY;\n\n  _.forEach(g.nodes(), function(v) {\n    var node = g.node(v);\n    node.x -= minX;\n    node.y -= minY;\n  });\n\n  _.forEach(g.edges(), function(e) {\n    var edge = g.edge(e);\n    _.forEach(edge.points, function(p) {\n      p.x -= minX;\n      p.y -= minY;\n    });\n    if (_.has(edge, \"x\")) { edge.x -= minX; }\n    if (_.has(edge, \"y\")) { edge.y -= minY; }\n  });\n\n  graphLabel.width = maxX - minX + marginX;\n  graphLabel.height = maxY - minY + marginY;\n}\n\nfunction assignNodeIntersects(g) {\n  _.forEach(g.edges(), function(e) {\n    var edge = g.edge(e);\n    var nodeV = g.node(e.v);\n    var nodeW = g.node(e.w);\n    var p1, p2;\n    if (!edge.points) {\n      edge.points = [];\n      p1 = nodeW;\n      p2 = nodeV;\n    } else {\n      p1 = edge.points[0];\n      p2 = edge.points[edge.points.length - 1];\n    }\n    edge.points.unshift(util.intersectRect(nodeV, p1));\n    edge.points.push(util.intersectRect(nodeW, p2));\n  });\n}\n\nfunction fixupEdgeLabelCoords(g) {\n  _.forEach(g.edges(), function(e) {\n    var edge = g.edge(e);\n    if (_.has(edge, \"x\")) {\n      if (edge.labelpos === \"l\" || edge.labelpos === \"r\") {\n        edge.width -= edge.labeloffset;\n      }\n      switch (edge.labelpos) {\n      case \"l\": edge.x -= edge.width / 2 + edge.labeloffset; break;\n      case \"r\": edge.x += edge.width / 2 + edge.labeloffset; break;\n      }\n    }\n  });\n}\n\nfunction reversePointsForReversedEdges(g) {\n  _.forEach(g.edges(), function(e) {\n    var edge = g.edge(e);\n    if (edge.reversed) {\n      edge.points.reverse();\n    }\n  });\n}\n\nfunction removeBorderNodes(g) {\n  _.forEach(g.nodes(), function(v) {\n    if (g.children(v).length) {\n      var node = g.node(v);\n      var t = g.node(node.borderTop);\n      var b = g.node(node.borderBottom);\n      var l = g.node(_.last(node.borderLeft));\n      var r = g.node(_.last(node.borderRight));\n\n      node.width = Math.abs(r.x - l.x);\n      node.height = Math.abs(b.y - t.y);\n      node.x = l.x + node.width / 2;\n      node.y = t.y + node.height / 2;\n    }\n  });\n\n  _.forEach(g.nodes(), function(v) {\n    if (g.node(v).dummy === \"border\") {\n      g.removeNode(v);\n    }\n  });\n}\n\nfunction removeSelfEdges(g) {\n  _.forEach(g.edges(), function(e) {\n    if (e.v === e.w) {\n      var node = g.node(e.v);\n      if (!node.selfEdges) {\n        node.selfEdges = [];\n      }\n      node.selfEdges.push({ e: e, label: g.edge(e) });\n      g.removeEdge(e);\n    }\n  });\n}\n\nfunction insertSelfEdges(g) {\n  var layers = util.buildLayerMatrix(g);\n  _.forEach(layers, function(layer) {\n    var orderShift = 0;\n    _.forEach(layer, function(v, i) {\n      var node = g.node(v);\n      node.order = i + orderShift;\n      _.forEach(node.selfEdges, function(selfEdge) {\n        util.addDummyNode(g, \"selfedge\", {\n          width: selfEdge.label.width,\n          height: selfEdge.label.height,\n          rank: node.rank,\n          order: i + (++orderShift),\n          e: selfEdge.e,\n          label: selfEdge.label\n        }, \"_se\");\n      });\n      delete node.selfEdges;\n    });\n  });\n}\n\nfunction positionSelfEdges(g) {\n  _.forEach(g.nodes(), function(v) {\n    var node = g.node(v);\n    if (node.dummy === \"selfedge\") {\n      var selfNode = g.node(node.e.v);\n      var x = selfNode.x + selfNode.width / 2;\n      var y = selfNode.y;\n      var dx = node.x - x;\n      var dy = selfNode.height / 2;\n      g.setEdge(node.e, node.label);\n      g.removeNode(v);\n      node.label.points = [\n        { x: x + 2 * dx / 3, y: y - dy },\n        { x: x + 5 * dx / 6, y: y - dy },\n        { x: x +     dx    , y: y },\n        { x: x + 5 * dx / 6, y: y + dy },\n        { x: x + 2 * dx / 3, y: y + dy }\n      ];\n      node.label.x = node.x;\n      node.label.y = node.y;\n    }\n  });\n}\n\nfunction selectNumberAttrs(obj, attrs) {\n  return _.mapValues(_.pick(obj, attrs), Number);\n}\n\nfunction canonicalize(attrs) {\n  var newAttrs = {};\n  _.forEach(attrs, function(v, k) {\n    newAttrs[k.toLowerCase()] = v;\n  });\n  return newAttrs;\n}\n","/* global window */\n\nvar lodash;\n\nif (typeof require === \"function\") {\n  try {\n    lodash = {\n      cloneDeep: require(\"lodash/cloneDeep\"),\n      constant: require(\"lodash/constant\"),\n      defaults: require(\"lodash/defaults\"),\n      each: require(\"lodash/each\"),\n      filter: require(\"lodash/filter\"),\n      find: require(\"lodash/find\"),\n      flatten: require(\"lodash/flatten\"),\n      forEach: require(\"lodash/forEach\"),\n      forIn: require(\"lodash/forIn\"),\n      has:  require(\"lodash/has\"),\n      isUndefined: require(\"lodash/isUndefined\"),\n      last: require(\"lodash/last\"),\n      map: require(\"lodash/map\"),\n      mapValues: require(\"lodash/mapValues\"),\n      max: require(\"lodash/max\"),\n      merge: require(\"lodash/merge\"),\n      min: require(\"lodash/min\"),\n      minBy: require(\"lodash/minBy\"),\n      now: require(\"lodash/now\"),\n      pick: require(\"lodash/pick\"),\n      range: require(\"lodash/range\"),\n      reduce: require(\"lodash/reduce\"),\n      sortBy: require(\"lodash/sortBy\"),\n      uniqueId: require(\"lodash/uniqueId\"),\n      values: require(\"lodash/values\"),\n      zipObject: require(\"lodash/zipObject\"),\n    };\n  } catch (e) {\n    // continue regardless of error\n  }\n}\n\nif (!lodash) {\n  lodash = window._;\n}\n\nmodule.exports = lodash;\n","var _ = require(\"./lodash\");\nvar util = require(\"./util\");\n\nmodule.exports = {\n  run: run,\n  cleanup: cleanup\n};\n\n/*\n * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs,\n * adds appropriate edges to ensure that all cluster nodes are placed between\n * these boundries, and ensures that the graph is connected.\n *\n * In addition we ensure, through the use of the minlen property, that nodes\n * and subgraph border nodes to not end up on the same rank.\n *\n * Preconditions:\n *\n *    1. Input graph is a DAG\n *    2. Nodes in the input graph has a minlen attribute\n *\n * Postconditions:\n *\n *    1. Input graph is connected.\n *    2. Dummy nodes are added for the tops and bottoms of subgraphs.\n *    3. The minlen attribute for nodes is adjusted to ensure nodes do not\n *       get placed on the same rank as subgraph border nodes.\n *\n * The nesting graph idea comes from Sander, \"Layout of Compound Directed\n * Graphs.\"\n */\nfunction run(g) {\n  var root = util.addDummyNode(g, \"root\", {}, \"_root\");\n  var depths = treeDepths(g);\n  var height = _.max(_.values(depths)) - 1; // Note: depths is an Object not an array\n  var nodeSep = 2 * height + 1;\n\n  g.graph().nestingRoot = root;\n\n  // Multiply minlen by nodeSep to align nodes on non-border ranks.\n  _.forEach(g.edges(), function(e) { g.edge(e).minlen *= nodeSep; });\n\n  // Calculate a weight that is sufficient to keep subgraphs vertically compact\n  var weight = sumWeights(g) + 1;\n\n  // Create border nodes and link them up\n  _.forEach(g.children(), function(child) {\n    dfs(g, root, nodeSep, weight, height, depths, child);\n  });\n\n  // Save the multiplier for node layers for later removal of empty border\n  // layers.\n  g.graph().nodeRankFactor = nodeSep;\n}\n\nfunction dfs(g, root, nodeSep, weight, height, depths, v) {\n  var children = g.children(v);\n  if (!children.length) {\n    if (v !== root) {\n      g.setEdge(root, v, { weight: 0, minlen: nodeSep });\n    }\n    return;\n  }\n\n  var top = util.addBorderNode(g, \"_bt\");\n  var bottom = util.addBorderNode(g, \"_bb\");\n  var label = g.node(v);\n\n  g.setParent(top, v);\n  label.borderTop = top;\n  g.setParent(bottom, v);\n  label.borderBottom = bottom;\n\n  _.forEach(children, function(child) {\n    dfs(g, root, nodeSep, weight, height, depths, child);\n\n    var childNode = g.node(child);\n    var childTop = childNode.borderTop ? childNode.borderTop : child;\n    var childBottom = childNode.borderBottom ? childNode.borderBottom : child;\n    var thisWeight = childNode.borderTop ? weight : 2 * weight;\n    var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1;\n\n    g.setEdge(top, childTop, {\n      weight: thisWeight,\n      minlen: minlen,\n      nestingEdge: true\n    });\n\n    g.setEdge(childBottom, bottom, {\n      weight: thisWeight,\n      minlen: minlen,\n      nestingEdge: true\n    });\n  });\n\n  if (!g.parent(v)) {\n    g.setEdge(root, top, { weight: 0, minlen: height + depths[v] });\n  }\n}\n\nfunction treeDepths(g) {\n  var depths = {};\n  function dfs(v, depth) {\n    var children = g.children(v);\n    if (children && children.length) {\n      _.forEach(children, function(child) {\n        dfs(child, depth + 1);\n      });\n    }\n    depths[v] = depth;\n  }\n  _.forEach(g.children(), function(v) { dfs(v, 1); });\n  return depths;\n}\n\nfunction sumWeights(g) {\n  return _.reduce(g.edges(), function(acc, e) {\n    return acc + g.edge(e).weight;\n  }, 0);\n}\n\nfunction cleanup(g) {\n  var graphLabel = g.graph();\n  g.removeNode(graphLabel.nestingRoot);\n  delete graphLabel.nestingRoot;\n  _.forEach(g.edges(), function(e) {\n    var edge = g.edge(e);\n    if (edge.nestingEdge) {\n      g.removeEdge(e);\n    }\n  });\n}\n","\"use strict\";\n\nvar _ = require(\"./lodash\");\nvar util = require(\"./util\");\n\nmodule.exports = {\n  run: run,\n  undo: undo\n};\n\n/*\n * Breaks any long edges in the graph into short segments that span 1 layer\n * each. This operation is undoable with the denormalize function.\n *\n * Pre-conditions:\n *\n *    1. The input graph is a DAG.\n *    2. Each node in the graph has a \"rank\" property.\n *\n * Post-condition:\n *\n *    1. All edges in the graph have a length of 1.\n *    2. Dummy nodes are added where edges have been split into segments.\n *    3. The graph is augmented with a \"dummyChains\" attribute which contains\n *       the first dummy in each chain of dummy nodes produced.\n */\nfunction run(g) {\n  g.graph().dummyChains = [];\n  _.forEach(g.edges(), function(edge) { normalizeEdge(g, edge); });\n}\n\nfunction normalizeEdge(g, e) {\n  var v = e.v;\n  var vRank = g.node(v).rank;\n  var w = e.w;\n  var wRank = g.node(w).rank;\n  var name = e.name;\n  var edgeLabel = g.edge(e);\n  var labelRank = edgeLabel.labelRank;\n\n  if (wRank === vRank + 1) return;\n\n  g.removeEdge(e);\n\n  var dummy, attrs, i;\n  for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) {\n    edgeLabel.points = [];\n    attrs = {\n      width: 0, height: 0,\n      edgeLabel: edgeLabel, edgeObj: e,\n      rank: vRank\n    };\n    dummy = util.addDummyNode(g, \"edge\", attrs, \"_d\");\n    if (vRank === labelRank) {\n      attrs.width = edgeLabel.width;\n      attrs.height = edgeLabel.height;\n      attrs.dummy = \"edge-label\";\n      attrs.labelpos = edgeLabel.labelpos;\n    }\n    g.setEdge(v, dummy, { weight: edgeLabel.weight }, name);\n    if (i === 0) {\n      g.graph().dummyChains.push(dummy);\n    }\n    v = dummy;\n  }\n\n  g.setEdge(v, w, { weight: edgeLabel.weight }, name);\n}\n\nfunction undo(g) {\n  _.forEach(g.graph().dummyChains, function(v) {\n    var node = g.node(v);\n    var origLabel = node.edgeLabel;\n    var w;\n    g.setEdge(node.edgeObj, origLabel);\n    while (node.dummy) {\n      w = g.successors(v)[0];\n      g.removeNode(v);\n      origLabel.points.push({ x: node.x, y: node.y });\n      if (node.dummy === \"edge-label\") {\n        origLabel.x = node.x;\n        origLabel.y = node.y;\n        origLabel.width = node.width;\n        origLabel.height = node.height;\n      }\n      v = w;\n      node = g.node(v);\n    }\n  });\n}\n","var _ = require(\"../lodash\");\n\nmodule.exports = addSubgraphConstraints;\n\nfunction addSubgraphConstraints(g, cg, vs) {\n  var prev = {},\n    rootPrev;\n\n  _.forEach(vs, function(v) {\n    var child = g.parent(v),\n      parent,\n      prevChild;\n    while (child) {\n      parent = g.parent(child);\n      if (parent) {\n        prevChild = prev[parent];\n        prev[parent] = child;\n      } else {\n        prevChild = rootPrev;\n        rootPrev = child;\n      }\n      if (prevChild && prevChild !== child) {\n        cg.setEdge(prevChild, child);\n        return;\n      }\n      child = parent;\n    }\n  });\n\n  /*\n  function dfs(v) {\n    var children = v ? g.children(v) : g.children();\n    if (children.length) {\n      var min = Number.POSITIVE_INFINITY,\n          subgraphs = [];\n      _.each(children, function(child) {\n        var childMin = dfs(child);\n        if (g.children(child).length) {\n          subgraphs.push({ v: child, order: childMin });\n        }\n        min = Math.min(min, childMin);\n      });\n      _.reduce(_.sortBy(subgraphs, \"order\"), function(prev, curr) {\n        cg.setEdge(prev.v, curr.v);\n        return curr;\n      });\n      return min;\n    }\n    return g.node(v).order;\n  }\n  dfs(undefined);\n  */\n}\n","var _ = require(\"../lodash\");\n\nmodule.exports = barycenter;\n\nfunction barycenter(g, movable) {\n  return _.map(movable, function(v) {\n    var inV = g.inEdges(v);\n    if (!inV.length) {\n      return { v: v };\n    } else {\n      var result = _.reduce(inV, function(acc, e) {\n        var edge = g.edge(e),\n          nodeU = g.node(e.v);\n        return {\n          sum: acc.sum + (edge.weight * nodeU.order),\n          weight: acc.weight + edge.weight\n        };\n      }, { sum: 0, weight: 0 });\n\n      return {\n        v: v,\n        barycenter: result.sum / result.weight,\n        weight: result.weight\n      };\n    }\n  });\n}\n\n","var _ = require(\"../lodash\");\nvar Graph = require(\"../graphlib\").Graph;\n\nmodule.exports = buildLayerGraph;\n\n/*\n * Constructs a graph that can be used to sort a layer of nodes. The graph will\n * contain all base and subgraph nodes from the request layer in their original\n * hierarchy and any edges that are incident on these nodes and are of the type\n * requested by the \"relationship\" parameter.\n *\n * Nodes from the requested rank that do not have parents are assigned a root\n * node in the output graph, which is set in the root graph attribute. This\n * makes it easy to walk the hierarchy of movable nodes during ordering.\n *\n * Pre-conditions:\n *\n *    1. Input graph is a DAG\n *    2. Base nodes in the input graph have a rank attribute\n *    3. Subgraph nodes in the input graph has minRank and maxRank attributes\n *    4. Edges have an assigned weight\n *\n * Post-conditions:\n *\n *    1. Output graph has all nodes in the movable rank with preserved\n *       hierarchy.\n *    2. Root nodes in the movable layer are made children of the node\n *       indicated by the root attribute of the graph.\n *    3. Non-movable nodes incident on movable nodes, selected by the\n *       relationship parameter, are included in the graph (without hierarchy).\n *    4. Edges incident on movable nodes, selected by the relationship\n *       parameter, are added to the output graph.\n *    5. The weights for copied edges are aggregated as need, since the output\n *       graph is not a multi-graph.\n */\nfunction buildLayerGraph(g, rank, relationship) {\n  var root = createRootNode(g),\n    result = new Graph({ compound: true }).setGraph({ root: root })\n      .setDefaultNodeLabel(function(v) { return g.node(v); });\n\n  _.forEach(g.nodes(), function(v) {\n    var node = g.node(v),\n      parent = g.parent(v);\n\n    if (node.rank === rank || node.minRank <= rank && rank <= node.maxRank) {\n      result.setNode(v);\n      result.setParent(v, parent || root);\n\n      // This assumes we have only short edges!\n      _.forEach(g[relationship](v), function(e) {\n        var u = e.v === v ? e.w : e.v,\n          edge = result.edge(u, v),\n          weight = !_.isUndefined(edge) ? edge.weight : 0;\n        result.setEdge(u, v, { weight: g.edge(e).weight + weight });\n      });\n\n      if (_.has(node, \"minRank\")) {\n        result.setNode(v, {\n          borderLeft: node.borderLeft[rank],\n          borderRight: node.borderRight[rank]\n        });\n      }\n    }\n  });\n\n  return result;\n}\n\nfunction createRootNode(g) {\n  var v;\n  while (g.hasNode((v = _.uniqueId(\"_root\"))));\n  return v;\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\n\nmodule.exports = crossCount;\n\n/*\n * A function that takes a layering (an array of layers, each with an array of\n * ordererd nodes) and a graph and returns a weighted crossing count.\n *\n * Pre-conditions:\n *\n *    1. Input graph must be simple (not a multigraph), directed, and include\n *       only simple edges.\n *    2. Edges in the input graph must have assigned weights.\n *\n * Post-conditions:\n *\n *    1. The graph and layering matrix are left unchanged.\n *\n * This algorithm is derived from Barth, et al., \"Bilayer Cross Counting.\"\n */\nfunction crossCount(g, layering) {\n  var cc = 0;\n  for (var i = 1; i < layering.length; ++i) {\n    cc += twoLayerCrossCount(g, layering[i-1], layering[i]);\n  }\n  return cc;\n}\n\nfunction twoLayerCrossCount(g, northLayer, southLayer) {\n  // Sort all of the edges between the north and south layers by their position\n  // in the north layer and then the south. Map these edges to the position of\n  // their head in the south layer.\n  var southPos = _.zipObject(southLayer,\n    _.map(southLayer, function (v, i) { return i; }));\n  var southEntries = _.flatten(_.map(northLayer, function(v) {\n    return _.sortBy(_.map(g.outEdges(v), function(e) {\n      return { pos: southPos[e.w], weight: g.edge(e).weight };\n    }), \"pos\");\n  }), true);\n\n  // Build the accumulator tree\n  var firstIndex = 1;\n  while (firstIndex < southLayer.length) firstIndex <<= 1;\n  var treeSize = 2 * firstIndex - 1;\n  firstIndex -= 1;\n  var tree = _.map(new Array(treeSize), function() { return 0; });\n\n  // Calculate the weighted crossings\n  var cc = 0;\n  _.forEach(southEntries.forEach(function(entry) {\n    var index = entry.pos + firstIndex;\n    tree[index] += entry.weight;\n    var weightSum = 0;\n    while (index > 0) {\n      if (index % 2) {\n        weightSum += tree[index + 1];\n      }\n      index = (index - 1) >> 1;\n      tree[index] += entry.weight;\n    }\n    cc += entry.weight * weightSum;\n  }));\n\n  return cc;\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\nvar initOrder = require(\"./init-order\");\nvar crossCount = require(\"./cross-count\");\nvar sortSubgraph = require(\"./sort-subgraph\");\nvar buildLayerGraph = require(\"./build-layer-graph\");\nvar addSubgraphConstraints = require(\"./add-subgraph-constraints\");\nvar Graph = require(\"../graphlib\").Graph;\nvar util = require(\"../util\");\n\nmodule.exports = order;\n\n/*\n * Applies heuristics to minimize edge crossings in the graph and sets the best\n * order solution as an order attribute on each node.\n *\n * Pre-conditions:\n *\n *    1. Graph must be DAG\n *    2. Graph nodes must be objects with a \"rank\" attribute\n *    3. Graph edges must have the \"weight\" attribute\n *\n * Post-conditions:\n *\n *    1. Graph nodes will have an \"order\" attribute based on the results of the\n *       algorithm.\n */\nfunction order(g) {\n  var maxRank = util.maxRank(g),\n    downLayerGraphs = buildLayerGraphs(g, _.range(1, maxRank + 1), \"inEdges\"),\n    upLayerGraphs = buildLayerGraphs(g, _.range(maxRank - 1, -1, -1), \"outEdges\");\n\n  var layering = initOrder(g);\n  assignOrder(g, layering);\n\n  var bestCC = Number.POSITIVE_INFINITY,\n    best;\n\n  for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) {\n    sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2);\n\n    layering = util.buildLayerMatrix(g);\n    var cc = crossCount(g, layering);\n    if (cc < bestCC) {\n      lastBest = 0;\n      best = _.cloneDeep(layering);\n      bestCC = cc;\n    }\n  }\n\n  assignOrder(g, best);\n}\n\nfunction buildLayerGraphs(g, ranks, relationship) {\n  return _.map(ranks, function(rank) {\n    return buildLayerGraph(g, rank, relationship);\n  });\n}\n\nfunction sweepLayerGraphs(layerGraphs, biasRight) {\n  var cg = new Graph();\n  _.forEach(layerGraphs, function(lg) {\n    var root = lg.graph().root;\n    var sorted = sortSubgraph(lg, root, cg, biasRight);\n    _.forEach(sorted.vs, function(v, i) {\n      lg.node(v).order = i;\n    });\n    addSubgraphConstraints(lg, cg, sorted.vs);\n  });\n}\n\nfunction assignOrder(g, layering) {\n  _.forEach(layering, function(layer) {\n    _.forEach(layer, function(v, i) {\n      g.node(v).order = i;\n    });\n  });\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\n\nmodule.exports = initOrder;\n\n/*\n * Assigns an initial order value for each node by performing a DFS search\n * starting from nodes in the first rank. Nodes are assigned an order in their\n * rank as they are first visited.\n *\n * This approach comes from Gansner, et al., \"A Technique for Drawing Directed\n * Graphs.\"\n *\n * Returns a layering matrix with an array per layer and each layer sorted by\n * the order of its nodes.\n */\nfunction initOrder(g) {\n  var visited = {};\n  var simpleNodes = _.filter(g.nodes(), function(v) {\n    return !g.children(v).length;\n  });\n  var maxRank = _.max(_.map(simpleNodes, function(v) { return g.node(v).rank; }));\n  var layers = _.map(_.range(maxRank + 1), function() { return []; });\n\n  function dfs(v) {\n    if (_.has(visited, v)) return;\n    visited[v] = true;\n    var node = g.node(v);\n    layers[node.rank].push(v);\n    _.forEach(g.successors(v), dfs);\n  }\n\n  var orderedVs = _.sortBy(simpleNodes, function(v) { return g.node(v).rank; });\n  _.forEach(orderedVs, dfs);\n\n  return layers;\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\n\nmodule.exports = resolveConflicts;\n\n/*\n * Given a list of entries of the form {v, barycenter, weight} and a\n * constraint graph this function will resolve any conflicts between the\n * constraint graph and the barycenters for the entries. If the barycenters for\n * an entry would violate a constraint in the constraint graph then we coalesce\n * the nodes in the conflict into a new node that respects the contraint and\n * aggregates barycenter and weight information.\n *\n * This implementation is based on the description in Forster, \"A Fast and\n * Simple Hueristic for Constrained Two-Level Crossing Reduction,\" thought it\n * differs in some specific details.\n *\n * Pre-conditions:\n *\n *    1. Each entry has the form {v, barycenter, weight}, or if the node has\n *       no barycenter, then {v}.\n *\n * Returns:\n *\n *    A new list of entries of the form {vs, i, barycenter, weight}. The list\n *    `vs` may either be a singleton or it may be an aggregation of nodes\n *    ordered such that they do not violate constraints from the constraint\n *    graph. The property `i` is the lowest original index of any of the\n *    elements in `vs`.\n */\nfunction resolveConflicts(entries, cg) {\n  var mappedEntries = {};\n  _.forEach(entries, function(entry, i) {\n    var tmp = mappedEntries[entry.v] = {\n      indegree: 0,\n      \"in\": [],\n      out: [],\n      vs: [entry.v],\n      i: i\n    };\n    if (!_.isUndefined(entry.barycenter)) {\n      tmp.barycenter = entry.barycenter;\n      tmp.weight = entry.weight;\n    }\n  });\n\n  _.forEach(cg.edges(), function(e) {\n    var entryV = mappedEntries[e.v];\n    var entryW = mappedEntries[e.w];\n    if (!_.isUndefined(entryV) && !_.isUndefined(entryW)) {\n      entryW.indegree++;\n      entryV.out.push(mappedEntries[e.w]);\n    }\n  });\n\n  var sourceSet = _.filter(mappedEntries, function(entry) {\n    return !entry.indegree;\n  });\n\n  return doResolveConflicts(sourceSet);\n}\n\nfunction doResolveConflicts(sourceSet) {\n  var entries = [];\n\n  function handleIn(vEntry) {\n    return function(uEntry) {\n      if (uEntry.merged) {\n        return;\n      }\n      if (_.isUndefined(uEntry.barycenter) ||\n          _.isUndefined(vEntry.barycenter) ||\n          uEntry.barycenter >= vEntry.barycenter) {\n        mergeEntries(vEntry, uEntry);\n      }\n    };\n  }\n\n  function handleOut(vEntry) {\n    return function(wEntry) {\n      wEntry[\"in\"].push(vEntry);\n      if (--wEntry.indegree === 0) {\n        sourceSet.push(wEntry);\n      }\n    };\n  }\n\n  while (sourceSet.length) {\n    var entry = sourceSet.pop();\n    entries.push(entry);\n    _.forEach(entry[\"in\"].reverse(), handleIn(entry));\n    _.forEach(entry.out, handleOut(entry));\n  }\n\n  return _.map(_.filter(entries, function(entry) { return !entry.merged; }),\n    function(entry) {\n      return _.pick(entry, [\"vs\", \"i\", \"barycenter\", \"weight\"]);\n    });\n\n}\n\nfunction mergeEntries(target, source) {\n  var sum = 0;\n  var weight = 0;\n\n  if (target.weight) {\n    sum += target.barycenter * target.weight;\n    weight += target.weight;\n  }\n\n  if (source.weight) {\n    sum += source.barycenter * source.weight;\n    weight += source.weight;\n  }\n\n  target.vs = source.vs.concat(target.vs);\n  target.barycenter = sum / weight;\n  target.weight = weight;\n  target.i = Math.min(source.i, target.i);\n  source.merged = true;\n}\n","var _ = require(\"../lodash\");\nvar barycenter = require(\"./barycenter\");\nvar resolveConflicts = require(\"./resolve-conflicts\");\nvar sort = require(\"./sort\");\n\nmodule.exports = sortSubgraph;\n\nfunction sortSubgraph(g, v, cg, biasRight) {\n  var movable = g.children(v);\n  var node = g.node(v);\n  var bl = node ? node.borderLeft : undefined;\n  var br = node ? node.borderRight: undefined;\n  var subgraphs = {};\n\n  if (bl) {\n    movable = _.filter(movable, function(w) {\n      return w !== bl && w !== br;\n    });\n  }\n\n  var barycenters = barycenter(g, movable);\n  _.forEach(barycenters, function(entry) {\n    if (g.children(entry.v).length) {\n      var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight);\n      subgraphs[entry.v] = subgraphResult;\n      if (_.has(subgraphResult, \"barycenter\")) {\n        mergeBarycenters(entry, subgraphResult);\n      }\n    }\n  });\n\n  var entries = resolveConflicts(barycenters, cg);\n  expandSubgraphs(entries, subgraphs);\n\n  var result = sort(entries, biasRight);\n\n  if (bl) {\n    result.vs = _.flatten([bl, result.vs, br], true);\n    if (g.predecessors(bl).length) {\n      var blPred = g.node(g.predecessors(bl)[0]),\n        brPred = g.node(g.predecessors(br)[0]);\n      if (!_.has(result, \"barycenter\")) {\n        result.barycenter = 0;\n        result.weight = 0;\n      }\n      result.barycenter = (result.barycenter * result.weight +\n                           blPred.order + brPred.order) / (result.weight + 2);\n      result.weight += 2;\n    }\n  }\n\n  return result;\n}\n\nfunction expandSubgraphs(entries, subgraphs) {\n  _.forEach(entries, function(entry) {\n    entry.vs = _.flatten(entry.vs.map(function(v) {\n      if (subgraphs[v]) {\n        return subgraphs[v].vs;\n      }\n      return v;\n    }), true);\n  });\n}\n\nfunction mergeBarycenters(target, other) {\n  if (!_.isUndefined(target.barycenter)) {\n    target.barycenter = (target.barycenter * target.weight +\n                         other.barycenter * other.weight) /\n                        (target.weight + other.weight);\n    target.weight += other.weight;\n  } else {\n    target.barycenter = other.barycenter;\n    target.weight = other.weight;\n  }\n}\n","var _ = require(\"../lodash\");\nvar util = require(\"../util\");\n\nmodule.exports = sort;\n\nfunction sort(entries, biasRight) {\n  var parts = util.partition(entries, function(entry) {\n    return _.has(entry, \"barycenter\");\n  });\n  var sortable = parts.lhs,\n    unsortable = _.sortBy(parts.rhs, function(entry) { return -entry.i; }),\n    vs = [],\n    sum = 0,\n    weight = 0,\n    vsIndex = 0;\n\n  sortable.sort(compareWithBias(!!biasRight));\n\n  vsIndex = consumeUnsortable(vs, unsortable, vsIndex);\n\n  _.forEach(sortable, function (entry) {\n    vsIndex += entry.vs.length;\n    vs.push(entry.vs);\n    sum += entry.barycenter * entry.weight;\n    weight += entry.weight;\n    vsIndex = consumeUnsortable(vs, unsortable, vsIndex);\n  });\n\n  var result = { vs: _.flatten(vs, true) };\n  if (weight) {\n    result.barycenter = sum / weight;\n    result.weight = weight;\n  }\n  return result;\n}\n\nfunction consumeUnsortable(vs, unsortable, index) {\n  var last;\n  while (unsortable.length && (last = _.last(unsortable)).i <= index) {\n    unsortable.pop();\n    vs.push(last.vs);\n    index++;\n  }\n  return index;\n}\n\nfunction compareWithBias(bias) {\n  return function(entryV, entryW) {\n    if (entryV.barycenter < entryW.barycenter) {\n      return -1;\n    } else if (entryV.barycenter > entryW.barycenter) {\n      return 1;\n    }\n\n    return !bias ? entryV.i - entryW.i : entryW.i - entryV.i;\n  };\n}\n","var _ = require(\"./lodash\");\n\nmodule.exports = parentDummyChains;\n\nfunction parentDummyChains(g) {\n  var postorderNums = postorder(g);\n\n  _.forEach(g.graph().dummyChains, function(v) {\n    var node = g.node(v);\n    var edgeObj = node.edgeObj;\n    var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w);\n    var path = pathData.path;\n    var lca = pathData.lca;\n    var pathIdx = 0;\n    var pathV = path[pathIdx];\n    var ascending = true;\n\n    while (v !== edgeObj.w) {\n      node = g.node(v);\n\n      if (ascending) {\n        while ((pathV = path[pathIdx]) !== lca &&\n               g.node(pathV).maxRank < node.rank) {\n          pathIdx++;\n        }\n\n        if (pathV === lca) {\n          ascending = false;\n        }\n      }\n\n      if (!ascending) {\n        while (pathIdx < path.length - 1 &&\n               g.node(pathV = path[pathIdx + 1]).minRank <= node.rank) {\n          pathIdx++;\n        }\n        pathV = path[pathIdx];\n      }\n\n      g.setParent(v, pathV);\n      v = g.successors(v)[0];\n    }\n  });\n}\n\n// Find a path from v to w through the lowest common ancestor (LCA). Return the\n// full path and the LCA.\nfunction findPath(g, postorderNums, v, w) {\n  var vPath = [];\n  var wPath = [];\n  var low = Math.min(postorderNums[v].low, postorderNums[w].low);\n  var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim);\n  var parent;\n  var lca;\n\n  // Traverse up from v to find the LCA\n  parent = v;\n  do {\n    parent = g.parent(parent);\n    vPath.push(parent);\n  } while (parent &&\n           (postorderNums[parent].low > low || lim > postorderNums[parent].lim));\n  lca = parent;\n\n  // Traverse from w to LCA\n  parent = w;\n  while ((parent = g.parent(parent)) !== lca) {\n    wPath.push(parent);\n  }\n\n  return { path: vPath.concat(wPath.reverse()), lca: lca };\n}\n\nfunction postorder(g) {\n  var result = {};\n  var lim = 0;\n\n  function dfs(v) {\n    var low = lim;\n    _.forEach(g.children(v), dfs);\n    result[v] = { low: low, lim: lim++ };\n  }\n  _.forEach(g.children(), dfs);\n\n  return result;\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\nvar Graph = require(\"../graphlib\").Graph;\nvar util = require(\"../util\");\n\n/*\n * This module provides coordinate assignment based on Brandes and Köpf, \"Fast\n * and Simple Horizontal Coordinate Assignment.\"\n */\n\nmodule.exports = {\n  positionX: positionX,\n  findType1Conflicts: findType1Conflicts,\n  findType2Conflicts: findType2Conflicts,\n  addConflict: addConflict,\n  hasConflict: hasConflict,\n  verticalAlignment: verticalAlignment,\n  horizontalCompaction: horizontalCompaction,\n  alignCoordinates: alignCoordinates,\n  findSmallestWidthAlignment: findSmallestWidthAlignment,\n  balance: balance\n};\n\n/*\n * Marks all edges in the graph with a type-1 conflict with the \"type1Conflict\"\n * property. A type-1 conflict is one where a non-inner segment crosses an\n * inner segment. An inner segment is an edge with both incident nodes marked\n * with the \"dummy\" property.\n *\n * This algorithm scans layer by layer, starting with the second, for type-1\n * conflicts between the current layer and the previous layer. For each layer\n * it scans the nodes from left to right until it reaches one that is incident\n * on an inner segment. It then scans predecessors to determine if they have\n * edges that cross that inner segment. At the end a final scan is done for all\n * nodes on the current rank to see if they cross the last visited inner\n * segment.\n *\n * This algorithm (safely) assumes that a dummy node will only be incident on a\n * single node in the layers being scanned.\n */\nfunction findType1Conflicts(g, layering) {\n  var conflicts = {};\n\n  function visitLayer(prevLayer, layer) {\n    var\n      // last visited node in the previous layer that is incident on an inner\n      // segment.\n      k0 = 0,\n      // Tracks the last node in this layer scanned for crossings with a type-1\n      // segment.\n      scanPos = 0,\n      prevLayerLength = prevLayer.length,\n      lastNode = _.last(layer);\n\n    _.forEach(layer, function(v, i) {\n      var w = findOtherInnerSegmentNode(g, v),\n        k1 = w ? g.node(w).order : prevLayerLength;\n\n      if (w || v === lastNode) {\n        _.forEach(layer.slice(scanPos, i +1), function(scanNode) {\n          _.forEach(g.predecessors(scanNode), function(u) {\n            var uLabel = g.node(u),\n              uPos = uLabel.order;\n            if ((uPos < k0 || k1 < uPos) &&\n                !(uLabel.dummy && g.node(scanNode).dummy)) {\n              addConflict(conflicts, u, scanNode);\n            }\n          });\n        });\n        scanPos = i + 1;\n        k0 = k1;\n      }\n    });\n\n    return layer;\n  }\n\n  _.reduce(layering, visitLayer);\n  return conflicts;\n}\n\nfunction findType2Conflicts(g, layering) {\n  var conflicts = {};\n\n  function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) {\n    var v;\n    _.forEach(_.range(southPos, southEnd), function(i) {\n      v = south[i];\n      if (g.node(v).dummy) {\n        _.forEach(g.predecessors(v), function(u) {\n          var uNode = g.node(u);\n          if (uNode.dummy &&\n              (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) {\n            addConflict(conflicts, u, v);\n          }\n        });\n      }\n    });\n  }\n\n\n  function visitLayer(north, south) {\n    var prevNorthPos = -1,\n      nextNorthPos,\n      southPos = 0;\n\n    _.forEach(south, function(v, southLookahead) {\n      if (g.node(v).dummy === \"border\") {\n        var predecessors = g.predecessors(v);\n        if (predecessors.length) {\n          nextNorthPos = g.node(predecessors[0]).order;\n          scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos);\n          southPos = southLookahead;\n          prevNorthPos = nextNorthPos;\n        }\n      }\n      scan(south, southPos, south.length, nextNorthPos, north.length);\n    });\n\n    return south;\n  }\n\n  _.reduce(layering, visitLayer);\n  return conflicts;\n}\n\nfunction findOtherInnerSegmentNode(g, v) {\n  if (g.node(v).dummy) {\n    return _.find(g.predecessors(v), function(u) {\n      return g.node(u).dummy;\n    });\n  }\n}\n\nfunction addConflict(conflicts, v, w) {\n  if (v > w) {\n    var tmp = v;\n    v = w;\n    w = tmp;\n  }\n\n  var conflictsV = conflicts[v];\n  if (!conflictsV) {\n    conflicts[v] = conflictsV = {};\n  }\n  conflictsV[w] = true;\n}\n\nfunction hasConflict(conflicts, v, w) {\n  if (v > w) {\n    var tmp = v;\n    v = w;\n    w = tmp;\n  }\n  return _.has(conflicts[v], w);\n}\n\n/*\n * Try to align nodes into vertical \"blocks\" where possible. This algorithm\n * attempts to align a node with one of its median neighbors. If the edge\n * connecting a neighbor is a type-1 conflict then we ignore that possibility.\n * If a previous node has already formed a block with a node after the node\n * we're trying to form a block with, we also ignore that possibility - our\n * blocks would be split in that scenario.\n */\nfunction verticalAlignment(g, layering, conflicts, neighborFn) {\n  var root = {},\n    align = {},\n    pos = {};\n\n  // We cache the position here based on the layering because the graph and\n  // layering may be out of sync. The layering matrix is manipulated to\n  // generate different extreme alignments.\n  _.forEach(layering, function(layer) {\n    _.forEach(layer, function(v, order) {\n      root[v] = v;\n      align[v] = v;\n      pos[v] = order;\n    });\n  });\n\n  _.forEach(layering, function(layer) {\n    var prevIdx = -1;\n    _.forEach(layer, function(v) {\n      var ws = neighborFn(v);\n      if (ws.length) {\n        ws = _.sortBy(ws, function(w) { return pos[w]; });\n        var mp = (ws.length - 1) / 2;\n        for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) {\n          var w = ws[i];\n          if (align[v] === v &&\n              prevIdx < pos[w] &&\n              !hasConflict(conflicts, v, w)) {\n            align[w] = v;\n            align[v] = root[v] = root[w];\n            prevIdx = pos[w];\n          }\n        }\n      }\n    });\n  });\n\n  return { root: root, align: align };\n}\n\nfunction horizontalCompaction(g, layering, root, align, reverseSep) {\n  // This portion of the algorithm differs from BK due to a number of problems.\n  // Instead of their algorithm we construct a new block graph and do two\n  // sweeps. The first sweep places blocks with the smallest possible\n  // coordinates. The second sweep removes unused space by moving blocks to the\n  // greatest coordinates without violating separation.\n  var xs = {},\n    blockG = buildBlockGraph(g, layering, root, reverseSep),\n    borderType = reverseSep ? \"borderLeft\" : \"borderRight\";\n\n  function iterate(setXsFunc, nextNodesFunc) {\n    var stack = blockG.nodes();\n    var elem = stack.pop();\n    var visited = {};\n    while (elem) {\n      if (visited[elem]) {\n        setXsFunc(elem);\n      } else {\n        visited[elem] = true;\n        stack.push(elem);\n        stack = stack.concat(nextNodesFunc(elem));\n      }\n\n      elem = stack.pop();\n    }\n  }\n\n  // First pass, assign smallest coordinates\n  function pass1(elem) {\n    xs[elem] = blockG.inEdges(elem).reduce(function(acc, e) {\n      return Math.max(acc, xs[e.v] + blockG.edge(e));\n    }, 0);\n  }\n\n  // Second pass, assign greatest coordinates\n  function pass2(elem) {\n    var min = blockG.outEdges(elem).reduce(function(acc, e) {\n      return Math.min(acc, xs[e.w] - blockG.edge(e));\n    }, Number.POSITIVE_INFINITY);\n\n    var node = g.node(elem);\n    if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) {\n      xs[elem] = Math.max(xs[elem], min);\n    }\n  }\n\n  iterate(pass1, blockG.predecessors.bind(blockG));\n  iterate(pass2, blockG.successors.bind(blockG));\n\n  // Assign x coordinates to all nodes\n  _.forEach(align, function(v) {\n    xs[v] = xs[root[v]];\n  });\n\n  return xs;\n}\n\n\nfunction buildBlockGraph(g, layering, root, reverseSep) {\n  var blockGraph = new Graph(),\n    graphLabel = g.graph(),\n    sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep);\n\n  _.forEach(layering, function(layer) {\n    var u;\n    _.forEach(layer, function(v) {\n      var vRoot = root[v];\n      blockGraph.setNode(vRoot);\n      if (u) {\n        var uRoot = root[u],\n          prevMax = blockGraph.edge(uRoot, vRoot);\n        blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0));\n      }\n      u = v;\n    });\n  });\n\n  return blockGraph;\n}\n\n/*\n * Returns the alignment that has the smallest width of the given alignments.\n */\nfunction findSmallestWidthAlignment(g, xss) {\n  return _.minBy(_.values(xss), function (xs) {\n    var max = Number.NEGATIVE_INFINITY;\n    var min = Number.POSITIVE_INFINITY;\n\n    _.forIn(xs, function (x, v) {\n      var halfWidth = width(g, v) / 2;\n\n      max = Math.max(x + halfWidth, max);\n      min = Math.min(x - halfWidth, min);\n    });\n\n    return max - min;\n  });\n}\n\n/*\n * Align the coordinates of each of the layout alignments such that\n * left-biased alignments have their minimum coordinate at the same point as\n * the minimum coordinate of the smallest width alignment and right-biased\n * alignments have their maximum coordinate at the same point as the maximum\n * coordinate of the smallest width alignment.\n */\nfunction alignCoordinates(xss, alignTo) {\n  var alignToVals = _.values(alignTo),\n    alignToMin = _.min(alignToVals),\n    alignToMax = _.max(alignToVals);\n\n  _.forEach([\"u\", \"d\"], function(vert) {\n    _.forEach([\"l\", \"r\"], function(horiz) {\n      var alignment = vert + horiz,\n        xs = xss[alignment],\n        delta;\n      if (xs === alignTo) return;\n\n      var xsVals = _.values(xs);\n      delta = horiz === \"l\" ? alignToMin - _.min(xsVals) : alignToMax - _.max(xsVals);\n\n      if (delta) {\n        xss[alignment] = _.mapValues(xs, function(x) { return x + delta; });\n      }\n    });\n  });\n}\n\nfunction balance(xss, align) {\n  return _.mapValues(xss.ul, function(ignore, v) {\n    if (align) {\n      return xss[align.toLowerCase()][v];\n    } else {\n      var xs = _.sortBy(_.map(xss, v));\n      return (xs[1] + xs[2]) / 2;\n    }\n  });\n}\n\nfunction positionX(g) {\n  var layering = util.buildLayerMatrix(g);\n  var conflicts = _.merge(\n    findType1Conflicts(g, layering),\n    findType2Conflicts(g, layering));\n\n  var xss = {};\n  var adjustedLayering;\n  _.forEach([\"u\", \"d\"], function(vert) {\n    adjustedLayering = vert === \"u\" ? layering : _.values(layering).reverse();\n    _.forEach([\"l\", \"r\"], function(horiz) {\n      if (horiz === \"r\") {\n        adjustedLayering = _.map(adjustedLayering, function(inner) {\n          return _.values(inner).reverse();\n        });\n      }\n\n      var neighborFn = (vert === \"u\" ? g.predecessors : g.successors).bind(g);\n      var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn);\n      var xs = horizontalCompaction(g, adjustedLayering,\n        align.root, align.align, horiz === \"r\");\n      if (horiz === \"r\") {\n        xs = _.mapValues(xs, function(x) { return -x; });\n      }\n      xss[vert + horiz] = xs;\n    });\n  });\n\n  var smallestWidth = findSmallestWidthAlignment(g, xss);\n  alignCoordinates(xss, smallestWidth);\n  return balance(xss, g.graph().align);\n}\n\nfunction sep(nodeSep, edgeSep, reverseSep) {\n  return function(g, v, w) {\n    var vLabel = g.node(v);\n    var wLabel = g.node(w);\n    var sum = 0;\n    var delta;\n\n    sum += vLabel.width / 2;\n    if (_.has(vLabel, \"labelpos\")) {\n      switch (vLabel.labelpos.toLowerCase()) {\n      case \"l\": delta = -vLabel.width / 2; break;\n      case \"r\": delta = vLabel.width / 2; break;\n      }\n    }\n    if (delta) {\n      sum += reverseSep ? delta : -delta;\n    }\n    delta = 0;\n\n    sum += (vLabel.dummy ? edgeSep : nodeSep) / 2;\n    sum += (wLabel.dummy ? edgeSep : nodeSep) / 2;\n\n    sum += wLabel.width / 2;\n    if (_.has(wLabel, \"labelpos\")) {\n      switch (wLabel.labelpos.toLowerCase()) {\n      case \"l\": delta = wLabel.width / 2; break;\n      case \"r\": delta = -wLabel.width / 2; break;\n      }\n    }\n    if (delta) {\n      sum += reverseSep ? delta : -delta;\n    }\n    delta = 0;\n\n    return sum;\n  };\n}\n\nfunction width(g, v) {\n  return g.node(v).width;\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\nvar util = require(\"../util\");\nvar positionX = require(\"./bk\").positionX;\n\nmodule.exports = position;\n\nfunction position(g) {\n  g = util.asNonCompoundGraph(g);\n\n  positionY(g);\n  _.forEach(positionX(g), function(x, v) {\n    g.node(v).x = x;\n  });\n}\n\nfunction positionY(g) {\n  var layering = util.buildLayerMatrix(g);\n  var rankSep = g.graph().ranksep;\n  var prevY = 0;\n  _.forEach(layering, function(layer) {\n    var maxHeight = _.max(_.map(layer, function(v) { return g.node(v).height; }));\n    _.forEach(layer, function(v) {\n      g.node(v).y = prevY + maxHeight / 2;\n    });\n    prevY += maxHeight + rankSep;\n  });\n}\n\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\nvar Graph = require(\"../graphlib\").Graph;\nvar slack = require(\"./util\").slack;\n\nmodule.exports = feasibleTree;\n\n/*\n * Constructs a spanning tree with tight edges and adjusted the input node's\n * ranks to achieve this. A tight edge is one that is has a length that matches\n * its \"minlen\" attribute.\n *\n * The basic structure for this function is derived from Gansner, et al., \"A\n * Technique for Drawing Directed Graphs.\"\n *\n * Pre-conditions:\n *\n *    1. Graph must be a DAG.\n *    2. Graph must be connected.\n *    3. Graph must have at least one node.\n *    5. Graph nodes must have been previously assigned a \"rank\" property that\n *       respects the \"minlen\" property of incident edges.\n *    6. Graph edges must have a \"minlen\" property.\n *\n * Post-conditions:\n *\n *    - Graph nodes will have their rank adjusted to ensure that all edges are\n *      tight.\n *\n * Returns a tree (undirected graph) that is constructed using only \"tight\"\n * edges.\n */\nfunction feasibleTree(g) {\n  var t = new Graph({ directed: false });\n\n  // Choose arbitrary node from which to start our tree\n  var start = g.nodes()[0];\n  var size = g.nodeCount();\n  t.setNode(start, {});\n\n  var edge, delta;\n  while (tightTree(t, g) < size) {\n    edge = findMinSlackEdge(t, g);\n    delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge);\n    shiftRanks(t, g, delta);\n  }\n\n  return t;\n}\n\n/*\n * Finds a maximal tree of tight edges and returns the number of nodes in the\n * tree.\n */\nfunction tightTree(t, g) {\n  function dfs(v) {\n    _.forEach(g.nodeEdges(v), function(e) {\n      var edgeV = e.v,\n        w = (v === edgeV) ? e.w : edgeV;\n      if (!t.hasNode(w) && !slack(g, e)) {\n        t.setNode(w, {});\n        t.setEdge(v, w, {});\n        dfs(w);\n      }\n    });\n  }\n\n  _.forEach(t.nodes(), dfs);\n  return t.nodeCount();\n}\n\n/*\n * Finds the edge with the smallest slack that is incident on tree and returns\n * it.\n */\nfunction findMinSlackEdge(t, g) {\n  return _.minBy(g.edges(), function(e) {\n    if (t.hasNode(e.v) !== t.hasNode(e.w)) {\n      return slack(g, e);\n    }\n  });\n}\n\nfunction shiftRanks(t, g, delta) {\n  _.forEach(t.nodes(), function(v) {\n    g.node(v).rank += delta;\n  });\n}\n","\"use strict\";\n\nvar rankUtil = require(\"./util\");\nvar longestPath = rankUtil.longestPath;\nvar feasibleTree = require(\"./feasible-tree\");\nvar networkSimplex = require(\"./network-simplex\");\n\nmodule.exports = rank;\n\n/*\n * Assigns a rank to each node in the input graph that respects the \"minlen\"\n * constraint specified on edges between nodes.\n *\n * This basic structure is derived from Gansner, et al., \"A Technique for\n * Drawing Directed Graphs.\"\n *\n * Pre-conditions:\n *\n *    1. Graph must be a connected DAG\n *    2. Graph nodes must be objects\n *    3. Graph edges must have \"weight\" and \"minlen\" attributes\n *\n * Post-conditions:\n *\n *    1. Graph nodes will have a \"rank\" attribute based on the results of the\n *       algorithm. Ranks can start at any index (including negative), we'll\n *       fix them up later.\n */\nfunction rank(g) {\n  switch(g.graph().ranker) {\n  case \"network-simplex\": networkSimplexRanker(g); break;\n  case \"tight-tree\": tightTreeRanker(g); break;\n  case \"longest-path\": longestPathRanker(g); break;\n  default: networkSimplexRanker(g);\n  }\n}\n\n// A fast and simple ranker, but results are far from optimal.\nvar longestPathRanker = longestPath;\n\nfunction tightTreeRanker(g) {\n  longestPath(g);\n  feasibleTree(g);\n}\n\nfunction networkSimplexRanker(g) {\n  networkSimplex(g);\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\nvar feasibleTree = require(\"./feasible-tree\");\nvar slack = require(\"./util\").slack;\nvar initRank = require(\"./util\").longestPath;\nvar preorder = require(\"../graphlib\").alg.preorder;\nvar postorder = require(\"../graphlib\").alg.postorder;\nvar simplify = require(\"../util\").simplify;\n\nmodule.exports = networkSimplex;\n\n// Expose some internals for testing purposes\nnetworkSimplex.initLowLimValues = initLowLimValues;\nnetworkSimplex.initCutValues = initCutValues;\nnetworkSimplex.calcCutValue = calcCutValue;\nnetworkSimplex.leaveEdge = leaveEdge;\nnetworkSimplex.enterEdge = enterEdge;\nnetworkSimplex.exchangeEdges = exchangeEdges;\n\n/*\n * The network simplex algorithm assigns ranks to each node in the input graph\n * and iteratively improves the ranking to reduce the length of edges.\n *\n * Preconditions:\n *\n *    1. The input graph must be a DAG.\n *    2. All nodes in the graph must have an object value.\n *    3. All edges in the graph must have \"minlen\" and \"weight\" attributes.\n *\n * Postconditions:\n *\n *    1. All nodes in the graph will have an assigned \"rank\" attribute that has\n *       been optimized by the network simplex algorithm. Ranks start at 0.\n *\n *\n * A rough sketch of the algorithm is as follows:\n *\n *    1. Assign initial ranks to each node. We use the longest path algorithm,\n *       which assigns ranks to the lowest position possible. In general this\n *       leads to very wide bottom ranks and unnecessarily long edges.\n *    2. Construct a feasible tight tree. A tight tree is one such that all\n *       edges in the tree have no slack (difference between length of edge\n *       and minlen for the edge). This by itself greatly improves the assigned\n *       rankings by shorting edges.\n *    3. Iteratively find edges that have negative cut values. Generally a\n *       negative cut value indicates that the edge could be removed and a new\n *       tree edge could be added to produce a more compact graph.\n *\n * Much of the algorithms here are derived from Gansner, et al., \"A Technique\n * for Drawing Directed Graphs.\" The structure of the file roughly follows the\n * structure of the overall algorithm.\n */\nfunction networkSimplex(g) {\n  g = simplify(g);\n  initRank(g);\n  var t = feasibleTree(g);\n  initLowLimValues(t);\n  initCutValues(t, g);\n\n  var e, f;\n  while ((e = leaveEdge(t))) {\n    f = enterEdge(t, g, e);\n    exchangeEdges(t, g, e, f);\n  }\n}\n\n/*\n * Initializes cut values for all edges in the tree.\n */\nfunction initCutValues(t, g) {\n  var vs = postorder(t, t.nodes());\n  vs = vs.slice(0, vs.length - 1);\n  _.forEach(vs, function(v) {\n    assignCutValue(t, g, v);\n  });\n}\n\nfunction assignCutValue(t, g, child) {\n  var childLab = t.node(child);\n  var parent = childLab.parent;\n  t.edge(child, parent).cutvalue = calcCutValue(t, g, child);\n}\n\n/*\n * Given the tight tree, its graph, and a child in the graph calculate and\n * return the cut value for the edge between the child and its parent.\n */\nfunction calcCutValue(t, g, child) {\n  var childLab = t.node(child);\n  var parent = childLab.parent;\n  // True if the child is on the tail end of the edge in the directed graph\n  var childIsTail = true;\n  // The graph's view of the tree edge we're inspecting\n  var graphEdge = g.edge(child, parent);\n  // The accumulated cut value for the edge between this node and its parent\n  var cutValue = 0;\n\n  if (!graphEdge) {\n    childIsTail = false;\n    graphEdge = g.edge(parent, child);\n  }\n\n  cutValue = graphEdge.weight;\n\n  _.forEach(g.nodeEdges(child), function(e) {\n    var isOutEdge = e.v === child,\n      other = isOutEdge ? e.w : e.v;\n\n    if (other !== parent) {\n      var pointsToHead = isOutEdge === childIsTail,\n        otherWeight = g.edge(e).weight;\n\n      cutValue += pointsToHead ? otherWeight : -otherWeight;\n      if (isTreeEdge(t, child, other)) {\n        var otherCutValue = t.edge(child, other).cutvalue;\n        cutValue += pointsToHead ? -otherCutValue : otherCutValue;\n      }\n    }\n  });\n\n  return cutValue;\n}\n\nfunction initLowLimValues(tree, root) {\n  if (arguments.length < 2) {\n    root = tree.nodes()[0];\n  }\n  dfsAssignLowLim(tree, {}, 1, root);\n}\n\nfunction dfsAssignLowLim(tree, visited, nextLim, v, parent) {\n  var low = nextLim;\n  var label = tree.node(v);\n\n  visited[v] = true;\n  _.forEach(tree.neighbors(v), function(w) {\n    if (!_.has(visited, w)) {\n      nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v);\n    }\n  });\n\n  label.low = low;\n  label.lim = nextLim++;\n  if (parent) {\n    label.parent = parent;\n  } else {\n    // TODO should be able to remove this when we incrementally update low lim\n    delete label.parent;\n  }\n\n  return nextLim;\n}\n\nfunction leaveEdge(tree) {\n  return _.find(tree.edges(), function(e) {\n    return tree.edge(e).cutvalue < 0;\n  });\n}\n\nfunction enterEdge(t, g, edge) {\n  var v = edge.v;\n  var w = edge.w;\n\n  // For the rest of this function we assume that v is the tail and w is the\n  // head, so if we don't have this edge in the graph we should flip it to\n  // match the correct orientation.\n  if (!g.hasEdge(v, w)) {\n    v = edge.w;\n    w = edge.v;\n  }\n\n  var vLabel = t.node(v);\n  var wLabel = t.node(w);\n  var tailLabel = vLabel;\n  var flip = false;\n\n  // If the root is in the tail of the edge then we need to flip the logic that\n  // checks for the head and tail nodes in the candidates function below.\n  if (vLabel.lim > wLabel.lim) {\n    tailLabel = wLabel;\n    flip = true;\n  }\n\n  var candidates = _.filter(g.edges(), function(edge) {\n    return flip === isDescendant(t, t.node(edge.v), tailLabel) &&\n           flip !== isDescendant(t, t.node(edge.w), tailLabel);\n  });\n\n  return _.minBy(candidates, function(edge) { return slack(g, edge); });\n}\n\nfunction exchangeEdges(t, g, e, f) {\n  var v = e.v;\n  var w = e.w;\n  t.removeEdge(v, w);\n  t.setEdge(f.v, f.w, {});\n  initLowLimValues(t);\n  initCutValues(t, g);\n  updateRanks(t, g);\n}\n\nfunction updateRanks(t, g) {\n  var root = _.find(t.nodes(), function(v) { return !g.node(v).parent; });\n  var vs = preorder(t, root);\n  vs = vs.slice(1);\n  _.forEach(vs, function(v) {\n    var parent = t.node(v).parent,\n      edge = g.edge(v, parent),\n      flipped = false;\n\n    if (!edge) {\n      edge = g.edge(parent, v);\n      flipped = true;\n    }\n\n    g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen);\n  });\n}\n\n/*\n * Returns true if the edge is in the tree.\n */\nfunction isTreeEdge(tree, u, v) {\n  return tree.hasEdge(u, v);\n}\n\n/*\n * Returns true if the specified node is descendant of the root node per the\n * assigned low and lim attributes in the tree.\n */\nfunction isDescendant(tree, vLabel, rootLabel) {\n  return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim;\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\n\nmodule.exports = {\n  longestPath: longestPath,\n  slack: slack\n};\n\n/*\n * Initializes ranks for the input graph using the longest path algorithm. This\n * algorithm scales well and is fast in practice, it yields rather poor\n * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\n * ranks wide and leaving edges longer than necessary. However, due to its\n * speed, this algorithm is good for getting an initial ranking that can be fed\n * into other algorithms.\n *\n * This algorithm does not normalize layers because it will be used by other\n * algorithms in most cases. If using this algorithm directly, be sure to\n * run normalize at the end.\n *\n * Pre-conditions:\n *\n *    1. Input graph is a DAG.\n *    2. Input graph node labels can be assigned properties.\n *\n * Post-conditions:\n *\n *    1. Each node will be assign an (unnormalized) \"rank\" property.\n */\nfunction longestPath(g) {\n  var visited = {};\n\n  function dfs(v) {\n    var label = g.node(v);\n    if (_.has(visited, v)) {\n      return label.rank;\n    }\n    visited[v] = true;\n\n    var rank = _.min(_.map(g.outEdges(v), function(e) {\n      return dfs(e.w) - g.edge(e).minlen;\n    }));\n\n    if (rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3\n        rank === undefined || // return value of _.map([]) for Lodash 4\n        rank === null) { // return value of _.map([null])\n      rank = 0;\n    }\n\n    return (label.rank = rank);\n  }\n\n  _.forEach(g.sources(), dfs);\n}\n\n/*\n * Returns the amount of slack for the given edge. The slack is defined as the\n * difference between the length of the edge and its minimum length.\n */\nfunction slack(g, e) {\n  return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen;\n}\n","/* eslint \"no-console\": off */\n\n\"use strict\";\n\nvar _ = require(\"./lodash\");\nvar Graph = require(\"./graphlib\").Graph;\n\nmodule.exports = {\n  addDummyNode: addDummyNode,\n  simplify: simplify,\n  asNonCompoundGraph: asNonCompoundGraph,\n  successorWeights: successorWeights,\n  predecessorWeights: predecessorWeights,\n  intersectRect: intersectRect,\n  buildLayerMatrix: buildLayerMatrix,\n  normalizeRanks: normalizeRanks,\n  removeEmptyRanks: removeEmptyRanks,\n  addBorderNode: addBorderNode,\n  maxRank: maxRank,\n  partition: partition,\n  time: time,\n  notime: notime\n};\n\n/*\n * Adds a dummy node to the graph and return v.\n */\nfunction addDummyNode(g, type, attrs, name) {\n  var v;\n  do {\n    v = _.uniqueId(name);\n  } while (g.hasNode(v));\n\n  attrs.dummy = type;\n  g.setNode(v, attrs);\n  return v;\n}\n\n/*\n * Returns a new graph with only simple edges. Handles aggregation of data\n * associated with multi-edges.\n */\nfunction simplify(g) {\n  var simplified = new Graph().setGraph(g.graph());\n  _.forEach(g.nodes(), function(v) { simplified.setNode(v, g.node(v)); });\n  _.forEach(g.edges(), function(e) {\n    var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 };\n    var label = g.edge(e);\n    simplified.setEdge(e.v, e.w, {\n      weight: simpleLabel.weight + label.weight,\n      minlen: Math.max(simpleLabel.minlen, label.minlen)\n    });\n  });\n  return simplified;\n}\n\nfunction asNonCompoundGraph(g) {\n  var simplified = new Graph({ multigraph: g.isMultigraph() }).setGraph(g.graph());\n  _.forEach(g.nodes(), function(v) {\n    if (!g.children(v).length) {\n      simplified.setNode(v, g.node(v));\n    }\n  });\n  _.forEach(g.edges(), function(e) {\n    simplified.setEdge(e, g.edge(e));\n  });\n  return simplified;\n}\n\nfunction successorWeights(g) {\n  var weightMap = _.map(g.nodes(), function(v) {\n    var sucs = {};\n    _.forEach(g.outEdges(v), function(e) {\n      sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight;\n    });\n    return sucs;\n  });\n  return _.zipObject(g.nodes(), weightMap);\n}\n\nfunction predecessorWeights(g) {\n  var weightMap = _.map(g.nodes(), function(v) {\n    var preds = {};\n    _.forEach(g.inEdges(v), function(e) {\n      preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight;\n    });\n    return preds;\n  });\n  return _.zipObject(g.nodes(), weightMap);\n}\n\n/*\n * Finds where a line starting at point ({x, y}) would intersect a rectangle\n * ({x, y, width, height}) if it were pointing at the rectangle's center.\n */\nfunction intersectRect(rect, point) {\n  var x = rect.x;\n  var y = rect.y;\n\n  // Rectangle intersection algorithm from:\n  // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes\n  var dx = point.x - x;\n  var dy = point.y - y;\n  var w = rect.width / 2;\n  var h = rect.height / 2;\n\n  if (!dx && !dy) {\n    throw new Error(\"Not possible to find intersection inside of the rectangle\");\n  }\n\n  var sx, sy;\n  if (Math.abs(dy) * w > Math.abs(dx) * h) {\n    // Intersection is top or bottom of rect.\n    if (dy < 0) {\n      h = -h;\n    }\n    sx = h * dx / dy;\n    sy = h;\n  } else {\n    // Intersection is left or right of rect.\n    if (dx < 0) {\n      w = -w;\n    }\n    sx = w;\n    sy = w * dy / dx;\n  }\n\n  return { x: x + sx, y: y + sy };\n}\n\n/*\n * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\n * function will produce a matrix with the ids of each node.\n */\nfunction buildLayerMatrix(g) {\n  var layering = _.map(_.range(maxRank(g) + 1), function() { return []; });\n  _.forEach(g.nodes(), function(v) {\n    var node = g.node(v);\n    var rank = node.rank;\n    if (!_.isUndefined(rank)) {\n      layering[rank][node.order] = v;\n    }\n  });\n  return layering;\n}\n\n/*\n * Adjusts the ranks for all nodes in the graph such that all nodes v have\n * rank(v) >= 0 and at least one node w has rank(w) = 0.\n */\nfunction normalizeRanks(g) {\n  var min = _.min(_.map(g.nodes(), function(v) { return g.node(v).rank; }));\n  _.forEach(g.nodes(), function(v) {\n    var node = g.node(v);\n    if (_.has(node, \"rank\")) {\n      node.rank -= min;\n    }\n  });\n}\n\nfunction removeEmptyRanks(g) {\n  // Ranks may not start at 0, so we need to offset them\n  var offset = _.min(_.map(g.nodes(), function(v) { return g.node(v).rank; }));\n\n  var layers = [];\n  _.forEach(g.nodes(), function(v) {\n    var rank = g.node(v).rank - offset;\n    if (!layers[rank]) {\n      layers[rank] = [];\n    }\n    layers[rank].push(v);\n  });\n\n  var delta = 0;\n  var nodeRankFactor = g.graph().nodeRankFactor;\n  _.forEach(layers, function(vs, i) {\n    if (_.isUndefined(vs) && i % nodeRankFactor !== 0) {\n      --delta;\n    } else if (delta) {\n      _.forEach(vs, function(v) { g.node(v).rank += delta; });\n    }\n  });\n}\n\nfunction addBorderNode(g, prefix, rank, order) {\n  var node = {\n    width: 0,\n    height: 0\n  };\n  if (arguments.length >= 4) {\n    node.rank = rank;\n    node.order = order;\n  }\n  return addDummyNode(g, \"border\", node, prefix);\n}\n\nfunction maxRank(g) {\n  return _.max(_.map(g.nodes(), function(v) {\n    var rank = g.node(v).rank;\n    if (!_.isUndefined(rank)) {\n      return rank;\n    }\n  }));\n}\n\n/*\n * Partition a collection into two groups: `lhs` and `rhs`. If the supplied\n * function returns true for an entry it goes into `lhs`. Otherwise it goes\n * into `rhs.\n */\nfunction partition(collection, fn) {\n  var result = { lhs: [], rhs: [] };\n  _.forEach(collection, function(value) {\n    if (fn(value)) {\n      result.lhs.push(value);\n    } else {\n      result.rhs.push(value);\n    }\n  });\n  return result;\n}\n\n/*\n * Returns a new function that wraps `fn` with a timer. The wrapper logs the\n * time it takes to execute the function.\n */\nfunction time(name, fn) {\n  var start = _.now();\n  try {\n    return fn();\n  } finally {\n    console.log(name + \" time: \" + (_.now() - start) + \"ms\");\n  }\n}\n\nfunction notime(name, fn) {\n  return fn();\n}\n","module.exports = \"0.8.5\";\n","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n","/**\n * Copyright (c) 2014, Chris Pettitt\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its contributors\n * may be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar lib = require(\"./lib\");\n\nmodule.exports = {\n  Graph: lib.Graph,\n  json: require(\"./lib/json\"),\n  alg: require(\"./lib/alg\"),\n  version: lib.version\n};\n","var _ = require(\"../lodash\");\n\nmodule.exports = components;\n\nfunction components(g) {\n  var visited = {};\n  var cmpts = [];\n  var cmpt;\n\n  function dfs(v) {\n    if (_.has(visited, v)) return;\n    visited[v] = true;\n    cmpt.push(v);\n    _.each(g.successors(v), dfs);\n    _.each(g.predecessors(v), dfs);\n  }\n\n  _.each(g.nodes(), function(v) {\n    cmpt = [];\n    dfs(v);\n    if (cmpt.length) {\n      cmpts.push(cmpt);\n    }\n  });\n\n  return cmpts;\n}\n","var _ = require(\"../lodash\");\n\nmodule.exports = dfs;\n\n/*\n * A helper that preforms a pre- or post-order traversal on the input graph\n * and returns the nodes in the order they were visited. If the graph is\n * undirected then this algorithm will navigate using neighbors. If the graph\n * is directed then this algorithm will navigate using successors.\n *\n * Order must be one of \"pre\" or \"post\".\n */\nfunction dfs(g, vs, order) {\n  if (!_.isArray(vs)) {\n    vs = [vs];\n  }\n\n  var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g);\n\n  var acc = [];\n  var visited = {};\n  _.each(vs, function(v) {\n    if (!g.hasNode(v)) {\n      throw new Error(\"Graph does not have node: \" + v);\n    }\n\n    doDfs(g, v, order === \"post\", visited, navigation, acc);\n  });\n  return acc;\n}\n\nfunction doDfs(g, v, postorder, visited, navigation, acc) {\n  if (!_.has(visited, v)) {\n    visited[v] = true;\n\n    if (!postorder) { acc.push(v); }\n    _.each(navigation(v), function(w) {\n      doDfs(g, w, postorder, visited, navigation, acc);\n    });\n    if (postorder) { acc.push(v); }\n  }\n}\n","var dijkstra = require(\"./dijkstra\");\nvar _ = require(\"../lodash\");\n\nmodule.exports = dijkstraAll;\n\nfunction dijkstraAll(g, weightFunc, edgeFunc) {\n  return _.transform(g.nodes(), function(acc, v) {\n    acc[v] = dijkstra(g, v, weightFunc, edgeFunc);\n  }, {});\n}\n","var _ = require(\"../lodash\");\nvar PriorityQueue = require(\"../data/priority-queue\");\n\nmodule.exports = dijkstra;\n\nvar DEFAULT_WEIGHT_FUNC = _.constant(1);\n\nfunction dijkstra(g, source, weightFn, edgeFn) {\n  return runDijkstra(g, String(source),\n    weightFn || DEFAULT_WEIGHT_FUNC,\n    edgeFn || function(v) { return g.outEdges(v); });\n}\n\nfunction runDijkstra(g, source, weightFn, edgeFn) {\n  var results = {};\n  var pq = new PriorityQueue();\n  var v, vEntry;\n\n  var updateNeighbors = function(edge) {\n    var w = edge.v !== v ? edge.v : edge.w;\n    var wEntry = results[w];\n    var weight = weightFn(edge);\n    var distance = vEntry.distance + weight;\n\n    if (weight < 0) {\n      throw new Error(\"dijkstra does not allow negative edge weights. \" +\n                      \"Bad edge: \" + edge + \" Weight: \" + weight);\n    }\n\n    if (distance < wEntry.distance) {\n      wEntry.distance = distance;\n      wEntry.predecessor = v;\n      pq.decrease(w, distance);\n    }\n  };\n\n  g.nodes().forEach(function(v) {\n    var distance = v === source ? 0 : Number.POSITIVE_INFINITY;\n    results[v] = { distance: distance };\n    pq.add(v, distance);\n  });\n\n  while (pq.size() > 0) {\n    v = pq.removeMin();\n    vEntry = results[v];\n    if (vEntry.distance === Number.POSITIVE_INFINITY) {\n      break;\n    }\n\n    edgeFn(v).forEach(updateNeighbors);\n  }\n\n  return results;\n}\n","var _ = require(\"../lodash\");\nvar tarjan = require(\"./tarjan\");\n\nmodule.exports = findCycles;\n\nfunction findCycles(g) {\n  return _.filter(tarjan(g), function(cmpt) {\n    return cmpt.length > 1 || (cmpt.length === 1 && g.hasEdge(cmpt[0], cmpt[0]));\n  });\n}\n","var _ = require(\"../lodash\");\n\nmodule.exports = floydWarshall;\n\nvar DEFAULT_WEIGHT_FUNC = _.constant(1);\n\nfunction floydWarshall(g, weightFn, edgeFn) {\n  return runFloydWarshall(g,\n    weightFn || DEFAULT_WEIGHT_FUNC,\n    edgeFn || function(v) { return g.outEdges(v); });\n}\n\nfunction runFloydWarshall(g, weightFn, edgeFn) {\n  var results = {};\n  var nodes = g.nodes();\n\n  nodes.forEach(function(v) {\n    results[v] = {};\n    results[v][v] = { distance: 0 };\n    nodes.forEach(function(w) {\n      if (v !== w) {\n        results[v][w] = { distance: Number.POSITIVE_INFINITY };\n      }\n    });\n    edgeFn(v).forEach(function(edge) {\n      var w = edge.v === v ? edge.w : edge.v;\n      var d = weightFn(edge);\n      results[v][w] = { distance: d, predecessor: v };\n    });\n  });\n\n  nodes.forEach(function(k) {\n    var rowK = results[k];\n    nodes.forEach(function(i) {\n      var rowI = results[i];\n      nodes.forEach(function(j) {\n        var ik = rowI[k];\n        var kj = rowK[j];\n        var ij = rowI[j];\n        var altDistance = ik.distance + kj.distance;\n        if (altDistance < ij.distance) {\n          ij.distance = altDistance;\n          ij.predecessor = kj.predecessor;\n        }\n      });\n    });\n  });\n\n  return results;\n}\n","module.exports = {\n  components: require(\"./components\"),\n  dijkstra: require(\"./dijkstra\"),\n  dijkstraAll: require(\"./dijkstra-all\"),\n  findCycles: require(\"./find-cycles\"),\n  floydWarshall: require(\"./floyd-warshall\"),\n  isAcyclic: require(\"./is-acyclic\"),\n  postorder: require(\"./postorder\"),\n  preorder: require(\"./preorder\"),\n  prim: require(\"./prim\"),\n  tarjan: require(\"./tarjan\"),\n  topsort: require(\"./topsort\")\n};\n","var topsort = require(\"./topsort\");\n\nmodule.exports = isAcyclic;\n\nfunction isAcyclic(g) {\n  try {\n    topsort(g);\n  } catch (e) {\n    if (e instanceof topsort.CycleException) {\n      return false;\n    }\n    throw e;\n  }\n  return true;\n}\n","var dfs = require(\"./dfs\");\n\nmodule.exports = postorder;\n\nfunction postorder(g, vs) {\n  return dfs(g, vs, \"post\");\n}\n","var dfs = require(\"./dfs\");\n\nmodule.exports = preorder;\n\nfunction preorder(g, vs) {\n  return dfs(g, vs, \"pre\");\n}\n","var _ = require(\"../lodash\");\nvar Graph = require(\"../graph\");\nvar PriorityQueue = require(\"../data/priority-queue\");\n\nmodule.exports = prim;\n\nfunction prim(g, weightFunc) {\n  var result = new Graph();\n  var parents = {};\n  var pq = new PriorityQueue();\n  var v;\n\n  function updateNeighbors(edge) {\n    var w = edge.v === v ? edge.w : edge.v;\n    var pri = pq.priority(w);\n    if (pri !== undefined) {\n      var edgeWeight = weightFunc(edge);\n      if (edgeWeight < pri) {\n        parents[w] = v;\n        pq.decrease(w, edgeWeight);\n      }\n    }\n  }\n\n  if (g.nodeCount() === 0) {\n    return result;\n  }\n\n  _.each(g.nodes(), function(v) {\n    pq.add(v, Number.POSITIVE_INFINITY);\n    result.setNode(v);\n  });\n\n  // Start from an arbitrary node\n  pq.decrease(g.nodes()[0], 0);\n\n  var init = false;\n  while (pq.size() > 0) {\n    v = pq.removeMin();\n    if (_.has(parents, v)) {\n      result.setEdge(v, parents[v]);\n    } else if (init) {\n      throw new Error(\"Input graph is not connected: \" + g);\n    } else {\n      init = true;\n    }\n\n    g.nodeEdges(v).forEach(updateNeighbors);\n  }\n\n  return result;\n}\n","var _ = require(\"../lodash\");\n\nmodule.exports = tarjan;\n\nfunction tarjan(g) {\n  var index = 0;\n  var stack = [];\n  var visited = {}; // node id -> { onStack, lowlink, index }\n  var results = [];\n\n  function dfs(v) {\n    var entry = visited[v] = {\n      onStack: true,\n      lowlink: index,\n      index: index++\n    };\n    stack.push(v);\n\n    g.successors(v).forEach(function(w) {\n      if (!_.has(visited, w)) {\n        dfs(w);\n        entry.lowlink = Math.min(entry.lowlink, visited[w].lowlink);\n      } else if (visited[w].onStack) {\n        entry.lowlink = Math.min(entry.lowlink, visited[w].index);\n      }\n    });\n\n    if (entry.lowlink === entry.index) {\n      var cmpt = [];\n      var w;\n      do {\n        w = stack.pop();\n        visited[w].onStack = false;\n        cmpt.push(w);\n      } while (v !== w);\n      results.push(cmpt);\n    }\n  }\n\n  g.nodes().forEach(function(v) {\n    if (!_.has(visited, v)) {\n      dfs(v);\n    }\n  });\n\n  return results;\n}\n","var _ = require(\"../lodash\");\n\nmodule.exports = topsort;\ntopsort.CycleException = CycleException;\n\nfunction topsort(g) {\n  var visited = {};\n  var stack = {};\n  var results = [];\n\n  function visit(node) {\n    if (_.has(stack, node)) {\n      throw new CycleException();\n    }\n\n    if (!_.has(visited, node)) {\n      stack[node] = true;\n      visited[node] = true;\n      _.each(g.predecessors(node), visit);\n      delete stack[node];\n      results.push(node);\n    }\n  }\n\n  _.each(g.sinks(), visit);\n\n  if (_.size(visited) !== g.nodeCount()) {\n    throw new CycleException();\n  }\n\n  return results;\n}\n\nfunction CycleException() {}\nCycleException.prototype = new Error(); // must be an instance of Error to pass testing","var _ = require(\"../lodash\");\n\nmodule.exports = PriorityQueue;\n\n/**\n * A min-priority queue data structure. This algorithm is derived from Cormen,\n * et al., \"Introduction to Algorithms\". The basic idea of a min-priority\n * queue is that you can efficiently (in O(1) time) get the smallest key in\n * the queue. Adding and removing elements takes O(log n) time. A key can\n * have its priority decreased in O(log n) time.\n */\nfunction PriorityQueue() {\n  this._arr = [];\n  this._keyIndices = {};\n}\n\n/**\n * Returns the number of elements in the queue. Takes `O(1)` time.\n */\nPriorityQueue.prototype.size = function() {\n  return this._arr.length;\n};\n\n/**\n * Returns the keys that are in the queue. Takes `O(n)` time.\n */\nPriorityQueue.prototype.keys = function() {\n  return this._arr.map(function(x) { return x.key; });\n};\n\n/**\n * Returns `true` if **key** is in the queue and `false` if not.\n */\nPriorityQueue.prototype.has = function(key) {\n  return _.has(this._keyIndices, key);\n};\n\n/**\n * Returns the priority for **key**. If **key** is not present in the queue\n * then this function returns `undefined`. Takes `O(1)` time.\n *\n * @param {Object} key\n */\nPriorityQueue.prototype.priority = function(key) {\n  var index = this._keyIndices[key];\n  if (index !== undefined) {\n    return this._arr[index].priority;\n  }\n};\n\n/**\n * Returns the key for the minimum element in this queue. If the queue is\n * empty this function throws an Error. Takes `O(1)` time.\n */\nPriorityQueue.prototype.min = function() {\n  if (this.size() === 0) {\n    throw new Error(\"Queue underflow\");\n  }\n  return this._arr[0].key;\n};\n\n/**\n * Inserts a new key into the priority queue. If the key already exists in\n * the queue this function returns `false`; otherwise it will return `true`.\n * Takes `O(n)` time.\n *\n * @param {Object} key the key to add\n * @param {Number} priority the initial priority for the key\n */\nPriorityQueue.prototype.add = function(key, priority) {\n  var keyIndices = this._keyIndices;\n  key = String(key);\n  if (!_.has(keyIndices, key)) {\n    var arr = this._arr;\n    var index = arr.length;\n    keyIndices[key] = index;\n    arr.push({key: key, priority: priority});\n    this._decrease(index);\n    return true;\n  }\n  return false;\n};\n\n/**\n * Removes and returns the smallest key in the queue. Takes `O(log n)` time.\n */\nPriorityQueue.prototype.removeMin = function() {\n  this._swap(0, this._arr.length - 1);\n  var min = this._arr.pop();\n  delete this._keyIndices[min.key];\n  this._heapify(0);\n  return min.key;\n};\n\n/**\n * Decreases the priority for **key** to **priority**. If the new priority is\n * greater than the previous priority, this function will throw an Error.\n *\n * @param {Object} key the key for which to raise priority\n * @param {Number} priority the new priority for the key\n */\nPriorityQueue.prototype.decrease = function(key, priority) {\n  var index = this._keyIndices[key];\n  if (priority > this._arr[index].priority) {\n    throw new Error(\"New priority is greater than current priority. \" +\n        \"Key: \" + key + \" Old: \" + this._arr[index].priority + \" New: \" + priority);\n  }\n  this._arr[index].priority = priority;\n  this._decrease(index);\n};\n\nPriorityQueue.prototype._heapify = function(i) {\n  var arr = this._arr;\n  var l = 2 * i;\n  var r = l + 1;\n  var largest = i;\n  if (l < arr.length) {\n    largest = arr[l].priority < arr[largest].priority ? l : largest;\n    if (r < arr.length) {\n      largest = arr[r].priority < arr[largest].priority ? r : largest;\n    }\n    if (largest !== i) {\n      this._swap(i, largest);\n      this._heapify(largest);\n    }\n  }\n};\n\nPriorityQueue.prototype._decrease = function(index) {\n  var arr = this._arr;\n  var priority = arr[index].priority;\n  var parent;\n  while (index !== 0) {\n    parent = index >> 1;\n    if (arr[parent].priority < priority) {\n      break;\n    }\n    this._swap(index, parent);\n    index = parent;\n  }\n};\n\nPriorityQueue.prototype._swap = function(i, j) {\n  var arr = this._arr;\n  var keyIndices = this._keyIndices;\n  var origArrI = arr[i];\n  var origArrJ = arr[j];\n  arr[i] = origArrJ;\n  arr[j] = origArrI;\n  keyIndices[origArrJ.key] = i;\n  keyIndices[origArrI.key] = j;\n};\n","\"use strict\";\n\nvar _ = require(\"./lodash\");\n\nmodule.exports = Graph;\n\nvar DEFAULT_EDGE_NAME = \"\\x00\";\nvar GRAPH_NODE = \"\\x00\";\nvar EDGE_KEY_DELIM = \"\\x01\";\n\n// Implementation notes:\n//\n//  * Node id query functions should return string ids for the nodes\n//  * Edge id query functions should return an \"edgeObj\", edge object, that is\n//    composed of enough information to uniquely identify an edge: {v, w, name}.\n//  * Internally we use an \"edgeId\", a stringified form of the edgeObj, to\n//    reference edges. This is because we need a performant way to look these\n//    edges up and, object properties, which have string keys, are the closest\n//    we're going to get to a performant hashtable in JavaScript.\n\nfunction Graph(opts) {\n  this._isDirected = _.has(opts, \"directed\") ? opts.directed : true;\n  this._isMultigraph = _.has(opts, \"multigraph\") ? opts.multigraph : false;\n  this._isCompound = _.has(opts, \"compound\") ? opts.compound : false;\n\n  // Label for the graph itself\n  this._label = undefined;\n\n  // Defaults to be set when creating a new node\n  this._defaultNodeLabelFn = _.constant(undefined);\n\n  // Defaults to be set when creating a new edge\n  this._defaultEdgeLabelFn = _.constant(undefined);\n\n  // v -> label\n  this._nodes = {};\n\n  if (this._isCompound) {\n    // v -> parent\n    this._parent = {};\n\n    // v -> children\n    this._children = {};\n    this._children[GRAPH_NODE] = {};\n  }\n\n  // v -> edgeObj\n  this._in = {};\n\n  // u -> v -> Number\n  this._preds = {};\n\n  // v -> edgeObj\n  this._out = {};\n\n  // v -> w -> Number\n  this._sucs = {};\n\n  // e -> edgeObj\n  this._edgeObjs = {};\n\n  // e -> label\n  this._edgeLabels = {};\n}\n\n/* Number of nodes in the graph. Should only be changed by the implementation. */\nGraph.prototype._nodeCount = 0;\n\n/* Number of edges in the graph. Should only be changed by the implementation. */\nGraph.prototype._edgeCount = 0;\n\n\n/* === Graph functions ========= */\n\nGraph.prototype.isDirected = function() {\n  return this._isDirected;\n};\n\nGraph.prototype.isMultigraph = function() {\n  return this._isMultigraph;\n};\n\nGraph.prototype.isCompound = function() {\n  return this._isCompound;\n};\n\nGraph.prototype.setGraph = function(label) {\n  this._label = label;\n  return this;\n};\n\nGraph.prototype.graph = function() {\n  return this._label;\n};\n\n\n/* === Node functions ========== */\n\nGraph.prototype.setDefaultNodeLabel = function(newDefault) {\n  if (!_.isFunction(newDefault)) {\n    newDefault = _.constant(newDefault);\n  }\n  this._defaultNodeLabelFn = newDefault;\n  return this;\n};\n\nGraph.prototype.nodeCount = function() {\n  return this._nodeCount;\n};\n\nGraph.prototype.nodes = function() {\n  return _.keys(this._nodes);\n};\n\nGraph.prototype.sources = function() {\n  var self = this;\n  return _.filter(this.nodes(), function(v) {\n    return _.isEmpty(self._in[v]);\n  });\n};\n\nGraph.prototype.sinks = function() {\n  var self = this;\n  return _.filter(this.nodes(), function(v) {\n    return _.isEmpty(self._out[v]);\n  });\n};\n\nGraph.prototype.setNodes = function(vs, value) {\n  var args = arguments;\n  var self = this;\n  _.each(vs, function(v) {\n    if (args.length > 1) {\n      self.setNode(v, value);\n    } else {\n      self.setNode(v);\n    }\n  });\n  return this;\n};\n\nGraph.prototype.setNode = function(v, value) {\n  if (_.has(this._nodes, v)) {\n    if (arguments.length > 1) {\n      this._nodes[v] = value;\n    }\n    return this;\n  }\n\n  this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v);\n  if (this._isCompound) {\n    this._parent[v] = GRAPH_NODE;\n    this._children[v] = {};\n    this._children[GRAPH_NODE][v] = true;\n  }\n  this._in[v] = {};\n  this._preds[v] = {};\n  this._out[v] = {};\n  this._sucs[v] = {};\n  ++this._nodeCount;\n  return this;\n};\n\nGraph.prototype.node = function(v) {\n  return this._nodes[v];\n};\n\nGraph.prototype.hasNode = function(v) {\n  return _.has(this._nodes, v);\n};\n\nGraph.prototype.removeNode =  function(v) {\n  var self = this;\n  if (_.has(this._nodes, v)) {\n    var removeEdge = function(e) { self.removeEdge(self._edgeObjs[e]); };\n    delete this._nodes[v];\n    if (this._isCompound) {\n      this._removeFromParentsChildList(v);\n      delete this._parent[v];\n      _.each(this.children(v), function(child) {\n        self.setParent(child);\n      });\n      delete this._children[v];\n    }\n    _.each(_.keys(this._in[v]), removeEdge);\n    delete this._in[v];\n    delete this._preds[v];\n    _.each(_.keys(this._out[v]), removeEdge);\n    delete this._out[v];\n    delete this._sucs[v];\n    --this._nodeCount;\n  }\n  return this;\n};\n\nGraph.prototype.setParent = function(v, parent) {\n  if (!this._isCompound) {\n    throw new Error(\"Cannot set parent in a non-compound graph\");\n  }\n\n  if (_.isUndefined(parent)) {\n    parent = GRAPH_NODE;\n  } else {\n    // Coerce parent to string\n    parent += \"\";\n    for (var ancestor = parent;\n      !_.isUndefined(ancestor);\n      ancestor = this.parent(ancestor)) {\n      if (ancestor === v) {\n        throw new Error(\"Setting \" + parent+ \" as parent of \" + v +\n                        \" would create a cycle\");\n      }\n    }\n\n    this.setNode(parent);\n  }\n\n  this.setNode(v);\n  this._removeFromParentsChildList(v);\n  this._parent[v] = parent;\n  this._children[parent][v] = true;\n  return this;\n};\n\nGraph.prototype._removeFromParentsChildList = function(v) {\n  delete this._children[this._parent[v]][v];\n};\n\nGraph.prototype.parent = function(v) {\n  if (this._isCompound) {\n    var parent = this._parent[v];\n    if (parent !== GRAPH_NODE) {\n      return parent;\n    }\n  }\n};\n\nGraph.prototype.children = function(v) {\n  if (_.isUndefined(v)) {\n    v = GRAPH_NODE;\n  }\n\n  if (this._isCompound) {\n    var children = this._children[v];\n    if (children) {\n      return _.keys(children);\n    }\n  } else if (v === GRAPH_NODE) {\n    return this.nodes();\n  } else if (this.hasNode(v)) {\n    return [];\n  }\n};\n\nGraph.prototype.predecessors = function(v) {\n  var predsV = this._preds[v];\n  if (predsV) {\n    return _.keys(predsV);\n  }\n};\n\nGraph.prototype.successors = function(v) {\n  var sucsV = this._sucs[v];\n  if (sucsV) {\n    return _.keys(sucsV);\n  }\n};\n\nGraph.prototype.neighbors = function(v) {\n  var preds = this.predecessors(v);\n  if (preds) {\n    return _.union(preds, this.successors(v));\n  }\n};\n\nGraph.prototype.isLeaf = function (v) {\n  var neighbors;\n  if (this.isDirected()) {\n    neighbors = this.successors(v);\n  } else {\n    neighbors = this.neighbors(v);\n  }\n  return neighbors.length === 0;\n};\n\nGraph.prototype.filterNodes = function(filter) {\n  var copy = new this.constructor({\n    directed: this._isDirected,\n    multigraph: this._isMultigraph,\n    compound: this._isCompound\n  });\n\n  copy.setGraph(this.graph());\n\n  var self = this;\n  _.each(this._nodes, function(value, v) {\n    if (filter(v)) {\n      copy.setNode(v, value);\n    }\n  });\n\n  _.each(this._edgeObjs, function(e) {\n    if (copy.hasNode(e.v) && copy.hasNode(e.w)) {\n      copy.setEdge(e, self.edge(e));\n    }\n  });\n\n  var parents = {};\n  function findParent(v) {\n    var parent = self.parent(v);\n    if (parent === undefined || copy.hasNode(parent)) {\n      parents[v] = parent;\n      return parent;\n    } else if (parent in parents) {\n      return parents[parent];\n    } else {\n      return findParent(parent);\n    }\n  }\n\n  if (this._isCompound) {\n    _.each(copy.nodes(), function(v) {\n      copy.setParent(v, findParent(v));\n    });\n  }\n\n  return copy;\n};\n\n/* === Edge functions ========== */\n\nGraph.prototype.setDefaultEdgeLabel = function(newDefault) {\n  if (!_.isFunction(newDefault)) {\n    newDefault = _.constant(newDefault);\n  }\n  this._defaultEdgeLabelFn = newDefault;\n  return this;\n};\n\nGraph.prototype.edgeCount = function() {\n  return this._edgeCount;\n};\n\nGraph.prototype.edges = function() {\n  return _.values(this._edgeObjs);\n};\n\nGraph.prototype.setPath = function(vs, value) {\n  var self = this;\n  var args = arguments;\n  _.reduce(vs, function(v, w) {\n    if (args.length > 1) {\n      self.setEdge(v, w, value);\n    } else {\n      self.setEdge(v, w);\n    }\n    return w;\n  });\n  return this;\n};\n\n/*\n * setEdge(v, w, [value, [name]])\n * setEdge({ v, w, [name] }, [value])\n */\nGraph.prototype.setEdge = function() {\n  var v, w, name, value;\n  var valueSpecified = false;\n  var arg0 = arguments[0];\n\n  if (typeof arg0 === \"object\" && arg0 !== null && \"v\" in arg0) {\n    v = arg0.v;\n    w = arg0.w;\n    name = arg0.name;\n    if (arguments.length === 2) {\n      value = arguments[1];\n      valueSpecified = true;\n    }\n  } else {\n    v = arg0;\n    w = arguments[1];\n    name = arguments[3];\n    if (arguments.length > 2) {\n      value = arguments[2];\n      valueSpecified = true;\n    }\n  }\n\n  v = \"\" + v;\n  w = \"\" + w;\n  if (!_.isUndefined(name)) {\n    name = \"\" + name;\n  }\n\n  var e = edgeArgsToId(this._isDirected, v, w, name);\n  if (_.has(this._edgeLabels, e)) {\n    if (valueSpecified) {\n      this._edgeLabels[e] = value;\n    }\n    return this;\n  }\n\n  if (!_.isUndefined(name) && !this._isMultigraph) {\n    throw new Error(\"Cannot set a named edge when isMultigraph = false\");\n  }\n\n  // It didn't exist, so we need to create it.\n  // First ensure the nodes exist.\n  this.setNode(v);\n  this.setNode(w);\n\n  this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name);\n\n  var edgeObj = edgeArgsToObj(this._isDirected, v, w, name);\n  // Ensure we add undirected edges in a consistent way.\n  v = edgeObj.v;\n  w = edgeObj.w;\n\n  Object.freeze(edgeObj);\n  this._edgeObjs[e] = edgeObj;\n  incrementOrInitEntry(this._preds[w], v);\n  incrementOrInitEntry(this._sucs[v], w);\n  this._in[w][e] = edgeObj;\n  this._out[v][e] = edgeObj;\n  this._edgeCount++;\n  return this;\n};\n\nGraph.prototype.edge = function(v, w, name) {\n  var e = (arguments.length === 1\n    ? edgeObjToId(this._isDirected, arguments[0])\n    : edgeArgsToId(this._isDirected, v, w, name));\n  return this._edgeLabels[e];\n};\n\nGraph.prototype.hasEdge = function(v, w, name) {\n  var e = (arguments.length === 1\n    ? edgeObjToId(this._isDirected, arguments[0])\n    : edgeArgsToId(this._isDirected, v, w, name));\n  return _.has(this._edgeLabels, e);\n};\n\nGraph.prototype.removeEdge = function(v, w, name) {\n  var e = (arguments.length === 1\n    ? edgeObjToId(this._isDirected, arguments[0])\n    : edgeArgsToId(this._isDirected, v, w, name));\n  var edge = this._edgeObjs[e];\n  if (edge) {\n    v = edge.v;\n    w = edge.w;\n    delete this._edgeLabels[e];\n    delete this._edgeObjs[e];\n    decrementOrRemoveEntry(this._preds[w], v);\n    decrementOrRemoveEntry(this._sucs[v], w);\n    delete this._in[w][e];\n    delete this._out[v][e];\n    this._edgeCount--;\n  }\n  return this;\n};\n\nGraph.prototype.inEdges = function(v, u) {\n  var inV = this._in[v];\n  if (inV) {\n    var edges = _.values(inV);\n    if (!u) {\n      return edges;\n    }\n    return _.filter(edges, function(edge) { return edge.v === u; });\n  }\n};\n\nGraph.prototype.outEdges = function(v, w) {\n  var outV = this._out[v];\n  if (outV) {\n    var edges = _.values(outV);\n    if (!w) {\n      return edges;\n    }\n    return _.filter(edges, function(edge) { return edge.w === w; });\n  }\n};\n\nGraph.prototype.nodeEdges = function(v, w) {\n  var inEdges = this.inEdges(v, w);\n  if (inEdges) {\n    return inEdges.concat(this.outEdges(v, w));\n  }\n};\n\nfunction incrementOrInitEntry(map, k) {\n  if (map[k]) {\n    map[k]++;\n  } else {\n    map[k] = 1;\n  }\n}\n\nfunction decrementOrRemoveEntry(map, k) {\n  if (!--map[k]) { delete map[k]; }\n}\n\nfunction edgeArgsToId(isDirected, v_, w_, name) {\n  var v = \"\" + v_;\n  var w = \"\" + w_;\n  if (!isDirected && v > w) {\n    var tmp = v;\n    v = w;\n    w = tmp;\n  }\n  return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM +\n             (_.isUndefined(name) ? DEFAULT_EDGE_NAME : name);\n}\n\nfunction edgeArgsToObj(isDirected, v_, w_, name) {\n  var v = \"\" + v_;\n  var w = \"\" + w_;\n  if (!isDirected && v > w) {\n    var tmp = v;\n    v = w;\n    w = tmp;\n  }\n  var edgeObj =  { v: v, w: w };\n  if (name) {\n    edgeObj.name = name;\n  }\n  return edgeObj;\n}\n\nfunction edgeObjToId(isDirected, edgeObj) {\n  return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name);\n}\n","// Includes only the \"core\" of graphlib\nmodule.exports = {\n  Graph: require(\"./graph\"),\n  version: require(\"./version\")\n};\n","var _ = require(\"./lodash\");\nvar Graph = require(\"./graph\");\n\nmodule.exports = {\n  write: write,\n  read: read\n};\n\nfunction write(g) {\n  var json = {\n    options: {\n      directed: g.isDirected(),\n      multigraph: g.isMultigraph(),\n      compound: g.isCompound()\n    },\n    nodes: writeNodes(g),\n    edges: writeEdges(g)\n  };\n  if (!_.isUndefined(g.graph())) {\n    json.value = _.clone(g.graph());\n  }\n  return json;\n}\n\nfunction writeNodes(g) {\n  return _.map(g.nodes(), function(v) {\n    var nodeValue = g.node(v);\n    var parent = g.parent(v);\n    var node = { v: v };\n    if (!_.isUndefined(nodeValue)) {\n      node.value = nodeValue;\n    }\n    if (!_.isUndefined(parent)) {\n      node.parent = parent;\n    }\n    return node;\n  });\n}\n\nfunction writeEdges(g) {\n  return _.map(g.edges(), function(e) {\n    var edgeValue = g.edge(e);\n    var edge = { v: e.v, w: e.w };\n    if (!_.isUndefined(e.name)) {\n      edge.name = e.name;\n    }\n    if (!_.isUndefined(edgeValue)) {\n      edge.value = edgeValue;\n    }\n    return edge;\n  });\n}\n\nfunction read(json) {\n  var g = new Graph(json.options).setGraph(json.value);\n  _.each(json.nodes, function(entry) {\n    g.setNode(entry.v, entry.value);\n    if (entry.parent) {\n      g.setParent(entry.v, entry.parent);\n    }\n  });\n  _.each(json.edges, function(entry) {\n    g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value);\n  });\n  return g;\n}\n","/* global window */\n\nvar lodash;\n\nif (typeof require === \"function\") {\n  try {\n    lodash = {\n      clone: require(\"lodash/clone\"),\n      constant: require(\"lodash/constant\"),\n      each: require(\"lodash/each\"),\n      filter: require(\"lodash/filter\"),\n      has:  require(\"lodash/has\"),\n      isArray: require(\"lodash/isArray\"),\n      isEmpty: require(\"lodash/isEmpty\"),\n      isFunction: require(\"lodash/isFunction\"),\n      isUndefined: require(\"lodash/isUndefined\"),\n      keys: require(\"lodash/keys\"),\n      map: require(\"lodash/map\"),\n      reduce: require(\"lodash/reduce\"),\n      size: require(\"lodash/size\"),\n      transform: require(\"lodash/transform\"),\n      union: require(\"lodash/union\"),\n      values: require(\"lodash/values\")\n    };\n  } catch (e) {\n    // continue regardless of error\n  }\n}\n\nif (!lodash) {\n  lodash = window._;\n}\n\nmodule.exports = lodash;\n","module.exports = '2.1.8';\n","// source: https://github.com/OpenSlides/OpenSlides/blob/f4f8b8422f9b3fbab58e35ac3f8f870d35813b7d/client/src/app/core/ui-services/html-to-pdf.service.ts\r\n// and https://github.com/bpampuch/pdfmake/issues/205\r\n\r\n/**\r\n  To use it:\r\n  import htmlToPdfMake from 'html-to-pdfmake.js'\r\n  htmlToPdfMake('<b>my bold text</b>');\r\n*/\r\n\r\n/**\r\n * Transform HTML code to a PdfMake object\r\n * @param  {String} htmlText The HTML code to transform\r\n * @param  {Object} [options]\r\n *   @param  {Object} [defaultStyles] An object with the default styles for each elements\r\n *   @param  {Boolean} [tableAutoSize=false] It permits to use the width/height defined in styles for a table's cells and rows\r\n *   @param  {Boolean} [imagesByReference=false] It permits to return two objets ({content, images}) to handle the `<img>` tags by reference\r\n *   @param  {Boolean} [removeExtraBlanks=false] Some blank spaces in your code may cause extra blank lines in the PDF – use this option to remove them\r\n *   @param  {Boolean} [showHidden=false] TRUE if the 'display:none' elements should be displayed\r\n *   @param  {Boolean} [removeTagClasses=false] TRUE if we don't want to have 'html-TAG' added as a class for each node\r\n *   @param  {Array} [ignoreStyles=[]] An array of style property to ignore\r\n *   @param  {Function} [customTag] It permits to handle non-regular HTML tag\r\n *   @param  {Object} [window] The `window` object (required for NodeJS server side use)\r\n * @return {Object} it returns a PdfMake object\r\n *\r\n * @example\r\n * // Some styles are applied by defaults for the supported HTML elements\r\n * // but you can pass your own styles if you prefer\r\n * htmlToPdfMake('<div><h1>My Title</h1><p>My paragraph</p></div>');\r\n *\r\n * // If you want to overwrite the default styles, e.g. you want <li> to not have a margin-left, and links to be 'purple' and not 'blue', and links without 'underline'\r\n * htmlToPdfMake('<ul><li>this is <a href=\"...\">a link</a></li><li>another item</li></ul>', {\r\n *   defaultStyles:{\r\n *     a:{\r\n *       color:'purple',\r\n *       decoration:null\r\n *     },\r\n *     li:null\r\n *   }\r\n * });\r\n */\r\n//var util = require(\"util\"); // to debug\r\nfunction htmlToPdfMake(htmlText, options) {\r\n  'use strict';\r\n  this.wndw = (options && options.window ? options.window : window);\r\n  this.tableAutoSize = (options && typeof options.tableAutoSize === \"boolean\" ? options.tableAutoSize : false);\r\n  this.imagesByReference = (options && typeof options.imagesByReference === \"boolean\" ? options.imagesByReference : false);\r\n  this.removeExtraBlanks = (options && typeof options.removeExtraBlanks === \"boolean\" ? options.removeExtraBlanks : false);\r\n  this.showHidden = (options && typeof options.showHidden === \"boolean\" ? options.showHidden : false);\r\n  this.removeTagClasses = (options && typeof options.removeTagClasses === \"boolean\" ? options.removeTagClasses : false);\r\n  this.ignoreStyles = (options && Array.isArray(options.ignoreStyles) ? options.ignoreStyles : []);\r\n\r\n  // A random string to be used in the image references\r\n  var imagesByReferenceSuffix = (Math.random().toString(36).slice(2,8));\r\n\r\n  // Used with the size attribute on the font elements to calculate relative font size\r\n  this.fontSizes = (options && Array.isArray(options.fontSizes) ? options.fontSizes : [10, 14, 16, 18, 20, 24, 28]);\r\n\r\n  // set default styles\r\n  this.defaultStyles = {\r\n    b: {bold:true},\r\n    strong: {bold:true},\r\n    u: {decoration:'underline'},\r\n    del: {decoration:'lineThrough'},\r\n    s: {decoration: 'lineThrough'},\r\n    em: {italics:true},\r\n    i: {italics:true},\r\n    h1: {fontSize:24, bold:true, marginBottom:5},\r\n    h2: {fontSize:22, bold:true, marginBottom:5},\r\n    h3: {fontSize:20, bold:true, marginBottom:5},\r\n    h4: {fontSize:18, bold:true, marginBottom:5},\r\n    h5: {fontSize:16, bold:true, marginBottom:5},\r\n    h6: {fontSize:14, bold:true, marginBottom:5},\r\n    a: {color:'blue', decoration:'underline'},\r\n    strike: {decoration: 'lineThrough'},\r\n    p: {margin:[0, 5, 0, 10]},\r\n    ul: {marginBottom:5,marginLeft:5},\r\n    table: {marginBottom:5},\r\n    th: {bold:true, fillColor:'#EEEEEE'}\r\n  }\r\n\r\n  // store the references to the images\r\n  this.imagesRef = [];\r\n\r\n  /**\r\n   * Permit to change the default styles based on the options\r\n   */\r\n  this.changeDefaultStyles = function () {\r\n    for (var keyStyle in options.defaultStyles) {\r\n      if (this.defaultStyles.hasOwnProperty(keyStyle)) {\r\n        // if we want to remove a default style\r\n        if (options.defaultStyles.hasOwnProperty(keyStyle) && !options.defaultStyles[keyStyle]) {\r\n          delete this.defaultStyles[keyStyle];\r\n        } else {\r\n          for (var k in options.defaultStyles[keyStyle]) {\r\n            // if we want to delete a specific property\r\n            if (options.defaultStyles[keyStyle][k] === '') delete this.defaultStyles[keyStyle][k];\r\n            else this.defaultStyles[keyStyle][k] = options.defaultStyles[keyStyle][k];\r\n          }\r\n        }\r\n      } else {\r\n        // if we add default styles\r\n        this.defaultStyles[keyStyle] = {}\r\n        for (var ks in options.defaultStyles[keyStyle]) {\r\n          this.defaultStyles[keyStyle][ks] = options.defaultStyles[keyStyle][ks];\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  if (options && options.defaultStyles) {\r\n    this.changeDefaultStyles();\r\n  }\r\n\r\n  /**\r\n   * Takes an HTML string, converts to HTML using a DOM parser and recursivly parses\r\n   * the content into pdfmake compatible doc definition\r\n   *\r\n   * @param htmlText the html text to translate as string\r\n   * @returns pdfmake doc definition as object\r\n   */\r\n  this.convertHtml = function(htmlText) {\r\n    // Create a HTML DOM tree out of html string\r\n    var parser = new this.wndw.DOMParser();\r\n    if (this.removeExtraBlanks) htmlText = htmlText.replace(/(<\\/?(div|p|h1|h2|h3|h4|h5|h6|ol|ul|li)([^>]+)?>)\\s+(<\\/?(div|p|h1|h2|h3|h4|h5|h6|ol|ul|li))/gi, \"$1$4\").replace(/(<\\/?(div|p|h1|h2|h3|h4|h5|h6|ol|ul|li)([^>]+)?>)\\s+(<\\/?(div|p|h1|h2|h3|h4|h5|h6|ol|ul|li))/gi, \"$1$4\");\r\n    var parsedHtml = parser.parseFromString(htmlText, 'text/html');\r\n\r\n    var docDef = this.parseElement(parsedHtml.body, []);\r\n\r\n    // remove first level\r\n    return docDef.stack || docDef.text;\r\n  }\r\n\r\n  /**\r\n   * Converts a single HTML element to pdfmake, calls itself recursively for child html elements\r\n   *\r\n   * @param element can be an HTML element (<p>) or plain text (\"Hello World\")\r\n   * @param parentNode the parent node for the current element\r\n   * @param parents Array of node names of all the parents for the element\r\n   * @returns the doc def to the given element in consideration to the given paragraph and styles\r\n   */\r\n  this.parseElement = function(element, parents) {\r\n    var nodeName = element.nodeName.toUpperCase();\r\n    var nodeNameLowerCase = nodeName.toLowerCase();\r\n    var ret = {text:[]};\r\n    var text, needStack=false;\r\n    var dataset, i, key, _this=this;\r\n\r\n    // ignore some HTML tags\r\n    if (['COLGROUP','COL'].indexOf(nodeName) > -1) return '';\r\n\r\n    switch(element.nodeType) {\r\n      case 3: { // TEXT_NODE\r\n        if (element.textContent) {\r\n          text = element.textContent;\r\n          // check if we have 'white-space' in the parent's style\r\n          // or if a parent is a <PRE>\r\n          var styleParentTextNode = this.parseStyle(parents[parents.length-1], true);\r\n          var hasWhiteSpace = (parents.findIndex(function(p) { return p.nodeName === \"PRE\" })>-1);\r\n          for (i=0; i<styleParentTextNode.length; i++) {\r\n            if (styleParentTextNode[i].key === \"preserveLeadingSpaces\") {\r\n              hasWhiteSpace=styleParentTextNode[i].value;\r\n              break;\r\n            }\r\n          }\r\n          // if no 'white-space' style, then deal with white spaces\r\n          if (!hasWhiteSpace) text = text.replace(/\\s*\\n\\s*/g, \" \");\r\n          if (options && typeof options.replaceText === \"function\") text = options.replaceText(text, parents);\r\n\r\n          // for table, thead, tbody, tfoot, tr, ul, ol: remove all empty space\r\n          if (['TABLE','THEAD','TBODY','TFOOT','TR','UL','OL'].indexOf(parents[parents.length-1].nodeName) > -1) text = text.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\r\n          if (text) {\r\n            ret = {'text':text};\r\n            ret = this.applyStyle({ret:ret, parents:parents});\r\n            return ret;\r\n          }\r\n        }\r\n\r\n        return '';\r\n      }\r\n      case 1: { // ELEMENT_NODE\r\n        if (!this.showHidden && (element.style.display && element.style.display === 'none') || (element.style.visibility && element.style.visibility === 'hidden')) {\r\n          return;\r\n        }\r\n\r\n        ret.nodeName = nodeName;\r\n        if (element.id) ret.id = element.id;\r\n        parents.push(element);\r\n\r\n        if (element.childNodes && element.childNodes.length>0) {\r\n          [].forEach.call(element.childNodes, function(child) {\r\n            var res = _this.parseElement(child, parents);\r\n            if (res) {\r\n              if (Array.isArray(res.text) && res.text.length===0) res.text='';\r\n              ret.text.push(res);\r\n            }\r\n          });\r\n          //console.log(nodeName,'=>',util.inspect(ret.text, {showHidden: false, depth: null})); // to debug\r\n          // find if we need a 'stack' instead of a 'text'\r\n          needStack = this.searchForStack(ret);\r\n          if (needStack) {\r\n            ret.stack = ret.text.slice(0);\r\n            delete ret.text;\r\n          } else {\r\n            // apply all the inhirent classes and styles from the parents\r\n            ret = this.applyStyle({ret:ret, parents:parents});\r\n          }\r\n        }\r\n        parents.pop();\r\n\r\n        switch(nodeName) {\r\n          case \"TABLE\":{\r\n            var rowIndex;\r\n            // the format for the table is table.body[[], [], …]\r\n            ret.table = {body:[]};\r\n\r\n            var tbodies = (ret.stack || ret.text);\r\n            if (Array.isArray(tbodies)) {\r\n              rowIndex = 0;\r\n              // Array with All Rows including THEAD\r\n              var hasRowSpan = false; // TRUE if we have some rowspan\r\n              // first round is to deal with colspan\r\n              // for each THEAD / TBODY\r\n              tbodies.forEach(function(tbody) {\r\n                // for each row\r\n                var rows = (tbody.stack || tbody.text);\r\n                if (Array.isArray(rows)) {\r\n                  rows.forEach(function(row) {\r\n                    var cells = (row.stack || row.text);\r\n                    // for each cell\r\n                    if (Array.isArray(cells)) {\r\n                      ret.table.body[rowIndex] = [];\r\n                      cells.forEach(function(cell) {\r\n                        ret.table.body[rowIndex].push(cell);\r\n                        // do we have a colSpan?\r\n                        // if yes, insert empty cells due to colspan\r\n                        if (cell.colSpan>1) {\r\n                          i = cell.colSpan;\r\n                          // insert an empty cell for each colspan\r\n                          while (--i > 0) {\r\n                            ret.table.body[rowIndex].push({text:''});\r\n                          }\r\n                        }\r\n\r\n                        // do we have a rowSpan ?\r\n                        if (cell.rowSpan > 1) hasRowSpan=true;\r\n                      });\r\n                      rowIndex++;\r\n                    }\r\n                 });\r\n                }\r\n              });\r\n\r\n              if (hasRowSpan) {\r\n                var header = ret.table.body[0];\r\n                if (Array.isArray(header)) {\r\n                  // determine the number of columns\r\n                  var columnCount = header.some(function(cell) {\r\n                    return cell.colSpan > 0;\r\n                  })\r\n                  ? header.reduce(function(partialCount, cell) {\r\n                      return partialCount + (cell.colSpan ? cell.colSpan : 0)\r\n                    }, 0)\r\n                  : header.length;\r\n                  // determine the number of rows\r\n                  var rowCount = ret.table.body.length;\r\n\r\n                  // for each column\r\n                  for (var columnInd=0; columnInd<columnCount; columnInd++) {\r\n                    for (var rowInd=0; rowInd<rowCount; rowInd++) {\r\n                      var row = ret.table.body[rowInd];\r\n                      if (Array.isArray(row)) {\r\n                        var cell = row[columnInd];\r\n                        // do we have a rowSpan?\r\n                        if (cell.rowSpan>1) {\r\n                          var len = cell.rowSpan;\r\n                          var cs, colspan = (cell.colSpan ? cell.colSpan : 1);\r\n                          for (var j=1; j<=len-1; j++) {\r\n                            cs = colspan;\r\n                            if (ret.table.body[rowInd+j]) {\r\n                              while (cs--) ret.table.body[rowInd+j].splice(columnInd, 0, {text:''});\r\n                            } else {\r\n                              // if we have an empty <tr></tr>\r\n                              cell.rowSpan--;\r\n                            }\r\n                          }\r\n                          // increase rowInd to skip processed rows\r\n                          rowInd += (len-1);\r\n                        }\r\n                      }\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            }\r\n\r\n            delete ret.stack;\r\n            delete ret.text;\r\n            // apply all the inhirent classes and styles from the parents, or for the current element\r\n            ret = this.applyStyle({ret:ret, parents:parents.concat([element])});\r\n\r\n            // if option tableAutoSize, then we try to apply the correct width/height on the table\r\n            if (this.tableAutoSize) {\r\n              var cellsWidths = [];\r\n              var cellsHeights = [];\r\n              var tableWidths = [];\r\n              var tableHeights = [];\r\n              // determine if we have \"width:100%\" on the TABLE\r\n              var fullWidth = (element.getAttribute(\"width\") === \"100%\" || (element.getAttribute(\"style\")||\"\").replace(/width\\s*:\\s*100%/, \"width:100%\").includes(\"width:100%\"));\r\n\r\n              // match XX.XX% or XX%\r\n              var percentRegex = new RegExp( /\\d+(.\\d+)?%/ );\r\n              // match width:XX.XX% or width: XX% (with or without whitespaces)\r\n              var widthRegex = new RegExp( /width\\s*:\\s*\\d+(.\\d+)?%/ );\r\n              // remove everything from percent string except numbers and dot\r\n              var cleanPercentageRegex = new RegExp( /[^0-9.]/g );\r\n              var elementWidth = element.getAttribute( \"width\" );\r\n              var elementStyle = element.getAttribute( \"style\" ) || \"\";\r\n              // check if table have width defined\r\n              var tableHaveWidth = ( percentRegex.test( elementWidth ) || widthRegex.test( elementStyle ) );\r\n              if ( tableHaveWidth ) {\r\n                var widthIndex = elementStyle.indexOf( \"width:\" );\r\n                var parsedStyle = elementStyle.substring( widthIndex, widthIndex + 11 );\r\n                // get only numbers of percentage\r\n                var tableWidth = ( parsedStyle || elementWidth ).replace( cleanPercentageRegex, \"\" );\r\n              }\r\n\r\n              var tableHaveColgroup = false;\r\n              var tableColgroupIndex = -1;\r\n              // check if any of table children is a colgroup with cells widths\r\n              for ( var x = 0; x < element.children.length; x++ ) {\r\n                var child = element.children[x];\r\n                if ( !tableHaveColgroup ) tableColgroupIndex++;\r\n                if ( child.nodeName.toUpperCase() === \"COLGROUP\" ) tableHaveColgroup = true;\r\n              };\r\n\r\n              ret.table.body.forEach(function(row, rowIndex) {\r\n                cellsWidths.push([]);\r\n                cellsHeights.push([]);\r\n                row.forEach(function(cell, cellIndex) {\r\n                  // we want to remember the different sizes\r\n                  var width = typeof cell.width !== 'undefined' ? cell.width : 'auto';\r\n                  if (width === '*') width='auto'; // tinymce could generate 'width:*', but it's invalid, so we use 'auto' instead\r\n                  var height = typeof cell.height !== 'undefined' ? cell.height : 'auto';\r\n                  if (height === '*') height='auto'; // tinymce could generate 'height:*', but it's invalid, so we use 'auto' instead\r\n                  // check if we have colspan or rowspan\r\n                  // if yes, and if width/height is a number, we divide by the col/rowspan, otherwise we use 'auto'\r\n                  if (width !== 'auto' && cell.colSpan>1) {\r\n                    if (!isNaN(width)) width /= cell.colSpan;\r\n                    else width = 'auto';\r\n                  }\r\n                  if (height !== 'auto' && cell.rowSpan>1) {\r\n                    if (!isNaN(height)) height /= cell.rowSpan;\r\n                    else height = 'auto';\r\n                  }\r\n\r\n                  // if we have colgroups defining cells widths\r\n                  if ( tableHaveColgroup ) {\r\n                    var colGroups = element.children[ tableColgroupIndex ];\r\n                    // get colgroup by cell index\r\n                    var colElement = colGroups.children[ cellIndex ];\r\n                    var colWidth = colElement.getAttribute( \"width\" );\r\n                    var colStyle = colElement.getAttribute( \"style\" ) || \"\";\r\n\r\n                    if (( percentRegex.test( colWidth ) || widthRegex.test( colStyle ) )) {\r\n                      var colWidthIndex = colStyle.indexOf( \"width:\" );\r\n                      var colParsedStyle = colStyle.substring( colWidthIndex, colWidthIndex + 11 );\r\n                      // update cell width to it's percentage in colgroup\r\n                      width = String(( colParsedStyle || colWidth ).replace( cleanPercentageRegex, \"\" )) + \"%\";\r\n                    }\r\n                  }\r\n\r\n                  cellsWidths[rowIndex].push(width);\r\n                  cellsHeights[rowIndex].push(height);\r\n                });\r\n              });\r\n\r\n              // determine the max width for each cell\r\n              cellsWidths.forEach(function(row) {\r\n                row.forEach(function(cellWidth, cellIndex) {\r\n                  var type = typeof tableWidths[cellIndex];\r\n                  if (type === \"undefined\" || (cellWidth !== 'auto' && type === \"number\" && cellWidth > tableWidths[cellIndex]) || (cellWidth !== 'auto' && tableWidths[cellIndex] === 'auto')) {\r\n                    if ( tableHaveWidth ) {\r\n                      // if table have defined widths we need to make a \r\n                      // rule of three to get cell's proportional width\r\n                      var cellPercentage = cellWidth === 'auto' ? tableWidth / row.length : ( cellWidth.toString().replace( '%', \"\" ) * tableWidth ) / 100;\r\n                      cellWidth = String(cellPercentage) + \"%\";\r\n                    }\r\n\r\n                    tableWidths[cellIndex] = cellWidth;\r\n                  }\r\n                });\r\n              });\r\n              // determine the max height for each row\r\n              cellsHeights.forEach(function(row, rowIndex) {\r\n                row.forEach(function(cellHeight) {\r\n                  var type = typeof tableHeights[rowIndex];\r\n                  if (type === \"undefined\" || (cellHeight !== 'auto' && type === \"number\" && cellHeight > tableHeights[rowIndex]) || (cellHeight !== 'auto' && tableHeights[rowIndex] === 'auto')) {\r\n                    tableHeights[rowIndex] = cellHeight;\r\n                  }\r\n                });\r\n              });\r\n              if (tableWidths.length > 0) {\r\n                // if all columns are in 'auto' and if we have 'width:\"100%\"' for the table\r\n                // then put widths:['*', '*' …], for all columns\r\n                //if (fullWidth && tableWidths.filter(function(w) { return w==='auto' }).length === tableWidths.length) tableWidths=tableWidths.map(function() { return '*' });\r\n                // see https://github.com/Aymkdn/html-to-pdfmake/issues/151#issuecomment-1273015585\r\n                // if we have 'width:\"100%\"' for the table, replace \"auto\" width to \"*\"\r\n                if (fullWidth) tableWidths=tableWidths.map(function(w) { return w==='auto' ? '*' : w });\r\n                ret.table.widths = tableWidths;\r\n              }\r\n              if (tableHeights.length > 0) ret.table.heights = tableHeights;\r\n            }\r\n\r\n            // check if we have some data-pdfmake to apply\r\n            if (element.dataset && element.dataset.pdfmake) {\r\n              // handle when people will use simple quotes, e.g. <table data-pdfmake=\"{'layout':'noBorders'}\">\r\n              dataset = element.dataset.pdfmake;\r\n              if (dataset.charAt(1) === \"'\") dataset=dataset.replace(/'/g,'\"');\r\n              try {\r\n                dataset = JSON.parse(dataset);\r\n                for (key in dataset) {\r\n                  if (key === \"layout\") {\r\n                    ret.layout = dataset[key];\r\n                  } else {\r\n                    ret.table[key] = dataset[key];\r\n                  }\r\n                }\r\n              } catch(e) {\r\n                console.error(e);\r\n              }\r\n            }\r\n            break;\r\n          }\r\n          case \"TH\":\r\n          case \"TD\":{\r\n            if (element.getAttribute(\"rowspan\")) ret.rowSpan = element.getAttribute(\"rowspan\")*1;\r\n            if (element.getAttribute(\"colspan\")) ret.colSpan = element.getAttribute(\"colspan\")*1;\r\n            // apply all the inhirent classes and styles from the parents, or for the current element\r\n            ret = this.applyStyle({ret:ret, parents:parents.concat([element])});\r\n            break;\r\n          }\r\n          case \"SVG\": {\r\n            ret = {\r\n              svg:element.outerHTML.replace(/\\n(\\s+)?/g, \"\"),\r\n              nodeName:'SVG'\r\n            }\r\n            if (!this.removeTagClasses) ret.style=['html-svg'];\r\n            break;\r\n          }\r\n          case \"BR\": {\r\n            // for BR we return '\\n'\r\n            ret.text = [{text:'\\n'}];\r\n            break;\r\n          }\r\n          case \"SUB\":\r\n          case \"SUP\": {\r\n            ret[nodeName.toLowerCase()] = { offset: '30%', fontSize: 8 };\r\n            break;\r\n          }\r\n          case \"HR\": {\r\n            // default style for the HR\r\n            var styleHR = {\r\n              width: 514,\r\n              type: \"line\",\r\n              margin: [0, 12, 0, 12],\r\n              thickness: 0.5,\r\n              color: \"#000000\",\r\n              left: 0\r\n            };\r\n            // we can override the default HR style with \"data-pdfmake\"\r\n            if (element.dataset && element.dataset.pdfmake) {\r\n              dataset = JSON.parse(element.dataset.pdfmake);\r\n              for (key in dataset) {\r\n                styleHR[key] = dataset[key];\r\n              }\r\n            }\r\n\r\n            ret.margin = styleHR.margin;\r\n            ret.canvas = [\r\n              {\r\n                type: styleHR.type,\r\n                x1: styleHR.left,\r\n                y1: 0,\r\n                x2: styleHR.width,\r\n                y2: 0,\r\n                lineWidth: styleHR.thickness,\r\n                lineColor: styleHR.color\r\n              }\r\n            ];\r\n            delete ret.text;\r\n\r\n            break;\r\n          }\r\n          case \"OL\":\r\n          case \"UL\": {\r\n            ret[nodeNameLowerCase] = (ret.stack || ret.text).slice(0);\r\n            delete ret.stack;\r\n            delete ret.text;\r\n            // apply all the inhirent classes and styles from the parents, or for the current element\r\n            ret = this.applyStyle({ret:ret, parents:parents.concat([element])});\r\n            // check if we have `start`\r\n            if (element.getAttribute(\"start\")) {\r\n              ret.start = element.getAttribute(\"start\")*1;\r\n            }\r\n            // check if we have \"type\"\r\n            switch (element.getAttribute(\"type\")) {\r\n              case 'A': ret.type = 'upper-alpha'; break;\r\n              case 'a': ret.type = 'lower-alpha'; break;\r\n              case 'I': ret.type = 'upper-roman'; break;\r\n              case 'i': ret.type = 'lower-roman'; break;\r\n            }\r\n\r\n            // check if we have `list-style-type` or `list-style`\r\n            if (ret.listStyle || ret.listStyleType) ret.type = ret.listStyle || ret.listStyleType;\r\n            break;\r\n          }\r\n          case \"LI\": {\r\n            // if it's a stack, then check if the last child has a \"text\"\r\n            if (ret.stack && !ret.stack[ret.stack.length-1].text) {\r\n              // if not, we restructure our node\r\n              text = ret.stack.slice(0, -1);\r\n              ret = [\r\n                (Array.isArray(text) ? {\"stack\": text} : {\"text\": text}),\r\n                ret.stack[ret.stack.length-1]\r\n              ];\r\n            }\r\n            // we don't want a child of UL/OL to be an array, but it should be a \"stack\"\r\n            if (Array.isArray(ret)) {\r\n              ret = {stack:ret};\r\n            }\r\n            break;\r\n          }\r\n          case \"PRE\":{\r\n            ret.preserveLeadingSpaces = true;\r\n            break;\r\n          }\r\n          case \"IMG\": {\r\n            if (this.imagesByReference) {\r\n              var src = element.getAttribute(\"data-src\") || element.getAttribute(\"src\");\r\n              var index = this.imagesRef.indexOf(src);\r\n              if (index>-1) ret.image = 'img_ref_'+imagesByReferenceSuffix+index;\r\n              else {\r\n                ret.image = 'img_ref_'+imagesByReferenceSuffix+this.imagesRef.length;\r\n                this.imagesRef.push(src);\r\n              }\r\n            } else {\r\n              ret.image = element.getAttribute(\"src\");\r\n            }\r\n            delete ret.stack;\r\n            delete ret.text;\r\n            // apply all the inhirent classes and styles from the parents, or for the current element\r\n            ret = this.applyStyle({ret:ret, parents:parents.concat([element])});\r\n            break;\r\n          }\r\n          case \"A\": {\r\n            // the link must be applied to the deeper `text` or stacked element (e.g. `image`)\r\n            var setLink = function(pointer, href) {\r\n              pointer = pointer || {text:''}; // for link without any text\r\n              if (Array.isArray(pointer.text)) {\r\n                return setLink(pointer.text[0], href);\r\n              } else if (Array.isArray(pointer.stack)) {\r\n                // if we have a more complex layer\r\n                pointer.stack = pointer.stack.map(function(stack) {\r\n                  return setLink(stack, href);\r\n                });\r\n                return pointer;\r\n              }\r\n              // if 'href' starts with '#' then it's an internal link\r\n              if (href.indexOf('#') === 0) pointer.linkToDestination=href.slice(1);\r\n              else pointer.link = href;\r\n              return pointer;\r\n            }\r\n            if (element.getAttribute(\"href\")) {\r\n              ret = setLink(ret, element.getAttribute(\"href\"));\r\n              ret.nodeName = \"A\";\r\n            }\r\n            break;\r\n          }\r\n          default: {\r\n            // handle other cases\r\n            if (options && typeof options.customTag === \"function\") {\r\n              ret = options.customTag.call(this, {element:element, parents:parents, ret:ret});\r\n            }\r\n          }\r\n        }\r\n\r\n        // reduce the number of JSON properties\r\n        if (Array.isArray(ret.text) && ret.text.length === 1 && ret.text[0].text && !ret.text[0].nodeName) {\r\n          ret.text = ret.text[0].text;\r\n        }\r\n\r\n        // check if we have some data-pdfmake to apply\r\n        if (['HR','TABLE'].indexOf(nodeName) === -1 && element.dataset && element.dataset.pdfmake) {\r\n          dataset = JSON.parse(element.dataset.pdfmake);\r\n          for (key in dataset) {\r\n            ret[key] = dataset[key];\r\n          }\r\n        }\r\n\r\n        return ret;\r\n      }\r\n    }\r\n  }\r\n\r\n  this.searchForStack = function(ret) {\r\n    if (Array.isArray(ret.text)) {\r\n      for (var i=0; i<ret.text.length; i++) {\r\n        if (ret.text[i].stack || ['P','DIV','TABLE','SVG','UL','OL','IMG','H1','H2','H3','H4','H5','H6'].indexOf(ret.text[i].nodeName) > -1) return true;\r\n        if (this.searchForStack(ret.text[i]) === true) return true;\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Apply style and classes from all the parents\r\n   *\r\n   * @param  {Object} params\r\n   *   @param {Object} ret The object that will receive the 'style' and other properties\r\n   *   @param {Array} parents Array of node elements\r\n   * @return {Object} the modified 'ret'\r\n   */\r\n  this.applyStyle = function(params) {\r\n    var cssClass = [];\r\n    var lastIndex = params.parents.length-1;\r\n    var _this = this;\r\n    params.parents.forEach(function(parent, parentIndex) {\r\n      // classes\r\n      var parentNodeName = parent.nodeName.toLowerCase();\r\n      if (!_this.removeTagClasses) {\r\n        var htmlClass = 'html-' + parentNodeName;\r\n        if (htmlClass !== 'html-body' && cssClass.indexOf(htmlClass) === -1) cssClass.unshift(htmlClass);\r\n      }\r\n      var parentClass = (parent.getAttribute(\"class\")||\"\").split(' ');\r\n      parentClass.forEach(function(p) {\r\n        if (p) cssClass.push(p);\r\n      });\r\n      // styles\r\n      var style;\r\n      // not all the CSS properties should be inherent\r\n      var ignoreNonDescendentProperties = (parentIndex!==lastIndex);\r\n      // 1) the default styles\r\n      if (_this.defaultStyles[parentNodeName]) {\r\n        for (style in _this.defaultStyles[parentNodeName]) {\r\n          if (_this.defaultStyles[parentNodeName].hasOwnProperty(style)) {\r\n            if (!ignoreNonDescendentProperties ||\r\n                (ignoreNonDescendentProperties &&\r\n                  style.indexOf('margin') === -1 &&\r\n                  style.indexOf('border') === -1\r\n                )\r\n               ) {\r\n              // 'decoration' can be an array\r\n              if (style === 'decoration') {\r\n                if (!Array.isArray(params.ret[style])) params.ret[style]=[];\r\n                // do not apply twice the same (e.g. applying 2 \"underline\" will cause an extra blank space with an underline)\r\n                if (params.ret[style].indexOf(_this.defaultStyles[parentNodeName][style]) === -1) {\r\n                  params.ret[style].push(_this.defaultStyles[parentNodeName][style]);\r\n                }\r\n              } else {\r\n                params.ret[style] = JSON.parse(JSON.stringify(_this.defaultStyles[parentNodeName][style]));\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n      // 2) element's style\r\n      // we want TD/TH to receive descendant properties from TR\r\n      if (parentNodeName === 'tr') ignoreNonDescendentProperties=false;\r\n      style = _this.parseStyle(parent, ignoreNonDescendentProperties);\r\n      style.forEach(function(stl) {\r\n        // 'decoration' can be an array\r\n        if (stl.key === \"decoration\") {\r\n          if (!Array.isArray(params.ret[stl.key])) params.ret[stl.key]=[];\r\n          params.ret[stl.key].push(stl.value);\r\n        } else {\r\n          // when 'params.ret.margin' is defined but also a 'marginXYZ' is defined in `stl.key`,\r\n          // then we should change the correct index in `params.ret.margin` to reflect it\r\n          if (params.ret.margin && stl.key.indexOf('margin') === 0) {\r\n            // order: left | top | right | bottom\r\n            switch(stl.key) {\r\n              case \"marginLeft\": params.ret.margin[0]=stl.value; break;\r\n              case \"marginTop\": params.ret.margin[1]=stl.value; break;\r\n              case \"marginRight\": params.ret.margin[2]=stl.value; break;\r\n              case \"marginBottom\": params.ret.margin[3]=stl.value; break;\r\n            }\r\n          } else {\r\n            params.ret[stl.key] = stl.value;\r\n          }\r\n        }\r\n      });\r\n    });\r\n    if (cssClass.length>0) params.ret.style = cssClass;\r\n    return params.ret;\r\n  }\r\n\r\n\t/**\r\n\t * Border Value Rearrange a CSS expression (e.g. 'border:solid 10px red' to 'border:10px solid red')\r\n\t *\r\n\t * @param {String} styleStr The CSS expression values\r\n\t * @returns {String} border value in global accepted format (e.g. 'border:10px solid red')\r\n\t */\r\n\tthis.borderValueRearrange = function(styleStr) {\r\n\t\ttry {\r\n\t\t\tvar styleArray = styleStr.split(' ');\r\n      if (styleArray.length!==3) return styleStr;\r\n\t\t\tvar v1 = \"0px\", v2 = \"none\", v3 = \"transparent\";\r\n\t\t\tvar style = [\"dotted\", \"dashed\", \"solid\", \"double\", \"groove\", \"ridge\", \"inset\", \"outset\", \"none\", \"hidden\", \"mix\"];\r\n\t\t\tstyleArray.forEach(function (v) {\r\n\t\t\t\tif (v.match(/^\\d/)) {\r\n\t\t\t\t\tv1 = v;\r\n\t\t\t\t} else if (style.indexOf(v) > -1) {\r\n\t\t\t\t\tv2 = v;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tv3 = v;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\treturn v1 + ' ' + v2 + ' ' + v3;\r\n\t\t} catch (e) {\r\n\t\t\treturn styleStr;\r\n\t\t}\r\n\t}\r\n\r\n  /**\r\n   * Transform a CSS expression (e.g. 'margin:10px') in the PDFMake version\r\n   *\r\n   * @param {String} style The CSS expression to transform\r\n   * @param {DOMElement} element\r\n   * @param {Boolean} ignoreProperties TRUE when we have to ignore some properties, like border, padding, margin\r\n   * @returns {Array} array of {key, value}\r\n   */\r\n  this.parseStyle = function(element, ignoreProperties) {\r\n    var style = element.getAttribute(\"style\") || \"\";\r\n    var ret = [];\r\n    style = style.replace(/!important/g, '').split(';');\r\n    // check if we have \"width\" or \"height\"\r\n    var width = element.getAttribute(\"width\");\r\n    var height = element.getAttribute(\"height\");\r\n    if (width) {\r\n      style.unshift(\"width:\" + this.convertToUnit(width + (isNaN(width) ? \"\" : \"px\")));\r\n    }\r\n    if (height) {\r\n      style.unshift(\"height:\" + this.convertToUnit(height + (isNaN(height) ? \"\" : \"px\")));\r\n    }\r\n    // check if we have 'color' or 'size' -- mainly for '<font>'\r\n    var color = element.getAttribute(\"color\");\r\n    if (color) {\r\n      ret.push({key:\"color\", value:this.parseColor(color).color});\r\n    }\r\n    var size = element.getAttribute(\"size\");\r\n    if (size !== null) {\r\n      // Getting and sanitizing the size value: it should be included between 1 and 7\r\n      size = Math.min(Math.max(1, parseInt(size)), 7);\r\n      // Assigning the font size\r\n      ret.push({key:'fontSize', value:Math.max(this.fontSizes[0], this.fontSizes[size - 1])});\r\n    }\r\n\r\n    var styleDefs = style.map(function(style) { return style.toLowerCase().split(':') });\r\n    var borders = []; // special treatment for borders\r\n    var nodeName = element.nodeName.toUpperCase();\r\n    var _this=this;\r\n    styleDefs.forEach(function(styleDef) {\r\n      if (styleDef.length===2) {\r\n        var key = styleDef[0].trim().toLowerCase();\r\n        var value = styleDef[1].trim();\r\n        var res;\r\n        if (_this.ignoreStyles.indexOf(key) === -1) {\r\n          switch (key) {\r\n            case \"margin\": {\r\n              if (ignoreProperties) break;\r\n              // pdfMake uses a different order than CSS\r\n              value = value.split(' ');\r\n              if (value.length===1) value=[value[0], value[0], value[0], value[0]];\r\n              else if (value.length===2) value=[value[1], value[0]]; // vertical | horizontal ==> horizontal | vertical\r\n              else if (value.length===3) value=[value[1], value[0], value[1], value[2]]; // top | horizontal | bottom ==> left | top | right | bottom\r\n              else if (value.length===4) value=[value[3], value[0], value[1], value[2]]; // top | right | bottom | left ==> left | top | right | bottom\r\n\r\n              // we now need to convert to PT\r\n              value.forEach(function(val, i) {\r\n                value[i] = _this.convertToUnit(val);\r\n              });\r\n              // ignore if we have a FALSE in the table\r\n              if (value.indexOf(false) === -1) ret.push({key:key, value:value});\r\n              break;\r\n            }\r\n            case \"line-height\": {\r\n              // change % unit\r\n              if (typeof value === \"string\" && value.slice(-1) === '%') {\r\n                value = value.slice(0,-1) / 100;\r\n              } else {\r\n                value = _this.convertToUnit(value);\r\n              }\r\n              ret.push({key:\"lineHeight\", value:value});\r\n              break;\r\n            }\r\n            case \"text-align\": {\r\n              ret.push({key:\"alignment\", value:value});\r\n              break;\r\n            }\r\n            case \"font-weight\": {\r\n              if (value === \"bold\") ret.push({key:\"bold\", value:true});\r\n              break;\r\n            }\r\n            case \"text-decoration\": {\r\n              // verify the value is valid\r\n              value = _this.toCamelCase(value);\r\n              if ([\"underline\", \"lineThrough\", \"overline\"].includes(value)) {\r\n                ret.push({key:\"decoration\", value:value})\r\n              }\r\n              break;\r\n            }\r\n            case \"font-style\": {\r\n              if (value===\"italic\") ret.push({key:\"italics\", value:true});\r\n              break;\r\n            }\r\n            case \"font-family\": {\r\n\t\t\t\t\t\t\tret.push({\r\n\t\t\t\t\t\t\t\tkey: \"font\", value: value.split(',')[0].replace(/\"|^'|^\\s*|\\s*$|'$/g, \"\").replace(/^([a-z])/g, function (g) {\r\n\t\t\t\t\t\t\t\t\treturn g[0].toUpperCase();\r\n\t\t\t\t\t\t\t\t}).replace(/ ([a-z])/g, function (g) {\r\n\t\t\t\t\t\t\t\t\treturn g[1].toUpperCase();\r\n\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\tbreak;\r\n            }\r\n            case \"color\": {\r\n              res = _this.parseColor(value);\r\n              ret.push({key:\"color\", value:res.color});\r\n              if (res.opacity < 1) ret.push({key:\"opacity\", value:res.opacity});\r\n              break;\r\n            }\r\n            case \"background-color\": {\r\n              // if TH/TD and key is 'background', then we use 'fillColor' instead\r\n              res = _this.parseColor(value);\r\n              ret.push({key:(nodeName === 'TD' || nodeName === 'TH' ? \"fillColor\" : \"background\"), value:res.color});\r\n              if (res.opacity < 1) ret.push({key:(nodeName === 'TD' || nodeName === 'TH' ? \"fillOpacity\" : \"opacity\"), value:res.opacity});\r\n              break;\r\n            }\r\n            case \"text-indent\": {\r\n              ret.push({key:\"leadingIndent\", value:_this.convertToUnit(value)});\r\n              break;\r\n            }\r\n            case \"white-space\": {\r\n              if (value==='nowrap') {\r\n                ret.push({key:\"noWrap\", value:true});\r\n              } else {\r\n                ret.push({key:\"preserveLeadingSpaces\", value:(value==='break-spaces' || value.slice(0,3) === 'pre')});\r\n              }\r\n              break;\r\n            }\r\n            default: {\r\n              // for borders\r\n              if (key === 'border' || key.indexOf('border-left') === 0 || key.indexOf('border-top') === 0 || key.indexOf('border-right') === 0 || key.indexOf('border-bottom') === 0) {\r\n                if (!ignoreProperties) borders.push({key:key, value:value});\r\n              } else {\r\n                // ignore some properties\r\n                if (ignoreProperties && (key.indexOf(\"margin-\") === 0 || key === 'width' || key === 'height')) break;\r\n                // for IMG only (see issue #181)\r\n                if (nodeName === \"IMG\" && (key === 'width' || key === 'height')) {\r\n                  ret.push({key:key, value: _this.convertToUnit(value)});\r\n                  break;\r\n                }\r\n\r\n                // padding is not supported by PDFMake\r\n                if (key.indexOf(\"padding\") === 0) break;\r\n                if (key.indexOf(\"-\") > -1) key=_this.toCamelCase(key);\r\n                if (value) {\r\n                  // convert value to a 'pt' when possible\r\n                  var parsedValue = _this.convertToUnit(value);\r\n                  // if we have 'font-size' with a parsedValue at false, then ignore it\r\n                  if (key === 'font-size' && parsedValue === false) break;\r\n                  ret.push({key:key, value:(parsedValue === false ? value : parsedValue)});\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    });\r\n    // for borders\r\n    if (borders.length > 0) {\r\n      // we have to merge together the borders in two properties\r\n      var border = []; // array of boolean\r\n      var borderColor = []; // array of colors\r\n      borders.forEach(function(b) {\r\n        // we have 3 properties: width style color\r\n\t\t\t\tb.value = _this.borderValueRearrange(b.value);\r\n        var properties = b.value.split(' ');\r\n        var width = properties[0].replace(/(\\d*)(\\.\\d+)?([^\\d]+)/g,\"$1$2 \").trim();\r\n        var index = -1, i;\r\n        if (b.key.indexOf('-left') > -1) index=0;\r\n        else if (b.key.indexOf('-top') > -1) index=1;\r\n        else if (b.key.indexOf('-right') > -1) index=2;\r\n        else if (b.key.indexOf('-bottom') > -1) index=3;\r\n        // for the width\r\n        if (index > -1) {\r\n          border[index] = (width > 0);\r\n        } else {\r\n          for (i=0; i<4; i++) border[i] = (width > 0);\r\n        }\r\n        // for the color\r\n        if (properties.length > 2) {\r\n          var color = properties.slice(2).join(' ');\r\n          if (index > -1) {\r\n            borderColor[index] = _this.parseColor(color).color;\r\n          } else {\r\n            for (i=0; i<4; i++) borderColor[i] = _this.parseColor(color).color;\r\n          }\r\n        }\r\n      });\r\n      // fill the gaps\r\n      for (var i=0; i<4; i++) {\r\n        if (border.length > 0 && typeof border[i] === \"undefined\") border[i]=true;\r\n        if (borderColor.length > 0 && typeof borderColor[i] === \"undefined\") borderColor[i]='#000000';\r\n      }\r\n      if (border.length > 0) ret.push({key:'border', value:border});\r\n      if (borderColor.length > 0) ret.push({key:'borderColor', value:borderColor});\r\n    }\r\n    return ret;\r\n  }\r\n\r\n  this.toCamelCase = function(str) {\r\n    return str.replace(/-([a-z])/g, function (g) { return g[1].toUpperCase() });\r\n  }\r\n\r\n  // input: h in [0,360] and s,v in [0,1] - output: \"rgb(0–255,0–255,0–255)\"\"\r\n  // source: https://stackoverflow.com/a/54014428/1134119 + https://stackoverflow.com/questions/2353211/hsl-to-rgb-color-conversion#comment58413965_9493060\r\n  this.hsl2rgb = function(h,s,l) {\r\n    var a = s*Math.min(l,1-l);\r\n    var f = function(n) {\r\n      var k=(n+h/30)%12;\r\n      return Math.min(Math.floor((l - a*Math.max(Math.min(k-3,9-k,1),-1))*256),255);\r\n    }\r\n    return \"rgb(\"+f(0)+\",\"+f(8)+\",\"+f(4)+\")\";\r\n  }\r\n\r\n  /**\r\n   * Returns the color in a hex format (e.g. #12ff00).\r\n   * Also tries to convert RGB colors into hex values\r\n   *\r\n   * @param color color as string representation\r\n   * @returns {color (as hex values for pdfmake), opacity}\r\n   */\r\n  this.parseColor = function(color) {\r\n    var opacity = 1;\r\n    // e.g. `#fff` or `#ff0048`\r\n    var haxRegex = new RegExp('^#([0-9a-f]{3}|[0-9a-f]{6})$', 'i');\r\n\r\n    // e.g. rgb(0,255,34) or rgb(22, 0, 0) or rgb(100%, 100%, 100%) or rgba(0,125,250,0.8)\r\n    var rgbRegex = /^rgba?\\(\\s*(\\d+(\\.\\d+)?%?),\\s*(\\d+(\\.\\d+)?%?),\\s*(\\d+(\\.\\d+)?%?)(,\\s*\\d+(\\.\\d+)?)?\\)$/;\r\n\r\n    // e.g. hsl(300, 10%, 20%)\r\n    var hslRegex = new RegExp('^hsl\\\\((\\\\d+(\\\\.\\\\d+)?%?),\\\\s*(\\\\d+(\\\\.\\\\d+)?%?),\\\\s*(\\\\d+(\\\\.\\\\d+)?%?)\\\\)$');\r\n\r\n    // e.g. \"white\" or \"red\"\r\n    var nameRegex = new RegExp('^[a-z]+$', 'i');\r\n\r\n    var decimalColors, decimalValue, hexString, ret=[];\r\n    if (haxRegex.test(color)) {\r\n      return {color:color, opacity:opacity};\r\n    }\r\n\r\n    if (hslRegex.test(color)) {\r\n      // we want to convert to RGB\r\n      decimalColors = hslRegex.exec(color).slice(1);\r\n      // first value should be from 0 to 360\r\n      if (decimalColors[0].endsWith('%')) decimalValue = decimalColors[0].slice(0,-1) * 360 / 100;\r\n      else decimalValue = decimalColors[0]*1;\r\n      ret.push(decimalValue);\r\n      // next values should be % to convert to base 1\r\n      ret.push(decimalColors[2].slice(0,-1) / 100);\r\n      ret.push(decimalColors[4].slice(0,-1) / 100);\r\n      color = this.hsl2rgb(ret[0], ret[1], ret[2]);\r\n      ret = [];\r\n    }\r\n    if (rgbRegex.test(color)) {\r\n      decimalColors = rgbRegex.exec(color).slice(1).filter(function(v,i) {\r\n        return i%2===0 && typeof v !== \"undefined\";\r\n      });\r\n\r\n      decimalColors.forEach(function(decimalValue, i) {\r\n        // for the alpha number\r\n        if (i === 3) {\r\n          opacity = decimalValue.slice(1)*1;\r\n        } else {\r\n          // if it ends with '%', we calculcate based on 100%=255\r\n          if (decimalValue.endsWith('%')) {\r\n            decimalValue = Math.round(decimalValue.slice(0,-1) * 255 / 100);\r\n          } else decimalValue = decimalValue*1;\r\n          if (decimalValue > 255) {\r\n            decimalValue = 255;\r\n          }\r\n          hexString = '0' + decimalValue.toString(16);\r\n          hexString = hexString.slice(-2);\r\n          ret.push(hexString);\r\n        }\r\n      })\r\n      return {color:'#' + ret.join(''), opacity:opacity};\r\n    }\r\n    if (nameRegex.test(color)) return {color:color, opacity:opacity};\r\n\r\n    console.error('Could not parse color \"' + color + '\"');\r\n    return {color:color, opacity:opacity};\r\n  }\r\n\r\n  /**\r\n   * Convert 'px'/'rem'/'cm'/'em'/'in' to 'pt', and return false for the other ones. If it's only a number, it will just return it\r\n   *\r\n   * @param  {String} val The value with units (e.g. 12px)\r\n   * @return {Number|Boolean} Return the pt value, or false\r\n   */\r\n  this.convertToUnit = function(val) {\r\n    // if it's just a number, then return it\r\n    if (!isNaN(parseFloat(val)) && isFinite(val)) return val*1;\r\n    var mtch = (val+\"\").trim().match(/^(\\d*(\\.\\d+)?)(pt|px|r?em|cm|in)$/);\r\n    // if we don't have a number with supported units, then return false\r\n    if (!mtch) return false;\r\n    val = mtch[1];\r\n    switch(mtch[3]) {\r\n      case 'px':{\r\n        val = Math.round(val * 0.75292857248934); // 1px => 0.75292857248934pt\r\n        break;\r\n      }\r\n      case 'em':\r\n      case 'rem':{\r\n        val *= 12; // default font-size is 12pt\r\n        break;\r\n      }\r\n      case 'cm':{\r\n        val = Math.round(val * 28.34646); // 1cm => 28.34646\r\n        break;\r\n      }\r\n      case 'in':{\r\n        val *= 72; // 1in => 72 pt\r\n        break;\r\n      }\r\n    }\r\n    return val*1;\r\n  }\r\n\r\n  var result = this.convertHtml(htmlText);\r\n  // if we only pass a string without HTML code\r\n  if (typeof result === \"string\") result={text:result};\r\n  // if images by reference\r\n  if (this.imagesByReference) {\r\n    result = {content:result, images:{}};\r\n    this.imagesRef.forEach(function(src, i) {\r\n      // check if 'src' is a JSON string\r\n      result.images['img_ref_'+imagesByReferenceSuffix+i] = (src.startsWith(\"{\") ? JSON.parse(src) : src);\r\n    });\r\n  }\r\n  return result;\r\n}\r\n\r\nmodule.exports = function(htmlText, options) {\r\n  return new htmlToPdfMake(htmlText, options);\r\n}\r\n","// http://www.w3.org/TR/CSS21/grammar.html\n// https://github.com/visionmedia/css-parse/pull/49#issuecomment-30088027\nvar COMMENT_REGEX = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\n\nvar NEWLINE_REGEX = /\\n/g;\nvar WHITESPACE_REGEX = /^\\s*/;\n\n// declaration\nvar PROPERTY_REGEX = /^(\\*?[-#/*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/;\nvar COLON_REGEX = /^:\\s*/;\nvar VALUE_REGEX = /^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};])+)/;\nvar SEMICOLON_REGEX = /^[;\\s]*/;\n\n// https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim#Polyfill\nvar TRIM_REGEX = /^\\s+|\\s+$/g;\n\n// strings\nvar NEWLINE = '\\n';\nvar FORWARD_SLASH = '/';\nvar ASTERISK = '*';\nvar EMPTY_STRING = '';\n\n// types\nvar TYPE_COMMENT = 'comment';\nvar TYPE_DECLARATION = 'declaration';\n\n/**\n * @param {String} style\n * @param {Object} [options]\n * @return {Object[]}\n * @throws {TypeError}\n * @throws {Error}\n */\nmodule.exports = function (style, options) {\n  if (typeof style !== 'string') {\n    throw new TypeError('First argument must be a string');\n  }\n\n  if (!style) return [];\n\n  options = options || {};\n\n  /**\n   * Positional.\n   */\n  var lineno = 1;\n  var column = 1;\n\n  /**\n   * Update lineno and column based on `str`.\n   *\n   * @param {String} str\n   */\n  function updatePosition(str) {\n    var lines = str.match(NEWLINE_REGEX);\n    if (lines) lineno += lines.length;\n    var i = str.lastIndexOf(NEWLINE);\n    column = ~i ? str.length - i : column + str.length;\n  }\n\n  /**\n   * Mark position and patch `node.position`.\n   *\n   * @return {Function}\n   */\n  function position() {\n    var start = { line: lineno, column: column };\n    return function (node) {\n      node.position = new Position(start);\n      whitespace();\n      return node;\n    };\n  }\n\n  /**\n   * Store position information for a node.\n   *\n   * @constructor\n   * @property {Object} start\n   * @property {Object} end\n   * @property {undefined|String} source\n   */\n  function Position(start) {\n    this.start = start;\n    this.end = { line: lineno, column: column };\n    this.source = options.source;\n  }\n\n  /**\n   * Non-enumerable source string.\n   */\n  Position.prototype.content = style;\n\n  var errorsList = [];\n\n  /**\n   * Error `msg`.\n   *\n   * @param {String} msg\n   * @throws {Error}\n   */\n  function error(msg) {\n    var err = new Error(\n      options.source + ':' + lineno + ':' + column + ': ' + msg\n    );\n    err.reason = msg;\n    err.filename = options.source;\n    err.line = lineno;\n    err.column = column;\n    err.source = style;\n\n    if (options.silent) {\n      errorsList.push(err);\n    } else {\n      throw err;\n    }\n  }\n\n  /**\n   * Match `re` and return captures.\n   *\n   * @param {RegExp} re\n   * @return {undefined|Array}\n   */\n  function match(re) {\n    var m = re.exec(style);\n    if (!m) return;\n    var str = m[0];\n    updatePosition(str);\n    style = style.slice(str.length);\n    return m;\n  }\n\n  /**\n   * Parse whitespace.\n   */\n  function whitespace() {\n    match(WHITESPACE_REGEX);\n  }\n\n  /**\n   * Parse comments.\n   *\n   * @param {Object[]} [rules]\n   * @return {Object[]}\n   */\n  function comments(rules) {\n    var c;\n    rules = rules || [];\n    while ((c = comment())) {\n      if (c !== false) {\n        rules.push(c);\n      }\n    }\n    return rules;\n  }\n\n  /**\n   * Parse comment.\n   *\n   * @return {Object}\n   * @throws {Error}\n   */\n  function comment() {\n    var pos = position();\n    if (FORWARD_SLASH != style.charAt(0) || ASTERISK != style.charAt(1)) return;\n\n    var i = 2;\n    while (\n      EMPTY_STRING != style.charAt(i) &&\n      (ASTERISK != style.charAt(i) || FORWARD_SLASH != style.charAt(i + 1))\n    ) {\n      ++i;\n    }\n    i += 2;\n\n    if (EMPTY_STRING === style.charAt(i - 1)) {\n      return error('End of comment missing');\n    }\n\n    var str = style.slice(2, i - 2);\n    column += 2;\n    updatePosition(str);\n    style = style.slice(i);\n    column += 2;\n\n    return pos({\n      type: TYPE_COMMENT,\n      comment: str\n    });\n  }\n\n  /**\n   * Parse declaration.\n   *\n   * @return {Object}\n   * @throws {Error}\n   */\n  function declaration() {\n    var pos = position();\n\n    // prop\n    var prop = match(PROPERTY_REGEX);\n    if (!prop) return;\n    comment();\n\n    // :\n    if (!match(COLON_REGEX)) return error(\"property missing ':'\");\n\n    // val\n    var val = match(VALUE_REGEX);\n\n    var ret = pos({\n      type: TYPE_DECLARATION,\n      property: trim(prop[0].replace(COMMENT_REGEX, EMPTY_STRING)),\n      value: val\n        ? trim(val[0].replace(COMMENT_REGEX, EMPTY_STRING))\n        : EMPTY_STRING\n    });\n\n    // ;\n    match(SEMICOLON_REGEX);\n\n    return ret;\n  }\n\n  /**\n   * Parse declarations.\n   *\n   * @return {Object[]}\n   */\n  function declarations() {\n    var decls = [];\n\n    comments(decls);\n\n    // declarations\n    var decl;\n    while ((decl = declaration())) {\n      if (decl !== false) {\n        decls.push(decl);\n        comments(decls);\n      }\n    }\n\n    return decls;\n  }\n\n  whitespace();\n  return declarations();\n};\n\n/**\n * Trim `str`.\n *\n * @param {String} str\n * @return {String}\n */\nfunction trim(str) {\n  return str ? str.replace(TRIM_REGEX, EMPTY_STRING) : EMPTY_STRING;\n}\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var hashClear = require('./_hashClear'),\n    hashDelete = require('./_hashDelete'),\n    hashGet = require('./_hashGet'),\n    hashHas = require('./_hashHas'),\n    hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var listCacheClear = require('./_listCacheClear'),\n    listCacheDelete = require('./_listCacheDelete'),\n    listCacheGet = require('./_listCacheGet'),\n    listCacheHas = require('./_listCacheHas'),\n    listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var mapCacheClear = require('./_mapCacheClear'),\n    mapCacheDelete = require('./_mapCacheDelete'),\n    mapCacheGet = require('./_mapCacheGet'),\n    mapCacheHas = require('./_mapCacheHas'),\n    mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var MapCache = require('./_MapCache'),\n    setCacheAdd = require('./_setCacheAdd'),\n    setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n  var index = -1,\n      length = values == null ? 0 : values.length;\n\n  this.__data__ = new MapCache;\n  while (++index < length) {\n    this.add(values[index]);\n  }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","var ListCache = require('./_ListCache'),\n    stackClear = require('./_stackClear'),\n    stackDelete = require('./_stackDelete'),\n    stackGet = require('./_stackGet'),\n    stackHas = require('./_stackHas'),\n    stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n  switch (args.length) {\n    case 0: return func.call(thisArg);\n    case 1: return func.call(thisArg, args[0]);\n    case 2: return func.call(thisArg, args[0], args[1]);\n    case 3: return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\n\nmodule.exports = arrayEach;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayFilter;\n","var baseIndexOf = require('./_baseIndexOf');\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n  var length = array == null ? 0 : array.length;\n  return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nmodule.exports = arrayIncludes;\n","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (comparator(value, array[index])) {\n      return true;\n    }\n  }\n  return false;\n}\n\nmodule.exports = arrayIncludesWith;\n","var baseTimes = require('./_baseTimes'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isIndex = require('./_isIndex'),\n    isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\n\nmodule.exports = arrayMap;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\nmodule.exports = arrayPush;\n","/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n *  the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  if (initAccum && length) {\n    accumulator = array[++index];\n  }\n  while (++index < length) {\n    accumulator = iteratee(accumulator, array[index], index, array);\n  }\n  return accumulator;\n}\n\nmodule.exports = arrayReduce;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction arraySome(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nmodule.exports = arraySome;\n","var baseProperty = require('./_baseProperty');\n\n/**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\nvar asciiSize = baseProperty('length');\n\nmodule.exports = asciiSize;\n","var baseAssignValue = require('./_baseAssignValue'),\n    eq = require('./eq');\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n  if ((value !== undefined && !eq(object[key], value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nmodule.exports = assignMergeValue;\n","var baseAssignValue = require('./_baseAssignValue'),\n    eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nmodule.exports = assignValue;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var copyObject = require('./_copyObject'),\n    keys = require('./keys');\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n  return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n","var copyObject = require('./_copyObject'),\n    keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n  return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n  if (key == '__proto__' && defineProperty) {\n    defineProperty(object, key, {\n      'configurable': true,\n      'enumerable': true,\n      'value': value,\n      'writable': true\n    });\n  } else {\n    object[key] = value;\n  }\n}\n\nmodule.exports = baseAssignValue;\n","var Stack = require('./_Stack'),\n    arrayEach = require('./_arrayEach'),\n    assignValue = require('./_assignValue'),\n    baseAssign = require('./_baseAssign'),\n    baseAssignIn = require('./_baseAssignIn'),\n    cloneBuffer = require('./_cloneBuffer'),\n    copyArray = require('./_copyArray'),\n    copySymbols = require('./_copySymbols'),\n    copySymbolsIn = require('./_copySymbolsIn'),\n    getAllKeys = require('./_getAllKeys'),\n    getAllKeysIn = require('./_getAllKeysIn'),\n    getTag = require('./_getTag'),\n    initCloneArray = require('./_initCloneArray'),\n    initCloneByTag = require('./_initCloneByTag'),\n    initCloneObject = require('./_initCloneObject'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isMap = require('./isMap'),\n    isObject = require('./isObject'),\n    isSet = require('./isSet'),\n    keys = require('./keys'),\n    keysIn = require('./keysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Deep clone\n *  2 - Flatten inherited properties\n *  4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n  var result,\n      isDeep = bitmask & CLONE_DEEP_FLAG,\n      isFlat = bitmask & CLONE_FLAT_FLAG,\n      isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n  if (customizer) {\n    result = object ? customizer(value, key, object, stack) : customizer(value);\n  }\n  if (result !== undefined) {\n    return result;\n  }\n  if (!isObject(value)) {\n    return value;\n  }\n  var isArr = isArray(value);\n  if (isArr) {\n    result = initCloneArray(value);\n    if (!isDeep) {\n      return copyArray(value, result);\n    }\n  } else {\n    var tag = getTag(value),\n        isFunc = tag == funcTag || tag == genTag;\n\n    if (isBuffer(value)) {\n      return cloneBuffer(value, isDeep);\n    }\n    if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n      result = (isFlat || isFunc) ? {} : initCloneObject(value);\n      if (!isDeep) {\n        return isFlat\n          ? copySymbolsIn(value, baseAssignIn(result, value))\n          : copySymbols(value, baseAssign(result, value));\n      }\n    } else {\n      if (!cloneableTags[tag]) {\n        return object ? value : {};\n      }\n      result = initCloneByTag(value, tag, isDeep);\n    }\n  }\n  // Check for circular references and return its corresponding clone.\n  stack || (stack = new Stack);\n  var stacked = stack.get(value);\n  if (stacked) {\n    return stacked;\n  }\n  stack.set(value, result);\n\n  if (isSet(value)) {\n    value.forEach(function(subValue) {\n      result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n    });\n  } else if (isMap(value)) {\n    value.forEach(function(subValue, key) {\n      result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n    });\n  }\n\n  var keysFunc = isFull\n    ? (isFlat ? getAllKeysIn : getAllKeys)\n    : (isFlat ? keysIn : keys);\n\n  var props = isArr ? undefined : keysFunc(value);\n  arrayEach(props || value, function(subValue, key) {\n    if (props) {\n      key = subValue;\n      subValue = value[key];\n    }\n    // Recursively populate clone (susceptible to call stack limits).\n    assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n  });\n  return result;\n}\n\nmodule.exports = baseClone;\n","var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n  function object() {}\n  return function(proto) {\n    if (!isObject(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object;\n    object.prototype = undefined;\n    return result;\n  };\n}());\n\nmodule.exports = baseCreate;\n","var baseForOwn = require('./_baseForOwn'),\n    createBaseEach = require('./_createBaseEach');\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n","var isSymbol = require('./isSymbol');\n\n/**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\nfunction baseExtremum(array, iteratee, comparator) {\n  var index = -1,\n      length = array.length;\n\n  while (++index < length) {\n    var value = array[index],\n        current = iteratee(value);\n\n    if (current != null && (computed === undefined\n          ? (current === current && !isSymbol(current))\n          : comparator(current, computed)\n        )) {\n      var computed = current,\n          result = value;\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseExtremum;\n","var baseEach = require('./_baseEach');\n\n/**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction baseFilter(collection, predicate) {\n  var result = [];\n  baseEach(collection, function(value, index, collection) {\n    if (predicate(value, index, collection)) {\n      result.push(value);\n    }\n  });\n  return result;\n}\n\nmodule.exports = baseFilter;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n  var length = array.length,\n      index = fromIndex + (fromRight ? 1 : -1);\n\n  while ((fromRight ? index-- : ++index < length)) {\n    if (predicate(array[index], index, array)) {\n      return index;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = baseFindIndex;\n","var arrayPush = require('./_arrayPush'),\n    isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n  var index = -1,\n      length = array.length;\n\n  predicate || (predicate = isFlattenable);\n  result || (result = []);\n\n  while (++index < length) {\n    var value = array[index];\n    if (depth > 0 && predicate(value)) {\n      if (depth > 1) {\n        // Recursively flatten arrays (susceptible to call stack limits).\n        baseFlatten(value, depth - 1, predicate, isStrict, result);\n      } else {\n        arrayPush(result, value);\n      }\n    } else if (!isStrict) {\n      result[result.length] = value;\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseFlatten;\n","var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","var baseFor = require('./_baseFor'),\n    keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n  return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n","var castPath = require('./_castPath'),\n    toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n  path = castPath(path, object);\n\n  var index = 0,\n      length = path.length;\n\n  while (object != null && index < length) {\n    object = object[toKey(path[index++])];\n  }\n  return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var arrayPush = require('./_arrayPush'),\n    isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n *  else `false`.\n */\nfunction baseGt(value, other) {\n  return value > other;\n}\n\nmodule.exports = baseGt;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n  return object != null && hasOwnProperty.call(object, key);\n}\n\nmodule.exports = baseHas;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n  return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n","var baseFindIndex = require('./_baseFindIndex'),\n    baseIsNaN = require('./_baseIsNaN'),\n    strictIndexOf = require('./_strictIndexOf');\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n  return value === value\n    ? strictIndexOf(array, value, fromIndex)\n    : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nmodule.exports = baseIndexOf;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n    isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Unordered comparison\n *  2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","var Stack = require('./_Stack'),\n    equalArrays = require('./_equalArrays'),\n    equalByTag = require('./_equalByTag'),\n    equalObjects = require('./_equalObjects'),\n    getTag = require('./_getTag'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n  var objIsArr = isArray(object),\n      othIsArr = isArray(other),\n      objTag = objIsArr ? arrayTag : getTag(object),\n      othTag = othIsArr ? arrayTag : getTag(other);\n\n  objTag = objTag == argsTag ? objectTag : objTag;\n  othTag = othTag == argsTag ? objectTag : othTag;\n\n  var objIsObj = objTag == objectTag,\n      othIsObj = othTag == objectTag,\n      isSameTag = objTag == othTag;\n\n  if (isSameTag && isBuffer(object)) {\n    if (!isBuffer(other)) {\n      return false;\n    }\n    objIsArr = true;\n    objIsObj = false;\n  }\n  if (isSameTag && !objIsObj) {\n    stack || (stack = new Stack);\n    return (objIsArr || isTypedArray(object))\n      ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n      : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n  }\n  if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n    if (objIsWrapped || othIsWrapped) {\n      var objUnwrapped = objIsWrapped ? object.value() : object,\n          othUnwrapped = othIsWrapped ? other.value() : other;\n\n      stack || (stack = new Stack);\n      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  stack || (stack = new Stack);\n  return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n","var getTag = require('./_getTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n  return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\n","var Stack = require('./_Stack'),\n    baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n  var index = matchData.length,\n      length = index,\n      noCustomizer = !customizer;\n\n  if (object == null) {\n    return !length;\n  }\n  object = Object(object);\n  while (index--) {\n    var data = matchData[index];\n    if ((noCustomizer && data[2])\n          ? data[1] !== object[data[0]]\n          : !(data[0] in object)\n        ) {\n      return false;\n    }\n  }\n  while (++index < length) {\n    data = matchData[index];\n    var key = data[0],\n        objValue = object[key],\n        srcValue = data[1];\n\n    if (noCustomizer && data[2]) {\n      if (objValue === undefined && !(key in object)) {\n        return false;\n      }\n    } else {\n      var stack = new Stack;\n      if (customizer) {\n        var result = customizer(objValue, srcValue, key, object, source, stack);\n      }\n      if (!(result === undefined\n            ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n            : result\n          )) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\nmodule.exports = baseIsMatch;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n  return value !== value;\n}\n\nmodule.exports = baseIsNaN;\n","var isFunction = require('./isFunction'),\n    isMasked = require('./_isMasked'),\n    isObject = require('./isObject'),\n    toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","var getTag = require('./_getTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n  return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;\n","var baseGetTag = require('./_baseGetTag'),\n    isLength = require('./isLength'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","var baseMatches = require('./_baseMatches'),\n    baseMatchesProperty = require('./_baseMatchesProperty'),\n    identity = require('./identity'),\n    isArray = require('./isArray'),\n    property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n  // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n  // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n  if (typeof value == 'function') {\n    return value;\n  }\n  if (value == null) {\n    return identity;\n  }\n  if (typeof value == 'object') {\n    return isArray(value)\n      ? baseMatchesProperty(value[0], value[1])\n      : baseMatches(value);\n  }\n  return property(value);\n}\n\nmodule.exports = baseIteratee;\n","var isPrototype = require('./_isPrototype'),\n    nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeys;\n","var isObject = require('./isObject'),\n    isPrototype = require('./_isPrototype'),\n    nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeysIn;\n","/**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n *  else `false`.\n */\nfunction baseLt(value, other) {\n  return value < other;\n}\n\nmodule.exports = baseLt;\n","var baseEach = require('./_baseEach'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n  var index = -1,\n      result = isArrayLike(collection) ? Array(collection.length) : [];\n\n  baseEach(collection, function(value, key, collection) {\n    result[++index] = iteratee(value, key, collection);\n  });\n  return result;\n}\n\nmodule.exports = baseMap;\n","var baseIsMatch = require('./_baseIsMatch'),\n    getMatchData = require('./_getMatchData'),\n    matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n  var matchData = getMatchData(source);\n  if (matchData.length == 1 && matchData[0][2]) {\n    return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n  }\n  return function(object) {\n    return object === source || baseIsMatch(object, source, matchData);\n  };\n}\n\nmodule.exports = baseMatches;\n","var baseIsEqual = require('./_baseIsEqual'),\n    get = require('./get'),\n    hasIn = require('./hasIn'),\n    isKey = require('./_isKey'),\n    isStrictComparable = require('./_isStrictComparable'),\n    matchesStrictComparable = require('./_matchesStrictComparable'),\n    toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n  if (isKey(path) && isStrictComparable(srcValue)) {\n    return matchesStrictComparable(toKey(path), srcValue);\n  }\n  return function(object) {\n    var objValue = get(object, path);\n    return (objValue === undefined && objValue === srcValue)\n      ? hasIn(object, path)\n      : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n  };\n}\n\nmodule.exports = baseMatchesProperty;\n","var Stack = require('./_Stack'),\n    assignMergeValue = require('./_assignMergeValue'),\n    baseFor = require('./_baseFor'),\n    baseMergeDeep = require('./_baseMergeDeep'),\n    isObject = require('./isObject'),\n    keysIn = require('./keysIn'),\n    safeGet = require('./_safeGet');\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n  if (object === source) {\n    return;\n  }\n  baseFor(source, function(srcValue, key) {\n    stack || (stack = new Stack);\n    if (isObject(srcValue)) {\n      baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n    }\n    else {\n      var newValue = customizer\n        ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      if (newValue === undefined) {\n        newValue = srcValue;\n      }\n      assignMergeValue(object, key, newValue);\n    }\n  }, keysIn);\n}\n\nmodule.exports = baseMerge;\n","var assignMergeValue = require('./_assignMergeValue'),\n    cloneBuffer = require('./_cloneBuffer'),\n    cloneTypedArray = require('./_cloneTypedArray'),\n    copyArray = require('./_copyArray'),\n    initCloneObject = require('./_initCloneObject'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isArrayLikeObject = require('./isArrayLikeObject'),\n    isBuffer = require('./isBuffer'),\n    isFunction = require('./isFunction'),\n    isObject = require('./isObject'),\n    isPlainObject = require('./isPlainObject'),\n    isTypedArray = require('./isTypedArray'),\n    safeGet = require('./_safeGet'),\n    toPlainObject = require('./toPlainObject');\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n  var objValue = safeGet(object, key),\n      srcValue = safeGet(source, key),\n      stacked = stack.get(srcValue);\n\n  if (stacked) {\n    assignMergeValue(object, key, stacked);\n    return;\n  }\n  var newValue = customizer\n    ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n    : undefined;\n\n  var isCommon = newValue === undefined;\n\n  if (isCommon) {\n    var isArr = isArray(srcValue),\n        isBuff = !isArr && isBuffer(srcValue),\n        isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n    newValue = srcValue;\n    if (isArr || isBuff || isTyped) {\n      if (isArray(objValue)) {\n        newValue = objValue;\n      }\n      else if (isArrayLikeObject(objValue)) {\n        newValue = copyArray(objValue);\n      }\n      else if (isBuff) {\n        isCommon = false;\n        newValue = cloneBuffer(srcValue, true);\n      }\n      else if (isTyped) {\n        isCommon = false;\n        newValue = cloneTypedArray(srcValue, true);\n      }\n      else {\n        newValue = [];\n      }\n    }\n    else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n      newValue = objValue;\n      if (isArguments(objValue)) {\n        newValue = toPlainObject(objValue);\n      }\n      else if (!isObject(objValue) || isFunction(objValue)) {\n        newValue = initCloneObject(srcValue);\n      }\n    }\n    else {\n      isCommon = false;\n    }\n  }\n  if (isCommon) {\n    // Recursively merge objects and arrays (susceptible to call stack limits).\n    stack.set(srcValue, newValue);\n    mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n    stack['delete'](srcValue);\n  }\n  assignMergeValue(object, key, newValue);\n}\n\nmodule.exports = baseMergeDeep;\n","var arrayMap = require('./_arrayMap'),\n    baseGet = require('./_baseGet'),\n    baseIteratee = require('./_baseIteratee'),\n    baseMap = require('./_baseMap'),\n    baseSortBy = require('./_baseSortBy'),\n    baseUnary = require('./_baseUnary'),\n    compareMultiple = require('./_compareMultiple'),\n    identity = require('./identity'),\n    isArray = require('./isArray');\n\n/**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\nfunction baseOrderBy(collection, iteratees, orders) {\n  if (iteratees.length) {\n    iteratees = arrayMap(iteratees, function(iteratee) {\n      if (isArray(iteratee)) {\n        return function(value) {\n          return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n        }\n      }\n      return iteratee;\n    });\n  } else {\n    iteratees = [identity];\n  }\n\n  var index = -1;\n  iteratees = arrayMap(iteratees, baseUnary(baseIteratee));\n\n  var result = baseMap(collection, function(value, key, collection) {\n    var criteria = arrayMap(iteratees, function(iteratee) {\n      return iteratee(value);\n    });\n    return { 'criteria': criteria, 'index': ++index, 'value': value };\n  });\n\n  return baseSortBy(result, function(object, other) {\n    return compareMultiple(object, other, orders);\n  });\n}\n\nmodule.exports = baseOrderBy;\n","var basePickBy = require('./_basePickBy'),\n    hasIn = require('./hasIn');\n\n/**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\nfunction basePick(object, paths) {\n  return basePickBy(object, paths, function(value, path) {\n    return hasIn(object, path);\n  });\n}\n\nmodule.exports = basePick;\n","var baseGet = require('./_baseGet'),\n    baseSet = require('./_baseSet'),\n    castPath = require('./_castPath');\n\n/**\n * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n  var index = -1,\n      length = paths.length,\n      result = {};\n\n  while (++index < length) {\n    var path = paths[index],\n        value = baseGet(object, path);\n\n    if (predicate(value, path)) {\n      baseSet(result, castPath(path, object), value);\n    }\n  }\n  return result;\n}\n\nmodule.exports = basePickBy;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\nmodule.exports = baseProperty;\n","var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n  return function(object) {\n    return baseGet(object, path);\n  };\n}\n\nmodule.exports = basePropertyDeep;\n","/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeCeil = Math.ceil,\n    nativeMax = Math.max;\n\n/**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\nfunction baseRange(start, end, step, fromRight) {\n  var index = -1,\n      length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n      result = Array(length);\n\n  while (length--) {\n    result[fromRight ? length : ++index] = start;\n    start += step;\n  }\n  return result;\n}\n\nmodule.exports = baseRange;\n","/**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n *  `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\nfunction baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n  eachFunc(collection, function(value, index, collection) {\n    accumulator = initAccum\n      ? (initAccum = false, value)\n      : iteratee(accumulator, value, index, collection);\n  });\n  return accumulator;\n}\n\nmodule.exports = baseReduce;\n","var identity = require('./identity'),\n    overRest = require('./_overRest'),\n    setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n  return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","var assignValue = require('./_assignValue'),\n    castPath = require('./_castPath'),\n    isIndex = require('./_isIndex'),\n    isObject = require('./isObject'),\n    toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n  if (!isObject(object)) {\n    return object;\n  }\n  path = castPath(path, object);\n\n  var index = -1,\n      length = path.length,\n      lastIndex = length - 1,\n      nested = object;\n\n  while (nested != null && ++index < length) {\n    var key = toKey(path[index]),\n        newValue = value;\n\n    if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n      return object;\n    }\n\n    if (index != lastIndex) {\n      var objValue = nested[key];\n      newValue = customizer ? customizer(objValue, key, nested) : undefined;\n      if (newValue === undefined) {\n        newValue = isObject(objValue)\n          ? objValue\n          : (isIndex(path[index + 1]) ? [] : {});\n      }\n    }\n    assignValue(nested, key, newValue);\n    nested = nested[key];\n  }\n  return object;\n}\n\nmodule.exports = baseSet;\n","var constant = require('./constant'),\n    defineProperty = require('./_defineProperty'),\n    identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n  return defineProperty(func, 'toString', {\n    'configurable': true,\n    'enumerable': false,\n    'value': constant(string),\n    'writable': true\n  });\n};\n\nmodule.exports = baseSetToString;\n","/**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\nfunction baseSortBy(array, comparer) {\n  var length = array.length;\n\n  array.sort(comparer);\n  while (length--) {\n    array[length] = array[length].value;\n  }\n  return array;\n}\n\nmodule.exports = baseSortBy;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\nmodule.exports = baseTimes;\n","var Symbol = require('./_Symbol'),\n    arrayMap = require('./_arrayMap'),\n    isArray = require('./isArray'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isArray(value)) {\n    // Recursively convert values (susceptible to call stack limits).\n    return arrayMap(value, baseToString) + '';\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n  return string\n    ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n    : string;\n}\n\nmodule.exports = baseTrim;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\nmodule.exports = baseUnary;\n","var SetCache = require('./_SetCache'),\n    arrayIncludes = require('./_arrayIncludes'),\n    arrayIncludesWith = require('./_arrayIncludesWith'),\n    cacheHas = require('./_cacheHas'),\n    createSet = require('./_createSet'),\n    setToArray = require('./_setToArray');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n  var index = -1,\n      includes = arrayIncludes,\n      length = array.length,\n      isCommon = true,\n      result = [],\n      seen = result;\n\n  if (comparator) {\n    isCommon = false;\n    includes = arrayIncludesWith;\n  }\n  else if (length >= LARGE_ARRAY_SIZE) {\n    var set = iteratee ? null : createSet(array);\n    if (set) {\n      return setToArray(set);\n    }\n    isCommon = false;\n    includes = cacheHas;\n    seen = new SetCache;\n  }\n  else {\n    seen = iteratee ? [] : result;\n  }\n  outer:\n  while (++index < length) {\n    var value = array[index],\n        computed = iteratee ? iteratee(value) : value;\n\n    value = (comparator || value !== 0) ? value : 0;\n    if (isCommon && computed === computed) {\n      var seenIndex = seen.length;\n      while (seenIndex--) {\n        if (seen[seenIndex] === computed) {\n          continue outer;\n        }\n      }\n      if (iteratee) {\n        seen.push(computed);\n      }\n      result.push(value);\n    }\n    else if (!includes(seen, computed, comparator)) {\n      if (seen !== result) {\n        seen.push(computed);\n      }\n      result.push(value);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseUniq;\n","var arrayMap = require('./_arrayMap');\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n  return arrayMap(props, function(key) {\n    return object[key];\n  });\n}\n\nmodule.exports = baseValues;\n","/**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\nfunction baseZipObject(props, values, assignFunc) {\n  var index = -1,\n      length = props.length,\n      valsLength = values.length,\n      result = {};\n\n  while (++index < length) {\n    var value = index < valsLength ? values[index] : undefined;\n    assignFunc(result, props[index], value);\n  }\n  return result;\n}\n\nmodule.exports = baseZipObject;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n  return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var identity = require('./identity');\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n  return typeof value == 'function' ? value : identity;\n}\n\nmodule.exports = castFunction;\n","var isArray = require('./isArray'),\n    isKey = require('./_isKey'),\n    stringToPath = require('./_stringToPath'),\n    toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n  if (isArray(value)) {\n    return value;\n  }\n  return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n","var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of  `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length,\n      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n  buffer.copy(result);\n  return result;\n}\n\nmodule.exports = cloneBuffer;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n  result.lastIndex = regexp.lastIndex;\n  return result;\n}\n\nmodule.exports = cloneRegExp;\n","var Symbol = require('./_Symbol');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n","var isSymbol = require('./isSymbol');\n\n/**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\nfunction compareAscending(value, other) {\n  if (value !== other) {\n    var valIsDefined = value !== undefined,\n        valIsNull = value === null,\n        valIsReflexive = value === value,\n        valIsSymbol = isSymbol(value);\n\n    var othIsDefined = other !== undefined,\n        othIsNull = other === null,\n        othIsReflexive = other === other,\n        othIsSymbol = isSymbol(other);\n\n    if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n        (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n        (valIsNull && othIsDefined && othIsReflexive) ||\n        (!valIsDefined && othIsReflexive) ||\n        !valIsReflexive) {\n      return 1;\n    }\n    if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n        (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n        (othIsNull && valIsDefined && valIsReflexive) ||\n        (!othIsDefined && valIsReflexive) ||\n        !othIsReflexive) {\n      return -1;\n    }\n  }\n  return 0;\n}\n\nmodule.exports = compareAscending;\n","var compareAscending = require('./_compareAscending');\n\n/**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\nfunction compareMultiple(object, other, orders) {\n  var index = -1,\n      objCriteria = object.criteria,\n      othCriteria = other.criteria,\n      length = objCriteria.length,\n      ordersLength = orders.length;\n\n  while (++index < length) {\n    var result = compareAscending(objCriteria[index], othCriteria[index]);\n    if (result) {\n      if (index >= ordersLength) {\n        return result;\n      }\n      var order = orders[index];\n      return result * (order == 'desc' ? -1 : 1);\n    }\n  }\n  // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n  // that causes it, under certain circumstances, to provide the same value for\n  // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n  // for more details.\n  //\n  // This also ensures a stable sort in V8 and other engines.\n  // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n  return object.index - other.index;\n}\n\nmodule.exports = compareMultiple;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\nmodule.exports = copyArray;\n","var assignValue = require('./_assignValue'),\n    baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    if (newValue === undefined) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue(object, key, newValue);\n    } else {\n      assignValue(object, key, newValue);\n    }\n  }\n  return object;\n}\n\nmodule.exports = copyObject;\n","var copyObject = require('./_copyObject'),\n    getSymbols = require('./_getSymbols');\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n  return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;\n","var copyObject = require('./_copyObject'),\n    getSymbolsIn = require('./_getSymbolsIn');\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n  return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","var baseRest = require('./_baseRest'),\n    isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n  return baseRest(function(object, sources) {\n    var index = -1,\n        length = sources.length,\n        customizer = length > 1 ? sources[length - 1] : undefined,\n        guard = length > 2 ? sources[2] : undefined;\n\n    customizer = (assigner.length > 3 && typeof customizer == 'function')\n      ? (length--, customizer)\n      : undefined;\n\n    if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n      customizer = length < 3 ? undefined : customizer;\n      length = 1;\n    }\n    object = Object(object);\n    while (++index < length) {\n      var source = sources[index];\n      if (source) {\n        assigner(object, source, index, customizer);\n      }\n    }\n    return object;\n  });\n}\n\nmodule.exports = createAssigner;\n","var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n  return function(collection, iteratee) {\n    if (collection == null) {\n      return collection;\n    }\n    if (!isArrayLike(collection)) {\n      return eachFunc(collection, iteratee);\n    }\n    var length = collection.length,\n        index = fromRight ? length : -1,\n        iterable = Object(collection);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (iteratee(iterable[index], index, iterable) === false) {\n        break;\n      }\n    }\n    return collection;\n  };\n}\n\nmodule.exports = createBaseEach;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var index = -1,\n        iterable = Object(object),\n        props = keysFunc(object),\n        length = props.length;\n\n    while (length--) {\n      var key = props[fromRight ? length : ++index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\nmodule.exports = createBaseFor;\n","var baseIteratee = require('./_baseIteratee'),\n    isArrayLike = require('./isArrayLike'),\n    keys = require('./keys');\n\n/**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\nfunction createFind(findIndexFunc) {\n  return function(collection, predicate, fromIndex) {\n    var iterable = Object(collection);\n    if (!isArrayLike(collection)) {\n      var iteratee = baseIteratee(predicate, 3);\n      collection = keys(collection);\n      predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n    }\n    var index = findIndexFunc(collection, predicate, fromIndex);\n    return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n  };\n}\n\nmodule.exports = createFind;\n","var baseRange = require('./_baseRange'),\n    isIterateeCall = require('./_isIterateeCall'),\n    toFinite = require('./toFinite');\n\n/**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\nfunction createRange(fromRight) {\n  return function(start, end, step) {\n    if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n      end = step = undefined;\n    }\n    // Ensure the sign of `-0` is preserved.\n    start = toFinite(start);\n    if (end === undefined) {\n      end = start;\n      start = 0;\n    } else {\n      end = toFinite(end);\n    }\n    step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n    return baseRange(start, end, step, fromRight);\n  };\n}\n\nmodule.exports = createRange;\n","var Set = require('./_Set'),\n    noop = require('./noop'),\n    setToArray = require('./_setToArray');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n  return new Set(values);\n};\n\nmodule.exports = createSet;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var SetCache = require('./_SetCache'),\n    arraySome = require('./_arraySome'),\n    cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      arrLength = array.length,\n      othLength = other.length;\n\n  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n    return false;\n  }\n  // Check that cyclic values are equal.\n  var arrStacked = stack.get(array);\n  var othStacked = stack.get(other);\n  if (arrStacked && othStacked) {\n    return arrStacked == other && othStacked == array;\n  }\n  var index = -1,\n      result = true,\n      seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n  stack.set(array, other);\n  stack.set(other, array);\n\n  // Ignore non-index properties.\n  while (++index < arrLength) {\n    var arrValue = array[index],\n        othValue = other[index];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, arrValue, index, other, array, stack)\n        : customizer(arrValue, othValue, index, array, other, stack);\n    }\n    if (compared !== undefined) {\n      if (compared) {\n        continue;\n      }\n      result = false;\n      break;\n    }\n    // Recursively compare arrays (susceptible to call stack limits).\n    if (seen) {\n      if (!arraySome(other, function(othValue, othIndex) {\n            if (!cacheHas(seen, othIndex) &&\n                (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n              return seen.push(othIndex);\n            }\n          })) {\n        result = false;\n        break;\n      }\n    } else if (!(\n          arrValue === othValue ||\n            equalFunc(arrValue, othValue, bitmask, customizer, stack)\n        )) {\n      result = false;\n      break;\n    }\n  }\n  stack['delete'](array);\n  stack['delete'](other);\n  return result;\n}\n\nmodule.exports = equalArrays;\n","var Symbol = require('./_Symbol'),\n    Uint8Array = require('./_Uint8Array'),\n    eq = require('./eq'),\n    equalArrays = require('./_equalArrays'),\n    mapToArray = require('./_mapToArray'),\n    setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n  switch (tag) {\n    case dataViewTag:\n      if ((object.byteLength != other.byteLength) ||\n          (object.byteOffset != other.byteOffset)) {\n        return false;\n      }\n      object = object.buffer;\n      other = other.buffer;\n\n    case arrayBufferTag:\n      if ((object.byteLength != other.byteLength) ||\n          !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n        return false;\n      }\n      return true;\n\n    case boolTag:\n    case dateTag:\n    case numberTag:\n      // Coerce booleans to `1` or `0` and dates to milliseconds.\n      // Invalid dates are coerced to `NaN`.\n      return eq(+object, +other);\n\n    case errorTag:\n      return object.name == other.name && object.message == other.message;\n\n    case regexpTag:\n    case stringTag:\n      // Coerce regexes to strings and treat strings, primitives and objects,\n      // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n      // for more details.\n      return object == (other + '');\n\n    case mapTag:\n      var convert = mapToArray;\n\n    case setTag:\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n      convert || (convert = setToArray);\n\n      if (object.size != other.size && !isPartial) {\n        return false;\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(object);\n      if (stacked) {\n        return stacked == other;\n      }\n      bitmask |= COMPARE_UNORDERED_FLAG;\n\n      // Recursively compare objects (susceptible to call stack limits).\n      stack.set(object, other);\n      var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n      stack['delete'](object);\n      return result;\n\n    case symbolTag:\n      if (symbolValueOf) {\n        return symbolValueOf.call(object) == symbolValueOf.call(other);\n      }\n  }\n  return false;\n}\n\nmodule.exports = equalByTag;\n","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      objProps = getAllKeys(object),\n      objLength = objProps.length,\n      othProps = getAllKeys(other),\n      othLength = othProps.length;\n\n  if (objLength != othLength && !isPartial) {\n    return false;\n  }\n  var index = objLength;\n  while (index--) {\n    var key = objProps[index];\n    if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n      return false;\n    }\n  }\n  // Check that cyclic values are equal.\n  var objStacked = stack.get(object);\n  var othStacked = stack.get(other);\n  if (objStacked && othStacked) {\n    return objStacked == other && othStacked == object;\n  }\n  var result = true;\n  stack.set(object, other);\n  stack.set(other, object);\n\n  var skipCtor = isPartial;\n  while (++index < objLength) {\n    key = objProps[index];\n    var objValue = object[key],\n        othValue = other[key];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, objValue, key, other, object, stack)\n        : customizer(objValue, othValue, key, object, other, stack);\n    }\n    // Recursively compare objects (susceptible to call stack limits).\n    if (!(compared === undefined\n          ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n          : compared\n        )) {\n      result = false;\n      break;\n    }\n    skipCtor || (skipCtor = key == 'constructor');\n  }\n  if (result && !skipCtor) {\n    var objCtor = object.constructor,\n        othCtor = other.constructor;\n\n    // Non `Object` object instances with different constructors are not equal.\n    if (objCtor != othCtor &&\n        ('constructor' in object && 'constructor' in other) &&\n        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n          typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n      result = false;\n    }\n  }\n  stack['delete'](object);\n  stack['delete'](other);\n  return result;\n}\n\nmodule.exports = equalObjects;\n","var flatten = require('./flatten'),\n    overRest = require('./_overRest'),\n    setToString = require('./_setToString');\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n  return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nmodule.exports = flatRest;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n    getSymbols = require('./_getSymbols'),\n    keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n  return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n    getSymbolsIn = require('./_getSymbolsIn'),\n    keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n  return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\nmodule.exports = getMapData;\n","var isStrictComparable = require('./_isStrictComparable'),\n    keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n  var result = keys(object),\n      length = result.length;\n\n  while (length--) {\n    var key = result[length],\n        value = object[key];\n\n    result[length] = [key, value, isStrictComparable(value)];\n  }\n  return result;\n}\n\nmodule.exports = getMatchData;\n","var baseIsNative = require('./_baseIsNative'),\n    getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nmodule.exports = getRawTag;\n","var arrayFilter = require('./_arrayFilter'),\n    stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n  if (object == null) {\n    return [];\n  }\n  object = Object(object);\n  return arrayFilter(nativeGetSymbols(object), function(symbol) {\n    return propertyIsEnumerable.call(object, symbol);\n  });\n};\n\nmodule.exports = getSymbols;\n","var arrayPush = require('./_arrayPush'),\n    getPrototype = require('./_getPrototype'),\n    getSymbols = require('./_getSymbols'),\n    stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n  var result = [];\n  while (object) {\n    arrayPush(result, getSymbols(object));\n    object = getPrototype(object);\n  }\n  return result;\n};\n\nmodule.exports = getSymbolsIn;\n","var DataView = require('./_DataView'),\n    Map = require('./_Map'),\n    Promise = require('./_Promise'),\n    Set = require('./_Set'),\n    WeakMap = require('./_WeakMap'),\n    baseGetTag = require('./_baseGetTag'),\n    toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    setTag = '[object Set]',\n    weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = baseGetTag(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : '';\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\nmodule.exports = getTag;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var castPath = require('./_castPath'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isIndex = require('./_isIndex'),\n    isLength = require('./isLength'),\n    toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n  path = castPath(path, object);\n\n  var index = -1,\n      length = path.length,\n      result = false;\n\n  while (++index < length) {\n    var key = toKey(path[index]);\n    if (!(result = object != null && hasFunc(object, key))) {\n      break;\n    }\n    object = object[key];\n  }\n  if (result || ++index != length) {\n    return result;\n  }\n  length = object == null ? 0 : object.length;\n  return !!length && isLength(length) && isIndex(key, length) &&\n    (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n  return reHasUnicode.test(string);\n}\n\nmodule.exports = hasUnicode;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\nmodule.exports = hashSet;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n  var length = array.length,\n      result = new array.constructor(length);\n\n  // Add properties assigned by `RegExp#exec`.\n  if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n    result.index = array.index;\n    result.input = array.input;\n  }\n  return result;\n}\n\nmodule.exports = initCloneArray;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n    cloneDataView = require('./_cloneDataView'),\n    cloneRegExp = require('./_cloneRegExp'),\n    cloneSymbol = require('./_cloneSymbol'),\n    cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n  var Ctor = object.constructor;\n  switch (tag) {\n    case arrayBufferTag:\n      return cloneArrayBuffer(object);\n\n    case boolTag:\n    case dateTag:\n      return new Ctor(+object);\n\n    case dataViewTag:\n      return cloneDataView(object, isDeep);\n\n    case float32Tag: case float64Tag:\n    case int8Tag: case int16Tag: case int32Tag:\n    case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n      return cloneTypedArray(object, isDeep);\n\n    case mapTag:\n      return new Ctor;\n\n    case numberTag:\n    case stringTag:\n      return new Ctor(object);\n\n    case regexpTag:\n      return cloneRegExp(object);\n\n    case setTag:\n      return new Ctor;\n\n    case symbolTag:\n      return cloneSymbol(object);\n  }\n}\n\nmodule.exports = initCloneByTag;\n","var baseCreate = require('./_baseCreate'),\n    getPrototype = require('./_getPrototype'),\n    isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !isPrototype(object))\n    ? baseCreate(getPrototype(object))\n    : {};\n}\n\nmodule.exports = initCloneObject;\n","var Symbol = require('./_Symbol'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray');\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n  return isArray(value) || isArguments(value) ||\n    !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var eq = require('./eq'),\n    isArrayLike = require('./isArrayLike'),\n    isIndex = require('./_isIndex'),\n    isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n *  else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n        ? (isArrayLike(object) && isIndex(index, object.length))\n        : (type == 'string' && index in object)\n      ) {\n    return eq(object[index], value);\n  }\n  return false;\n}\n\nmodule.exports = isIterateeCall;\n","var isArray = require('./isArray'),\n    isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n    reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n  if (isArray(value)) {\n    return false;\n  }\n  var type = typeof value;\n  if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n      value == null || isSymbol(value)) {\n    return true;\n  }\n  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n    (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\nmodule.exports = isPrototype;\n","var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n *  equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n  return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\nmodule.exports = listCacheSet;\n","var Hash = require('./_Hash'),\n    ListCache = require('./_ListCache'),\n    Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\nmodule.exports = mapCacheClear;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\nmodule.exports = mapCacheSet;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n  var index = -1,\n      result = Array(map.size);\n\n  map.forEach(function(value, key) {\n    result[++index] = [key, value];\n  });\n  return result;\n}\n\nmodule.exports = mapToArray;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n  return function(object) {\n    if (object == null) {\n      return false;\n    }\n    return object[key] === srcValue &&\n      (srcValue !== undefined || (key in Object(object)));\n  };\n}\n\nmodule.exports = matchesStrictComparable;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n  var result = memoize(func, function(key) {\n    if (cache.size === MAX_MEMOIZE_SIZE) {\n      cache.clear();\n    }\n    return key;\n  });\n\n  var cache = result.cache;\n  return result;\n}\n\nmodule.exports = memoizeCapped;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = nativeKeysIn;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\nmodule.exports = overArg;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        array = Array(length);\n\n    while (++index < length) {\n      array[index] = args[start + index];\n    }\n    index = -1;\n    var otherArgs = Array(start + 1);\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = transform(array);\n    return apply(func, this, otherArgs);\n  };\n}\n\nmodule.exports = overRest;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n  if (key === 'constructor' && typeof object[key] === 'function') {\n    return;\n  }\n\n  if (key == '__proto__') {\n    return;\n  }\n\n  return object[key];\n}\n\nmodule.exports = safeGet;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n  this.__data__.set(value, HASH_UNDEFINED);\n  return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n  return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n  var index = -1,\n      result = Array(set.size);\n\n  set.forEach(function(value) {\n    result[++index] = value;\n  });\n  return result;\n}\n\nmodule.exports = setToArray;\n","var baseSetToString = require('./_baseSetToString'),\n    shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n    HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n  var count = 0,\n      lastCalled = 0;\n\n  return function() {\n    var stamp = nativeNow(),\n        remaining = HOT_SPAN - (stamp - lastCalled);\n\n    lastCalled = stamp;\n    if (remaining > 0) {\n      if (++count >= HOT_COUNT) {\n        return arguments[0];\n      }\n    } else {\n      count = 0;\n    }\n    return func.apply(undefined, arguments);\n  };\n}\n\nmodule.exports = shortOut;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","var ListCache = require('./_ListCache'),\n    Map = require('./_Map'),\n    MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\nmodule.exports = stackSet;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n  var index = fromIndex - 1,\n      length = array.length;\n\n  while (++index < length) {\n    if (array[index] === value) {\n      return index;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = strictIndexOf;\n","var asciiSize = require('./_asciiSize'),\n    hasUnicode = require('./_hasUnicode'),\n    unicodeSize = require('./_unicodeSize');\n\n/**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\nfunction stringSize(string) {\n  return hasUnicode(string)\n    ? unicodeSize(string)\n    : asciiSize(string);\n}\n\nmodule.exports = stringSize;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n  var result = [];\n  if (string.charCodeAt(0) === 46 /* . */) {\n    result.push('');\n  }\n  string.replace(rePropName, function(match, number, quote, subString) {\n    result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n  });\n  return result;\n});\n\nmodule.exports = stringToPath;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n  if (typeof value == 'string' || isSymbol(value)) {\n    return value;\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\nmodule.exports = toSource;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n  var index = string.length;\n\n  while (index-- && reWhitespace.test(string.charAt(index))) {}\n  return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n    rsCombo = '[' + rsComboRange + ']',\n    rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n    rsNonAstral = '[^' + rsAstralRange + ']',\n    rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n    rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n    rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n    rsOptVar = '[' + rsVarRange + ']?',\n    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n    rsSeq = rsOptVar + reOptMod + rsOptJoin,\n    rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\nfunction unicodeSize(string) {\n  var result = reUnicode.lastIndex = 0;\n  while (reUnicode.test(string)) {\n    ++result;\n  }\n  return result;\n}\n\nmodule.exports = unicodeSize;\n","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\nfunction clone(value) {\n  return baseClone(value, CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = clone;\n","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n  return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = cloneDeep;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n  return function() {\n    return value;\n  };\n}\n\nmodule.exports = constant;\n","var baseRest = require('./_baseRest'),\n    eq = require('./eq'),\n    isIterateeCall = require('./_isIterateeCall'),\n    keysIn = require('./keysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar defaults = baseRest(function(object, sources) {\n  object = Object(object);\n\n  var index = -1;\n  var length = sources.length;\n  var guard = length > 2 ? sources[2] : undefined;\n\n  if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n    length = 1;\n  }\n\n  while (++index < length) {\n    var source = sources[index];\n    var props = keysIn(source);\n    var propsIndex = -1;\n    var propsLength = props.length;\n\n    while (++propsIndex < propsLength) {\n      var key = props[propsIndex];\n      var value = object[key];\n\n      if (value === undefined ||\n          (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n        object[key] = source[key];\n      }\n    }\n  }\n\n  return object;\n});\n\nmodule.exports = defaults;\n","module.exports = require('./forEach');\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var arrayFilter = require('./_arrayFilter'),\n    baseFilter = require('./_baseFilter'),\n    baseIteratee = require('./_baseIteratee'),\n    isArray = require('./isArray');\n\n/**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n *   { 'user': 'barney', 'age': 36, 'active': true },\n *   { 'user': 'fred',   'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\nfunction filter(collection, predicate) {\n  var func = isArray(collection) ? arrayFilter : baseFilter;\n  return func(collection, baseIteratee(predicate, 3));\n}\n\nmodule.exports = filter;\n","var createFind = require('./_createFind'),\n    findIndex = require('./findIndex');\n\n/**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n *   { 'user': 'barney',  'age': 36, 'active': true },\n *   { 'user': 'fred',    'age': 40, 'active': false },\n *   { 'user': 'pebbles', 'age': 1,  'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\nvar find = createFind(findIndex);\n\nmodule.exports = find;\n","var baseFindIndex = require('./_baseFindIndex'),\n    baseIteratee = require('./_baseIteratee'),\n    toInteger = require('./toInteger');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n *   { 'user': 'barney',  'active': false },\n *   { 'user': 'fred',    'active': false },\n *   { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\nfunction findIndex(array, predicate, fromIndex) {\n  var length = array == null ? 0 : array.length;\n  if (!length) {\n    return -1;\n  }\n  var index = fromIndex == null ? 0 : toInteger(fromIndex);\n  if (index < 0) {\n    index = nativeMax(length + index, 0);\n  }\n  return baseFindIndex(array, baseIteratee(predicate, 3), index);\n}\n\nmodule.exports = findIndex;\n","var baseFlatten = require('./_baseFlatten');\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? baseFlatten(array, 1) : [];\n}\n\nmodule.exports = flatten;\n","var arrayEach = require('./_arrayEach'),\n    baseEach = require('./_baseEach'),\n    castFunction = require('./_castFunction'),\n    isArray = require('./isArray');\n\n/**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n *   console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n *   console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forEach(collection, iteratee) {\n  var func = isArray(collection) ? arrayEach : baseEach;\n  return func(collection, castFunction(iteratee));\n}\n\nmodule.exports = forEach;\n","var baseFor = require('./_baseFor'),\n    castFunction = require('./_castFunction'),\n    keysIn = require('./keysIn');\n\n/**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n *   console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\nfunction forIn(object, iteratee) {\n  return object == null\n    ? object\n    : baseFor(object, castFunction(iteratee), keysIn);\n}\n\nmodule.exports = forIn;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n  var result = object == null ? undefined : baseGet(object, path);\n  return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","var baseHas = require('./_baseHas'),\n    hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\nfunction has(object, path) {\n  return object != null && hasPath(object, path, baseHas);\n}\n\nmodule.exports = has;\n","var baseHasIn = require('./_baseHasIn'),\n    hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n  return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nmodule.exports = identity;\n","var baseIsArguments = require('./_baseIsArguments'),\n    isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","var isFunction = require('./isFunction'),\n    isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var isArrayLike = require('./isArrayLike'),\n    isObjectLike = require('./isObjectLike');\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n *  else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\n\nmodule.exports = isArrayLikeObject;\n","var root = require('./_root'),\n    stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","var baseKeys = require('./_baseKeys'),\n    getTag = require('./_getTag'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isArrayLike = require('./isArrayLike'),\n    isBuffer = require('./isBuffer'),\n    isPrototype = require('./_isPrototype'),\n    isTypedArray = require('./isTypedArray');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n  if (value == null) {\n    return true;\n  }\n  if (isArrayLike(value) &&\n      (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n        isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n    return !value.length;\n  }\n  var tag = getTag(value);\n  if (tag == mapTag || tag == setTag) {\n    return !value.size;\n  }\n  if (isPrototype(value)) {\n    return !baseKeys(value).length;\n  }\n  for (var key in value) {\n    if (hasOwnProperty.call(value, key)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nmodule.exports = isEmpty;\n","var baseGetTag = require('./_baseGetTag'),\n    isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var baseIsMap = require('./_baseIsMap'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n    getPrototype = require('./_getPrototype'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n    funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n","var baseIsSet = require('./_baseIsSet'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nmodule.exports = isSet;\n","var baseGetTag = require('./_baseGetTag'),\n    isArray = require('./isArray'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n  return typeof value == 'string' ||\n    (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nmodule.exports = isString;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","/**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\nfunction isUndefined(value) {\n  return value === undefined;\n}\n\nmodule.exports = isUndefined;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeys = require('./_baseKeys'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeysIn = require('./_baseKeysIn'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? array[length - 1] : undefined;\n}\n\nmodule.exports = last;\n","var arrayMap = require('./_arrayMap'),\n    baseIteratee = require('./_baseIteratee'),\n    baseMap = require('./_baseMap'),\n    isArray = require('./isArray');\n\n/**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n *   return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n *   { 'user': 'barney' },\n *   { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n  var func = isArray(collection) ? arrayMap : baseMap;\n  return func(collection, baseIteratee(iteratee, 3));\n}\n\nmodule.exports = map;\n","var baseAssignValue = require('./_baseAssignValue'),\n    baseForOwn = require('./_baseForOwn'),\n    baseIteratee = require('./_baseIteratee');\n\n/**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n *   'fred':    { 'user': 'fred',    'age': 40 },\n *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nfunction mapValues(object, iteratee) {\n  var result = {};\n  iteratee = baseIteratee(iteratee, 3);\n\n  baseForOwn(object, function(value, key, object) {\n    baseAssignValue(result, key, iteratee(value, key, object));\n  });\n  return result;\n}\n\nmodule.exports = mapValues;\n","var baseExtremum = require('./_baseExtremum'),\n    baseGt = require('./_baseGt'),\n    identity = require('./identity');\n\n/**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\nfunction max(array) {\n  return (array && array.length)\n    ? baseExtremum(array, identity, baseGt)\n    : undefined;\n}\n\nmodule.exports = max;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n  if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  var memoized = function() {\n    var args = arguments,\n        key = resolver ? resolver.apply(this, args) : args[0],\n        cache = memoized.cache;\n\n    if (cache.has(key)) {\n      return cache.get(key);\n    }\n    var result = func.apply(this, args);\n    memoized.cache = cache.set(key, result) || cache;\n    return result;\n  };\n  memoized.cache = new (memoize.Cache || MapCache);\n  return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var baseMerge = require('./_baseMerge'),\n    createAssigner = require('./_createAssigner');\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n *   'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n *   'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n  baseMerge(object, source, srcIndex);\n});\n\nmodule.exports = merge;\n","var baseExtremum = require('./_baseExtremum'),\n    baseLt = require('./_baseLt'),\n    identity = require('./identity');\n\n/**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\nfunction min(array) {\n  return (array && array.length)\n    ? baseExtremum(array, identity, baseLt)\n    : undefined;\n}\n\nmodule.exports = min;\n","var baseExtremum = require('./_baseExtremum'),\n    baseIteratee = require('./_baseIteratee'),\n    baseLt = require('./_baseLt');\n\n/**\n * This method is like `_.min` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * // The `_.property` iteratee shorthand.\n * _.minBy(objects, 'n');\n * // => { 'n': 1 }\n */\nfunction minBy(array, iteratee) {\n  return (array && array.length)\n    ? baseExtremum(array, baseIteratee(iteratee, 2), baseLt)\n    : undefined;\n}\n\nmodule.exports = minBy;\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n  // No operation performed.\n}\n\nmodule.exports = noop;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\nmodule.exports = now;\n","var basePick = require('./_basePick'),\n    flatRest = require('./_flatRest');\n\n/**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\nvar pick = flatRest(function(object, paths) {\n  return object == null ? {} : basePick(object, paths);\n});\n\nmodule.exports = pick;\n","var baseProperty = require('./_baseProperty'),\n    basePropertyDeep = require('./_basePropertyDeep'),\n    isKey = require('./_isKey'),\n    toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n *   { 'a': { 'b': 2 } },\n *   { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n  return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n","var createRange = require('./_createRange');\n\n/**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\nvar range = createRange();\n\nmodule.exports = range;\n","var arrayReduce = require('./_arrayReduce'),\n    baseEach = require('./_baseEach'),\n    baseIteratee = require('./_baseIteratee'),\n    baseReduce = require('./_baseReduce'),\n    isArray = require('./isArray');\n\n/**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n *   return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n *   (result[value] || (result[value] = [])).push(key);\n *   return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\nfunction reduce(collection, iteratee, accumulator) {\n  var func = isArray(collection) ? arrayReduce : baseReduce,\n      initAccum = arguments.length < 3;\n\n  return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n}\n\nmodule.exports = reduce;\n","var baseKeys = require('./_baseKeys'),\n    getTag = require('./_getTag'),\n    isArrayLike = require('./isArrayLike'),\n    isString = require('./isString'),\n    stringSize = require('./_stringSize');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    setTag = '[object Set]';\n\n/**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\nfunction size(collection) {\n  if (collection == null) {\n    return 0;\n  }\n  if (isArrayLike(collection)) {\n    return isString(collection) ? stringSize(collection) : collection.length;\n  }\n  var tag = getTag(collection);\n  if (tag == mapTag || tag == setTag) {\n    return collection.size;\n  }\n  return baseKeys(collection).length;\n}\n\nmodule.exports = size;\n","var baseFlatten = require('./_baseFlatten'),\n    baseOrderBy = require('./_baseOrderBy'),\n    baseRest = require('./_baseRest'),\n    isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n *  The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n *   { 'user': 'fred',   'age': 48 },\n *   { 'user': 'barney', 'age': 36 },\n *   { 'user': 'fred',   'age': 30 },\n *   { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\nvar sortBy = baseRest(function(collection, iteratees) {\n  if (collection == null) {\n    return [];\n  }\n  var length = iteratees.length;\n  if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n    iteratees = [];\n  } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n    iteratees = [iteratees[0]];\n  }\n  return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n});\n\nmodule.exports = sortBy;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n  return [];\n}\n\nmodule.exports = stubArray;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nmodule.exports = stubFalse;\n","var toNumber = require('./toNumber');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n    MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n  if (!value) {\n    return value === 0 ? value : 0;\n  }\n  value = toNumber(value);\n  if (value === INFINITY || value === -INFINITY) {\n    var sign = (value < 0 ? -1 : 1);\n    return sign * MAX_INTEGER;\n  }\n  return value === value ? value : 0;\n}\n\nmodule.exports = toFinite;\n","var toFinite = require('./toFinite');\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n  var result = toFinite(value),\n      remainder = result % 1;\n\n  return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nmodule.exports = toInteger;\n","var baseTrim = require('./_baseTrim'),\n    isObject = require('./isObject'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = baseTrim(value);\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var copyObject = require('./_copyObject'),\n    keysIn = require('./keysIn');\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n  return copyObject(value, keysIn(value));\n}\n\nmodule.exports = toPlainObject;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var arrayEach = require('./_arrayEach'),\n    baseCreate = require('./_baseCreate'),\n    baseForOwn = require('./_baseForOwn'),\n    baseIteratee = require('./_baseIteratee'),\n    getPrototype = require('./_getPrototype'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isFunction = require('./isFunction'),\n    isObject = require('./isObject'),\n    isTypedArray = require('./isTypedArray');\n\n/**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n *   result.push(n *= n);\n *   return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n *   (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\nfunction transform(object, iteratee, accumulator) {\n  var isArr = isArray(object),\n      isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n  iteratee = baseIteratee(iteratee, 4);\n  if (accumulator == null) {\n    var Ctor = object && object.constructor;\n    if (isArrLike) {\n      accumulator = isArr ? new Ctor : [];\n    }\n    else if (isObject(object)) {\n      accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n    }\n    else {\n      accumulator = {};\n    }\n  }\n  (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n    return iteratee(accumulator, value, index, object);\n  });\n  return accumulator;\n}\n\nmodule.exports = transform;\n","var baseFlatten = require('./_baseFlatten'),\n    baseRest = require('./_baseRest'),\n    baseUniq = require('./_baseUniq'),\n    isArrayLikeObject = require('./isArrayLikeObject');\n\n/**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\nvar union = baseRest(function(arrays) {\n  return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n});\n\nmodule.exports = union;\n","var toString = require('./toString');\n\n/** Used to generate unique IDs. */\nvar idCounter = 0;\n\n/**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\nfunction uniqueId(prefix) {\n  var id = ++idCounter;\n  return toString(prefix) + id;\n}\n\nmodule.exports = uniqueId;\n","var baseValues = require('./_baseValues'),\n    keys = require('./keys');\n\n/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\nfunction values(object) {\n  return object == null ? [] : baseValues(object, keys(object));\n}\n\nmodule.exports = values;\n","var assignValue = require('./_assignValue'),\n    baseZipObject = require('./_baseZipObject');\n\n/**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\nfunction zipObject(props, values) {\n  return baseZipObject(props || [], values || [], assignValue);\n}\n\nmodule.exports = zipObject;\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn ","// The following break classes are handled by the pair table\r\nexports.OP = 0;   // Opening punctuation\r\nexports.CL = 1;   // Closing punctuation\r\nexports.CP = 2;   // Closing parenthesis\r\nexports.QU = 3;   // Ambiguous quotation\r\nexports.GL = 4;   // Glue\r\nexports.NS = 5;   // Non-starters\r\nexports.EX = 6;   // Exclamation/Interrogation\r\nexports.SY = 7;   // Symbols allowing break after\r\nexports.IS = 8;   // Infix separator\r\nexports.PR = 9;   // Prefix\r\nexports.PO = 10;  // Postfix\r\nexports.NU = 11;  // Numeric\r\nexports.AL = 12;  // Alphabetic\r\nexports.HL = 13;  // Hebrew Letter\r\nexports.ID = 14;  // Ideographic\r\nexports.IN = 15;  // Inseparable characters\r\nexports.HY = 16;  // Hyphen\r\nexports.BA = 17;  // Break after\r\nexports.BB = 18;  // Break before\r\nexports.B2 = 19;  // Break on either side (but not pair)\r\nexports.ZW = 20;  // Zero-width space\r\nexports.CM = 21;  // Combining marks\r\nexports.WJ = 22;  // Word joiner\r\nexports.H2 = 23;  // Hangul LV\r\nexports.H3 = 24;  // Hangul LVT\r\nexports.JL = 25;  // Hangul L Jamo\r\nexports.JV = 26;  // Hangul V Jamo\r\nexports.JT = 27;  // Hangul T Jamo\r\nexports.RI = 28;  // Regional Indicator\r\nexports.EB = 29;  // Emoji Base\r\nexports.EM = 30;  // Emoji Modifier\r\nexports.ZWJ = 31; // Zero Width Joiner\r\nexports.CB = 32;  // Contingent break\r\n\r\n// The following break classes are not handled by the pair table\r\nexports.AI = 33;  // Ambiguous (Alphabetic or Ideograph)\r\nexports.BK = 34;  // Break (mandatory)\r\nexports.CJ = 35;  // Conditional Japanese Starter\r\nexports.CR = 36;  // Carriage return\r\nexports.LF = 37;  // Line feed\r\nexports.NL = 38;  // Next line\r\nexports.SA = 39;  // South-East Asian\r\nexports.SG = 40;  // Surrogates\r\nexports.SP = 41;  // Space\r\nexports.XX = 42;  // Unknown\r\n","let CI_BRK, CP_BRK, DI_BRK, IN_BRK, PR_BRK;\r\nexports.DI_BRK = (DI_BRK = 0); // Direct break opportunity\r\nexports.IN_BRK = (IN_BRK = 1); // Indirect break opportunity\r\nexports.CI_BRK = (CI_BRK = 2); // Indirect break opportunity for combining marks\r\nexports.CP_BRK = (CP_BRK = 3); // Prohibited break for combining marks\r\nexports.PR_BRK = (PR_BRK = 4); // Prohibited break\r\n\r\n// Based on example pair table from https://www.unicode.org/reports/tr14/tr14-37.html#Table2\r\n// - ZWJ special processing for LB8a of Revision 41\r\n// - CB manually added as per Rule LB20\r\n// - CL, CP, NS, SY, IS, PR, PO, HY, BA, B2 and RI manually adjusted as per LB22 of Revision 45\r\nexports.pairTable = [\r\n  //OP   , CL    , CP    , QU    , GL    , NS    , EX    , SY    , IS    , PR    , PO    , NU    , AL    , HL    , ID    , IN    , HY    , BA    , BB    , B2    , ZW    , CM    , WJ    , H2    , H3    , JL    , JV    , JT    , RI    , EB    , EM    , ZWJ   , CB\r\n  [PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, CP_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK], // OP\r\n  [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // CL\r\n  [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // CP\r\n  [PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], // QU\r\n  [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], // GL\r\n  [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // NS\r\n  [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // EX\r\n  [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // SY\r\n  [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // IS\r\n  [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK], // PR\r\n  [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // PO\r\n  [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // NU\r\n  [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // AL\r\n  [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // HL\r\n  [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // ID\r\n  [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // IN\r\n  [DI_BRK, PR_BRK, PR_BRK, IN_BRK, DI_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // HY\r\n  [DI_BRK, PR_BRK, PR_BRK, IN_BRK, DI_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // BA\r\n  [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK], // BB\r\n  [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, PR_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // B2\r\n  [DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], // ZW\r\n  [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // CM\r\n  [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], // WJ\r\n  [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // H2\r\n  [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // H3\r\n  [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // JL\r\n  [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // JV\r\n  [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // JT\r\n  [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // RI\r\n  [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK], // EB\r\n  [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // EM\r\n  [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // ZWJ\r\n  [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, DI_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK]  // CB\r\n];","exports.EncodeStream    = require('./src/EncodeStream');\r\nexports.DecodeStream    = require('./src/DecodeStream');\r\nexports.Array           = require('./src/Array');\r\nexports.LazyArray       = require('./src/LazyArray');\r\nexports.Bitfield        = require('./src/Bitfield');\r\nexports.Boolean         = require('./src/Boolean');\r\nexports.Buffer          = require('./src/Buffer');\r\nexports.Enum            = require('./src/Enum');\r\nexports.Optional        = require('./src/Optional');\r\nexports.Reserved        = require('./src/Reserved');\r\nexports.String          = require('./src/String');\r\nexports.Struct          = require('./src/Struct');\r\nexports.VersionedStruct = require('./src/VersionedStruct');\r\n\r\nconst utils             = require('./src/utils');\r\nconst NumberT           = require('./src/Number');\r\nconst Pointer           = require('./src/Pointer');\r\n\r\nObject.assign(exports, utils, NumberT, Pointer);\r\n","const {Number:NumberT} = require('./Number');\r\nconst utils = require('./utils');\r\n\r\nclass ArrayT {\r\n  constructor(type, length, lengthType = 'count') {\r\n    this.type = type;\r\n    this.length = length;\r\n    this.lengthType = lengthType;\r\n  }\r\n\r\n  decode(stream, parent) {\r\n    let length;\r\n    const { pos } = stream;\r\n\r\n    const res = [];\r\n    let ctx = parent;\r\n\r\n    if (this.length != null) {\r\n      length = utils.resolveLength(this.length, stream, parent);\r\n    }\r\n\r\n    if (this.length instanceof NumberT) {\r\n      // define hidden properties\r\n      Object.defineProperties(res, {\r\n        parent:         { value: parent },\r\n        _startOffset:   { value: pos },\r\n        _currentOffset: { value: 0, writable: true },\r\n        _length:        { value: length }\r\n      });\r\n\r\n      ctx = res;\r\n    }\r\n\r\n    if ((length == null) || (this.lengthType === 'bytes')) {\r\n      const target = (length != null) ?\r\n        stream.pos + length\r\n      : (parent != null ? parent._length : undefined) ?\r\n        parent._startOffset + parent._length\r\n      :\r\n        stream.length;\r\n\r\n      while (stream.pos < target) {\r\n        res.push(this.type.decode(stream, ctx));\r\n      }\r\n\r\n    } else {\r\n      for (let i = 0, end = length; i < end; i++) {\r\n        res.push(this.type.decode(stream, ctx));\r\n      }\r\n    }\r\n\r\n    return res;\r\n  }\r\n\r\n  size(array, ctx) {\r\n    if (!array) {\r\n      return this.type.size(null, ctx) * utils.resolveLength(this.length, null, ctx);\r\n    }\r\n\r\n    let size = 0;\r\n    if (this.length instanceof NumberT) {\r\n      size += this.length.size();\r\n      ctx = {parent: ctx};\r\n    }\r\n\r\n    for (let item of array) {\r\n      size += this.type.size(item, ctx);\r\n    }\r\n\r\n    return size;\r\n  }\r\n\r\n  encode(stream, array, parent) {\r\n    let ctx = parent;\r\n    if (this.length instanceof NumberT) {\r\n      ctx = {\r\n        pointers: [],\r\n        startOffset: stream.pos,\r\n        parent\r\n      };\r\n\r\n      ctx.pointerOffset = stream.pos + this.size(array, ctx);\r\n      this.length.encode(stream, array.length);\r\n    }\r\n\r\n    for (let item of array) {\r\n      this.type.encode(stream, item, ctx);\r\n    }\r\n\r\n    if (this.length instanceof NumberT) {\r\n      let i = 0;\r\n      while (i < ctx.pointers.length) {\r\n        const ptr = ctx.pointers[i++];\r\n        ptr.type.encode(stream, ptr.val);\r\n      }\r\n    }\r\n\r\n  }\r\n}\r\n\r\nmodule.exports = ArrayT;\r\n","class Bitfield {\r\n  constructor(type, flags = []) {\r\n    this.type = type;\r\n    this.flags = flags;\r\n  }\r\n  decode(stream) {\r\n    const val = this.type.decode(stream);\r\n\r\n    const res = {};\r\n    for (let i = 0; i < this.flags.length; i++) {\r\n      const flag = this.flags[i];\r\n      if (flag != null) {\r\n        res[flag] = !!(val & (1 << i));\r\n      }\r\n    }\r\n\r\n    return res;\r\n  }\r\n\r\n  size() {\r\n    return this.type.size();\r\n  }\r\n\r\n  encode(stream, keys) {\r\n    let val = 0;\r\n    for (let i = 0; i < this.flags.length; i++) {\r\n      const flag = this.flags[i];\r\n      if (flag != null) {\r\n        if (keys[flag]) { val |= (1 << i); }\r\n      }\r\n    }\r\n\r\n    return this.type.encode(stream, val);\r\n  }\r\n}\r\n\r\nmodule.exports = Bitfield;\r\n","class BooleanT {\r\n  constructor(type) {\r\n    this.type = type;\r\n  }\r\n\r\n  decode(stream, parent) {\r\n    return !!this.type.decode(stream, parent);\r\n  }\r\n\r\n  size(val, parent) {\r\n    return this.type.size(val, parent);\r\n  }\r\n\r\n  encode(stream, val, parent) {\r\n    return this.type.encode(stream, +val, parent);\r\n  }\r\n}\r\n\r\nmodule.exports = BooleanT;\r\n","const utils = require('./utils');\r\nconst {Number:NumberT} = require('./Number');\r\n\r\nclass BufferT {\r\n  constructor(length) {\r\n    this.length = length;\r\n  }\r\n  decode(stream, parent) {\r\n    const length = utils.resolveLength(this.length, stream, parent);\r\n    return stream.readBuffer(length);\r\n  }\r\n\r\n  size(val, parent) {\r\n    if (!val) {\r\n      return utils.resolveLength(this.length, null, parent);\r\n    }\r\n\r\n    return val.length;\r\n  }\r\n\r\n  encode(stream, buf, parent) {\r\n    if (this.length instanceof NumberT) {\r\n      this.length.encode(stream, buf.length);\r\n    }\r\n\r\n    return stream.writeBuffer(buf);\r\n  }\r\n}\r\n\r\nmodule.exports = BufferT;\r\n","let iconv;\r\ntry { iconv = require('iconv-lite'); } catch (error) {}\r\n\r\nclass DecodeStream {\r\n  constructor(buffer) {\r\n    this.buffer = buffer;\r\n    this.pos = 0;\r\n    this.length = this.buffer.length;\r\n  }\r\n\r\n  readString(length, encoding = 'ascii') {\r\n    switch (encoding) {\r\n      case 'utf16le': case 'ucs2': case 'utf8': case 'ascii':\r\n        return this.buffer.toString(encoding, this.pos, (this.pos += length));\r\n\r\n      case 'utf16be':\r\n        var buf = Buffer.from(this.readBuffer(length));\r\n\r\n        // swap the bytes\r\n        for (let i = 0, end = buf.length - 1; i < end; i += 2) {\r\n          const byte = buf[i];\r\n          buf[i] = buf[i + 1];\r\n          buf[i + 1] = byte;\r\n        }\r\n\r\n        return buf.toString('utf16le');\r\n\r\n      default:\r\n        buf = this.readBuffer(length);\r\n        if (iconv) {\r\n          try {\r\n            return iconv.decode(buf, encoding);\r\n          } catch (error1) {}\r\n        }\r\n\r\n        return buf;\r\n    }\r\n  }\r\n\r\n  readBuffer(length) {\r\n    return this.buffer.slice(this.pos, (this.pos += length));\r\n  }\r\n\r\n  readUInt24BE() {\r\n    return (this.readUInt16BE() << 8) + this.readUInt8();\r\n  }\r\n\r\n  readUInt24LE() {\r\n    return this.readUInt16LE() + (this.readUInt8() << 16);\r\n  }\r\n\r\n  readInt24BE() {\r\n    return (this.readInt16BE() << 8) + this.readUInt8();\r\n  }\r\n\r\n  readInt24LE() {\r\n    return this.readUInt16LE() + (this.readInt8() << 16);\r\n  }\r\n}\r\n\r\nDecodeStream.TYPES = {\r\n  UInt8: 1,\r\n  UInt16: 2,\r\n  UInt24: 3,\r\n  UInt32: 4,\r\n  Int8: 1,\r\n  Int16: 2,\r\n  Int24: 3,\r\n  Int32: 4,\r\n  Float: 4,\r\n  Double: 8\r\n};\r\n\r\nfor (let key in Buffer.prototype) {\r\n  if (key.slice(0, 4) === 'read') {\r\n    const bytes = DecodeStream.TYPES[key.replace(/read|[BL]E/g, '')];\r\n    DecodeStream.prototype[key] = function() {\r\n      const ret = this.buffer[key](this.pos);\r\n      this.pos += bytes;\r\n      return ret;\r\n    };\r\n  }\r\n}\r\n\r\nmodule.exports = DecodeStream;\r\n","let iconv;\r\nconst stream = require('stream');\r\nconst DecodeStream = require('./DecodeStream');\r\ntry { iconv = require('iconv-lite'); } catch (error) {}\r\n\r\nclass EncodeStream extends stream.Readable {\r\n  constructor(bufferSize =  65536) {\r\n    super(...arguments);\r\n    this.buffer = Buffer.alloc(bufferSize);\r\n    this.bufferOffset = 0;\r\n    this.pos = 0;\r\n  }\r\n\r\n  // do nothing, required by node\r\n  _read() {}\r\n\r\n  ensure(bytes) {\r\n    if ((this.bufferOffset + bytes) > this.buffer.length) {\r\n      return this.flush();\r\n    }\r\n  }\r\n\r\n  flush() {\r\n    if (this.bufferOffset > 0) {\r\n      this.push(Buffer.from(this.buffer.slice(0, this.bufferOffset)));\r\n      return this.bufferOffset = 0;\r\n    }\r\n  }\r\n\r\n  writeBuffer(buffer) {\r\n    this.flush();\r\n    this.push(buffer);\r\n    return this.pos += buffer.length;\r\n  }\r\n\r\n  writeString(string, encoding = 'ascii') {\r\n    switch (encoding) {\r\n      case 'utf16le': case 'ucs2': case 'utf8': case 'ascii':\r\n        return this.writeBuffer(Buffer.from(string, encoding));\r\n\r\n      case 'utf16be':\r\n        var buf = Buffer.from(string, 'utf16le');\r\n\r\n        // swap the bytes\r\n        for (let i = 0, end = buf.length - 1; i < end; i += 2) {\r\n          const byte = buf[i];\r\n          buf[i] = buf[i + 1];\r\n          buf[i + 1] = byte;\r\n        }\r\n\r\n        return this.writeBuffer(buf);\r\n\r\n      default:\r\n        if (iconv) {\r\n          return this.writeBuffer(iconv.encode(string, encoding));\r\n        } else {\r\n          throw new Error('Install iconv-lite to enable additional string encodings.');\r\n        }\r\n    }\r\n  }\r\n\r\n  writeUInt24BE(val) {\r\n    this.ensure(3);\r\n    this.buffer[this.bufferOffset++] = (val >>> 16) & 0xff;\r\n    this.buffer[this.bufferOffset++] = (val >>> 8)  & 0xff;\r\n    this.buffer[this.bufferOffset++] = val & 0xff;\r\n    return this.pos += 3;\r\n  }\r\n\r\n  writeUInt24LE(val) {\r\n    this.ensure(3);\r\n    this.buffer[this.bufferOffset++] = val & 0xff;\r\n    this.buffer[this.bufferOffset++] = (val >>> 8) & 0xff;\r\n    this.buffer[this.bufferOffset++] = (val >>> 16) & 0xff;\r\n    return this.pos += 3;\r\n  }\r\n\r\n  writeInt24BE(val) {\r\n    if (val >= 0) {\r\n      return this.writeUInt24BE(val);\r\n    } else {\r\n      return this.writeUInt24BE(val + 0xffffff + 1);\r\n    }\r\n  }\r\n\r\n  writeInt24LE(val) {\r\n    if (val >= 0) {\r\n      return this.writeUInt24LE(val);\r\n    } else {\r\n      return this.writeUInt24LE(val + 0xffffff + 1);\r\n    }\r\n  }\r\n\r\n  fill(val, length) {\r\n    if (length < this.buffer.length) {\r\n      this.ensure(length);\r\n      this.buffer.fill(val, this.bufferOffset, this.bufferOffset + length);\r\n      this.bufferOffset += length;\r\n      return this.pos += length;\r\n    } else {\r\n      const buf = Buffer.alloc(length);\r\n      buf.fill(val);\r\n      return this.writeBuffer(buf);\r\n    }\r\n  }\r\n\r\n  end() {\r\n    this.flush();\r\n    return this.push(null);\r\n  }\r\n}\r\n\r\nfor (let key in Buffer.prototype) {\r\n  if (key.slice(0, 5) === 'write') {\r\n    const bytes = +DecodeStream.TYPES[key.replace(/write|[BL]E/g, '')];\r\n    EncodeStream.prototype[key] = function(value) {\r\n      this.ensure(bytes);\r\n      this.buffer[key](value, this.bufferOffset);\r\n      this.bufferOffset += bytes;\r\n      return this.pos += bytes;\r\n    };\r\n  }\r\n}\r\n\r\nmodule.exports = EncodeStream;\r\n","class Enum {\r\n  constructor(type, options = []) {\r\n    this.type = type;\r\n    this.options = options;\r\n  }\r\n  decode(stream) {\r\n    const index = this.type.decode(stream);\r\n    return this.options[index] || index;\r\n  }\r\n\r\n  size() {\r\n    return this.type.size();\r\n  }\r\n\r\n  encode(stream, val) {\r\n    const index = this.options.indexOf(val);\r\n    if (index === -1) {\r\n      throw new Error(`Unknown option in enum: ${val}`);\r\n    }\r\n\r\n    return this.type.encode(stream, index);\r\n  }\r\n}\r\n\r\nmodule.exports = Enum;\r\n","const ArrayT = require('./Array');\r\nconst {Number:NumberT} = require('./Number');\r\nconst utils = require('./utils');\r\nconst {inspect} = require('util');\r\n\r\nclass LazyArrayT extends ArrayT {\r\n  decode(stream, parent) {\r\n    const { pos } = stream;\r\n    const length = utils.resolveLength(this.length, stream, parent);\r\n\r\n    if (this.length instanceof NumberT) {\r\n      parent = {\r\n        parent,\r\n        _startOffset: pos,\r\n        _currentOffset: 0,\r\n        _length: length\r\n      };\r\n    }\r\n\r\n    const res = new LazyArray(this.type, length, stream, parent);\r\n\r\n    stream.pos += length * this.type.size(null, parent);\r\n    return res;\r\n  }\r\n\r\n  size(val, ctx) {\r\n    if (val instanceof LazyArray) {\r\n      val = val.toArray();\r\n    }\r\n\r\n    return super.size(val, ctx);\r\n  }\r\n\r\n  encode(stream, val, ctx) {\r\n    if (val instanceof LazyArray) {\r\n      val = val.toArray();\r\n    }\r\n\r\n    return super.encode(stream, val, ctx);\r\n  }\r\n}\r\n\r\nclass LazyArray {\r\n  constructor(type, length, stream, ctx) {\r\n    this.type = type;\r\n    this.length = length;\r\n    this.stream = stream;\r\n    this.ctx = ctx;\r\n    this.base = this.stream.pos;\r\n    this.items = [];\r\n  }\r\n\r\n  get(index) {\r\n    if ((index < 0) || (index >= this.length)) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this.items[index] == null) {\r\n      const { pos } = this.stream;\r\n      this.stream.pos = this.base + (this.type.size(null, this.ctx) * index);\r\n      this.items[index] = this.type.decode(this.stream, this.ctx);\r\n      this.stream.pos = pos;\r\n    }\r\n\r\n    return this.items[index];\r\n  }\r\n\r\n  toArray() {\r\n    const result = [];\r\n    for (let i = 0, end = this.length; i < end; i++) {\r\n      result.push(this.get(i));\r\n    }\r\n    return result;\r\n  }\r\n\r\n  inspect() {\r\n    return inspect(this.toArray());\r\n  }\r\n}\r\n\r\nmodule.exports = LazyArrayT;\r\n","const DecodeStream = require('./DecodeStream');\r\n\r\nclass NumberT {\r\n  constructor(type, endian = 'BE') {\r\n    this.type = type;\r\n    this.endian = endian;\r\n    this.fn = this.type;\r\n    if (this.type[this.type.length - 1] !== '8') {\r\n      this.fn += this.endian;\r\n    }\r\n  }\r\n\r\n  size() {\r\n    return DecodeStream.TYPES[this.type];\r\n  }\r\n\r\n  decode(stream) {\r\n    return stream[`read${this.fn}`]();\r\n  }\r\n\r\n  encode(stream, val) {\r\n    return stream[`write${this.fn}`](val);\r\n  }\r\n}\r\n\r\nexports.Number = NumberT;\r\nexports.uint8 = new NumberT('UInt8');\r\nexports.uint16be = (exports.uint16 = new NumberT('UInt16', 'BE'));\r\nexports.uint16le = new NumberT('UInt16', 'LE');\r\nexports.uint24be = (exports.uint24 = new NumberT('UInt24', 'BE'));\r\nexports.uint24le = new NumberT('UInt24', 'LE');\r\nexports.uint32be = (exports.uint32 = new NumberT('UInt32', 'BE'));\r\nexports.uint32le = new NumberT('UInt32', 'LE');\r\nexports.int8 = new NumberT('Int8');\r\nexports.int16be = (exports.int16 = new NumberT('Int16', 'BE'));\r\nexports.int16le = new NumberT('Int16', 'LE');\r\nexports.int24be = (exports.int24 = new NumberT('Int24', 'BE'));\r\nexports.int24le = new NumberT('Int24', 'LE');\r\nexports.int32be = (exports.int32 = new NumberT('Int32', 'BE'));\r\nexports.int32le = new NumberT('Int32', 'LE');\r\nexports.floatbe = (exports.float = new NumberT('Float', 'BE'));\r\nexports.floatle = new NumberT('Float', 'LE');\r\nexports.doublebe = (exports.double = new NumberT('Double', 'BE'));\r\nexports.doublele = new NumberT('Double', 'LE');\r\n\r\nclass Fixed extends NumberT {\r\n  constructor(size, endian, fracBits = size >> 1) {\r\n    super(`Int${size}`, endian);\r\n    this._point = 1 << fracBits;\r\n  }\r\n\r\n  decode(stream) {\r\n    return super.decode(stream) / this._point;\r\n  }\r\n\r\n  encode(stream, val) {\r\n    return super.encode(stream, (val * this._point) | 0);\r\n  }\r\n}\r\n\r\nexports.Fixed = Fixed;\r\nexports.fixed16be = (exports.fixed16 = new Fixed(16, 'BE'));\r\nexports.fixed16le = new Fixed(16, 'LE');\r\nexports.fixed32be = (exports.fixed32 =new Fixed(32, 'BE'));\r\nexports.fixed32le = new Fixed(32, 'LE');\r\n","class Optional {\r\n  constructor(type, condition = true) {\r\n    this.type = type;\r\n    this.condition = condition;\r\n  }\r\n\r\n  decode(stream, parent) {\r\n    let { condition } = this;\r\n    if (typeof condition === 'function') {\r\n      condition = condition.call(parent, parent);\r\n    }\r\n\r\n    if (condition) {\r\n      return this.type.decode(stream, parent);\r\n    }\r\n  }\r\n\r\n  size(val, parent) {\r\n    let { condition } = this;\r\n    if (typeof condition === 'function') {\r\n      condition = condition.call(parent, parent);\r\n    }\r\n\r\n    if (condition) {\r\n      return this.type.size(val, parent);\r\n    } else {\r\n      return 0;\r\n    }\r\n  }\r\n\r\n  encode(stream, val, parent) {\r\n    let { condition } = this;\r\n    if (typeof condition === 'function') {\r\n      condition = condition.call(parent, parent);\r\n    }\r\n\r\n    if (condition) {\r\n      return this.type.encode(stream, val, parent);\r\n    }\r\n  }\r\n}\r\n\r\nmodule.exports = Optional;\r\n","const utils = require('./utils');\r\n\r\nclass Pointer {\r\n  constructor(offsetType, type, options = {}) {\r\n    this.offsetType = offsetType;\r\n    this.type = type;\r\n    this.options = options;\r\n    if (this.type === 'void') { this.type = null; }\r\n    if (this.options.type == null) { this.options.type = 'local'; }\r\n    if (this.options.allowNull == null) { this.options.allowNull = true; }\r\n    if (this.options.nullValue == null) { this.options.nullValue = 0; }\r\n    if (this.options.lazy == null) { this.options.lazy = false; }\r\n    if (this.options.relativeTo) {\r\n      if (typeof this.options.relativeTo !== 'function') {\r\n        throw new Error('relativeTo option must be a function');\r\n      }\r\n      this.relativeToGetter = options.relativeTo;\r\n    }\r\n  }\r\n\r\n  decode(stream, ctx) {\r\n    const offset = this.offsetType.decode(stream, ctx);\r\n\r\n    // handle NULL pointers\r\n    if ((offset === this.options.nullValue) && this.options.allowNull) {\r\n      return null;\r\n    }\r\n\r\n    let relative;\r\n    switch (this.options.type) {\r\n      case 'local':     relative = ctx._startOffset; break;\r\n      case 'immediate': relative = stream.pos - this.offsetType.size(); break;\r\n      case 'parent':    relative = ctx.parent._startOffset; break;\r\n      default:\r\n        var c = ctx;\r\n        while (c.parent) {\r\n          c = c.parent;\r\n        }\r\n\r\n        relative = c._startOffset || 0;\r\n    }\r\n\r\n    if (this.options.relativeTo) {\r\n      relative += this.relativeToGetter(ctx);\r\n    }\r\n\r\n    const ptr = offset + relative;\r\n\r\n    if (this.type != null) {\r\n      let val = null;\r\n      const decodeValue = () => {\r\n        if (val != null) { return val; }\r\n\r\n        const { pos } = stream;\r\n        stream.pos = ptr;\r\n        val = this.type.decode(stream, ctx);\r\n        stream.pos = pos;\r\n        return val;\r\n      };\r\n\r\n      // If this is a lazy pointer, define a getter to decode only when needed.\r\n      // This obviously only works when the pointer is contained by a Struct.\r\n      if (this.options.lazy) {\r\n        return new utils.PropertyDescriptor({\r\n          get: decodeValue});\r\n      }\r\n\r\n      return decodeValue();\r\n    } else {\r\n      return ptr;\r\n    }\r\n  }\r\n\r\n  size(val, ctx) {\r\n    const parent = ctx;\r\n    switch (this.options.type) {\r\n      case 'local': case 'immediate':\r\n        break;\r\n      case 'parent':\r\n        ctx = ctx.parent;\r\n        break;\r\n      default: // global\r\n        while (ctx.parent) {\r\n          ctx = ctx.parent;\r\n        }\r\n    }\r\n\r\n    let { type } = this;\r\n    if (type == null) {\r\n      if (!(val instanceof VoidPointer)) {\r\n        throw new Error(\"Must be a VoidPointer\");\r\n      }\r\n\r\n      ({ type } = val);\r\n      val = val.value;\r\n    }\r\n\r\n    if (val && ctx) {\r\n      ctx.pointerSize += type.size(val, parent);\r\n    }\r\n\r\n    return this.offsetType.size();\r\n  }\r\n\r\n  encode(stream, val, ctx) {\r\n    let relative;\r\n    const parent = ctx;\r\n    if ((val == null)) {\r\n      this.offsetType.encode(stream, this.options.nullValue);\r\n      return;\r\n    }\r\n\r\n    switch (this.options.type) {\r\n      case 'local':\r\n        relative = ctx.startOffset;\r\n        break;\r\n      case 'immediate':\r\n        relative = stream.pos + this.offsetType.size(val, parent);\r\n        break;\r\n      case 'parent':\r\n        ctx = ctx.parent;\r\n        relative = ctx.startOffset;\r\n        break;\r\n      default: // global\r\n        relative = 0;\r\n        while (ctx.parent) {\r\n          ctx = ctx.parent;\r\n        }\r\n    }\r\n\r\n    if (this.options.relativeTo) {\r\n      relative += this.relativeToGetter(parent.val);\r\n    }\r\n\r\n    this.offsetType.encode(stream, ctx.pointerOffset - relative);\r\n\r\n    let { type } = this;\r\n    if (type == null) {\r\n      if (!(val instanceof VoidPointer)) {\r\n        throw new Error(\"Must be a VoidPointer\");\r\n      }\r\n\r\n      ({ type } = val);\r\n      val = val.value;\r\n    }\r\n\r\n    ctx.pointers.push({\r\n      type,\r\n      val,\r\n      parent\r\n    });\r\n\r\n    return ctx.pointerOffset += type.size(val, parent);\r\n  }\r\n}\r\n\r\n// A pointer whose type is determined at decode time\r\nclass VoidPointer {\r\n  constructor(type, value) {\r\n    this.type = type;\r\n    this.value = value;\r\n  }\r\n}\r\n\r\nexports.Pointer = Pointer;\r\nexports.VoidPointer = VoidPointer;\r\n","const utils = require('./utils');\r\n\r\nclass Reserved {\r\n  constructor(type, count = 1) {\r\n    this.type = type;\r\n    this.count = count;\r\n  }\r\n  decode(stream, parent) {\r\n    stream.pos += this.size(null, parent);\r\n    return undefined;\r\n  }\r\n\r\n  size(data, parent) {\r\n    const count = utils.resolveLength(this.count, null, parent);\r\n    return this.type.size() * count;\r\n  }\r\n\r\n  encode(stream, val, parent) {\r\n    return stream.fill(0, this.size(val, parent));\r\n  }\r\n}\r\n\r\nmodule.exports = Reserved;\r\n","const {Number:NumberT} = require('./Number');\r\nconst utils = require('./utils');\r\n\r\nclass StringT {\r\n  constructor(length, encoding = 'ascii') {\r\n    this.length = length;\r\n    this.encoding = encoding;\r\n  }\r\n\r\n  decode(stream, parent) {\r\n    let length, pos;\r\n\r\n    if (this.length != null) {\r\n      length = utils.resolveLength(this.length, stream, parent);\r\n    } else {\r\n      let buffer;\r\n      ({buffer, length, pos} = stream);\r\n\r\n      while ((pos < length) && (buffer[pos] !== 0x00)) {\r\n        ++pos;\r\n      }\r\n\r\n      length = pos - stream.pos;\r\n    }\r\n\r\n    let { encoding } = this;\r\n    if (typeof encoding === 'function') {\r\n      encoding = encoding.call(parent, parent) || 'ascii';\r\n    }\r\n\r\n    const string = stream.readString(length, encoding);\r\n\r\n    if ((this.length == null) && (stream.pos < stream.length)) {\r\n      stream.pos++;\r\n    }\r\n\r\n    return string;\r\n  }\r\n\r\n  size(val, parent) {\r\n    // Use the defined value if no value was given\r\n    if (!val) {\r\n      return utils.resolveLength(this.length, null, parent);\r\n    }\r\n\r\n    let { encoding } = this;\r\n    if (typeof encoding === 'function') {\r\n      encoding = encoding.call(parent != null ? parent.val : undefined, parent != null ? parent.val : undefined) || 'ascii';\r\n    }\r\n\r\n    if (encoding === 'utf16be') {\r\n      encoding = 'utf16le';\r\n    }\r\n\r\n    let size = Buffer.byteLength(val, encoding);\r\n    if (this.length instanceof NumberT) {\r\n      size += this.length.size();\r\n    }\r\n\r\n    if ((this.length == null)) {\r\n      size++;\r\n    }\r\n\r\n    return size;\r\n  }\r\n\r\n  encode(stream, val, parent) {\r\n    let { encoding } = this;\r\n    if (typeof encoding === 'function') {\r\n      encoding = encoding.call(parent != null ? parent.val : undefined, parent != null ? parent.val : undefined) || 'ascii';\r\n    }\r\n\r\n    if (this.length instanceof NumberT) {\r\n      this.length.encode(stream, Buffer.byteLength(val, encoding));\r\n    }\r\n\r\n    stream.writeString(val, encoding);\r\n\r\n    if ((this.length == null)) {\r\n      return stream.writeUInt8(0x00);\r\n    }\r\n  }\r\n}\r\n\r\nmodule.exports = StringT;\r\n","const utils = require('./utils');\r\n\r\nclass Struct {\r\n  constructor(fields = {}) {\r\n    this.fields = fields;\r\n  }\r\n\r\n  decode(stream, parent, length = 0) {\r\n    const res = this._setup(stream, parent, length);\r\n    this._parseFields(stream, res, this.fields);\r\n\r\n    if (this.process != null) {\r\n      this.process.call(res, stream);\r\n    }\r\n    return res;\r\n  }\r\n\r\n  _setup(stream, parent, length) {\r\n    const res = {};\r\n\r\n    // define hidden properties\r\n    Object.defineProperties(res, {\r\n      parent:         { value: parent },\r\n      _startOffset:   { value: stream.pos },\r\n      _currentOffset: { value: 0, writable: true },\r\n      _length:        { value: length }\r\n    });\r\n\r\n    return res;\r\n  }\r\n\r\n  _parseFields(stream, res, fields) {\r\n    for (let key in fields) {\r\n      var val;\r\n      const type = fields[key];\r\n      if (typeof type === 'function') {\r\n        val = type.call(res, res);\r\n      } else {\r\n        val = type.decode(stream, res);\r\n      }\r\n\r\n      if (val !== undefined) {\r\n        if (val instanceof utils.PropertyDescriptor) {\r\n          Object.defineProperty(res, key, val);\r\n        } else {\r\n          res[key] = val;\r\n        }\r\n      }\r\n\r\n      res._currentOffset = stream.pos - res._startOffset;\r\n    }\r\n\r\n  }\r\n\r\n  size(val, parent, includePointers) {\r\n    if (val == null) { val = {}; }\r\n    if (includePointers == null) { includePointers = true; }\r\n    const ctx = {\r\n      parent,\r\n      val,\r\n      pointerSize: 0\r\n    };\r\n\r\n    let size = 0;\r\n    for (let key in this.fields) {\r\n      const type = this.fields[key];\r\n      if (type.size != null) {\r\n        size += type.size(val[key], ctx);\r\n      }\r\n    }\r\n\r\n    if (includePointers) {\r\n      size += ctx.pointerSize;\r\n    }\r\n\r\n    return size;\r\n  }\r\n\r\n  encode(stream, val, parent) {\r\n    let type;\r\n    if (this.preEncode != null) {\r\n      this.preEncode.call(val, stream);\r\n    }\r\n\r\n    const ctx = {\r\n      pointers: [],\r\n      startOffset: stream.pos,\r\n      parent,\r\n      val,\r\n      pointerSize: 0\r\n    };\r\n\r\n    ctx.pointerOffset = stream.pos + this.size(val, ctx, false);\r\n\r\n    for (let key in this.fields) {\r\n      type = this.fields[key];\r\n      if (type.encode != null) {\r\n        type.encode(stream, val[key], ctx);\r\n      }\r\n    }\r\n\r\n    let i = 0;\r\n    while (i < ctx.pointers.length) {\r\n      const ptr = ctx.pointers[i++];\r\n      ptr.type.encode(stream, ptr.val, ptr.parent);\r\n    }\r\n\r\n  }\r\n}\r\n\r\nmodule.exports = Struct;\r\n","const Struct = require('./Struct');\r\n\r\nconst getPath = (object, pathArray) => {\r\n  return pathArray.reduce((prevObj, key) => prevObj && prevObj[key], object);\r\n};\r\n\r\nclass VersionedStruct extends Struct {\r\n  constructor(type, versions = {}) {\r\n    super();\r\n    this.type = type;\r\n    this.versions = versions;\r\n    if (typeof type === 'string') {\r\n      this.versionPath = type.split('.');\r\n    }\r\n  }\r\n\r\n  decode(stream, parent, length = 0) {\r\n    const res = this._setup(stream, parent, length);\r\n\r\n    if (typeof this.type === 'string') {\r\n      res.version = getPath(parent, this.versionPath);\r\n    } else {\r\n      res.version = this.type.decode(stream);\r\n    }\r\n\r\n    if (this.versions.header) {\r\n      this._parseFields(stream, res, this.versions.header);\r\n    }\r\n\r\n    const fields = this.versions[res.version];\r\n    if ((fields == null)) {\r\n      throw new Error(`Unknown version ${res.version}`);\r\n    }\r\n\r\n    if (fields instanceof VersionedStruct) {\r\n      return fields.decode(stream, parent);\r\n    }\r\n\r\n    this._parseFields(stream, res, fields);\r\n\r\n    if (this.process != null) {\r\n      this.process.call(res, stream);\r\n    }\r\n    return res;\r\n  }\r\n\r\n  size(val, parent, includePointers = true) {\r\n    let key, type;\r\n    if (!val) {\r\n      throw new Error('Not a fixed size');\r\n    }\r\n\r\n    const ctx = {\r\n      parent,\r\n      val,\r\n      pointerSize: 0\r\n    };\r\n\r\n    let size = 0;\r\n    if (typeof this.type !== 'string') {\r\n      size += this.type.size(val.version, ctx);\r\n    }\r\n\r\n    if (this.versions.header) {\r\n      for (key in this.versions.header) {\r\n        type = this.versions.header[key];\r\n        if (type.size != null) {\r\n          size += type.size(val[key], ctx);\r\n        }\r\n      }\r\n    }\r\n\r\n    const fields = this.versions[val.version];\r\n    if ((fields == null)) {\r\n      throw new Error(`Unknown version ${val.version}`);\r\n    }\r\n\r\n    for (key in fields) {\r\n      type = fields[key];\r\n      if (type.size != null) {\r\n        size += type.size(val[key], ctx);\r\n      }\r\n    }\r\n\r\n    if (includePointers) {\r\n      size += ctx.pointerSize;\r\n    }\r\n\r\n    return size;\r\n  }\r\n\r\n  encode(stream, val, parent) {\r\n    let key, type;\r\n    if (this.preEncode != null) {\r\n      this.preEncode.call(val, stream);\r\n    }\r\n\r\n    const ctx = {\r\n      pointers: [],\r\n      startOffset: stream.pos,\r\n      parent,\r\n      val,\r\n      pointerSize: 0\r\n    };\r\n\r\n    ctx.pointerOffset = stream.pos + this.size(val, ctx, false);\r\n\r\n    if (typeof this.type !== 'string') {\r\n      this.type.encode(stream, val.version);\r\n    }\r\n\r\n    if (this.versions.header) {\r\n      for (key in this.versions.header) {\r\n        type = this.versions.header[key];\r\n        if (type.encode != null) {\r\n          type.encode(stream, val[key], ctx);\r\n        }\r\n      }\r\n    }\r\n\r\n    const fields = this.versions[val.version];\r\n    for (key in fields) {\r\n      type = fields[key];\r\n      if (type.encode != null) {\r\n        type.encode(stream, val[key], ctx);\r\n      }\r\n    }\r\n\r\n    let i = 0;\r\n    while (i < ctx.pointers.length) {\r\n      const ptr = ctx.pointers[i++];\r\n      ptr.type.encode(stream, ptr.val, ptr.parent);\r\n    }\r\n\r\n  }\r\n}\r\n\r\nmodule.exports = VersionedStruct;\r\n","const {Number:NumberT} = require('./Number');\r\n\r\nexports.resolveLength = function(length, stream, parent) {\r\n  let res;\r\n  if (typeof length === 'number') {\r\n    res = length;\r\n\r\n  } else if (typeof length === 'function') {\r\n    res = length.call(parent, parent);\r\n\r\n  } else if (parent && (typeof length === 'string')) {\r\n    res = parent[length];\r\n\r\n  } else if (stream && length instanceof NumberT) {\r\n    res = length.decode(stream);\r\n  }\r\n\r\n  if (isNaN(res)) {\r\n    throw new Error('Not a fixed size');\r\n  }\r\n\r\n  return res;\r\n};\r\n\r\nclass PropertyDescriptor {\r\n  constructor(opts = {}) {\r\n    this.enumerable = true;\r\n    this.configurable = true;\r\n\r\n    for (let key in opts) {\r\n      const val = opts[key];\r\n      this[key] = val;\r\n    }\r\n  }\r\n}\r\n\r\nexports.PropertyDescriptor = PropertyDescriptor;\r\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n  (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n    ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n    : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Print warning and recommend using `buffer` v4.x which has an Object\n *               implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n    typeof console.error === 'function') {\n  console.error(\n    'This browser lacks typed array (Uint8Array) support which is required by ' +\n    '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n  )\n}\n\nfunction typedArraySupport () {\n  // Can typed array instances can be augmented?\n  try {\n    const arr = new Uint8Array(1)\n    const proto = { foo: function () { return 42 } }\n    Object.setPrototypeOf(proto, Uint8Array.prototype)\n    Object.setPrototypeOf(arr, proto)\n    return arr.foo() === 42\n  } catch (e) {\n    return false\n  }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.buffer\n  }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.byteOffset\n  }\n})\n\nfunction createBuffer (length) {\n  if (length > K_MAX_LENGTH) {\n    throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n  }\n  // Return an augmented `Uint8Array` instance\n  const buf = new Uint8Array(length)\n  Object.setPrototypeOf(buf, Buffer.prototype)\n  return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new TypeError(\n        'The \"string\" argument must be of type string. Received type number'\n      )\n    }\n    return allocUnsafe(arg)\n  }\n  return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n  if (typeof value === 'string') {\n    return fromString(value, encodingOrOffset)\n  }\n\n  if (ArrayBuffer.isView(value)) {\n    return fromArrayView(value)\n  }\n\n  if (value == null) {\n    throw new TypeError(\n      'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n      'or Array-like Object. Received type ' + (typeof value)\n    )\n  }\n\n  if (isInstance(value, ArrayBuffer) ||\n      (value && isInstance(value.buffer, ArrayBuffer))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof SharedArrayBuffer !== 'undefined' &&\n      (isInstance(value, SharedArrayBuffer) ||\n      (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'number') {\n    throw new TypeError(\n      'The \"value\" argument must not be of type number. Received type number'\n    )\n  }\n\n  const valueOf = value.valueOf && value.valueOf()\n  if (valueOf != null && valueOf !== value) {\n    return Buffer.from(valueOf, encodingOrOffset, length)\n  }\n\n  const b = fromObject(value)\n  if (b) return b\n\n  if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n      typeof value[Symbol.toPrimitive] === 'function') {\n    return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n  }\n\n  throw new TypeError(\n    'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n    'or Array-like Object. Received type ' + (typeof value)\n  )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be of type number')\n  } else if (size < 0) {\n    throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n  }\n}\n\nfunction alloc (size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpreted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(size).fill(fill, encoding)\n      : createBuffer(size).fill(fill)\n  }\n  return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n  assertSize(size)\n  return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('Unknown encoding: ' + encoding)\n  }\n\n  const length = byteLength(string, encoding) | 0\n  let buf = createBuffer(length)\n\n  const actual = buf.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    buf = buf.slice(0, actual)\n  }\n\n  return buf\n}\n\nfunction fromArrayLike (array) {\n  const length = array.length < 0 ? 0 : checked(array.length) | 0\n  const buf = createBuffer(length)\n  for (let i = 0; i < length; i += 1) {\n    buf[i] = array[i] & 255\n  }\n  return buf\n}\n\nfunction fromArrayView (arrayView) {\n  if (isInstance(arrayView, Uint8Array)) {\n    const copy = new Uint8Array(arrayView)\n    return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n  }\n  return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\"offset\" is outside of buffer bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\"length\" is outside of buffer bounds')\n  }\n\n  let buf\n  if (byteOffset === undefined && length === undefined) {\n    buf = new Uint8Array(array)\n  } else if (length === undefined) {\n    buf = new Uint8Array(array, byteOffset)\n  } else {\n    buf = new Uint8Array(array, byteOffset, length)\n  }\n\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(buf, Buffer.prototype)\n\n  return buf\n}\n\nfunction fromObject (obj) {\n  if (Buffer.isBuffer(obj)) {\n    const len = checked(obj.length) | 0\n    const buf = createBuffer(len)\n\n    if (buf.length === 0) {\n      return buf\n    }\n\n    obj.copy(buf, 0, 0, len)\n    return buf\n  }\n\n  if (obj.length !== undefined) {\n    if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n      return createBuffer(0)\n    }\n    return fromArrayLike(obj)\n  }\n\n  if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n    return fromArrayLike(obj.data)\n  }\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= K_MAX_LENGTH) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return b != null && b._isBuffer === true &&\n    b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n  if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n  if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError(\n      'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n    )\n  }\n\n  if (a === b) return 0\n\n  let x = a.length\n  let y = b.length\n\n  for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!Array.isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  let i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  const buffer = Buffer.allocUnsafe(length)\n  let pos = 0\n  for (i = 0; i < list.length; ++i) {\n    let buf = list[i]\n    if (isInstance(buf, Uint8Array)) {\n      if (pos + buf.length > buffer.length) {\n        if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n        buf.copy(buffer, pos)\n      } else {\n        Uint8Array.prototype.set.call(\n          buffer,\n          buf,\n          pos\n        )\n      }\n    } else if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    } else {\n      buf.copy(buffer, pos)\n    }\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    throw new TypeError(\n      'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n      'Received type ' + typeof string\n    )\n  }\n\n  const len = string.length\n  const mustMatch = (arguments.length > 2 && arguments[2] === true)\n  if (!mustMatch && len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  let loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) {\n          return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n        }\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  let loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  const i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  const len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (let i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  const len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (let i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  const len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (let i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  const length = this.length\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  let str = ''\n  const max = exports.INSPECT_MAX_BYTES\n  str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n  if (this.length > max) str += ' ... '\n  return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n  Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (isInstance(target, Uint8Array)) {\n    target = Buffer.from(target, target.offset, target.byteLength)\n  }\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError(\n      'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n      'Received type ' + (typeof target)\n    )\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  let x = thisEnd - thisStart\n  let y = end - start\n  const len = Math.min(x, y)\n\n  const thisCopy = this.slice(thisStart, thisEnd)\n  const targetCopy = target.slice(start, end)\n\n  for (let i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset // Coerce to Number.\n  if (numberIsNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  let indexSize = 1\n  let arrLength = arr.length\n  let valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  let i\n  if (dir) {\n    let foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      let found = true\n      for (let j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  const remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  const strLen = string.length\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  let i\n  for (i = 0; i < length; ++i) {\n    const parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (numberIsNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset >>> 0\n    if (isFinite(length)) {\n      length = length >>> 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  const remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  let loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return asciiWrite(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  const res = []\n\n  let i = start\n  while (i < end) {\n    const firstByte = buf[i]\n    let codePoint = null\n    let bytesPerSequence = (firstByte > 0xEF)\n      ? 4\n      : (firstByte > 0xDF)\n          ? 3\n          : (firstByte > 0xBF)\n              ? 2\n              : 1\n\n    if (i + bytesPerSequence <= end) {\n      let secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  const len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  let res = ''\n  let i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  let ret = ''\n  end = Math.min(buf.length, end)\n\n  for (let i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  let ret = ''\n  end = Math.min(buf.length, end)\n\n  for (let i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  const len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  let out = ''\n  for (let i = start; i < end; ++i) {\n    out += hexSliceLookupTable[buf[i]]\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  const bytes = buf.slice(start, end)\n  let res = ''\n  // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n  for (let i = 0; i < bytes.length - 1; i += 2) {\n    res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  const len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  const newBuf = this.subarray(start, end)\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let val = this[offset]\n  let mul = 1\n  let i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  let val = this[offset + --byteLength]\n  let mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const lo = first +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 24\n\n  const hi = this[++offset] +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    last * 2 ** 24\n\n  return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const hi = first * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    this[++offset]\n\n  const lo = this[++offset] * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    last\n\n  return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let val = this[offset]\n  let mul = 1\n  let i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let i = byteLength\n  let mul = 1\n  let val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  const val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  const val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const val = this[offset + 4] +\n    this[offset + 5] * 2 ** 8 +\n    this[offset + 6] * 2 ** 16 +\n    (last << 24) // Overflow\n\n  return (BigInt(val) << BigInt(32)) +\n    BigInt(first +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const val = (first << 24) + // Overflow\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    this[++offset]\n\n  return (BigInt(val) << BigInt(32)) +\n    BigInt(this[++offset] * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    const maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  let mul = 1\n  let i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    const maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  let i = byteLength - 1\n  let mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset + 3] = (value >>> 24)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 1] = (value >>> 8)\n  this[offset] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n  checkIntBI(value, min, max, buf, offset, 7)\n\n  let lo = Number(value & BigInt(0xffffffff))\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n  checkIntBI(value, min, max, buf, offset, 7)\n\n  let lo = Number(value & BigInt(0xffffffff))\n  buf[offset + 7] = lo\n  lo = lo >> 8\n  buf[offset + 6] = lo\n  lo = lo >> 8\n  buf[offset + 5] = lo\n  lo = lo >> 8\n  buf[offset + 4] = lo\n  let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n  buf[offset + 3] = hi\n  hi = hi >> 8\n  buf[offset + 2] = hi\n  hi = hi >> 8\n  buf[offset + 1] = hi\n  hi = hi >> 8\n  buf[offset] = hi\n  return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n  return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n  return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    const limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  let i = 0\n  let mul = 1\n  let sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    const limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  let i = byteLength - 1\n  let mul = 1\n  let sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 3] = (value >>> 24)\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n  return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n  return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  const len = end - start\n\n  if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n    // Use built-in when available, missing from IE11\n    this.copyWithin(targetStart, start, end)\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, end),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n    if (val.length === 1) {\n      const code = val.charCodeAt(0)\n      if ((encoding === 'utf8' && code < 128) ||\n          encoding === 'latin1') {\n        // Fast path: If `val` fits into a single byte, use that numeric value.\n        val = code\n      }\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  } else if (typeof val === 'boolean') {\n    val = Number(val)\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  let i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    const bytes = Buffer.isBuffer(val)\n      ? val\n      : Buffer.from(val, encoding)\n    const len = bytes.length\n    if (len === 0) {\n      throw new TypeError('The value \"' + val +\n        '\" is invalid for argument \"value\"')\n    }\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n  errors[sym] = class NodeError extends Base {\n    constructor () {\n      super()\n\n      Object.defineProperty(this, 'message', {\n        value: getMessage.apply(this, arguments),\n        writable: true,\n        configurable: true\n      })\n\n      // Add the error code to the name to include it in the stack trace.\n      this.name = `${this.name} [${sym}]`\n      // Access the stack to generate the error message including the error code\n      // from the name.\n      this.stack // eslint-disable-line no-unused-expressions\n      // Reset the name to the actual name.\n      delete this.name\n    }\n\n    get code () {\n      return sym\n    }\n\n    set code (value) {\n      Object.defineProperty(this, 'code', {\n        configurable: true,\n        enumerable: true,\n        value,\n        writable: true\n      })\n    }\n\n    toString () {\n      return `${this.name} [${sym}]: ${this.message}`\n    }\n  }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n  function (name) {\n    if (name) {\n      return `${name} is outside of buffer bounds`\n    }\n\n    return 'Attempt to access memory outside buffer bounds'\n  }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n  function (name, actual) {\n    return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n  }, TypeError)\nE('ERR_OUT_OF_RANGE',\n  function (str, range, input) {\n    let msg = `The value of \"${str}\" is out of range.`\n    let received = input\n    if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n      received = addNumericalSeparator(String(input))\n    } else if (typeof input === 'bigint') {\n      received = String(input)\n      if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n        received = addNumericalSeparator(received)\n      }\n      received += 'n'\n    }\n    msg += ` It must be ${range}. Received ${received}`\n    return msg\n  }, RangeError)\n\nfunction addNumericalSeparator (val) {\n  let res = ''\n  let i = val.length\n  const start = val[0] === '-' ? 1 : 0\n  for (; i >= start + 4; i -= 3) {\n    res = `_${val.slice(i - 3, i)}${res}`\n  }\n  return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n  validateNumber(offset, 'offset')\n  if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n    boundsError(offset, buf.length - (byteLength + 1))\n  }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n  if (value > max || value < min) {\n    const n = typeof min === 'bigint' ? 'n' : ''\n    let range\n    if (byteLength > 3) {\n      if (min === 0 || min === BigInt(0)) {\n        range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n      } else {\n        range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n                `${(byteLength + 1) * 8 - 1}${n}`\n      }\n    } else {\n      range = `>= ${min}${n} and <= ${max}${n}`\n    }\n    throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n  }\n  checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n  if (typeof value !== 'number') {\n    throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n  }\n}\n\nfunction boundsError (value, length, type) {\n  if (Math.floor(value) !== value) {\n    validateNumber(value, type)\n    throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n  }\n\n  if (length < 0) {\n    throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n  }\n\n  throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n                                    `>= ${type ? 1 : 0} and <= ${length}`,\n                                    value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node takes equal signs as end of the Base64 encoding\n  str = str.split('=')[0]\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = str.trim().replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  let codePoint\n  const length = string.length\n  let leadSurrogate = null\n  const bytes = []\n\n  for (let i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  const byteArray = []\n  for (let i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  let c, hi, lo\n  const byteArray = []\n  for (let i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  let i\n  for (i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n  return obj instanceof type ||\n    (obj != null && obj.constructor != null && obj.constructor.name != null &&\n      obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n  // For IE11 support\n  return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n  const alphabet = '0123456789abcdef'\n  const table = new Array(256)\n  for (let i = 0; i < 16; ++i) {\n    const i16 = i * 16\n    for (let j = 0; j < 16; ++j) {\n      table[i16 + j] = alphabet[i] + alphabet[j]\n    }\n  }\n  return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n  return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n  throw new Error('BigInt not supported')\n}\n","// eslint-disable-next-line es/no-typed-arrays -- safe\nmodule.exports = typeof ArrayBuffer != 'undefined' && typeof DataView != 'undefined';\n","'use strict';\nvar NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-native');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar classof = require('../internals/classof');\nvar tryToString = require('../internals/try-to-string');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar defineProperty = require('../internals/object-define-property').f;\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar uid = require('../internals/uid');\n\nvar Int8Array = global.Int8Array;\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\nvar Uint8ClampedArray = global.Uint8ClampedArray;\nvar Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype;\nvar TypedArray = Int8Array && getPrototypeOf(Int8Array);\nvar TypedArrayPrototype = Int8ArrayPrototype && getPrototypeOf(Int8ArrayPrototype);\nvar ObjectPrototype = Object.prototype;\nvar TypeError = global.TypeError;\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG');\nvar TYPED_ARRAY_CONSTRUCTOR = uid('TYPED_ARRAY_CONSTRUCTOR');\n// Fixing native typed arrays in Opera Presto crashes the browser, see #595\nvar NATIVE_ARRAY_BUFFER_VIEWS = NATIVE_ARRAY_BUFFER && !!setPrototypeOf && classof(global.opera) !== 'Opera';\nvar TYPED_ARRAY_TAG_REQIRED = false;\nvar NAME, Constructor, Prototype;\n\nvar TypedArrayConstructorsList = {\n  Int8Array: 1,\n  Uint8Array: 1,\n  Uint8ClampedArray: 1,\n  Int16Array: 2,\n  Uint16Array: 2,\n  Int32Array: 4,\n  Uint32Array: 4,\n  Float32Array: 4,\n  Float64Array: 8\n};\n\nvar BigIntArrayConstructorsList = {\n  BigInt64Array: 8,\n  BigUint64Array: 8\n};\n\nvar isView = function isView(it) {\n  if (!isObject(it)) return false;\n  var klass = classof(it);\n  return klass === 'DataView'\n    || hasOwn(TypedArrayConstructorsList, klass)\n    || hasOwn(BigIntArrayConstructorsList, klass);\n};\n\nvar isTypedArray = function (it) {\n  if (!isObject(it)) return false;\n  var klass = classof(it);\n  return hasOwn(TypedArrayConstructorsList, klass)\n    || hasOwn(BigIntArrayConstructorsList, klass);\n};\n\nvar aTypedArray = function (it) {\n  if (isTypedArray(it)) return it;\n  throw TypeError('Target is not a typed array');\n};\n\nvar aTypedArrayConstructor = function (C) {\n  if (isCallable(C) && (!setPrototypeOf || isPrototypeOf(TypedArray, C))) return C;\n  throw TypeError(tryToString(C) + ' is not a typed array constructor');\n};\n\nvar exportTypedArrayMethod = function (KEY, property, forced) {\n  if (!DESCRIPTORS) return;\n  if (forced) for (var ARRAY in TypedArrayConstructorsList) {\n    var TypedArrayConstructor = global[ARRAY];\n    if (TypedArrayConstructor && hasOwn(TypedArrayConstructor.prototype, KEY)) try {\n      delete TypedArrayConstructor.prototype[KEY];\n    } catch (error) { /* empty */ }\n  }\n  if (!TypedArrayPrototype[KEY] || forced) {\n    redefine(TypedArrayPrototype, KEY, forced ? property\n      : NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY] || property);\n  }\n};\n\nvar exportTypedArrayStaticMethod = function (KEY, property, forced) {\n  var ARRAY, TypedArrayConstructor;\n  if (!DESCRIPTORS) return;\n  if (setPrototypeOf) {\n    if (forced) for (ARRAY in TypedArrayConstructorsList) {\n      TypedArrayConstructor = global[ARRAY];\n      if (TypedArrayConstructor && hasOwn(TypedArrayConstructor, KEY)) try {\n        delete TypedArrayConstructor[KEY];\n      } catch (error) { /* empty */ }\n    }\n    if (!TypedArray[KEY] || forced) {\n      // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable\n      try {\n        return redefine(TypedArray, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && TypedArray[KEY] || property);\n      } catch (error) { /* empty */ }\n    } else return;\n  }\n  for (ARRAY in TypedArrayConstructorsList) {\n    TypedArrayConstructor = global[ARRAY];\n    if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {\n      redefine(TypedArrayConstructor, KEY, property);\n    }\n  }\n};\n\nfor (NAME in TypedArrayConstructorsList) {\n  Constructor = global[NAME];\n  Prototype = Constructor && Constructor.prototype;\n  if (Prototype) createNonEnumerableProperty(Prototype, TYPED_ARRAY_CONSTRUCTOR, Constructor);\n  else NATIVE_ARRAY_BUFFER_VIEWS = false;\n}\n\nfor (NAME in BigIntArrayConstructorsList) {\n  Constructor = global[NAME];\n  Prototype = Constructor && Constructor.prototype;\n  if (Prototype) createNonEnumerableProperty(Prototype, TYPED_ARRAY_CONSTRUCTOR, Constructor);\n}\n\n// WebKit bug - typed arrays constructors prototype is Object.prototype\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !isCallable(TypedArray) || TypedArray === Function.prototype) {\n  // eslint-disable-next-line no-shadow -- safe\n  TypedArray = function TypedArray() {\n    throw TypeError('Incorrect invocation');\n  };\n  if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n    if (global[NAME]) setPrototypeOf(global[NAME], TypedArray);\n  }\n}\n\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !TypedArrayPrototype || TypedArrayPrototype === ObjectPrototype) {\n  TypedArrayPrototype = TypedArray.prototype;\n  if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n    if (global[NAME]) setPrototypeOf(global[NAME].prototype, TypedArrayPrototype);\n  }\n}\n\n// WebKit bug - one more object in Uint8ClampedArray prototype chain\nif (NATIVE_ARRAY_BUFFER_VIEWS && getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype) {\n  setPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype);\n}\n\nif (DESCRIPTORS && !hasOwn(TypedArrayPrototype, TO_STRING_TAG)) {\n  TYPED_ARRAY_TAG_REQIRED = true;\n  defineProperty(TypedArrayPrototype, TO_STRING_TAG, { get: function () {\n    return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined;\n  } });\n  for (NAME in TypedArrayConstructorsList) if (global[NAME]) {\n    createNonEnumerableProperty(global[NAME], TYPED_ARRAY_TAG, NAME);\n  }\n}\n\nmodule.exports = {\n  NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS,\n  TYPED_ARRAY_CONSTRUCTOR: TYPED_ARRAY_CONSTRUCTOR,\n  TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQIRED && TYPED_ARRAY_TAG,\n  aTypedArray: aTypedArray,\n  aTypedArrayConstructor: aTypedArrayConstructor,\n  exportTypedArrayMethod: exportTypedArrayMethod,\n  exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,\n  isView: isView,\n  isTypedArray: isTypedArray,\n  TypedArray: TypedArray,\n  TypedArrayPrototype: TypedArrayPrototype\n};\n","'use strict';\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-native');\nvar FunctionName = require('../internals/function-name');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefineAll = require('../internals/redefine-all');\nvar fails = require('../internals/fails');\nvar anInstance = require('../internals/an-instance');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toLength = require('../internals/to-length');\nvar toIndex = require('../internals/to-index');\nvar IEEE754 = require('../internals/ieee754');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar defineProperty = require('../internals/object-define-property').f;\nvar arrayFill = require('../internals/array-fill');\nvar arraySlice = require('../internals/array-slice');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length';\nvar WRONG_INDEX = 'Wrong index';\nvar NativeArrayBuffer = global[ARRAY_BUFFER];\nvar $ArrayBuffer = NativeArrayBuffer;\nvar ArrayBufferPrototype = $ArrayBuffer && $ArrayBuffer[PROTOTYPE];\nvar $DataView = global[DATA_VIEW];\nvar DataViewPrototype = $DataView && $DataView[PROTOTYPE];\nvar ObjectPrototype = Object.prototype;\nvar Array = global.Array;\nvar RangeError = global.RangeError;\nvar fill = uncurryThis(arrayFill);\nvar reverse = uncurryThis([].reverse);\n\nvar packIEEE754 = IEEE754.pack;\nvar unpackIEEE754 = IEEE754.unpack;\n\nvar packInt8 = function (number) {\n  return [number & 0xFF];\n};\n\nvar packInt16 = function (number) {\n  return [number & 0xFF, number >> 8 & 0xFF];\n};\n\nvar packInt32 = function (number) {\n  return [number & 0xFF, number >> 8 & 0xFF, number >> 16 & 0xFF, number >> 24 & 0xFF];\n};\n\nvar unpackInt32 = function (buffer) {\n  return buffer[3] << 24 | buffer[2] << 16 | buffer[1] << 8 | buffer[0];\n};\n\nvar packFloat32 = function (number) {\n  return packIEEE754(number, 23, 4);\n};\n\nvar packFloat64 = function (number) {\n  return packIEEE754(number, 52, 8);\n};\n\nvar addGetter = function (Constructor, key) {\n  defineProperty(Constructor[PROTOTYPE], key, { get: function () { return getInternalState(this)[key]; } });\n};\n\nvar get = function (view, count, index, isLittleEndian) {\n  var intIndex = toIndex(index);\n  var store = getInternalState(view);\n  if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);\n  var bytes = getInternalState(store.buffer).bytes;\n  var start = intIndex + store.byteOffset;\n  var pack = arraySlice(bytes, start, start + count);\n  return isLittleEndian ? pack : reverse(pack);\n};\n\nvar set = function (view, count, index, conversion, value, isLittleEndian) {\n  var intIndex = toIndex(index);\n  var store = getInternalState(view);\n  if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);\n  var bytes = getInternalState(store.buffer).bytes;\n  var start = intIndex + store.byteOffset;\n  var pack = conversion(+value);\n  for (var i = 0; i < count; i++) bytes[start + i] = pack[isLittleEndian ? i : count - i - 1];\n};\n\nif (!NATIVE_ARRAY_BUFFER) {\n  $ArrayBuffer = function ArrayBuffer(length) {\n    anInstance(this, ArrayBufferPrototype);\n    var byteLength = toIndex(length);\n    setInternalState(this, {\n      bytes: fill(Array(byteLength), 0),\n      byteLength: byteLength\n    });\n    if (!DESCRIPTORS) this.byteLength = byteLength;\n  };\n\n  ArrayBufferPrototype = $ArrayBuffer[PROTOTYPE];\n\n  $DataView = function DataView(buffer, byteOffset, byteLength) {\n    anInstance(this, DataViewPrototype);\n    anInstance(buffer, ArrayBufferPrototype);\n    var bufferLength = getInternalState(buffer).byteLength;\n    var offset = toIntegerOrInfinity(byteOffset);\n    if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset');\n    byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n    if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n    setInternalState(this, {\n      buffer: buffer,\n      byteLength: byteLength,\n      byteOffset: offset\n    });\n    if (!DESCRIPTORS) {\n      this.buffer = buffer;\n      this.byteLength = byteLength;\n      this.byteOffset = offset;\n    }\n  };\n\n  DataViewPrototype = $DataView[PROTOTYPE];\n\n  if (DESCRIPTORS) {\n    addGetter($ArrayBuffer, 'byteLength');\n    addGetter($DataView, 'buffer');\n    addGetter($DataView, 'byteLength');\n    addGetter($DataView, 'byteOffset');\n  }\n\n  redefineAll(DataViewPrototype, {\n    getInt8: function getInt8(byteOffset) {\n      return get(this, 1, byteOffset)[0] << 24 >> 24;\n    },\n    getUint8: function getUint8(byteOffset) {\n      return get(this, 1, byteOffset)[0];\n    },\n    getInt16: function getInt16(byteOffset /* , littleEndian */) {\n      var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);\n      return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n    },\n    getUint16: function getUint16(byteOffset /* , littleEndian */) {\n      var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);\n      return bytes[1] << 8 | bytes[0];\n    },\n    getInt32: function getInt32(byteOffset /* , littleEndian */) {\n      return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined));\n    },\n    getUint32: function getUint32(byteOffset /* , littleEndian */) {\n      return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined)) >>> 0;\n    },\n    getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n      return unpackIEEE754(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 23);\n    },\n    getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n      return unpackIEEE754(get(this, 8, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 52);\n    },\n    setInt8: function setInt8(byteOffset, value) {\n      set(this, 1, byteOffset, packInt8, value);\n    },\n    setUint8: function setUint8(byteOffset, value) {\n      set(this, 1, byteOffset, packInt8, value);\n    },\n    setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n      set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n      set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n      set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n      set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n      set(this, 4, byteOffset, packFloat32, value, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n      set(this, 8, byteOffset, packFloat64, value, arguments.length > 2 ? arguments[2] : undefined);\n    }\n  });\n} else {\n  var INCORRECT_ARRAY_BUFFER_NAME = PROPER_FUNCTION_NAME && NativeArrayBuffer.name !== ARRAY_BUFFER;\n  /* eslint-disable no-new -- required for testing */\n  if (!fails(function () {\n    NativeArrayBuffer(1);\n  }) || !fails(function () {\n    new NativeArrayBuffer(-1);\n  }) || fails(function () {\n    new NativeArrayBuffer();\n    new NativeArrayBuffer(1.5);\n    new NativeArrayBuffer(NaN);\n    return INCORRECT_ARRAY_BUFFER_NAME && !CONFIGURABLE_FUNCTION_NAME;\n  })) {\n  /* eslint-enable no-new -- required for testing */\n    $ArrayBuffer = function ArrayBuffer(length) {\n      anInstance(this, ArrayBufferPrototype);\n      return new NativeArrayBuffer(toIndex(length));\n    };\n\n    $ArrayBuffer[PROTOTYPE] = ArrayBufferPrototype;\n\n    for (var keys = getOwnPropertyNames(NativeArrayBuffer), j = 0, key; keys.length > j;) {\n      if (!((key = keys[j++]) in $ArrayBuffer)) {\n        createNonEnumerableProperty($ArrayBuffer, key, NativeArrayBuffer[key]);\n      }\n    }\n\n    ArrayBufferPrototype.constructor = $ArrayBuffer;\n  } else if (INCORRECT_ARRAY_BUFFER_NAME && CONFIGURABLE_FUNCTION_NAME) {\n    createNonEnumerableProperty(NativeArrayBuffer, 'name', ARRAY_BUFFER);\n  }\n\n  // WebKit bug - the same parent prototype for typed arrays and data view\n  if (setPrototypeOf && getPrototypeOf(DataViewPrototype) !== ObjectPrototype) {\n    setPrototypeOf(DataViewPrototype, ObjectPrototype);\n  }\n\n  // iOS Safari 7.x bug\n  var testView = new $DataView(new $ArrayBuffer(2));\n  var $setInt8 = uncurryThis(DataViewPrototype.setInt8);\n  testView.setInt8(0, 2147483648);\n  testView.setInt8(1, 2147483649);\n  if (testView.getInt8(0) || !testView.getInt8(1)) redefineAll(DataViewPrototype, {\n    setInt8: function setInt8(byteOffset, value) {\n      $setInt8(this, byteOffset, value << 24 >> 24);\n    },\n    setUint8: function setUint8(byteOffset, value) {\n      $setInt8(this, byteOffset, value << 24 >> 24);\n    }\n  }, { unsafe: true });\n}\n\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\n\nmodule.exports = {\n  ArrayBuffer: $ArrayBuffer,\n  DataView: $DataView\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar arrayBufferModule = require('../internals/array-buffer');\nvar setSpecies = require('../internals/set-species');\n\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar ArrayBuffer = arrayBufferModule[ARRAY_BUFFER];\nvar NativeArrayBuffer = global[ARRAY_BUFFER];\n\n// `ArrayBuffer` constructor\n// https://tc39.es/ecma262/#sec-arraybuffer-constructor\n$({ global: true, forced: NativeArrayBuffer !== ArrayBuffer }, {\n  ArrayBuffer: ArrayBuffer\n});\n\nsetSpecies(ARRAY_BUFFER);\n",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_lib = C.lib;\n\t    var BlockCipher = C_lib.BlockCipher;\n\t    var C_algo = C.algo;\n\n\t    // Lookup tables\n\t    var SBOX = [];\n\t    var INV_SBOX = [];\n\t    var SUB_MIX_0 = [];\n\t    var SUB_MIX_1 = [];\n\t    var SUB_MIX_2 = [];\n\t    var SUB_MIX_3 = [];\n\t    var INV_SUB_MIX_0 = [];\n\t    var INV_SUB_MIX_1 = [];\n\t    var INV_SUB_MIX_2 = [];\n\t    var INV_SUB_MIX_3 = [];\n\n\t    // Compute lookup tables\n\t    (function () {\n\t        // Compute double table\n\t        var d = [];\n\t        for (var i = 0; i < 256; i++) {\n\t            if (i < 128) {\n\t                d[i] = i << 1;\n\t            } else {\n\t                d[i] = (i << 1) ^ 0x11b;\n\t            }\n\t        }\n\n\t        // Walk GF(2^8)\n\t        var x = 0;\n\t        var xi = 0;\n\t        for (var i = 0; i < 256; i++) {\n\t            // Compute sbox\n\t            var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);\n\t            sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;\n\t            SBOX[x] = sx;\n\t            INV_SBOX[sx] = x;\n\n\t            // Compute multiplication\n\t            var x2 = d[x];\n\t            var x4 = d[x2];\n\t            var x8 = d[x4];\n\n\t            // Compute sub bytes, mix columns tables\n\t            var t = (d[sx] * 0x101) ^ (sx * 0x1010100);\n\t            SUB_MIX_0[x] = (t << 24) | (t >>> 8);\n\t            SUB_MIX_1[x] = (t << 16) | (t >>> 16);\n\t            SUB_MIX_2[x] = (t << 8)  | (t >>> 24);\n\t            SUB_MIX_3[x] = t;\n\n\t            // Compute inv sub bytes, inv mix columns tables\n\t            var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);\n\t            INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);\n\t            INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);\n\t            INV_SUB_MIX_2[sx] = (t << 8)  | (t >>> 24);\n\t            INV_SUB_MIX_3[sx] = t;\n\n\t            // Compute next counter\n\t            if (!x) {\n\t                x = xi = 1;\n\t            } else {\n\t                x = x2 ^ d[d[d[x8 ^ x2]]];\n\t                xi ^= d[d[xi]];\n\t            }\n\t        }\n\t    }());\n\n\t    // Precomputed Rcon lookup\n\t    var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\n\t    /**\n\t     * AES block cipher algorithm.\n\t     */\n\t    var AES = C_algo.AES = BlockCipher.extend({\n\t        _doReset: function () {\n\t            var t;\n\n\t            // Skip reset of nRounds has been set before and key did not change\n\t            if (this._nRounds && this._keyPriorReset === this._key) {\n\t                return;\n\t            }\n\n\t            // Shortcuts\n\t            var key = this._keyPriorReset = this._key;\n\t            var keyWords = key.words;\n\t            var keySize = key.sigBytes / 4;\n\n\t            // Compute number of rounds\n\t            var nRounds = this._nRounds = keySize + 6;\n\n\t            // Compute number of key schedule rows\n\t            var ksRows = (nRounds + 1) * 4;\n\n\t            // Compute key schedule\n\t            var keySchedule = this._keySchedule = [];\n\t            for (var ksRow = 0; ksRow < ksRows; ksRow++) {\n\t                if (ksRow < keySize) {\n\t                    keySchedule[ksRow] = keyWords[ksRow];\n\t                } else {\n\t                    t = keySchedule[ksRow - 1];\n\n\t                    if (!(ksRow % keySize)) {\n\t                        // Rot word\n\t                        t = (t << 8) | (t >>> 24);\n\n\t                        // Sub word\n\t                        t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\n\t                        // Mix Rcon\n\t                        t ^= RCON[(ksRow / keySize) | 0] << 24;\n\t                    } else if (keySize > 6 && ksRow % keySize == 4) {\n\t                        // Sub word\n\t                        t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\t                    }\n\n\t                    keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n\t                }\n\t            }\n\n\t            // Compute inv key schedule\n\t            var invKeySchedule = this._invKeySchedule = [];\n\t            for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n\t                var ksRow = ksRows - invKsRow;\n\n\t                if (invKsRow % 4) {\n\t                    var t = keySchedule[ksRow];\n\t                } else {\n\t                    var t = keySchedule[ksRow - 4];\n\t                }\n\n\t                if (invKsRow < 4 || ksRow <= 4) {\n\t                    invKeySchedule[invKsRow] = t;\n\t                } else {\n\t                    invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^\n\t                                               INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\n\t                }\n\t            }\n\t        },\n\n\t        encryptBlock: function (M, offset) {\n\t            this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\n\t        },\n\n\t        decryptBlock: function (M, offset) {\n\t            // Swap 2nd and 4th rows\n\t            var t = M[offset + 1];\n\t            M[offset + 1] = M[offset + 3];\n\t            M[offset + 3] = t;\n\n\t            this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);\n\n\t            // Inv swap 2nd and 4th rows\n\t            var t = M[offset + 1];\n\t            M[offset + 1] = M[offset + 3];\n\t            M[offset + 3] = t;\n\t        },\n\n\t        _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n\t            // Shortcut\n\t            var nRounds = this._nRounds;\n\n\t            // Get input, add round key\n\t            var s0 = M[offset]     ^ keySchedule[0];\n\t            var s1 = M[offset + 1] ^ keySchedule[1];\n\t            var s2 = M[offset + 2] ^ keySchedule[2];\n\t            var s3 = M[offset + 3] ^ keySchedule[3];\n\n\t            // Key schedule row counter\n\t            var ksRow = 4;\n\n\t            // Rounds\n\t            for (var round = 1; round < nRounds; round++) {\n\t                // Shift rows, sub bytes, mix columns, add round key\n\t                var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\n\t                var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\n\t                var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\n\t                var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];\n\n\t                // Update state\n\t                s0 = t0;\n\t                s1 = t1;\n\t                s2 = t2;\n\t                s3 = t3;\n\t            }\n\n\t            // Shift rows, sub bytes, add round key\n\t            var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n\t            var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n\t            var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n\t            var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n\n\t            // Set output\n\t            M[offset]     = t0;\n\t            M[offset + 1] = t1;\n\t            M[offset + 2] = t2;\n\t            M[offset + 3] = t3;\n\t        },\n\n\t        keySize: 256/32\n\t    });\n\n\t    /**\n\t     * Shortcut functions to the cipher's object interface.\n\t     *\n\t     * @example\n\t     *\n\t     *     var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n\t     *     var plaintext  = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n\t     */\n\t    C.AES = BlockCipher._createHelper(AES);\n\t}());\n\n\n\treturn CryptoJS.AES;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_lib = C.lib;\n\t    var BlockCipher = C_lib.BlockCipher;\n\t    var C_algo = C.algo;\n\n\t    const N = 16;\n\n\t    //Origin pbox and sbox, derived from PI\n\t    const ORIG_P = [\n\t        0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344,\n\t        0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89,\n\t        0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C,\n\t        0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917,\n\t        0x9216D5D9, 0x8979FB1B\n\t    ];\n\n\t    const ORIG_S = [\n\t        [   0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7,\n\t            0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99,\n\t            0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16,\n\t            0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E,\n\t            0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE,\n\t            0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013,\n\t            0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF,\n\t            0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E,\n\t            0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60,\n\t            0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440,\n\t            0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE,\n\t            0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A,\n\t            0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E,\n\t            0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677,\n\t            0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193,\n\t            0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032,\n\t            0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88,\n\t            0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239,\n\t            0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E,\n\t            0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0,\n\t            0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3,\n\t            0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98,\n\t            0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88,\n\t            0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE,\n\t            0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6,\n\t            0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D,\n\t            0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B,\n\t            0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7,\n\t            0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA,\n\t            0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463,\n\t            0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F,\n\t            0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09,\n\t            0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3,\n\t            0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB,\n\t            0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279,\n\t            0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8,\n\t            0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB,\n\t            0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82,\n\t            0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB,\n\t            0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573,\n\t            0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0,\n\t            0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B,\n\t            0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790,\n\t            0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8,\n\t            0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4,\n\t            0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0,\n\t            0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7,\n\t            0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C,\n\t            0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD,\n\t            0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1,\n\t            0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299,\n\t            0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9,\n\t            0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477,\n\t            0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF,\n\t            0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49,\n\t            0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF,\n\t            0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA,\n\t            0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5,\n\t            0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41,\n\t            0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915,\n\t            0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400,\n\t            0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915,\n\t            0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664,\n\t            0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A   ],\n\t        [   0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623,\n\t            0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266,\n\t            0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1,\n\t            0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E,\n\t            0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6,\n\t            0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1,\n\t            0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E,\n\t            0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1,\n\t            0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737,\n\t            0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8,\n\t            0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF,\n\t            0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD,\n\t            0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701,\n\t            0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7,\n\t            0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41,\n\t            0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331,\n\t            0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF,\n\t            0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF,\n\t            0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E,\n\t            0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87,\n\t            0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C,\n\t            0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2,\n\t            0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16,\n\t            0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD,\n\t            0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B,\n\t            0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509,\n\t            0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E,\n\t            0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3,\n\t            0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F,\n\t            0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A,\n\t            0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4,\n\t            0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960,\n\t            0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66,\n\t            0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28,\n\t            0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802,\n\t            0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84,\n\t            0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510,\n\t            0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF,\n\t            0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14,\n\t            0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E,\n\t            0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50,\n\t            0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7,\n\t            0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8,\n\t            0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281,\n\t            0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99,\n\t            0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696,\n\t            0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128,\n\t            0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73,\n\t            0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0,\n\t            0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0,\n\t            0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105,\n\t            0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250,\n\t            0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3,\n\t            0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285,\n\t            0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00,\n\t            0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061,\n\t            0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB,\n\t            0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E,\n\t            0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735,\n\t            0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC,\n\t            0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9,\n\t            0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340,\n\t            0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20,\n\t            0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7   ],\n\t        [   0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934,\n\t            0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068,\n\t            0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF,\n\t            0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840,\n\t            0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45,\n\t            0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504,\n\t            0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A,\n\t            0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB,\n\t            0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE,\n\t            0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6,\n\t            0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42,\n\t            0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B,\n\t            0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2,\n\t            0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB,\n\t            0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527,\n\t            0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B,\n\t            0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33,\n\t            0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C,\n\t            0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3,\n\t            0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC,\n\t            0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17,\n\t            0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564,\n\t            0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B,\n\t            0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115,\n\t            0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922,\n\t            0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728,\n\t            0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0,\n\t            0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E,\n\t            0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37,\n\t            0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D,\n\t            0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804,\n\t            0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B,\n\t            0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3,\n\t            0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB,\n\t            0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D,\n\t            0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C,\n\t            0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350,\n\t            0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9,\n\t            0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A,\n\t            0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE,\n\t            0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D,\n\t            0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC,\n\t            0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F,\n\t            0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61,\n\t            0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2,\n\t            0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9,\n\t            0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2,\n\t            0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C,\n\t            0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E,\n\t            0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633,\n\t            0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10,\n\t            0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169,\n\t            0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52,\n\t            0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027,\n\t            0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5,\n\t            0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62,\n\t            0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634,\n\t            0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76,\n\t            0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24,\n\t            0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC,\n\t            0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4,\n\t            0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C,\n\t            0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837,\n\t            0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0  ],\n\t        [   0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B,\n\t            0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE,\n\t            0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B,\n\t            0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4,\n\t            0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8,\n\t            0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6,\n\t            0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304,\n\t            0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22,\n\t            0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4,\n\t            0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6,\n\t            0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9,\n\t            0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59,\n\t            0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593,\n\t            0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51,\n\t            0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28,\n\t            0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C,\n\t            0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B,\n\t            0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28,\n\t            0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C,\n\t            0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD,\n\t            0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A,\n\t            0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319,\n\t            0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB,\n\t            0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F,\n\t            0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991,\n\t            0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32,\n\t            0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680,\n\t            0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166,\n\t            0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE,\n\t            0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB,\n\t            0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5,\n\t            0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47,\n\t            0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370,\n\t            0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D,\n\t            0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84,\n\t            0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048,\n\t            0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8,\n\t            0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD,\n\t            0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9,\n\t            0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7,\n\t            0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38,\n\t            0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F,\n\t            0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C,\n\t            0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525,\n\t            0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1,\n\t            0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442,\n\t            0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964,\n\t            0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E,\n\t            0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8,\n\t            0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D,\n\t            0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F,\n\t            0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299,\n\t            0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02,\n\t            0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC,\n\t            0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614,\n\t            0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A,\n\t            0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6,\n\t            0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B,\n\t            0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0,\n\t            0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060,\n\t            0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E,\n\t            0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9,\n\t            0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F,\n\t            0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6  ]\n\t    ];\n\n\t    var BLOWFISH_CTX = {\n\t        pbox: [],\n\t        sbox: []\n\t    }\n\n\t    function F(ctx, x){\n\t        let a = (x >> 24) & 0xFF;\n\t        let b = (x >> 16) & 0xFF;\n\t        let c = (x >> 8) & 0xFF;\n\t        let d = x & 0xFF;\n\n\t        let y = ctx.sbox[0][a] + ctx.sbox[1][b];\n\t        y = y ^ ctx.sbox[2][c];\n\t        y = y + ctx.sbox[3][d];\n\n\t        return y;\n\t    }\n\n\t    function BlowFish_Encrypt(ctx, left, right){\n\t        let Xl = left;\n\t        let Xr = right;\n\t        let temp;\n\n\t        for(let i = 0; i < N; ++i){\n\t            Xl = Xl ^ ctx.pbox[i];\n\t            Xr = F(ctx, Xl) ^ Xr;\n\n\t            temp = Xl;\n\t            Xl = Xr;\n\t            Xr = temp;\n\t        }\n\n\t        temp = Xl;\n\t        Xl = Xr;\n\t        Xr = temp;\n\n\t        Xr = Xr ^ ctx.pbox[N];\n\t        Xl = Xl ^ ctx.pbox[N + 1];\n\n\t        return {left: Xl, right: Xr};\n\t    }\n\n\t    function BlowFish_Decrypt(ctx, left, right){\n\t        let Xl = left;\n\t        let Xr = right;\n\t        let temp;\n\n\t        for(let i = N + 1; i > 1; --i){\n\t            Xl = Xl ^ ctx.pbox[i];\n\t            Xr = F(ctx, Xl) ^ Xr;\n\n\t            temp = Xl;\n\t            Xl = Xr;\n\t            Xr = temp;\n\t        }\n\n\t        temp = Xl;\n\t        Xl = Xr;\n\t        Xr = temp;\n\n\t        Xr = Xr ^ ctx.pbox[1];\n\t        Xl = Xl ^ ctx.pbox[0];\n\n\t        return {left: Xl, right: Xr};\n\t    }\n\n\t    /**\n\t     * Initialization ctx's pbox and sbox.\n\t     *\n\t     * @param {Object} ctx The object has pbox and sbox.\n\t     * @param {Array} key An array of 32-bit words.\n\t     * @param {int} keysize The length of the key.\n\t     *\n\t     * @example\n\t     *\n\t     *     BlowFishInit(BLOWFISH_CTX, key, 128/32);\n\t     */\n\t    function BlowFishInit(ctx, key, keysize)\n\t    {\n\t        for(let Row = 0; Row < 4; Row++)\n\t        {\n\t            ctx.sbox[Row] = [];\n\t            for(let Col = 0; Col < 256; Col++)\n\t            {\n\t                ctx.sbox[Row][Col] = ORIG_S[Row][Col];\n\t            }\n\t        }\n\n\t        let keyIndex = 0;\n\t        for(let index = 0; index < N + 2; index++)\n\t        {\n\t            ctx.pbox[index] = ORIG_P[index] ^ key[keyIndex];\n\t            keyIndex++;\n\t            if(keyIndex >= keysize)\n\t            {\n\t                keyIndex = 0;\n\t            }\n\t        }\n\n\t        let Data1 = 0;\n\t        let Data2 = 0;\n\t        let res = 0;\n\t        for(let i = 0; i < N + 2; i += 2)\n\t        {\n\t            res = BlowFish_Encrypt(ctx, Data1, Data2);\n\t            Data1 = res.left;\n\t            Data2 = res.right;\n\t            ctx.pbox[i] = Data1;\n\t            ctx.pbox[i + 1] = Data2;\n\t        }\n\n\t        for(let i = 0; i < 4; i++)\n\t        {\n\t            for(let j = 0; j < 256; j += 2)\n\t            {\n\t                res = BlowFish_Encrypt(ctx, Data1, Data2);\n\t                Data1 = res.left;\n\t                Data2 = res.right;\n\t                ctx.sbox[i][j] = Data1;\n\t                ctx.sbox[i][j + 1] = Data2;\n\t            }\n\t        }\n\n\t        return true;\n\t    }\n\n\t    /**\n\t     * Blowfish block cipher algorithm.\n\t     */\n\t    var Blowfish = C_algo.Blowfish = BlockCipher.extend({\n\t        _doReset: function () {\n\t            // Skip reset of nRounds has been set before and key did not change\n\t            if (this._keyPriorReset === this._key) {\n\t                return;\n\t            }\n\n\t            // Shortcuts\n\t            var key = this._keyPriorReset = this._key;\n\t            var keyWords = key.words;\n\t            var keySize = key.sigBytes / 4;\n\n\t            //Initialization pbox and sbox\n\t            BlowFishInit(BLOWFISH_CTX, keyWords, keySize);\n\t        },\n\n\t        encryptBlock: function (M, offset) {\n\t            var res = BlowFish_Encrypt(BLOWFISH_CTX, M[offset], M[offset + 1]);\n\t            M[offset] = res.left;\n\t            M[offset + 1] = res.right;\n\t        },\n\n\t        decryptBlock: function (M, offset) {\n\t            var res = BlowFish_Decrypt(BLOWFISH_CTX, M[offset], M[offset + 1]);\n\t            M[offset] = res.left;\n\t            M[offset + 1] = res.right;\n\t        },\n\n\t        blockSize: 64/32,\n\n\t        keySize: 128/32,\n\n\t        ivSize: 64/32\n\t    });\n\n\t    /**\n\t     * Shortcut functions to the cipher's object interface.\n\t     *\n\t     * @example\n\t     *\n\t     *     var ciphertext = CryptoJS.Blowfish.encrypt(message, key, cfg);\n\t     *     var plaintext  = CryptoJS.Blowfish.decrypt(ciphertext, key, cfg);\n\t     */\n\t    C.Blowfish = BlockCipher._createHelper(Blowfish);\n\t}());\n\n\n\treturn CryptoJS.Blowfish;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./evpkdf\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./evpkdf\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher core components.\n\t */\n\tCryptoJS.lib.Cipher || (function (undefined) {\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_lib = C.lib;\n\t    var Base = C_lib.Base;\n\t    var WordArray = C_lib.WordArray;\n\t    var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\n\t    var C_enc = C.enc;\n\t    var Utf8 = C_enc.Utf8;\n\t    var Base64 = C_enc.Base64;\n\t    var C_algo = C.algo;\n\t    var EvpKDF = C_algo.EvpKDF;\n\n\t    /**\n\t     * Abstract base cipher template.\n\t     *\n\t     * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n\t     * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n\t     * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n\t     * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n\t     */\n\t    var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\n\t        /**\n\t         * Configuration options.\n\t         *\n\t         * @property {WordArray} iv The IV to use for this operation.\n\t         */\n\t        cfg: Base.extend(),\n\n\t        /**\n\t         * Creates this cipher in encryption mode.\n\t         *\n\t         * @param {WordArray} key The key.\n\t         * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t         *\n\t         * @return {Cipher} A cipher instance.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n\t         */\n\t        createEncryptor: function (key, cfg) {\n\t            return this.create(this._ENC_XFORM_MODE, key, cfg);\n\t        },\n\n\t        /**\n\t         * Creates this cipher in decryption mode.\n\t         *\n\t         * @param {WordArray} key The key.\n\t         * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t         *\n\t         * @return {Cipher} A cipher instance.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n\t         */\n\t        createDecryptor: function (key, cfg) {\n\t            return this.create(this._DEC_XFORM_MODE, key, cfg);\n\t        },\n\n\t        /**\n\t         * Initializes a newly created cipher.\n\t         *\n\t         * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n\t         * @param {WordArray} key The key.\n\t         * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t         *\n\t         * @example\n\t         *\n\t         *     var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\n\t         */\n\t        init: function (xformMode, key, cfg) {\n\t            // Apply config defaults\n\t            this.cfg = this.cfg.extend(cfg);\n\n\t            // Store transform mode and key\n\t            this._xformMode = xformMode;\n\t            this._key = key;\n\n\t            // Set initial values\n\t            this.reset();\n\t        },\n\n\t        /**\n\t         * Resets this cipher to its initial state.\n\t         *\n\t         * @example\n\t         *\n\t         *     cipher.reset();\n\t         */\n\t        reset: function () {\n\t            // Reset data buffer\n\t            BufferedBlockAlgorithm.reset.call(this);\n\n\t            // Perform concrete-cipher logic\n\t            this._doReset();\n\t        },\n\n\t        /**\n\t         * Adds data to be encrypted or decrypted.\n\t         *\n\t         * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n\t         *\n\t         * @return {WordArray} The data after processing.\n\t         *\n\t         * @example\n\t         *\n\t         *     var encrypted = cipher.process('data');\n\t         *     var encrypted = cipher.process(wordArray);\n\t         */\n\t        process: function (dataUpdate) {\n\t            // Append\n\t            this._append(dataUpdate);\n\n\t            // Process available blocks\n\t            return this._process();\n\t        },\n\n\t        /**\n\t         * Finalizes the encryption or decryption process.\n\t         * Note that the finalize operation is effectively a destructive, read-once operation.\n\t         *\n\t         * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n\t         *\n\t         * @return {WordArray} The data after final processing.\n\t         *\n\t         * @example\n\t         *\n\t         *     var encrypted = cipher.finalize();\n\t         *     var encrypted = cipher.finalize('data');\n\t         *     var encrypted = cipher.finalize(wordArray);\n\t         */\n\t        finalize: function (dataUpdate) {\n\t            // Final data update\n\t            if (dataUpdate) {\n\t                this._append(dataUpdate);\n\t            }\n\n\t            // Perform concrete-cipher logic\n\t            var finalProcessedData = this._doFinalize();\n\n\t            return finalProcessedData;\n\t        },\n\n\t        keySize: 128/32,\n\n\t        ivSize: 128/32,\n\n\t        _ENC_XFORM_MODE: 1,\n\n\t        _DEC_XFORM_MODE: 2,\n\n\t        /**\n\t         * Creates shortcut functions to a cipher's object interface.\n\t         *\n\t         * @param {Cipher} cipher The cipher to create a helper for.\n\t         *\n\t         * @return {Object} An object with encrypt and decrypt shortcut functions.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n\t         */\n\t        _createHelper: (function () {\n\t            function selectCipherStrategy(key) {\n\t                if (typeof key == 'string') {\n\t                    return PasswordBasedCipher;\n\t                } else {\n\t                    return SerializableCipher;\n\t                }\n\t            }\n\n\t            return function (cipher) {\n\t                return {\n\t                    encrypt: function (message, key, cfg) {\n\t                        return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\n\t                    },\n\n\t                    decrypt: function (ciphertext, key, cfg) {\n\t                        return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\n\t                    }\n\t                };\n\t            };\n\t        }())\n\t    });\n\n\t    /**\n\t     * Abstract base stream cipher template.\n\t     *\n\t     * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n\t     */\n\t    var StreamCipher = C_lib.StreamCipher = Cipher.extend({\n\t        _doFinalize: function () {\n\t            // Process partial blocks\n\t            var finalProcessedBlocks = this._process(!!'flush');\n\n\t            return finalProcessedBlocks;\n\t        },\n\n\t        blockSize: 1\n\t    });\n\n\t    /**\n\t     * Mode namespace.\n\t     */\n\t    var C_mode = C.mode = {};\n\n\t    /**\n\t     * Abstract base block cipher mode template.\n\t     */\n\t    var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\n\t        /**\n\t         * Creates this mode for encryption.\n\t         *\n\t         * @param {Cipher} cipher A block cipher instance.\n\t         * @param {Array} iv The IV words.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n\t         */\n\t        createEncryptor: function (cipher, iv) {\n\t            return this.Encryptor.create(cipher, iv);\n\t        },\n\n\t        /**\n\t         * Creates this mode for decryption.\n\t         *\n\t         * @param {Cipher} cipher A block cipher instance.\n\t         * @param {Array} iv The IV words.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n\t         */\n\t        createDecryptor: function (cipher, iv) {\n\t            return this.Decryptor.create(cipher, iv);\n\t        },\n\n\t        /**\n\t         * Initializes a newly created mode.\n\t         *\n\t         * @param {Cipher} cipher A block cipher instance.\n\t         * @param {Array} iv The IV words.\n\t         *\n\t         * @example\n\t         *\n\t         *     var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n\t         */\n\t        init: function (cipher, iv) {\n\t            this._cipher = cipher;\n\t            this._iv = iv;\n\t        }\n\t    });\n\n\t    /**\n\t     * Cipher Block Chaining mode.\n\t     */\n\t    var CBC = C_mode.CBC = (function () {\n\t        /**\n\t         * Abstract base CBC mode.\n\t         */\n\t        var CBC = BlockCipherMode.extend();\n\n\t        /**\n\t         * CBC encryptor.\n\t         */\n\t        CBC.Encryptor = CBC.extend({\n\t            /**\n\t             * Processes the data block at offset.\n\t             *\n\t             * @param {Array} words The data words to operate on.\n\t             * @param {number} offset The offset where the block starts.\n\t             *\n\t             * @example\n\t             *\n\t             *     mode.processBlock(data.words, offset);\n\t             */\n\t            processBlock: function (words, offset) {\n\t                // Shortcuts\n\t                var cipher = this._cipher;\n\t                var blockSize = cipher.blockSize;\n\n\t                // XOR and encrypt\n\t                xorBlock.call(this, words, offset, blockSize);\n\t                cipher.encryptBlock(words, offset);\n\n\t                // Remember this block to use with next block\n\t                this._prevBlock = words.slice(offset, offset + blockSize);\n\t            }\n\t        });\n\n\t        /**\n\t         * CBC decryptor.\n\t         */\n\t        CBC.Decryptor = CBC.extend({\n\t            /**\n\t             * Processes the data block at offset.\n\t             *\n\t             * @param {Array} words The data words to operate on.\n\t             * @param {number} offset The offset where the block starts.\n\t             *\n\t             * @example\n\t             *\n\t             *     mode.processBlock(data.words, offset);\n\t             */\n\t            processBlock: function (words, offset) {\n\t                // Shortcuts\n\t                var cipher = this._cipher;\n\t                var blockSize = cipher.blockSize;\n\n\t                // Remember this block to use with next block\n\t                var thisBlock = words.slice(offset, offset + blockSize);\n\n\t                // Decrypt and XOR\n\t                cipher.decryptBlock(words, offset);\n\t                xorBlock.call(this, words, offset, blockSize);\n\n\t                // This block becomes the previous block\n\t                this._prevBlock = thisBlock;\n\t            }\n\t        });\n\n\t        function xorBlock(words, offset, blockSize) {\n\t            var block;\n\n\t            // Shortcut\n\t            var iv = this._iv;\n\n\t            // Choose mixing block\n\t            if (iv) {\n\t                block = iv;\n\n\t                // Remove IV for subsequent blocks\n\t                this._iv = undefined;\n\t            } else {\n\t                block = this._prevBlock;\n\t            }\n\n\t            // XOR blocks\n\t            for (var i = 0; i < blockSize; i++) {\n\t                words[offset + i] ^= block[i];\n\t            }\n\t        }\n\n\t        return CBC;\n\t    }());\n\n\t    /**\n\t     * Padding namespace.\n\t     */\n\t    var C_pad = C.pad = {};\n\n\t    /**\n\t     * PKCS #5/7 padding strategy.\n\t     */\n\t    var Pkcs7 = C_pad.Pkcs7 = {\n\t        /**\n\t         * Pads data using the algorithm defined in PKCS #5/7.\n\t         *\n\t         * @param {WordArray} data The data to pad.\n\t         * @param {number} blockSize The multiple that the data should be padded to.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n\t         */\n\t        pad: function (data, blockSize) {\n\t            // Shortcut\n\t            var blockSizeBytes = blockSize * 4;\n\n\t            // Count padding bytes\n\t            var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t            // Create padding word\n\t            var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes;\n\n\t            // Create padding\n\t            var paddingWords = [];\n\t            for (var i = 0; i < nPaddingBytes; i += 4) {\n\t                paddingWords.push(paddingWord);\n\t            }\n\t            var padding = WordArray.create(paddingWords, nPaddingBytes);\n\n\t            // Add padding\n\t            data.concat(padding);\n\t        },\n\n\t        /**\n\t         * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n\t         *\n\t         * @param {WordArray} data The data to unpad.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     CryptoJS.pad.Pkcs7.unpad(wordArray);\n\t         */\n\t        unpad: function (data) {\n\t            // Get number of padding bytes from last byte\n\t            var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t            // Remove padding\n\t            data.sigBytes -= nPaddingBytes;\n\t        }\n\t    };\n\n\t    /**\n\t     * Abstract base block cipher template.\n\t     *\n\t     * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n\t     */\n\t    var BlockCipher = C_lib.BlockCipher = Cipher.extend({\n\t        /**\n\t         * Configuration options.\n\t         *\n\t         * @property {Mode} mode The block mode to use. Default: CBC\n\t         * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n\t         */\n\t        cfg: Cipher.cfg.extend({\n\t            mode: CBC,\n\t            padding: Pkcs7\n\t        }),\n\n\t        reset: function () {\n\t            var modeCreator;\n\n\t            // Reset cipher\n\t            Cipher.reset.call(this);\n\n\t            // Shortcuts\n\t            var cfg = this.cfg;\n\t            var iv = cfg.iv;\n\t            var mode = cfg.mode;\n\n\t            // Reset block mode\n\t            if (this._xformMode == this._ENC_XFORM_MODE) {\n\t                modeCreator = mode.createEncryptor;\n\t            } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t                modeCreator = mode.createDecryptor;\n\t                // Keep at least one block in the buffer for unpadding\n\t                this._minBufferSize = 1;\n\t            }\n\n\t            if (this._mode && this._mode.__creator == modeCreator) {\n\t                this._mode.init(this, iv && iv.words);\n\t            } else {\n\t                this._mode = modeCreator.call(mode, this, iv && iv.words);\n\t                this._mode.__creator = modeCreator;\n\t            }\n\t        },\n\n\t        _doProcessBlock: function (words, offset) {\n\t            this._mode.processBlock(words, offset);\n\t        },\n\n\t        _doFinalize: function () {\n\t            var finalProcessedBlocks;\n\n\t            // Shortcut\n\t            var padding = this.cfg.padding;\n\n\t            // Finalize\n\t            if (this._xformMode == this._ENC_XFORM_MODE) {\n\t                // Pad data\n\t                padding.pad(this._data, this.blockSize);\n\n\t                // Process final blocks\n\t                finalProcessedBlocks = this._process(!!'flush');\n\t            } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t                // Process final blocks\n\t                finalProcessedBlocks = this._process(!!'flush');\n\n\t                // Unpad data\n\t                padding.unpad(finalProcessedBlocks);\n\t            }\n\n\t            return finalProcessedBlocks;\n\t        },\n\n\t        blockSize: 128/32\n\t    });\n\n\t    /**\n\t     * A collection of cipher parameters.\n\t     *\n\t     * @property {WordArray} ciphertext The raw ciphertext.\n\t     * @property {WordArray} key The key to this ciphertext.\n\t     * @property {WordArray} iv The IV used in the ciphering operation.\n\t     * @property {WordArray} salt The salt used with a key derivation function.\n\t     * @property {Cipher} algorithm The cipher algorithm.\n\t     * @property {Mode} mode The block mode used in the ciphering operation.\n\t     * @property {Padding} padding The padding scheme used in the ciphering operation.\n\t     * @property {number} blockSize The block size of the cipher.\n\t     * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\n\t     */\n\t    var CipherParams = C_lib.CipherParams = Base.extend({\n\t        /**\n\t         * Initializes a newly created cipher params object.\n\t         *\n\t         * @param {Object} cipherParams An object with any of the possible cipher parameters.\n\t         *\n\t         * @example\n\t         *\n\t         *     var cipherParams = CryptoJS.lib.CipherParams.create({\n\t         *         ciphertext: ciphertextWordArray,\n\t         *         key: keyWordArray,\n\t         *         iv: ivWordArray,\n\t         *         salt: saltWordArray,\n\t         *         algorithm: CryptoJS.algo.AES,\n\t         *         mode: CryptoJS.mode.CBC,\n\t         *         padding: CryptoJS.pad.PKCS7,\n\t         *         blockSize: 4,\n\t         *         formatter: CryptoJS.format.OpenSSL\n\t         *     });\n\t         */\n\t        init: function (cipherParams) {\n\t            this.mixIn(cipherParams);\n\t        },\n\n\t        /**\n\t         * Converts this cipher params object to a string.\n\t         *\n\t         * @param {Format} formatter (Optional) The formatting strategy to use.\n\t         *\n\t         * @return {string} The stringified cipher params.\n\t         *\n\t         * @throws Error If neither the formatter nor the default formatter is set.\n\t         *\n\t         * @example\n\t         *\n\t         *     var string = cipherParams + '';\n\t         *     var string = cipherParams.toString();\n\t         *     var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n\t         */\n\t        toString: function (formatter) {\n\t            return (formatter || this.formatter).stringify(this);\n\t        }\n\t    });\n\n\t    /**\n\t     * Format namespace.\n\t     */\n\t    var C_format = C.format = {};\n\n\t    /**\n\t     * OpenSSL formatting strategy.\n\t     */\n\t    var OpenSSLFormatter = C_format.OpenSSL = {\n\t        /**\n\t         * Converts a cipher params object to an OpenSSL-compatible string.\n\t         *\n\t         * @param {CipherParams} cipherParams The cipher params object.\n\t         *\n\t         * @return {string} The OpenSSL-compatible string.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n\t         */\n\t        stringify: function (cipherParams) {\n\t            var wordArray;\n\n\t            // Shortcuts\n\t            var ciphertext = cipherParams.ciphertext;\n\t            var salt = cipherParams.salt;\n\n\t            // Format\n\t            if (salt) {\n\t                wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n\t            } else {\n\t                wordArray = ciphertext;\n\t            }\n\n\t            return wordArray.toString(Base64);\n\t        },\n\n\t        /**\n\t         * Converts an OpenSSL-compatible string to a cipher params object.\n\t         *\n\t         * @param {string} openSSLStr The OpenSSL-compatible string.\n\t         *\n\t         * @return {CipherParams} The cipher params object.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n\t         */\n\t        parse: function (openSSLStr) {\n\t            var salt;\n\n\t            // Parse base64\n\t            var ciphertext = Base64.parse(openSSLStr);\n\n\t            // Shortcut\n\t            var ciphertextWords = ciphertext.words;\n\n\t            // Test for salt\n\t            if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\n\t                // Extract salt\n\t                salt = WordArray.create(ciphertextWords.slice(2, 4));\n\n\t                // Remove salt from ciphertext\n\t                ciphertextWords.splice(0, 4);\n\t                ciphertext.sigBytes -= 16;\n\t            }\n\n\t            return CipherParams.create({ ciphertext: ciphertext, salt: salt });\n\t        }\n\t    };\n\n\t    /**\n\t     * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n\t     */\n\t    var SerializableCipher = C_lib.SerializableCipher = Base.extend({\n\t        /**\n\t         * Configuration options.\n\t         *\n\t         * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\n\t         */\n\t        cfg: Base.extend({\n\t            format: OpenSSLFormatter\n\t        }),\n\n\t        /**\n\t         * Encrypts a message.\n\t         *\n\t         * @param {Cipher} cipher The cipher algorithm to use.\n\t         * @param {WordArray|string} message The message to encrypt.\n\t         * @param {WordArray} key The key.\n\t         * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t         *\n\t         * @return {CipherParams} A cipher params object.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\n\t         *     var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n\t         *     var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t         */\n\t        encrypt: function (cipher, message, key, cfg) {\n\t            // Apply config defaults\n\t            cfg = this.cfg.extend(cfg);\n\n\t            // Encrypt\n\t            var encryptor = cipher.createEncryptor(key, cfg);\n\t            var ciphertext = encryptor.finalize(message);\n\n\t            // Shortcut\n\t            var cipherCfg = encryptor.cfg;\n\n\t            // Create and return serializable cipher params\n\t            return CipherParams.create({\n\t                ciphertext: ciphertext,\n\t                key: key,\n\t                iv: cipherCfg.iv,\n\t                algorithm: cipher,\n\t                mode: cipherCfg.mode,\n\t                padding: cipherCfg.padding,\n\t                blockSize: cipher.blockSize,\n\t                formatter: cfg.format\n\t            });\n\t        },\n\n\t        /**\n\t         * Decrypts serialized ciphertext.\n\t         *\n\t         * @param {Cipher} cipher The cipher algorithm to use.\n\t         * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t         * @param {WordArray} key The key.\n\t         * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t         *\n\t         * @return {WordArray} The plaintext.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t         *     var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t         */\n\t        decrypt: function (cipher, ciphertext, key, cfg) {\n\t            // Apply config defaults\n\t            cfg = this.cfg.extend(cfg);\n\n\t            // Convert string to CipherParams\n\t            ciphertext = this._parse(ciphertext, cfg.format);\n\n\t            // Decrypt\n\t            var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\n\n\t            return plaintext;\n\t        },\n\n\t        /**\n\t         * Converts serialized ciphertext to CipherParams,\n\t         * else assumed CipherParams already and returns ciphertext unchanged.\n\t         *\n\t         * @param {CipherParams|string} ciphertext The ciphertext.\n\t         * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n\t         *\n\t         * @return {CipherParams} The unserialized ciphertext.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\n\t         */\n\t        _parse: function (ciphertext, format) {\n\t            if (typeof ciphertext == 'string') {\n\t                return format.parse(ciphertext, this);\n\t            } else {\n\t                return ciphertext;\n\t            }\n\t        }\n\t    });\n\n\t    /**\n\t     * Key derivation function namespace.\n\t     */\n\t    var C_kdf = C.kdf = {};\n\n\t    /**\n\t     * OpenSSL key derivation function.\n\t     */\n\t    var OpenSSLKdf = C_kdf.OpenSSL = {\n\t        /**\n\t         * Derives a key and IV from a password.\n\t         *\n\t         * @param {string} password The password to derive from.\n\t         * @param {number} keySize The size in words of the key to generate.\n\t         * @param {number} ivSize The size in words of the IV to generate.\n\t         * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n\t         *\n\t         * @return {CipherParams} A cipher params object with the key, IV, and salt.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n\t         *     var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n\t         */\n\t        execute: function (password, keySize, ivSize, salt, hasher) {\n\t            // Generate random salt\n\t            if (!salt) {\n\t                salt = WordArray.random(64/8);\n\t            }\n\n\t            // Derive key and IV\n\t            if (!hasher) {\n\t                var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);\n\t            } else {\n\t                var key = EvpKDF.create({ keySize: keySize + ivSize, hasher: hasher }).compute(password, salt);\n\t            }\n\n\n\t            // Separate key and IV\n\t            var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n\t            key.sigBytes = keySize * 4;\n\n\t            // Return params\n\t            return CipherParams.create({ key: key, iv: iv, salt: salt });\n\t        }\n\t    };\n\n\t    /**\n\t     * A serializable cipher wrapper that derives the key from a password,\n\t     * and returns ciphertext as a serializable cipher params object.\n\t     */\n\t    var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\n\t        /**\n\t         * Configuration options.\n\t         *\n\t         * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\n\t         */\n\t        cfg: SerializableCipher.cfg.extend({\n\t            kdf: OpenSSLKdf\n\t        }),\n\n\t        /**\n\t         * Encrypts a message using a password.\n\t         *\n\t         * @param {Cipher} cipher The cipher algorithm to use.\n\t         * @param {WordArray|string} message The message to encrypt.\n\t         * @param {string} password The password.\n\t         * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t         *\n\t         * @return {CipherParams} A cipher params object.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\n\t         *     var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n\t         */\n\t        encrypt: function (cipher, message, password, cfg) {\n\t            // Apply config defaults\n\t            cfg = this.cfg.extend(cfg);\n\n\t            // Derive key and other params\n\t            var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, cfg.salt, cfg.hasher);\n\n\t            // Add IV to config\n\t            cfg.iv = derivedParams.iv;\n\n\t            // Encrypt\n\t            var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);\n\n\t            // Mix in derived params\n\t            ciphertext.mixIn(derivedParams);\n\n\t            return ciphertext;\n\t        },\n\n\t        /**\n\t         * Decrypts serialized ciphertext using a password.\n\t         *\n\t         * @param {Cipher} cipher The cipher algorithm to use.\n\t         * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t         * @param {string} password The password.\n\t         * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t         *\n\t         * @return {WordArray} The plaintext.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\n\t         *     var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\n\t         */\n\t        decrypt: function (cipher, ciphertext, password, cfg) {\n\t            // Apply config defaults\n\t            cfg = this.cfg.extend(cfg);\n\n\t            // Convert string to CipherParams\n\t            ciphertext = this._parse(ciphertext, cfg.format);\n\n\t            // Derive key and other params\n\t            var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt, cfg.hasher);\n\n\t            // Add IV to config\n\t            cfg.iv = derivedParams.iv;\n\n\t            // Decrypt\n\t            var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\n\n\t            return plaintext;\n\t        }\n\t    });\n\t}());\n\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/*globals window, global, require*/\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\n\t    var crypto;\n\n\t    // Native crypto from window (Browser)\n\t    if (typeof window !== 'undefined' && window.crypto) {\n\t        crypto = window.crypto;\n\t    }\n\n\t    // Native crypto in web worker (Browser)\n\t    if (typeof self !== 'undefined' && self.crypto) {\n\t        crypto = self.crypto;\n\t    }\n\n\t    // Native crypto from worker\n\t    if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n\t        crypto = globalThis.crypto;\n\t    }\n\n\t    // Native (experimental IE 11) crypto from window (Browser)\n\t    if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n\t        crypto = window.msCrypto;\n\t    }\n\n\t    // Native crypto from global (NodeJS)\n\t    if (!crypto && typeof global !== 'undefined' && global.crypto) {\n\t        crypto = global.crypto;\n\t    }\n\n\t    // Native crypto import via require (NodeJS)\n\t    if (!crypto && typeof require === 'function') {\n\t        try {\n\t            crypto = require('crypto');\n\t        } catch (err) {}\n\t    }\n\n\t    /*\n\t     * Cryptographically secure pseudorandom number generator\n\t     *\n\t     * As Math.random() is cryptographically not safe to use\n\t     */\n\t    var cryptoSecureRandomInt = function () {\n\t        if (crypto) {\n\t            // Use getRandomValues method (Browser)\n\t            if (typeof crypto.getRandomValues === 'function') {\n\t                try {\n\t                    return crypto.getRandomValues(new Uint32Array(1))[0];\n\t                } catch (err) {}\n\t            }\n\n\t            // Use randomBytes method (NodeJS)\n\t            if (typeof crypto.randomBytes === 'function') {\n\t                try {\n\t                    return crypto.randomBytes(4).readInt32LE();\n\t                } catch (err) {}\n\t            }\n\t        }\n\n\t        throw new Error('Native crypto module could not be used to get secure random number.');\n\t    };\n\n\t    /*\n\t     * Local polyfill of Object.create\n\n\t     */\n\t    var create = Object.create || (function () {\n\t        function F() {}\n\n\t        return function (obj) {\n\t            var subtype;\n\n\t            F.prototype = obj;\n\n\t            subtype = new F();\n\n\t            F.prototype = null;\n\n\t            return subtype;\n\t        };\n\t    }());\n\n\t    /**\n\t     * CryptoJS namespace.\n\t     */\n\t    var C = {};\n\n\t    /**\n\t     * Library namespace.\n\t     */\n\t    var C_lib = C.lib = {};\n\n\t    /**\n\t     * Base object for prototypal inheritance.\n\t     */\n\t    var Base = C_lib.Base = (function () {\n\n\n\t        return {\n\t            /**\n\t             * Creates a new object that inherits from this object.\n\t             *\n\t             * @param {Object} overrides Properties to copy into the new object.\n\t             *\n\t             * @return {Object} The new object.\n\t             *\n\t             * @static\n\t             *\n\t             * @example\n\t             *\n\t             *     var MyType = CryptoJS.lib.Base.extend({\n\t             *         field: 'value',\n\t             *\n\t             *         method: function () {\n\t             *         }\n\t             *     });\n\t             */\n\t            extend: function (overrides) {\n\t                // Spawn\n\t                var subtype = create(this);\n\n\t                // Augment\n\t                if (overrides) {\n\t                    subtype.mixIn(overrides);\n\t                }\n\n\t                // Create default initializer\n\t                if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t                    subtype.init = function () {\n\t                        subtype.$super.init.apply(this, arguments);\n\t                    };\n\t                }\n\n\t                // Initializer's prototype is the subtype object\n\t                subtype.init.prototype = subtype;\n\n\t                // Reference supertype\n\t                subtype.$super = this;\n\n\t                return subtype;\n\t            },\n\n\t            /**\n\t             * Extends this object and runs the init method.\n\t             * Arguments to create() will be passed to init().\n\t             *\n\t             * @return {Object} The new object.\n\t             *\n\t             * @static\n\t             *\n\t             * @example\n\t             *\n\t             *     var instance = MyType.create();\n\t             */\n\t            create: function () {\n\t                var instance = this.extend();\n\t                instance.init.apply(instance, arguments);\n\n\t                return instance;\n\t            },\n\n\t            /**\n\t             * Initializes a newly created object.\n\t             * Override this method to add some logic when your objects are created.\n\t             *\n\t             * @example\n\t             *\n\t             *     var MyType = CryptoJS.lib.Base.extend({\n\t             *         init: function () {\n\t             *             // ...\n\t             *         }\n\t             *     });\n\t             */\n\t            init: function () {\n\t            },\n\n\t            /**\n\t             * Copies properties into this object.\n\t             *\n\t             * @param {Object} properties The properties to mix in.\n\t             *\n\t             * @example\n\t             *\n\t             *     MyType.mixIn({\n\t             *         field: 'value'\n\t             *     });\n\t             */\n\t            mixIn: function (properties) {\n\t                for (var propertyName in properties) {\n\t                    if (properties.hasOwnProperty(propertyName)) {\n\t                        this[propertyName] = properties[propertyName];\n\t                    }\n\t                }\n\n\t                // IE won't copy toString using the loop above\n\t                if (properties.hasOwnProperty('toString')) {\n\t                    this.toString = properties.toString;\n\t                }\n\t            },\n\n\t            /**\n\t             * Creates a copy of this object.\n\t             *\n\t             * @return {Object} The clone.\n\t             *\n\t             * @example\n\t             *\n\t             *     var clone = instance.clone();\n\t             */\n\t            clone: function () {\n\t                return this.init.prototype.extend(this);\n\t            }\n\t        };\n\t    }());\n\n\t    /**\n\t     * An array of 32-bit words.\n\t     *\n\t     * @property {Array} words The array of 32-bit words.\n\t     * @property {number} sigBytes The number of significant bytes in this word array.\n\t     */\n\t    var WordArray = C_lib.WordArray = Base.extend({\n\t        /**\n\t         * Initializes a newly created word array.\n\t         *\n\t         * @param {Array} words (Optional) An array of 32-bit words.\n\t         * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t         *\n\t         * @example\n\t         *\n\t         *     var wordArray = CryptoJS.lib.WordArray.create();\n\t         *     var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t         *     var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t         */\n\t        init: function (words, sigBytes) {\n\t            words = this.words = words || [];\n\n\t            if (sigBytes != undefined) {\n\t                this.sigBytes = sigBytes;\n\t            } else {\n\t                this.sigBytes = words.length * 4;\n\t            }\n\t        },\n\n\t        /**\n\t         * Converts this word array to a string.\n\t         *\n\t         * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t         *\n\t         * @return {string} The stringified word array.\n\t         *\n\t         * @example\n\t         *\n\t         *     var string = wordArray + '';\n\t         *     var string = wordArray.toString();\n\t         *     var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t         */\n\t        toString: function (encoder) {\n\t            return (encoder || Hex).stringify(this);\n\t        },\n\n\t        /**\n\t         * Concatenates a word array to this word array.\n\t         *\n\t         * @param {WordArray} wordArray The word array to append.\n\t         *\n\t         * @return {WordArray} This word array.\n\t         *\n\t         * @example\n\t         *\n\t         *     wordArray1.concat(wordArray2);\n\t         */\n\t        concat: function (wordArray) {\n\t            // Shortcuts\n\t            var thisWords = this.words;\n\t            var thatWords = wordArray.words;\n\t            var thisSigBytes = this.sigBytes;\n\t            var thatSigBytes = wordArray.sigBytes;\n\n\t            // Clamp excess bits\n\t            this.clamp();\n\n\t            // Concat\n\t            if (thisSigBytes % 4) {\n\t                // Copy one byte at a time\n\t                for (var i = 0; i < thatSigBytes; i++) {\n\t                    var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t                    thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t                }\n\t            } else {\n\t                // Copy one word at a time\n\t                for (var j = 0; j < thatSigBytes; j += 4) {\n\t                    thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];\n\t                }\n\t            }\n\t            this.sigBytes += thatSigBytes;\n\n\t            // Chainable\n\t            return this;\n\t        },\n\n\t        /**\n\t         * Removes insignificant bits.\n\t         *\n\t         * @example\n\t         *\n\t         *     wordArray.clamp();\n\t         */\n\t        clamp: function () {\n\t            // Shortcuts\n\t            var words = this.words;\n\t            var sigBytes = this.sigBytes;\n\n\t            // Clamp\n\t            words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t            words.length = Math.ceil(sigBytes / 4);\n\t        },\n\n\t        /**\n\t         * Creates a copy of this word array.\n\t         *\n\t         * @return {WordArray} The clone.\n\t         *\n\t         * @example\n\t         *\n\t         *     var clone = wordArray.clone();\n\t         */\n\t        clone: function () {\n\t            var clone = Base.clone.call(this);\n\t            clone.words = this.words.slice(0);\n\n\t            return clone;\n\t        },\n\n\t        /**\n\t         * Creates a word array filled with random bytes.\n\t         *\n\t         * @param {number} nBytes The number of random bytes to generate.\n\t         *\n\t         * @return {WordArray} The random word array.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var wordArray = CryptoJS.lib.WordArray.random(16);\n\t         */\n\t        random: function (nBytes) {\n\t            var words = [];\n\n\t            for (var i = 0; i < nBytes; i += 4) {\n\t                words.push(cryptoSecureRandomInt());\n\t            }\n\n\t            return new WordArray.init(words, nBytes);\n\t        }\n\t    });\n\n\t    /**\n\t     * Encoder namespace.\n\t     */\n\t    var C_enc = C.enc = {};\n\n\t    /**\n\t     * Hex encoding strategy.\n\t     */\n\t    var Hex = C_enc.Hex = {\n\t        /**\n\t         * Converts a word array to a hex string.\n\t         *\n\t         * @param {WordArray} wordArray The word array.\n\t         *\n\t         * @return {string} The hex string.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t         */\n\t        stringify: function (wordArray) {\n\t            // Shortcuts\n\t            var words = wordArray.words;\n\t            var sigBytes = wordArray.sigBytes;\n\n\t            // Convert\n\t            var hexChars = [];\n\t            for (var i = 0; i < sigBytes; i++) {\n\t                var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t                hexChars.push((bite >>> 4).toString(16));\n\t                hexChars.push((bite & 0x0f).toString(16));\n\t            }\n\n\t            return hexChars.join('');\n\t        },\n\n\t        /**\n\t         * Converts a hex string to a word array.\n\t         *\n\t         * @param {string} hexStr The hex string.\n\t         *\n\t         * @return {WordArray} The word array.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t         */\n\t        parse: function (hexStr) {\n\t            // Shortcut\n\t            var hexStrLength = hexStr.length;\n\n\t            // Convert\n\t            var words = [];\n\t            for (var i = 0; i < hexStrLength; i += 2) {\n\t                words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t            }\n\n\t            return new WordArray.init(words, hexStrLength / 2);\n\t        }\n\t    };\n\n\t    /**\n\t     * Latin1 encoding strategy.\n\t     */\n\t    var Latin1 = C_enc.Latin1 = {\n\t        /**\n\t         * Converts a word array to a Latin1 string.\n\t         *\n\t         * @param {WordArray} wordArray The word array.\n\t         *\n\t         * @return {string} The Latin1 string.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t         */\n\t        stringify: function (wordArray) {\n\t            // Shortcuts\n\t            var words = wordArray.words;\n\t            var sigBytes = wordArray.sigBytes;\n\n\t            // Convert\n\t            var latin1Chars = [];\n\t            for (var i = 0; i < sigBytes; i++) {\n\t                var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t                latin1Chars.push(String.fromCharCode(bite));\n\t            }\n\n\t            return latin1Chars.join('');\n\t        },\n\n\t        /**\n\t         * Converts a Latin1 string to a word array.\n\t         *\n\t         * @param {string} latin1Str The Latin1 string.\n\t         *\n\t         * @return {WordArray} The word array.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t         */\n\t        parse: function (latin1Str) {\n\t            // Shortcut\n\t            var latin1StrLength = latin1Str.length;\n\n\t            // Convert\n\t            var words = [];\n\t            for (var i = 0; i < latin1StrLength; i++) {\n\t                words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t            }\n\n\t            return new WordArray.init(words, latin1StrLength);\n\t        }\n\t    };\n\n\t    /**\n\t     * UTF-8 encoding strategy.\n\t     */\n\t    var Utf8 = C_enc.Utf8 = {\n\t        /**\n\t         * Converts a word array to a UTF-8 string.\n\t         *\n\t         * @param {WordArray} wordArray The word array.\n\t         *\n\t         * @return {string} The UTF-8 string.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t         */\n\t        stringify: function (wordArray) {\n\t            try {\n\t                return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t            } catch (e) {\n\t                throw new Error('Malformed UTF-8 data');\n\t            }\n\t        },\n\n\t        /**\n\t         * Converts a UTF-8 string to a word array.\n\t         *\n\t         * @param {string} utf8Str The UTF-8 string.\n\t         *\n\t         * @return {WordArray} The word array.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t         */\n\t        parse: function (utf8Str) {\n\t            return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t        }\n\t    };\n\n\t    /**\n\t     * Abstract buffered block algorithm template.\n\t     *\n\t     * The property blockSize must be implemented in a concrete subtype.\n\t     *\n\t     * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t     */\n\t    var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t        /**\n\t         * Resets this block algorithm's data buffer to its initial state.\n\t         *\n\t         * @example\n\t         *\n\t         *     bufferedBlockAlgorithm.reset();\n\t         */\n\t        reset: function () {\n\t            // Initial values\n\t            this._data = new WordArray.init();\n\t            this._nDataBytes = 0;\n\t        },\n\n\t        /**\n\t         * Adds new data to this block algorithm's buffer.\n\t         *\n\t         * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t         *\n\t         * @example\n\t         *\n\t         *     bufferedBlockAlgorithm._append('data');\n\t         *     bufferedBlockAlgorithm._append(wordArray);\n\t         */\n\t        _append: function (data) {\n\t            // Convert string to WordArray, else assume WordArray already\n\t            if (typeof data == 'string') {\n\t                data = Utf8.parse(data);\n\t            }\n\n\t            // Append\n\t            this._data.concat(data);\n\t            this._nDataBytes += data.sigBytes;\n\t        },\n\n\t        /**\n\t         * Processes available data blocks.\n\t         *\n\t         * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t         *\n\t         * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t         *\n\t         * @return {WordArray} The processed data.\n\t         *\n\t         * @example\n\t         *\n\t         *     var processedData = bufferedBlockAlgorithm._process();\n\t         *     var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t         */\n\t        _process: function (doFlush) {\n\t            var processedWords;\n\n\t            // Shortcuts\n\t            var data = this._data;\n\t            var dataWords = data.words;\n\t            var dataSigBytes = data.sigBytes;\n\t            var blockSize = this.blockSize;\n\t            var blockSizeBytes = blockSize * 4;\n\n\t            // Count blocks ready\n\t            var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t            if (doFlush) {\n\t                // Round up to include partial blocks\n\t                nBlocksReady = Math.ceil(nBlocksReady);\n\t            } else {\n\t                // Round down to include only full blocks,\n\t                // less the number of blocks that must remain in the buffer\n\t                nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t            }\n\n\t            // Count words ready\n\t            var nWordsReady = nBlocksReady * blockSize;\n\n\t            // Count bytes ready\n\t            var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t            // Process blocks\n\t            if (nWordsReady) {\n\t                for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t                    // Perform concrete-algorithm logic\n\t                    this._doProcessBlock(dataWords, offset);\n\t                }\n\n\t                // Remove processed words\n\t                processedWords = dataWords.splice(0, nWordsReady);\n\t                data.sigBytes -= nBytesReady;\n\t            }\n\n\t            // Return processed words\n\t            return new WordArray.init(processedWords, nBytesReady);\n\t        },\n\n\t        /**\n\t         * Creates a copy of this object.\n\t         *\n\t         * @return {Object} The clone.\n\t         *\n\t         * @example\n\t         *\n\t         *     var clone = bufferedBlockAlgorithm.clone();\n\t         */\n\t        clone: function () {\n\t            var clone = Base.clone.call(this);\n\t            clone._data = this._data.clone();\n\n\t            return clone;\n\t        },\n\n\t        _minBufferSize: 0\n\t    });\n\n\t    /**\n\t     * Abstract hasher template.\n\t     *\n\t     * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t     */\n\t    var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t        /**\n\t         * Configuration options.\n\t         */\n\t        cfg: Base.extend(),\n\n\t        /**\n\t         * Initializes a newly created hasher.\n\t         *\n\t         * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t         *\n\t         * @example\n\t         *\n\t         *     var hasher = CryptoJS.algo.SHA256.create();\n\t         */\n\t        init: function (cfg) {\n\t            // Apply config defaults\n\t            this.cfg = this.cfg.extend(cfg);\n\n\t            // Set initial values\n\t            this.reset();\n\t        },\n\n\t        /**\n\t         * Resets this hasher to its initial state.\n\t         *\n\t         * @example\n\t         *\n\t         *     hasher.reset();\n\t         */\n\t        reset: function () {\n\t            // Reset data buffer\n\t            BufferedBlockAlgorithm.reset.call(this);\n\n\t            // Perform concrete-hasher logic\n\t            this._doReset();\n\t        },\n\n\t        /**\n\t         * Updates this hasher with a message.\n\t         *\n\t         * @param {WordArray|string} messageUpdate The message to append.\n\t         *\n\t         * @return {Hasher} This hasher.\n\t         *\n\t         * @example\n\t         *\n\t         *     hasher.update('message');\n\t         *     hasher.update(wordArray);\n\t         */\n\t        update: function (messageUpdate) {\n\t            // Append\n\t            this._append(messageUpdate);\n\n\t            // Update the hash\n\t            this._process();\n\n\t            // Chainable\n\t            return this;\n\t        },\n\n\t        /**\n\t         * Finalizes the hash computation.\n\t         * Note that the finalize operation is effectively a destructive, read-once operation.\n\t         *\n\t         * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t         *\n\t         * @return {WordArray} The hash.\n\t         *\n\t         * @example\n\t         *\n\t         *     var hash = hasher.finalize();\n\t         *     var hash = hasher.finalize('message');\n\t         *     var hash = hasher.finalize(wordArray);\n\t         */\n\t        finalize: function (messageUpdate) {\n\t            // Final message update\n\t            if (messageUpdate) {\n\t                this._append(messageUpdate);\n\t            }\n\n\t            // Perform concrete-hasher logic\n\t            var hash = this._doFinalize();\n\n\t            return hash;\n\t        },\n\n\t        blockSize: 512/32,\n\n\t        /**\n\t         * Creates a shortcut function to a hasher's object interface.\n\t         *\n\t         * @param {Hasher} hasher The hasher to create a helper for.\n\t         *\n\t         * @return {Function} The shortcut function.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t         */\n\t        _createHelper: function (hasher) {\n\t            return function (message, cfg) {\n\t                return new hasher.init(cfg).finalize(message);\n\t            };\n\t        },\n\n\t        /**\n\t         * Creates a shortcut function to the HMAC's object interface.\n\t         *\n\t         * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t         *\n\t         * @return {Function} The shortcut function.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t         */\n\t        _createHmacHelper: function (hasher) {\n\t            return function (message, key) {\n\t                return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t            };\n\t        }\n\t    });\n\n\t    /**\n\t     * Algorithm namespace.\n\t     */\n\t    var C_algo = C.algo = {};\n\n\t    return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_lib = C.lib;\n\t    var WordArray = C_lib.WordArray;\n\t    var C_enc = C.enc;\n\n\t    /**\n\t     * Base64 encoding strategy.\n\t     */\n\t    var Base64 = C_enc.Base64 = {\n\t        /**\n\t         * Converts a word array to a Base64 string.\n\t         *\n\t         * @param {WordArray} wordArray The word array.\n\t         *\n\t         * @return {string} The Base64 string.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n\t         */\n\t        stringify: function (wordArray) {\n\t            // Shortcuts\n\t            var words = wordArray.words;\n\t            var sigBytes = wordArray.sigBytes;\n\t            var map = this._map;\n\n\t            // Clamp excess bits\n\t            wordArray.clamp();\n\n\t            // Convert\n\t            var base64Chars = [];\n\t            for (var i = 0; i < sigBytes; i += 3) {\n\t                var byte1 = (words[i >>> 2]       >>> (24 - (i % 4) * 8))       & 0xff;\n\t                var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t                var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t                var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t                for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t                    base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t                }\n\t            }\n\n\t            // Add padding\n\t            var paddingChar = map.charAt(64);\n\t            if (paddingChar) {\n\t                while (base64Chars.length % 4) {\n\t                    base64Chars.push(paddingChar);\n\t                }\n\t            }\n\n\t            return base64Chars.join('');\n\t        },\n\n\t        /**\n\t         * Converts a Base64 string to a word array.\n\t         *\n\t         * @param {string} base64Str The Base64 string.\n\t         *\n\t         * @return {WordArray} The word array.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var wordArray = CryptoJS.enc.Base64.parse(base64String);\n\t         */\n\t        parse: function (base64Str) {\n\t            // Shortcuts\n\t            var base64StrLength = base64Str.length;\n\t            var map = this._map;\n\t            var reverseMap = this._reverseMap;\n\n\t            if (!reverseMap) {\n\t                    reverseMap = this._reverseMap = [];\n\t                    for (var j = 0; j < map.length; j++) {\n\t                        reverseMap[map.charCodeAt(j)] = j;\n\t                    }\n\t            }\n\n\t            // Ignore padding\n\t            var paddingChar = map.charAt(64);\n\t            if (paddingChar) {\n\t                var paddingIndex = base64Str.indexOf(paddingChar);\n\t                if (paddingIndex !== -1) {\n\t                    base64StrLength = paddingIndex;\n\t                }\n\t            }\n\n\t            // Convert\n\t            return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t        },\n\n\t        _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n\t    };\n\n\t    function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t      var words = [];\n\t      var nBytes = 0;\n\t      for (var i = 0; i < base64StrLength; i++) {\n\t          if (i % 4) {\n\t              var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t              var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t              var bitsCombined = bits1 | bits2;\n\t              words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);\n\t              nBytes++;\n\t          }\n\t      }\n\t      return WordArray.create(words, nBytes);\n\t    }\n\t}());\n\n\n\treturn CryptoJS.enc.Base64;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_lib = C.lib;\n\t    var WordArray = C_lib.WordArray;\n\t    var C_enc = C.enc;\n\n\t    /**\n\t     * Base64url encoding strategy.\n\t     */\n\t    var Base64url = C_enc.Base64url = {\n\t        /**\n\t         * Converts a word array to a Base64url string.\n\t         *\n\t         * @param {WordArray} wordArray The word array.\n\t         *\n\t         * @param {boolean} urlSafe Whether to use url safe\n\t         *\n\t         * @return {string} The Base64url string.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var base64String = CryptoJS.enc.Base64url.stringify(wordArray);\n\t         */\n\t        stringify: function (wordArray, urlSafe) {\n\t            if (urlSafe === undefined) {\n\t                urlSafe = true\n\t            }\n\t            // Shortcuts\n\t            var words = wordArray.words;\n\t            var sigBytes = wordArray.sigBytes;\n\t            var map = urlSafe ? this._safe_map : this._map;\n\n\t            // Clamp excess bits\n\t            wordArray.clamp();\n\n\t            // Convert\n\t            var base64Chars = [];\n\t            for (var i = 0; i < sigBytes; i += 3) {\n\t                var byte1 = (words[i >>> 2]       >>> (24 - (i % 4) * 8))       & 0xff;\n\t                var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t                var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t                var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t                for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t                    base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t                }\n\t            }\n\n\t            // Add padding\n\t            var paddingChar = map.charAt(64);\n\t            if (paddingChar) {\n\t                while (base64Chars.length % 4) {\n\t                    base64Chars.push(paddingChar);\n\t                }\n\t            }\n\n\t            return base64Chars.join('');\n\t        },\n\n\t        /**\n\t         * Converts a Base64url string to a word array.\n\t         *\n\t         * @param {string} base64Str The Base64url string.\n\t         *\n\t         * @param {boolean} urlSafe Whether to use url safe\n\t         *\n\t         * @return {WordArray} The word array.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var wordArray = CryptoJS.enc.Base64url.parse(base64String);\n\t         */\n\t        parse: function (base64Str, urlSafe) {\n\t            if (urlSafe === undefined) {\n\t                urlSafe = true\n\t            }\n\n\t            // Shortcuts\n\t            var base64StrLength = base64Str.length;\n\t            var map = urlSafe ? this._safe_map : this._map;\n\t            var reverseMap = this._reverseMap;\n\n\t            if (!reverseMap) {\n\t                reverseMap = this._reverseMap = [];\n\t                for (var j = 0; j < map.length; j++) {\n\t                    reverseMap[map.charCodeAt(j)] = j;\n\t                }\n\t            }\n\n\t            // Ignore padding\n\t            var paddingChar = map.charAt(64);\n\t            if (paddingChar) {\n\t                var paddingIndex = base64Str.indexOf(paddingChar);\n\t                if (paddingIndex !== -1) {\n\t                    base64StrLength = paddingIndex;\n\t                }\n\t            }\n\n\t            // Convert\n\t            return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t        },\n\n\t        _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n\t        _safe_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n\t    };\n\n\t    function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t        var words = [];\n\t        var nBytes = 0;\n\t        for (var i = 0; i < base64StrLength; i++) {\n\t            if (i % 4) {\n\t                var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t                var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t                var bitsCombined = bits1 | bits2;\n\t                words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);\n\t                nBytes++;\n\t            }\n\t        }\n\t        return WordArray.create(words, nBytes);\n\t    }\n\t}());\n\n\n\treturn CryptoJS.enc.Base64url;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_lib = C.lib;\n\t    var WordArray = C_lib.WordArray;\n\t    var C_enc = C.enc;\n\n\t    /**\n\t     * UTF-16 BE encoding strategy.\n\t     */\n\t    var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = {\n\t        /**\n\t         * Converts a word array to a UTF-16 BE string.\n\t         *\n\t         * @param {WordArray} wordArray The word array.\n\t         *\n\t         * @return {string} The UTF-16 BE string.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var utf16String = CryptoJS.enc.Utf16.stringify(wordArray);\n\t         */\n\t        stringify: function (wordArray) {\n\t            // Shortcuts\n\t            var words = wordArray.words;\n\t            var sigBytes = wordArray.sigBytes;\n\n\t            // Convert\n\t            var utf16Chars = [];\n\t            for (var i = 0; i < sigBytes; i += 2) {\n\t                var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff;\n\t                utf16Chars.push(String.fromCharCode(codePoint));\n\t            }\n\n\t            return utf16Chars.join('');\n\t        },\n\n\t        /**\n\t         * Converts a UTF-16 BE string to a word array.\n\t         *\n\t         * @param {string} utf16Str The UTF-16 BE string.\n\t         *\n\t         * @return {WordArray} The word array.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var wordArray = CryptoJS.enc.Utf16.parse(utf16String);\n\t         */\n\t        parse: function (utf16Str) {\n\t            // Shortcut\n\t            var utf16StrLength = utf16Str.length;\n\n\t            // Convert\n\t            var words = [];\n\t            for (var i = 0; i < utf16StrLength; i++) {\n\t                words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16);\n\t            }\n\n\t            return WordArray.create(words, utf16StrLength * 2);\n\t        }\n\t    };\n\n\t    /**\n\t     * UTF-16 LE encoding strategy.\n\t     */\n\t    C_enc.Utf16LE = {\n\t        /**\n\t         * Converts a word array to a UTF-16 LE string.\n\t         *\n\t         * @param {WordArray} wordArray The word array.\n\t         *\n\t         * @return {string} The UTF-16 LE string.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray);\n\t         */\n\t        stringify: function (wordArray) {\n\t            // Shortcuts\n\t            var words = wordArray.words;\n\t            var sigBytes = wordArray.sigBytes;\n\n\t            // Convert\n\t            var utf16Chars = [];\n\t            for (var i = 0; i < sigBytes; i += 2) {\n\t                var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff);\n\t                utf16Chars.push(String.fromCharCode(codePoint));\n\t            }\n\n\t            return utf16Chars.join('');\n\t        },\n\n\t        /**\n\t         * Converts a UTF-16 LE string to a word array.\n\t         *\n\t         * @param {string} utf16Str The UTF-16 LE string.\n\t         *\n\t         * @return {WordArray} The word array.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str);\n\t         */\n\t        parse: function (utf16Str) {\n\t            // Shortcut\n\t            var utf16StrLength = utf16Str.length;\n\n\t            // Convert\n\t            var words = [];\n\t            for (var i = 0; i < utf16StrLength; i++) {\n\t                words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16));\n\t            }\n\n\t            return WordArray.create(words, utf16StrLength * 2);\n\t        }\n\t    };\n\n\t    function swapEndian(word) {\n\t        return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff);\n\t    }\n\t}());\n\n\n\treturn CryptoJS.enc.Utf16;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha1\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha1\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_lib = C.lib;\n\t    var Base = C_lib.Base;\n\t    var WordArray = C_lib.WordArray;\n\t    var C_algo = C.algo;\n\t    var MD5 = C_algo.MD5;\n\n\t    /**\n\t     * This key derivation function is meant to conform with EVP_BytesToKey.\n\t     * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n\t     */\n\t    var EvpKDF = C_algo.EvpKDF = Base.extend({\n\t        /**\n\t         * Configuration options.\n\t         *\n\t         * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t         * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n\t         * @property {number} iterations The number of iterations to perform. Default: 1\n\t         */\n\t        cfg: Base.extend({\n\t            keySize: 128/32,\n\t            hasher: MD5,\n\t            iterations: 1\n\t        }),\n\n\t        /**\n\t         * Initializes a newly created key derivation function.\n\t         *\n\t         * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t         *\n\t         * @example\n\t         *\n\t         *     var kdf = CryptoJS.algo.EvpKDF.create();\n\t         *     var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n\t         *     var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n\t         */\n\t        init: function (cfg) {\n\t            this.cfg = this.cfg.extend(cfg);\n\t        },\n\n\t        /**\n\t         * Derives a key from a password.\n\t         *\n\t         * @param {WordArray|string} password The password.\n\t         * @param {WordArray|string} salt A salt.\n\t         *\n\t         * @return {WordArray} The derived key.\n\t         *\n\t         * @example\n\t         *\n\t         *     var key = kdf.compute(password, salt);\n\t         */\n\t        compute: function (password, salt) {\n\t            var block;\n\n\t            // Shortcut\n\t            var cfg = this.cfg;\n\n\t            // Init hasher\n\t            var hasher = cfg.hasher.create();\n\n\t            // Initial values\n\t            var derivedKey = WordArray.create();\n\n\t            // Shortcuts\n\t            var derivedKeyWords = derivedKey.words;\n\t            var keySize = cfg.keySize;\n\t            var iterations = cfg.iterations;\n\n\t            // Generate key\n\t            while (derivedKeyWords.length < keySize) {\n\t                if (block) {\n\t                    hasher.update(block);\n\t                }\n\t                block = hasher.update(password).finalize(salt);\n\t                hasher.reset();\n\n\t                // Iterations\n\t                for (var i = 1; i < iterations; i++) {\n\t                    block = hasher.finalize(block);\n\t                    hasher.reset();\n\t                }\n\n\t                derivedKey.concat(block);\n\t            }\n\t            derivedKey.sigBytes = keySize * 4;\n\n\t            return derivedKey;\n\t        }\n\t    });\n\n\t    /**\n\t     * Derives a key from a password.\n\t     *\n\t     * @param {WordArray|string} password The password.\n\t     * @param {WordArray|string} salt A salt.\n\t     * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t     *\n\t     * @return {WordArray} The derived key.\n\t     *\n\t     * @static\n\t     *\n\t     * @example\n\t     *\n\t     *     var key = CryptoJS.EvpKDF(password, salt);\n\t     *     var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n\t     *     var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n\t     */\n\t    C.EvpKDF = function (password, salt, cfg) {\n\t        return EvpKDF.create(cfg).compute(password, salt);\n\t    };\n\t}());\n\n\n\treturn CryptoJS.EvpKDF;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (undefined) {\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_lib = C.lib;\n\t    var CipherParams = C_lib.CipherParams;\n\t    var C_enc = C.enc;\n\t    var Hex = C_enc.Hex;\n\t    var C_format = C.format;\n\n\t    var HexFormatter = C_format.Hex = {\n\t        /**\n\t         * Converts the ciphertext of a cipher params object to a hexadecimally encoded string.\n\t         *\n\t         * @param {CipherParams} cipherParams The cipher params object.\n\t         *\n\t         * @return {string} The hexadecimally encoded string.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var hexString = CryptoJS.format.Hex.stringify(cipherParams);\n\t         */\n\t        stringify: function (cipherParams) {\n\t            return cipherParams.ciphertext.toString(Hex);\n\t        },\n\n\t        /**\n\t         * Converts a hexadecimally encoded ciphertext string to a cipher params object.\n\t         *\n\t         * @param {string} input The hexadecimally encoded string.\n\t         *\n\t         * @return {CipherParams} The cipher params object.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var cipherParams = CryptoJS.format.Hex.parse(hexString);\n\t         */\n\t        parse: function (input) {\n\t            var ciphertext = Hex.parse(input);\n\t            return CipherParams.create({ ciphertext: ciphertext });\n\t        }\n\t    };\n\t}());\n\n\n\treturn CryptoJS.format.Hex;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_lib = C.lib;\n\t    var Base = C_lib.Base;\n\t    var C_enc = C.enc;\n\t    var Utf8 = C_enc.Utf8;\n\t    var C_algo = C.algo;\n\n\t    /**\n\t     * HMAC algorithm.\n\t     */\n\t    var HMAC = C_algo.HMAC = Base.extend({\n\t        /**\n\t         * Initializes a newly created HMAC.\n\t         *\n\t         * @param {Hasher} hasher The hash algorithm to use.\n\t         * @param {WordArray|string} key The secret key.\n\t         *\n\t         * @example\n\t         *\n\t         *     var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n\t         */\n\t        init: function (hasher, key) {\n\t            // Init hasher\n\t            hasher = this._hasher = new hasher.init();\n\n\t            // Convert string to WordArray, else assume WordArray already\n\t            if (typeof key == 'string') {\n\t                key = Utf8.parse(key);\n\t            }\n\n\t            // Shortcuts\n\t            var hasherBlockSize = hasher.blockSize;\n\t            var hasherBlockSizeBytes = hasherBlockSize * 4;\n\n\t            // Allow arbitrary length keys\n\t            if (key.sigBytes > hasherBlockSizeBytes) {\n\t                key = hasher.finalize(key);\n\t            }\n\n\t            // Clamp excess bits\n\t            key.clamp();\n\n\t            // Clone key for inner and outer pads\n\t            var oKey = this._oKey = key.clone();\n\t            var iKey = this._iKey = key.clone();\n\n\t            // Shortcuts\n\t            var oKeyWords = oKey.words;\n\t            var iKeyWords = iKey.words;\n\n\t            // XOR keys with pad constants\n\t            for (var i = 0; i < hasherBlockSize; i++) {\n\t                oKeyWords[i] ^= 0x5c5c5c5c;\n\t                iKeyWords[i] ^= 0x36363636;\n\t            }\n\t            oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\n\t            // Set initial values\n\t            this.reset();\n\t        },\n\n\t        /**\n\t         * Resets this HMAC to its initial state.\n\t         *\n\t         * @example\n\t         *\n\t         *     hmacHasher.reset();\n\t         */\n\t        reset: function () {\n\t            // Shortcut\n\t            var hasher = this._hasher;\n\n\t            // Reset\n\t            hasher.reset();\n\t            hasher.update(this._iKey);\n\t        },\n\n\t        /**\n\t         * Updates this HMAC with a message.\n\t         *\n\t         * @param {WordArray|string} messageUpdate The message to append.\n\t         *\n\t         * @return {HMAC} This HMAC instance.\n\t         *\n\t         * @example\n\t         *\n\t         *     hmacHasher.update('message');\n\t         *     hmacHasher.update(wordArray);\n\t         */\n\t        update: function (messageUpdate) {\n\t            this._hasher.update(messageUpdate);\n\n\t            // Chainable\n\t            return this;\n\t        },\n\n\t        /**\n\t         * Finalizes the HMAC computation.\n\t         * Note that the finalize operation is effectively a destructive, read-once operation.\n\t         *\n\t         * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t         *\n\t         * @return {WordArray} The HMAC.\n\t         *\n\t         * @example\n\t         *\n\t         *     var hmac = hmacHasher.finalize();\n\t         *     var hmac = hmacHasher.finalize('message');\n\t         *     var hmac = hmacHasher.finalize(wordArray);\n\t         */\n\t        finalize: function (messageUpdate) {\n\t            // Shortcut\n\t            var hasher = this._hasher;\n\n\t            // Compute HMAC\n\t            var innerHash = hasher.finalize(messageUpdate);\n\t            hasher.reset();\n\t            var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n\n\t            return hmac;\n\t        }\n\t    });\n\t}());\n\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"), require(\"./lib-typedarrays\"), require(\"./enc-utf16\"), require(\"./enc-base64\"), require(\"./enc-base64url\"), require(\"./md5\"), require(\"./sha1\"), require(\"./sha256\"), require(\"./sha224\"), require(\"./sha512\"), require(\"./sha384\"), require(\"./sha3\"), require(\"./ripemd160\"), require(\"./hmac\"), require(\"./pbkdf2\"), require(\"./evpkdf\"), require(\"./cipher-core\"), require(\"./mode-cfb\"), require(\"./mode-ctr\"), require(\"./mode-ctr-gladman\"), require(\"./mode-ofb\"), require(\"./mode-ecb\"), require(\"./pad-ansix923\"), require(\"./pad-iso10126\"), require(\"./pad-iso97971\"), require(\"./pad-zeropadding\"), require(\"./pad-nopadding\"), require(\"./format-hex\"), require(\"./aes\"), require(\"./tripledes\"), require(\"./rc4\"), require(\"./rabbit\"), require(\"./rabbit-legacy\"), require(\"./blowfish\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\", \"./lib-typedarrays\", \"./enc-utf16\", \"./enc-base64\", \"./enc-base64url\", \"./md5\", \"./sha1\", \"./sha256\", \"./sha224\", \"./sha512\", \"./sha384\", \"./sha3\", \"./ripemd160\", \"./hmac\", \"./pbkdf2\", \"./evpkdf\", \"./cipher-core\", \"./mode-cfb\", \"./mode-ctr\", \"./mode-ctr-gladman\", \"./mode-ofb\", \"./mode-ecb\", \"./pad-ansix923\", \"./pad-iso10126\", \"./pad-iso97971\", \"./pad-zeropadding\", \"./pad-nopadding\", \"./format-hex\", \"./aes\", \"./tripledes\", \"./rc4\", \"./rabbit\", \"./rabbit-legacy\", \"./blowfish\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t    // Check if typed arrays are supported\n\t    if (typeof ArrayBuffer != 'function') {\n\t        return;\n\t    }\n\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_lib = C.lib;\n\t    var WordArray = C_lib.WordArray;\n\n\t    // Reference original init\n\t    var superInit = WordArray.init;\n\n\t    // Augment WordArray.init to handle typed arrays\n\t    var subInit = WordArray.init = function (typedArray) {\n\t        // Convert buffers to uint8\n\t        if (typedArray instanceof ArrayBuffer) {\n\t            typedArray = new Uint8Array(typedArray);\n\t        }\n\n\t        // Convert other array views to uint8\n\t        if (\n\t            typedArray instanceof Int8Array ||\n\t            (typeof Uint8ClampedArray !== \"undefined\" && typedArray instanceof Uint8ClampedArray) ||\n\t            typedArray instanceof Int16Array ||\n\t            typedArray instanceof Uint16Array ||\n\t            typedArray instanceof Int32Array ||\n\t            typedArray instanceof Uint32Array ||\n\t            typedArray instanceof Float32Array ||\n\t            typedArray instanceof Float64Array\n\t        ) {\n\t            typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);\n\t        }\n\n\t        // Handle Uint8Array\n\t        if (typedArray instanceof Uint8Array) {\n\t            // Shortcut\n\t            var typedArrayByteLength = typedArray.byteLength;\n\n\t            // Extract bytes\n\t            var words = [];\n\t            for (var i = 0; i < typedArrayByteLength; i++) {\n\t                words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8);\n\t            }\n\n\t            // Initialize this word array\n\t            superInit.call(this, words, typedArrayByteLength);\n\t        } else {\n\t            // Else call normal init\n\t            superInit.apply(this, arguments);\n\t        }\n\t    };\n\n\t    subInit.prototype = WordArray;\n\t}());\n\n\n\treturn CryptoJS.lib.WordArray;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_lib = C.lib;\n\t    var WordArray = C_lib.WordArray;\n\t    var Hasher = C_lib.Hasher;\n\t    var C_algo = C.algo;\n\n\t    // Constants table\n\t    var T = [];\n\n\t    // Compute constants\n\t    (function () {\n\t        for (var i = 0; i < 64; i++) {\n\t            T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;\n\t        }\n\t    }());\n\n\t    /**\n\t     * MD5 hash algorithm.\n\t     */\n\t    var MD5 = C_algo.MD5 = Hasher.extend({\n\t        _doReset: function () {\n\t            this._hash = new WordArray.init([\n\t                0x67452301, 0xefcdab89,\n\t                0x98badcfe, 0x10325476\n\t            ]);\n\t        },\n\n\t        _doProcessBlock: function (M, offset) {\n\t            // Swap endian\n\t            for (var i = 0; i < 16; i++) {\n\t                // Shortcuts\n\t                var offset_i = offset + i;\n\t                var M_offset_i = M[offset_i];\n\n\t                M[offset_i] = (\n\t                    (((M_offset_i << 8)  | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t                    (((M_offset_i << 24) | (M_offset_i >>> 8))  & 0xff00ff00)\n\t                );\n\t            }\n\n\t            // Shortcuts\n\t            var H = this._hash.words;\n\n\t            var M_offset_0  = M[offset + 0];\n\t            var M_offset_1  = M[offset + 1];\n\t            var M_offset_2  = M[offset + 2];\n\t            var M_offset_3  = M[offset + 3];\n\t            var M_offset_4  = M[offset + 4];\n\t            var M_offset_5  = M[offset + 5];\n\t            var M_offset_6  = M[offset + 6];\n\t            var M_offset_7  = M[offset + 7];\n\t            var M_offset_8  = M[offset + 8];\n\t            var M_offset_9  = M[offset + 9];\n\t            var M_offset_10 = M[offset + 10];\n\t            var M_offset_11 = M[offset + 11];\n\t            var M_offset_12 = M[offset + 12];\n\t            var M_offset_13 = M[offset + 13];\n\t            var M_offset_14 = M[offset + 14];\n\t            var M_offset_15 = M[offset + 15];\n\n\t            // Working variables\n\t            var a = H[0];\n\t            var b = H[1];\n\t            var c = H[2];\n\t            var d = H[3];\n\n\t            // Computation\n\t            a = FF(a, b, c, d, M_offset_0,  7,  T[0]);\n\t            d = FF(d, a, b, c, M_offset_1,  12, T[1]);\n\t            c = FF(c, d, a, b, M_offset_2,  17, T[2]);\n\t            b = FF(b, c, d, a, M_offset_3,  22, T[3]);\n\t            a = FF(a, b, c, d, M_offset_4,  7,  T[4]);\n\t            d = FF(d, a, b, c, M_offset_5,  12, T[5]);\n\t            c = FF(c, d, a, b, M_offset_6,  17, T[6]);\n\t            b = FF(b, c, d, a, M_offset_7,  22, T[7]);\n\t            a = FF(a, b, c, d, M_offset_8,  7,  T[8]);\n\t            d = FF(d, a, b, c, M_offset_9,  12, T[9]);\n\t            c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n\t            b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n\t            a = FF(a, b, c, d, M_offset_12, 7,  T[12]);\n\t            d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n\t            c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n\t            b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n\n\t            a = GG(a, b, c, d, M_offset_1,  5,  T[16]);\n\t            d = GG(d, a, b, c, M_offset_6,  9,  T[17]);\n\t            c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n\t            b = GG(b, c, d, a, M_offset_0,  20, T[19]);\n\t            a = GG(a, b, c, d, M_offset_5,  5,  T[20]);\n\t            d = GG(d, a, b, c, M_offset_10, 9,  T[21]);\n\t            c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n\t            b = GG(b, c, d, a, M_offset_4,  20, T[23]);\n\t            a = GG(a, b, c, d, M_offset_9,  5,  T[24]);\n\t            d = GG(d, a, b, c, M_offset_14, 9,  T[25]);\n\t            c = GG(c, d, a, b, M_offset_3,  14, T[26]);\n\t            b = GG(b, c, d, a, M_offset_8,  20, T[27]);\n\t            a = GG(a, b, c, d, M_offset_13, 5,  T[28]);\n\t            d = GG(d, a, b, c, M_offset_2,  9,  T[29]);\n\t            c = GG(c, d, a, b, M_offset_7,  14, T[30]);\n\t            b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n\n\t            a = HH(a, b, c, d, M_offset_5,  4,  T[32]);\n\t            d = HH(d, a, b, c, M_offset_8,  11, T[33]);\n\t            c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n\t            b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n\t            a = HH(a, b, c, d, M_offset_1,  4,  T[36]);\n\t            d = HH(d, a, b, c, M_offset_4,  11, T[37]);\n\t            c = HH(c, d, a, b, M_offset_7,  16, T[38]);\n\t            b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n\t            a = HH(a, b, c, d, M_offset_13, 4,  T[40]);\n\t            d = HH(d, a, b, c, M_offset_0,  11, T[41]);\n\t            c = HH(c, d, a, b, M_offset_3,  16, T[42]);\n\t            b = HH(b, c, d, a, M_offset_6,  23, T[43]);\n\t            a = HH(a, b, c, d, M_offset_9,  4,  T[44]);\n\t            d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n\t            c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n\t            b = HH(b, c, d, a, M_offset_2,  23, T[47]);\n\n\t            a = II(a, b, c, d, M_offset_0,  6,  T[48]);\n\t            d = II(d, a, b, c, M_offset_7,  10, T[49]);\n\t            c = II(c, d, a, b, M_offset_14, 15, T[50]);\n\t            b = II(b, c, d, a, M_offset_5,  21, T[51]);\n\t            a = II(a, b, c, d, M_offset_12, 6,  T[52]);\n\t            d = II(d, a, b, c, M_offset_3,  10, T[53]);\n\t            c = II(c, d, a, b, M_offset_10, 15, T[54]);\n\t            b = II(b, c, d, a, M_offset_1,  21, T[55]);\n\t            a = II(a, b, c, d, M_offset_8,  6,  T[56]);\n\t            d = II(d, a, b, c, M_offset_15, 10, T[57]);\n\t            c = II(c, d, a, b, M_offset_6,  15, T[58]);\n\t            b = II(b, c, d, a, M_offset_13, 21, T[59]);\n\t            a = II(a, b, c, d, M_offset_4,  6,  T[60]);\n\t            d = II(d, a, b, c, M_offset_11, 10, T[61]);\n\t            c = II(c, d, a, b, M_offset_2,  15, T[62]);\n\t            b = II(b, c, d, a, M_offset_9,  21, T[63]);\n\n\t            // Intermediate hash value\n\t            H[0] = (H[0] + a) | 0;\n\t            H[1] = (H[1] + b) | 0;\n\t            H[2] = (H[2] + c) | 0;\n\t            H[3] = (H[3] + d) | 0;\n\t        },\n\n\t        _doFinalize: function () {\n\t            // Shortcuts\n\t            var data = this._data;\n\t            var dataWords = data.words;\n\n\t            var nBitsTotal = this._nDataBytes * 8;\n\t            var nBitsLeft = data.sigBytes * 8;\n\n\t            // Add padding\n\t            dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\n\t            var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n\t            var nBitsTotalL = nBitsTotal;\n\t            dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (\n\t                (((nBitsTotalH << 8)  | (nBitsTotalH >>> 24)) & 0x00ff00ff) |\n\t                (((nBitsTotalH << 24) | (nBitsTotalH >>> 8))  & 0xff00ff00)\n\t            );\n\t            dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t                (((nBitsTotalL << 8)  | (nBitsTotalL >>> 24)) & 0x00ff00ff) |\n\t                (((nBitsTotalL << 24) | (nBitsTotalL >>> 8))  & 0xff00ff00)\n\t            );\n\n\t            data.sigBytes = (dataWords.length + 1) * 4;\n\n\t            // Hash final blocks\n\t            this._process();\n\n\t            // Shortcuts\n\t            var hash = this._hash;\n\t            var H = hash.words;\n\n\t            // Swap endian\n\t            for (var i = 0; i < 4; i++) {\n\t                // Shortcut\n\t                var H_i = H[i];\n\n\t                H[i] = (((H_i << 8)  | (H_i >>> 24)) & 0x00ff00ff) |\n\t                       (((H_i << 24) | (H_i >>> 8))  & 0xff00ff00);\n\t            }\n\n\t            // Return final computed hash\n\t            return hash;\n\t        },\n\n\t        clone: function () {\n\t            var clone = Hasher.clone.call(this);\n\t            clone._hash = this._hash.clone();\n\n\t            return clone;\n\t        }\n\t    });\n\n\t    function FF(a, b, c, d, x, s, t) {\n\t        var n = a + ((b & c) | (~b & d)) + x + t;\n\t        return ((n << s) | (n >>> (32 - s))) + b;\n\t    }\n\n\t    function GG(a, b, c, d, x, s, t) {\n\t        var n = a + ((b & d) | (c & ~d)) + x + t;\n\t        return ((n << s) | (n >>> (32 - s))) + b;\n\t    }\n\n\t    function HH(a, b, c, d, x, s, t) {\n\t        var n = a + (b ^ c ^ d) + x + t;\n\t        return ((n << s) | (n >>> (32 - s))) + b;\n\t    }\n\n\t    function II(a, b, c, d, x, s, t) {\n\t        var n = a + (c ^ (b | ~d)) + x + t;\n\t        return ((n << s) | (n >>> (32 - s))) + b;\n\t    }\n\n\t    /**\n\t     * Shortcut function to the hasher's object interface.\n\t     *\n\t     * @param {WordArray|string} message The message to hash.\n\t     *\n\t     * @return {WordArray} The hash.\n\t     *\n\t     * @static\n\t     *\n\t     * @example\n\t     *\n\t     *     var hash = CryptoJS.MD5('message');\n\t     *     var hash = CryptoJS.MD5(wordArray);\n\t     */\n\t    C.MD5 = Hasher._createHelper(MD5);\n\n\t    /**\n\t     * Shortcut function to the HMAC's object interface.\n\t     *\n\t     * @param {WordArray|string} message The message to hash.\n\t     * @param {WordArray|string} key The secret key.\n\t     *\n\t     * @return {WordArray} The HMAC.\n\t     *\n\t     * @static\n\t     *\n\t     * @example\n\t     *\n\t     *     var hmac = CryptoJS.HmacMD5(message, key);\n\t     */\n\t    C.HmacMD5 = Hasher._createHmacHelper(MD5);\n\t}(Math));\n\n\n\treturn CryptoJS.MD5;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher Feedback block mode.\n\t */\n\tCryptoJS.mode.CFB = (function () {\n\t    var CFB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t    CFB.Encryptor = CFB.extend({\n\t        processBlock: function (words, offset) {\n\t            // Shortcuts\n\t            var cipher = this._cipher;\n\t            var blockSize = cipher.blockSize;\n\n\t            generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n\t            // Remember this block to use with next block\n\t            this._prevBlock = words.slice(offset, offset + blockSize);\n\t        }\n\t    });\n\n\t    CFB.Decryptor = CFB.extend({\n\t        processBlock: function (words, offset) {\n\t            // Shortcuts\n\t            var cipher = this._cipher;\n\t            var blockSize = cipher.blockSize;\n\n\t            // Remember this block to use with next block\n\t            var thisBlock = words.slice(offset, offset + blockSize);\n\n\t            generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n\t            // This block becomes the previous block\n\t            this._prevBlock = thisBlock;\n\t        }\n\t    });\n\n\t    function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) {\n\t        var keystream;\n\n\t        // Shortcut\n\t        var iv = this._iv;\n\n\t        // Generate keystream\n\t        if (iv) {\n\t            keystream = iv.slice(0);\n\n\t            // Remove IV for subsequent blocks\n\t            this._iv = undefined;\n\t        } else {\n\t            keystream = this._prevBlock;\n\t        }\n\t        cipher.encryptBlock(keystream, 0);\n\n\t        // Encrypt\n\t        for (var i = 0; i < blockSize; i++) {\n\t            words[offset + i] ^= keystream[i];\n\t        }\n\t    }\n\n\t    return CFB;\n\t}());\n\n\n\treturn CryptoJS.mode.CFB;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/** @preserve\n\t * Counter block mode compatible with  Dr Brian Gladman fileenc.c\n\t * derived from CryptoJS.mode.CTR\n\t * Jan Hruby jhruby.web@gmail.com\n\t */\n\tCryptoJS.mode.CTRGladman = (function () {\n\t    var CTRGladman = CryptoJS.lib.BlockCipherMode.extend();\n\n\t\tfunction incWord(word)\n\t\t{\n\t\t\tif (((word >> 24) & 0xff) === 0xff) { //overflow\n\t\t\tvar b1 = (word >> 16)&0xff;\n\t\t\tvar b2 = (word >> 8)&0xff;\n\t\t\tvar b3 = word & 0xff;\n\n\t\t\tif (b1 === 0xff) // overflow b1\n\t\t\t{\n\t\t\tb1 = 0;\n\t\t\tif (b2 === 0xff)\n\t\t\t{\n\t\t\t\tb2 = 0;\n\t\t\t\tif (b3 === 0xff)\n\t\t\t\t{\n\t\t\t\t\tb3 = 0;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t++b3;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t++b2;\n\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t++b1;\n\t\t\t}\n\n\t\t\tword = 0;\n\t\t\tword += (b1 << 16);\n\t\t\tword += (b2 << 8);\n\t\t\tword += b3;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\tword += (0x01 << 24);\n\t\t\t}\n\t\t\treturn word;\n\t\t}\n\n\t\tfunction incCounter(counter)\n\t\t{\n\t\t\tif ((counter[0] = incWord(counter[0])) === 0)\n\t\t\t{\n\t\t\t\t// encr_data in fileenc.c from  Dr Brian Gladman's counts only with DWORD j < 8\n\t\t\t\tcounter[1] = incWord(counter[1]);\n\t\t\t}\n\t\t\treturn counter;\n\t\t}\n\n\t    var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({\n\t        processBlock: function (words, offset) {\n\t            // Shortcuts\n\t            var cipher = this._cipher\n\t            var blockSize = cipher.blockSize;\n\t            var iv = this._iv;\n\t            var counter = this._counter;\n\n\t            // Generate keystream\n\t            if (iv) {\n\t                counter = this._counter = iv.slice(0);\n\n\t                // Remove IV for subsequent blocks\n\t                this._iv = undefined;\n\t            }\n\n\t\t\t\tincCounter(counter);\n\n\t\t\t\tvar keystream = counter.slice(0);\n\t            cipher.encryptBlock(keystream, 0);\n\n\t            // Encrypt\n\t            for (var i = 0; i < blockSize; i++) {\n\t                words[offset + i] ^= keystream[i];\n\t            }\n\t        }\n\t    });\n\n\t    CTRGladman.Decryptor = Encryptor;\n\n\t    return CTRGladman;\n\t}());\n\n\n\n\n\treturn CryptoJS.mode.CTRGladman;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Counter block mode.\n\t */\n\tCryptoJS.mode.CTR = (function () {\n\t    var CTR = CryptoJS.lib.BlockCipherMode.extend();\n\n\t    var Encryptor = CTR.Encryptor = CTR.extend({\n\t        processBlock: function (words, offset) {\n\t            // Shortcuts\n\t            var cipher = this._cipher\n\t            var blockSize = cipher.blockSize;\n\t            var iv = this._iv;\n\t            var counter = this._counter;\n\n\t            // Generate keystream\n\t            if (iv) {\n\t                counter = this._counter = iv.slice(0);\n\n\t                // Remove IV for subsequent blocks\n\t                this._iv = undefined;\n\t            }\n\t            var keystream = counter.slice(0);\n\t            cipher.encryptBlock(keystream, 0);\n\n\t            // Increment counter\n\t            counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0\n\n\t            // Encrypt\n\t            for (var i = 0; i < blockSize; i++) {\n\t                words[offset + i] ^= keystream[i];\n\t            }\n\t        }\n\t    });\n\n\t    CTR.Decryptor = Encryptor;\n\n\t    return CTR;\n\t}());\n\n\n\treturn CryptoJS.mode.CTR;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Electronic Codebook block mode.\n\t */\n\tCryptoJS.mode.ECB = (function () {\n\t    var ECB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t    ECB.Encryptor = ECB.extend({\n\t        processBlock: function (words, offset) {\n\t            this._cipher.encryptBlock(words, offset);\n\t        }\n\t    });\n\n\t    ECB.Decryptor = ECB.extend({\n\t        processBlock: function (words, offset) {\n\t            this._cipher.decryptBlock(words, offset);\n\t        }\n\t    });\n\n\t    return ECB;\n\t}());\n\n\n\treturn CryptoJS.mode.ECB;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Output Feedback block mode.\n\t */\n\tCryptoJS.mode.OFB = (function () {\n\t    var OFB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t    var Encryptor = OFB.Encryptor = OFB.extend({\n\t        processBlock: function (words, offset) {\n\t            // Shortcuts\n\t            var cipher = this._cipher\n\t            var blockSize = cipher.blockSize;\n\t            var iv = this._iv;\n\t            var keystream = this._keystream;\n\n\t            // Generate keystream\n\t            if (iv) {\n\t                keystream = this._keystream = iv.slice(0);\n\n\t                // Remove IV for subsequent blocks\n\t                this._iv = undefined;\n\t            }\n\t            cipher.encryptBlock(keystream, 0);\n\n\t            // Encrypt\n\t            for (var i = 0; i < blockSize; i++) {\n\t                words[offset + i] ^= keystream[i];\n\t            }\n\t        }\n\t    });\n\n\t    OFB.Decryptor = Encryptor;\n\n\t    return OFB;\n\t}());\n\n\n\treturn CryptoJS.mode.OFB;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ANSI X.923 padding strategy.\n\t */\n\tCryptoJS.pad.AnsiX923 = {\n\t    pad: function (data, blockSize) {\n\t        // Shortcuts\n\t        var dataSigBytes = data.sigBytes;\n\t        var blockSizeBytes = blockSize * 4;\n\n\t        // Count padding bytes\n\t        var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes;\n\n\t        // Compute last byte position\n\t        var lastBytePos = dataSigBytes + nPaddingBytes - 1;\n\n\t        // Pad\n\t        data.clamp();\n\t        data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8);\n\t        data.sigBytes += nPaddingBytes;\n\t    },\n\n\t    unpad: function (data) {\n\t        // Get number of padding bytes from last byte\n\t        var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t        // Remove padding\n\t        data.sigBytes -= nPaddingBytes;\n\t    }\n\t};\n\n\n\treturn CryptoJS.pad.Ansix923;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ISO 10126 padding strategy.\n\t */\n\tCryptoJS.pad.Iso10126 = {\n\t    pad: function (data, blockSize) {\n\t        // Shortcut\n\t        var blockSizeBytes = blockSize * 4;\n\n\t        // Count padding bytes\n\t        var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t        // Pad\n\t        data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)).\n\t             concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1));\n\t    },\n\n\t    unpad: function (data) {\n\t        // Get number of padding bytes from last byte\n\t        var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t        // Remove padding\n\t        data.sigBytes -= nPaddingBytes;\n\t    }\n\t};\n\n\n\treturn CryptoJS.pad.Iso10126;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ISO/IEC 9797-1 Padding Method 2.\n\t */\n\tCryptoJS.pad.Iso97971 = {\n\t    pad: function (data, blockSize) {\n\t        // Add 0x80 byte\n\t        data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1));\n\n\t        // Zero pad the rest\n\t        CryptoJS.pad.ZeroPadding.pad(data, blockSize);\n\t    },\n\n\t    unpad: function (data) {\n\t        // Remove zero padding\n\t        CryptoJS.pad.ZeroPadding.unpad(data);\n\n\t        // Remove one more byte -- the 0x80 byte\n\t        data.sigBytes--;\n\t    }\n\t};\n\n\n\treturn CryptoJS.pad.Iso97971;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * A noop padding strategy.\n\t */\n\tCryptoJS.pad.NoPadding = {\n\t    pad: function () {\n\t    },\n\n\t    unpad: function () {\n\t    }\n\t};\n\n\n\treturn CryptoJS.pad.NoPadding;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Zero padding strategy.\n\t */\n\tCryptoJS.pad.ZeroPadding = {\n\t    pad: function (data, blockSize) {\n\t        // Shortcut\n\t        var blockSizeBytes = blockSize * 4;\n\n\t        // Pad\n\t        data.clamp();\n\t        data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes);\n\t    },\n\n\t    unpad: function (data) {\n\t        // Shortcut\n\t        var dataWords = data.words;\n\n\t        // Unpad\n\t        var i = data.sigBytes - 1;\n\t        for (var i = data.sigBytes - 1; i >= 0; i--) {\n\t            if (((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) {\n\t                data.sigBytes = i + 1;\n\t                break;\n\t            }\n\t        }\n\t    }\n\t};\n\n\n\treturn CryptoJS.pad.ZeroPadding;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha256\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha256\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_lib = C.lib;\n\t    var Base = C_lib.Base;\n\t    var WordArray = C_lib.WordArray;\n\t    var C_algo = C.algo;\n\t    var SHA256 = C_algo.SHA256;\n\t    var HMAC = C_algo.HMAC;\n\n\t    /**\n\t     * Password-Based Key Derivation Function 2 algorithm.\n\t     */\n\t    var PBKDF2 = C_algo.PBKDF2 = Base.extend({\n\t        /**\n\t         * Configuration options.\n\t         *\n\t         * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t         * @property {Hasher} hasher The hasher to use. Default: SHA256\n\t         * @property {number} iterations The number of iterations to perform. Default: 250000\n\t         */\n\t        cfg: Base.extend({\n\t            keySize: 128/32,\n\t            hasher: SHA256,\n\t            iterations: 250000\n\t        }),\n\n\t        /**\n\t         * Initializes a newly created key derivation function.\n\t         *\n\t         * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t         *\n\t         * @example\n\t         *\n\t         *     var kdf = CryptoJS.algo.PBKDF2.create();\n\t         *     var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });\n\t         *     var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });\n\t         */\n\t        init: function (cfg) {\n\t            this.cfg = this.cfg.extend(cfg);\n\t        },\n\n\t        /**\n\t         * Computes the Password-Based Key Derivation Function 2.\n\t         *\n\t         * @param {WordArray|string} password The password.\n\t         * @param {WordArray|string} salt A salt.\n\t         *\n\t         * @return {WordArray} The derived key.\n\t         *\n\t         * @example\n\t         *\n\t         *     var key = kdf.compute(password, salt);\n\t         */\n\t        compute: function (password, salt) {\n\t            // Shortcut\n\t            var cfg = this.cfg;\n\n\t            // Init HMAC\n\t            var hmac = HMAC.create(cfg.hasher, password);\n\n\t            // Initial values\n\t            var derivedKey = WordArray.create();\n\t            var blockIndex = WordArray.create([0x00000001]);\n\n\t            // Shortcuts\n\t            var derivedKeyWords = derivedKey.words;\n\t            var blockIndexWords = blockIndex.words;\n\t            var keySize = cfg.keySize;\n\t            var iterations = cfg.iterations;\n\n\t            // Generate key\n\t            while (derivedKeyWords.length < keySize) {\n\t                var block = hmac.update(salt).finalize(blockIndex);\n\t                hmac.reset();\n\n\t                // Shortcuts\n\t                var blockWords = block.words;\n\t                var blockWordsLength = blockWords.length;\n\n\t                // Iterations\n\t                var intermediate = block;\n\t                for (var i = 1; i < iterations; i++) {\n\t                    intermediate = hmac.finalize(intermediate);\n\t                    hmac.reset();\n\n\t                    // Shortcut\n\t                    var intermediateWords = intermediate.words;\n\n\t                    // XOR intermediate with block\n\t                    for (var j = 0; j < blockWordsLength; j++) {\n\t                        blockWords[j] ^= intermediateWords[j];\n\t                    }\n\t                }\n\n\t                derivedKey.concat(block);\n\t                blockIndexWords[0]++;\n\t            }\n\t            derivedKey.sigBytes = keySize * 4;\n\n\t            return derivedKey;\n\t        }\n\t    });\n\n\t    /**\n\t     * Computes the Password-Based Key Derivation Function 2.\n\t     *\n\t     * @param {WordArray|string} password The password.\n\t     * @param {WordArray|string} salt A salt.\n\t     * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t     *\n\t     * @return {WordArray} The derived key.\n\t     *\n\t     * @static\n\t     *\n\t     * @example\n\t     *\n\t     *     var key = CryptoJS.PBKDF2(password, salt);\n\t     *     var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });\n\t     *     var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });\n\t     */\n\t    C.PBKDF2 = function (password, salt, cfg) {\n\t        return PBKDF2.create(cfg).compute(password, salt);\n\t    };\n\t}());\n\n\n\treturn CryptoJS.PBKDF2;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_lib = C.lib;\n\t    var StreamCipher = C_lib.StreamCipher;\n\t    var C_algo = C.algo;\n\n\t    // Reusable objects\n\t    var S  = [];\n\t    var C_ = [];\n\t    var G  = [];\n\n\t    /**\n\t     * Rabbit stream cipher algorithm.\n\t     *\n\t     * This is a legacy version that neglected to convert the key to little-endian.\n\t     * This error doesn't affect the cipher's security,\n\t     * but it does affect its compatibility with other implementations.\n\t     */\n\t    var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({\n\t        _doReset: function () {\n\t            // Shortcuts\n\t            var K = this._key.words;\n\t            var iv = this.cfg.iv;\n\n\t            // Generate initial state values\n\t            var X = this._X = [\n\t                K[0], (K[3] << 16) | (K[2] >>> 16),\n\t                K[1], (K[0] << 16) | (K[3] >>> 16),\n\t                K[2], (K[1] << 16) | (K[0] >>> 16),\n\t                K[3], (K[2] << 16) | (K[1] >>> 16)\n\t            ];\n\n\t            // Generate initial counter values\n\t            var C = this._C = [\n\t                (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t                (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t                (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t                (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t            ];\n\n\t            // Carry bit\n\t            this._b = 0;\n\n\t            // Iterate the system four times\n\t            for (var i = 0; i < 4; i++) {\n\t                nextState.call(this);\n\t            }\n\n\t            // Modify the counters\n\t            for (var i = 0; i < 8; i++) {\n\t                C[i] ^= X[(i + 4) & 7];\n\t            }\n\n\t            // IV setup\n\t            if (iv) {\n\t                // Shortcuts\n\t                var IV = iv.words;\n\t                var IV_0 = IV[0];\n\t                var IV_1 = IV[1];\n\n\t                // Generate four subvectors\n\t                var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t                var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t                var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t                var i3 = (i2 << 16)  | (i0 & 0x0000ffff);\n\n\t                // Modify counter values\n\t                C[0] ^= i0;\n\t                C[1] ^= i1;\n\t                C[2] ^= i2;\n\t                C[3] ^= i3;\n\t                C[4] ^= i0;\n\t                C[5] ^= i1;\n\t                C[6] ^= i2;\n\t                C[7] ^= i3;\n\n\t                // Iterate the system four times\n\t                for (var i = 0; i < 4; i++) {\n\t                    nextState.call(this);\n\t                }\n\t            }\n\t        },\n\n\t        _doProcessBlock: function (M, offset) {\n\t            // Shortcut\n\t            var X = this._X;\n\n\t            // Iterate the system\n\t            nextState.call(this);\n\n\t            // Generate four keystream words\n\t            S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t            S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t            S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t            S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t            for (var i = 0; i < 4; i++) {\n\t                // Swap endian\n\t                S[i] = (((S[i] << 8)  | (S[i] >>> 24)) & 0x00ff00ff) |\n\t                       (((S[i] << 24) | (S[i] >>> 8))  & 0xff00ff00);\n\n\t                // Encrypt\n\t                M[offset + i] ^= S[i];\n\t            }\n\t        },\n\n\t        blockSize: 128/32,\n\n\t        ivSize: 64/32\n\t    });\n\n\t    function nextState() {\n\t        // Shortcuts\n\t        var X = this._X;\n\t        var C = this._C;\n\n\t        // Save old counter values\n\t        for (var i = 0; i < 8; i++) {\n\t            C_[i] = C[i];\n\t        }\n\n\t        // Calculate new counter values\n\t        C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t        C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t        C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t        C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t        C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t        C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t        C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t        C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t        this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t        // Calculate the g-values\n\t        for (var i = 0; i < 8; i++) {\n\t            var gx = X[i] + C[i];\n\n\t            // Construct high and low argument for squaring\n\t            var ga = gx & 0xffff;\n\t            var gb = gx >>> 16;\n\n\t            // Calculate high and low result of squaring\n\t            var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t            var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t            // High XOR low\n\t            G[i] = gh ^ gl;\n\t        }\n\n\t        // Calculate new state values\n\t        X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t        X[1] = (G[1] + ((G[0] << 8)  | (G[0] >>> 24)) + G[7]) | 0;\n\t        X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t        X[3] = (G[3] + ((G[2] << 8)  | (G[2] >>> 24)) + G[1]) | 0;\n\t        X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t        X[5] = (G[5] + ((G[4] << 8)  | (G[4] >>> 24)) + G[3]) | 0;\n\t        X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t        X[7] = (G[7] + ((G[6] << 8)  | (G[6] >>> 24)) + G[5]) | 0;\n\t    }\n\n\t    /**\n\t     * Shortcut functions to the cipher's object interface.\n\t     *\n\t     * @example\n\t     *\n\t     *     var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg);\n\t     *     var plaintext  = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg);\n\t     */\n\t    C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy);\n\t}());\n\n\n\treturn CryptoJS.RabbitLegacy;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_lib = C.lib;\n\t    var StreamCipher = C_lib.StreamCipher;\n\t    var C_algo = C.algo;\n\n\t    // Reusable objects\n\t    var S  = [];\n\t    var C_ = [];\n\t    var G  = [];\n\n\t    /**\n\t     * Rabbit stream cipher algorithm\n\t     */\n\t    var Rabbit = C_algo.Rabbit = StreamCipher.extend({\n\t        _doReset: function () {\n\t            // Shortcuts\n\t            var K = this._key.words;\n\t            var iv = this.cfg.iv;\n\n\t            // Swap endian\n\t            for (var i = 0; i < 4; i++) {\n\t                K[i] = (((K[i] << 8)  | (K[i] >>> 24)) & 0x00ff00ff) |\n\t                       (((K[i] << 24) | (K[i] >>> 8))  & 0xff00ff00);\n\t            }\n\n\t            // Generate initial state values\n\t            var X = this._X = [\n\t                K[0], (K[3] << 16) | (K[2] >>> 16),\n\t                K[1], (K[0] << 16) | (K[3] >>> 16),\n\t                K[2], (K[1] << 16) | (K[0] >>> 16),\n\t                K[3], (K[2] << 16) | (K[1] >>> 16)\n\t            ];\n\n\t            // Generate initial counter values\n\t            var C = this._C = [\n\t                (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t                (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t                (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t                (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t            ];\n\n\t            // Carry bit\n\t            this._b = 0;\n\n\t            // Iterate the system four times\n\t            for (var i = 0; i < 4; i++) {\n\t                nextState.call(this);\n\t            }\n\n\t            // Modify the counters\n\t            for (var i = 0; i < 8; i++) {\n\t                C[i] ^= X[(i + 4) & 7];\n\t            }\n\n\t            // IV setup\n\t            if (iv) {\n\t                // Shortcuts\n\t                var IV = iv.words;\n\t                var IV_0 = IV[0];\n\t                var IV_1 = IV[1];\n\n\t                // Generate four subvectors\n\t                var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t                var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t                var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t                var i3 = (i2 << 16)  | (i0 & 0x0000ffff);\n\n\t                // Modify counter values\n\t                C[0] ^= i0;\n\t                C[1] ^= i1;\n\t                C[2] ^= i2;\n\t                C[3] ^= i3;\n\t                C[4] ^= i0;\n\t                C[5] ^= i1;\n\t                C[6] ^= i2;\n\t                C[7] ^= i3;\n\n\t                // Iterate the system four times\n\t                for (var i = 0; i < 4; i++) {\n\t                    nextState.call(this);\n\t                }\n\t            }\n\t        },\n\n\t        _doProcessBlock: function (M, offset) {\n\t            // Shortcut\n\t            var X = this._X;\n\n\t            // Iterate the system\n\t            nextState.call(this);\n\n\t            // Generate four keystream words\n\t            S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t            S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t            S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t            S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t            for (var i = 0; i < 4; i++) {\n\t                // Swap endian\n\t                S[i] = (((S[i] << 8)  | (S[i] >>> 24)) & 0x00ff00ff) |\n\t                       (((S[i] << 24) | (S[i] >>> 8))  & 0xff00ff00);\n\n\t                // Encrypt\n\t                M[offset + i] ^= S[i];\n\t            }\n\t        },\n\n\t        blockSize: 128/32,\n\n\t        ivSize: 64/32\n\t    });\n\n\t    function nextState() {\n\t        // Shortcuts\n\t        var X = this._X;\n\t        var C = this._C;\n\n\t        // Save old counter values\n\t        for (var i = 0; i < 8; i++) {\n\t            C_[i] = C[i];\n\t        }\n\n\t        // Calculate new counter values\n\t        C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t        C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t        C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t        C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t        C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t        C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t        C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t        C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t        this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t        // Calculate the g-values\n\t        for (var i = 0; i < 8; i++) {\n\t            var gx = X[i] + C[i];\n\n\t            // Construct high and low argument for squaring\n\t            var ga = gx & 0xffff;\n\t            var gb = gx >>> 16;\n\n\t            // Calculate high and low result of squaring\n\t            var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t            var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t            // High XOR low\n\t            G[i] = gh ^ gl;\n\t        }\n\n\t        // Calculate new state values\n\t        X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t        X[1] = (G[1] + ((G[0] << 8)  | (G[0] >>> 24)) + G[7]) | 0;\n\t        X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t        X[3] = (G[3] + ((G[2] << 8)  | (G[2] >>> 24)) + G[1]) | 0;\n\t        X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t        X[5] = (G[5] + ((G[4] << 8)  | (G[4] >>> 24)) + G[3]) | 0;\n\t        X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t        X[7] = (G[7] + ((G[6] << 8)  | (G[6] >>> 24)) + G[5]) | 0;\n\t    }\n\n\t    /**\n\t     * Shortcut functions to the cipher's object interface.\n\t     *\n\t     * @example\n\t     *\n\t     *     var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);\n\t     *     var plaintext  = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);\n\t     */\n\t    C.Rabbit = StreamCipher._createHelper(Rabbit);\n\t}());\n\n\n\treturn CryptoJS.Rabbit;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_lib = C.lib;\n\t    var StreamCipher = C_lib.StreamCipher;\n\t    var C_algo = C.algo;\n\n\t    /**\n\t     * RC4 stream cipher algorithm.\n\t     */\n\t    var RC4 = C_algo.RC4 = StreamCipher.extend({\n\t        _doReset: function () {\n\t            // Shortcuts\n\t            var key = this._key;\n\t            var keyWords = key.words;\n\t            var keySigBytes = key.sigBytes;\n\n\t            // Init sbox\n\t            var S = this._S = [];\n\t            for (var i = 0; i < 256; i++) {\n\t                S[i] = i;\n\t            }\n\n\t            // Key setup\n\t            for (var i = 0, j = 0; i < 256; i++) {\n\t                var keyByteIndex = i % keySigBytes;\n\t                var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff;\n\n\t                j = (j + S[i] + keyByte) % 256;\n\n\t                // Swap\n\t                var t = S[i];\n\t                S[i] = S[j];\n\t                S[j] = t;\n\t            }\n\n\t            // Counters\n\t            this._i = this._j = 0;\n\t        },\n\n\t        _doProcessBlock: function (M, offset) {\n\t            M[offset] ^= generateKeystreamWord.call(this);\n\t        },\n\n\t        keySize: 256/32,\n\n\t        ivSize: 0\n\t    });\n\n\t    function generateKeystreamWord() {\n\t        // Shortcuts\n\t        var S = this._S;\n\t        var i = this._i;\n\t        var j = this._j;\n\n\t        // Generate keystream word\n\t        var keystreamWord = 0;\n\t        for (var n = 0; n < 4; n++) {\n\t            i = (i + 1) % 256;\n\t            j = (j + S[i]) % 256;\n\n\t            // Swap\n\t            var t = S[i];\n\t            S[i] = S[j];\n\t            S[j] = t;\n\n\t            keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8);\n\t        }\n\n\t        // Update counters\n\t        this._i = i;\n\t        this._j = j;\n\n\t        return keystreamWord;\n\t    }\n\n\t    /**\n\t     * Shortcut functions to the cipher's object interface.\n\t     *\n\t     * @example\n\t     *\n\t     *     var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);\n\t     *     var plaintext  = CryptoJS.RC4.decrypt(ciphertext, key, cfg);\n\t     */\n\t    C.RC4 = StreamCipher._createHelper(RC4);\n\n\t    /**\n\t     * Modified RC4 stream cipher algorithm.\n\t     */\n\t    var RC4Drop = C_algo.RC4Drop = RC4.extend({\n\t        /**\n\t         * Configuration options.\n\t         *\n\t         * @property {number} drop The number of keystream words to drop. Default 192\n\t         */\n\t        cfg: RC4.cfg.extend({\n\t            drop: 192\n\t        }),\n\n\t        _doReset: function () {\n\t            RC4._doReset.call(this);\n\n\t            // Drop\n\t            for (var i = this.cfg.drop; i > 0; i--) {\n\t                generateKeystreamWord.call(this);\n\t            }\n\t        }\n\t    });\n\n\t    /**\n\t     * Shortcut functions to the cipher's object interface.\n\t     *\n\t     * @example\n\t     *\n\t     *     var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);\n\t     *     var plaintext  = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);\n\t     */\n\t    C.RC4Drop = StreamCipher._createHelper(RC4Drop);\n\t}());\n\n\n\treturn CryptoJS.RC4;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/** @preserve\n\t(c) 2012 by Cédric Mesnil. All rights reserved.\n\n\tRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n\t    - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n\t    - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n\tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t*/\n\n\t(function (Math) {\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_lib = C.lib;\n\t    var WordArray = C_lib.WordArray;\n\t    var Hasher = C_lib.Hasher;\n\t    var C_algo = C.algo;\n\n\t    // Constants table\n\t    var _zl = WordArray.create([\n\t        0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,\n\t        7,  4, 13,  1, 10,  6, 15,  3, 12,  0,  9,  5,  2, 14, 11,  8,\n\t        3, 10, 14,  4,  9, 15,  8,  1,  2,  7,  0,  6, 13, 11,  5, 12,\n\t        1,  9, 11, 10,  0,  8, 12,  4, 13,  3,  7, 15, 14,  5,  6,  2,\n\t        4,  0,  5,  9,  7, 12,  2, 10, 14,  1,  3,  8, 11,  6, 15, 13]);\n\t    var _zr = WordArray.create([\n\t        5, 14,  7,  0,  9,  2, 11,  4, 13,  6, 15,  8,  1, 10,  3, 12,\n\t        6, 11,  3,  7,  0, 13,  5, 10, 14, 15,  8, 12,  4,  9,  1,  2,\n\t        15,  5,  1,  3,  7, 14,  6,  9, 11,  8, 12,  2, 10,  0,  4, 13,\n\t        8,  6,  4,  1,  3, 11, 15,  0,  5, 12,  2, 13,  9,  7, 10, 14,\n\t        12, 15, 10,  4,  1,  5,  8,  7,  6,  2, 13, 14,  0,  3,  9, 11]);\n\t    var _sl = WordArray.create([\n\t         11, 14, 15, 12,  5,  8,  7,  9, 11, 13, 14, 15,  6,  7,  9,  8,\n\t        7, 6,   8, 13, 11,  9,  7, 15,  7, 12, 15,  9, 11,  7, 13, 12,\n\t        11, 13,  6,  7, 14,  9, 13, 15, 14,  8, 13,  6,  5, 12,  7,  5,\n\t          11, 12, 14, 15, 14, 15,  9,  8,  9, 14,  5,  6,  8,  6,  5, 12,\n\t        9, 15,  5, 11,  6,  8, 13, 12,  5, 12, 13, 14, 11,  8,  5,  6 ]);\n\t    var _sr = WordArray.create([\n\t        8,  9,  9, 11, 13, 15, 15,  5,  7,  7,  8, 11, 14, 14, 12,  6,\n\t        9, 13, 15,  7, 12,  8,  9, 11,  7,  7, 12,  7,  6, 15, 13, 11,\n\t        9,  7, 15, 11,  8,  6,  6, 14, 12, 13,  5, 14, 13, 13,  7,  5,\n\t        15,  5,  8, 11, 14, 14,  6, 14,  6,  9, 12,  9, 12,  5, 15,  8,\n\t        8,  5, 12,  9, 12,  5, 14,  6,  8, 13,  6,  5, 15, 13, 11, 11 ]);\n\n\t    var _hl =  WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]);\n\t    var _hr =  WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]);\n\n\t    /**\n\t     * RIPEMD160 hash algorithm.\n\t     */\n\t    var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({\n\t        _doReset: function () {\n\t            this._hash  = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]);\n\t        },\n\n\t        _doProcessBlock: function (M, offset) {\n\n\t            // Swap endian\n\t            for (var i = 0; i < 16; i++) {\n\t                // Shortcuts\n\t                var offset_i = offset + i;\n\t                var M_offset_i = M[offset_i];\n\n\t                // Swap\n\t                M[offset_i] = (\n\t                    (((M_offset_i << 8)  | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t                    (((M_offset_i << 24) | (M_offset_i >>> 8))  & 0xff00ff00)\n\t                );\n\t            }\n\t            // Shortcut\n\t            var H  = this._hash.words;\n\t            var hl = _hl.words;\n\t            var hr = _hr.words;\n\t            var zl = _zl.words;\n\t            var zr = _zr.words;\n\t            var sl = _sl.words;\n\t            var sr = _sr.words;\n\n\t            // Working variables\n\t            var al, bl, cl, dl, el;\n\t            var ar, br, cr, dr, er;\n\n\t            ar = al = H[0];\n\t            br = bl = H[1];\n\t            cr = cl = H[2];\n\t            dr = dl = H[3];\n\t            er = el = H[4];\n\t            // Computation\n\t            var t;\n\t            for (var i = 0; i < 80; i += 1) {\n\t                t = (al +  M[offset+zl[i]])|0;\n\t                if (i<16){\n\t\t            t +=  f1(bl,cl,dl) + hl[0];\n\t                } else if (i<32) {\n\t\t            t +=  f2(bl,cl,dl) + hl[1];\n\t                } else if (i<48) {\n\t\t            t +=  f3(bl,cl,dl) + hl[2];\n\t                } else if (i<64) {\n\t\t            t +=  f4(bl,cl,dl) + hl[3];\n\t                } else {// if (i<80) {\n\t\t            t +=  f5(bl,cl,dl) + hl[4];\n\t                }\n\t                t = t|0;\n\t                t =  rotl(t,sl[i]);\n\t                t = (t+el)|0;\n\t                al = el;\n\t                el = dl;\n\t                dl = rotl(cl, 10);\n\t                cl = bl;\n\t                bl = t;\n\n\t                t = (ar + M[offset+zr[i]])|0;\n\t                if (i<16){\n\t\t            t +=  f5(br,cr,dr) + hr[0];\n\t                } else if (i<32) {\n\t\t            t +=  f4(br,cr,dr) + hr[1];\n\t                } else if (i<48) {\n\t\t            t +=  f3(br,cr,dr) + hr[2];\n\t                } else if (i<64) {\n\t\t            t +=  f2(br,cr,dr) + hr[3];\n\t                } else {// if (i<80) {\n\t\t            t +=  f1(br,cr,dr) + hr[4];\n\t                }\n\t                t = t|0;\n\t                t =  rotl(t,sr[i]) ;\n\t                t = (t+er)|0;\n\t                ar = er;\n\t                er = dr;\n\t                dr = rotl(cr, 10);\n\t                cr = br;\n\t                br = t;\n\t            }\n\t            // Intermediate hash value\n\t            t    = (H[1] + cl + dr)|0;\n\t            H[1] = (H[2] + dl + er)|0;\n\t            H[2] = (H[3] + el + ar)|0;\n\t            H[3] = (H[4] + al + br)|0;\n\t            H[4] = (H[0] + bl + cr)|0;\n\t            H[0] =  t;\n\t        },\n\n\t        _doFinalize: function () {\n\t            // Shortcuts\n\t            var data = this._data;\n\t            var dataWords = data.words;\n\n\t            var nBitsTotal = this._nDataBytes * 8;\n\t            var nBitsLeft = data.sigBytes * 8;\n\n\t            // Add padding\n\t            dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t            dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t                (((nBitsTotal << 8)  | (nBitsTotal >>> 24)) & 0x00ff00ff) |\n\t                (((nBitsTotal << 24) | (nBitsTotal >>> 8))  & 0xff00ff00)\n\t            );\n\t            data.sigBytes = (dataWords.length + 1) * 4;\n\n\t            // Hash final blocks\n\t            this._process();\n\n\t            // Shortcuts\n\t            var hash = this._hash;\n\t            var H = hash.words;\n\n\t            // Swap endian\n\t            for (var i = 0; i < 5; i++) {\n\t                // Shortcut\n\t                var H_i = H[i];\n\n\t                // Swap\n\t                H[i] = (((H_i << 8)  | (H_i >>> 24)) & 0x00ff00ff) |\n\t                       (((H_i << 24) | (H_i >>> 8))  & 0xff00ff00);\n\t            }\n\n\t            // Return final computed hash\n\t            return hash;\n\t        },\n\n\t        clone: function () {\n\t            var clone = Hasher.clone.call(this);\n\t            clone._hash = this._hash.clone();\n\n\t            return clone;\n\t        }\n\t    });\n\n\n\t    function f1(x, y, z) {\n\t        return ((x) ^ (y) ^ (z));\n\n\t    }\n\n\t    function f2(x, y, z) {\n\t        return (((x)&(y)) | ((~x)&(z)));\n\t    }\n\n\t    function f3(x, y, z) {\n\t        return (((x) | (~(y))) ^ (z));\n\t    }\n\n\t    function f4(x, y, z) {\n\t        return (((x) & (z)) | ((y)&(~(z))));\n\t    }\n\n\t    function f5(x, y, z) {\n\t        return ((x) ^ ((y) |(~(z))));\n\n\t    }\n\n\t    function rotl(x,n) {\n\t        return (x<<n) | (x>>>(32-n));\n\t    }\n\n\n\t    /**\n\t     * Shortcut function to the hasher's object interface.\n\t     *\n\t     * @param {WordArray|string} message The message to hash.\n\t     *\n\t     * @return {WordArray} The hash.\n\t     *\n\t     * @static\n\t     *\n\t     * @example\n\t     *\n\t     *     var hash = CryptoJS.RIPEMD160('message');\n\t     *     var hash = CryptoJS.RIPEMD160(wordArray);\n\t     */\n\t    C.RIPEMD160 = Hasher._createHelper(RIPEMD160);\n\n\t    /**\n\t     * Shortcut function to the HMAC's object interface.\n\t     *\n\t     * @param {WordArray|string} message The message to hash.\n\t     * @param {WordArray|string} key The secret key.\n\t     *\n\t     * @return {WordArray} The HMAC.\n\t     *\n\t     * @static\n\t     *\n\t     * @example\n\t     *\n\t     *     var hmac = CryptoJS.HmacRIPEMD160(message, key);\n\t     */\n\t    C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160);\n\t}(Math));\n\n\n\treturn CryptoJS.RIPEMD160;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_lib = C.lib;\n\t    var WordArray = C_lib.WordArray;\n\t    var Hasher = C_lib.Hasher;\n\t    var C_algo = C.algo;\n\n\t    // Reusable object\n\t    var W = [];\n\n\t    /**\n\t     * SHA-1 hash algorithm.\n\t     */\n\t    var SHA1 = C_algo.SHA1 = Hasher.extend({\n\t        _doReset: function () {\n\t            this._hash = new WordArray.init([\n\t                0x67452301, 0xefcdab89,\n\t                0x98badcfe, 0x10325476,\n\t                0xc3d2e1f0\n\t            ]);\n\t        },\n\n\t        _doProcessBlock: function (M, offset) {\n\t            // Shortcut\n\t            var H = this._hash.words;\n\n\t            // Working variables\n\t            var a = H[0];\n\t            var b = H[1];\n\t            var c = H[2];\n\t            var d = H[3];\n\t            var e = H[4];\n\n\t            // Computation\n\t            for (var i = 0; i < 80; i++) {\n\t                if (i < 16) {\n\t                    W[i] = M[offset + i] | 0;\n\t                } else {\n\t                    var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n\t                    W[i] = (n << 1) | (n >>> 31);\n\t                }\n\n\t                var t = ((a << 5) | (a >>> 27)) + e + W[i];\n\t                if (i < 20) {\n\t                    t += ((b & c) | (~b & d)) + 0x5a827999;\n\t                } else if (i < 40) {\n\t                    t += (b ^ c ^ d) + 0x6ed9eba1;\n\t                } else if (i < 60) {\n\t                    t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;\n\t                } else /* if (i < 80) */ {\n\t                    t += (b ^ c ^ d) - 0x359d3e2a;\n\t                }\n\n\t                e = d;\n\t                d = c;\n\t                c = (b << 30) | (b >>> 2);\n\t                b = a;\n\t                a = t;\n\t            }\n\n\t            // Intermediate hash value\n\t            H[0] = (H[0] + a) | 0;\n\t            H[1] = (H[1] + b) | 0;\n\t            H[2] = (H[2] + c) | 0;\n\t            H[3] = (H[3] + d) | 0;\n\t            H[4] = (H[4] + e) | 0;\n\t        },\n\n\t        _doFinalize: function () {\n\t            // Shortcuts\n\t            var data = this._data;\n\t            var dataWords = data.words;\n\n\t            var nBitsTotal = this._nDataBytes * 8;\n\t            var nBitsLeft = data.sigBytes * 8;\n\n\t            // Add padding\n\t            dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t            dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t            dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t            data.sigBytes = dataWords.length * 4;\n\n\t            // Hash final blocks\n\t            this._process();\n\n\t            // Return final computed hash\n\t            return this._hash;\n\t        },\n\n\t        clone: function () {\n\t            var clone = Hasher.clone.call(this);\n\t            clone._hash = this._hash.clone();\n\n\t            return clone;\n\t        }\n\t    });\n\n\t    /**\n\t     * Shortcut function to the hasher's object interface.\n\t     *\n\t     * @param {WordArray|string} message The message to hash.\n\t     *\n\t     * @return {WordArray} The hash.\n\t     *\n\t     * @static\n\t     *\n\t     * @example\n\t     *\n\t     *     var hash = CryptoJS.SHA1('message');\n\t     *     var hash = CryptoJS.SHA1(wordArray);\n\t     */\n\t    C.SHA1 = Hasher._createHelper(SHA1);\n\n\t    /**\n\t     * Shortcut function to the HMAC's object interface.\n\t     *\n\t     * @param {WordArray|string} message The message to hash.\n\t     * @param {WordArray|string} key The secret key.\n\t     *\n\t     * @return {WordArray} The HMAC.\n\t     *\n\t     * @static\n\t     *\n\t     * @example\n\t     *\n\t     *     var hmac = CryptoJS.HmacSHA1(message, key);\n\t     */\n\t    C.HmacSHA1 = Hasher._createHmacHelper(SHA1);\n\t}());\n\n\n\treturn CryptoJS.SHA1;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha256\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha256\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_lib = C.lib;\n\t    var WordArray = C_lib.WordArray;\n\t    var C_algo = C.algo;\n\t    var SHA256 = C_algo.SHA256;\n\n\t    /**\n\t     * SHA-224 hash algorithm.\n\t     */\n\t    var SHA224 = C_algo.SHA224 = SHA256.extend({\n\t        _doReset: function () {\n\t            this._hash = new WordArray.init([\n\t                0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n\t                0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4\n\t            ]);\n\t        },\n\n\t        _doFinalize: function () {\n\t            var hash = SHA256._doFinalize.call(this);\n\n\t            hash.sigBytes -= 4;\n\n\t            return hash;\n\t        }\n\t    });\n\n\t    /**\n\t     * Shortcut function to the hasher's object interface.\n\t     *\n\t     * @param {WordArray|string} message The message to hash.\n\t     *\n\t     * @return {WordArray} The hash.\n\t     *\n\t     * @static\n\t     *\n\t     * @example\n\t     *\n\t     *     var hash = CryptoJS.SHA224('message');\n\t     *     var hash = CryptoJS.SHA224(wordArray);\n\t     */\n\t    C.SHA224 = SHA256._createHelper(SHA224);\n\n\t    /**\n\t     * Shortcut function to the HMAC's object interface.\n\t     *\n\t     * @param {WordArray|string} message The message to hash.\n\t     * @param {WordArray|string} key The secret key.\n\t     *\n\t     * @return {WordArray} The HMAC.\n\t     *\n\t     * @static\n\t     *\n\t     * @example\n\t     *\n\t     *     var hmac = CryptoJS.HmacSHA224(message, key);\n\t     */\n\t    C.HmacSHA224 = SHA256._createHmacHelper(SHA224);\n\t}());\n\n\n\treturn CryptoJS.SHA224;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_lib = C.lib;\n\t    var WordArray = C_lib.WordArray;\n\t    var Hasher = C_lib.Hasher;\n\t    var C_algo = C.algo;\n\n\t    // Initialization and round constants tables\n\t    var H = [];\n\t    var K = [];\n\n\t    // Compute constants\n\t    (function () {\n\t        function isPrime(n) {\n\t            var sqrtN = Math.sqrt(n);\n\t            for (var factor = 2; factor <= sqrtN; factor++) {\n\t                if (!(n % factor)) {\n\t                    return false;\n\t                }\n\t            }\n\n\t            return true;\n\t        }\n\n\t        function getFractionalBits(n) {\n\t            return ((n - (n | 0)) * 0x100000000) | 0;\n\t        }\n\n\t        var n = 2;\n\t        var nPrime = 0;\n\t        while (nPrime < 64) {\n\t            if (isPrime(n)) {\n\t                if (nPrime < 8) {\n\t                    H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t                }\n\t                K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t                nPrime++;\n\t            }\n\n\t            n++;\n\t        }\n\t    }());\n\n\t    // Reusable object\n\t    var W = [];\n\n\t    /**\n\t     * SHA-256 hash algorithm.\n\t     */\n\t    var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t        _doReset: function () {\n\t            this._hash = new WordArray.init(H.slice(0));\n\t        },\n\n\t        _doProcessBlock: function (M, offset) {\n\t            // Shortcut\n\t            var H = this._hash.words;\n\n\t            // Working variables\n\t            var a = H[0];\n\t            var b = H[1];\n\t            var c = H[2];\n\t            var d = H[3];\n\t            var e = H[4];\n\t            var f = H[5];\n\t            var g = H[6];\n\t            var h = H[7];\n\n\t            // Computation\n\t            for (var i = 0; i < 64; i++) {\n\t                if (i < 16) {\n\t                    W[i] = M[offset + i] | 0;\n\t                } else {\n\t                    var gamma0x = W[i - 15];\n\t                    var gamma0  = ((gamma0x << 25) | (gamma0x >>> 7))  ^\n\t                                  ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t                                   (gamma0x >>> 3);\n\n\t                    var gamma1x = W[i - 2];\n\t                    var gamma1  = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t                                  ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t                                   (gamma1x >>> 10);\n\n\t                    W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t                }\n\n\t                var ch  = (e & f) ^ (~e & g);\n\t                var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t                var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t                var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7)  | (e >>> 25));\n\n\t                var t1 = h + sigma1 + ch + K[i] + W[i];\n\t                var t2 = sigma0 + maj;\n\n\t                h = g;\n\t                g = f;\n\t                f = e;\n\t                e = (d + t1) | 0;\n\t                d = c;\n\t                c = b;\n\t                b = a;\n\t                a = (t1 + t2) | 0;\n\t            }\n\n\t            // Intermediate hash value\n\t            H[0] = (H[0] + a) | 0;\n\t            H[1] = (H[1] + b) | 0;\n\t            H[2] = (H[2] + c) | 0;\n\t            H[3] = (H[3] + d) | 0;\n\t            H[4] = (H[4] + e) | 0;\n\t            H[5] = (H[5] + f) | 0;\n\t            H[6] = (H[6] + g) | 0;\n\t            H[7] = (H[7] + h) | 0;\n\t        },\n\n\t        _doFinalize: function () {\n\t            // Shortcuts\n\t            var data = this._data;\n\t            var dataWords = data.words;\n\n\t            var nBitsTotal = this._nDataBytes * 8;\n\t            var nBitsLeft = data.sigBytes * 8;\n\n\t            // Add padding\n\t            dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t            dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t            dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t            data.sigBytes = dataWords.length * 4;\n\n\t            // Hash final blocks\n\t            this._process();\n\n\t            // Return final computed hash\n\t            return this._hash;\n\t        },\n\n\t        clone: function () {\n\t            var clone = Hasher.clone.call(this);\n\t            clone._hash = this._hash.clone();\n\n\t            return clone;\n\t        }\n\t    });\n\n\t    /**\n\t     * Shortcut function to the hasher's object interface.\n\t     *\n\t     * @param {WordArray|string} message The message to hash.\n\t     *\n\t     * @return {WordArray} The hash.\n\t     *\n\t     * @static\n\t     *\n\t     * @example\n\t     *\n\t     *     var hash = CryptoJS.SHA256('message');\n\t     *     var hash = CryptoJS.SHA256(wordArray);\n\t     */\n\t    C.SHA256 = Hasher._createHelper(SHA256);\n\n\t    /**\n\t     * Shortcut function to the HMAC's object interface.\n\t     *\n\t     * @param {WordArray|string} message The message to hash.\n\t     * @param {WordArray|string} key The secret key.\n\t     *\n\t     * @return {WordArray} The HMAC.\n\t     *\n\t     * @static\n\t     *\n\t     * @example\n\t     *\n\t     *     var hmac = CryptoJS.HmacSHA256(message, key);\n\t     */\n\t    C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA256;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_lib = C.lib;\n\t    var WordArray = C_lib.WordArray;\n\t    var Hasher = C_lib.Hasher;\n\t    var C_x64 = C.x64;\n\t    var X64Word = C_x64.Word;\n\t    var C_algo = C.algo;\n\n\t    // Constants tables\n\t    var RHO_OFFSETS = [];\n\t    var PI_INDEXES  = [];\n\t    var ROUND_CONSTANTS = [];\n\n\t    // Compute Constants\n\t    (function () {\n\t        // Compute rho offset constants\n\t        var x = 1, y = 0;\n\t        for (var t = 0; t < 24; t++) {\n\t            RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64;\n\n\t            var newX = y % 5;\n\t            var newY = (2 * x + 3 * y) % 5;\n\t            x = newX;\n\t            y = newY;\n\t        }\n\n\t        // Compute pi index constants\n\t        for (var x = 0; x < 5; x++) {\n\t            for (var y = 0; y < 5; y++) {\n\t                PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5;\n\t            }\n\t        }\n\n\t        // Compute round constants\n\t        var LFSR = 0x01;\n\t        for (var i = 0; i < 24; i++) {\n\t            var roundConstantMsw = 0;\n\t            var roundConstantLsw = 0;\n\n\t            for (var j = 0; j < 7; j++) {\n\t                if (LFSR & 0x01) {\n\t                    var bitPosition = (1 << j) - 1;\n\t                    if (bitPosition < 32) {\n\t                        roundConstantLsw ^= 1 << bitPosition;\n\t                    } else /* if (bitPosition >= 32) */ {\n\t                        roundConstantMsw ^= 1 << (bitPosition - 32);\n\t                    }\n\t                }\n\n\t                // Compute next LFSR\n\t                if (LFSR & 0x80) {\n\t                    // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1\n\t                    LFSR = (LFSR << 1) ^ 0x71;\n\t                } else {\n\t                    LFSR <<= 1;\n\t                }\n\t            }\n\n\t            ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);\n\t        }\n\t    }());\n\n\t    // Reusable objects for temporary values\n\t    var T = [];\n\t    (function () {\n\t        for (var i = 0; i < 25; i++) {\n\t            T[i] = X64Word.create();\n\t        }\n\t    }());\n\n\t    /**\n\t     * SHA-3 hash algorithm.\n\t     */\n\t    var SHA3 = C_algo.SHA3 = Hasher.extend({\n\t        /**\n\t         * Configuration options.\n\t         *\n\t         * @property {number} outputLength\n\t         *   The desired number of bits in the output hash.\n\t         *   Only values permitted are: 224, 256, 384, 512.\n\t         *   Default: 512\n\t         */\n\t        cfg: Hasher.cfg.extend({\n\t            outputLength: 512\n\t        }),\n\n\t        _doReset: function () {\n\t            var state = this._state = []\n\t            for (var i = 0; i < 25; i++) {\n\t                state[i] = new X64Word.init();\n\t            }\n\n\t            this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32;\n\t        },\n\n\t        _doProcessBlock: function (M, offset) {\n\t            // Shortcuts\n\t            var state = this._state;\n\t            var nBlockSizeLanes = this.blockSize / 2;\n\n\t            // Absorb\n\t            for (var i = 0; i < nBlockSizeLanes; i++) {\n\t                // Shortcuts\n\t                var M2i  = M[offset + 2 * i];\n\t                var M2i1 = M[offset + 2 * i + 1];\n\n\t                // Swap endian\n\t                M2i = (\n\t                    (((M2i << 8)  | (M2i >>> 24)) & 0x00ff00ff) |\n\t                    (((M2i << 24) | (M2i >>> 8))  & 0xff00ff00)\n\t                );\n\t                M2i1 = (\n\t                    (((M2i1 << 8)  | (M2i1 >>> 24)) & 0x00ff00ff) |\n\t                    (((M2i1 << 24) | (M2i1 >>> 8))  & 0xff00ff00)\n\t                );\n\n\t                // Absorb message into state\n\t                var lane = state[i];\n\t                lane.high ^= M2i1;\n\t                lane.low  ^= M2i;\n\t            }\n\n\t            // Rounds\n\t            for (var round = 0; round < 24; round++) {\n\t                // Theta\n\t                for (var x = 0; x < 5; x++) {\n\t                    // Mix column lanes\n\t                    var tMsw = 0, tLsw = 0;\n\t                    for (var y = 0; y < 5; y++) {\n\t                        var lane = state[x + 5 * y];\n\t                        tMsw ^= lane.high;\n\t                        tLsw ^= lane.low;\n\t                    }\n\n\t                    // Temporary values\n\t                    var Tx = T[x];\n\t                    Tx.high = tMsw;\n\t                    Tx.low  = tLsw;\n\t                }\n\t                for (var x = 0; x < 5; x++) {\n\t                    // Shortcuts\n\t                    var Tx4 = T[(x + 4) % 5];\n\t                    var Tx1 = T[(x + 1) % 5];\n\t                    var Tx1Msw = Tx1.high;\n\t                    var Tx1Lsw = Tx1.low;\n\n\t                    // Mix surrounding columns\n\t                    var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31));\n\t                    var tLsw = Tx4.low  ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31));\n\t                    for (var y = 0; y < 5; y++) {\n\t                        var lane = state[x + 5 * y];\n\t                        lane.high ^= tMsw;\n\t                        lane.low  ^= tLsw;\n\t                    }\n\t                }\n\n\t                // Rho Pi\n\t                for (var laneIndex = 1; laneIndex < 25; laneIndex++) {\n\t                    var tMsw;\n\t                    var tLsw;\n\n\t                    // Shortcuts\n\t                    var lane = state[laneIndex];\n\t                    var laneMsw = lane.high;\n\t                    var laneLsw = lane.low;\n\t                    var rhoOffset = RHO_OFFSETS[laneIndex];\n\n\t                    // Rotate lanes\n\t                    if (rhoOffset < 32) {\n\t                        tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset));\n\t                        tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset));\n\t                    } else /* if (rhoOffset >= 32) */ {\n\t                        tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset));\n\t                        tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset));\n\t                    }\n\n\t                    // Transpose lanes\n\t                    var TPiLane = T[PI_INDEXES[laneIndex]];\n\t                    TPiLane.high = tMsw;\n\t                    TPiLane.low  = tLsw;\n\t                }\n\n\t                // Rho pi at x = y = 0\n\t                var T0 = T[0];\n\t                var state0 = state[0];\n\t                T0.high = state0.high;\n\t                T0.low  = state0.low;\n\n\t                // Chi\n\t                for (var x = 0; x < 5; x++) {\n\t                    for (var y = 0; y < 5; y++) {\n\t                        // Shortcuts\n\t                        var laneIndex = x + 5 * y;\n\t                        var lane = state[laneIndex];\n\t                        var TLane = T[laneIndex];\n\t                        var Tx1Lane = T[((x + 1) % 5) + 5 * y];\n\t                        var Tx2Lane = T[((x + 2) % 5) + 5 * y];\n\n\t                        // Mix rows\n\t                        lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high);\n\t                        lane.low  = TLane.low  ^ (~Tx1Lane.low  & Tx2Lane.low);\n\t                    }\n\t                }\n\n\t                // Iota\n\t                var lane = state[0];\n\t                var roundConstant = ROUND_CONSTANTS[round];\n\t                lane.high ^= roundConstant.high;\n\t                lane.low  ^= roundConstant.low;\n\t            }\n\t        },\n\n\t        _doFinalize: function () {\n\t            // Shortcuts\n\t            var data = this._data;\n\t            var dataWords = data.words;\n\t            var nBitsTotal = this._nDataBytes * 8;\n\t            var nBitsLeft = data.sigBytes * 8;\n\t            var blockSizeBits = this.blockSize * 32;\n\n\t            // Add padding\n\t            dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32);\n\t            dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80;\n\t            data.sigBytes = dataWords.length * 4;\n\n\t            // Hash final blocks\n\t            this._process();\n\n\t            // Shortcuts\n\t            var state = this._state;\n\t            var outputLengthBytes = this.cfg.outputLength / 8;\n\t            var outputLengthLanes = outputLengthBytes / 8;\n\n\t            // Squeeze\n\t            var hashWords = [];\n\t            for (var i = 0; i < outputLengthLanes; i++) {\n\t                // Shortcuts\n\t                var lane = state[i];\n\t                var laneMsw = lane.high;\n\t                var laneLsw = lane.low;\n\n\t                // Swap endian\n\t                laneMsw = (\n\t                    (((laneMsw << 8)  | (laneMsw >>> 24)) & 0x00ff00ff) |\n\t                    (((laneMsw << 24) | (laneMsw >>> 8))  & 0xff00ff00)\n\t                );\n\t                laneLsw = (\n\t                    (((laneLsw << 8)  | (laneLsw >>> 24)) & 0x00ff00ff) |\n\t                    (((laneLsw << 24) | (laneLsw >>> 8))  & 0xff00ff00)\n\t                );\n\n\t                // Squeeze state to retrieve hash\n\t                hashWords.push(laneLsw);\n\t                hashWords.push(laneMsw);\n\t            }\n\n\t            // Return final computed hash\n\t            return new WordArray.init(hashWords, outputLengthBytes);\n\t        },\n\n\t        clone: function () {\n\t            var clone = Hasher.clone.call(this);\n\n\t            var state = clone._state = this._state.slice(0);\n\t            for (var i = 0; i < 25; i++) {\n\t                state[i] = state[i].clone();\n\t            }\n\n\t            return clone;\n\t        }\n\t    });\n\n\t    /**\n\t     * Shortcut function to the hasher's object interface.\n\t     *\n\t     * @param {WordArray|string} message The message to hash.\n\t     *\n\t     * @return {WordArray} The hash.\n\t     *\n\t     * @static\n\t     *\n\t     * @example\n\t     *\n\t     *     var hash = CryptoJS.SHA3('message');\n\t     *     var hash = CryptoJS.SHA3(wordArray);\n\t     */\n\t    C.SHA3 = Hasher._createHelper(SHA3);\n\n\t    /**\n\t     * Shortcut function to the HMAC's object interface.\n\t     *\n\t     * @param {WordArray|string} message The message to hash.\n\t     * @param {WordArray|string} key The secret key.\n\t     *\n\t     * @return {WordArray} The HMAC.\n\t     *\n\t     * @static\n\t     *\n\t     * @example\n\t     *\n\t     *     var hmac = CryptoJS.HmacSHA3(message, key);\n\t     */\n\t    C.HmacSHA3 = Hasher._createHmacHelper(SHA3);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA3;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"), require(\"./sha512\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\", \"./sha512\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_x64 = C.x64;\n\t    var X64Word = C_x64.Word;\n\t    var X64WordArray = C_x64.WordArray;\n\t    var C_algo = C.algo;\n\t    var SHA512 = C_algo.SHA512;\n\n\t    /**\n\t     * SHA-384 hash algorithm.\n\t     */\n\t    var SHA384 = C_algo.SHA384 = SHA512.extend({\n\t        _doReset: function () {\n\t            this._hash = new X64WordArray.init([\n\t                new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507),\n\t                new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939),\n\t                new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511),\n\t                new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4)\n\t            ]);\n\t        },\n\n\t        _doFinalize: function () {\n\t            var hash = SHA512._doFinalize.call(this);\n\n\t            hash.sigBytes -= 16;\n\n\t            return hash;\n\t        }\n\t    });\n\n\t    /**\n\t     * Shortcut function to the hasher's object interface.\n\t     *\n\t     * @param {WordArray|string} message The message to hash.\n\t     *\n\t     * @return {WordArray} The hash.\n\t     *\n\t     * @static\n\t     *\n\t     * @example\n\t     *\n\t     *     var hash = CryptoJS.SHA384('message');\n\t     *     var hash = CryptoJS.SHA384(wordArray);\n\t     */\n\t    C.SHA384 = SHA512._createHelper(SHA384);\n\n\t    /**\n\t     * Shortcut function to the HMAC's object interface.\n\t     *\n\t     * @param {WordArray|string} message The message to hash.\n\t     * @param {WordArray|string} key The secret key.\n\t     *\n\t     * @return {WordArray} The HMAC.\n\t     *\n\t     * @static\n\t     *\n\t     * @example\n\t     *\n\t     *     var hmac = CryptoJS.HmacSHA384(message, key);\n\t     */\n\t    C.HmacSHA384 = SHA512._createHmacHelper(SHA384);\n\t}());\n\n\n\treturn CryptoJS.SHA384;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_lib = C.lib;\n\t    var Hasher = C_lib.Hasher;\n\t    var C_x64 = C.x64;\n\t    var X64Word = C_x64.Word;\n\t    var X64WordArray = C_x64.WordArray;\n\t    var C_algo = C.algo;\n\n\t    function X64Word_create() {\n\t        return X64Word.create.apply(X64Word, arguments);\n\t    }\n\n\t    // Constants\n\t    var K = [\n\t        X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd),\n\t        X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc),\n\t        X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019),\n\t        X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118),\n\t        X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe),\n\t        X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2),\n\t        X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1),\n\t        X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694),\n\t        X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3),\n\t        X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65),\n\t        X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483),\n\t        X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5),\n\t        X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210),\n\t        X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4),\n\t        X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725),\n\t        X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70),\n\t        X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926),\n\t        X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df),\n\t        X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8),\n\t        X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b),\n\t        X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001),\n\t        X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30),\n\t        X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910),\n\t        X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8),\n\t        X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53),\n\t        X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8),\n\t        X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb),\n\t        X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3),\n\t        X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60),\n\t        X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec),\n\t        X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9),\n\t        X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b),\n\t        X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207),\n\t        X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178),\n\t        X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6),\n\t        X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b),\n\t        X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493),\n\t        X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c),\n\t        X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a),\n\t        X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817)\n\t    ];\n\n\t    // Reusable objects\n\t    var W = [];\n\t    (function () {\n\t        for (var i = 0; i < 80; i++) {\n\t            W[i] = X64Word_create();\n\t        }\n\t    }());\n\n\t    /**\n\t     * SHA-512 hash algorithm.\n\t     */\n\t    var SHA512 = C_algo.SHA512 = Hasher.extend({\n\t        _doReset: function () {\n\t            this._hash = new X64WordArray.init([\n\t                new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b),\n\t                new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1),\n\t                new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f),\n\t                new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179)\n\t            ]);\n\t        },\n\n\t        _doProcessBlock: function (M, offset) {\n\t            // Shortcuts\n\t            var H = this._hash.words;\n\n\t            var H0 = H[0];\n\t            var H1 = H[1];\n\t            var H2 = H[2];\n\t            var H3 = H[3];\n\t            var H4 = H[4];\n\t            var H5 = H[5];\n\t            var H6 = H[6];\n\t            var H7 = H[7];\n\n\t            var H0h = H0.high;\n\t            var H0l = H0.low;\n\t            var H1h = H1.high;\n\t            var H1l = H1.low;\n\t            var H2h = H2.high;\n\t            var H2l = H2.low;\n\t            var H3h = H3.high;\n\t            var H3l = H3.low;\n\t            var H4h = H4.high;\n\t            var H4l = H4.low;\n\t            var H5h = H5.high;\n\t            var H5l = H5.low;\n\t            var H6h = H6.high;\n\t            var H6l = H6.low;\n\t            var H7h = H7.high;\n\t            var H7l = H7.low;\n\n\t            // Working variables\n\t            var ah = H0h;\n\t            var al = H0l;\n\t            var bh = H1h;\n\t            var bl = H1l;\n\t            var ch = H2h;\n\t            var cl = H2l;\n\t            var dh = H3h;\n\t            var dl = H3l;\n\t            var eh = H4h;\n\t            var el = H4l;\n\t            var fh = H5h;\n\t            var fl = H5l;\n\t            var gh = H6h;\n\t            var gl = H6l;\n\t            var hh = H7h;\n\t            var hl = H7l;\n\n\t            // Rounds\n\t            for (var i = 0; i < 80; i++) {\n\t                var Wil;\n\t                var Wih;\n\n\t                // Shortcut\n\t                var Wi = W[i];\n\n\t                // Extend message\n\t                if (i < 16) {\n\t                    Wih = Wi.high = M[offset + i * 2]     | 0;\n\t                    Wil = Wi.low  = M[offset + i * 2 + 1] | 0;\n\t                } else {\n\t                    // Gamma0\n\t                    var gamma0x  = W[i - 15];\n\t                    var gamma0xh = gamma0x.high;\n\t                    var gamma0xl = gamma0x.low;\n\t                    var gamma0h  = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7);\n\t                    var gamma0l  = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25));\n\n\t                    // Gamma1\n\t                    var gamma1x  = W[i - 2];\n\t                    var gamma1xh = gamma1x.high;\n\t                    var gamma1xl = gamma1x.low;\n\t                    var gamma1h  = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6);\n\t                    var gamma1l  = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26));\n\n\t                    // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n\t                    var Wi7  = W[i - 7];\n\t                    var Wi7h = Wi7.high;\n\t                    var Wi7l = Wi7.low;\n\n\t                    var Wi16  = W[i - 16];\n\t                    var Wi16h = Wi16.high;\n\t                    var Wi16l = Wi16.low;\n\n\t                    Wil = gamma0l + Wi7l;\n\t                    Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0);\n\t                    Wil = Wil + gamma1l;\n\t                    Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0);\n\t                    Wil = Wil + Wi16l;\n\t                    Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0);\n\n\t                    Wi.high = Wih;\n\t                    Wi.low  = Wil;\n\t                }\n\n\t                var chh  = (eh & fh) ^ (~eh & gh);\n\t                var chl  = (el & fl) ^ (~el & gl);\n\t                var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);\n\t                var majl = (al & bl) ^ (al & cl) ^ (bl & cl);\n\n\t                var sigma0h = ((ah >>> 28) | (al << 4))  ^ ((ah << 30)  | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));\n\t                var sigma0l = ((al >>> 28) | (ah << 4))  ^ ((al << 30)  | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));\n\t                var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9));\n\t                var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9));\n\n\t                // t1 = h + sigma1 + ch + K[i] + W[i]\n\t                var Ki  = K[i];\n\t                var Kih = Ki.high;\n\t                var Kil = Ki.low;\n\n\t                var t1l = hl + sigma1l;\n\t                var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);\n\t                var t1l = t1l + chl;\n\t                var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);\n\t                var t1l = t1l + Kil;\n\t                var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0);\n\t                var t1l = t1l + Wil;\n\t                var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0);\n\n\t                // t2 = sigma0 + maj\n\t                var t2l = sigma0l + majl;\n\t                var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);\n\n\t                // Update working variables\n\t                hh = gh;\n\t                hl = gl;\n\t                gh = fh;\n\t                gl = fl;\n\t                fh = eh;\n\t                fl = el;\n\t                el = (dl + t1l) | 0;\n\t                eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;\n\t                dh = ch;\n\t                dl = cl;\n\t                ch = bh;\n\t                cl = bl;\n\t                bh = ah;\n\t                bl = al;\n\t                al = (t1l + t2l) | 0;\n\t                ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;\n\t            }\n\n\t            // Intermediate hash value\n\t            H0l = H0.low  = (H0l + al);\n\t            H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0));\n\t            H1l = H1.low  = (H1l + bl);\n\t            H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0));\n\t            H2l = H2.low  = (H2l + cl);\n\t            H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0));\n\t            H3l = H3.low  = (H3l + dl);\n\t            H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0));\n\t            H4l = H4.low  = (H4l + el);\n\t            H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0));\n\t            H5l = H5.low  = (H5l + fl);\n\t            H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0));\n\t            H6l = H6.low  = (H6l + gl);\n\t            H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0));\n\t            H7l = H7.low  = (H7l + hl);\n\t            H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0));\n\t        },\n\n\t        _doFinalize: function () {\n\t            // Shortcuts\n\t            var data = this._data;\n\t            var dataWords = data.words;\n\n\t            var nBitsTotal = this._nDataBytes * 8;\n\t            var nBitsLeft = data.sigBytes * 8;\n\n\t            // Add padding\n\t            dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t            dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000);\n\t            dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal;\n\t            data.sigBytes = dataWords.length * 4;\n\n\t            // Hash final blocks\n\t            this._process();\n\n\t            // Convert hash to 32-bit word array before returning\n\t            var hash = this._hash.toX32();\n\n\t            // Return final computed hash\n\t            return hash;\n\t        },\n\n\t        clone: function () {\n\t            var clone = Hasher.clone.call(this);\n\t            clone._hash = this._hash.clone();\n\n\t            return clone;\n\t        },\n\n\t        blockSize: 1024/32\n\t    });\n\n\t    /**\n\t     * Shortcut function to the hasher's object interface.\n\t     *\n\t     * @param {WordArray|string} message The message to hash.\n\t     *\n\t     * @return {WordArray} The hash.\n\t     *\n\t     * @static\n\t     *\n\t     * @example\n\t     *\n\t     *     var hash = CryptoJS.SHA512('message');\n\t     *     var hash = CryptoJS.SHA512(wordArray);\n\t     */\n\t    C.SHA512 = Hasher._createHelper(SHA512);\n\n\t    /**\n\t     * Shortcut function to the HMAC's object interface.\n\t     *\n\t     * @param {WordArray|string} message The message to hash.\n\t     * @param {WordArray|string} key The secret key.\n\t     *\n\t     * @return {WordArray} The HMAC.\n\t     *\n\t     * @static\n\t     *\n\t     * @example\n\t     *\n\t     *     var hmac = CryptoJS.HmacSHA512(message, key);\n\t     */\n\t    C.HmacSHA512 = Hasher._createHmacHelper(SHA512);\n\t}());\n\n\n\treturn CryptoJS.SHA512;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_lib = C.lib;\n\t    var WordArray = C_lib.WordArray;\n\t    var BlockCipher = C_lib.BlockCipher;\n\t    var C_algo = C.algo;\n\n\t    // Permuted Choice 1 constants\n\t    var PC1 = [\n\t        57, 49, 41, 33, 25, 17, 9,  1,\n\t        58, 50, 42, 34, 26, 18, 10, 2,\n\t        59, 51, 43, 35, 27, 19, 11, 3,\n\t        60, 52, 44, 36, 63, 55, 47, 39,\n\t        31, 23, 15, 7,  62, 54, 46, 38,\n\t        30, 22, 14, 6,  61, 53, 45, 37,\n\t        29, 21, 13, 5,  28, 20, 12, 4\n\t    ];\n\n\t    // Permuted Choice 2 constants\n\t    var PC2 = [\n\t        14, 17, 11, 24, 1,  5,\n\t        3,  28, 15, 6,  21, 10,\n\t        23, 19, 12, 4,  26, 8,\n\t        16, 7,  27, 20, 13, 2,\n\t        41, 52, 31, 37, 47, 55,\n\t        30, 40, 51, 45, 33, 48,\n\t        44, 49, 39, 56, 34, 53,\n\t        46, 42, 50, 36, 29, 32\n\t    ];\n\n\t    // Cumulative bit shift constants\n\t    var BIT_SHIFTS = [1,  2,  4,  6,  8,  10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];\n\n\t    // SBOXes and round permutation constants\n\t    var SBOX_P = [\n\t        {\n\t            0x0: 0x808200,\n\t            0x10000000: 0x8000,\n\t            0x20000000: 0x808002,\n\t            0x30000000: 0x2,\n\t            0x40000000: 0x200,\n\t            0x50000000: 0x808202,\n\t            0x60000000: 0x800202,\n\t            0x70000000: 0x800000,\n\t            0x80000000: 0x202,\n\t            0x90000000: 0x800200,\n\t            0xa0000000: 0x8200,\n\t            0xb0000000: 0x808000,\n\t            0xc0000000: 0x8002,\n\t            0xd0000000: 0x800002,\n\t            0xe0000000: 0x0,\n\t            0xf0000000: 0x8202,\n\t            0x8000000: 0x0,\n\t            0x18000000: 0x808202,\n\t            0x28000000: 0x8202,\n\t            0x38000000: 0x8000,\n\t            0x48000000: 0x808200,\n\t            0x58000000: 0x200,\n\t            0x68000000: 0x808002,\n\t            0x78000000: 0x2,\n\t            0x88000000: 0x800200,\n\t            0x98000000: 0x8200,\n\t            0xa8000000: 0x808000,\n\t            0xb8000000: 0x800202,\n\t            0xc8000000: 0x800002,\n\t            0xd8000000: 0x8002,\n\t            0xe8000000: 0x202,\n\t            0xf8000000: 0x800000,\n\t            0x1: 0x8000,\n\t            0x10000001: 0x2,\n\t            0x20000001: 0x808200,\n\t            0x30000001: 0x800000,\n\t            0x40000001: 0x808002,\n\t            0x50000001: 0x8200,\n\t            0x60000001: 0x200,\n\t            0x70000001: 0x800202,\n\t            0x80000001: 0x808202,\n\t            0x90000001: 0x808000,\n\t            0xa0000001: 0x800002,\n\t            0xb0000001: 0x8202,\n\t            0xc0000001: 0x202,\n\t            0xd0000001: 0x800200,\n\t            0xe0000001: 0x8002,\n\t            0xf0000001: 0x0,\n\t            0x8000001: 0x808202,\n\t            0x18000001: 0x808000,\n\t            0x28000001: 0x800000,\n\t            0x38000001: 0x200,\n\t            0x48000001: 0x8000,\n\t            0x58000001: 0x800002,\n\t            0x68000001: 0x2,\n\t            0x78000001: 0x8202,\n\t            0x88000001: 0x8002,\n\t            0x98000001: 0x800202,\n\t            0xa8000001: 0x202,\n\t            0xb8000001: 0x808200,\n\t            0xc8000001: 0x800200,\n\t            0xd8000001: 0x0,\n\t            0xe8000001: 0x8200,\n\t            0xf8000001: 0x808002\n\t        },\n\t        {\n\t            0x0: 0x40084010,\n\t            0x1000000: 0x4000,\n\t            0x2000000: 0x80000,\n\t            0x3000000: 0x40080010,\n\t            0x4000000: 0x40000010,\n\t            0x5000000: 0x40084000,\n\t            0x6000000: 0x40004000,\n\t            0x7000000: 0x10,\n\t            0x8000000: 0x84000,\n\t            0x9000000: 0x40004010,\n\t            0xa000000: 0x40000000,\n\t            0xb000000: 0x84010,\n\t            0xc000000: 0x80010,\n\t            0xd000000: 0x0,\n\t            0xe000000: 0x4010,\n\t            0xf000000: 0x40080000,\n\t            0x800000: 0x40004000,\n\t            0x1800000: 0x84010,\n\t            0x2800000: 0x10,\n\t            0x3800000: 0x40004010,\n\t            0x4800000: 0x40084010,\n\t            0x5800000: 0x40000000,\n\t            0x6800000: 0x80000,\n\t            0x7800000: 0x40080010,\n\t            0x8800000: 0x80010,\n\t            0x9800000: 0x0,\n\t            0xa800000: 0x4000,\n\t            0xb800000: 0x40080000,\n\t            0xc800000: 0x40000010,\n\t            0xd800000: 0x84000,\n\t            0xe800000: 0x40084000,\n\t            0xf800000: 0x4010,\n\t            0x10000000: 0x0,\n\t            0x11000000: 0x40080010,\n\t            0x12000000: 0x40004010,\n\t            0x13000000: 0x40084000,\n\t            0x14000000: 0x40080000,\n\t            0x15000000: 0x10,\n\t            0x16000000: 0x84010,\n\t            0x17000000: 0x4000,\n\t            0x18000000: 0x4010,\n\t            0x19000000: 0x80000,\n\t            0x1a000000: 0x80010,\n\t            0x1b000000: 0x40000010,\n\t            0x1c000000: 0x84000,\n\t            0x1d000000: 0x40004000,\n\t            0x1e000000: 0x40000000,\n\t            0x1f000000: 0x40084010,\n\t            0x10800000: 0x84010,\n\t            0x11800000: 0x80000,\n\t            0x12800000: 0x40080000,\n\t            0x13800000: 0x4000,\n\t            0x14800000: 0x40004000,\n\t            0x15800000: 0x40084010,\n\t            0x16800000: 0x10,\n\t            0x17800000: 0x40000000,\n\t            0x18800000: 0x40084000,\n\t            0x19800000: 0x40000010,\n\t            0x1a800000: 0x40004010,\n\t            0x1b800000: 0x80010,\n\t            0x1c800000: 0x0,\n\t            0x1d800000: 0x4010,\n\t            0x1e800000: 0x40080010,\n\t            0x1f800000: 0x84000\n\t        },\n\t        {\n\t            0x0: 0x104,\n\t            0x100000: 0x0,\n\t            0x200000: 0x4000100,\n\t            0x300000: 0x10104,\n\t            0x400000: 0x10004,\n\t            0x500000: 0x4000004,\n\t            0x600000: 0x4010104,\n\t            0x700000: 0x4010000,\n\t            0x800000: 0x4000000,\n\t            0x900000: 0x4010100,\n\t            0xa00000: 0x10100,\n\t            0xb00000: 0x4010004,\n\t            0xc00000: 0x4000104,\n\t            0xd00000: 0x10000,\n\t            0xe00000: 0x4,\n\t            0xf00000: 0x100,\n\t            0x80000: 0x4010100,\n\t            0x180000: 0x4010004,\n\t            0x280000: 0x0,\n\t            0x380000: 0x4000100,\n\t            0x480000: 0x4000004,\n\t            0x580000: 0x10000,\n\t            0x680000: 0x10004,\n\t            0x780000: 0x104,\n\t            0x880000: 0x4,\n\t            0x980000: 0x100,\n\t            0xa80000: 0x4010000,\n\t            0xb80000: 0x10104,\n\t            0xc80000: 0x10100,\n\t            0xd80000: 0x4000104,\n\t            0xe80000: 0x4010104,\n\t            0xf80000: 0x4000000,\n\t            0x1000000: 0x4010100,\n\t            0x1100000: 0x10004,\n\t            0x1200000: 0x10000,\n\t            0x1300000: 0x4000100,\n\t            0x1400000: 0x100,\n\t            0x1500000: 0x4010104,\n\t            0x1600000: 0x4000004,\n\t            0x1700000: 0x0,\n\t            0x1800000: 0x4000104,\n\t            0x1900000: 0x4000000,\n\t            0x1a00000: 0x4,\n\t            0x1b00000: 0x10100,\n\t            0x1c00000: 0x4010000,\n\t            0x1d00000: 0x104,\n\t            0x1e00000: 0x10104,\n\t            0x1f00000: 0x4010004,\n\t            0x1080000: 0x4000000,\n\t            0x1180000: 0x104,\n\t            0x1280000: 0x4010100,\n\t            0x1380000: 0x0,\n\t            0x1480000: 0x10004,\n\t            0x1580000: 0x4000100,\n\t            0x1680000: 0x100,\n\t            0x1780000: 0x4010004,\n\t            0x1880000: 0x10000,\n\t            0x1980000: 0x4010104,\n\t            0x1a80000: 0x10104,\n\t            0x1b80000: 0x4000004,\n\t            0x1c80000: 0x4000104,\n\t            0x1d80000: 0x4010000,\n\t            0x1e80000: 0x4,\n\t            0x1f80000: 0x10100\n\t        },\n\t        {\n\t            0x0: 0x80401000,\n\t            0x10000: 0x80001040,\n\t            0x20000: 0x401040,\n\t            0x30000: 0x80400000,\n\t            0x40000: 0x0,\n\t            0x50000: 0x401000,\n\t            0x60000: 0x80000040,\n\t            0x70000: 0x400040,\n\t            0x80000: 0x80000000,\n\t            0x90000: 0x400000,\n\t            0xa0000: 0x40,\n\t            0xb0000: 0x80001000,\n\t            0xc0000: 0x80400040,\n\t            0xd0000: 0x1040,\n\t            0xe0000: 0x1000,\n\t            0xf0000: 0x80401040,\n\t            0x8000: 0x80001040,\n\t            0x18000: 0x40,\n\t            0x28000: 0x80400040,\n\t            0x38000: 0x80001000,\n\t            0x48000: 0x401000,\n\t            0x58000: 0x80401040,\n\t            0x68000: 0x0,\n\t            0x78000: 0x80400000,\n\t            0x88000: 0x1000,\n\t            0x98000: 0x80401000,\n\t            0xa8000: 0x400000,\n\t            0xb8000: 0x1040,\n\t            0xc8000: 0x80000000,\n\t            0xd8000: 0x400040,\n\t            0xe8000: 0x401040,\n\t            0xf8000: 0x80000040,\n\t            0x100000: 0x400040,\n\t            0x110000: 0x401000,\n\t            0x120000: 0x80000040,\n\t            0x130000: 0x0,\n\t            0x140000: 0x1040,\n\t            0x150000: 0x80400040,\n\t            0x160000: 0x80401000,\n\t            0x170000: 0x80001040,\n\t            0x180000: 0x80401040,\n\t            0x190000: 0x80000000,\n\t            0x1a0000: 0x80400000,\n\t            0x1b0000: 0x401040,\n\t            0x1c0000: 0x80001000,\n\t            0x1d0000: 0x400000,\n\t            0x1e0000: 0x40,\n\t            0x1f0000: 0x1000,\n\t            0x108000: 0x80400000,\n\t            0x118000: 0x80401040,\n\t            0x128000: 0x0,\n\t            0x138000: 0x401000,\n\t            0x148000: 0x400040,\n\t            0x158000: 0x80000000,\n\t            0x168000: 0x80001040,\n\t            0x178000: 0x40,\n\t            0x188000: 0x80000040,\n\t            0x198000: 0x1000,\n\t            0x1a8000: 0x80001000,\n\t            0x1b8000: 0x80400040,\n\t            0x1c8000: 0x1040,\n\t            0x1d8000: 0x80401000,\n\t            0x1e8000: 0x400000,\n\t            0x1f8000: 0x401040\n\t        },\n\t        {\n\t            0x0: 0x80,\n\t            0x1000: 0x1040000,\n\t            0x2000: 0x40000,\n\t            0x3000: 0x20000000,\n\t            0x4000: 0x20040080,\n\t            0x5000: 0x1000080,\n\t            0x6000: 0x21000080,\n\t            0x7000: 0x40080,\n\t            0x8000: 0x1000000,\n\t            0x9000: 0x20040000,\n\t            0xa000: 0x20000080,\n\t            0xb000: 0x21040080,\n\t            0xc000: 0x21040000,\n\t            0xd000: 0x0,\n\t            0xe000: 0x1040080,\n\t            0xf000: 0x21000000,\n\t            0x800: 0x1040080,\n\t            0x1800: 0x21000080,\n\t            0x2800: 0x80,\n\t            0x3800: 0x1040000,\n\t            0x4800: 0x40000,\n\t            0x5800: 0x20040080,\n\t            0x6800: 0x21040000,\n\t            0x7800: 0x20000000,\n\t            0x8800: 0x20040000,\n\t            0x9800: 0x0,\n\t            0xa800: 0x21040080,\n\t            0xb800: 0x1000080,\n\t            0xc800: 0x20000080,\n\t            0xd800: 0x21000000,\n\t            0xe800: 0x1000000,\n\t            0xf800: 0x40080,\n\t            0x10000: 0x40000,\n\t            0x11000: 0x80,\n\t            0x12000: 0x20000000,\n\t            0x13000: 0x21000080,\n\t            0x14000: 0x1000080,\n\t            0x15000: 0x21040000,\n\t            0x16000: 0x20040080,\n\t            0x17000: 0x1000000,\n\t            0x18000: 0x21040080,\n\t            0x19000: 0x21000000,\n\t            0x1a000: 0x1040000,\n\t            0x1b000: 0x20040000,\n\t            0x1c000: 0x40080,\n\t            0x1d000: 0x20000080,\n\t            0x1e000: 0x0,\n\t            0x1f000: 0x1040080,\n\t            0x10800: 0x21000080,\n\t            0x11800: 0x1000000,\n\t            0x12800: 0x1040000,\n\t            0x13800: 0x20040080,\n\t            0x14800: 0x20000000,\n\t            0x15800: 0x1040080,\n\t            0x16800: 0x80,\n\t            0x17800: 0x21040000,\n\t            0x18800: 0x40080,\n\t            0x19800: 0x21040080,\n\t            0x1a800: 0x0,\n\t            0x1b800: 0x21000000,\n\t            0x1c800: 0x1000080,\n\t            0x1d800: 0x40000,\n\t            0x1e800: 0x20040000,\n\t            0x1f800: 0x20000080\n\t        },\n\t        {\n\t            0x0: 0x10000008,\n\t            0x100: 0x2000,\n\t            0x200: 0x10200000,\n\t            0x300: 0x10202008,\n\t            0x400: 0x10002000,\n\t            0x500: 0x200000,\n\t            0x600: 0x200008,\n\t            0x700: 0x10000000,\n\t            0x800: 0x0,\n\t            0x900: 0x10002008,\n\t            0xa00: 0x202000,\n\t            0xb00: 0x8,\n\t            0xc00: 0x10200008,\n\t            0xd00: 0x202008,\n\t            0xe00: 0x2008,\n\t            0xf00: 0x10202000,\n\t            0x80: 0x10200000,\n\t            0x180: 0x10202008,\n\t            0x280: 0x8,\n\t            0x380: 0x200000,\n\t            0x480: 0x202008,\n\t            0x580: 0x10000008,\n\t            0x680: 0x10002000,\n\t            0x780: 0x2008,\n\t            0x880: 0x200008,\n\t            0x980: 0x2000,\n\t            0xa80: 0x10002008,\n\t            0xb80: 0x10200008,\n\t            0xc80: 0x0,\n\t            0xd80: 0x10202000,\n\t            0xe80: 0x202000,\n\t            0xf80: 0x10000000,\n\t            0x1000: 0x10002000,\n\t            0x1100: 0x10200008,\n\t            0x1200: 0x10202008,\n\t            0x1300: 0x2008,\n\t            0x1400: 0x200000,\n\t            0x1500: 0x10000000,\n\t            0x1600: 0x10000008,\n\t            0x1700: 0x202000,\n\t            0x1800: 0x202008,\n\t            0x1900: 0x0,\n\t            0x1a00: 0x8,\n\t            0x1b00: 0x10200000,\n\t            0x1c00: 0x2000,\n\t            0x1d00: 0x10002008,\n\t            0x1e00: 0x10202000,\n\t            0x1f00: 0x200008,\n\t            0x1080: 0x8,\n\t            0x1180: 0x202000,\n\t            0x1280: 0x200000,\n\t            0x1380: 0x10000008,\n\t            0x1480: 0x10002000,\n\t            0x1580: 0x2008,\n\t            0x1680: 0x10202008,\n\t            0x1780: 0x10200000,\n\t            0x1880: 0x10202000,\n\t            0x1980: 0x10200008,\n\t            0x1a80: 0x2000,\n\t            0x1b80: 0x202008,\n\t            0x1c80: 0x200008,\n\t            0x1d80: 0x0,\n\t            0x1e80: 0x10000000,\n\t            0x1f80: 0x10002008\n\t        },\n\t        {\n\t            0x0: 0x100000,\n\t            0x10: 0x2000401,\n\t            0x20: 0x400,\n\t            0x30: 0x100401,\n\t            0x40: 0x2100401,\n\t            0x50: 0x0,\n\t            0x60: 0x1,\n\t            0x70: 0x2100001,\n\t            0x80: 0x2000400,\n\t            0x90: 0x100001,\n\t            0xa0: 0x2000001,\n\t            0xb0: 0x2100400,\n\t            0xc0: 0x2100000,\n\t            0xd0: 0x401,\n\t            0xe0: 0x100400,\n\t            0xf0: 0x2000000,\n\t            0x8: 0x2100001,\n\t            0x18: 0x0,\n\t            0x28: 0x2000401,\n\t            0x38: 0x2100400,\n\t            0x48: 0x100000,\n\t            0x58: 0x2000001,\n\t            0x68: 0x2000000,\n\t            0x78: 0x401,\n\t            0x88: 0x100401,\n\t            0x98: 0x2000400,\n\t            0xa8: 0x2100000,\n\t            0xb8: 0x100001,\n\t            0xc8: 0x400,\n\t            0xd8: 0x2100401,\n\t            0xe8: 0x1,\n\t            0xf8: 0x100400,\n\t            0x100: 0x2000000,\n\t            0x110: 0x100000,\n\t            0x120: 0x2000401,\n\t            0x130: 0x2100001,\n\t            0x140: 0x100001,\n\t            0x150: 0x2000400,\n\t            0x160: 0x2100400,\n\t            0x170: 0x100401,\n\t            0x180: 0x401,\n\t            0x190: 0x2100401,\n\t            0x1a0: 0x100400,\n\t            0x1b0: 0x1,\n\t            0x1c0: 0x0,\n\t            0x1d0: 0x2100000,\n\t            0x1e0: 0x2000001,\n\t            0x1f0: 0x400,\n\t            0x108: 0x100400,\n\t            0x118: 0x2000401,\n\t            0x128: 0x2100001,\n\t            0x138: 0x1,\n\t            0x148: 0x2000000,\n\t            0x158: 0x100000,\n\t            0x168: 0x401,\n\t            0x178: 0x2100400,\n\t            0x188: 0x2000001,\n\t            0x198: 0x2100000,\n\t            0x1a8: 0x0,\n\t            0x1b8: 0x2100401,\n\t            0x1c8: 0x100401,\n\t            0x1d8: 0x400,\n\t            0x1e8: 0x2000400,\n\t            0x1f8: 0x100001\n\t        },\n\t        {\n\t            0x0: 0x8000820,\n\t            0x1: 0x20000,\n\t            0x2: 0x8000000,\n\t            0x3: 0x20,\n\t            0x4: 0x20020,\n\t            0x5: 0x8020820,\n\t            0x6: 0x8020800,\n\t            0x7: 0x800,\n\t            0x8: 0x8020000,\n\t            0x9: 0x8000800,\n\t            0xa: 0x20800,\n\t            0xb: 0x8020020,\n\t            0xc: 0x820,\n\t            0xd: 0x0,\n\t            0xe: 0x8000020,\n\t            0xf: 0x20820,\n\t            0x80000000: 0x800,\n\t            0x80000001: 0x8020820,\n\t            0x80000002: 0x8000820,\n\t            0x80000003: 0x8000000,\n\t            0x80000004: 0x8020000,\n\t            0x80000005: 0x20800,\n\t            0x80000006: 0x20820,\n\t            0x80000007: 0x20,\n\t            0x80000008: 0x8000020,\n\t            0x80000009: 0x820,\n\t            0x8000000a: 0x20020,\n\t            0x8000000b: 0x8020800,\n\t            0x8000000c: 0x0,\n\t            0x8000000d: 0x8020020,\n\t            0x8000000e: 0x8000800,\n\t            0x8000000f: 0x20000,\n\t            0x10: 0x20820,\n\t            0x11: 0x8020800,\n\t            0x12: 0x20,\n\t            0x13: 0x800,\n\t            0x14: 0x8000800,\n\t            0x15: 0x8000020,\n\t            0x16: 0x8020020,\n\t            0x17: 0x20000,\n\t            0x18: 0x0,\n\t            0x19: 0x20020,\n\t            0x1a: 0x8020000,\n\t            0x1b: 0x8000820,\n\t            0x1c: 0x8020820,\n\t            0x1d: 0x20800,\n\t            0x1e: 0x820,\n\t            0x1f: 0x8000000,\n\t            0x80000010: 0x20000,\n\t            0x80000011: 0x800,\n\t            0x80000012: 0x8020020,\n\t            0x80000013: 0x20820,\n\t            0x80000014: 0x20,\n\t            0x80000015: 0x8020000,\n\t            0x80000016: 0x8000000,\n\t            0x80000017: 0x8000820,\n\t            0x80000018: 0x8020820,\n\t            0x80000019: 0x8000020,\n\t            0x8000001a: 0x8000800,\n\t            0x8000001b: 0x0,\n\t            0x8000001c: 0x20800,\n\t            0x8000001d: 0x820,\n\t            0x8000001e: 0x20020,\n\t            0x8000001f: 0x8020800\n\t        }\n\t    ];\n\n\t    // Masks that select the SBOX input\n\t    var SBOX_MASK = [\n\t        0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000,\n\t        0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f\n\t    ];\n\n\t    /**\n\t     * DES block cipher algorithm.\n\t     */\n\t    var DES = C_algo.DES = BlockCipher.extend({\n\t        _doReset: function () {\n\t            // Shortcuts\n\t            var key = this._key;\n\t            var keyWords = key.words;\n\n\t            // Select 56 bits according to PC1\n\t            var keyBits = [];\n\t            for (var i = 0; i < 56; i++) {\n\t                var keyBitPos = PC1[i] - 1;\n\t                keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1;\n\t            }\n\n\t            // Assemble 16 subkeys\n\t            var subKeys = this._subKeys = [];\n\t            for (var nSubKey = 0; nSubKey < 16; nSubKey++) {\n\t                // Create subkey\n\t                var subKey = subKeys[nSubKey] = [];\n\n\t                // Shortcut\n\t                var bitShift = BIT_SHIFTS[nSubKey];\n\n\t                // Select 48 bits according to PC2\n\t                for (var i = 0; i < 24; i++) {\n\t                    // Select from the left 28 key bits\n\t                    subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6);\n\n\t                    // Select from the right 28 key bits\n\t                    subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6);\n\t                }\n\n\t                // Since each subkey is applied to an expanded 32-bit input,\n\t                // the subkey can be broken into 8 values scaled to 32-bits,\n\t                // which allows the key to be used without expansion\n\t                subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31);\n\t                for (var i = 1; i < 7; i++) {\n\t                    subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3);\n\t                }\n\t                subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27);\n\t            }\n\n\t            // Compute inverse subkeys\n\t            var invSubKeys = this._invSubKeys = [];\n\t            for (var i = 0; i < 16; i++) {\n\t                invSubKeys[i] = subKeys[15 - i];\n\t            }\n\t        },\n\n\t        encryptBlock: function (M, offset) {\n\t            this._doCryptBlock(M, offset, this._subKeys);\n\t        },\n\n\t        decryptBlock: function (M, offset) {\n\t            this._doCryptBlock(M, offset, this._invSubKeys);\n\t        },\n\n\t        _doCryptBlock: function (M, offset, subKeys) {\n\t            // Get input\n\t            this._lBlock = M[offset];\n\t            this._rBlock = M[offset + 1];\n\n\t            // Initial permutation\n\t            exchangeLR.call(this, 4,  0x0f0f0f0f);\n\t            exchangeLR.call(this, 16, 0x0000ffff);\n\t            exchangeRL.call(this, 2,  0x33333333);\n\t            exchangeRL.call(this, 8,  0x00ff00ff);\n\t            exchangeLR.call(this, 1,  0x55555555);\n\n\t            // Rounds\n\t            for (var round = 0; round < 16; round++) {\n\t                // Shortcuts\n\t                var subKey = subKeys[round];\n\t                var lBlock = this._lBlock;\n\t                var rBlock = this._rBlock;\n\n\t                // Feistel function\n\t                var f = 0;\n\t                for (var i = 0; i < 8; i++) {\n\t                    f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];\n\t                }\n\t                this._lBlock = rBlock;\n\t                this._rBlock = lBlock ^ f;\n\t            }\n\n\t            // Undo swap from last round\n\t            var t = this._lBlock;\n\t            this._lBlock = this._rBlock;\n\t            this._rBlock = t;\n\n\t            // Final permutation\n\t            exchangeLR.call(this, 1,  0x55555555);\n\t            exchangeRL.call(this, 8,  0x00ff00ff);\n\t            exchangeRL.call(this, 2,  0x33333333);\n\t            exchangeLR.call(this, 16, 0x0000ffff);\n\t            exchangeLR.call(this, 4,  0x0f0f0f0f);\n\n\t            // Set output\n\t            M[offset] = this._lBlock;\n\t            M[offset + 1] = this._rBlock;\n\t        },\n\n\t        keySize: 64/32,\n\n\t        ivSize: 64/32,\n\n\t        blockSize: 64/32\n\t    });\n\n\t    // Swap bits across the left and right words\n\t    function exchangeLR(offset, mask) {\n\t        var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask;\n\t        this._rBlock ^= t;\n\t        this._lBlock ^= t << offset;\n\t    }\n\n\t    function exchangeRL(offset, mask) {\n\t        var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask;\n\t        this._lBlock ^= t;\n\t        this._rBlock ^= t << offset;\n\t    }\n\n\t    /**\n\t     * Shortcut functions to the cipher's object interface.\n\t     *\n\t     * @example\n\t     *\n\t     *     var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);\n\t     *     var plaintext  = CryptoJS.DES.decrypt(ciphertext, key, cfg);\n\t     */\n\t    C.DES = BlockCipher._createHelper(DES);\n\n\t    /**\n\t     * Triple-DES block cipher algorithm.\n\t     */\n\t    var TripleDES = C_algo.TripleDES = BlockCipher.extend({\n\t        _doReset: function () {\n\t            // Shortcuts\n\t            var key = this._key;\n\t            var keyWords = key.words;\n\t            // Make sure the key length is valid (64, 128 or >= 192 bit)\n\t            if (keyWords.length !== 2 && keyWords.length !== 4 && keyWords.length < 6) {\n\t                throw new Error('Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.');\n\t            }\n\n\t            // Extend the key according to the keying options defined in 3DES standard\n\t            var key1 = keyWords.slice(0, 2);\n\t            var key2 = keyWords.length < 4 ? keyWords.slice(0, 2) : keyWords.slice(2, 4);\n\t            var key3 = keyWords.length < 6 ? keyWords.slice(0, 2) : keyWords.slice(4, 6);\n\n\t            // Create DES instances\n\t            this._des1 = DES.createEncryptor(WordArray.create(key1));\n\t            this._des2 = DES.createEncryptor(WordArray.create(key2));\n\t            this._des3 = DES.createEncryptor(WordArray.create(key3));\n\t        },\n\n\t        encryptBlock: function (M, offset) {\n\t            this._des1.encryptBlock(M, offset);\n\t            this._des2.decryptBlock(M, offset);\n\t            this._des3.encryptBlock(M, offset);\n\t        },\n\n\t        decryptBlock: function (M, offset) {\n\t            this._des3.decryptBlock(M, offset);\n\t            this._des2.encryptBlock(M, offset);\n\t            this._des1.decryptBlock(M, offset);\n\t        },\n\n\t        keySize: 192/32,\n\n\t        ivSize: 64/32,\n\n\t        blockSize: 64/32\n\t    });\n\n\t    /**\n\t     * Shortcut functions to the cipher's object interface.\n\t     *\n\t     * @example\n\t     *\n\t     *     var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);\n\t     *     var plaintext  = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);\n\t     */\n\t    C.TripleDES = BlockCipher._createHelper(TripleDES);\n\t}());\n\n\n\treturn CryptoJS.TripleDES;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (undefined) {\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_lib = C.lib;\n\t    var Base = C_lib.Base;\n\t    var X32WordArray = C_lib.WordArray;\n\n\t    /**\n\t     * x64 namespace.\n\t     */\n\t    var C_x64 = C.x64 = {};\n\n\t    /**\n\t     * A 64-bit word.\n\t     */\n\t    var X64Word = C_x64.Word = Base.extend({\n\t        /**\n\t         * Initializes a newly created 64-bit word.\n\t         *\n\t         * @param {number} high The high 32 bits.\n\t         * @param {number} low The low 32 bits.\n\t         *\n\t         * @example\n\t         *\n\t         *     var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607);\n\t         */\n\t        init: function (high, low) {\n\t            this.high = high;\n\t            this.low = low;\n\t        }\n\n\t        /**\n\t         * Bitwise NOTs this word.\n\t         *\n\t         * @return {X64Word} A new x64-Word object after negating.\n\t         *\n\t         * @example\n\t         *\n\t         *     var negated = x64Word.not();\n\t         */\n\t        // not: function () {\n\t            // var high = ~this.high;\n\t            // var low = ~this.low;\n\n\t            // return X64Word.create(high, low);\n\t        // },\n\n\t        /**\n\t         * Bitwise ANDs this word with the passed word.\n\t         *\n\t         * @param {X64Word} word The x64-Word to AND with this word.\n\t         *\n\t         * @return {X64Word} A new x64-Word object after ANDing.\n\t         *\n\t         * @example\n\t         *\n\t         *     var anded = x64Word.and(anotherX64Word);\n\t         */\n\t        // and: function (word) {\n\t            // var high = this.high & word.high;\n\t            // var low = this.low & word.low;\n\n\t            // return X64Word.create(high, low);\n\t        // },\n\n\t        /**\n\t         * Bitwise ORs this word with the passed word.\n\t         *\n\t         * @param {X64Word} word The x64-Word to OR with this word.\n\t         *\n\t         * @return {X64Word} A new x64-Word object after ORing.\n\t         *\n\t         * @example\n\t         *\n\t         *     var ored = x64Word.or(anotherX64Word);\n\t         */\n\t        // or: function (word) {\n\t            // var high = this.high | word.high;\n\t            // var low = this.low | word.low;\n\n\t            // return X64Word.create(high, low);\n\t        // },\n\n\t        /**\n\t         * Bitwise XORs this word with the passed word.\n\t         *\n\t         * @param {X64Word} word The x64-Word to XOR with this word.\n\t         *\n\t         * @return {X64Word} A new x64-Word object after XORing.\n\t         *\n\t         * @example\n\t         *\n\t         *     var xored = x64Word.xor(anotherX64Word);\n\t         */\n\t        // xor: function (word) {\n\t            // var high = this.high ^ word.high;\n\t            // var low = this.low ^ word.low;\n\n\t            // return X64Word.create(high, low);\n\t        // },\n\n\t        /**\n\t         * Shifts this word n bits to the left.\n\t         *\n\t         * @param {number} n The number of bits to shift.\n\t         *\n\t         * @return {X64Word} A new x64-Word object after shifting.\n\t         *\n\t         * @example\n\t         *\n\t         *     var shifted = x64Word.shiftL(25);\n\t         */\n\t        // shiftL: function (n) {\n\t            // if (n < 32) {\n\t                // var high = (this.high << n) | (this.low >>> (32 - n));\n\t                // var low = this.low << n;\n\t            // } else {\n\t                // var high = this.low << (n - 32);\n\t                // var low = 0;\n\t            // }\n\n\t            // return X64Word.create(high, low);\n\t        // },\n\n\t        /**\n\t         * Shifts this word n bits to the right.\n\t         *\n\t         * @param {number} n The number of bits to shift.\n\t         *\n\t         * @return {X64Word} A new x64-Word object after shifting.\n\t         *\n\t         * @example\n\t         *\n\t         *     var shifted = x64Word.shiftR(7);\n\t         */\n\t        // shiftR: function (n) {\n\t            // if (n < 32) {\n\t                // var low = (this.low >>> n) | (this.high << (32 - n));\n\t                // var high = this.high >>> n;\n\t            // } else {\n\t                // var low = this.high >>> (n - 32);\n\t                // var high = 0;\n\t            // }\n\n\t            // return X64Word.create(high, low);\n\t        // },\n\n\t        /**\n\t         * Rotates this word n bits to the left.\n\t         *\n\t         * @param {number} n The number of bits to rotate.\n\t         *\n\t         * @return {X64Word} A new x64-Word object after rotating.\n\t         *\n\t         * @example\n\t         *\n\t         *     var rotated = x64Word.rotL(25);\n\t         */\n\t        // rotL: function (n) {\n\t            // return this.shiftL(n).or(this.shiftR(64 - n));\n\t        // },\n\n\t        /**\n\t         * Rotates this word n bits to the right.\n\t         *\n\t         * @param {number} n The number of bits to rotate.\n\t         *\n\t         * @return {X64Word} A new x64-Word object after rotating.\n\t         *\n\t         * @example\n\t         *\n\t         *     var rotated = x64Word.rotR(7);\n\t         */\n\t        // rotR: function (n) {\n\t            // return this.shiftR(n).or(this.shiftL(64 - n));\n\t        // },\n\n\t        /**\n\t         * Adds this word with the passed word.\n\t         *\n\t         * @param {X64Word} word The x64-Word to add with this word.\n\t         *\n\t         * @return {X64Word} A new x64-Word object after adding.\n\t         *\n\t         * @example\n\t         *\n\t         *     var added = x64Word.add(anotherX64Word);\n\t         */\n\t        // add: function (word) {\n\t            // var low = (this.low + word.low) | 0;\n\t            // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0;\n\t            // var high = (this.high + word.high + carry) | 0;\n\n\t            // return X64Word.create(high, low);\n\t        // }\n\t    });\n\n\t    /**\n\t     * An array of 64-bit words.\n\t     *\n\t     * @property {Array} words The array of CryptoJS.x64.Word objects.\n\t     * @property {number} sigBytes The number of significant bytes in this word array.\n\t     */\n\t    var X64WordArray = C_x64.WordArray = Base.extend({\n\t        /**\n\t         * Initializes a newly created word array.\n\t         *\n\t         * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects.\n\t         * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t         *\n\t         * @example\n\t         *\n\t         *     var wordArray = CryptoJS.x64.WordArray.create();\n\t         *\n\t         *     var wordArray = CryptoJS.x64.WordArray.create([\n\t         *         CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n\t         *         CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n\t         *     ]);\n\t         *\n\t         *     var wordArray = CryptoJS.x64.WordArray.create([\n\t         *         CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n\t         *         CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n\t         *     ], 10);\n\t         */\n\t        init: function (words, sigBytes) {\n\t            words = this.words = words || [];\n\n\t            if (sigBytes != undefined) {\n\t                this.sigBytes = sigBytes;\n\t            } else {\n\t                this.sigBytes = words.length * 8;\n\t            }\n\t        },\n\n\t        /**\n\t         * Converts this 64-bit word array to a 32-bit word array.\n\t         *\n\t         * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array.\n\t         *\n\t         * @example\n\t         *\n\t         *     var x32WordArray = x64WordArray.toX32();\n\t         */\n\t        toX32: function () {\n\t            // Shortcuts\n\t            var x64Words = this.words;\n\t            var x64WordsLength = x64Words.length;\n\n\t            // Convert\n\t            var x32Words = [];\n\t            for (var i = 0; i < x64WordsLength; i++) {\n\t                var x64Word = x64Words[i];\n\t                x32Words.push(x64Word.high);\n\t                x32Words.push(x64Word.low);\n\t            }\n\n\t            return X32WordArray.create(x32Words, this.sigBytes);\n\t        },\n\n\t        /**\n\t         * Creates a copy of this word array.\n\t         *\n\t         * @return {X64WordArray} The clone.\n\t         *\n\t         * @example\n\t         *\n\t         *     var clone = x64WordArray.clone();\n\t         */\n\t        clone: function () {\n\t            var clone = Base.clone.call(this);\n\n\t            // Clone \"words\" array\n\t            var words = clone.words = this.words.slice(0);\n\n\t            // Clone each X64Word object\n\t            var wordsLength = words.length;\n\t            for (var i = 0; i < wordsLength; i++) {\n\t                words[i] = words[i].clone();\n\t            }\n\n\t            return clone;\n\t        }\n\t    });\n\t}());\n\n\n\treturn CryptoJS;\n\n}));","const INITIAL_STATE = 1;\nconst FAIL_STATE = 0;\n\n/**\n * A StateMachine represents a deterministic finite automaton.\n * It can perform matches over a sequence of values, similar to a regular expression.\n */\nexport default class StateMachine {\n  constructor(dfa) {\n    this.stateTable = dfa.stateTable;\n    this.accepting = dfa.accepting;\n    this.tags = dfa.tags;\n  }\n\n  /**\n   * Returns an iterable object that yields pattern matches over the input sequence.\n   * Matches are of the form [startIndex, endIndex, tags].\n   */\n  match(str) {\n    let self = this;\n    return {\n      *[Symbol.iterator]() {\n        let state = INITIAL_STATE;\n        let startRun = null;\n        let lastAccepting = null;\n        let lastState = null;\n\n        for (let p = 0; p < str.length; p++) {\n          let c = str[p];\n\n          lastState = state;\n          state = self.stateTable[state][c];\n\n          if (state === FAIL_STATE) {\n            // yield the last match if any\n            if (startRun != null && lastAccepting != null && lastAccepting >= startRun) {\n              yield [startRun, lastAccepting, self.tags[lastState]];\n            }\n\n            // reset the state as if we started over from the initial state\n            state = self.stateTable[INITIAL_STATE][c];\n            startRun = null;\n          }\n\n          // start a run if not in the failure state\n          if (state !== FAIL_STATE && startRun == null) {\n            startRun = p;\n          }\n\n          // if accepting, mark the potential match end\n          if (self.accepting[state]) {\n            lastAccepting = p;\n          }\n\n          // reset the state to the initial state if we get into the failure state\n          if (state === FAIL_STATE) {\n            state = INITIAL_STATE;\n          }\n        }\n\n        // yield the last match if any\n        if (startRun != null && lastAccepting != null && lastAccepting >= startRun) {\n          yield [startRun, lastAccepting, self.tags[state]];\n        }\n      }\n    };\n  }\n\n  /**\n   * For each match over the input sequence, action functions matching\n   * the tag definitions in the input pattern are called with the startIndex,\n   * endIndex, and sub-match sequence.\n   */\n  apply(str, actions) {\n    for (let [start, end, tags] of this.match(str)) {\n      for (let tag of tags) {\n        if (typeof actions[tag] === 'function') {\n          actions[tag](start, end, str.slice(start, end + 1));\n        }\n      }\n    }\n  }\n}\n","/*\n * MIT LICENSE\n * Copyright (c) 2011 Devon Govett\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this\n * software and associated documentation files (the \"Software\"), to deal in the Software\n * without restriction, including without limitation the rights to use, copy, modify, merge,\n * publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons\n * to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING\n * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nconst fs = require('fs');\nconst zlib = require('zlib');\n\nmodule.exports = class PNG {\n  static decode(path, fn) {\n    return fs.readFile(path, function(err, file) {\n      const png = new PNG(file);\n      return png.decode(pixels => fn(pixels));\n    });\n  }\n\n  static load(path) {\n    const file = fs.readFileSync(path);\n    return new PNG(file);\n  }\n\n  constructor(data) {\n    let i;\n    this.data = data;\n    this.pos = 8; // Skip the default header\n\n    this.palette = [];\n    this.imgData = [];\n    this.transparency = {};\n    this.text = {};\n\n    while (true) {\n      const chunkSize = this.readUInt32();\n      let section = '';\n      for (i = 0; i < 4; i++) {\n        section += String.fromCharCode(this.data[this.pos++]);\n      }\n\n      switch (section) {\n        case 'IHDR':\n          // we can grab  interesting values from here (like width, height, etc)\n          this.width = this.readUInt32();\n          this.height = this.readUInt32();\n          this.bits = this.data[this.pos++];\n          this.colorType = this.data[this.pos++];\n          this.compressionMethod = this.data[this.pos++];\n          this.filterMethod = this.data[this.pos++];\n          this.interlaceMethod = this.data[this.pos++];\n          break;\n\n        case 'PLTE':\n          this.palette = this.read(chunkSize);\n          break;\n\n        case 'IDAT':\n          for (i = 0; i < chunkSize; i++) {\n            this.imgData.push(this.data[this.pos++]);\n          }\n          break;\n\n        case 'tRNS':\n          // This chunk can only occur once and it must occur after the\n          // PLTE chunk and before the IDAT chunk.\n          this.transparency = {};\n          switch (this.colorType) {\n            case 3:\n              // Indexed color, RGB. Each byte in this chunk is an alpha for\n              // the palette index in the PLTE (\"palette\") chunk up until the\n              // last non-opaque entry. Set up an array, stretching over all\n              // palette entries which will be 0 (opaque) or 1 (transparent).\n              this.transparency.indexed = this.read(chunkSize);\n              var short = 255 - this.transparency.indexed.length;\n              if (short > 0) {\n                for (i = 0; i < short; i++) {\n                  this.transparency.indexed.push(255);\n                }\n              }\n              break;\n            case 0:\n              // Greyscale. Corresponding to entries in the PLTE chunk.\n              // Grey is two bytes, range 0 .. (2 ^ bit-depth) - 1\n              this.transparency.grayscale = this.read(chunkSize)[0];\n              break;\n            case 2:\n              // True color with proper alpha channel.\n              this.transparency.rgb = this.read(chunkSize);\n              break;\n          }\n          break;\n\n        case 'tEXt':\n          var text = this.read(chunkSize);\n          var index = text.indexOf(0);\n          var key = String.fromCharCode.apply(String, text.slice(0, index));\n          this.text[key] = String.fromCharCode.apply(\n            String,\n            text.slice(index + 1)\n          );\n          break;\n\n        case 'IEND':\n          // we've got everything we need!\n          switch (this.colorType) {\n            case 0:\n            case 3:\n            case 4:\n              this.colors = 1;\n              break;\n            case 2:\n            case 6:\n              this.colors = 3;\n              break;\n          }\n\n          this.hasAlphaChannel = [4, 6].includes(this.colorType);\n          var colors = this.colors + (this.hasAlphaChannel ? 1 : 0);\n          this.pixelBitlength = this.bits * colors;\n\n          switch (this.colors) {\n            case 1:\n              this.colorSpace = 'DeviceGray';\n              break;\n            case 3:\n              this.colorSpace = 'DeviceRGB';\n              break;\n          }\n\n          this.imgData = new Buffer(this.imgData);\n          return;\n          break;\n\n        default:\n          // unknown (or unimportant) section, skip it\n          this.pos += chunkSize;\n      }\n\n      this.pos += 4; // Skip the CRC\n\n      if (this.pos > this.data.length) {\n        throw new Error('Incomplete or corrupt PNG file');\n      }\n    }\n  }\n\n  read(bytes) {\n    const result = new Array(bytes);\n    for (let i = 0; i < bytes; i++) {\n      result[i] = this.data[this.pos++];\n    }\n    return result;\n  }\n\n  readUInt32() {\n    const b1 = this.data[this.pos++] << 24;\n    const b2 = this.data[this.pos++] << 16;\n    const b3 = this.data[this.pos++] << 8;\n    const b4 = this.data[this.pos++];\n    return b1 | b2 | b3 | b4;\n  }\n\n  readUInt16() {\n    const b1 = this.data[this.pos++] << 8;\n    const b2 = this.data[this.pos++];\n    return b1 | b2;\n  }\n\n  decodePixels(fn) {\n    return zlib.inflate(this.imgData, (err, data) => {\n      if (err) {\n        throw err;\n      }\n\n      const { width, height } = this;\n      const pixelBytes = this.pixelBitlength / 8;\n\n      const pixels = new Buffer(width * height * pixelBytes);\n      const { length } = data;\n      let pos = 0;\n\n      function pass(x0, y0, dx, dy, singlePass = false) {\n        const w = Math.ceil((width - x0) / dx);\n        const h = Math.ceil((height - y0) / dy);\n        const scanlineLength = pixelBytes * w;\n        const buffer = singlePass ? pixels : new Buffer(scanlineLength * h);\n        let row = 0;\n        let c = 0;\n        while (row < h && pos < length) {\n          var byte, col, i, left, upper;\n          switch (data[pos++]) {\n            case 0: // None\n              for (i = 0; i < scanlineLength; i++) {\n                buffer[c++] = data[pos++];\n              }\n              break;\n\n            case 1: // Sub\n              for (i = 0; i < scanlineLength; i++) {\n                byte = data[pos++];\n                left = i < pixelBytes ? 0 : buffer[c - pixelBytes];\n                buffer[c++] = (byte + left) % 256;\n              }\n              break;\n\n            case 2: // Up\n              for (i = 0; i < scanlineLength; i++) {\n                byte = data[pos++];\n                col = (i - (i % pixelBytes)) / pixelBytes;\n                upper =\n                  row &&\n                  buffer[\n                    (row - 1) * scanlineLength +\n                      col * pixelBytes +\n                      (i % pixelBytes)\n                  ];\n                buffer[c++] = (upper + byte) % 256;\n              }\n              break;\n\n            case 3: // Average\n              for (i = 0; i < scanlineLength; i++) {\n                byte = data[pos++];\n                col = (i - (i % pixelBytes)) / pixelBytes;\n                left = i < pixelBytes ? 0 : buffer[c - pixelBytes];\n                upper =\n                  row &&\n                  buffer[\n                    (row - 1) * scanlineLength +\n                      col * pixelBytes +\n                      (i % pixelBytes)\n                  ];\n                buffer[c++] = (byte + Math.floor((left + upper) / 2)) % 256;\n              }\n              break;\n\n            case 4: // Paeth\n              for (i = 0; i < scanlineLength; i++) {\n                var paeth, upperLeft;\n                byte = data[pos++];\n                col = (i - (i % pixelBytes)) / pixelBytes;\n                left = i < pixelBytes ? 0 : buffer[c - pixelBytes];\n\n                if (row === 0) {\n                  upper = upperLeft = 0;\n                } else {\n                  upper =\n                    buffer[\n                      (row - 1) * scanlineLength +\n                        col * pixelBytes +\n                        (i % pixelBytes)\n                    ];\n                  upperLeft =\n                    col &&\n                    buffer[\n                      (row - 1) * scanlineLength +\n                        (col - 1) * pixelBytes +\n                        (i % pixelBytes)\n                    ];\n                }\n\n                const p = left + upper - upperLeft;\n                const pa = Math.abs(p - left);\n                const pb = Math.abs(p - upper);\n                const pc = Math.abs(p - upperLeft);\n\n                if (pa <= pb && pa <= pc) {\n                  paeth = left;\n                } else if (pb <= pc) {\n                  paeth = upper;\n                } else {\n                  paeth = upperLeft;\n                }\n\n                buffer[c++] = (byte + paeth) % 256;\n              }\n              break;\n\n            default:\n              throw new Error(`Invalid filter algorithm: ${data[pos - 1]}`);\n          }\n\n          if (!singlePass) {\n            let pixelsPos = ((y0 + row * dy) * width + x0) * pixelBytes;\n            let bufferPos = row * scanlineLength;\n            for (i = 0; i < w; i++) {\n              for (let j = 0; j < pixelBytes; j++)\n                pixels[pixelsPos++] = buffer[bufferPos++];\n              pixelsPos += (dx - 1) * pixelBytes;\n            }\n          }\n\n          row++;\n        }\n      }\n\n      if (this.interlaceMethod === 1) {\n        /*\n          1 6 4 6 2 6 4 6\n          7 7 7 7 7 7 7 7\n          5 6 5 6 5 6 5 6\n          7 7 7 7 7 7 7 7\n          3 6 4 6 3 6 4 6\n          7 7 7 7 7 7 7 7\n          5 6 5 6 5 6 5 6\n          7 7 7 7 7 7 7 7\n        */\n        pass(0, 0, 8, 8); // 1\n        pass(4, 0, 8, 8); // 2\n        pass(0, 4, 4, 8); // 3\n        pass(2, 0, 4, 4); // 4\n        pass(0, 2, 2, 4); // 5\n        pass(1, 0, 2, 2); // 6\n        pass(0, 1, 1, 2); // 7\n      } else {\n        pass(0, 0, 1, 1, true);\n      }\n\n      return fn(pixels);\n    });\n  }\n\n  decodePalette() {\n    const { palette } = this;\n    const { length } = palette;\n    const transparency = this.transparency.indexed || [];\n    const ret = new Buffer(transparency.length + length);\n    let pos = 0;\n    let c = 0;\n\n    for (let i = 0; i < length; i += 3) {\n      var left;\n      ret[pos++] = palette[i];\n      ret[pos++] = palette[i + 1];\n      ret[pos++] = palette[i + 2];\n      ret[pos++] = (left = transparency[c++]) != null ? left : 255;\n    }\n\n    return ret;\n  }\n\n  copyToImageData(imageData, pixels) {\n    let j, k;\n    let { colors } = this;\n    let palette = null;\n    let alpha = this.hasAlphaChannel;\n\n    if (this.palette.length) {\n      palette =\n        this._decodedPalette || (this._decodedPalette = this.decodePalette());\n      colors = 4;\n      alpha = true;\n    }\n\n    const data = imageData.data || imageData;\n    const { length } = data;\n    const input = palette || pixels;\n    let i = (j = 0);\n\n    if (colors === 1) {\n      while (i < length) {\n        k = palette ? pixels[i / 4] * 4 : j;\n        const v = input[k++];\n        data[i++] = v;\n        data[i++] = v;\n        data[i++] = v;\n        data[i++] = alpha ? input[k++] : 255;\n        j = k;\n      }\n    } else {\n      while (i < length) {\n        k = palette ? pixels[i / 4] * 4 : j;\n        data[i++] = input[k++];\n        data[i++] = input[k++];\n        data[i++] = input[k++];\n        data[i++] = alpha ? input[k++] : 255;\n        j = k;\n      }\n    }\n  }\n\n  decode(fn) {\n    const ret = new Buffer(this.width * this.height * 4);\n    return this.decodePixels(pixels => {\n      this.copyToImageData(ret, pixels);\n      return fn(ret);\n    });\n  }\n};\n","/* eslint-disable node/no-deprecated-api */\n\n'use strict'\n\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\nvar safer = {}\n\nvar key\n\nfor (key in buffer) {\n  if (!buffer.hasOwnProperty(key)) continue\n  if (key === 'SlowBuffer' || key === 'Buffer') continue\n  safer[key] = buffer[key]\n}\n\nvar Safer = safer.Buffer = {}\nfor (key in Buffer) {\n  if (!Buffer.hasOwnProperty(key)) continue\n  if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue\n  Safer[key] = Buffer[key]\n}\n\nsafer.Buffer.prototype = Buffer.prototype\n\nif (!Safer.from || Safer.from === Uint8Array.from) {\n  Safer.from = function (value, encodingOrOffset, length) {\n    if (typeof value === 'number') {\n      throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value)\n    }\n    if (value && typeof value.length === 'undefined') {\n      throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value)\n    }\n    return Buffer(value, encodingOrOffset, length)\n  }\n}\n\nif (!Safer.alloc) {\n  Safer.alloc = function (size, fill, encoding) {\n    if (typeof size !== 'number') {\n      throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size)\n    }\n    if (size < 0 || size >= 2 * (1 << 30)) {\n      throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n    }\n    var buf = Buffer(size)\n    if (!fill || fill.length === 0) {\n      buf.fill(0)\n    } else if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n    return buf\n  }\n}\n\nif (!safer.kStringMaxLength) {\n  try {\n    safer.kStringMaxLength = process.binding('buffer').kStringMaxLength\n  } catch (e) {\n    // we can't determine kStringMaxLength in environments where process.binding\n    // is unsupported, so let's not set it\n  }\n}\n\nif (!safer.constants) {\n  safer.constants = {\n    MAX_LENGTH: safer.kMaxLength\n  }\n  if (safer.kStringMaxLength) {\n    safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength\n  }\n}\n\nmodule.exports = safer\n","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar _require = require('buffer'),\n  Buffer = _require.Buffer;\nvar _require2 = require('util'),\n  inspect = _require2.inspect;\nvar custom = inspect && inspect.custom || 'inspect';\nfunction copyBuffer(src, target, offset) {\n  Buffer.prototype.copy.call(src, target, offset);\n}\nmodule.exports = /*#__PURE__*/function () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n  _createClass(BufferList, [{\n    key: \"push\",\n    value: function push(v) {\n      var entry = {\n        data: v,\n        next: null\n      };\n      if (this.length > 0) this.tail.next = entry;else this.head = entry;\n      this.tail = entry;\n      ++this.length;\n    }\n  }, {\n    key: \"unshift\",\n    value: function unshift(v) {\n      var entry = {\n        data: v,\n        next: this.head\n      };\n      if (this.length === 0) this.tail = entry;\n      this.head = entry;\n      ++this.length;\n    }\n  }, {\n    key: \"shift\",\n    value: function shift() {\n      if (this.length === 0) return;\n      var ret = this.head.data;\n      if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n      --this.length;\n      return ret;\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.head = this.tail = null;\n      this.length = 0;\n    }\n  }, {\n    key: \"join\",\n    value: function join(s) {\n      if (this.length === 0) return '';\n      var p = this.head;\n      var ret = '' + p.data;\n      while (p = p.next) ret += s + p.data;\n      return ret;\n    }\n  }, {\n    key: \"concat\",\n    value: function concat(n) {\n      if (this.length === 0) return Buffer.alloc(0);\n      var ret = Buffer.allocUnsafe(n >>> 0);\n      var p = this.head;\n      var i = 0;\n      while (p) {\n        copyBuffer(p.data, ret, i);\n        i += p.data.length;\n        p = p.next;\n      }\n      return ret;\n    }\n\n    // Consumes a specified amount of bytes or characters from the buffered data.\n  }, {\n    key: \"consume\",\n    value: function consume(n, hasStrings) {\n      var ret;\n      if (n < this.head.data.length) {\n        // `slice` is the same for buffers and strings.\n        ret = this.head.data.slice(0, n);\n        this.head.data = this.head.data.slice(n);\n      } else if (n === this.head.data.length) {\n        // First chunk is a perfect match.\n        ret = this.shift();\n      } else {\n        // Result spans more than one buffer.\n        ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n      }\n      return ret;\n    }\n  }, {\n    key: \"first\",\n    value: function first() {\n      return this.head.data;\n    }\n\n    // Consumes a specified amount of characters from the buffered data.\n  }, {\n    key: \"_getString\",\n    value: function _getString(n) {\n      var p = this.head;\n      var c = 1;\n      var ret = p.data;\n      n -= ret.length;\n      while (p = p.next) {\n        var str = p.data;\n        var nb = n > str.length ? str.length : n;\n        if (nb === str.length) ret += str;else ret += str.slice(0, n);\n        n -= nb;\n        if (n === 0) {\n          if (nb === str.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = str.slice(nb);\n          }\n          break;\n        }\n        ++c;\n      }\n      this.length -= c;\n      return ret;\n    }\n\n    // Consumes a specified amount of bytes from the buffered data.\n  }, {\n    key: \"_getBuffer\",\n    value: function _getBuffer(n) {\n      var ret = Buffer.allocUnsafe(n);\n      var p = this.head;\n      var c = 1;\n      p.data.copy(ret);\n      n -= p.data.length;\n      while (p = p.next) {\n        var buf = p.data;\n        var nb = n > buf.length ? buf.length : n;\n        buf.copy(ret, ret.length - n, 0, nb);\n        n -= nb;\n        if (n === 0) {\n          if (nb === buf.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = buf.slice(nb);\n          }\n          break;\n        }\n        ++c;\n      }\n      this.length -= c;\n      return ret;\n    }\n\n    // Make sure the linked list only shows the minimal necessary information.\n  }, {\n    key: custom,\n    value: function value(_, options) {\n      return inspect(this, _objectSpread(_objectSpread({}, options), {}, {\n        // Only inspect one level.\n        depth: 0,\n        // It should not recurse.\n        customInspect: false\n      }));\n    }\n  }]);\n  return BufferList;\n}();","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n","const inflate = require('tiny-inflate');\nconst { swap32LE } = require('./swap');\n\n// Shift size for getting the index-1 table offset.\nconst SHIFT_1 = 6 + 5;\n\n// Shift size for getting the index-2 table offset.\nconst SHIFT_2 = 5;\n\n// Difference between the two shift sizes,\n// for getting an index-1 offset from an index-2 offset. 6=11-5\nconst SHIFT_1_2 = SHIFT_1 - SHIFT_2;\n\n// Number of index-1 entries for the BMP. 32=0x20\n// This part of the index-1 table is omitted from the serialized form.\nconst OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> SHIFT_1;\n\n// Number of entries in an index-2 block. 64=0x40\nconst INDEX_2_BLOCK_LENGTH = 1 << SHIFT_1_2;\n\n// Mask for getting the lower bits for the in-index-2-block offset. */\nconst INDEX_2_MASK = INDEX_2_BLOCK_LENGTH - 1;\n\n// Shift size for shifting left the index array values.\n// Increases possible data size with 16-bit index values at the cost\n// of compactability.\n// This requires data blocks to be aligned by DATA_GRANULARITY.\nconst INDEX_SHIFT = 2;\n\n// Number of entries in a data block. 32=0x20\nconst DATA_BLOCK_LENGTH = 1 << SHIFT_2;\n\n// Mask for getting the lower bits for the in-data-block offset.\nconst DATA_MASK = DATA_BLOCK_LENGTH - 1;\n\n// The part of the index-2 table for U+D800..U+DBFF stores values for\n// lead surrogate code _units_ not code _points_.\n// Values for lead surrogate code _points_ are indexed with this portion of the table.\n// Length=32=0x20=0x400>>SHIFT_2. (There are 1024=0x400 lead surrogates.)\nconst LSCP_INDEX_2_OFFSET = 0x10000 >> SHIFT_2;\nconst LSCP_INDEX_2_LENGTH = 0x400 >> SHIFT_2;\n\n// Count the lengths of both BMP pieces. 2080=0x820\nconst INDEX_2_BMP_LENGTH = LSCP_INDEX_2_OFFSET + LSCP_INDEX_2_LENGTH;\n\n// The 2-byte UTF-8 version of the index-2 table follows at offset 2080=0x820.\n// Length 32=0x20 for lead bytes C0..DF, regardless of SHIFT_2.\nconst UTF8_2B_INDEX_2_OFFSET = INDEX_2_BMP_LENGTH;\nconst UTF8_2B_INDEX_2_LENGTH = 0x800 >> 6;  // U+0800 is the first code point after 2-byte UTF-8\n\n// The index-1 table, only used for supplementary code points, at offset 2112=0x840.\n// Variable length, for code points up to highStart, where the last single-value range starts.\n// Maximum length 512=0x200=0x100000>>SHIFT_1.\n// (For 0x100000 supplementary code points U+10000..U+10ffff.)\n//\n// The part of the index-2 table for supplementary code points starts\n// after this index-1 table.\n//\n// Both the index-1 table and the following part of the index-2 table\n// are omitted completely if there is only BMP data.\nconst INDEX_1_OFFSET = UTF8_2B_INDEX_2_OFFSET + UTF8_2B_INDEX_2_LENGTH;\n\n// The alignment size of a data block. Also the granularity for compaction.\nconst DATA_GRANULARITY = 1 << INDEX_SHIFT;\n\nclass UnicodeTrie {\n  constructor(data) {\n    const isBuffer = (typeof data.readUInt32BE === 'function') && (typeof data.slice === 'function');\n\n    if (isBuffer || data instanceof Uint8Array) {\n      // read binary format\n      let uncompressedLength;\n      if (isBuffer) {\n        this.highStart = data.readUInt32LE(0);\n        this.errorValue = data.readUInt32LE(4);\n        uncompressedLength = data.readUInt32LE(8);\n        data = data.slice(12);\n      } else {\n        const view = new DataView(data.buffer);\n        this.highStart = view.getUint32(0, true);\n        this.errorValue = view.getUint32(4, true);\n        uncompressedLength = view.getUint32(8, true);\n        data = data.subarray(12);\n      }\n\n      // double inflate the actual trie data\n      data = inflate(data, new Uint8Array(uncompressedLength));\n      data = inflate(data, new Uint8Array(uncompressedLength));\n\n      // swap bytes from little-endian\n      swap32LE(data);\n\n      this.data = new Uint32Array(data.buffer);\n\n    } else {\n      // pre-parsed data\n      ({ data: this.data, highStart: this.highStart, errorValue: this.errorValue } = data);\n    }\n  }\n\n  get(codePoint) {\n    let index;\n    if ((codePoint < 0) || (codePoint > 0x10ffff)) {\n      return this.errorValue;\n    }\n\n    if ((codePoint < 0xd800) || ((codePoint > 0xdbff) && (codePoint <= 0xffff))) {\n      // Ordinary BMP code point, excluding leading surrogates.\n      // BMP uses a single level lookup.  BMP index starts at offset 0 in the index.\n      // data is stored in the index array itself.\n      index = (this.data[codePoint >> SHIFT_2] << INDEX_SHIFT) + (codePoint & DATA_MASK);\n      return this.data[index];\n    }\n\n    if (codePoint <= 0xffff) {\n      // Lead Surrogate Code Point.  A Separate index section is stored for\n      // lead surrogate code units and code points.\n      //   The main index has the code unit data.\n      //   For this function, we need the code point data.\n      index = (this.data[LSCP_INDEX_2_OFFSET + ((codePoint - 0xd800) >> SHIFT_2)] << INDEX_SHIFT) + (codePoint & DATA_MASK);\n      return this.data[index];\n    }\n\n    if (codePoint < this.highStart) {\n      // Supplemental code point, use two-level lookup.\n      index = this.data[(INDEX_1_OFFSET - OMITTED_BMP_INDEX_1_LENGTH) + (codePoint >> SHIFT_1)];\n      index = this.data[index + ((codePoint >> SHIFT_2) & INDEX_2_MASK)];\n      index = (index << INDEX_SHIFT) + (codePoint & DATA_MASK);\n      return this.data[index];\n    }\n\n    return this.data[this.data.length - DATA_GRANULARITY];\n  }\n}\n\nmodule.exports = UnicodeTrie;","const isBigEndian = (new Uint8Array(new Uint32Array([0x12345678]).buffer)[0] === 0x12);\n\nconst swap = (b, n, m) => {\n  let i = b[n];\n  b[n] = b[m];\n  b[m] = i;\n};\n\nconst swap32 = array => {\n  const len = array.length;\n  for (let i = 0; i < len; i += 4) {\n    swap(array, i, i + 3);\n    swap(array, i + 1, i + 2);\n  }\n};\n\nconst swap32LE = array => {\n  if (isBigEndian) {\n    swap32(array);\n  }\n};\n\nmodule.exports = {\n  swap32LE: swap32LE\n};\n","var SVGtoPDF = require('./svg-to-pdfkit/source.js');\r\n\r\nmodule.exports = SVGtoPDF;\r\n","var SVGtoPDF = function(doc, svg, x, y, options) {\r\n    \"use strict\";\r\n\r\n    const NamedColors = {aliceblue: [240,248,255], antiquewhite: [250,235,215], aqua: [0,255,255], aquamarine: [127,255,212], azure: [240,255,255], beige: [245,245,220], bisque: [255,228,196], black: [0,0,0], blanchedalmond: [255,235,205], blue: [0,0,255], blueviolet: [138,43,226], brown: [165,42,42], burlywood: [222,184,135], cadetblue: [95,158,160], chartreuse: [127,255,0],\r\n      chocolate: [210,105,30], coral: [255,127,80], cornflowerblue: [100,149,237], cornsilk: [255,248,220], crimson: [220,20,60], cyan: [0,255,255], darkblue: [0,0,139], darkcyan: [0,139,139], darkgoldenrod: [184,134,11], darkgray: [169,169,169], darkgrey: [169,169,169], darkgreen: [0,100,0], darkkhaki: [189,183,107], darkmagenta: [139,0,139], darkolivegreen: [85,107,47],\r\n      darkorange: [255,140,0], darkorchid: [153,50,204], darkred: [139,0,0], darksalmon: [233,150,122], darkseagreen: [143,188,143], darkslateblue: [72,61,139], darkslategray: [47,79,79], darkslategrey: [47,79,79], darkturquoise: [0,206,209], darkviolet: [148,0,211], deeppink: [255,20,147], deepskyblue: [0,191,255], dimgray: [105,105,105], dimgrey: [105,105,105],\r\n      dodgerblue: [30,144,255], firebrick: [178,34,34], floralwhite: [255,250,240], forestgreen: [34,139,34], fuchsia: [255,0,255], gainsboro: [220,220,220], ghostwhite: [248,248,255], gold: [255,215,0], goldenrod: [218,165,32], gray: [128,128,128], grey: [128,128,128], green: [0,128,0], greenyellow: [173,255,47], honeydew: [240,255,240], hotpink: [255,105,180],\r\n      indianred: [205,92,92], indigo: [75,0,130], ivory: [255,255,240], khaki: [240,230,140], lavender: [230,230,250], lavenderblush: [255,240,245], lawngreen: [124,252,0], lemonchiffon: [255,250,205], lightblue: [173,216,230], lightcoral: [240,128,128], lightcyan: [224,255,255], lightgoldenrodyellow: [250,250,210], lightgray: [211,211,211], lightgrey: [211,211,211],\r\n      lightgreen: [144,238,144], lightpink: [255,182,193], lightsalmon: [255,160,122], lightseagreen: [32,178,170], lightskyblue: [135,206,250], lightslategray: [119,136,153], lightslategrey: [119,136,153], lightsteelblue: [176,196,222], lightyellow: [255,255,224], lime: [0,255,0], limegreen: [50,205,50], linen: [250,240,230], magenta: [255,0,255], maroon: [128,0,0],\r\n      mediumaquamarine: [102,205,170], mediumblue: [0,0,205], mediumorchid: [186,85,211], mediumpurple: [147,112,219], mediumseagreen: [60,179,113], mediumslateblue: [123,104,238], mediumspringgreen: [0,250,154], mediumturquoise: [72,209,204], mediumvioletred: [199,21,133], midnightblue: [25,25,112], mintcream: [245,255,250], mistyrose: [255,228,225], moccasin: [255,228,181],\r\n      navajowhite: [255,222,173], navy: [0,0,128], oldlace: [253,245,230], olive: [128,128,0], olivedrab: [107,142,35], orange: [255,165,0], orangered: [255,69,0], orchid: [218,112,214], palegoldenrod: [238,232,170], palegreen: [152,251,152], paleturquoise: [175,238,238], palevioletred: [219,112,147], papayawhip: [255,239,213], peachpuff: [255,218,185], peru: [205,133,63],\r\n      pink: [255,192,203], plum: [221,160,221], powderblue: [176,224,230], purple: [128,0,128], rebeccapurple: [102,51,153], red: [255,0,0], rosybrown: [188,143,143], royalblue: [65,105,225], saddlebrown: [139,69,19], salmon: [250,128,114], sandybrown: [244,164,96], seagreen: [46,139,87], seashell: [255,245,238], sienna: [160,82,45], silver: [192,192,192], skyblue: [135,206,235],\r\n      slateblue: [106,90,205], slategray: [112,128,144], slategrey: [112,128,144], snow: [255,250,250], springgreen: [0,255,127], steelblue: [70,130,180], tan: [210,180,140], teal: [0,128,128], thistle: [216,191,216], tomato: [255,99,71], turquoise: [64,224,208], violet: [238,130,238], wheat: [245,222,179], white: [255,255,255], whitesmoke: [245,245,245], yellow: [255,255,0]};\r\n    const DefaultColors = {black: [NamedColors.black, 1], white: [NamedColors.white, 1], transparent: [NamedColors.black, 0]};\r\n    const Entities = {quot: 34, amp: 38, lt: 60, gt: 62, apos: 39, OElig: 338, oelig: 339, Scaron: 352, scaron: 353, Yuml: 376, circ: 710, tilde: 732, ensp: 8194, emsp: 8195, thinsp: 8201, zwnj: 8204, zwj: 8205, lrm: 8206, rlm: 8207, ndash: 8211, mdash: 8212, lsquo: 8216, rsquo: 8217, sbquo: 8218, ldquo: 8220, rdquo: 8221, bdquo: 8222, dagger: 8224, Dagger: 8225, permil: 8240, lsaquo: 8249,\r\n      rsaquo: 8250, euro: 8364, nbsp: 160, iexcl: 161, cent: 162, pound: 163, curren: 164, yen: 165, brvbar: 166, sect: 167, uml: 168, copy: 169, ordf: 170, laquo: 171, not: 172, shy: 173, reg: 174, macr: 175, deg: 176, plusmn: 177, sup2: 178, sup3: 179, acute: 180, micro: 181, para: 182, middot: 183, cedil: 184, sup1: 185, ordm: 186, raquo: 187, frac14: 188, frac12: 189, frac34: 190,\r\n      iquest: 191, Agrave: 192, Aacute: 193, Acirc: 194, Atilde: 195, Auml: 196, Aring: 197, AElig: 198, Ccedil: 199, Egrave: 200, Eacute: 201, Ecirc: 202, Euml: 203, Igrave: 204, Iacute: 205, Icirc: 206, Iuml: 207, ETH: 208, Ntilde: 209, Ograve: 210, Oacute: 211, Ocirc: 212, Otilde: 213, Ouml: 214, times: 215, Oslash: 216, Ugrave: 217, Uacute: 218, Ucirc: 219, Uuml: 220, Yacute: 221,\r\n      THORN: 222, szlig: 223, agrave: 224, aacute: 225, acirc: 226, atilde: 227, auml: 228, aring: 229, aelig: 230, ccedil: 231, egrave: 232, eacute: 233, ecirc: 234, euml: 235, igrave: 236, iacute: 237, icirc: 238, iuml: 239, eth: 240, ntilde: 241, ograve: 242, oacute: 243, ocirc: 244, otilde: 245, ouml: 246, divide: 247, oslash: 248, ugrave: 249, uacute: 250, ucirc: 251, uuml: 252,\r\n      yacute: 253, thorn: 254, yuml: 255, fnof: 402, Alpha: 913, Beta: 914, Gamma: 915, Delta: 916, Epsilon: 917, Zeta: 918, Eta: 919, Theta: 920, Iota: 921, Kappa: 922, Lambda: 923, Mu: 924, Nu: 925, Xi: 926, Omicron: 927, Pi: 928, Rho: 929, Sigma: 931, Tau: 932, Upsilon: 933, Phi: 934, Chi: 935, Psi: 936, Omega: 937, alpha: 945, beta: 946, gamma: 947, delta: 948, epsilon: 949,\r\n      zeta: 950, eta: 951, theta: 952, iota: 953, kappa: 954, lambda: 955, mu: 956, nu: 957, xi: 958, omicron: 959, pi: 960, rho: 961, sigmaf: 962, sigma: 963, tau: 964, upsilon: 965, phi: 966, chi: 967, psi: 968, omega: 969, thetasym: 977, upsih: 978, piv: 982, bull: 8226, hellip: 8230, prime: 8242, Prime: 8243, oline: 8254, frasl: 8260, weierp: 8472, image: 8465, real: 8476,\r\n      trade: 8482, alefsym: 8501, larr: 8592, uarr: 8593, rarr: 8594, darr: 8595, harr: 8596, crarr: 8629, lArr: 8656, uArr: 8657, rArr: 8658, dArr: 8659, hArr: 8660, forall: 8704, part: 8706, exist: 8707, empty: 8709, nabla: 8711, isin: 8712, notin: 8713, ni: 8715, prod: 8719, sum: 8721, minus: 8722, lowast: 8727, radic: 8730, prop: 8733, infin: 8734, ang: 8736, and: 8743, or: 8744,\r\n      cap: 8745, cup: 8746, int: 8747, there4: 8756, sim: 8764, cong: 8773, asymp: 8776, ne: 8800, equiv: 8801, le: 8804, ge: 8805, sub: 8834, sup: 8835, nsub: 8836, sube: 8838, supe: 8839, oplus: 8853, otimes: 8855, perp: 8869, sdot: 8901, lceil: 8968, rceil: 8969, lfloor: 8970, rfloor: 8971, lang: 9001, rang: 9002, loz: 9674, spades: 9824, clubs: 9827, hearts: 9829, diams: 9830};\r\n    const PathArguments = {A: 7, a: 7, C: 6, c: 6, H: 1, h: 1, L: 2, l: 2, M: 2, m: 2, Q: 4, q: 4, S: 4, s: 4, T: 2, t: 2, V: 1, v: 1, Z: 0, z: 0};\r\n    const PathFlags = {A3: true, A4: true, a3: true, a4: true};\r\n    const Properties = {\r\n      'color':              {inherit: true, initial: undefined},\r\n      'visibility':         {inherit: true, initial: 'visible', values: {'hidden': 'hidden', 'collapse': 'hidden', 'visible':'visible'}},\r\n      'fill':               {inherit: true, initial: DefaultColors.black},\r\n      'stroke':             {inherit: true, initial: 'none'},\r\n      'stop-color':         {inherit: false, initial: DefaultColors.black},\r\n      'fill-opacity':       {inherit: true, initial: 1},\r\n      'stroke-opacity':     {inherit: true, initial: 1},\r\n      'stop-opacity':       {inherit: false, initial: 1},\r\n      'fill-rule':          {inherit: true, initial: 'nonzero', values: {'nonzero':'nonzero', 'evenodd':'evenodd'}},\r\n      'clip-rule':          {inherit: true, initial: 'nonzero', values: {'nonzero':'nonzero', 'evenodd':'evenodd'}},\r\n      'stroke-width':       {inherit: true, initial: 1},\r\n      'stroke-dasharray':   {inherit: true, initial: []},\r\n      'stroke-dashoffset':  {inherit: true, initial: 0},\r\n      'stroke-miterlimit':  {inherit: true, initial: 4},\r\n      'stroke-linejoin':    {inherit: true, initial: 'miter', values: {'miter':'miter', 'round':'round', 'bevel':'bevel'}},\r\n      'stroke-linecap':     {inherit: true, initial: 'butt', values: {'butt':'butt', 'round':'round', 'square':'square'}},\r\n      'font-size':          {inherit: true, initial: 16, values: {'xx-small':9, 'x-small':10, 'small':13, 'medium':16, 'large':18, 'x-large':24, 'xx-large':32}},\r\n      'font-family':        {inherit: true, initial: 'sans-serif'},\r\n      'font-weight':        {inherit: true, initial: 'normal', values: {'600':'bold', '700':'bold', '800':'bold', '900':'bold', 'bold':'bold', 'bolder':'bold', '500':'normal', '400':'normal', '300':'normal', '200':'normal', '100':'normal', 'normal':'normal', 'lighter':'normal'}},\r\n      'font-style':         {inherit: true, initial: 'normal', values: {'italic':'italic', 'oblique':'italic', 'normal':'normal'}},\r\n      'text-anchor':        {inherit: true, initial: 'start', values: {'start':'start', 'middle':'middle', 'end':'end'}},\r\n      'direction':          {inherit: true, initial: 'ltr', values: {'ltr':'ltr', 'rtl':'rtl'}},\r\n      'dominant-baseline':  {inherit: true, initial: 'baseline', values: {'auto':'baseline', 'baseline':'baseline', 'before-edge':'before-edge', 'text-before-edge':'before-edge', 'middle':'middle', 'central':'central', 'after-edge':'after-edge', 'text-after-edge':'after-edge', 'ideographic':'ideographic', 'alphabetic':'alphabetic', 'hanging':'hanging', 'mathematical':'mathematical'}},\r\n      'alignment-baseline': {inherit: false, initial: undefined, values: {'auto':'baseline', 'baseline':'baseline', 'before-edge':'before-edge', 'text-before-edge':'before-edge', 'middle':'middle', 'central':'central', 'after-edge':'after-edge', 'text-after-edge':'after-edge', 'ideographic':'ideographic', 'alphabetic':'alphabetic', 'hanging':'hanging', 'mathematical':'mathematical'}},\r\n      'baseline-shift':     {inherit: true, initial: 'baseline', values: {'baseline':'baseline', 'sub':'sub', 'super':'super'}},\r\n      'word-spacing':       {inherit: true, initial: 0, values: {normal:0}},\r\n      'letter-spacing':     {inherit: true, initial: 0, values: {normal:0}},\r\n      'text-decoration':    {inherit: false, initial: 'none', values: {'none':'none', 'underline':'underline', 'overline':'overline', 'line-through':'line-through'}},\r\n      'xml:space':          {inherit: true, initial: 'default', css: 'white-space', values: {'preserve':'preserve', 'default':'default', 'pre':'preserve', 'pre-line':'preserve', 'pre-wrap':'preserve', 'nowrap': 'default'}},\r\n      'marker-start':       {inherit: true, initial: 'none'},\r\n      'marker-mid':         {inherit: true, initial: 'none'},\r\n      'marker-end':         {inherit: true, initial: 'none'},\r\n      'opacity':            {inherit: false, initial: 1},\r\n      'transform':          {inherit: false, initial: [1, 0, 0, 1, 0, 0]},\r\n      'display':            {inherit: false, initial: 'inline', values: {'none':'none', 'inline':'inline', 'block':'inline'}},\r\n      'clip-path':          {inherit: false, initial: 'none'},\r\n      'mask':               {inherit: false, initial: 'none'},\r\n      'overflow':           {inherit: false, initial: 'hidden', values: {'hidden':'hidden', 'scroll':'hidden', 'visible':'visible'}}\r\n    };\r\n\r\n    function docBeginGroup(bbox) {\r\n      let group = new (function PDFGroup() {})();\r\n      group.name = 'G' + (doc._groupCount = (doc._groupCount || 0) + 1);\r\n      group.resources = doc.ref();\r\n      group.xobj = doc.ref({\r\n        Type: 'XObject',\r\n        Subtype: 'Form',\r\n        FormType: 1,\r\n        BBox: bbox,\r\n        Group: {S: 'Transparency', CS: 'DeviceRGB', I: true, K: false},\r\n        Resources: group.resources\r\n      });\r\n      group.xobj.write('');\r\n      group.savedMatrix = doc._ctm;\r\n      group.savedPage = doc.page;\r\n      groupStack.push(group);\r\n      doc._ctm = [1, 0, 0, 1, 0, 0];\r\n      doc.page = {\r\n        width: doc.page.width, height: doc.page.height,\r\n        write: function(data) {group.xobj.write(data);},\r\n        fonts: {}, xobjects: {}, ext_gstates: {}, patterns: {}\r\n      };\r\n      return group;\r\n    }\r\n    function docEndGroup(group) {\r\n      if (group !== groupStack.pop()) {throw('Group not matching');}\r\n      if (Object.keys(doc.page.fonts).length) {group.resources.data.Font = doc.page.fonts;}\r\n      if (Object.keys(doc.page.xobjects).length) {group.resources.data.XObject = doc.page.xobjects;}\r\n      if (Object.keys(doc.page.ext_gstates).length) {group.resources.data.ExtGState = doc.page.ext_gstates;}\r\n      if (Object.keys(doc.page.patterns).length) {group.resources.data.Pattern = doc.page.patterns;}\r\n      group.resources.end();\r\n      group.xobj.end();\r\n      doc._ctm = group.savedMatrix;\r\n      doc.page = group.savedPage;\r\n    }\r\n    function docInsertGroup(group) {\r\n      doc.page.xobjects[group.name] = group.xobj;\r\n      doc.addContent('/' + group.name + ' Do');\r\n    }\r\n    function docApplyMask(group, clip) {\r\n      let name = 'M' + (doc._maskCount = (doc._maskCount || 0) + 1);\r\n      let gstate = doc.ref({\r\n        Type: 'ExtGState', CA: 1, ca: 1, BM: 'Normal',\r\n        SMask: {S: 'Luminosity', G: group.xobj, BC: (clip ? [0, 0, 0] : [1, 1, 1])}\r\n      });\r\n      gstate.end();\r\n      doc.page.ext_gstates[name] = gstate;\r\n      doc.addContent('/' + name + ' gs');\r\n    }\r\n    function docCreatePattern(group, dx, dy, matrix) {\r\n      let pattern = new (function PDFPattern() {})();\r\n      pattern.group = group;\r\n      pattern.dx = dx;\r\n      pattern.dy = dy;\r\n      pattern.matrix = matrix || [1, 0, 0, 1, 0, 0];\r\n      return pattern;\r\n    }\r\n    function docUsePattern(pattern, stroke) {\r\n      let name = 'P' + (doc._patternCount = (doc._patternCount || 0) + 1);\r\n      let ref = doc.ref({\r\n        Type: 'Pattern', PatternType: 1, PaintType: 1, TilingType: 2,\r\n        BBox: [0, 0, pattern.dx, pattern.dy], XStep: pattern.dx, YStep: pattern.dy,\r\n        Matrix: multiplyMatrix(doc._ctm, pattern.matrix),\r\n        Resources: {\r\n          ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],\r\n          XObject: (function() {let temp = {}; temp[pattern.group.name] = pattern.group.xobj; return temp;})()\r\n        }\r\n      });\r\n      ref.write('/' + pattern.group.name + ' Do');\r\n      ref.end();\r\n      doc.page.patterns[name] = ref;\r\n      if (stroke) {\r\n        doc.addContent('/Pattern CS');\r\n        doc.addContent('/' + name + ' SCN');\r\n      } else {\r\n        doc.addContent('/Pattern cs');\r\n        doc.addContent('/' + name + ' scn');\r\n      }\r\n    }\r\n    function docBeginText(font, size) {\r\n      if (!doc.page.fonts[font.id]) {doc.page.fonts[font.id] = font.ref();}\r\n      doc.addContent('BT').addContent('/' + font.id + ' ' + size + ' Tf');\r\n    }\r\n    function docSetTextMatrix(a, b, c, d, e, f) {\r\n      doc.addContent(validateNumber(a) + ' ' + validateNumber(b) + ' ' + validateNumber(-c) + ' '  + validateNumber(-d) + ' ' + validateNumber(e) + ' ' + validateNumber(f) + ' Tm');\r\n    }\r\n    function docSetTextMode(fill, stroke) {\r\n      let mode = fill && stroke ? 2 : stroke ? 1 : fill ? 0 : 3;\r\n      doc.addContent(mode + ' Tr');\r\n    }\r\n    function docWriteGlyph(glyph) {\r\n      doc.addContent('<' + glyph + '> Tj');\r\n    }\r\n    function docEndText() {\r\n      doc.addContent('ET');\r\n    }\r\n    function docFillColor(color) {\r\n      if (color[0].constructor.name === 'PDFPattern') {\r\n        doc.fillOpacity(color[1]);\r\n        docUsePattern(color[0], false);\r\n      } else {\r\n        doc.fillColor(color[0], color[1]);\r\n      }\r\n    }\r\n    function docStrokeColor(color) {\r\n      if (color[0].constructor.name === 'PDFPattern') {\r\n        doc.strokeOpacity(color[1]);\r\n        docUsePattern(color[0], true);\r\n      } else {\r\n        doc.strokeColor(color[0], color[1]);\r\n      }\r\n    }\r\n    function docInsertLink(x, y, w, h, url) {\r\n      let ref = doc.ref({\r\n        Type: 'Annot',\r\n        Subtype: 'Link',\r\n        Rect: [x, y, w, h],\r\n        Border: [0, 0, 0],\r\n        A: {\r\n          S: 'URI',\r\n          URI: new String(url)\r\n        }\r\n      });\r\n      ref.end();\r\n      links.push(ref);\r\n    }\r\n    function parseXml(xml) {\r\n      let SvgNode = function(tag, type, value, error) {\r\n        this.error = error;\r\n        this.nodeName = tag;\r\n        this.nodeValue = value;\r\n        this.nodeType = type;\r\n        this.attributes = Object.create(null);\r\n        this.childNodes = [];\r\n        this.parentNode = null;\r\n        this.id = '';\r\n        this.textContent = '';\r\n        this.classList = [];\r\n      };\r\n      SvgNode.prototype.getAttribute = function(attr) {\r\n        return this.attributes[attr] != null ? this.attributes[attr] : null;\r\n      };\r\n      SvgNode.prototype.getElementById = function(id) {\r\n        let result = null;\r\n        (function recursive(node) {\r\n          if (result) {return;}\r\n          if (node.nodeType === 1) {\r\n            if (node.id === id) {result = node;}\r\n            for (let i = 0; i < node.childNodes.length; i++) {\r\n              recursive(node.childNodes[i]);\r\n            }\r\n          }\r\n        })(this);\r\n        return result;\r\n      };\r\n      SvgNode.prototype.getElementsByTagName = function(tag) {\r\n        let result = [];\r\n        (function recursive(node) {\r\n          if (node.nodeType === 1) {\r\n            if (node.nodeName === tag) {result.push(node);}\r\n            for (let i = 0; i < node.childNodes.length; i++) {\r\n              recursive(node.childNodes[i]);\r\n            }\r\n          }\r\n        })(this);\r\n        return result;\r\n      };\r\n      let parser = new StringParser(xml.trim()), result, child, error = false; \r\n      let recursive = function() {\r\n        let temp, child;\r\n        if (temp = parser.match(/^<([\\w:.-]+)\\s*/, true)) { // Opening tag\r\n          let node = new SvgNode(temp[1], 1, null, error);\r\n          while (temp = parser.match(/^([\\w:.-]+)(?:\\s*=\\s*\"([^\"]*)\"|\\s*=\\s*'([^']*)')?\\s*/, true)) { // Attribute\r\n            let attr = temp[1], value = decodeEntities(temp[2] || temp[3] || '');\r\n            if (!node.attributes[attr]) {\r\n              node.attributes[attr] = value;\r\n              if (attr === 'id') {node.id = value;}\r\n              if (attr === 'class') {node.classList = value.split(' ');}\r\n            } else {\r\n              warningCallback('parseXml: duplicate attribute \"' + attr + '\"');\r\n              error = true;\r\n            }\r\n          }\r\n          if (parser.match(/^>/)) { // End of opening tag\r\n            while (child = recursive()) {\r\n              node.childNodes.push(child);\r\n              child.parentNode = node;\r\n              node.textContent += (child.nodeType === 3 || child.nodeType === 4 ? child.nodeValue : child.textContent);\r\n            }\r\n            if (temp = parser.match(/^<\\/([\\w:.-]+)\\s*>/, true)) { // Closing tag\r\n              if (temp[1] === node.nodeName) {\r\n                return node;\r\n              } else {\r\n                warningCallback('parseXml: tag not matching, opening \"' + node.nodeName + '\" & closing \"' + temp[1] + '\"');\r\n                error = true;\r\n                return node;\r\n              }\r\n            } else {\r\n              warningCallback('parseXml: tag not matching, opening \"' + node.nodeName + '\" & not closing');\r\n              error = true;\r\n              return node;\r\n            }\r\n          } else if (parser.match(/^\\/>/)) { // Self-closing tag\r\n            return node;\r\n          } else {\r\n            warningCallback('parseXml: tag could not be parsed \"' + node.nodeName + '\"');\r\n            error = true;\r\n          }\r\n        } else if (temp = parser.match(/^<!--[\\s\\S]*?-->/)) { // Comment\r\n          return new SvgNode(null, 8, temp, error);\r\n        } else if (temp = parser.match(/^<\\?[\\s\\S]*?\\?>/)) { // Processing instructions\r\n          return new SvgNode(null, 7, temp, error);\r\n        } else if (temp = parser.match(/^<!DOCTYPE\\s*([\\s\\S]*?)>/)) { // Doctype\r\n          return new SvgNode(null, 10, temp, error);\r\n        } else if (temp = parser.match(/^<!\\[CDATA\\[([\\s\\S]*?)\\]\\]>/, true)) { // Cdata node\r\n          return new SvgNode('#cdata-section', 4, temp[1], error);\r\n        } else if (temp = parser.match(/^([^<]+)/, true)) { // Text node\r\n          return new SvgNode('#text', 3, decodeEntities(temp[1]), error);\r\n        }\r\n      };\r\n      while (child = recursive()) {\r\n        if (child.nodeType === 1 && !result) {\r\n          result = child;\r\n        } else if (child.nodeType === 1 || (child.nodeType === 3 && child.nodeValue.trim() !== '')) {\r\n          warningCallback('parseXml: data after document end has been discarded');\r\n        }\r\n      }\r\n      if (parser.matchAll()) {\r\n        warningCallback('parseXml: parsing error');\r\n      }\r\n      return result;\r\n    };\r\n    function decodeEntities(str) {\r\n      return(str.replace(/&(?:#([0-9]+)|#[xX]([0-9A-Fa-f]+)|([0-9A-Za-z]+));/g, function(mt, m0, m1, m2) {\r\n        if (m0) {return String.fromCharCode(parseInt(m0, 10));}\r\n        else if (m1) {return String.fromCharCode(parseInt(m1, 16));}\r\n        else if (m2 && Entities[m2]) {return String.fromCharCode(Entities[m2]);}\r\n        else {return mt;}\r\n      }));\r\n    }\r\n    function parseColor(raw) {\r\n      let temp, result;\r\n      raw = (raw || '').trim();\r\n      if (temp = NamedColors[raw]) {\r\n        result = [temp.slice(), 1];\r\n      } else if (temp = raw.match(/^rgba\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9.]+)\\s*\\)$/i)) {\r\n        temp[1] = parseInt(temp[1]); temp[2] = parseInt(temp[2]); temp[3] = parseInt(temp[3]); temp[4] = parseFloat(temp[4]);\r\n        if (temp[1] < 256 && temp[2] < 256 && temp[3] < 256 && temp[4] <= 1) {\r\n          result = [temp.slice(1, 4), temp[4]];\r\n        }\r\n      } else if (temp = raw.match(/^rgb\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)$/i)) {\r\n        temp[1] = parseInt(temp[1]); temp[2] = parseInt(temp[2]); temp[3] = parseInt(temp[3]);\r\n        if (temp[1] < 256 && temp[2] < 256 && temp[3] < 256) {\r\n          result = [temp.slice(1, 4), 1];\r\n        }\r\n      } else if (temp = raw.match(/^rgb\\(\\s*([0-9.]+)%\\s*,\\s*([0-9.]+)%\\s*,\\s*([0-9.]+)%\\s*\\)$/i)) {\r\n        temp[1] = 2.55 * parseFloat(temp[1]); temp[2] = 2.55 * parseFloat(temp[2]); temp[3] = 2.55 * parseFloat(temp[3]);\r\n        if (temp[1] < 256 && temp[2] < 256 && temp[3] < 256) {\r\n          result = [temp.slice(1, 4), 1];\r\n        }\r\n      } else if (temp = raw.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i)) {\r\n        result = [[parseInt(temp[1], 16), parseInt(temp[2], 16), parseInt(temp[3], 16)], 1];\r\n      } else if (temp = raw.match(/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i)) {\r\n        result = [[0x11 * parseInt(temp[1], 16), 0x11 * parseInt(temp[2], 16), 0x11 * parseInt(temp[3], 16)], 1];\r\n      }\r\n      return colorCallback ? colorCallback(result, raw) : result;\r\n    }\r\n    function opacityToColor(color, opacity, isMask) {\r\n      let newColor = color[0].slice(),\r\n          newOpacity = color[1] * opacity;\r\n      if (isMask) {\r\n        for (let i = 0; i < color.length; i++) {\r\n          newColor[i] *= newOpacity;\r\n        }\r\n        return [newColor, 1];\r\n      } else {\r\n        return [newColor, newOpacity];\r\n      }\r\n    }\r\n    function multiplyMatrix() {\r\n      function multiply(a, b) {\r\n        return [ a[0]*b[0]+a[2]*b[1], a[1]*b[0]+a[3]*b[1], a[0]*b[2]+a[2]*b[3],\r\n                 a[1]*b[2]+a[3]*b[3], a[0]*b[4]+a[2]*b[5]+a[4], a[1]*b[4]+a[3]*b[5]+a[5] ];\r\n      }\r\n      let result = arguments[0];\r\n      for (let i = 1; i < arguments.length; i++) {\r\n        result = multiply(result, arguments[i]);\r\n      }\r\n      return result;\r\n    }\r\n    function transformPoint(p, m) {\r\n      return [m[0] * p[0] + m[2] * p[1] + m[4], m[1] * p[0] + m[3] * p[1] + m[5]];\r\n    }\r\n    function getGlobalMatrix() {\r\n      let ctm = doc._ctm;\r\n      for (let i = groupStack.length - 1; i >= 0; i--) {\r\n        ctm = multiplyMatrix(groupStack[i].savedMatrix, ctm);\r\n      }\r\n      return ctm;\r\n    }\r\n    function getPageBBox() {\r\n      return new SvgShape().M(0, 0).L(doc.page.width, 0).L(doc.page.width, doc.page.height).L(0, doc.page.height)\r\n                           .transform(inverseMatrix(getGlobalMatrix())).getBoundingBox();\r\n    }\r\n    function inverseMatrix(m) {\r\n      let dt = m[0] * m[3] - m[1] * m[2];\r\n      return [m[3] / dt, -m[1] / dt, -m[2] / dt, m[0] / dt, (m[2]*m[5] - m[3]*m[4]) / dt, (m[1]*m[4] - m[0]*m[5]) / dt];\r\n    }\r\n    function validateMatrix(m) {\r\n      let m0 = validateNumber(m[0]), m1 = validateNumber(m[1]), m2 = validateNumber(m[2]),\r\n          m3 = validateNumber(m[3]), m4 = validateNumber(m[4]), m5 = validateNumber(m[5]);\r\n      if (isNotEqual(m0 * m3 - m1 * m2, 0)) {\r\n        return [m0, m1, m2, m3, m4, m5];\r\n      }\r\n    }\r\n    function solveEquation(curve) {\r\n      let a = curve[2] || 0, b = curve[1] || 0, c = curve[0] || 0;\r\n      if (isEqual(a, 0) && isEqual(b, 0)) {\r\n        return [];\r\n      } else if (isEqual(a, 0)) {\r\n        return [(-c) / b];\r\n      } else {\r\n        let d = b * b - 4 * a * c;\r\n        if (isNotEqual(d, 0) && d > 0) {\r\n          return [(-b + Math.sqrt(d)) / (2 * a), (-b - Math.sqrt(d)) / (2 * a)];\r\n        } else if (isEqual(d, 0)) {\r\n          return [(-b) / (2 * a)];\r\n        } else {\r\n          return [];\r\n        }\r\n      }\r\n    }\r\n    function getCurveValue(t, curve) {\r\n      return (curve[0] || 0) + (curve[1] || 0) * t + (curve[2] || 0) * t * t + (curve[3] || 0) * t * t * t;\r\n    }\r\n    function isEqual(number, ref) {\r\n      return Math.abs(number - ref) < 1e-10;\r\n    }\r\n    function isNotEqual(number, ref) {\r\n      return Math.abs(number - ref) >= 1e-10;\r\n    }\r\n    function validateNumber(n) {\r\n      return n > -1e21 && n < 1e21 ? Math.round(n * 1e6) / 1e6 : 0;\r\n    }\r\n    function isArrayLike(v) {\r\n      return typeof v === 'object' && v !== null && typeof v.length === 'number';\r\n    }\r\n    function parseTranform(v) {\r\n      let parser = new StringParser((v || '').trim()), result = [1, 0, 0, 1, 0, 0], temp;\r\n      while (temp = parser.match(/^([A-Za-z]+)\\s*[(]([^(]+)[)]/, true)) {\r\n        let func = temp[1], nums = [], parser2 = new StringParser(temp[2].trim()), temp2;\r\n        while (temp2 = parser2.matchNumber()) {\r\n          nums.push(Number(temp2));\r\n          parser2.matchSeparator();\r\n        }\r\n        if (func === 'matrix' && nums.length === 6) {\r\n          result = multiplyMatrix(result, [nums[0], nums[1], nums[2], nums[3], nums[4], nums[5]]);\r\n        } else if (func === 'translate' && nums.length === 2) {\r\n          result = multiplyMatrix(result, [1, 0, 0, 1, nums[0], nums[1]]);\r\n        } else if (func === 'translate' && nums.length === 1) {\r\n          result = multiplyMatrix(result, [1, 0, 0, 1, nums[0], 0]);\r\n        } else if (func === 'scale' && nums.length === 2) {\r\n          result = multiplyMatrix(result, [nums[0], 0, 0, nums[1], 0, 0]);\r\n        } else if (func === 'scale' && nums.length === 1) {\r\n          result = multiplyMatrix(result, [nums[0], 0, 0, nums[0], 0, 0]);\r\n        } else if (func === 'rotate' && nums.length === 3) {\r\n          let a = nums[0] * Math.PI / 180;\r\n          result = multiplyMatrix(result, [1, 0, 0, 1, nums[1], nums[2]], [Math.cos(a), Math.sin(a), -Math.sin(a), Math.cos(a), 0, 0], [1, 0, 0, 1, -nums[1], -nums[2]]);\r\n        } else if (func === 'rotate' && nums.length === 1) {\r\n          let a = nums[0] * Math.PI / 180;\r\n          result = multiplyMatrix(result, [Math.cos(a), Math.sin(a), -Math.sin(a), Math.cos(a), 0, 0]);\r\n        } else if (func === 'skewX' && nums.length === 1) {\r\n          let a = nums[0] * Math.PI / 180;\r\n          result = multiplyMatrix(result, [1, 0, Math.tan(a), 1, 0, 0]);\r\n        } else if (func === 'skewY' && nums.length === 1) {\r\n          let a = nums[0] * Math.PI / 180;\r\n          result = multiplyMatrix(result, [1, Math.tan(a), 0, 1, 0, 0]);\r\n        } else {return;}\r\n        parser.matchSeparator();\r\n      }\r\n      if (parser.matchAll()) {return;}\r\n      return result;\r\n    }\r\n    function parseAspectRatio(aspectRatio, availWidth, availHeight, elemWidth, elemHeight, initAlign) {\r\n      let temp = (aspectRatio || '').trim().match(/^(none)$|^x(Min|Mid|Max)Y(Min|Mid|Max)(?:\\s+(meet|slice))?$/) || [],\r\n          ratioType = temp[1] || temp[4] || 'meet',\r\n          xAlign = temp[2] || 'Mid',\r\n          yAlign = temp[3] || 'Mid',\r\n          scaleX = availWidth / elemWidth,\r\n          scaleY = availHeight / elemHeight,\r\n          dx = {'Min':0, 'Mid':0.5, 'Max':1}[xAlign] - (initAlign || 0),\r\n          dy = {'Min':0, 'Mid':0.5, 'Max':1}[yAlign] - (initAlign || 0);\r\n      if (ratioType === 'slice') {\r\n        scaleY = scaleX = Math.max(scaleX, scaleY);\r\n      } else if (ratioType === 'meet') {\r\n        scaleY = scaleX = Math.min(scaleX, scaleY);\r\n      }\r\n      return [scaleX, 0, 0, scaleY, dx * (availWidth - elemWidth * scaleX), dy * (availHeight - elemHeight * scaleY)];\r\n    }\r\n    function parseStyleAttr(v) {\r\n      let result = Object.create(null);\r\n      v = (v || '').trim().split(/;/);\r\n      for (let i = 0; i < v.length; i++) {\r\n        let key = (v[i].split(':')[0] || '').trim(),\r\n            value = (v[i].split(':')[1] || '').trim();\r\n        if (key) {\r\n          result[key] = value;\r\n        }\r\n      }\r\n      if (result['marker']) {\r\n        if (!result['marker-start']) {result['marker-start'] = result['marker'];}\r\n        if (!result['marker-mid']) {result['marker-mid'] = result['marker'];}\r\n        if (!result['marker-end']) {result['marker-end'] = result['marker'];}\r\n      }\r\n      if (result['font']) {\r\n        let fontFamily = null, fontSize = null, fontStyle = \"normal\", fontWeight = \"normal\", fontVariant = \"normal\";\r\n        let parts = result['font'].split(/\\s+/);\r\n        for (let i = 0; i < parts.length; i++) {\r\n          switch (parts[i]) {\r\n            case \"normal\":\r\n              break;\r\n            case \"italic\": case \"oblique\":\r\n              fontStyle = parts[i];\r\n              break;\r\n            case \"small-caps\":\r\n              fontVariant = parts[i];\r\n              break;\r\n            case \"bold\": case \"bolder\": case \"lighter\": case \"100\": case \"200\": case \"300\":\r\n            case \"400\": case \"500\": case \"600\": case \"700\": case \"800\": case \"900\":\r\n              fontWeight = parts[i];\r\n              break;\r\n            default:\r\n              if (!fontSize) {\r\n                fontSize = parts[i].split('/')[0];\r\n              } else {\r\n                if (!fontFamily) {\r\n                  fontFamily = parts[i];\r\n                } else {\r\n                  fontFamily += ' ' + parts[i];\r\n                }\r\n              }\r\n              break;\r\n          }\r\n        }\r\n        if (!result['font-style']) {result['font-style'] = fontStyle;}\r\n        if (!result['font-variant']) {result['font-variant'] = fontVariant;}\r\n        if (!result['font-weight']) {result['font-weight'] = fontWeight;}\r\n        if (!result['font-size']) {result['font-size'] = fontSize;}\r\n        if (!result['font-family']) {result['font-family'] = fontFamily;}\r\n      }\r\n      return result;\r\n    }\r\n    function parseSelector(v) {\r\n      let parts = v.split(/(?=[.#])/g), ids = [], classes = [], tags = [], temp;\r\n      for (let i = 0; i < parts.length; i++) {\r\n        if (temp = parts[i].match(/^[#]([_A-Za-z0-9-]+)$/)) {\r\n          ids.push(temp[1]);\r\n        } else if (temp = parts[i].match(/^[.]([_A-Za-z0-9-]+)$/)) {\r\n          classes.push(temp[1]);\r\n        } else if (temp = parts[i].match(/^([_A-Za-z0-9-]+)$/)) {\r\n          tags.push(temp[1]);\r\n        } else if (parts[i] !== '*') {\r\n          return;\r\n        }\r\n      }\r\n      return {\r\n        tags: tags, ids: ids, classes: classes,\r\n        specificity: ids.length * 10000 + classes.length * 100 + tags.length\r\n      };\r\n    }\r\n    function parseStyleSheet(v) {\r\n      let parser = new StringParser(v.trim()), rules = [], rule;\r\n      while (rule = parser.match(/^\\s*([^\\{\\}]*?)\\s*\\{([^\\{\\}]*?)\\}/, true)) {\r\n        let selectors = rule[1].split(/\\s*,\\s*/g),\r\n            css = parseStyleAttr(rule[2]);\r\n        for (let i = 0; i < selectors.length; i++) {\r\n          let selector = parseSelector(selectors[i]);\r\n          if (selector) {\r\n            rules.push({selector: selector, css:css});\r\n          }\r\n        }\r\n      }\r\n      return rules;\r\n    }\r\n    function matchesSelector(elem, selector) {\r\n      if (elem.nodeType !== 1) {return false;}\r\n      for (let i = 0; i < selector.tags.length; i++) {\r\n        if (selector.tags[i] !== elem.nodeName) {return false;}\r\n      }\r\n      for (let i = 0; i < selector.ids.length; i++) {\r\n        if (selector.ids[i] !== elem.id) {return false;}\r\n      }\r\n      for (let i = 0; i < selector.classes.length; i++) {\r\n        if (elem.classList.indexOf(selector.classes[i]) === -1) {return false;}\r\n      }\r\n      return true;\r\n    }\r\n    function getStyle(elem) {\r\n      let result = Object.create(null);\r\n      let specificities = Object.create(null);\r\n      for (let i = 0; i < styleRules.length; i++) {\r\n        let rule = styleRules[i];\r\n        if (matchesSelector(elem, rule.selector)) {\r\n          for (let key in rule.css) {\r\n            if (!(specificities[key] > rule.selector.specificity)) {\r\n              result[key] = rule.css[key];\r\n              specificities[key] = rule.selector.specificity;\r\n            }\r\n          }\r\n        }\r\n      }\r\n      return result;\r\n    }\r\n    function combineArrays(array1, array2) {\r\n      return array1.concat(array2.slice(array1.length));\r\n    }\r\n    function getAscent(font, size) {\r\n      return Math.max(font.ascender, (font.bbox[3] || font.bbox.maxY) * (font.scale || 1)) * size / 1000;\r\n    }\r\n    function getDescent(font, size) {\r\n      return Math.min(font.descender, (font.bbox[1] || font.bbox.minY) * (font.scale || 1)) * size / 1000;\r\n    }\r\n    function getXHeight(font, size) {\r\n      return (font.xHeight || 0.5 * (font.ascender - font.descender)) * size / 1000;\r\n    }\r\n    function getBaseline(font, size, baseline, shift) {\r\n      let dy1, dy2;\r\n      switch (baseline) {\r\n        case 'middle': dy1 = 0.5 * getXHeight(font, size); break;\r\n        case 'central': dy1 = 0.5 * (getDescent(font, size) + getAscent(font, size)); break;\r\n        case 'after-edge': case 'text-after-edge': dy1 = getDescent(font, size); break;\r\n        case 'alphabetic': case 'auto': case 'baseline': dy1 = 0; break;\r\n        case 'mathematical': dy1 = 0.5 * getAscent(font, size); break;\r\n        case 'hanging': dy1 = 0.8 * getAscent(font, size); break;\r\n        case 'before-edge': case 'text-before-edge': dy1 = getAscent(font, size); break;\r\n        default: dy1 = 0; break;\r\n      }\r\n      switch (shift) {\r\n        case 'baseline': dy2 = 0; break;\r\n        case 'super': dy2 = 0.6 * size; break;\r\n        case 'sub': dy2 = -0.6 * size; break;\r\n        default: dy2 = shift; break;\r\n      }\r\n      return dy1 - dy2;\r\n    }\r\n    function getTextPos(font, size, text) {\r\n      let encoded = font.encode('' + text), hex = encoded[0], pos = encoded[1], data = [];\r\n      for (let i = 0; i < hex.length; i++) {\r\n        let unicode = font.unicode ? font.unicode[parseInt(hex[i], 16)] : [text.charCodeAt(i)];\r\n        data.push({\r\n          glyph: hex[i],\r\n          unicode: unicode,\r\n          width: pos[i].advanceWidth * size / 1000,\r\n          xOffset: pos[i].xOffset * size / 1000,\r\n          yOffset: pos[i].yOffset * size / 1000,\r\n          xAdvance: pos[i].xAdvance * size / 1000,\r\n          yAdvance: pos[i].yAdvance * size / 1000\r\n        });\r\n      }\r\n      return data;\r\n    }\r\n    function createSVGElement(obj, inherits) {\r\n      switch (obj.nodeName) {\r\n        case 'use': return new SvgElemUse(obj, inherits);\r\n        case 'symbol': return new SvgElemSymbol(obj, inherits);\r\n        case 'g': return new SvgElemGroup(obj, inherits);\r\n        case 'a': return new SvgElemLink(obj, inherits);\r\n        case 'svg': return new SvgElemSvg(obj, inherits);\r\n        case 'image': return new SVGElemImage(obj, inherits);\r\n        case 'rect': return new SvgElemRect(obj, inherits);\r\n        case 'circle': return new SvgElemCircle(obj, inherits);\r\n        case 'ellipse': return new SvgElemEllipse(obj, inherits);\r\n        case 'line': return new SvgElemLine(obj, inherits);\r\n        case 'polyline': return new SvgElemPolyline(obj, inherits);\r\n        case 'polygon': return new SvgElemPolygon(obj, inherits);\r\n        case 'path': return new SvgElemPath(obj, inherits);\r\n        case 'text': return new SvgElemText(obj, inherits);\r\n        case 'tspan': return new SvgElemTspan(obj, inherits);\r\n        case 'textPath': return new SvgElemTextPath(obj, inherits);\r\n        case '#text': case '#cdata-section': return new SvgElemTextNode(obj, inherits);\r\n        default: return new SvgElem(obj, inherits);\r\n      }\r\n    }\r\n\r\n    var StringParser = function(str) {\r\n      this.match = function(exp, all) {\r\n        let temp = str.match(exp);\r\n        if (!temp || temp.index !== 0) {return;}\r\n        str = str.substring(temp[0].length);\r\n        return (all ? temp : temp[0]);\r\n      };\r\n      this.matchSeparator = function() {\r\n        return this.match(/^(?:\\s*,\\s*|\\s*|)/);\r\n      };\r\n      this.matchSpace = function() {\r\n        return this.match(/^(?:\\s*)/);\r\n      };\r\n      this.matchLengthUnit = function() {\r\n        return this.match(/^(?:px|pt|cm|mm|in|pc|em|ex|%|)/);\r\n      };\r\n      this.matchNumber = function() {\r\n        return this.match(/^(?:[-+]?(?:[0-9]+[.][0-9]+|[0-9]+[.]|[.][0-9]+|[0-9]+)(?:[eE][-+]?[0-9]+)?)/);\r\n      };\r\n      this.matchAll = function() {\r\n        return this.match(/^[\\s\\S]+/);\r\n      };\r\n    };\r\n\r\n    var BezierSegment = function(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {\r\n      let divisions = 6 * precision;\r\n      let equationX = [p1x, -3 * p1x + 3 * c1x, 3 * p1x - 6 * c1x + 3 * c2x, -p1x + 3 * c1x - 3 * c2x + p2x];\r\n      let equationY = [p1y, -3 * p1y + 3 * c1y, 3 * p1y - 6 * c1y + 3 * c2y, -p1y + 3 * c1y - 3 * c2y + p2y];\r\n      let derivativeX = [-3 * p1x + 3 * c1x, 6 * p1x - 12 * c1x + 6 * c2x, -3 * p1x + 9 * c1x - 9 * c2x + 3 * p2x];\r\n      let derivativeY = [-3 * p1y + 3 * c1y, 6 * p1y - 12 * c1y + 6 * c2y, -3 * p1y + 9 * c1y - 9 * c2y + 3 * p2y];\r\n      let lengthMap = [0];\r\n      for (let i = 1; i <= divisions; i++) {\r\n        let t = (i - 0.5) / divisions;\r\n        let dx = getCurveValue(t, derivativeX) / divisions,\r\n            dy = getCurveValue(t, derivativeY) / divisions,\r\n            l = Math.sqrt(dx * dx + dy * dy);\r\n        lengthMap[i] = lengthMap[i - 1] + l;\r\n      }\r\n      this.totalLength = lengthMap[divisions];\r\n      this.startPoint = [p1x, p1y, isEqual(p1x, c1x) && isEqual(p1y, c1y) ? Math.atan2(c2y - c1y, c2x - c1x) : Math.atan2(c1y - p1y, c1x - p1x)];\r\n      this.endPoint = [p2x, p2y, isEqual(c2x, p2x) && isEqual(c2y, p2y) ? Math.atan2(c2y - c1y, c2x - c1x) : Math.atan2(p2y - c2y, p2x - c2x)];\r\n      this.getBoundingBox = function() {\r\n        let temp;\r\n        let minX = getCurveValue(0, equationX), minY = getCurveValue(0, equationY),\r\n            maxX = getCurveValue(1, equationX), maxY = getCurveValue(1, equationY);\r\n        if (minX > maxX) {temp = maxX; maxX = minX; minX = temp;}\r\n        if (minY > maxY) {temp = maxY; maxY = minY; minY = temp;}\r\n        let rootsX = solveEquation(derivativeX);\r\n        for (let i = 0; i < rootsX.length; i++) {\r\n          if (rootsX[i] >= 0 && rootsX[i] <= 1) {\r\n            let x = getCurveValue(rootsX[i], equationX);\r\n            if (x < minX) {minX = x;}\r\n            if (x > maxX) {maxX = x;}\r\n          }\r\n        }\r\n        let rootsY = solveEquation(derivativeY);\r\n        for (let i = 0; i < rootsY.length; i++) {\r\n          if (rootsY[i] >= 0 && rootsY[i] <= 1) {\r\n            let y = getCurveValue(rootsY[i], equationY);\r\n            if (y < minY) {minY = y;}\r\n            if (y > maxY) {maxY = y;}\r\n          }\r\n        }\r\n        return [minX, minY, maxX, maxY];\r\n      };\r\n      this.getPointAtLength = function(l) {\r\n        if (isEqual(l, 0)) {return this.startPoint;}\r\n        if (isEqual(l, this.totalLength)) {return this.endPoint;}\r\n        if (l < 0 || l > this.totalLength) {return;}\r\n        for (let i = 1; i <= divisions; i++) {\r\n          let l1 = lengthMap[i-1], l2 = lengthMap[i];\r\n          if (l1 <= l && l <= l2) {\r\n            let t = (i - (l2 - l) / (l2 - l1)) / divisions,\r\n                x = getCurveValue(t, equationX), y = getCurveValue(t, equationY),\r\n                dx = getCurveValue(t, derivativeX), dy = getCurveValue(t, derivativeY);\r\n            return [x, y, Math.atan2(dy, dx)];\r\n          }\r\n        }\r\n      };\r\n    };\r\n\r\n    var LineSegment = function(p1x, p1y, p2x, p2y) {\r\n      this.totalLength = Math.sqrt((p2x - p1x) * (p2x - p1x) + (p2y - p1y) * (p2y - p1y));\r\n      this.startPoint = [p1x, p1y, Math.atan2(p2y - p1y, p2x - p1x)];\r\n      this.endPoint = [p2x, p2y, Math.atan2(p2y - p1y, p2x - p1x)];\r\n      this.getBoundingBox = function() {\r\n        return [Math.min(this.startPoint[0], this.endPoint[0]), Math.min(this.startPoint[1], this.endPoint[1]),\r\n                Math.max(this.startPoint[0], this.endPoint[0]), Math.max(this.startPoint[1], this.endPoint[1])];\r\n      };\r\n      this.getPointAtLength = function(l) {\r\n        if (l >= 0 && l <= this.totalLength) {\r\n          let r = l / this.totalLength || 0,\r\n              x = this.startPoint[0] + r * (this.endPoint[0] - this.startPoint[0]),\r\n              y = this.startPoint[1] + r * (this.endPoint[1] - this.startPoint[1]);\r\n          return [x, y, this.startPoint[2]];\r\n        }\r\n      };\r\n    };\r\n\r\n    var SvgShape = function() {\r\n      this.pathCommands = [];\r\n      this.pathSegments = [];\r\n      this.startPoint = null;\r\n      this.endPoint = null;\r\n      this.totalLength = 0;\r\n      let startX = 0, startY = 0, currX = 0, currY = 0, lastCom, lastCtrlX, lastCtrlY;\r\n      this.move = function(x, y) {\r\n        startX = currX = x; startY = currY = y;\r\n        return null;\r\n      };\r\n      this.line = function(x, y) {\r\n        let segment = new LineSegment(currX, currY, x, y);\r\n        currX = x; currY = y;\r\n        return segment;\r\n      };\r\n      this.curve = function(c1x, c1y, c2x, c2y, x, y) {\r\n        let segment = new BezierSegment(currX, currY, c1x, c1y, c2x, c2y, x, y);\r\n        currX = x; currY = y;\r\n        return segment;\r\n      };\r\n      this.close = function() {\r\n        let segment = new LineSegment(currX, currY, startX, startY);\r\n        currX = startX; currY = startY;\r\n        return segment;\r\n      };\r\n      this.addCommand = function(data) {\r\n        this.pathCommands.push(data);\r\n        let segment = this[data[0]].apply(this, data.slice(3));\r\n        if (segment) {\r\n          segment.hasStart = data[1];\r\n          segment.hasEnd = data[2];\r\n          this.startPoint = this.startPoint || segment.startPoint;\r\n          this.endPoint = segment.endPoint;\r\n          this.pathSegments.push(segment);\r\n          this.totalLength += segment.totalLength;\r\n        }\r\n      };\r\n      this.M = function(x, y) {\r\n        this.addCommand(['move', true, true, x, y]);\r\n        lastCom = 'M';\r\n        return this;\r\n      };\r\n      this.m = function(x, y) {\r\n        return this.M(currX + x, currY + y);\r\n      };\r\n      this.Z = this.z = function() {\r\n        this.addCommand(['close', true, true]);\r\n        lastCom = 'Z';\r\n        return this;\r\n      };\r\n      this.L = function(x, y) {\r\n        this.addCommand(['line', true, true, x, y]);\r\n        lastCom = 'L';\r\n        return this;\r\n      };\r\n      this.l = function(x, y) {\r\n        return this.L(currX + x, currY + y);\r\n      };\r\n      this.H = function(x) {\r\n        return this.L(x, currY);\r\n      };\r\n      this.h = function(x) {\r\n        return this.L(currX + x, currY);\r\n      };\r\n      this.V = function(y) {\r\n        return this.L(currX, y);\r\n      };\r\n      this.v = function(y) {\r\n        return this.L(currX, currY + y);\r\n      };\r\n      this.C = function(c1x, c1y, c2x, c2y, x, y) {\r\n        this.addCommand(['curve', true, true, c1x, c1y, c2x, c2y, x, y]);\r\n        lastCom = 'C'; lastCtrlX = c2x; lastCtrlY = c2y;\r\n        return this;\r\n      };\r\n      this.c = function(c1x, c1y, c2x, c2y, x, y) {\r\n        return this.C(currX + c1x, currY + c1y, currX + c2x, currY + c2y, currX + x, currY + y);\r\n      };\r\n      this.S = function(c1x, c1y, x, y) {\r\n        return this.C(currX + (lastCom === 'C' ? currX - lastCtrlX : 0), currY + (lastCom === 'C' ? currY - lastCtrlY : 0), c1x, c1y, x, y);\r\n      };\r\n      this.s = function(c1x, c1y, x, y) {\r\n        return this.C(currX + (lastCom === 'C' ? currX - lastCtrlX : 0), currY + (lastCom === 'C' ? currY - lastCtrlY : 0), currX + c1x, currY + c1y, currX + x, currY + y);\r\n      };\r\n      this.Q = function(cx, cy, x, y) {\r\n        let c1x = currX + 2 / 3 * (cx - currX), c1y = currY + 2 / 3 * (cy - currY),\r\n            c2x = x + 2 / 3 * (cx - x), c2y = y + 2 / 3 * (cy - y);\r\n        this.addCommand(['curve', true, true, c1x, c1y, c2x, c2y, x, y]);\r\n        lastCom = 'Q'; lastCtrlX = cx; lastCtrlY = cy;\r\n        return this;\r\n      };\r\n      this.q = function(c1x, c1y, x, y) {\r\n        return this.Q(currX + c1x, currY + c1y, currX + x, currY + y);\r\n      };\r\n      this.T = function(x, y) {\r\n        return this.Q(currX + (lastCom === 'Q' ? currX - lastCtrlX : 0), currY + (lastCom === 'Q' ? currY - lastCtrlY : 0), x, y);\r\n      };\r\n      this.t = function(x, y) {\r\n        return this.Q(currX + (lastCom === 'Q' ? currX - lastCtrlX : 0), currY + (lastCom === 'Q' ? currY - lastCtrlY : 0), currX + x, currY + y);\r\n      };\r\n      this.A = function(rx, ry, fi, fa, fs, x, y) {\r\n        if (isEqual(rx, 0) || isEqual(ry, 0)) {\r\n          this.addCommand(['line', true, true, x, y]);\r\n        } else {\r\n          fi = fi * (Math.PI / 180);\r\n          rx = Math.abs(rx);\r\n          ry = Math.abs(ry);\r\n          fa = 1 * !!fa;\r\n          fs = 1 * !!fs;\r\n          let x1 = Math.cos(fi) * (currX - x) / 2 + Math.sin(fi) * (currY - y) / 2,\r\n              y1 = Math.cos(fi) * (currY - y) / 2 - Math.sin(fi) * (currX - x) / 2,\r\n              lambda = (x1 * x1) / (rx * rx) + (y1 * y1) / (ry * ry);\r\n          if (lambda > 1) {\r\n            rx *= Math.sqrt(lambda);\r\n            ry *= Math.sqrt(lambda);\r\n          }\r\n          let r = Math.sqrt(Math.max(0, rx * rx * ry * ry - rx * rx * y1 * y1 - ry * ry * x1 * x1) / (rx * rx * y1 * y1 + ry * ry * x1 * x1)),\r\n              x2 = (fa === fs ? -1 : 1) * r * rx * y1 / ry,\r\n              y2 = (fa === fs ? 1 : -1) * r * ry * x1 / rx;\r\n          let cx = Math.cos(fi) * x2 - Math.sin(fi) * y2 + (currX + x) / 2,\r\n              cy = Math.sin(fi) * x2 + Math.cos(fi) * y2 + (currY + y) / 2,\r\n              th1 = Math.atan2((y1 - y2) / ry, (x1 - x2) / rx),\r\n              th2 = Math.atan2((-y1 - y2) / ry, (-x1 - x2) / rx);\r\n          if (fs === 0 && th2 - th1 > 0) {\r\n            th2 -= 2 * Math.PI;\r\n          } else if (fs === 1 && th2 - th1 < 0) {\r\n            th2 += 2 * Math.PI;\r\n          }\r\n          let segms = Math.ceil(Math.abs(th2 - th1) / (Math.PI / precision));\r\n          for (let i = 0; i < segms; i++) {\r\n            let th3 = th1 + i * (th2 - th1) / segms,\r\n                th4 = th1 + (i + 1) * (th2 - th1) / segms,\r\n                t = 4/3 * Math.tan((th4 - th3) / 4);\r\n            let c1x = cx + Math.cos(fi) * rx * (Math.cos(th3) - t * Math.sin(th3)) - Math.sin(fi) * ry * (Math.sin(th3) + t * Math.cos(th3)),\r\n                c1y = cy + Math.sin(fi) * rx * (Math.cos(th3) - t * Math.sin(th3)) + Math.cos(fi) * ry * (Math.sin(th3) + t * Math.cos(th3)),\r\n                c2x = cx + Math.cos(fi) * rx * (Math.cos(th4) + t * Math.sin(th4)) - Math.sin(fi) * ry * (Math.sin(th4) - t * Math.cos(th4)),\r\n                c2y = cy + Math.sin(fi) * rx * (Math.cos(th4) + t * Math.sin(th4)) + Math.cos(fi) * ry * (Math.sin(th4) - t * Math.cos(th4)),\r\n                endX = cx + Math.cos(fi) * rx * Math.cos(th4) - Math.sin(fi) * ry * Math.sin(th4),\r\n                endY = cy + Math.sin(fi) * rx * Math.cos(th4) + Math.cos(fi) * ry * Math.sin(th4);\r\n            this.addCommand(['curve', (i === 0), (i === segms - 1), c1x, c1y, c2x, c2y, endX, endY]);\r\n          }\r\n        }\r\n        lastCom = 'A';\r\n        return this;\r\n      };\r\n      this.a = function(rx, ry, fi, fa, fs, x, y) {\r\n        return this.A(rx, ry, fi, fa, fs, currX + x, currY + y);\r\n      };\r\n      this.path = function(d) {\r\n        let command, value, temp,\r\n            parser = new StringParser((d || '').trim());\r\n        while (command = parser.match(/^[astvzqmhlcASTVZQMHLC]/)) {\r\n          parser.matchSeparator();\r\n          let values = [];\r\n          while (value = (PathFlags[command + values.length] ? parser.match(/^[01]/) : parser.matchNumber())) {\r\n            parser.matchSeparator();\r\n            if (values.length === PathArguments[command]) {\r\n              this[command].apply(this, values);\r\n              values = [];\r\n              if (command === 'M') {command = 'L';}\r\n              else if (command === 'm') {command = 'l';}\r\n            }\r\n            values.push(Number(value));\r\n          }\r\n          if (values.length === PathArguments[command]) {\r\n            this[command].apply(this, values);\r\n          } else {\r\n            warningCallback('SvgPath: command ' + command + ' with ' + values.length + ' numbers'); return;\r\n          }\r\n        }\r\n        if (temp = parser.matchAll()) {\r\n          warningCallback('SvgPath: unexpected string ' + temp);\r\n        }\r\n        return this;\r\n      };\r\n      this.getBoundingBox = function() {\r\n        let bbox = [Infinity, Infinity, -Infinity, -Infinity];\r\n        function addBounds(bbox1) {\r\n          if (bbox1[0] < bbox[0]) {bbox[0] = bbox1[0];}\r\n          if (bbox1[2] > bbox[2]) {bbox[2] = bbox1[2];}\r\n          if (bbox1[1] < bbox[1]) {bbox[1] = bbox1[1];}\r\n          if (bbox1[3] > bbox[3]) {bbox[3] = bbox1[3];}\r\n        }\r\n        for (let i = 0; i < this.pathSegments.length; i++) {\r\n          addBounds(this.pathSegments[i].getBoundingBox());\r\n        }\r\n        if (bbox[0] === Infinity) {bbox[0] = 0;}\r\n        if (bbox[1] === Infinity) {bbox[1] = 0;}\r\n        if (bbox[2] === -Infinity) {bbox[2] = 0;}\r\n        if (bbox[3] === -Infinity) {bbox[3] = 0;}\r\n        return bbox;\r\n      };\r\n      this.getPointAtLength = function(l) {\r\n        if (l >= 0 && l <= this.totalLength) {\r\n          let temp;\r\n          for (let i = 0; i < this.pathSegments.length; i++) {\r\n            if (temp = this.pathSegments[i].getPointAtLength(l)) {\r\n              return temp;\r\n            }\r\n            l -= this.pathSegments[i].totalLength;\r\n          }\r\n          return this.endPoint;\r\n        }\r\n      };\r\n      this.transform = function(m) {\r\n        this.pathSegments = [];\r\n        this.startPoint = null;\r\n        this.endPoint = null;\r\n        this.totalLength = 0;\r\n        for (let i = 0; i < this.pathCommands.length; i++) {\r\n          let data = this.pathCommands.shift();\r\n          for (let j = 3; j < data.length; j+=2) {\r\n            let p = transformPoint([data[j], data[j + 1]], m)\r\n            data[j] = p[0];\r\n            data[j + 1] = p[1];\r\n          }\r\n          this.addCommand(data);\r\n        }\r\n        return this;        \r\n      };\r\n      this.mergeShape = function(shape) {\r\n        for (let i = 0; i < shape.pathCommands.length; i++) {\r\n          this.addCommand(shape.pathCommands[i].slice());\r\n        }\r\n        return this;\r\n      };\r\n      this.clone = function() {\r\n        return new SvgShape().mergeShape(this);\r\n      };\r\n      this.insertInDocument = function() {\r\n        for (let i = 0; i < this.pathCommands.length; i++) {\r\n          let command = this.pathCommands[i][0], values = this.pathCommands[i].slice(3);\r\n          switch(command) {\r\n            case 'move':  doc.moveTo(values[0], values[1]);  break;\r\n            case 'line':  doc.lineTo(values[0], values[1]);  break;\r\n            case 'curve':  doc.bezierCurveTo(values[0], values[1], values[2], values[3], values[4], values[5]);  break;\r\n            case 'close':  doc.closePath();  break;\r\n          }\r\n        }\r\n      };\r\n      this.getSubPaths = function() {\r\n        let subPaths = [], shape = new SvgShape();\r\n        for (let i = 0; i < this.pathCommands.length; i++) {\r\n          let data = this.pathCommands[i], command = this.pathCommands[i][0];\r\n          if (command === 'move' && i !== 0) {\r\n            subPaths.push(shape);\r\n            shape = new SvgShape();\r\n          }\r\n          shape.addCommand(data);\r\n        }\r\n        subPaths.push(shape);\r\n        return subPaths;\r\n      };\r\n      this.getMarkers = function() {\r\n        let markers = [], subPaths = this.getSubPaths();\r\n        for (let i = 0; i < subPaths.length; i++) {\r\n          let subPath = subPaths[i], subPathMarkers = [];\r\n          for (let j = 0; j < subPath.pathSegments.length; j++) {\r\n            let segment = subPath.pathSegments[j];\r\n            if (isNotEqual(segment.totalLength, 0) || j === 0 || j === subPath.pathSegments.length - 1) {\r\n              if (segment.hasStart) {\r\n                let startMarker = segment.getPointAtLength(0), prevEndMarker = subPathMarkers.pop();\r\n                if (prevEndMarker) {startMarker[2] = 0.5 * (prevEndMarker[2] + startMarker[2]);}\r\n                subPathMarkers.push(startMarker);\r\n              }\r\n              if (segment.hasEnd) {\r\n                let endMarker = segment.getPointAtLength(segment.totalLength);\r\n                subPathMarkers.push(endMarker);\r\n              }\r\n            }\r\n          }\r\n          markers = markers.concat(subPathMarkers);\r\n        }\r\n        return markers;\r\n      };\r\n    };\r\n\r\n    var SvgElem = function(obj, inherits) {\r\n      let styleCache = Object.create(null);\r\n      let childrenCache = null;\r\n      this.name = obj.nodeName;\r\n      this.isOuterElement = obj === svg || !obj.parentNode;\r\n      this.inherits = inherits || (!this.isOuterElement ? createSVGElement(obj.parentNode, null) : null);\r\n      this.stack = (this.inherits ? this.inherits.stack.concat(obj) : [obj]);\r\n      this.style = parseStyleAttr(typeof obj.getAttribute === 'function' && obj.getAttribute('style'));\r\n      this.css = useCSS ? getComputedStyle(obj) : getStyle(obj);\r\n      this.allowedChildren = [];\r\n      this.attr = function(key) {\r\n        if (typeof obj.getAttribute === 'function') {\r\n          return obj.getAttribute(key);\r\n        }\r\n      };\r\n      this.resolveUrl = function(value) {\r\n        let temp = (value || '').match(/^\\s*(?:url\\(\"(.*)#(.*)\"\\)|url\\('(.*)#(.*)'\\)|url\\((.*)#(.*)\\)|(.*)#(.*))\\s*$/) || [];\r\n        let file = temp[1] || temp[3] || temp[5] || temp[7],\r\n            id = temp[2] || temp[4] || temp[6] || temp[8];\r\n        if (id) {\r\n          if (!file) {\r\n            let svgObj = svg.getElementById(id);\r\n            if (svgObj) {\r\n              if (this.stack.indexOf(svgObj) === -1) {\r\n                return svgObj;\r\n              } else {\r\n                warningCallback('SVGtoPDF: loop of circular references for id \"' + id + '\"');\r\n                return;\r\n              }\r\n            }\r\n          }\r\n          if (documentCallback) {\r\n            let svgs = documentCache[file];\r\n            if (!svgs) {\r\n              svgs = documentCallback(file);\r\n              if (!isArrayLike(svgs)) {svgs = [svgs];}\r\n              for (let i = 0; i < svgs.length; i++) {\r\n                if (typeof svgs[i] === 'string') {svgs[i] = parseXml(svgs[i]);}\r\n              }\r\n              documentCache[file] = svgs;\r\n            }\r\n            for (let i = 0; i < svgs.length; i++) {\r\n              let svgObj = svgs[i].getElementById(id);\r\n              if (svgObj) {\r\n                if (this.stack.indexOf(svgObj) === -1) {\r\n                  return svgObj;\r\n                } else {\r\n                  warningCallback('SVGtoPDF: loop of circular references for id \"' + file + '#' + id + '\"');\r\n                  return;\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      };\r\n      this.computeUnits = function(value, unit, percent, isFontSize) {\r\n        if (unit === '%') {\r\n          return parseFloat(value) / 100 * (isFontSize || percent != null ? percent : this.getViewport());\r\n        } else if (unit === 'ex' || unit === 'em') {\r\n          return value * {'em':1, 'ex':0.5}[unit] * (isFontSize ? percent : this.get('font-size'));\r\n        } else {\r\n          return value * {'':1, 'px':1, 'pt':96/72, 'cm':96/2.54, 'mm':96/25.4, 'in':96, 'pc':96/6}[unit];\r\n        }\r\n      };\r\n      this.computeLength = function(value, percent, initial, isFontSize) {\r\n        let parser = new StringParser((value || '').trim()), temp1, temp2;\r\n        if (typeof (temp1 = parser.matchNumber()) === 'string' && typeof (temp2 = parser.matchLengthUnit()) === 'string' && !parser.matchAll()) {\r\n          return this.computeUnits(temp1, temp2, percent, isFontSize);\r\n        }\r\n        return initial;\r\n      };\r\n      this.computeLengthList = function(value, percent, strict) {\r\n        let parser = new StringParser((value || '').trim()), result = [], temp1, temp2;\r\n        while (typeof (temp1 = parser.matchNumber()) === 'string' && typeof (temp2 = parser.matchLengthUnit()) === 'string') {\r\n          result.push(this.computeUnits(temp1, temp2, percent));\r\n          parser.matchSeparator();\r\n        }\r\n        if (strict && parser.matchAll()) {return;}\r\n        return result;\r\n      };\r\n      this.getLength = function(key, percent, initial) {\r\n        return this.computeLength(this.attr(key), percent, initial);\r\n      };\r\n      this.getLengthList = function(key, percent) {\r\n        return this.computeLengthList(this.attr(key), percent);\r\n      };\r\n      this.getUrl = function(key) {\r\n        return this.resolveUrl(this.attr(key))\r\n      };\r\n      this.getNumberList = function(key) {\r\n        let parser = new StringParser((this.attr(key) || '').trim()), result = [], temp;\r\n        while (temp = parser.matchNumber()) {\r\n          result.push(Number(temp));\r\n          parser.matchSeparator();\r\n        }\r\n        result.error = parser.matchAll();\r\n        return result;\r\n      }\r\n      this.getViewbox = function(key, initial) {\r\n        let viewBox = this.getNumberList(key);\r\n        if (viewBox.length === 4 && viewBox[2] >= 0 && viewBox[3] >= 0) {return viewBox;}\r\n        return initial;\r\n      };\r\n      this.getPercent = function(key, initial) {\r\n        let value = this.attr(key);\r\n        let parser = new StringParser((value || '').trim()), temp1, temp2;\r\n        let number = parser.matchNumber();\r\n        if (!number) {return initial;}\r\n        if (parser.match('%')) {number *= 0.01;}\r\n        if (parser.matchAll()) {return initial;}\r\n        return Math.max(0, Math.min(1, number));\r\n      };\r\n      this.chooseValue = function(args) {\r\n        for (let i = 0; i < arguments.length; i++) {\r\n          if (arguments[i] != null && arguments[i] === arguments[i]) {return arguments[i];}\r\n        }\r\n        return arguments[arguments.length - 1];\r\n      };\r\n      this.get = function(key) {\r\n        if (styleCache[key] !== undefined) {return styleCache[key];}\r\n        let keyInfo = Properties[key] || {}, value, result;\r\n        for (let i = 0; i < 3; i++) {\r\n          switch (i) {\r\n            case 0:\r\n              if (key !== 'transform') { // the CSS transform behaves strangely\r\n                value = this.css[keyInfo.css || key];\r\n              }\r\n              break;\r\n            case 1:\r\n              value = this.style[key];\r\n              break;\r\n            case 2:\r\n              value = this.attr(key);\r\n              break;\r\n          }\r\n          if (value === 'inherit') {\r\n            result = (this.inherits ? this.inherits.get(key) : keyInfo.initial);\r\n            if (result != null) {return styleCache[key] = result;}\r\n          }\r\n          if (keyInfo.values != null) {\r\n            result = keyInfo.values[value];\r\n            if (result != null) {return styleCache[key] = result;}\r\n          }\r\n          if (value != null) {\r\n            let parsed;\r\n            switch (key) {\r\n              case 'font-size':\r\n                result = this.computeLength(value, this.inherits ? this.inherits.get(key) : keyInfo.initial, undefined, true);\r\n                break;\r\n              case 'baseline-shift':\r\n                result = this.computeLength(value, this.get('font-size'));\r\n                break;\r\n              case 'font-family':\r\n                result = value || undefined;\r\n                break;\r\n              case 'opacity': case 'stroke-opacity': case 'fill-opacity': case 'stop-opacity':\r\n                parsed = parseFloat(value);\r\n                if (!isNaN(parsed)) {\r\n                  result = Math.max(0, Math.min(1, parsed));\r\n                }\r\n                break;\r\n              case 'transform':\r\n                result = parseTranform(value);\r\n                break;\r\n              case 'stroke-dasharray':\r\n                if (value === 'none') {\r\n                  result = [];\r\n                } else if (parsed = this.computeLengthList(value, this.getViewport(), true)) {\r\n                  let sum = 0, error = false;\r\n                  for (let j = 0; j < parsed.length; j++) {\r\n                    if (parsed[j] < 0) {error = true;}\r\n                    sum += parsed[j];\r\n                  }\r\n                  if (!error) {\r\n                    if (parsed.length % 2 === 1) {\r\n                      parsed = parsed.concat(parsed);\r\n                    }\r\n                    result = (sum === 0 ? [] : parsed);\r\n                  }\r\n                }\r\n                break;\r\n              case 'color':\r\n                if (value === 'none' || value === 'transparent') {\r\n                  result = 'none';\r\n                } else {\r\n                  result = parseColor(value);\r\n                }\r\n                break;\r\n              case 'fill': case 'stroke':\r\n                if (value === 'none' || value === 'transparent') {\r\n                  result = 'none';\r\n                } else if (value === 'currentColor') {\r\n                  result = this.get('color');\r\n                } else if (parsed = parseColor(value)) {\r\n                  return parsed;\r\n                } else if (parsed = (value || '').split(' ')) {\r\n                  let object = this.resolveUrl(parsed[0]),\r\n                      fallbackColor = parseColor(parsed[1]);\r\n                  if (object == null) {\r\n                    result = fallbackColor;\r\n                  } else if (object.nodeName === 'linearGradient' || object.nodeName === 'radialGradient') {\r\n                    result = new SvgElemGradient(object, null, fallbackColor);\r\n                  } else if (object.nodeName === 'pattern') {\r\n                    result = new SvgElemPattern(object, null, fallbackColor);\r\n                  } else {\r\n                    result = fallbackColor;\r\n                  }\r\n                }\r\n                break;\r\n              case 'stop-color':\r\n                if (value === 'none' || value === 'transparent') {\r\n                  result = 'none';\r\n                } else if (value === 'currentColor') {\r\n                  result = this.get('color');\r\n                } else {\r\n                  result = parseColor(value);\r\n                }\r\n                break;\r\n              case 'marker-start': case 'marker-mid': case 'marker-end': case 'clip-path': case 'mask':\r\n                if (value === 'none') {\r\n                  result = 'none';\r\n                } else {\r\n                  result = this.resolveUrl(value);\r\n                }\r\n                break;\r\n              case 'stroke-width':\r\n                parsed = this.computeLength(value, this.getViewport());\r\n                if (parsed != null && parsed >= 0) {\r\n                  result = parsed;\r\n                }\r\n                break;\r\n              case 'stroke-miterlimit':\r\n                parsed = parseFloat(value);\r\n                if (parsed != null && parsed >= 1) {\r\n                  result = parsed;\r\n                }\r\n                break;\r\n              case 'word-spacing': case 'letter-spacing':\r\n                result = this.computeLength(value, this.getViewport());\r\n                break;\r\n              case 'stroke-dashoffset':\r\n                result = this.computeLength(value, this.getViewport());\r\n                if (result != null) {\r\n                  if (result < 0) { // fix for crbug.com/660850\r\n                    let dasharray = this.get('stroke-dasharray');\r\n                    for (let j = 0; j < dasharray.length; j++) {result += dasharray[j];}\r\n                  }\r\n                }\r\n                break;\r\n            }\r\n            if (result != null) {return styleCache[key] = result;}\r\n          }\r\n        }\r\n        return styleCache[key] = (keyInfo.inherit && this.inherits ? this.inherits.get(key) : keyInfo.initial);\r\n      };\r\n      this.getChildren = function() {\r\n        if (childrenCache != null) {return childrenCache;}\r\n        let children = [];\r\n        for (let i = 0; i < obj.childNodes.length; i++) {\r\n          let child = obj.childNodes[i];\r\n          if (!child.error && this.allowedChildren.indexOf(child.nodeName) !== -1) {\r\n            children.push(createSVGElement(child, this));\r\n          }\r\n        }\r\n        return childrenCache = children;\r\n      };\r\n      this.getParentVWidth = function() {\r\n        return (this.inherits ? this.inherits.getVWidth(): viewportWidth);\r\n      };\r\n      this.getParentVHeight = function() {\r\n        return (this.inherits ? this.inherits.getVHeight() : viewportHeight);\r\n      };\r\n      this.getParentViewport = function() {\r\n        return Math.sqrt(0.5 * this.getParentVWidth() * this.getParentVWidth() + 0.5 * this.getParentVHeight() * this.getParentVHeight());\r\n      };\r\n      this.getVWidth = function() {\r\n        return this.getParentVWidth();\r\n      };\r\n      this.getVHeight = function() {\r\n        return this.getParentVHeight();\r\n      };\r\n      this.getViewport = function() {\r\n        return Math.sqrt(0.5 * this.getVWidth() * this.getVWidth() + 0.5 * this.getVHeight() * this.getVHeight());\r\n      };\r\n      this.getBoundingBox = function() {\r\n        let shape = this.getBoundingShape();\r\n        return shape.getBoundingBox();\r\n      };\r\n    };\r\n\r\n    var SvgElemStylable = function(obj, inherits) {\r\n      SvgElem.call(this, obj, inherits);\r\n      this.transform = function() {\r\n        doc.transform.apply(doc, this.getTransformation());\r\n      };\r\n      this.clip = function() {\r\n        if (this.get('clip-path') !== 'none') {\r\n          let clipPath = new SvgElemClipPath(this.get('clip-path'), null);\r\n          clipPath.useMask(this.getBoundingBox());\r\n          return true;\r\n        }\r\n      };\r\n      this.mask = function() {\r\n        if (this.get('mask') !== 'none') {\r\n          let mask = new SvgElemMask(this.get('mask'), null);\r\n          mask.useMask(this.getBoundingBox());\r\n          return true;\r\n        }\r\n      };\r\n      this.getFill = function(isClip, isMask) {\r\n        let opacity = this.get('opacity'),\r\n            fill = this.get('fill'),\r\n            fillOpacity = this.get('fill-opacity');\r\n        if (isClip) {return DefaultColors.white;}\r\n        if (fill !== 'none' && opacity && fillOpacity) {\r\n          if (fill instanceof SvgElemGradient || fill instanceof SvgElemPattern) {\r\n            return fill.getPaint(this.getBoundingBox(), fillOpacity * opacity, isClip, isMask);\r\n          }\r\n          return opacityToColor(fill, fillOpacity * opacity, isMask);\r\n        }\r\n      };\r\n      this.getStroke = function(isClip, isMask) {\r\n        let opacity = this.get('opacity'),\r\n            stroke = this.get('stroke'),\r\n            strokeOpacity = this.get('stroke-opacity');\r\n        if (isClip || isEqual(this.get('stroke-width'), 0)) {return;}\r\n        if (stroke !== 'none' && opacity && strokeOpacity) {\r\n          if (stroke instanceof SvgElemGradient || stroke instanceof SvgElemPattern) {\r\n            return stroke.getPaint(this.getBoundingBox(), strokeOpacity * opacity, isClip, isMask);\r\n          }\r\n          return opacityToColor(stroke, strokeOpacity * opacity, isMask);\r\n        }\r\n      };\r\n    };\r\n\r\n    var SvgElemHasChildren = function(obj, inherits) {\r\n      SvgElemStylable.call(this, obj, inherits);\r\n      this.allowedChildren = ['use', 'g', 'a', 'svg', 'image', 'rect', 'circle', 'ellipse', 'line', 'polyline', 'polygon', 'path', 'text'];\r\n      this.getBoundingShape = function() {\r\n        let shape = new SvgShape(),\r\n            children = this.getChildren();\r\n        for (let i = 0; i < children.length; i++) {\r\n          if (children[i].get('display') !== 'none') {\r\n            if (typeof children[i].getBoundingShape === 'function') {\r\n              let childShape = children[i].getBoundingShape().clone();\r\n              if (typeof children[i].getTransformation === 'function') {\r\n                childShape.transform(children[i].getTransformation());\r\n              }\r\n              shape.mergeShape(childShape);\r\n            }\r\n          }\r\n        }\r\n        return shape;\r\n      };\r\n      this.drawChildren = function(isClip, isMask) {\r\n        let children = this.getChildren();\r\n        for (let i = 0; i < children.length; i++) {\r\n          if (children[i].get('display') !== 'none') {\r\n            if (typeof children[i].drawInDocument === 'function') {\r\n              children[i].drawInDocument(isClip, isMask);\r\n            }\r\n          }\r\n        }\r\n      };\r\n    };\r\n\r\n    var SvgElemContainer = function(obj, inherits) {\r\n      SvgElemHasChildren.call(this, obj, inherits);\r\n      this.drawContent = function(isClip, isMask) {\r\n        this.transform();\r\n        let clipped = this.clip(),\r\n            masked = this.mask(),\r\n            group;\r\n        if ((this.get('opacity') < 1 || clipped || masked) && !isClip) {\r\n          group = docBeginGroup(getPageBBox());\r\n        }\r\n        this.drawChildren(isClip, isMask);\r\n        if (group) {\r\n          docEndGroup(group);\r\n          doc.fillOpacity(this.get('opacity'));\r\n          docInsertGroup(group);\r\n        }\r\n      };\r\n    };\r\n\r\n    var SvgElemUse = function(obj, inherits) {\r\n      SvgElemContainer.call(this, obj, inherits);\r\n      let x = this.getLength('x', this.getVWidth(), 0),\r\n          y = this.getLength('y', this.getVHeight(), 0),\r\n          child = this.getUrl('href') || this.getUrl('xlink:href');\r\n      if (child) {child = createSVGElement(child, this);}\r\n      this.getChildren  = function() {\r\n        return child ? [child] : [];\r\n      };\r\n      this.drawInDocument = function(isClip, isMask) {\r\n        doc.save();\r\n        this.drawContent(isClip, isMask);\r\n        doc.restore();\r\n      };\r\n      this.getTransformation = function() {\r\n        return multiplyMatrix(this.get('transform'), [1, 0, 0, 1, x, y]);\r\n      };\r\n    };\r\n\r\n    var SvgElemSymbol = function(obj, inherits) {\r\n      SvgElemContainer.call(this, obj, inherits);\r\n      let width = this.getLength('width', this.getParentVWidth(), this.getParentVWidth()),\r\n          height = this.getLength('height', this.getParentVHeight(), this.getParentVHeight());\r\n      if (inherits instanceof SvgElemUse) {\r\n        width = inherits.getLength('width', inherits.getParentVWidth(), width);\r\n        height = inherits.getLength('height', inherits.getParentVHeight(), height);\r\n      }\r\n      let aspectRatio = (this.attr('preserveAspectRatio') || '').trim(),\r\n          viewBox = this.getViewbox('viewBox', [0, 0, width, height]);\r\n      this.getVWidth = function() {\r\n        return viewBox[2];\r\n      };\r\n      this.getVHeight = function() {\r\n        return viewBox[3];\r\n      };\r\n      this.drawInDocument = function(isClip, isMask) {\r\n        doc.save();\r\n        this.drawContent(isClip, isMask);\r\n        doc.restore();\r\n      };\r\n      this.getTransformation = function() {\r\n        return multiplyMatrix(parseAspectRatio(aspectRatio, width, height, viewBox[2], viewBox[3]), [1, 0, 0, 1, -viewBox[0], -viewBox[1]]);\r\n      };\r\n    };\r\n\r\n    var SvgElemGroup = function(obj, inherits) {\r\n      SvgElemContainer.call(this, obj, inherits);\r\n      this.drawInDocument = function(isClip, isMask) {\r\n        doc.save();\r\n        if (this.link && !isClip && !isMask) {this.addLink();}\r\n        this.drawContent(isClip, isMask);\r\n        doc.restore();\r\n      };\r\n      this.getTransformation = function() {\r\n        return this.get('transform');\r\n      };\r\n    };\r\n\r\n    var SvgElemLink = function(obj, inherits) {\r\n      if (inherits && inherits.isText) {\r\n        SvgElemTspan.call(this, obj, inherits);\r\n        this.allowedChildren = ['textPath', 'tspan', '#text', '#cdata-section', 'a'];\r\n      } else {\r\n        SvgElemGroup.call(this, obj, inherits);\r\n      }\r\n      this.link = this.attr('href') || this.attr('xlink:href');\r\n      this.addLink = function() {\r\n        if (this.link.match(/^(?:[a-z][a-z0-9+.-]*:|\\/\\/)?/i) && this.getChildren().length) {\r\n          let bbox = this.getBoundingShape().transform(getGlobalMatrix()).getBoundingBox();\r\n          docInsertLink(bbox[0], bbox[1], bbox[2], bbox[3], this.link);\r\n        }\r\n      }\r\n    };\r\n\r\n    var SvgElemSvg = function(obj, inherits) {\r\n      SvgElemContainer.call(this, obj, inherits);\r\n      let width = this.getLength('width', this.getParentVWidth(), this.getParentVWidth()),\r\n          height = this.getLength('height', this.getParentVHeight(), this.getParentVHeight()),\r\n          x = this.getLength('x', this.getParentVWidth(), 0),\r\n          y = this.getLength('y', this.getParentVHeight(), 0);\r\n      if (inherits instanceof SvgElemUse) {\r\n        width = inherits.getLength('width', inherits.getParentVWidth(), width);\r\n        height = inherits.getLength('height', inherits.getParentVHeight(), height);\r\n      }\r\n      let aspectRatio = this.attr('preserveAspectRatio'),\r\n          viewBox = this.getViewbox('viewBox', [0, 0, width, height]);\r\n      if (this.isOuterElement && preserveAspectRatio) {\r\n        x = y = 0;\r\n        width = viewportWidth;\r\n        height = viewportHeight;\r\n        aspectRatio = preserveAspectRatio;\r\n      }\r\n      this.getVWidth = function() {\r\n        return viewBox[2];\r\n      };\r\n      this.getVHeight = function() {\r\n        return viewBox[3];\r\n      };\r\n      this.drawInDocument = function(isClip, isMask) {\r\n        doc.save();\r\n        if (this.get('overflow') === 'hidden') {\r\n          new SvgShape().M(x, y).L(x + width, y).L(x + width, y + height).L(x, y + height).Z()\r\n                        .transform(this.get('transform'))\r\n                        .insertInDocument();\r\n          doc.clip();\r\n        }\r\n        this.drawContent(isClip, isMask);\r\n        doc.restore();\r\n      };\r\n      this.getTransformation = function() {\r\n        return multiplyMatrix(\r\n          this.get('transform'),\r\n          [1, 0, 0, 1, x, y],\r\n          parseAspectRatio(aspectRatio, width, height, viewBox[2], viewBox[3]),\r\n          [1, 0, 0, 1, -viewBox[0], -viewBox[1]]\r\n        );\r\n      };\r\n    };\r\n\r\n    var SVGElemImage = function(obj, inherits) {\r\n      SvgElemStylable.call(this, obj, inherits);\r\n      let link = imageCallback(this.attr('href') || this.attr('xlink:href') || ''),\r\n          x = this.getLength('x', this.getVWidth(), 0),\r\n          y = this.getLength('y', this.getVHeight(), 0),\r\n          width = this.getLength('width', this.getVWidth(), 'auto'),\r\n          height = this.getLength('height', this.getVHeight(), 'auto'),\r\n          image;\r\n      try {\r\n        image = doc.openImage(link);\r\n      } catch(e) {\r\n        warningCallback('SVGElemImage: failed to open image \"' + link + '\" in PDFKit');\r\n      }\r\n      if (image) {\r\n        if (width === 'auto' && height !== 'auto') {\r\n          width = height * image.width / image.height;\r\n        } else if (height === 'auto' && width !== 'auto') {\r\n          height = width * image.height / image.width;\r\n        } else if (width === 'auto' && height === 'auto') {\r\n          width = image.width;\r\n          height = image.height;\r\n        }\r\n      }\r\n      if (width === 'auto' || width < 0) {width = 0;}\r\n      if (height === 'auto' || height < 0) {height = 0;}\r\n      this.getTransformation = function() {\r\n        return this.get('transform');\r\n      };\r\n      this.getBoundingShape = function() {\r\n        return new SvgShape().M(x, y).L(x + width, y).M(x + width, y + height).L(x, y + height);\r\n      };\r\n      this.drawInDocument = function(isClip, isMask) {\r\n        if (this.get('visibility') === 'hidden' || !image) {return;}\r\n        doc.save();\r\n        this.transform();\r\n        if (this.get('overflow') === 'hidden') {\r\n          doc.rect(x, y, width, height).clip();\r\n        }\r\n        this.clip();\r\n        this.mask();\r\n        doc.translate(x, y);\r\n        doc.transform.apply(doc, parseAspectRatio(this.attr('preserveAspectRatio'), width, height, image ? image.width : width, image ? image.height : height));\r\n        if (!isClip) {\r\n          doc.fillOpacity(this.get('opacity'));\r\n          doc.image(image, 0, 0);\r\n        } else {\r\n          doc.rect(0, 0, image.width, image.height);\r\n          docFillColor(DefaultColors.white).fill();\r\n        }\r\n        doc.restore();\r\n      };\r\n    };\r\n\r\n    var SvgElemPattern = function(obj, inherits, fallback) {\r\n      SvgElemHasChildren.call(this, obj, inherits);\r\n      this.ref = (function() {\r\n        let ref = this.getUrl('href') || this.getUrl('xlink:href');\r\n        if (ref && ref.nodeName === obj.nodeName) {\r\n          return new SvgElemPattern(ref, inherits, fallback);\r\n        }\r\n      }).call(this);\r\n      let _attr = this.attr;\r\n      this.attr = function(key) {\r\n        let attr = _attr.call(this, key);\r\n        if (attr != null || key === 'href' || key === 'xlink:href') {return attr;}\r\n        return this.ref ? this.ref.attr(key) : null;\r\n      };\r\n      let _getChildren = this.getChildren;\r\n      this.getChildren = function() {\r\n        let children = _getChildren.call(this);\r\n        if (children.length > 0) {return children;}\r\n        return this.ref ? this.ref.getChildren() : [];\r\n      };\r\n      this.getPaint = function(bBox, gOpacity, isClip, isMask) {\r\n        let bBoxUnitsPattern = (this.attr('patternUnits') !== 'userSpaceOnUse'),\r\n            bBoxUnitsContent = (this.attr('patternContentUnits') === 'objectBoundingBox'),\r\n            x = this.getLength('x', (bBoxUnitsPattern ? 1 : this.getParentVWidth()), 0),\r\n            y = this.getLength('y', (bBoxUnitsPattern ? 1 : this.getParentVHeight()), 0),\r\n            width = this.getLength('width', (bBoxUnitsPattern ? 1 : this.getParentVWidth()), 0),\r\n            height = this.getLength('height', (bBoxUnitsPattern ? 1 : this.getParentVHeight()), 0);\r\n        if (bBoxUnitsContent && !bBoxUnitsPattern) { // Use the same units for pattern & pattern content\r\n          x = (x - bBox[0]) / (bBox[2] - bBox[0]) || 0;\r\n          y = (y - bBox[1]) / (bBox[3] - bBox[1]) || 0;\r\n          width = width / (bBox[2] - bBox[0]) || 0;\r\n          height = height / (bBox[3] - bBox[1]) || 0;\r\n        } else if (!bBoxUnitsContent && bBoxUnitsPattern) {\r\n          x = bBox[0] + x * (bBox[2] - bBox[0]);\r\n          y = bBox[1] + y * (bBox[3] - bBox[1]);\r\n          width = width * (bBox[2] - bBox[0]);\r\n          height = height * (bBox[3] - bBox[1]);\r\n        }\r\n        let viewBox = this.getViewbox('viewBox', [0, 0, width, height]),\r\n            aspectRatio = (this.attr('preserveAspectRatio') || '').trim(),\r\n            aspectRatioMatrix = multiplyMatrix(\r\n              parseAspectRatio(aspectRatio, width, height, viewBox[2], viewBox[3], 0),\r\n              [1, 0, 0, 1, -viewBox[0], -viewBox[1]]\r\n            ),\r\n            matrix = parseTranform(this.attr('patternTransform'));\r\n        if (bBoxUnitsContent) {\r\n          matrix = multiplyMatrix([bBox[2] - bBox[0], 0, 0, bBox[3] - bBox[1], bBox[0], bBox[1]], matrix);\r\n        }\r\n        matrix = multiplyMatrix(matrix, [1, 0, 0, 1, x, y]);\r\n        if ((matrix = validateMatrix(matrix)) && (aspectRatioMatrix = validateMatrix(aspectRatioMatrix)) && (width = validateNumber(width)) && (height = validateNumber(height))) {\r\n          let group = docBeginGroup([0, 0, width, height]);\r\n          doc.transform.apply(doc, aspectRatioMatrix);\r\n          this.drawChildren(isClip, isMask);\r\n          docEndGroup(group);\r\n          return [docCreatePattern(group, width, height, matrix), gOpacity];\r\n        } else {\r\n          return fallback ? [fallback[0], fallback[1] * gOpacity] : undefined;\r\n        }\r\n      };\r\n      this.getVWidth = function() {\r\n        let bBoxUnitsPattern = (this.attr('patternUnits') !== 'userSpaceOnUse'),\r\n            width = this.getLength('width', (bBoxUnitsPattern ? 1 : this.getParentVWidth()), 0);\r\n        return this.getViewbox('viewBox', [0, 0, width, 0])[2];\r\n      };\r\n      this.getVHeight = function() {\r\n        let bBoxUnitsPattern = (this.attr('patternUnits') !== 'userSpaceOnUse'),\r\n            height = this.getLength('height', (bBoxUnitsPattern ? 1 : this.getParentVHeight()), 0);\r\n        return this.getViewbox('viewBox', [0, 0, 0, height])[3];\r\n      };\r\n    };\r\n\r\n    var SvgElemGradient = function(obj, inherits, fallback) {\r\n      SvgElem.call(this, obj, inherits);\r\n      this.allowedChildren = ['stop'];\r\n      this.ref = (function() {\r\n        let ref = this.getUrl('href') || this.getUrl('xlink:href');\r\n        if (ref && ref.nodeName === obj.nodeName) {\r\n          return new SvgElemGradient(ref, inherits, fallback);\r\n        }\r\n      }).call(this);\r\n      let _attr = this.attr;\r\n      this.attr = function(key) {\r\n        let attr = _attr.call(this, key);\r\n        if (attr != null || key === 'href' || key === 'xlink:href') {return attr;}\r\n        return this.ref ? this.ref.attr(key) : null;\r\n      };\r\n      let _getChildren = this.getChildren;\r\n      this.getChildren = function() {\r\n        let children = _getChildren.call(this);\r\n        if (children.length > 0) {return children;}\r\n        return this.ref ? this.ref.getChildren() : [];\r\n      };\r\n      this.getPaint = function(bBox, gOpacity, isClip, isMask) {\r\n        let children = this.getChildren();\r\n        if (children.length === 0) {return;}\r\n        if (children.length === 1) {\r\n          let child = children[0],\r\n              stopColor = child.get('stop-color');\r\n          if (stopColor === 'none') {return;}\r\n          return opacityToColor(stopColor, child.get('stop-opacity') * gOpacity, isMask);\r\n        }\r\n        let bBoxUnits = (this.attr('gradientUnits') !== 'userSpaceOnUse'),\r\n            matrix = parseTranform(this.attr('gradientTransform')),\r\n            spread = this.attr('spreadMethod'),\r\n            grad,\r\n            x1, x2, y1, y2, r2,\r\n            nAfter = 0,\r\n            nBefore = 0,\r\n            nTotal = 1;\r\n        if (bBoxUnits) {\r\n          matrix = multiplyMatrix([bBox[2] - bBox[0], 0, 0, bBox[3] - bBox[1], bBox[0], bBox[1]], matrix);\r\n        }\r\n        if (matrix = validateMatrix(matrix)) {\r\n          if (this.name === 'linearGradient') {\r\n            x1 = this.getLength('x1', (bBoxUnits ? 1 : this.getVWidth()), 0);\r\n            x2 = this.getLength('x2', (bBoxUnits ? 1 : this.getVWidth()), (bBoxUnits ? 1 : this.getVWidth()));\r\n            y1 = this.getLength('y1', (bBoxUnits ? 1 : this.getVHeight()), 0);\r\n            y2 = this.getLength('y2', (bBoxUnits ? 1 : this.getVHeight()), 0);\r\n          } else {\r\n            x2 = this.getLength('cx', (bBoxUnits ? 1 : this.getVWidth()), (bBoxUnits ? 0.5 : 0.5 * this.getVWidth()));\r\n            y2 = this.getLength('cy', (bBoxUnits ? 1 : this.getVHeight()), (bBoxUnits ? 0.5 : 0.5 * this.getVHeight()));\r\n            r2 = this.getLength('r', (bBoxUnits ? 1 : this.getViewport()), (bBoxUnits ? 0.5 : 0.5 * this.getViewport()));\r\n            x1 = this.getLength('fx', (bBoxUnits ? 1 : this.getVWidth()), x2);\r\n            y1 = this.getLength('fy', (bBoxUnits ? 1 : this.getVHeight()), y2);\r\n            if (r2 < 0) {\r\n              warningCallback('SvgElemGradient: negative r value');\r\n            }\r\n            let d = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)),\r\n                multiplier = 1;\r\n            if (d > r2) { // according to specification\r\n              multiplier = r2 / d;\r\n              x1 = x2 + (x1 - x2) * multiplier;\r\n              y1 = y2 + (y1 - y2) * multiplier;\r\n            }\r\n            r2 = Math.max(r2, d * multiplier * (1 + 1e-6)); // fix for edge-case gradients see issue #84\r\n          }\r\n          if (spread === 'reflect' || spread === 'repeat') {\r\n            let inv = inverseMatrix(matrix),\r\n                corner1 = transformPoint([bBox[0], bBox[1]], inv),\r\n                corner2 = transformPoint([bBox[2], bBox[1]], inv),\r\n                corner3 = transformPoint([bBox[2], bBox[3]], inv),\r\n                corner4 = transformPoint([bBox[0], bBox[3]], inv);\r\n            if (this.name === 'linearGradient') { // See file 'gradient-repeat-maths.png'\r\n              nAfter  = Math.max((corner1[0] - x2) * (x2 - x1) + (corner1[1] - y2) * (y2 - y1),\r\n                                 (corner2[0] - x2) * (x2 - x1) + (corner2[1] - y2) * (y2 - y1),\r\n                                 (corner3[0] - x2) * (x2 - x1) + (corner3[1] - y2) * (y2 - y1),\r\n                                 (corner4[0] - x2) * (x2 - x1) + (corner4[1] - y2) * (y2 - y1))\r\n                                / (Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\r\n              nBefore = Math.max((corner1[0] - x1) * (x1 - x2) + (corner1[1] - y1) * (y1 - y2),\r\n                                 (corner2[0] - x1) * (x1 - x2) + (corner2[1] - y1) * (y1 - y2),\r\n                                 (corner3[0] - x1) * (x1 - x2) + (corner3[1] - y1) * (y1 - y2),\r\n                                 (corner4[0] - x1) * (x1 - x2) + (corner4[1] - y1) * (y1 - y2))\r\n                                / (Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\r\n            } else {\r\n              nAfter  = Math.sqrt(Math.max(Math.pow(corner1[0] - x2, 2) + Math.pow(corner1[1] - y2, 2),\r\n                                           Math.pow(corner2[0] - x2, 2) + Math.pow(corner2[1] - y2, 2),\r\n                                           Math.pow(corner3[0] - x2, 2) + Math.pow(corner3[1] - y2, 2),\r\n                                           Math.pow(corner4[0] - x2, 2) + Math.pow(corner4[1] - y2, 2))) / r2 - 1;\r\n            }\r\n            nAfter = Math.ceil(nAfter + 0.5); // Add a little more because the stroke can extend outside of the bounding box\r\n            nBefore = Math.ceil(nBefore + 0.5);\r\n            nTotal = nBefore + 1 + nAfter; // How many times the gradient needs to be repeated to fill the object bounding box\r\n          }\r\n          if (this.name === 'linearGradient') {\r\n            grad = doc.linearGradient(x1 - nBefore * (x2 - x1), y1 - nBefore * (y2 - y1), x2 + nAfter * (x2 - x1), y2 + nAfter * (y2 - y1));\r\n          } else {\r\n            grad = doc.radialGradient(x1, y1, 0, x2, y2, r2 + nAfter * r2);\r\n          }\r\n          for (let n = 0; n < nTotal; n++) {\r\n            let offset = 0,\r\n                inOrder = (spread !== 'reflect' || (n - nBefore) % 2 === 0);\r\n            for (let i = 0; i < children.length; i++) {\r\n              let child = children[inOrder ? i : children.length - 1 - i],\r\n                  stopColor = child.get('stop-color');\r\n              if (stopColor === 'none') {stopColor = DefaultColors.transparent;}\r\n              stopColor = opacityToColor(stopColor, child.get('stop-opacity') * gOpacity, isMask);\r\n              offset = Math.max(offset, inOrder ? child.getPercent('offset', 0) : 1 - child.getPercent('offset', 0));\r\n              if (i === 0 && stopColor[0].length === 4) {grad._colorSpace = 'DeviceCMYK';} // Fix until PR #763 is merged into PDFKit\r\n              if (i === 0 && offset > 0) {\r\n                grad.stop((n + 0) / nTotal, stopColor[0], stopColor[1]);\r\n              }\r\n              grad.stop((n + offset) / (nAfter + nBefore + 1), stopColor[0], stopColor[1]);\r\n              if (i === children.length - 1 && offset < 1) {\r\n                grad.stop((n + 1) / nTotal, stopColor[0], stopColor[1]);\r\n              }\r\n            }\r\n          }\r\n          grad.setTransform.apply(grad, matrix);\r\n          return [grad, 1];\r\n        } else {\r\n          return fallback ? [fallback[0], fallback[1] * gOpacity] : undefined;\r\n        }\r\n      }\r\n    };\r\n\r\n    var SvgElemBasicShape = function(obj, inherits) {\r\n      SvgElemStylable.call(this, obj, inherits);\r\n      this.dashScale = 1;\r\n      this.getBoundingShape = function() {\r\n        return this.shape;\r\n      };\r\n      this.getTransformation = function() {\r\n        return this.get('transform');\r\n      };\r\n      this.drawInDocument = function(isClip, isMask) {\r\n        if (this.get('visibility') === 'hidden' || !this.shape) {return;}\r\n        doc.save();\r\n        this.transform();\r\n        this.clip();\r\n        if (!isClip) {\r\n          let masked = this.mask(),\r\n              group;\r\n          if (masked) {\r\n            group = docBeginGroup(getPageBBox());\r\n          }\r\n          let subPaths = this.shape.getSubPaths(),\r\n              fill = this.getFill(isClip, isMask),\r\n              stroke = this.getStroke(isClip, isMask),\r\n              lineWidth = this.get('stroke-width'),\r\n              lineCap = this.get('stroke-linecap');\r\n          if (fill || stroke) {\r\n            if (fill) {\r\n              docFillColor(fill);\r\n            }\r\n            if (stroke) {\r\n              for (let j = 0; j < subPaths.length; j++) {\r\n                if (isEqual(subPaths[j].totalLength, 0)) {\r\n                  if ((lineCap === 'square' || lineCap === 'round') && lineWidth > 0) {\r\n                    if (subPaths[j].startPoint && subPaths[j].startPoint.length > 1) {\r\n                      let x = subPaths[j].startPoint[0],\r\n                          y = subPaths[j].startPoint[1];\r\n                      docFillColor(stroke);\r\n                      if (lineCap === 'square') {\r\n                        doc.rect(x - 0.5 * lineWidth, y - 0.5 * lineWidth, lineWidth, lineWidth);\r\n                      } else if (lineCap === 'round') {\r\n                        doc.circle(x, y, 0.5 * lineWidth);\r\n                      }\r\n                      doc.fill();\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n              let dashArray = this.get('stroke-dasharray'),\r\n                  dashOffset = this.get('stroke-dashoffset');\r\n              if (isNotEqual(this.dashScale, 1)) {\r\n                for (let j = 0; j < dashArray.length; j++) {\r\n                  dashArray[j] *= this.dashScale;\r\n                }\r\n                dashOffset *= this.dashScale;\r\n              }\r\n              docStrokeColor(stroke);\r\n              doc.lineWidth(lineWidth)\r\n                 .miterLimit(this.get('stroke-miterlimit'))\r\n                 .lineJoin(this.get('stroke-linejoin'))\r\n                 .lineCap(lineCap)\r\n                 .dash(dashArray, {phase: dashOffset});\r\n            }\r\n            for (let j = 0; j < subPaths.length; j++) {\r\n              if (subPaths[j].totalLength > 0) {\r\n                subPaths[j].insertInDocument();\r\n              }\r\n            }\r\n            if (fill && stroke) {\r\n              doc.fillAndStroke(this.get('fill-rule'));\r\n            } else if (fill) {\r\n              doc.fill(this.get('fill-rule'));\r\n            } else if (stroke) {\r\n              doc.stroke();\r\n            }\r\n          }\r\n          let markerStart = this.get('marker-start'),\r\n              markerMid = this.get('marker-mid'),\r\n              markerEnd = this.get('marker-end');\r\n          if (markerStart !== 'none' || markerMid !== 'none' || markerEnd !== 'none') {\r\n            let markersPos = this.shape.getMarkers();\r\n            if (markerStart !== 'none') {\r\n              let marker = new SvgElemMarker(markerStart, null);\r\n              marker.drawMarker(false, isMask, markersPos[0], lineWidth);\r\n            }\r\n            if (markerMid !== 'none') {\r\n              for (let i = 1; i < markersPos.length - 1; i++) {\r\n                let marker = new SvgElemMarker(markerMid, null);\r\n                marker.drawMarker(false, isMask, markersPos[i], lineWidth);\r\n              }\r\n            }\r\n            if (markerEnd !== 'none') {\r\n              let marker = new SvgElemMarker(markerEnd, null);\r\n              marker.drawMarker(false, isMask, markersPos[markersPos.length - 1], lineWidth);\r\n            }\r\n          }\r\n          if (group) {\r\n            docEndGroup(group);\r\n            docInsertGroup(group);\r\n          }\r\n        } else {\r\n          this.shape.insertInDocument();\r\n          docFillColor(DefaultColors.white);\r\n          doc.fill(this.get('clip-rule'));\r\n        }\r\n        doc.restore();\r\n      };\r\n    };\r\n\r\n    var SvgElemRect = function(obj, inherits) {\r\n      SvgElemBasicShape.call(this, obj, inherits);\r\n      let x = this.getLength('x', this.getVWidth(), 0),\r\n          y = this.getLength('y', this.getVHeight(), 0),\r\n          w = this.getLength('width', this.getVWidth(), 0),\r\n          h = this.getLength('height', this.getVHeight(), 0),\r\n          rx = this.getLength('rx', this.getVWidth()),\r\n          ry = this.getLength('ry', this.getVHeight());\r\n      if (rx === undefined && ry === undefined) {rx = ry = 0;}\r\n      else if (rx === undefined && ry !== undefined) {rx = ry;}\r\n      else if (rx !== undefined && ry === undefined) {ry = rx;}\r\n      if (w > 0 && h > 0) {\r\n        if (rx && ry) {\r\n          rx = Math.min(rx, 0.5 * w);\r\n          ry = Math.min(ry, 0.5 * h);\r\n          this.shape = new SvgShape().M(x + rx, y).L(x + w - rx, y).A(rx, ry, 0, 0, 1, x + w, y + ry)\r\n                            .L(x + w, y + h - ry).A(rx, ry, 0, 0, 1, x + w - rx, y + h).L(x + rx, y + h)\r\n                            .A(rx, ry, 0, 0, 1, x, y + h - ry).L(x, y + ry).A(rx, ry, 0, 0, 1, x + rx, y).Z();\r\n        } else {\r\n          this.shape = new SvgShape().M(x, y).L(x + w, y).L(x + w, y + h).L(x, y + h).Z();\r\n        }\r\n      } else {\r\n        this.shape = new SvgShape();\r\n      }\r\n    };\r\n\r\n    var SvgElemCircle = function(obj, inherits) {\r\n      SvgElemBasicShape.call(this, obj, inherits);\r\n      let cx = this.getLength('cx', this.getVWidth(), 0),\r\n          cy = this.getLength('cy', this.getVHeight(), 0),\r\n          r = this.getLength('r', this.getViewport(), 0);\r\n      if (r > 0) {\r\n        this.shape = new SvgShape().M(cx + r, cy).A(r, r, 0, 0, 1, cx - r, cy).A(r, r, 0, 0, 1, cx + r, cy).Z();\r\n      } else {\r\n        this.shape = new SvgShape();\r\n      }\r\n    };\r\n\r\n    var SvgElemEllipse = function(obj, inherits) {\r\n      SvgElemBasicShape.call(this, obj, inherits);\r\n      let cx = this.getLength('cx', this.getVWidth(), 0),\r\n          cy = this.getLength('cy', this.getVHeight(), 0),\r\n          rx = this.getLength('rx', this.getVWidth(), 0),\r\n          ry = this.getLength('ry', this.getVHeight(), 0);\r\n      if (rx > 0 && ry > 0) {\r\n        this.shape = new SvgShape().M(cx + rx, cy).A(rx, ry, 0, 0, 1, cx - rx, cy).A(rx, ry, 0, 0, 1, cx + rx, cy).Z();\r\n      } else {\r\n        this.shape = new SvgShape();\r\n      }\r\n    };\r\n\r\n    var SvgElemLine = function(obj, inherits) {\r\n      SvgElemBasicShape.call(this, obj, inherits);\r\n      let x1 = this.getLength('x1', this.getVWidth(), 0),\r\n          y1 = this.getLength('y1', this.getVHeight(), 0),\r\n          x2 = this.getLength('x2', this.getVWidth(), 0),\r\n          y2 = this.getLength('y2', this.getVHeight(), 0);\r\n      this.shape = new SvgShape().M(x1, y1).L(x2, y2);\r\n    };\r\n\r\n    var SvgElemPolyline = function(obj, inherits) {\r\n      SvgElemBasicShape.call(this, obj, inherits);\r\n      let points = this.getNumberList('points');\r\n      this.shape = new SvgShape();\r\n      for (let i = 0; i < points.length - 1; i += 2) {\r\n        if (i === 0) {\r\n          this.shape.M(points[i], points[i+1]);\r\n        } else {\r\n          this.shape.L(points[i], points[i+1]);\r\n        }\r\n      }\r\n      if (points.error) {warningCallback('SvgElemPolygon: unexpected string ' + points.error);}\r\n      if (points.length % 2 === 1) {warningCallback('SvgElemPolyline: uneven number of coordinates');}\r\n    };\r\n\r\n    var SvgElemPolygon = function(obj, inherits) {\r\n      SvgElemBasicShape.call(this, obj, inherits);\r\n      let points = this.getNumberList('points');\r\n      this.shape = new SvgShape();\r\n      for (let i = 0; i < points.length - 1; i += 2) {\r\n        if (i === 0) {\r\n          this.shape.M(points[i], points[i+1]);\r\n        } else {\r\n          this.shape.L(points[i], points[i+1]);\r\n        }\r\n      }\r\n      this.shape.Z();\r\n      if (points.error) {warningCallback('SvgElemPolygon: unexpected string ' + points.error);}\r\n      if (points.length % 2 === 1) {warningCallback('SvgElemPolygon: uneven number of coordinates');}\r\n    };\r\n\r\n    var SvgElemPath = function(obj, inherits) {\r\n      SvgElemBasicShape.call(this, obj, inherits);\r\n      this.shape = new SvgShape().path(this.attr('d'));\r\n      let pathLength = this.getLength('pathLength', this.getViewport());\r\n      this.pathLength = pathLength > 0 ? pathLength : undefined;\r\n      this.dashScale = (this.pathLength !== undefined ? this.shape.totalLength / this.pathLength : 1);\r\n    };\r\n\r\n    var SvgElemMarker = function(obj, inherits) {\r\n      SvgElemHasChildren.call(this, obj, inherits);\r\n      let width = this.getLength('markerWidth', this.getParentVWidth(), 3),\r\n          height = this.getLength('markerHeight', this.getParentVHeight(), 3),\r\n          viewBox = this.getViewbox('viewBox', [0, 0, width, height]);\r\n      this.getVWidth = function() {\r\n        return viewBox[2];\r\n      };\r\n      this.getVHeight = function() {\r\n        return viewBox[3];\r\n      };\r\n      this.drawMarker = function(isClip, isMask, posArray, strokeWidth) {\r\n        doc.save();\r\n        let orient = this.attr('orient'),\r\n            units = this.attr('markerUnits'),\r\n            rotate = (orient === 'auto' ? posArray[2] : (parseFloat(orient) || 0) * Math.PI / 180),\r\n            scale = (units === 'userSpaceOnUse' ? 1 : strokeWidth);\r\n        doc.transform(Math.cos(rotate) * scale, Math.sin(rotate) * scale, -Math.sin(rotate) * scale, Math.cos(rotate) * scale, posArray[0], posArray[1]);\r\n        let refX = this.getLength('refX', this.getVWidth(), 0),\r\n            refY = this.getLength('refY', this.getVHeight(), 0),\r\n            aspectRatioMatrix = parseAspectRatio(this.attr('preserveAspectRatio'), width, height, viewBox[2], viewBox[3], 0.5);\r\n        if (this.get('overflow') === 'hidden') {\r\n          doc.rect(aspectRatioMatrix[0] * (viewBox[0] + viewBox[2] / 2 - refX) - width / 2, aspectRatioMatrix[3] * (viewBox[1] + viewBox[3] / 2 - refY) - height / 2, width, height).clip();\r\n        }\r\n        doc.transform.apply(doc, aspectRatioMatrix);\r\n        doc.translate(-refX, -refY);\r\n        let group;\r\n        if (this.get('opacity') < 1 && !isClip) {\r\n          group = docBeginGroup(getPageBBox());\r\n        }\r\n        this.drawChildren(isClip, isMask);\r\n        if (group) {\r\n          docEndGroup(group);\r\n          doc.fillOpacity(this.get('opacity'));\r\n          docInsertGroup(group);\r\n        }\r\n        doc.restore();\r\n      };\r\n    };\r\n\r\n    var SvgElemClipPath = function(obj, inherits) {\r\n      SvgElemHasChildren.call(this, obj, inherits);\r\n      this.useMask = function(bBox) {\r\n        let group = docBeginGroup(getPageBBox());\r\n        doc.save();\r\n        if (this.attr('clipPathUnits') === 'objectBoundingBox') {\r\n          doc.transform(bBox[2] - bBox[0], 0, 0, bBox[3] - bBox[1], bBox[0], bBox[1]);\r\n        }\r\n        this.clip();\r\n        this.drawChildren(true, false);\r\n        doc.restore();\r\n        docEndGroup(group);\r\n        docApplyMask(group, true);\r\n      };\r\n    };\r\n\r\n    var SvgElemMask = function(obj, inherits) {\r\n      SvgElemHasChildren.call(this, obj, inherits);\r\n      this.useMask = function(bBox) {\r\n        let group = docBeginGroup(getPageBBox());\r\n        doc.save();\r\n        let x, y, w, h;\r\n        if (this.attr('maskUnits') === 'userSpaceOnUse') {\r\n          x = this.getLength('x', this.getVWidth(), -0.1 * (bBox[2] - bBox[0]) + bBox[0]);\r\n          y = this.getLength('y', this.getVHeight(), -0.1 * (bBox[3] - bBox[1]) + bBox[1]);\r\n          w = this.getLength('width', this.getVWidth(), 1.2 * (bBox[2] - bBox[0]));\r\n          h = this.getLength('height', this.getVHeight(), 1.2 * (bBox[3] - bBox[1]));\r\n        } else {\r\n          x = this.getLength('x', this.getVWidth(), -0.1) * (bBox[2] - bBox[0]) + bBox[0];\r\n          y = this.getLength('y', this.getVHeight(), -0.1) * (bBox[3] - bBox[1]) + bBox[1];\r\n          w = this.getLength('width', this.getVWidth(), 1.2) * (bBox[2] - bBox[0]);\r\n          h = this.getLength('height', this.getVHeight(), 1.2) * (bBox[3] - bBox[1]);\r\n        }\r\n        doc.rect(x, y, w, h).clip();\r\n        if (this.attr('maskContentUnits') === 'objectBoundingBox') {\r\n          doc.transform(bBox[2] - bBox[0], 0, 0, bBox[3] - bBox[1], bBox[0], bBox[1]);\r\n        }\r\n        this.clip();\r\n        this.drawChildren(false, true);\r\n        doc.restore();\r\n        docEndGroup(group);\r\n        docApplyMask(group, true);\r\n      };\r\n    };\r\n\r\n    var SvgElemTextContainer = function(obj, inherits) {\r\n      SvgElemStylable.call(this, obj, inherits);\r\n      this.allowedChildren = ['tspan', '#text', '#cdata-section', 'a'];\r\n      this.isText = true;\r\n      this.getBoundingShape = function() {\r\n        let shape = new SvgShape();\r\n        for (let i = 0; i < this._pos.length; i++) {\r\n          let pos = this._pos[i];\r\n          if (!pos.hidden) {\r\n            let dx0 = pos.ascent * Math.sin(pos.rotate), dy0 = -pos.ascent * Math.cos(pos.rotate),\r\n                dx1 = pos.descent * Math.sin(pos.rotate), dy1 = -pos.descent * Math.cos(pos.rotate),\r\n                dx2 = pos.width * Math.cos(pos.rotate), dy2 = pos.width * Math.sin(pos.rotate);\r\n            shape.M(pos.x + dx0, pos.y + dy0).L(pos.x + dx0 + dx2, pos.y + dy0 + dy2)\r\n                 .M(pos.x + dx1 + dx2, pos.y + dy1 + dy2).L(pos.x + dx1, pos.y + dy1);\r\n          }\r\n        }\r\n        return shape;\r\n      };\r\n      this.drawTextInDocument = function(isClip, isMask) {\r\n        if (this.link && !isClip && !isMask) {this.addLink();}\r\n        if (this.get('text-decoration') === 'underline') {\r\n          this.decorate(0.05 * this._font.size, -0.075 * this._font.size, isClip, isMask);\r\n        }\r\n        if (this.get('text-decoration') === 'overline') {\r\n          this.decorate(0.05 * this._font.size, getAscent(this._font.font, this._font.size) + 0.075 * this._font.size, isClip, isMask);\r\n        }\r\n        let fill = this.getFill(isClip, isMask),\r\n            stroke = this.getStroke(isClip, isMask),\r\n            strokeWidth = this.get('stroke-width');\r\n        if (this._font.fauxBold) {\r\n          if (!stroke) {\r\n            stroke = fill;\r\n            strokeWidth = this._font.size * 0.03;\r\n          } else {\r\n            strokeWidth += this._font.size * 0.03;\r\n          }\r\n        }\r\n        let children = this.getChildren();\r\n        for (let i = 0; i < children.length; i++) {\r\n          let childElem = children[i];\r\n          switch(childElem.name) {\r\n            case 'tspan': case 'textPath': case 'a':\r\n              if (childElem.get('display') !== 'none') {\r\n                childElem.drawTextInDocument(isClip, isMask);\r\n              }\r\n              break;\r\n            case '#text': case '#cdata-section':\r\n              if (this.get('visibility') === 'hidden') {continue;}\r\n              if (fill || stroke || isClip) {\r\n                if (fill) {\r\n                  docFillColor(fill);\r\n                }\r\n                if (stroke && strokeWidth) {\r\n                  docStrokeColor(stroke);\r\n                  doc.lineWidth(strokeWidth)\r\n                     .miterLimit(this.get('stroke-miterlimit'))\r\n                     .lineJoin(this.get('stroke-linejoin'))\r\n                     .lineCap(this.get('stroke-linecap'))\r\n                     .dash(this.get('stroke-dasharray'), {phase:this.get('stroke-dashoffset')});\r\n                }\r\n                docBeginText(this._font.font, this._font.size);\r\n                docSetTextMode(!!fill, !!stroke);\r\n                for (let j = 0, pos = childElem._pos; j < pos.length; j++) {\r\n                  if (!pos[j].hidden && isNotEqual(pos[j].width, 0)) {\r\n                    let cos = Math.cos(pos[j].rotate), sin = Math.sin(pos[j].rotate), skew = (this._font.fauxItalic ? -0.25 : 0);\r\n                    docSetTextMatrix(cos * pos[j].scale, sin * pos[j].scale, cos * skew - sin, sin * skew + cos, pos[j].x, pos[j].y);\r\n                    docWriteGlyph(pos[j].glyph);\r\n                  }\r\n                }\r\n                docEndText();\r\n              }\r\n              break;\r\n          }\r\n        }\r\n        if (this.get('text-decoration') === 'line-through') {\r\n          this.decorate(0.05 * this._font.size, 0.5 * (getAscent(this._font.font, this._font.size) + getDescent(this._font.font, this._font.size)), isClip, isMask);\r\n        }\r\n      };\r\n      this.decorate = function(lineWidth, linePosition, isClip, isMask) {\r\n        let fill = this.getFill(isClip, isMask),\r\n            stroke = this.getStroke(isClip, isMask);\r\n        if (fill) {\r\n          docFillColor(fill);\r\n        }\r\n        if (stroke) {\r\n          docStrokeColor(stroke);\r\n          doc.lineWidth(this.get('stroke-width'))\r\n             .miterLimit(this.get('stroke-miterlimit'))\r\n             .lineJoin(this.get('stroke-linejoin'))\r\n             .lineCap(this.get('stroke-linecap'))\r\n             .dash(this.get('stroke-dasharray'), {phase:this.get('stroke-dashoffset')});\r\n        }\r\n        for (let j = 0, pos = this._pos; j < pos.length; j++) {\r\n          if (!pos[j].hidden && isNotEqual(pos[j].width, 0)) {\r\n            let dx0 = (linePosition + lineWidth / 2) * Math.sin(pos[j].rotate),\r\n                dy0 = -(linePosition + lineWidth / 2) * Math.cos(pos[j].rotate),\r\n                dx1 = (linePosition - lineWidth / 2) * Math.sin(pos[j].rotate),\r\n                dy1 = -(linePosition - lineWidth / 2) * Math.cos(pos[j].rotate),\r\n                dx2 = pos[j].width * Math.cos(pos[j].rotate),\r\n                dy2 = pos[j].width * Math.sin(pos[j].rotate);\r\n            new SvgShape().M(pos[j].x + dx0, pos[j].y + dy0)\r\n                          .L(pos[j].x + dx0 + dx2, pos[j].y + dy0 + dy2)\r\n                          .L(pos[j].x + dx1 + dx2, pos[j].y + dy1 + dy2)\r\n                          .L(pos[j].x + dx1, pos[j].y + dy1).Z()\r\n                          .insertInDocument();\r\n            if (fill && stroke) {\r\n              doc.fillAndStroke();\r\n            } else if (fill) {\r\n              doc.fill();\r\n            } else if (stroke) {\r\n              doc.stroke();\r\n            }\r\n          }\r\n        }\r\n      };\r\n    };\r\n\r\n    var SvgElemTextNode = function(obj, inherits) {\r\n      this.name = obj.nodeName;\r\n      this.textContent = obj.nodeValue;\r\n    };\r\n\r\n    var SvgElemTspan = function(obj, inherits) {\r\n      SvgElemTextContainer.call(this, obj, inherits);\r\n    };\r\n\r\n    var SvgElemTextPath = function(obj, inherits) {\r\n      SvgElemTextContainer.call(this, obj, inherits);\r\n      let pathObject, pathLength, temp;\r\n      if ((temp = this.attr('path')) && temp.trim() !== '') {\r\n        let pathLength = this.getLength('pathLength', this.getViewport());\r\n        this.pathObject = new SvgShape().path(temp);\r\n        this.pathLength = pathLength > 0 ? pathLength : this.pathObject.totalLength;\r\n        this.pathScale = this.pathObject.totalLength / this.pathLength;\r\n      } else if ((temp = this.getUrl('href') || this.getUrl('xlink:href')) && temp.nodeName === 'path') {\r\n        let pathElem = new SvgElemPath(temp, this);\r\n        this.pathObject = pathElem.shape.clone().transform(pathElem.get('transform'));\r\n        this.pathLength = this.chooseValue(pathElem.pathLength, this.pathObject.totalLength);\r\n        this.pathScale = this.pathObject.totalLength / this.pathLength;\r\n      }\r\n    };\r\n\r\n    var SvgElemText = function(obj, inherits) {\r\n      SvgElemTextContainer.call(this, obj, inherits);\r\n      this.allowedChildren = ['textPath', 'tspan', '#text', '#cdata-section', 'a'];\r\n      (function (textParentElem) {\r\n        let processedText = '', remainingText = obj.textContent, textPaths = [], currentChunk = [], currentAnchor, currentDirection, currentX = 0, currentY = 0;\r\n        function doAnchoring() {\r\n          if (currentChunk.length) {\r\n            let last = currentChunk[currentChunk.length - 1];\r\n            let first = currentChunk[0]\r\n            let width = last.x + last.width - first.x;\r\n            let anchordx = {'startltr': 0, 'middleltr': 0.5, 'endltr': 1, 'startrtl': 1, 'middlertl': 0.5, 'endrtl': 0}[currentAnchor + currentDirection] * width || 0;\r\n            for (let i = 0; i < currentChunk.length; i++) {\r\n              currentChunk[i].x -= anchordx;\r\n            }\r\n          }\r\n          currentChunk = [];\r\n        }\r\n        function adjustLength(pos, length, spacingAndGlyphs) {\r\n          let firstChar = pos[0], lastChar = pos[pos.length - 1],\r\n              startX = firstChar.x, endX = lastChar.x + lastChar.width;\r\n          if (spacingAndGlyphs) {\r\n            let textScale = length / (endX - startX);\r\n            if (textScale > 0 && textScale < Infinity) {\r\n              for (let j = 0; j < pos.length; j++) {\r\n                pos[j].x = startX + textScale * (pos[j].x - startX);\r\n                pos[j].scale *= textScale;\r\n                pos[j].width *= textScale;\r\n              }\r\n            }\r\n          } else {\r\n            if (pos.length >= 2) {\r\n              let spaceDiff = (length - (endX - startX)) / (pos.length - 1);\r\n              for (let j = 0; j < pos.length; j++) {\r\n                pos[j].x += j * spaceDiff;\r\n              }\r\n            }\r\n          }\r\n          currentX += length - (endX - startX);\r\n        }\r\n        function recursive(currentElem, parentElem) {\r\n          currentElem._x = combineArrays(currentElem.getLengthList('x', currentElem.getVWidth()), (parentElem ? parentElem._x.slice(parentElem._pos.length) : []));\r\n          currentElem._y = combineArrays(currentElem.getLengthList('y', currentElem.getVHeight()), (parentElem ? parentElem._y.slice(parentElem._pos.length) : []));\r\n          currentElem._dx = combineArrays(currentElem.getLengthList('dx', currentElem.getVWidth()), (parentElem ? parentElem._dx.slice(parentElem._pos.length) : []));\r\n          currentElem._dy = combineArrays(currentElem.getLengthList('dy', currentElem.getVHeight()), (parentElem ? parentElem._dy.slice(parentElem._pos.length) : []));\r\n          currentElem._rot = combineArrays(currentElem.getNumberList('rotate'), (parentElem ? parentElem._rot.slice(parentElem._pos.length) : []));\r\n          currentElem._defRot = currentElem.chooseValue(currentElem._rot[currentElem._rot.length - 1], parentElem && parentElem._defRot, 0);\r\n          if (currentElem.name === 'textPath') {currentElem._y = [];}\r\n          let fontOptions = {fauxItalic: false, fauxBold: false},\r\n              fontNameorLink = fontCallback(currentElem.get('font-family'), currentElem.get('font-weight') === 'bold', currentElem.get('font-style') === 'italic', fontOptions);\r\n          try {\r\n            doc.font(fontNameorLink);\r\n          } catch(e) {\r\n            warningCallback('SVGElemText: failed to open font \"' + fontNameorLink + '\" in PDFKit');\r\n          }\r\n          currentElem._pos = [];\r\n          currentElem._index = 0;\r\n          currentElem._font = {font: doc._font, size: currentElem.get('font-size'), fauxItalic: fontOptions.fauxItalic, fauxBold: fontOptions.fauxBold};\r\n          let textLength = currentElem.getLength('textLength', currentElem.getVWidth(), undefined),\r\n              spacingAndGlyphs = currentElem.attr('lengthAdjust') === 'spacingAndGlyphs',\r\n              wordSpacing = currentElem.get('word-spacing'),\r\n              letterSpacing = currentElem.get('letter-spacing'),\r\n              textAnchor = currentElem.get('text-anchor'),\r\n              textDirection = currentElem.get('direction'),\r\n              baseline = getBaseline(currentElem._font.font, currentElem._font.size, currentElem.get('alignment-baseline') || currentElem.get('dominant-baseline'), currentElem.get('baseline-shift'));\r\n          if (currentElem.name === 'textPath') {\r\n            doAnchoring();\r\n            currentX = currentY = 0;\r\n          }\r\n          let children = currentElem.getChildren();\r\n          for (let i = 0; i < children.length; i++) {\r\n            let childElem = children[i];\r\n            switch(childElem.name) {\r\n              case 'tspan': case 'textPath': case 'a':\r\n                recursive(childElem, currentElem);\r\n                break;\r\n              case '#text': case '#cdata-section':\r\n                let rawText = childElem.textContent, renderedText = rawText, words;\r\n                childElem._font = currentElem._font;\r\n                childElem._pos = [];\r\n                remainingText = remainingText.substring(rawText.length);\r\n                if (currentElem.get('xml:space') === 'preserve') {\r\n                  renderedText = renderedText.replace(/[\\s]/g, ' ');\r\n                } else {\r\n                  renderedText = renderedText.replace(/[\\s]+/g, ' ');\r\n                  if (processedText.match(/[\\s]$|^$/)) {renderedText = renderedText.replace(/^[\\s]/, '');}\r\n                  if (remainingText.match(/^[\\s]*$/)) {renderedText = renderedText.replace(/[\\s]$/, '');}\r\n                }\r\n                processedText += rawText;\r\n                if (wordSpacing === 0) {\r\n                  words = [renderedText];\r\n                } else {\r\n                  words = renderedText.split(/(\\s)/);\r\n                }\r\n                for (let w = 0; w < words.length; w++) {\r\n                  let pos = getTextPos(currentElem._font.font, currentElem._font.size, words[w]);\r\n                  for (let j = 0; j < pos.length; j++) {\r\n                    let index = currentElem._index,\r\n                        xAttr = currentElem._x[index],\r\n                        yAttr = currentElem._y[index],\r\n                        dxAttr = currentElem._dx[index],\r\n                        dyAttr = currentElem._dy[index],\r\n                        rotAttr = currentElem._rot[index],\r\n                        continuous = !(w === 0 && j === 0);\r\n                    if (xAttr !== undefined) {continuous = false; doAnchoring(); currentX = xAttr;}\r\n                    if (yAttr !== undefined) {continuous = false; doAnchoring(); currentY = yAttr;}\r\n                    if (dxAttr !== undefined) {continuous = false; currentX += dxAttr;}\r\n                    if (dyAttr !== undefined) {continuous = false; currentY += dyAttr;}\r\n                    if (rotAttr !== undefined || currentElem._defRot !== 0) {continuous = false;}\r\n                    let position = {\r\n                      glyph: pos[j].glyph,\r\n                      rotate: (Math.PI / 180) * currentElem.chooseValue(rotAttr, currentElem._defRot),\r\n                      x: currentX + pos[j].xOffset,\r\n                      y: currentY + baseline + pos[j].yOffset,\r\n                      width: pos[j].width,\r\n                      ascent: getAscent(currentElem._font.font, currentElem._font.size),\r\n                      descent: getDescent(currentElem._font.font, currentElem._font.size),\r\n                      scale: 1,\r\n                      hidden: false,\r\n                      continuous: continuous\r\n                    };\r\n                    currentChunk.push(position);\r\n                    childElem._pos.push(position);\r\n                    currentElem._pos.push(position);\r\n                    currentElem._index += pos[j].unicode.length;\r\n                    if (currentChunk.length === 1) {\r\n                      currentAnchor = textAnchor;\r\n                      currentDirection = textDirection;\r\n                    }\r\n                    currentX += pos[j].xAdvance + letterSpacing;\r\n                    currentY += pos[j].yAdvance;\r\n                  }\r\n                  if (words[w] === ' ') {\r\n                    currentX += wordSpacing;\r\n                  }\r\n                }\r\n                break;\r\n              default:\r\n                remainingText = remainingText.substring(childElem.textContent.length);\r\n            }\r\n          }\r\n          if (textLength && currentElem._pos.length) {\r\n            adjustLength(currentElem._pos, textLength, spacingAndGlyphs);\r\n          }\r\n          if (currentElem.name === 'textPath' || currentElem.name === 'text') {\r\n            doAnchoring();\r\n          }\r\n          if (currentElem.name === 'textPath') {\r\n            textPaths.push(currentElem);\r\n            let pathObject = currentElem.pathObject;\r\n            if (pathObject) {\r\n              currentX = pathObject.endPoint[0]; currentY = pathObject.endPoint[1];\r\n            }\r\n          }\r\n          if (parentElem) {\r\n            parentElem._pos = parentElem._pos.concat(currentElem._pos);\r\n            parentElem._index += currentElem._index;\r\n          }\r\n        }\r\n        function textOnPath(currentElem) {\r\n          let pathObject = currentElem.pathObject,\r\n              pathLength = currentElem.pathLength,\r\n              pathScale = currentElem.pathScale;\r\n          if (pathObject) {\r\n            let textOffset = currentElem.getLength('startOffset', pathLength, 0);\r\n            for (let j = 0; j < currentElem._pos.length; j++) {\r\n              let charMidX = textOffset + currentElem._pos[j].x + 0.5 * currentElem._pos[j].width;\r\n              if (charMidX > pathLength || charMidX < 0) {\r\n                currentElem._pos[j].hidden = true;\r\n              } else {\r\n                let pointOnPath = pathObject.getPointAtLength(charMidX * pathScale);\r\n                if (isNotEqual(pathScale, 1)) {\r\n                  currentElem._pos[j].scale *= pathScale;\r\n                  currentElem._pos[j].width *= pathScale;\r\n                }\r\n                currentElem._pos[j].x = pointOnPath[0] - 0.5 * currentElem._pos[j].width * Math.cos(pointOnPath[2]) - currentElem._pos[j].y * Math.sin(pointOnPath[2]);\r\n                currentElem._pos[j].y = pointOnPath[1] - 0.5 * currentElem._pos[j].width * Math.sin(pointOnPath[2]) + currentElem._pos[j].y * Math.cos(pointOnPath[2]);\r\n                currentElem._pos[j].rotate = pointOnPath[2] + currentElem._pos[j].rotate;\r\n                currentElem._pos[j].continuous = false;\r\n              }\r\n            }\r\n          } else {\r\n            for (let j = 0; j < currentElem._pos.length; j++) {\r\n              currentElem._pos[j].hidden = true;\r\n            }\r\n          }\r\n        }\r\n        recursive(textParentElem, null);\r\n        for (let i = 0; i < textPaths.length; i++) {\r\n          textOnPath(textPaths[i]);\r\n        }\r\n      })(this);\r\n      this.getTransformation = function() {\r\n        return this.get('transform');\r\n      };\r\n      this.drawInDocument = function(isClip, isMask) {\r\n        doc.save();\r\n        this.transform();\r\n        this.clip();\r\n        let masked = this.mask(), group;\r\n        if (masked) {\r\n          group = docBeginGroup(getPageBBox());\r\n        }\r\n        this.drawTextInDocument(isClip, isMask);\r\n        if (group) {\r\n          docEndGroup(group);\r\n          docInsertGroup(group);\r\n        }\r\n        doc.restore();\r\n      };\r\n    };\r\n\r\n    options = options || {};\r\n    var pxToPt = options.assumePt ? 1 : (72/96), // 1px = 72/96pt, but only if assumePt is false\r\n        viewportWidth = (options.width || doc.page.width) / pxToPt,\r\n        viewportHeight = (options.height || doc.page.height) / pxToPt,\r\n        preserveAspectRatio = options.preserveAspectRatio || null, // default to null so that the attr can override if not passed\r\n        useCSS = options.useCSS && typeof SVGElement !== 'undefined' && svg instanceof SVGElement && typeof getComputedStyle === 'function',\r\n        warningCallback = options.warningCallback,\r\n        fontCallback = options.fontCallback,\r\n        imageCallback = options.imageCallback,\r\n        colorCallback = options.colorCallback,\r\n        documentCallback = options.documentCallback,\r\n        precision = Math.ceil(Math.max(1, options.precision)) || 3,\r\n        groupStack = [],\r\n        documentCache = {},\r\n        links = [],\r\n        styleRules = [];\r\n\r\n    if (typeof warningCallback !== 'function') {\r\n      warningCallback = function(str) {\r\n        if (typeof console !== undefined && typeof console.warn === 'function') {console.warn(str);}\r\n      };\r\n    }\r\n    if (typeof fontCallback !== 'function') {\r\n      fontCallback = function(family, bold, italic, fontOptions) {\r\n        // Check if the font is already registered in the document\r\n        if (bold && italic) {\r\n          if (doc._registeredFonts.hasOwnProperty(family + '-BoldItalic')) {\r\n            return family + '-BoldItalic';\r\n          } else if (doc._registeredFonts.hasOwnProperty(family + '-Italic')) {\r\n            fontOptions.fauxBold = true;\r\n            return family + '-Italic';\r\n          } else if (doc._registeredFonts.hasOwnProperty(family + '-Bold')) {\r\n            fontOptions.fauxItalic = true;\r\n            return family + '-Bold';\r\n          } else if (doc._registeredFonts.hasOwnProperty(family)) {\r\n            fontOptions.fauxBold = true;\r\n            fontOptions.fauxItalic = true;\r\n            return family;\r\n          }\r\n        }\r\n        if (bold && !italic) {\r\n          if (doc._registeredFonts.hasOwnProperty(family + '-Bold')) {\r\n            return family + '-Bold';\r\n          } else if (doc._registeredFonts.hasOwnProperty(family)) {\r\n            fontOptions.fauxBold = true;\r\n            return family;\r\n          }\r\n        }\r\n        if (!bold && italic) {\r\n          if (doc._registeredFonts.hasOwnProperty(family + '-Italic')) {\r\n            return family + '-Italic';\r\n          } else if (doc._registeredFonts.hasOwnProperty(family)) {\r\n            fontOptions.fauxItalic = true;\r\n            return family;\r\n          }\r\n        }\r\n        if (!bold && !italic) {\r\n          if (doc._registeredFonts.hasOwnProperty(family)) {\r\n            return family;\r\n          }\r\n        }\r\n        // Use standard fonts as fallback\r\n        if (family.match(/(?:^|,)\\s*serif\\s*$/)) {\r\n          if (bold && italic) {return 'Times-BoldItalic';}\r\n          if (bold && !italic) {return 'Times-Bold';}\r\n          if (!bold && italic) {return 'Times-Italic';}\r\n          if (!bold && !italic) {return 'Times-Roman';}\r\n        } else if (family.match(/(?:^|,)\\s*monospace\\s*$/)) {\r\n          if (bold && italic) {return 'Courier-BoldOblique';}\r\n          if (bold && !italic) {return 'Courier-Bold';}\r\n          if (!bold && italic) {return 'Courier-Oblique';}\r\n          if (!bold && !italic) {return 'Courier';}\r\n        } else if (family.match(/(?:^|,)\\s*sans-serif\\s*$/) || true) {\r\n          if (bold && italic) {return 'Helvetica-BoldOblique';}\r\n          if (bold && !italic) {return 'Helvetica-Bold';}\r\n          if (!bold && italic) {return 'Helvetica-Oblique';}\r\n          if (!bold && !italic) {return 'Helvetica';}\r\n        }\r\n      };\r\n    }\r\n    if (typeof imageCallback !== 'function') {\r\n      imageCallback = function(link) {\r\n        return link.replace(/\\s+/g, '');\r\n      };\r\n    }\r\n    if (typeof colorCallback !== 'function') {\r\n      colorCallback = null;\r\n    } else {\r\n      for (let color in DefaultColors) {\r\n        let newColor = colorCallback(DefaultColors[color]);\r\n        DefaultColors[color][0] = newColor[0];\r\n        DefaultColors[color][1] = newColor[1];\r\n      }\r\n    }\r\n    if (typeof documentCallback !== 'function') {\r\n      documentCallback = null;\r\n    }\r\n\r\n    if (typeof svg === 'string') {svg = parseXml(svg);}\r\n    if (svg) {\r\n      let styles = svg.getElementsByTagName('style');\r\n      for (let i = 0; i < styles.length; i++) {\r\n        styleRules = styleRules.concat(parseStyleSheet(styles[i].textContent));\r\n      }\r\n      let elem = createSVGElement(svg, null);\r\n      if (typeof elem.drawInDocument === 'function') {\r\n        if (options.useCSS && !useCSS) {\r\n          warningCallback('SVGtoPDF: useCSS option can only be used for SVG *elements* in compatible browsers');\r\n        }\r\n        let savedFillColor = doc._fillColor;\r\n        doc.save().translate(x || 0, y || 0).scale(pxToPt);\r\n        elem.drawInDocument();\r\n        for (let i = 0; i < links.length; i++) {\r\n          doc.page.annotations.push(links[i]);\r\n        }\r\n        doc.restore();\r\n        doc._fillColor = savedFillColor;\r\n      } else {\r\n        warningCallback('SVGtoPDF: this element can\\'t be rendered directly: ' + svg.nodeName);\r\n      }\r\n    } else {\r\n      warningCallback('SVGtoPDF: the input does not look like a valid SVG');\r\n    }\r\n\r\n};\r\n\r\nif (typeof module !== 'undefined' && module && typeof module.exports !== 'undefined') {\r\n  module.exports = SVGtoPDF;\r\n}\r\n","/*\r\nPDFAbstractReference - abstract class for PDF reference\r\n*/\r\n\r\nclass PDFAbstractReference {\r\n  toString() {\r\n    throw new Error('Must be implemented by subclasses');\r\n  }\r\n}\r\n\r\nexport default PDFAbstractReference;\r\n","/*\r\nPDFTree - abstract base class for name and number tree objects\r\n*/\r\n\r\nimport PDFObject from './object';\r\n\r\nclass PDFTree {\r\n  constructor(options = {}) {\r\n    this._items = {};\r\n    // disable /Limits output for this tree\r\n    this.limits =\r\n      typeof options.limits === 'boolean' ? options.limits : true;\r\n  }\r\n\r\n  add(key, val) {\r\n    return (this._items[key] = val);\r\n  }\r\n\r\n  get(key) {\r\n    return this._items[key];\r\n  }\r\n\r\n  toString() {\r\n    // Needs to be sorted by key\r\n    const sortedKeys = Object.keys(this._items).sort((a, b) =>\r\n      this._compareKeys(a, b)\r\n    );\r\n\r\n    const out = ['<<'];\r\n    if (this.limits && sortedKeys.length > 1) {\r\n      const first = sortedKeys[0],\r\n        last = sortedKeys[sortedKeys.length - 1];\r\n      out.push(\r\n        `  /Limits ${PDFObject.convert([this._dataForKey(first), this._dataForKey(last)])}`\r\n      );\r\n    }\r\n    out.push(`  /${this._keysName()} [`);\r\n    for (let key of sortedKeys) {\r\n      out.push(\r\n        `    ${PDFObject.convert(this._dataForKey(key))} ${PDFObject.convert(\r\n          this._items[key]\r\n        )}`\r\n      );\r\n    }\r\n    out.push(']');\r\n    out.push('>>');\r\n    return out.join('\\n');\r\n  }\r\n\r\n  _compareKeys(/*a, b*/) {\r\n    throw new Error('Must be implemented by subclasses');\r\n  }\r\n\r\n  _keysName() {\r\n    throw new Error('Must be implemented by subclasses');\r\n  }\r\n\r\n  _dataForKey(/*k*/) {\r\n    throw new Error('Must be implemented by subclasses');\r\n  }\r\n}\r\n\r\nexport default PDFTree;\r\n","/*\r\nPDFObject - converts JavaScript types into their corresponding PDF types.\r\nBy Devon Govett\r\n*/\r\n\r\nimport PDFAbstractReference from './abstract_reference';\r\nimport PDFTree from './tree';\r\n\r\nconst pad = (str, length) => (Array(length + 1).join('0') + str).slice(-length);\r\n\r\nconst escapableRe = /[\\n\\r\\t\\b\\f()\\\\]/g;\r\nconst escapable = {\r\n  '\\n': '\\\\n',\r\n  '\\r': '\\\\r',\r\n  '\\t': '\\\\t',\r\n  '\\b': '\\\\b',\r\n  '\\f': '\\\\f',\r\n  '\\\\': '\\\\\\\\',\r\n  '(': '\\\\(',\r\n  ')': '\\\\)'\r\n};\r\n\r\n// Convert little endian UTF-16 to big endian\r\nconst swapBytes = function(buff) {\r\n  const l = buff.length;\r\n  if (l & 0x01) {\r\n    throw new Error('Buffer length must be even');\r\n  } else {\r\n    for (let i = 0, end = l - 1; i < end; i += 2) {\r\n      const a = buff[i];\r\n      buff[i] = buff[i + 1];\r\n      buff[i + 1] = a;\r\n    }\r\n  }\r\n\r\n  return buff;\r\n};\r\n\r\nclass PDFObject {\r\n  static convert(object, encryptFn = null) {\r\n    // String literals are converted to the PDF name type\r\n    if (typeof object === 'string') {\r\n      return `/${object}`;\r\n\r\n      // String objects are converted to PDF strings (UTF-16)\r\n    } else if (object instanceof String) {\r\n      let string = object;\r\n      // Detect if this is a unicode string\r\n      let isUnicode = false;\r\n      for (let i = 0, end = string.length; i < end; i++) {\r\n        if (string.charCodeAt(i) > 0x7f) {\r\n          isUnicode = true;\r\n          break;\r\n        }\r\n      }\r\n\r\n      // If so, encode it as big endian UTF-16\r\n      let stringBuffer;\r\n      if (isUnicode) {\r\n        stringBuffer = swapBytes(Buffer.from(`\\ufeff${string}`, 'utf16le'));\r\n      } else {\r\n        stringBuffer = Buffer.from(string.valueOf(), 'ascii');\r\n      }\r\n\r\n      // Encrypt the string when necessary\r\n      if (encryptFn) {\r\n        string = encryptFn(stringBuffer).toString('binary');\r\n      } else {\r\n        string = stringBuffer.toString('binary');\r\n      }\r\n\r\n      // Escape characters as required by the spec\r\n      string = string.replace(escapableRe, c => escapable[c]);\r\n\r\n      return `(${string})`;\r\n\r\n      // Buffers are converted to PDF hex strings\r\n    } else if (Buffer.isBuffer(object)) {\r\n      return `<${object.toString('hex')}>`;\r\n    } else if (\r\n      object instanceof PDFAbstractReference ||\r\n      object instanceof PDFTree\r\n    ) {\r\n      return object.toString();\r\n    } else if (object instanceof Date) {\r\n      let string =\r\n        `D:${pad(object.getUTCFullYear(), 4)}` +\r\n        pad(object.getUTCMonth() + 1, 2) +\r\n        pad(object.getUTCDate(), 2) +\r\n        pad(object.getUTCHours(), 2) +\r\n        pad(object.getUTCMinutes(), 2) +\r\n        pad(object.getUTCSeconds(), 2) +\r\n        'Z';\r\n\r\n      // Encrypt the string when necessary\r\n      if (encryptFn) {\r\n        string = encryptFn(Buffer.from(string, 'ascii')).toString('binary');\r\n\r\n        // Escape characters as required by the spec\r\n        string = string.replace(escapableRe, c => escapable[c]);\r\n      }\r\n\r\n      return `(${string})`;\r\n    } else if (Array.isArray(object)) {\r\n      const items = object.map(e => PDFObject.convert(e, encryptFn)).join(' ');\r\n      return `[${items}]`;\r\n    } else if ({}.toString.call(object) === '[object Object]') {\r\n      const out = ['<<'];\r\n      for (let key in object) {\r\n        const val = object[key];\r\n        out.push(`/${key} ${PDFObject.convert(val, encryptFn)}`);\r\n      }\r\n\r\n      out.push('>>');\r\n      return out.join('\\n');\r\n    } else if (typeof object === 'number') {\r\n      return PDFObject.number(object);\r\n    } else {\r\n      return `${object}`;\r\n    }\r\n  }\r\n\r\n  static number(n) {\r\n    if (n > -1e21 && n < 1e21) {\r\n      return Math.round(n * 1e6) / 1e6;\r\n    }\r\n\r\n    throw new Error(`unsupported number: ${n}`);\r\n  }\r\n}\r\n\r\nexport default PDFObject;\r\n","/*\r\nPDFReference - represents a reference to another object in the PDF object heirarchy\r\nBy Devon Govett\r\n*/\r\n\r\nimport zlib from 'zlib';\r\nimport PDFAbstractReference from './abstract_reference';\r\nimport PDFObject from './object';\r\n\r\nclass PDFReference extends PDFAbstractReference {\r\n  constructor(document, id, data = {}) {\r\n    super();\r\n    this.document = document;\r\n    this.id = id;\r\n    this.data = data;\r\n    this.gen = 0;\r\n    this.compress = this.document.compress && !this.data.Filter;\r\n    this.uncompressedLength = 0;\r\n    this.buffer = [];\r\n  }\r\n\r\n  write(chunk) {\r\n    if (!Buffer.isBuffer(chunk)) {\r\n      chunk = Buffer.from(chunk + '\\n', 'binary');\r\n    }\r\n\r\n    this.uncompressedLength += chunk.length;\r\n    if (this.data.Length == null) {\r\n      this.data.Length = 0;\r\n    }\r\n    this.buffer.push(chunk);\r\n    this.data.Length += chunk.length;\r\n    if (this.compress) {\r\n      return (this.data.Filter = 'FlateDecode');\r\n    }\r\n  }\r\n\r\n  end(chunk) {\r\n    if (chunk) {\r\n      this.write(chunk);\r\n    }\r\n    return this.finalize();\r\n  }\r\n\r\n  finalize() {\r\n    this.offset = this.document._offset;\r\n\r\n    const encryptFn = this.document._security\r\n      ? this.document._security.getEncryptFn(this.id, this.gen)\r\n      : null;\r\n\r\n    if (this.buffer.length) {\r\n      this.buffer = Buffer.concat(this.buffer);\r\n      if (this.compress) {\r\n        this.buffer = zlib.deflateSync(this.buffer);\r\n      }\r\n\r\n      if (encryptFn) {\r\n        this.buffer = encryptFn(this.buffer);\r\n      }\r\n\r\n      this.data.Length = this.buffer.length;\r\n    }\r\n\r\n    this.document._write(`${this.id} ${this.gen} obj`);\r\n    this.document._write(PDFObject.convert(this.data, encryptFn));\r\n\r\n    if (this.buffer.length) {\r\n      this.document._write('stream');\r\n      this.document._write(this.buffer);\r\n\r\n      this.buffer = []; // free up memory\r\n      this.document._write('\\nendstream');\r\n    }\r\n\r\n    this.document._write('endobj');\r\n    this.document._refEnd(this);\r\n  }\r\n  toString() {\r\n    return `${this.id} ${this.gen} R`;\r\n  }\r\n}\r\n\r\nexport default PDFReference;\r\n","/*\r\nPDFPage - represents a single page in the PDF document\r\nBy Devon Govett\r\n*/\r\n\r\nconst DEFAULT_MARGINS = {\r\n  top: 72,\r\n  left: 72,\r\n  bottom: 72,\r\n  right: 72\r\n};\r\n\r\nconst SIZES = {\r\n  '4A0': [4767.87, 6740.79],\r\n  '2A0': [3370.39, 4767.87],\r\n  A0: [2383.94, 3370.39],\r\n  A1: [1683.78, 2383.94],\r\n  A2: [1190.55, 1683.78],\r\n  A3: [841.89, 1190.55],\r\n  A4: [595.28, 841.89],\r\n  A5: [419.53, 595.28],\r\n  A6: [297.64, 419.53],\r\n  A7: [209.76, 297.64],\r\n  A8: [147.4, 209.76],\r\n  A9: [104.88, 147.4],\r\n  A10: [73.7, 104.88],\r\n  B0: [2834.65, 4008.19],\r\n  B1: [2004.09, 2834.65],\r\n  B2: [1417.32, 2004.09],\r\n  B3: [1000.63, 1417.32],\r\n  B4: [708.66, 1000.63],\r\n  B5: [498.9, 708.66],\r\n  B6: [354.33, 498.9],\r\n  B7: [249.45, 354.33],\r\n  B8: [175.75, 249.45],\r\n  B9: [124.72, 175.75],\r\n  B10: [87.87, 124.72],\r\n  C0: [2599.37, 3676.54],\r\n  C1: [1836.85, 2599.37],\r\n  C2: [1298.27, 1836.85],\r\n  C3: [918.43, 1298.27],\r\n  C4: [649.13, 918.43],\r\n  C5: [459.21, 649.13],\r\n  C6: [323.15, 459.21],\r\n  C7: [229.61, 323.15],\r\n  C8: [161.57, 229.61],\r\n  C9: [113.39, 161.57],\r\n  C10: [79.37, 113.39],\r\n  RA0: [2437.8, 3458.27],\r\n  RA1: [1729.13, 2437.8],\r\n  RA2: [1218.9, 1729.13],\r\n  RA3: [864.57, 1218.9],\r\n  RA4: [609.45, 864.57],\r\n  SRA0: [2551.18, 3628.35],\r\n  SRA1: [1814.17, 2551.18],\r\n  SRA2: [1275.59, 1814.17],\r\n  SRA3: [907.09, 1275.59],\r\n  SRA4: [637.8, 907.09],\r\n  EXECUTIVE: [521.86, 756.0],\r\n  FOLIO: [612.0, 936.0],\r\n  LEGAL: [612.0, 1008.0],\r\n  LETTER: [612.0, 792.0],\r\n  TABLOID: [792.0, 1224.0]\r\n};\r\n\r\nclass PDFPage {\r\n  constructor(document, options = {}) {\r\n    this.document = document;\r\n    this.size = options.size || 'letter';\r\n    this.layout = options.layout || 'portrait';\r\n\r\n    // process margins\r\n    if (typeof options.margin === 'number') {\r\n      this.margins = {\r\n        top: options.margin,\r\n        left: options.margin,\r\n        bottom: options.margin,\r\n        right: options.margin\r\n      };\r\n\r\n      // default to 1 inch margins\r\n    } else {\r\n      this.margins = options.margins || DEFAULT_MARGINS;\r\n    }\r\n\r\n    // calculate page dimensions\r\n    const dimensions = Array.isArray(this.size)\r\n      ? this.size\r\n      : SIZES[this.size.toUpperCase()];\r\n    this.width = dimensions[this.layout === 'portrait' ? 0 : 1];\r\n    this.height = dimensions[this.layout === 'portrait' ? 1 : 0];\r\n\r\n    this.content = this.document.ref();\r\n\r\n    // Initialize the Font, XObject, and ExtGState dictionaries\r\n    this.resources = this.document.ref({\r\n      ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI']\r\n    });\r\n\r\n    // The page dictionary\r\n    this.dictionary = this.document.ref({\r\n      Type: 'Page',\r\n      Parent: this.document._root.data.Pages,\r\n      MediaBox: [0, 0, this.width, this.height],\r\n      Contents: this.content,\r\n      Resources: this.resources\r\n    });\r\n\r\n    this.markings = [];\r\n  }\r\n\r\n  // Lazily create these objects\r\n  get fonts() {\r\n    const data = this.resources.data;\r\n    return data.Font != null ? data.Font : (data.Font = {});\r\n  }\r\n\r\n  get xobjects() {\r\n    const data = this.resources.data;\r\n    return data.XObject != null ? data.XObject : (data.XObject = {});\r\n  }\r\n\r\n  get ext_gstates() {\r\n    const data = this.resources.data;\r\n    return data.ExtGState != null ? data.ExtGState : (data.ExtGState = {});\r\n  }\r\n\r\n  get patterns() {\r\n    const data = this.resources.data;\r\n    return data.Pattern != null ? data.Pattern : (data.Pattern = {});\r\n  }\r\n\r\n  get colorSpaces() {\r\n    const data = this.resources.data;\r\n    return data.ColorSpace || (data.ColorSpace = {});\r\n  }\r\n\r\n  get annotations() {\r\n    const data = this.dictionary.data;\r\n    return data.Annots != null ? data.Annots : (data.Annots = []);\r\n  }\r\n\r\n  get structParentTreeKey() {\r\n    const data = this.dictionary.data;\r\n    return data.StructParents != null\r\n      ? data.StructParents\r\n      : (data.StructParents = this.document.createStructParentTreeNextKey());\r\n  }\r\n\r\n  maxY() {\r\n    return this.height - this.margins.bottom;\r\n  }\r\n\r\n  write(chunk) {\r\n    return this.content.write(chunk);\r\n  }\r\n\r\n  end() {\r\n    this.dictionary.end();\r\n    this.resources.end();\r\n    return this.content.end();\r\n  }\r\n}\r\n\r\nexport default PDFPage;\r\n","/*\r\nPDFNameTree - represents a name tree object\r\n*/\r\n\r\nimport PDFTree from \"./tree\";\r\n\r\nclass PDFNameTree extends PDFTree {\r\n  _compareKeys(a, b) {\r\n    return a.localeCompare(b);\r\n  }\r\n\r\n  _keysName() {\r\n    return \"Names\";\r\n  }\r\n\r\n  _dataForKey(k) {\r\n    return new String(k);\r\n  }\r\n}\r\n\r\nexport default PDFNameTree;\r\n","/**\r\n * Check if value is in a range group.\r\n * @param {number} value\r\n * @param {number[]} rangeGroup\r\n * @returns {boolean}\r\n */\r\nfunction inRange(value, rangeGroup) {\r\n  if (value < rangeGroup[0]) return false;\r\n  let startRange = 0;\r\n  let endRange = rangeGroup.length / 2;\r\n  while (startRange <= endRange) {\r\n    const middleRange = Math.floor((startRange + endRange) / 2);\r\n\r\n    // actual array index\r\n    const arrayIndex = middleRange * 2;\r\n\r\n    // Check if value is in range pointed by actual index\r\n    if (\r\n      value >= rangeGroup[arrayIndex] &&\r\n      value <= rangeGroup[arrayIndex + 1]\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    if (value > rangeGroup[arrayIndex + 1]) {\r\n      // Search Right Side Of Array\r\n      startRange = middleRange + 1;\r\n    } else {\r\n      // Search Left Side Of Array\r\n      endRange = middleRange - 1;\r\n    }\r\n  }\r\n  return false;\r\n}\r\n\r\nexport { inRange };\r\n","import { inRange } from './util';\r\n\r\n// prettier-ignore-start\r\n/**\r\n * A.1 Unassigned code points in Unicode 3.2\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-A.1\r\n */\r\nconst unassigned_code_points = [\r\n  0x0221,\r\n  0x0221,\r\n  0x0234,\r\n  0x024f,\r\n  0x02ae,\r\n  0x02af,\r\n  0x02ef,\r\n  0x02ff,\r\n  0x0350,\r\n  0x035f,\r\n  0x0370,\r\n  0x0373,\r\n  0x0376,\r\n  0x0379,\r\n  0x037b,\r\n  0x037d,\r\n  0x037f,\r\n  0x0383,\r\n  0x038b,\r\n  0x038b,\r\n  0x038d,\r\n  0x038d,\r\n  0x03a2,\r\n  0x03a2,\r\n  0x03cf,\r\n  0x03cf,\r\n  0x03f7,\r\n  0x03ff,\r\n  0x0487,\r\n  0x0487,\r\n  0x04cf,\r\n  0x04cf,\r\n  0x04f6,\r\n  0x04f7,\r\n  0x04fa,\r\n  0x04ff,\r\n  0x0510,\r\n  0x0530,\r\n  0x0557,\r\n  0x0558,\r\n  0x0560,\r\n  0x0560,\r\n  0x0588,\r\n  0x0588,\r\n  0x058b,\r\n  0x0590,\r\n  0x05a2,\r\n  0x05a2,\r\n  0x05ba,\r\n  0x05ba,\r\n  0x05c5,\r\n  0x05cf,\r\n  0x05eb,\r\n  0x05ef,\r\n  0x05f5,\r\n  0x060b,\r\n  0x060d,\r\n  0x061a,\r\n  0x061c,\r\n  0x061e,\r\n  0x0620,\r\n  0x0620,\r\n  0x063b,\r\n  0x063f,\r\n  0x0656,\r\n  0x065f,\r\n  0x06ee,\r\n  0x06ef,\r\n  0x06ff,\r\n  0x06ff,\r\n  0x070e,\r\n  0x070e,\r\n  0x072d,\r\n  0x072f,\r\n  0x074b,\r\n  0x077f,\r\n  0x07b2,\r\n  0x0900,\r\n  0x0904,\r\n  0x0904,\r\n  0x093a,\r\n  0x093b,\r\n  0x094e,\r\n  0x094f,\r\n  0x0955,\r\n  0x0957,\r\n  0x0971,\r\n  0x0980,\r\n  0x0984,\r\n  0x0984,\r\n  0x098d,\r\n  0x098e,\r\n  0x0991,\r\n  0x0992,\r\n  0x09a9,\r\n  0x09a9,\r\n  0x09b1,\r\n  0x09b1,\r\n  0x09b3,\r\n  0x09b5,\r\n  0x09ba,\r\n  0x09bb,\r\n  0x09bd,\r\n  0x09bd,\r\n  0x09c5,\r\n  0x09c6,\r\n  0x09c9,\r\n  0x09ca,\r\n  0x09ce,\r\n  0x09d6,\r\n  0x09d8,\r\n  0x09db,\r\n  0x09de,\r\n  0x09de,\r\n  0x09e4,\r\n  0x09e5,\r\n  0x09fb,\r\n  0x0a01,\r\n  0x0a03,\r\n  0x0a04,\r\n  0x0a0b,\r\n  0x0a0e,\r\n  0x0a11,\r\n  0x0a12,\r\n  0x0a29,\r\n  0x0a29,\r\n  0x0a31,\r\n  0x0a31,\r\n  0x0a34,\r\n  0x0a34,\r\n  0x0a37,\r\n  0x0a37,\r\n  0x0a3a,\r\n  0x0a3b,\r\n  0x0a3d,\r\n  0x0a3d,\r\n  0x0a43,\r\n  0x0a46,\r\n  0x0a49,\r\n  0x0a4a,\r\n  0x0a4e,\r\n  0x0a58,\r\n  0x0a5d,\r\n  0x0a5d,\r\n  0x0a5f,\r\n  0x0a65,\r\n  0x0a75,\r\n  0x0a80,\r\n  0x0a84,\r\n  0x0a84,\r\n  0x0a8c,\r\n  0x0a8c,\r\n  0x0a8e,\r\n  0x0a8e,\r\n  0x0a92,\r\n  0x0a92,\r\n  0x0aa9,\r\n  0x0aa9,\r\n  0x0ab1,\r\n  0x0ab1,\r\n  0x0ab4,\r\n  0x0ab4,\r\n  0x0aba,\r\n  0x0abb,\r\n  0x0ac6,\r\n  0x0ac6,\r\n  0x0aca,\r\n  0x0aca,\r\n  0x0ace,\r\n  0x0acf,\r\n  0x0ad1,\r\n  0x0adf,\r\n  0x0ae1,\r\n  0x0ae5,\r\n  0x0af0,\r\n  0x0b00,\r\n  0x0b04,\r\n  0x0b04,\r\n  0x0b0d,\r\n  0x0b0e,\r\n  0x0b11,\r\n  0x0b12,\r\n  0x0b29,\r\n  0x0b29,\r\n  0x0b31,\r\n  0x0b31,\r\n  0x0b34,\r\n  0x0b35,\r\n  0x0b3a,\r\n  0x0b3b,\r\n  0x0b44,\r\n  0x0b46,\r\n  0x0b49,\r\n  0x0b4a,\r\n  0x0b4e,\r\n  0x0b55,\r\n  0x0b58,\r\n  0x0b5b,\r\n  0x0b5e,\r\n  0x0b5e,\r\n  0x0b62,\r\n  0x0b65,\r\n  0x0b71,\r\n  0x0b81,\r\n  0x0b84,\r\n  0x0b84,\r\n  0x0b8b,\r\n  0x0b8d,\r\n  0x0b91,\r\n  0x0b91,\r\n  0x0b96,\r\n  0x0b98,\r\n  0x0b9b,\r\n  0x0b9b,\r\n  0x0b9d,\r\n  0x0b9d,\r\n  0x0ba0,\r\n  0x0ba2,\r\n  0x0ba5,\r\n  0x0ba7,\r\n  0x0bab,\r\n  0x0bad,\r\n  0x0bb6,\r\n  0x0bb6,\r\n  0x0bba,\r\n  0x0bbd,\r\n  0x0bc3,\r\n  0x0bc5,\r\n  0x0bc9,\r\n  0x0bc9,\r\n  0x0bce,\r\n  0x0bd6,\r\n  0x0bd8,\r\n  0x0be6,\r\n  0x0bf3,\r\n  0x0c00,\r\n  0x0c04,\r\n  0x0c04,\r\n  0x0c0d,\r\n  0x0c0d,\r\n  0x0c11,\r\n  0x0c11,\r\n  0x0c29,\r\n  0x0c29,\r\n  0x0c34,\r\n  0x0c34,\r\n  0x0c3a,\r\n  0x0c3d,\r\n  0x0c45,\r\n  0x0c45,\r\n  0x0c49,\r\n  0x0c49,\r\n  0x0c4e,\r\n  0x0c54,\r\n  0x0c57,\r\n  0x0c5f,\r\n  0x0c62,\r\n  0x0c65,\r\n  0x0c70,\r\n  0x0c81,\r\n  0x0c84,\r\n  0x0c84,\r\n  0x0c8d,\r\n  0x0c8d,\r\n  0x0c91,\r\n  0x0c91,\r\n  0x0ca9,\r\n  0x0ca9,\r\n  0x0cb4,\r\n  0x0cb4,\r\n  0x0cba,\r\n  0x0cbd,\r\n  0x0cc5,\r\n  0x0cc5,\r\n  0x0cc9,\r\n  0x0cc9,\r\n  0x0cce,\r\n  0x0cd4,\r\n  0x0cd7,\r\n  0x0cdd,\r\n  0x0cdf,\r\n  0x0cdf,\r\n  0x0ce2,\r\n  0x0ce5,\r\n  0x0cf0,\r\n  0x0d01,\r\n  0x0d04,\r\n  0x0d04,\r\n  0x0d0d,\r\n  0x0d0d,\r\n  0x0d11,\r\n  0x0d11,\r\n  0x0d29,\r\n  0x0d29,\r\n  0x0d3a,\r\n  0x0d3d,\r\n  0x0d44,\r\n  0x0d45,\r\n  0x0d49,\r\n  0x0d49,\r\n  0x0d4e,\r\n  0x0d56,\r\n  0x0d58,\r\n  0x0d5f,\r\n  0x0d62,\r\n  0x0d65,\r\n  0x0d70,\r\n  0x0d81,\r\n  0x0d84,\r\n  0x0d84,\r\n  0x0d97,\r\n  0x0d99,\r\n  0x0db2,\r\n  0x0db2,\r\n  0x0dbc,\r\n  0x0dbc,\r\n  0x0dbe,\r\n  0x0dbf,\r\n  0x0dc7,\r\n  0x0dc9,\r\n  0x0dcb,\r\n  0x0dce,\r\n  0x0dd5,\r\n  0x0dd5,\r\n  0x0dd7,\r\n  0x0dd7,\r\n  0x0de0,\r\n  0x0df1,\r\n  0x0df5,\r\n  0x0e00,\r\n  0x0e3b,\r\n  0x0e3e,\r\n  0x0e5c,\r\n  0x0e80,\r\n  0x0e83,\r\n  0x0e83,\r\n  0x0e85,\r\n  0x0e86,\r\n  0x0e89,\r\n  0x0e89,\r\n  0x0e8b,\r\n  0x0e8c,\r\n  0x0e8e,\r\n  0x0e93,\r\n  0x0e98,\r\n  0x0e98,\r\n  0x0ea0,\r\n  0x0ea0,\r\n  0x0ea4,\r\n  0x0ea4,\r\n  0x0ea6,\r\n  0x0ea6,\r\n  0x0ea8,\r\n  0x0ea9,\r\n  0x0eac,\r\n  0x0eac,\r\n  0x0eba,\r\n  0x0eba,\r\n  0x0ebe,\r\n  0x0ebf,\r\n  0x0ec5,\r\n  0x0ec5,\r\n  0x0ec7,\r\n  0x0ec7,\r\n  0x0ece,\r\n  0x0ecf,\r\n  0x0eda,\r\n  0x0edb,\r\n  0x0ede,\r\n  0x0eff,\r\n  0x0f48,\r\n  0x0f48,\r\n  0x0f6b,\r\n  0x0f70,\r\n  0x0f8c,\r\n  0x0f8f,\r\n  0x0f98,\r\n  0x0f98,\r\n  0x0fbd,\r\n  0x0fbd,\r\n  0x0fcd,\r\n  0x0fce,\r\n  0x0fd0,\r\n  0x0fff,\r\n  0x1022,\r\n  0x1022,\r\n  0x1028,\r\n  0x1028,\r\n  0x102b,\r\n  0x102b,\r\n  0x1033,\r\n  0x1035,\r\n  0x103a,\r\n  0x103f,\r\n  0x105a,\r\n  0x109f,\r\n  0x10c6,\r\n  0x10cf,\r\n  0x10f9,\r\n  0x10fa,\r\n  0x10fc,\r\n  0x10ff,\r\n  0x115a,\r\n  0x115e,\r\n  0x11a3,\r\n  0x11a7,\r\n  0x11fa,\r\n  0x11ff,\r\n  0x1207,\r\n  0x1207,\r\n  0x1247,\r\n  0x1247,\r\n  0x1249,\r\n  0x1249,\r\n  0x124e,\r\n  0x124f,\r\n  0x1257,\r\n  0x1257,\r\n  0x1259,\r\n  0x1259,\r\n  0x125e,\r\n  0x125f,\r\n  0x1287,\r\n  0x1287,\r\n  0x1289,\r\n  0x1289,\r\n  0x128e,\r\n  0x128f,\r\n  0x12af,\r\n  0x12af,\r\n  0x12b1,\r\n  0x12b1,\r\n  0x12b6,\r\n  0x12b7,\r\n  0x12bf,\r\n  0x12bf,\r\n  0x12c1,\r\n  0x12c1,\r\n  0x12c6,\r\n  0x12c7,\r\n  0x12cf,\r\n  0x12cf,\r\n  0x12d7,\r\n  0x12d7,\r\n  0x12ef,\r\n  0x12ef,\r\n  0x130f,\r\n  0x130f,\r\n  0x1311,\r\n  0x1311,\r\n  0x1316,\r\n  0x1317,\r\n  0x131f,\r\n  0x131f,\r\n  0x1347,\r\n  0x1347,\r\n  0x135b,\r\n  0x1360,\r\n  0x137d,\r\n  0x139f,\r\n  0x13f5,\r\n  0x1400,\r\n  0x1677,\r\n  0x167f,\r\n  0x169d,\r\n  0x169f,\r\n  0x16f1,\r\n  0x16ff,\r\n  0x170d,\r\n  0x170d,\r\n  0x1715,\r\n  0x171f,\r\n  0x1737,\r\n  0x173f,\r\n  0x1754,\r\n  0x175f,\r\n  0x176d,\r\n  0x176d,\r\n  0x1771,\r\n  0x1771,\r\n  0x1774,\r\n  0x177f,\r\n  0x17dd,\r\n  0x17df,\r\n  0x17ea,\r\n  0x17ff,\r\n  0x180f,\r\n  0x180f,\r\n  0x181a,\r\n  0x181f,\r\n  0x1878,\r\n  0x187f,\r\n  0x18aa,\r\n  0x1dff,\r\n  0x1e9c,\r\n  0x1e9f,\r\n  0x1efa,\r\n  0x1eff,\r\n  0x1f16,\r\n  0x1f17,\r\n  0x1f1e,\r\n  0x1f1f,\r\n  0x1f46,\r\n  0x1f47,\r\n  0x1f4e,\r\n  0x1f4f,\r\n  0x1f58,\r\n  0x1f58,\r\n  0x1f5a,\r\n  0x1f5a,\r\n  0x1f5c,\r\n  0x1f5c,\r\n  0x1f5e,\r\n  0x1f5e,\r\n  0x1f7e,\r\n  0x1f7f,\r\n  0x1fb5,\r\n  0x1fb5,\r\n  0x1fc5,\r\n  0x1fc5,\r\n  0x1fd4,\r\n  0x1fd5,\r\n  0x1fdc,\r\n  0x1fdc,\r\n  0x1ff0,\r\n  0x1ff1,\r\n  0x1ff5,\r\n  0x1ff5,\r\n  0x1fff,\r\n  0x1fff,\r\n  0x2053,\r\n  0x2056,\r\n  0x2058,\r\n  0x205e,\r\n  0x2064,\r\n  0x2069,\r\n  0x2072,\r\n  0x2073,\r\n  0x208f,\r\n  0x209f,\r\n  0x20b2,\r\n  0x20cf,\r\n  0x20eb,\r\n  0x20ff,\r\n  0x213b,\r\n  0x213c,\r\n  0x214c,\r\n  0x2152,\r\n  0x2184,\r\n  0x218f,\r\n  0x23cf,\r\n  0x23ff,\r\n  0x2427,\r\n  0x243f,\r\n  0x244b,\r\n  0x245f,\r\n  0x24ff,\r\n  0x24ff,\r\n  0x2614,\r\n  0x2615,\r\n  0x2618,\r\n  0x2618,\r\n  0x267e,\r\n  0x267f,\r\n  0x268a,\r\n  0x2700,\r\n  0x2705,\r\n  0x2705,\r\n  0x270a,\r\n  0x270b,\r\n  0x2728,\r\n  0x2728,\r\n  0x274c,\r\n  0x274c,\r\n  0x274e,\r\n  0x274e,\r\n  0x2753,\r\n  0x2755,\r\n  0x2757,\r\n  0x2757,\r\n  0x275f,\r\n  0x2760,\r\n  0x2795,\r\n  0x2797,\r\n  0x27b0,\r\n  0x27b0,\r\n  0x27bf,\r\n  0x27cf,\r\n  0x27ec,\r\n  0x27ef,\r\n  0x2b00,\r\n  0x2e7f,\r\n  0x2e9a,\r\n  0x2e9a,\r\n  0x2ef4,\r\n  0x2eff,\r\n  0x2fd6,\r\n  0x2fef,\r\n  0x2ffc,\r\n  0x2fff,\r\n  0x3040,\r\n  0x3040,\r\n  0x3097,\r\n  0x3098,\r\n  0x3100,\r\n  0x3104,\r\n  0x312d,\r\n  0x3130,\r\n  0x318f,\r\n  0x318f,\r\n  0x31b8,\r\n  0x31ef,\r\n  0x321d,\r\n  0x321f,\r\n  0x3244,\r\n  0x3250,\r\n  0x327c,\r\n  0x327e,\r\n  0x32cc,\r\n  0x32cf,\r\n  0x32ff,\r\n  0x32ff,\r\n  0x3377,\r\n  0x337a,\r\n  0x33de,\r\n  0x33df,\r\n  0x33ff,\r\n  0x33ff,\r\n  0x4db6,\r\n  0x4dff,\r\n  0x9fa6,\r\n  0x9fff,\r\n  0xa48d,\r\n  0xa48f,\r\n  0xa4c7,\r\n  0xabff,\r\n  0xd7a4,\r\n  0xd7ff,\r\n  0xfa2e,\r\n  0xfa2f,\r\n  0xfa6b,\r\n  0xfaff,\r\n  0xfb07,\r\n  0xfb12,\r\n  0xfb18,\r\n  0xfb1c,\r\n  0xfb37,\r\n  0xfb37,\r\n  0xfb3d,\r\n  0xfb3d,\r\n  0xfb3f,\r\n  0xfb3f,\r\n  0xfb42,\r\n  0xfb42,\r\n  0xfb45,\r\n  0xfb45,\r\n  0xfbb2,\r\n  0xfbd2,\r\n  0xfd40,\r\n  0xfd4f,\r\n  0xfd90,\r\n  0xfd91,\r\n  0xfdc8,\r\n  0xfdcf,\r\n  0xfdfd,\r\n  0xfdff,\r\n  0xfe10,\r\n  0xfe1f,\r\n  0xfe24,\r\n  0xfe2f,\r\n  0xfe47,\r\n  0xfe48,\r\n  0xfe53,\r\n  0xfe53,\r\n  0xfe67,\r\n  0xfe67,\r\n  0xfe6c,\r\n  0xfe6f,\r\n  0xfe75,\r\n  0xfe75,\r\n  0xfefd,\r\n  0xfefe,\r\n  0xff00,\r\n  0xff00,\r\n  0xffbf,\r\n  0xffc1,\r\n  0xffc8,\r\n  0xffc9,\r\n  0xffd0,\r\n  0xffd1,\r\n  0xffd8,\r\n  0xffd9,\r\n  0xffdd,\r\n  0xffdf,\r\n  0xffe7,\r\n  0xffe7,\r\n  0xffef,\r\n  0xfff8,\r\n  0x10000,\r\n  0x102ff,\r\n  0x1031f,\r\n  0x1031f,\r\n  0x10324,\r\n  0x1032f,\r\n  0x1034b,\r\n  0x103ff,\r\n  0x10426,\r\n  0x10427,\r\n  0x1044e,\r\n  0x1cfff,\r\n  0x1d0f6,\r\n  0x1d0ff,\r\n  0x1d127,\r\n  0x1d129,\r\n  0x1d1de,\r\n  0x1d3ff,\r\n  0x1d455,\r\n  0x1d455,\r\n  0x1d49d,\r\n  0x1d49d,\r\n  0x1d4a0,\r\n  0x1d4a1,\r\n  0x1d4a3,\r\n  0x1d4a4,\r\n  0x1d4a7,\r\n  0x1d4a8,\r\n  0x1d4ad,\r\n  0x1d4ad,\r\n  0x1d4ba,\r\n  0x1d4ba,\r\n  0x1d4bc,\r\n  0x1d4bc,\r\n  0x1d4c1,\r\n  0x1d4c1,\r\n  0x1d4c4,\r\n  0x1d4c4,\r\n  0x1d506,\r\n  0x1d506,\r\n  0x1d50b,\r\n  0x1d50c,\r\n  0x1d515,\r\n  0x1d515,\r\n  0x1d51d,\r\n  0x1d51d,\r\n  0x1d53a,\r\n  0x1d53a,\r\n  0x1d53f,\r\n  0x1d53f,\r\n  0x1d545,\r\n  0x1d545,\r\n  0x1d547,\r\n  0x1d549,\r\n  0x1d551,\r\n  0x1d551,\r\n  0x1d6a4,\r\n  0x1d6a7,\r\n  0x1d7ca,\r\n  0x1d7cd,\r\n  0x1d800,\r\n  0x1fffd,\r\n  0x2a6d7,\r\n  0x2f7ff,\r\n  0x2fa1e,\r\n  0x2fffd,\r\n  0x30000,\r\n  0x3fffd,\r\n  0x40000,\r\n  0x4fffd,\r\n  0x50000,\r\n  0x5fffd,\r\n  0x60000,\r\n  0x6fffd,\r\n  0x70000,\r\n  0x7fffd,\r\n  0x80000,\r\n  0x8fffd,\r\n  0x90000,\r\n  0x9fffd,\r\n  0xa0000,\r\n  0xafffd,\r\n  0xb0000,\r\n  0xbfffd,\r\n  0xc0000,\r\n  0xcfffd,\r\n  0xd0000,\r\n  0xdfffd,\r\n  0xe0000,\r\n  0xe0000,\r\n  0xe0002,\r\n  0xe001f,\r\n  0xe0080,\r\n  0xefffd\r\n];\r\n// prettier-ignore-end\r\n\r\nconst isUnassignedCodePoint = character =>\r\n  inRange(character, unassigned_code_points);\r\n\r\n// prettier-ignore-start\r\n/**\r\n * B.1 Commonly mapped to nothing\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-B.1\r\n */\r\nconst commonly_mapped_to_nothing = [\r\n  0x00ad,\r\n  0x00ad,\r\n  0x034f,\r\n  0x034f,\r\n  0x1806,\r\n  0x1806,\r\n  0x180b,\r\n  0x180b,\r\n  0x180c,\r\n  0x180c,\r\n  0x180d,\r\n  0x180d,\r\n  0x200b,\r\n  0x200b,\r\n  0x200c,\r\n  0x200c,\r\n  0x200d,\r\n  0x200d,\r\n  0x2060,\r\n  0x2060,\r\n  0xfe00,\r\n  0xfe00,\r\n  0xfe01,\r\n  0xfe01,\r\n  0xfe02,\r\n  0xfe02,\r\n  0xfe03,\r\n  0xfe03,\r\n  0xfe04,\r\n  0xfe04,\r\n  0xfe05,\r\n  0xfe05,\r\n  0xfe06,\r\n  0xfe06,\r\n  0xfe07,\r\n  0xfe07,\r\n  0xfe08,\r\n  0xfe08,\r\n  0xfe09,\r\n  0xfe09,\r\n  0xfe0a,\r\n  0xfe0a,\r\n  0xfe0b,\r\n  0xfe0b,\r\n  0xfe0c,\r\n  0xfe0c,\r\n  0xfe0d,\r\n  0xfe0d,\r\n  0xfe0e,\r\n  0xfe0e,\r\n  0xfe0f,\r\n  0xfe0f,\r\n  0xfeff,\r\n  0xfeff\r\n];\r\n// prettier-ignore-end\r\n\r\nconst isCommonlyMappedToNothing = character =>\r\n  inRange(character, commonly_mapped_to_nothing);\r\n\r\n// prettier-ignore-start\r\n/**\r\n * C.1.2 Non-ASCII space characters\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.1.2\r\n */\r\nconst non_ASCII_space_characters = [\r\n  0x00a0,\r\n  0x00a0 /* NO-BREAK SPACE */,\r\n  0x1680,\r\n  0x1680 /* OGHAM SPACE MARK */,\r\n  0x2000,\r\n  0x2000 /* EN QUAD */,\r\n  0x2001,\r\n  0x2001 /* EM QUAD */,\r\n  0x2002,\r\n  0x2002 /* EN SPACE */,\r\n  0x2003,\r\n  0x2003 /* EM SPACE */,\r\n  0x2004,\r\n  0x2004 /* THREE-PER-EM SPACE */,\r\n  0x2005,\r\n  0x2005 /* FOUR-PER-EM SPACE */,\r\n  0x2006,\r\n  0x2006 /* SIX-PER-EM SPACE */,\r\n  0x2007,\r\n  0x2007 /* FIGURE SPACE */,\r\n  0x2008,\r\n  0x2008 /* PUNCTUATION SPACE */,\r\n  0x2009,\r\n  0x2009 /* THIN SPACE */,\r\n  0x200a,\r\n  0x200a /* HAIR SPACE */,\r\n  0x200b,\r\n  0x200b /* ZERO WIDTH SPACE */,\r\n  0x202f,\r\n  0x202f /* NARROW NO-BREAK SPACE */,\r\n  0x205f,\r\n  0x205f /* MEDIUM MATHEMATICAL SPACE */,\r\n  0x3000,\r\n  0x3000 /* IDEOGRAPHIC SPACE */\r\n];\r\n// prettier-ignore-end\r\n\r\nconst isNonASCIISpaceCharacter = character =>\r\n  inRange(character, non_ASCII_space_characters);\r\n\r\n// prettier-ignore-start\r\nconst non_ASCII_controls_characters = [\r\n  /**\r\n   * C.2.2 Non-ASCII control characters\r\n   * @link https://tools.ietf.org/html/rfc3454#appendix-C.2.2\r\n   */\r\n  0x0080,\r\n  0x009f /* [CONTROL CHARACTERS] */,\r\n  0x06dd,\r\n  0x06dd /* ARABIC END OF AYAH */,\r\n  0x070f,\r\n  0x070f /* SYRIAC ABBREVIATION MARK */,\r\n  0x180e,\r\n  0x180e /* MONGOLIAN VOWEL SEPARATOR */,\r\n  0x200c,\r\n  0x200c /* ZERO WIDTH NON-JOINER */,\r\n  0x200d,\r\n  0x200d /* ZERO WIDTH JOINER */,\r\n  0x2028,\r\n  0x2028 /* LINE SEPARATOR */,\r\n  0x2029,\r\n  0x2029 /* PARAGRAPH SEPARATOR */,\r\n  0x2060,\r\n  0x2060 /* WORD JOINER */,\r\n  0x2061,\r\n  0x2061 /* FUNCTION APPLICATION */,\r\n  0x2062,\r\n  0x2062 /* INVISIBLE TIMES */,\r\n  0x2063,\r\n  0x2063 /* INVISIBLE SEPARATOR */,\r\n  0x206a,\r\n  0x206f /* [CONTROL CHARACTERS] */,\r\n  0xfeff,\r\n  0xfeff /* ZERO WIDTH NO-BREAK SPACE */,\r\n  0xfff9,\r\n  0xfffc /* [CONTROL CHARACTERS] */,\r\n  0x1d173,\r\n  0x1d17a /* [MUSICAL CONTROL CHARACTERS] */\r\n];\r\n\r\nconst non_character_codepoints = [\r\n  /**\r\n   * C.4 Non-character code points\r\n   * @link https://tools.ietf.org/html/rfc3454#appendix-C.4\r\n   */\r\n  0xfdd0,\r\n  0xfdef /* [NONCHARACTER CODE POINTS] */,\r\n  0xfffe,\r\n  0xffff /* [NONCHARACTER CODE POINTS] */,\r\n  0x1fffe,\r\n  0x1ffff /* [NONCHARACTER CODE POINTS] */,\r\n  0x2fffe,\r\n  0x2ffff /* [NONCHARACTER CODE POINTS] */,\r\n  0x3fffe,\r\n  0x3ffff /* [NONCHARACTER CODE POINTS] */,\r\n  0x4fffe,\r\n  0x4ffff /* [NONCHARACTER CODE POINTS] */,\r\n  0x5fffe,\r\n  0x5ffff /* [NONCHARACTER CODE POINTS] */,\r\n  0x6fffe,\r\n  0x6ffff /* [NONCHARACTER CODE POINTS] */,\r\n  0x7fffe,\r\n  0x7ffff /* [NONCHARACTER CODE POINTS] */,\r\n  0x8fffe,\r\n  0x8ffff /* [NONCHARACTER CODE POINTS] */,\r\n  0x9fffe,\r\n  0x9ffff /* [NONCHARACTER CODE POINTS] */,\r\n  0xafffe,\r\n  0xaffff /* [NONCHARACTER CODE POINTS] */,\r\n  0xbfffe,\r\n  0xbffff /* [NONCHARACTER CODE POINTS] */,\r\n  0xcfffe,\r\n  0xcffff /* [NONCHARACTER CODE POINTS] */,\r\n  0xdfffe,\r\n  0xdffff /* [NONCHARACTER CODE POINTS] */,\r\n  0xefffe,\r\n  0xeffff /* [NONCHARACTER CODE POINTS] */,\r\n  0x10fffe,\r\n  0x10ffff /* [NONCHARACTER CODE POINTS] */\r\n];\r\n\r\n/**\r\n * 2.3.  Prohibited Output\r\n */\r\nconst prohibited_characters = [\r\n  /**\r\n   * C.2.1 ASCII control characters\r\n   * @link https://tools.ietf.org/html/rfc3454#appendix-C.2.1\r\n   */\r\n  0,\r\n  0x001f /* [CONTROL CHARACTERS] */,\r\n  0x007f,\r\n  0x007f /* DELETE */,\r\n\r\n  /**\r\n   * C.8 Change display properties or are deprecated\r\n   * @link https://tools.ietf.org/html/rfc3454#appendix-C.8\r\n   */\r\n  0x0340,\r\n  0x0340 /* COMBINING GRAVE TONE MARK */,\r\n  0x0341,\r\n  0x0341 /* COMBINING ACUTE TONE MARK */,\r\n  0x200e,\r\n  0x200e /* LEFT-TO-RIGHT MARK */,\r\n  0x200f,\r\n  0x200f /* RIGHT-TO-LEFT MARK */,\r\n  0x202a,\r\n  0x202a /* LEFT-TO-RIGHT EMBEDDING */,\r\n  0x202b,\r\n  0x202b /* RIGHT-TO-LEFT EMBEDDING */,\r\n  0x202c,\r\n  0x202c /* POP DIRECTIONAL FORMATTING */,\r\n  0x202d,\r\n  0x202d /* LEFT-TO-RIGHT OVERRIDE */,\r\n  0x202e,\r\n  0x202e /* RIGHT-TO-LEFT OVERRIDE */,\r\n  0x206a,\r\n  0x206a /* INHIBIT SYMMETRIC SWAPPING */,\r\n  0x206b,\r\n  0x206b /* ACTIVATE SYMMETRIC SWAPPING */,\r\n  0x206c,\r\n  0x206c /* INHIBIT ARABIC FORM SHAPING */,\r\n  0x206d,\r\n  0x206d /* ACTIVATE ARABIC FORM SHAPING */,\r\n  0x206e,\r\n  0x206e /* NATIONAL DIGIT SHAPES */,\r\n  0x206f,\r\n  0x206f /* NOMINAL DIGIT SHAPES */,\r\n\r\n  /**\r\n   * C.7 Inappropriate for canonical representation\r\n   * @link https://tools.ietf.org/html/rfc3454#appendix-C.7\r\n   */\r\n  0x2ff0,\r\n  0x2ffb /* [IDEOGRAPHIC DESCRIPTION CHARACTERS] */,\r\n\r\n  /**\r\n   * C.5 Surrogate codes\r\n   * @link https://tools.ietf.org/html/rfc3454#appendix-C.5\r\n   */\r\n  0xd800,\r\n  0xdfff,\r\n\r\n  /**\r\n   * C.3 Private use\r\n   * @link https://tools.ietf.org/html/rfc3454#appendix-C.3\r\n   */\r\n  0xe000,\r\n  0xf8ff /* [PRIVATE USE, PLANE 0] */,\r\n\r\n  /**\r\n   * C.6 Inappropriate for plain text\r\n   * @link https://tools.ietf.org/html/rfc3454#appendix-C.6\r\n   */\r\n  0xfff9,\r\n  0xfff9 /* INTERLINEAR ANNOTATION ANCHOR */,\r\n  0xfffa,\r\n  0xfffa /* INTERLINEAR ANNOTATION SEPARATOR */,\r\n  0xfffb,\r\n  0xfffb /* INTERLINEAR ANNOTATION TERMINATOR */,\r\n  0xfffc,\r\n  0xfffc /* OBJECT REPLACEMENT CHARACTER */,\r\n  0xfffd,\r\n  0xfffd /* REPLACEMENT CHARACTER */,\r\n\r\n  /**\r\n   * C.9 Tagging characters\r\n   * @link https://tools.ietf.org/html/rfc3454#appendix-C.9\r\n   */\r\n  0xe0001,\r\n  0xe0001 /* LANGUAGE TAG */,\r\n  0xe0020,\r\n  0xe007f /* [TAGGING CHARACTERS] */,\r\n\r\n  /**\r\n   * C.3 Private use\r\n   * @link https://tools.ietf.org/html/rfc3454#appendix-C.3\r\n   */\r\n\r\n  0xf0000,\r\n  0xffffd /* [PRIVATE USE, PLANE 15] */,\r\n  0x100000,\r\n  0x10fffd /* [PRIVATE USE, PLANE 16] */\r\n];\r\n// prettier-ignore-end\r\n\r\nconst isProhibitedCharacter = character =>\r\n  inRange(character, non_ASCII_space_characters) ||\r\n  inRange(character, prohibited_characters) ||\r\n  inRange(character, non_ASCII_controls_characters) ||\r\n  inRange(character, non_character_codepoints);\r\n\r\n// prettier-ignore-start\r\n/**\r\n * D.1 Characters with bidirectional property \"R\" or \"AL\"\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-D.1\r\n */\r\nconst bidirectional_r_al = [\r\n  0x05be,\r\n  0x05be,\r\n  0x05c0,\r\n  0x05c0,\r\n  0x05c3,\r\n  0x05c3,\r\n  0x05d0,\r\n  0x05ea,\r\n  0x05f0,\r\n  0x05f4,\r\n  0x061b,\r\n  0x061b,\r\n  0x061f,\r\n  0x061f,\r\n  0x0621,\r\n  0x063a,\r\n  0x0640,\r\n  0x064a,\r\n  0x066d,\r\n  0x066f,\r\n  0x0671,\r\n  0x06d5,\r\n  0x06dd,\r\n  0x06dd,\r\n  0x06e5,\r\n  0x06e6,\r\n  0x06fa,\r\n  0x06fe,\r\n  0x0700,\r\n  0x070d,\r\n  0x0710,\r\n  0x0710,\r\n  0x0712,\r\n  0x072c,\r\n  0x0780,\r\n  0x07a5,\r\n  0x07b1,\r\n  0x07b1,\r\n  0x200f,\r\n  0x200f,\r\n  0xfb1d,\r\n  0xfb1d,\r\n  0xfb1f,\r\n  0xfb28,\r\n  0xfb2a,\r\n  0xfb36,\r\n  0xfb38,\r\n  0xfb3c,\r\n  0xfb3e,\r\n  0xfb3e,\r\n  0xfb40,\r\n  0xfb41,\r\n  0xfb43,\r\n  0xfb44,\r\n  0xfb46,\r\n  0xfbb1,\r\n  0xfbd3,\r\n  0xfd3d,\r\n  0xfd50,\r\n  0xfd8f,\r\n  0xfd92,\r\n  0xfdc7,\r\n  0xfdf0,\r\n  0xfdfc,\r\n  0xfe70,\r\n  0xfe74,\r\n  0xfe76,\r\n  0xfefc\r\n];\r\n// prettier-ignore-end\r\n\r\nconst isBidirectionalRAL = character => inRange(character, bidirectional_r_al);\r\n\r\n// prettier-ignore-start\r\n/**\r\n * D.2 Characters with bidirectional property \"L\"\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-D.2\r\n */\r\nconst bidirectional_l = [\r\n  0x0041,\r\n  0x005a,\r\n  0x0061,\r\n  0x007a,\r\n  0x00aa,\r\n  0x00aa,\r\n  0x00b5,\r\n  0x00b5,\r\n  0x00ba,\r\n  0x00ba,\r\n  0x00c0,\r\n  0x00d6,\r\n  0x00d8,\r\n  0x00f6,\r\n  0x00f8,\r\n  0x0220,\r\n  0x0222,\r\n  0x0233,\r\n  0x0250,\r\n  0x02ad,\r\n  0x02b0,\r\n  0x02b8,\r\n  0x02bb,\r\n  0x02c1,\r\n  0x02d0,\r\n  0x02d1,\r\n  0x02e0,\r\n  0x02e4,\r\n  0x02ee,\r\n  0x02ee,\r\n  0x037a,\r\n  0x037a,\r\n  0x0386,\r\n  0x0386,\r\n  0x0388,\r\n  0x038a,\r\n  0x038c,\r\n  0x038c,\r\n  0x038e,\r\n  0x03a1,\r\n  0x03a3,\r\n  0x03ce,\r\n  0x03d0,\r\n  0x03f5,\r\n  0x0400,\r\n  0x0482,\r\n  0x048a,\r\n  0x04ce,\r\n  0x04d0,\r\n  0x04f5,\r\n  0x04f8,\r\n  0x04f9,\r\n  0x0500,\r\n  0x050f,\r\n  0x0531,\r\n  0x0556,\r\n  0x0559,\r\n  0x055f,\r\n  0x0561,\r\n  0x0587,\r\n  0x0589,\r\n  0x0589,\r\n  0x0903,\r\n  0x0903,\r\n  0x0905,\r\n  0x0939,\r\n  0x093d,\r\n  0x0940,\r\n  0x0949,\r\n  0x094c,\r\n  0x0950,\r\n  0x0950,\r\n  0x0958,\r\n  0x0961,\r\n  0x0964,\r\n  0x0970,\r\n  0x0982,\r\n  0x0983,\r\n  0x0985,\r\n  0x098c,\r\n  0x098f,\r\n  0x0990,\r\n  0x0993,\r\n  0x09a8,\r\n  0x09aa,\r\n  0x09b0,\r\n  0x09b2,\r\n  0x09b2,\r\n  0x09b6,\r\n  0x09b9,\r\n  0x09be,\r\n  0x09c0,\r\n  0x09c7,\r\n  0x09c8,\r\n  0x09cb,\r\n  0x09cc,\r\n  0x09d7,\r\n  0x09d7,\r\n  0x09dc,\r\n  0x09dd,\r\n  0x09df,\r\n  0x09e1,\r\n  0x09e6,\r\n  0x09f1,\r\n  0x09f4,\r\n  0x09fa,\r\n  0x0a05,\r\n  0x0a0a,\r\n  0x0a0f,\r\n  0x0a10,\r\n  0x0a13,\r\n  0x0a28,\r\n  0x0a2a,\r\n  0x0a30,\r\n  0x0a32,\r\n  0x0a33,\r\n  0x0a35,\r\n  0x0a36,\r\n  0x0a38,\r\n  0x0a39,\r\n  0x0a3e,\r\n  0x0a40,\r\n  0x0a59,\r\n  0x0a5c,\r\n  0x0a5e,\r\n  0x0a5e,\r\n  0x0a66,\r\n  0x0a6f,\r\n  0x0a72,\r\n  0x0a74,\r\n  0x0a83,\r\n  0x0a83,\r\n  0x0a85,\r\n  0x0a8b,\r\n  0x0a8d,\r\n  0x0a8d,\r\n  0x0a8f,\r\n  0x0a91,\r\n  0x0a93,\r\n  0x0aa8,\r\n  0x0aaa,\r\n  0x0ab0,\r\n  0x0ab2,\r\n  0x0ab3,\r\n  0x0ab5,\r\n  0x0ab9,\r\n  0x0abd,\r\n  0x0ac0,\r\n  0x0ac9,\r\n  0x0ac9,\r\n  0x0acb,\r\n  0x0acc,\r\n  0x0ad0,\r\n  0x0ad0,\r\n  0x0ae0,\r\n  0x0ae0,\r\n  0x0ae6,\r\n  0x0aef,\r\n  0x0b02,\r\n  0x0b03,\r\n  0x0b05,\r\n  0x0b0c,\r\n  0x0b0f,\r\n  0x0b10,\r\n  0x0b13,\r\n  0x0b28,\r\n  0x0b2a,\r\n  0x0b30,\r\n  0x0b32,\r\n  0x0b33,\r\n  0x0b36,\r\n  0x0b39,\r\n  0x0b3d,\r\n  0x0b3e,\r\n  0x0b40,\r\n  0x0b40,\r\n  0x0b47,\r\n  0x0b48,\r\n  0x0b4b,\r\n  0x0b4c,\r\n  0x0b57,\r\n  0x0b57,\r\n  0x0b5c,\r\n  0x0b5d,\r\n  0x0b5f,\r\n  0x0b61,\r\n  0x0b66,\r\n  0x0b70,\r\n  0x0b83,\r\n  0x0b83,\r\n  0x0b85,\r\n  0x0b8a,\r\n  0x0b8e,\r\n  0x0b90,\r\n  0x0b92,\r\n  0x0b95,\r\n  0x0b99,\r\n  0x0b9a,\r\n  0x0b9c,\r\n  0x0b9c,\r\n  0x0b9e,\r\n  0x0b9f,\r\n  0x0ba3,\r\n  0x0ba4,\r\n  0x0ba8,\r\n  0x0baa,\r\n  0x0bae,\r\n  0x0bb5,\r\n  0x0bb7,\r\n  0x0bb9,\r\n  0x0bbe,\r\n  0x0bbf,\r\n  0x0bc1,\r\n  0x0bc2,\r\n  0x0bc6,\r\n  0x0bc8,\r\n  0x0bca,\r\n  0x0bcc,\r\n  0x0bd7,\r\n  0x0bd7,\r\n  0x0be7,\r\n  0x0bf2,\r\n  0x0c01,\r\n  0x0c03,\r\n  0x0c05,\r\n  0x0c0c,\r\n  0x0c0e,\r\n  0x0c10,\r\n  0x0c12,\r\n  0x0c28,\r\n  0x0c2a,\r\n  0x0c33,\r\n  0x0c35,\r\n  0x0c39,\r\n  0x0c41,\r\n  0x0c44,\r\n  0x0c60,\r\n  0x0c61,\r\n  0x0c66,\r\n  0x0c6f,\r\n  0x0c82,\r\n  0x0c83,\r\n  0x0c85,\r\n  0x0c8c,\r\n  0x0c8e,\r\n  0x0c90,\r\n  0x0c92,\r\n  0x0ca8,\r\n  0x0caa,\r\n  0x0cb3,\r\n  0x0cb5,\r\n  0x0cb9,\r\n  0x0cbe,\r\n  0x0cbe,\r\n  0x0cc0,\r\n  0x0cc4,\r\n  0x0cc7,\r\n  0x0cc8,\r\n  0x0cca,\r\n  0x0ccb,\r\n  0x0cd5,\r\n  0x0cd6,\r\n  0x0cde,\r\n  0x0cde,\r\n  0x0ce0,\r\n  0x0ce1,\r\n  0x0ce6,\r\n  0x0cef,\r\n  0x0d02,\r\n  0x0d03,\r\n  0x0d05,\r\n  0x0d0c,\r\n  0x0d0e,\r\n  0x0d10,\r\n  0x0d12,\r\n  0x0d28,\r\n  0x0d2a,\r\n  0x0d39,\r\n  0x0d3e,\r\n  0x0d40,\r\n  0x0d46,\r\n  0x0d48,\r\n  0x0d4a,\r\n  0x0d4c,\r\n  0x0d57,\r\n  0x0d57,\r\n  0x0d60,\r\n  0x0d61,\r\n  0x0d66,\r\n  0x0d6f,\r\n  0x0d82,\r\n  0x0d83,\r\n  0x0d85,\r\n  0x0d96,\r\n  0x0d9a,\r\n  0x0db1,\r\n  0x0db3,\r\n  0x0dbb,\r\n  0x0dbd,\r\n  0x0dbd,\r\n  0x0dc0,\r\n  0x0dc6,\r\n  0x0dcf,\r\n  0x0dd1,\r\n  0x0dd8,\r\n  0x0ddf,\r\n  0x0df2,\r\n  0x0df4,\r\n  0x0e01,\r\n  0x0e30,\r\n  0x0e32,\r\n  0x0e33,\r\n  0x0e40,\r\n  0x0e46,\r\n  0x0e4f,\r\n  0x0e5b,\r\n  0x0e81,\r\n  0x0e82,\r\n  0x0e84,\r\n  0x0e84,\r\n  0x0e87,\r\n  0x0e88,\r\n  0x0e8a,\r\n  0x0e8a,\r\n  0x0e8d,\r\n  0x0e8d,\r\n  0x0e94,\r\n  0x0e97,\r\n  0x0e99,\r\n  0x0e9f,\r\n  0x0ea1,\r\n  0x0ea3,\r\n  0x0ea5,\r\n  0x0ea5,\r\n  0x0ea7,\r\n  0x0ea7,\r\n  0x0eaa,\r\n  0x0eab,\r\n  0x0ead,\r\n  0x0eb0,\r\n  0x0eb2,\r\n  0x0eb3,\r\n  0x0ebd,\r\n  0x0ebd,\r\n  0x0ec0,\r\n  0x0ec4,\r\n  0x0ec6,\r\n  0x0ec6,\r\n  0x0ed0,\r\n  0x0ed9,\r\n  0x0edc,\r\n  0x0edd,\r\n  0x0f00,\r\n  0x0f17,\r\n  0x0f1a,\r\n  0x0f34,\r\n  0x0f36,\r\n  0x0f36,\r\n  0x0f38,\r\n  0x0f38,\r\n  0x0f3e,\r\n  0x0f47,\r\n  0x0f49,\r\n  0x0f6a,\r\n  0x0f7f,\r\n  0x0f7f,\r\n  0x0f85,\r\n  0x0f85,\r\n  0x0f88,\r\n  0x0f8b,\r\n  0x0fbe,\r\n  0x0fc5,\r\n  0x0fc7,\r\n  0x0fcc,\r\n  0x0fcf,\r\n  0x0fcf,\r\n  0x1000,\r\n  0x1021,\r\n  0x1023,\r\n  0x1027,\r\n  0x1029,\r\n  0x102a,\r\n  0x102c,\r\n  0x102c,\r\n  0x1031,\r\n  0x1031,\r\n  0x1038,\r\n  0x1038,\r\n  0x1040,\r\n  0x1057,\r\n  0x10a0,\r\n  0x10c5,\r\n  0x10d0,\r\n  0x10f8,\r\n  0x10fb,\r\n  0x10fb,\r\n  0x1100,\r\n  0x1159,\r\n  0x115f,\r\n  0x11a2,\r\n  0x11a8,\r\n  0x11f9,\r\n  0x1200,\r\n  0x1206,\r\n  0x1208,\r\n  0x1246,\r\n  0x1248,\r\n  0x1248,\r\n  0x124a,\r\n  0x124d,\r\n  0x1250,\r\n  0x1256,\r\n  0x1258,\r\n  0x1258,\r\n  0x125a,\r\n  0x125d,\r\n  0x1260,\r\n  0x1286,\r\n  0x1288,\r\n  0x1288,\r\n  0x128a,\r\n  0x128d,\r\n  0x1290,\r\n  0x12ae,\r\n  0x12b0,\r\n  0x12b0,\r\n  0x12b2,\r\n  0x12b5,\r\n  0x12b8,\r\n  0x12be,\r\n  0x12c0,\r\n  0x12c0,\r\n  0x12c2,\r\n  0x12c5,\r\n  0x12c8,\r\n  0x12ce,\r\n  0x12d0,\r\n  0x12d6,\r\n  0x12d8,\r\n  0x12ee,\r\n  0x12f0,\r\n  0x130e,\r\n  0x1310,\r\n  0x1310,\r\n  0x1312,\r\n  0x1315,\r\n  0x1318,\r\n  0x131e,\r\n  0x1320,\r\n  0x1346,\r\n  0x1348,\r\n  0x135a,\r\n  0x1361,\r\n  0x137c,\r\n  0x13a0,\r\n  0x13f4,\r\n  0x1401,\r\n  0x1676,\r\n  0x1681,\r\n  0x169a,\r\n  0x16a0,\r\n  0x16f0,\r\n  0x1700,\r\n  0x170c,\r\n  0x170e,\r\n  0x1711,\r\n  0x1720,\r\n  0x1731,\r\n  0x1735,\r\n  0x1736,\r\n  0x1740,\r\n  0x1751,\r\n  0x1760,\r\n  0x176c,\r\n  0x176e,\r\n  0x1770,\r\n  0x1780,\r\n  0x17b6,\r\n  0x17be,\r\n  0x17c5,\r\n  0x17c7,\r\n  0x17c8,\r\n  0x17d4,\r\n  0x17da,\r\n  0x17dc,\r\n  0x17dc,\r\n  0x17e0,\r\n  0x17e9,\r\n  0x1810,\r\n  0x1819,\r\n  0x1820,\r\n  0x1877,\r\n  0x1880,\r\n  0x18a8,\r\n  0x1e00,\r\n  0x1e9b,\r\n  0x1ea0,\r\n  0x1ef9,\r\n  0x1f00,\r\n  0x1f15,\r\n  0x1f18,\r\n  0x1f1d,\r\n  0x1f20,\r\n  0x1f45,\r\n  0x1f48,\r\n  0x1f4d,\r\n  0x1f50,\r\n  0x1f57,\r\n  0x1f59,\r\n  0x1f59,\r\n  0x1f5b,\r\n  0x1f5b,\r\n  0x1f5d,\r\n  0x1f5d,\r\n  0x1f5f,\r\n  0x1f7d,\r\n  0x1f80,\r\n  0x1fb4,\r\n  0x1fb6,\r\n  0x1fbc,\r\n  0x1fbe,\r\n  0x1fbe,\r\n  0x1fc2,\r\n  0x1fc4,\r\n  0x1fc6,\r\n  0x1fcc,\r\n  0x1fd0,\r\n  0x1fd3,\r\n  0x1fd6,\r\n  0x1fdb,\r\n  0x1fe0,\r\n  0x1fec,\r\n  0x1ff2,\r\n  0x1ff4,\r\n  0x1ff6,\r\n  0x1ffc,\r\n  0x200e,\r\n  0x200e,\r\n  0x2071,\r\n  0x2071,\r\n  0x207f,\r\n  0x207f,\r\n  0x2102,\r\n  0x2102,\r\n  0x2107,\r\n  0x2107,\r\n  0x210a,\r\n  0x2113,\r\n  0x2115,\r\n  0x2115,\r\n  0x2119,\r\n  0x211d,\r\n  0x2124,\r\n  0x2124,\r\n  0x2126,\r\n  0x2126,\r\n  0x2128,\r\n  0x2128,\r\n  0x212a,\r\n  0x212d,\r\n  0x212f,\r\n  0x2131,\r\n  0x2133,\r\n  0x2139,\r\n  0x213d,\r\n  0x213f,\r\n  0x2145,\r\n  0x2149,\r\n  0x2160,\r\n  0x2183,\r\n  0x2336,\r\n  0x237a,\r\n  0x2395,\r\n  0x2395,\r\n  0x249c,\r\n  0x24e9,\r\n  0x3005,\r\n  0x3007,\r\n  0x3021,\r\n  0x3029,\r\n  0x3031,\r\n  0x3035,\r\n  0x3038,\r\n  0x303c,\r\n  0x3041,\r\n  0x3096,\r\n  0x309d,\r\n  0x309f,\r\n  0x30a1,\r\n  0x30fa,\r\n  0x30fc,\r\n  0x30ff,\r\n  0x3105,\r\n  0x312c,\r\n  0x3131,\r\n  0x318e,\r\n  0x3190,\r\n  0x31b7,\r\n  0x31f0,\r\n  0x321c,\r\n  0x3220,\r\n  0x3243,\r\n  0x3260,\r\n  0x327b,\r\n  0x327f,\r\n  0x32b0,\r\n  0x32c0,\r\n  0x32cb,\r\n  0x32d0,\r\n  0x32fe,\r\n  0x3300,\r\n  0x3376,\r\n  0x337b,\r\n  0x33dd,\r\n  0x33e0,\r\n  0x33fe,\r\n  0x3400,\r\n  0x4db5,\r\n  0x4e00,\r\n  0x9fa5,\r\n  0xa000,\r\n  0xa48c,\r\n  0xac00,\r\n  0xd7a3,\r\n  0xd800,\r\n  0xfa2d,\r\n  0xfa30,\r\n  0xfa6a,\r\n  0xfb00,\r\n  0xfb06,\r\n  0xfb13,\r\n  0xfb17,\r\n  0xff21,\r\n  0xff3a,\r\n  0xff41,\r\n  0xff5a,\r\n  0xff66,\r\n  0xffbe,\r\n  0xffc2,\r\n  0xffc7,\r\n  0xffca,\r\n  0xffcf,\r\n  0xffd2,\r\n  0xffd7,\r\n  0xffda,\r\n  0xffdc,\r\n  0x10300,\r\n  0x1031e,\r\n  0x10320,\r\n  0x10323,\r\n  0x10330,\r\n  0x1034a,\r\n  0x10400,\r\n  0x10425,\r\n  0x10428,\r\n  0x1044d,\r\n  0x1d000,\r\n  0x1d0f5,\r\n  0x1d100,\r\n  0x1d126,\r\n  0x1d12a,\r\n  0x1d166,\r\n  0x1d16a,\r\n  0x1d172,\r\n  0x1d183,\r\n  0x1d184,\r\n  0x1d18c,\r\n  0x1d1a9,\r\n  0x1d1ae,\r\n  0x1d1dd,\r\n  0x1d400,\r\n  0x1d454,\r\n  0x1d456,\r\n  0x1d49c,\r\n  0x1d49e,\r\n  0x1d49f,\r\n  0x1d4a2,\r\n  0x1d4a2,\r\n  0x1d4a5,\r\n  0x1d4a6,\r\n  0x1d4a9,\r\n  0x1d4ac,\r\n  0x1d4ae,\r\n  0x1d4b9,\r\n  0x1d4bb,\r\n  0x1d4bb,\r\n  0x1d4bd,\r\n  0x1d4c0,\r\n  0x1d4c2,\r\n  0x1d4c3,\r\n  0x1d4c5,\r\n  0x1d505,\r\n  0x1d507,\r\n  0x1d50a,\r\n  0x1d50d,\r\n  0x1d514,\r\n  0x1d516,\r\n  0x1d51c,\r\n  0x1d51e,\r\n  0x1d539,\r\n  0x1d53b,\r\n  0x1d53e,\r\n  0x1d540,\r\n  0x1d544,\r\n  0x1d546,\r\n  0x1d546,\r\n  0x1d54a,\r\n  0x1d550,\r\n  0x1d552,\r\n  0x1d6a3,\r\n  0x1d6a8,\r\n  0x1d7c9,\r\n  0x20000,\r\n  0x2a6d6,\r\n  0x2f800,\r\n  0x2fa1d,\r\n  0xf0000,\r\n  0xffffd,\r\n  0x100000,\r\n  0x10fffd\r\n];\r\n// prettier-ignore-end\r\n\r\nconst isBidirectionalL = character => inRange(character, bidirectional_l);\r\n\r\nexport {\r\n  isUnassignedCodePoint,\r\n  isCommonlyMappedToNothing,\r\n  isNonASCIISpaceCharacter,\r\n  isProhibitedCharacter,\r\n  isBidirectionalRAL,\r\n  isBidirectionalL\r\n};\r\n","import {\r\n  isUnassignedCodePoint,\r\n  isCommonlyMappedToNothing,\r\n  isNonASCIISpaceCharacter,\r\n  isProhibitedCharacter,\r\n  isBidirectionalRAL,\r\n  isBidirectionalL\r\n} from './lib/code-points';\r\n\r\n// 2.1.  Mapping\r\n\r\n/**\r\n * non-ASCII space characters [StringPrep, C.1.2] that can be\r\n * mapped to SPACE (U+0020)\r\n */\r\nconst mapping2space = isNonASCIISpaceCharacter;\r\n\r\n/**\r\n * the \"commonly mapped to nothing\" characters [StringPrep, B.1]\r\n * that can be mapped to nothing.\r\n */\r\nconst mapping2nothing = isCommonlyMappedToNothing;\r\n\r\n// utils\r\nconst getCodePoint = character => character.codePointAt(0);\r\nconst first = x => x[0];\r\nconst last = x => x[x.length - 1];\r\n\r\n/**\r\n * Convert provided string into an array of Unicode Code Points.\r\n * Based on https://stackoverflow.com/a/21409165/1556249\r\n * and https://www.npmjs.com/package/code-point-at.\r\n * @param {string} input\r\n * @returns {number[]}\r\n */\r\nfunction toCodePoints(input) {\r\n  const codepoints = [];\r\n  const size = input.length;\r\n\r\n  for (let i = 0; i < size; i += 1) {\r\n    const before = input.charCodeAt(i);\r\n\r\n    if (before >= 0xd800 && before <= 0xdbff && size > i + 1) {\r\n      const next = input.charCodeAt(i + 1);\r\n\r\n      if (next >= 0xdc00 && next <= 0xdfff) {\r\n        codepoints.push((before - 0xd800) * 0x400 + next - 0xdc00 + 0x10000);\r\n        i += 1;\r\n        continue;\r\n      }\r\n    }\r\n\r\n    codepoints.push(before);\r\n  }\r\n\r\n  return codepoints;\r\n}\r\n\r\n/**\r\n * SASLprep.\r\n * @param {string} input\r\n * @param {Object} opts\r\n * @param {boolean} opts.allowUnassigned\r\n * @returns {string}\r\n */\r\nfunction saslprep(input, opts = {}) {\r\n  if (typeof input !== 'string') {\r\n    throw new TypeError('Expected string.');\r\n  }\r\n\r\n  if (input.length === 0) {\r\n    return '';\r\n  }\r\n\r\n  // 1. Map\r\n  const mapped_input = toCodePoints(input)\r\n    // 1.1 mapping to space\r\n    .map(character => (mapping2space(character) ? 0x20 : character))\r\n    // 1.2 mapping to nothing\r\n    .filter(character => !mapping2nothing(character));\r\n\r\n  // 2. Normalize\r\n  const normalized_input = String.fromCodePoint\r\n    .apply(null, mapped_input)\r\n    .normalize('NFKC');\r\n\r\n  const normalized_map = toCodePoints(normalized_input);\r\n\r\n  // 3. Prohibit\r\n  const hasProhibited = normalized_map.some(isProhibitedCharacter);\r\n\r\n  if (hasProhibited) {\r\n    throw new Error(\r\n      'Prohibited character, see https://tools.ietf.org/html/rfc4013#section-2.3'\r\n    );\r\n  }\r\n\r\n  // Unassigned Code Points\r\n  if (opts.allowUnassigned !== true) {\r\n    const hasUnassigned = normalized_map.some(isUnassignedCodePoint);\r\n\r\n    if (hasUnassigned) {\r\n      throw new Error(\r\n        'Unassigned code point, see https://tools.ietf.org/html/rfc4013#section-2.5'\r\n      );\r\n    }\r\n  }\r\n\r\n  // 4. check bidi\r\n\r\n  const hasBidiRAL = normalized_map.some(isBidirectionalRAL);\r\n\r\n  const hasBidiL = normalized_map.some(isBidirectionalL);\r\n\r\n  // 4.1 If a string contains any RandALCat character, the string MUST NOT\r\n  // contain any LCat character.\r\n  if (hasBidiRAL && hasBidiL) {\r\n    throw new Error(\r\n      'String must not contain RandALCat and LCat at the same time,' +\r\n        ' see https://tools.ietf.org/html/rfc3454#section-6'\r\n    );\r\n  }\r\n\r\n  /**\r\n   * 4.2 If a string contains any RandALCat character, a RandALCat\r\n   * character MUST be the first character of the string, and a\r\n   * RandALCat character MUST be the last character of the string.\r\n   */\r\n\r\n  const isFirstBidiRAL = isBidirectionalRAL(\r\n    getCodePoint(first(normalized_input))\r\n  );\r\n  const isLastBidiRAL = isBidirectionalRAL(\r\n    getCodePoint(last(normalized_input))\r\n  );\r\n\r\n  if (hasBidiRAL && !(isFirstBidiRAL && isLastBidiRAL)) {\r\n    throw new Error(\r\n      'Bidirectional RandALCat character must be the first and the last' +\r\n        ' character of the string, see https://tools.ietf.org/html/rfc3454#section-6'\r\n    );\r\n  }\r\n\r\n  return normalized_input;\r\n}\r\n\r\nexport default saslprep;\r\n","/*\r\n   PDFSecurity - represents PDF security settings\r\n   By Yang Liu <hi@zesik.com>\r\n */\r\n\r\nimport CryptoJS from 'crypto-js';\r\nimport saslprep from './saslprep/index';\r\n\r\nclass PDFSecurity {\r\n  static generateFileID(info = {}) {\r\n    let infoStr = `${info.CreationDate.getTime()}\\n`;\r\n\r\n    for (let key in info) {\r\n      // eslint-disable-next-line no-prototype-builtins\r\n      if (!info.hasOwnProperty(key)) {\r\n        continue;\r\n      }\r\n      infoStr += `${key}: ${info[key].valueOf()}\\n`;\r\n    }\r\n\r\n    return wordArrayToBuffer(CryptoJS.MD5(infoStr));\r\n  }\r\n\r\n  static generateRandomWordArray(bytes) {\r\n    return CryptoJS.lib.WordArray.random(bytes);\r\n  }\r\n\r\n  static create(document, options = {}) {\r\n    if (!options.ownerPassword && !options.userPassword) {\r\n      return null;\r\n    }\r\n    return new PDFSecurity(document, options);\r\n  }\r\n\r\n  constructor(document, options = {}) {\r\n    if (!options.ownerPassword && !options.userPassword) {\r\n      throw new Error('None of owner password and user password is defined.');\r\n    }\r\n\r\n    this.document = document;\r\n    this._setupEncryption(options);\r\n  }\r\n\r\n  _setupEncryption(options) {\r\n    switch (options.pdfVersion) {\r\n      case '1.4':\r\n      case '1.5':\r\n        this.version = 2;\r\n        break;\r\n      case '1.6':\r\n      case '1.7':\r\n        this.version = 4;\r\n        break;\r\n      case '1.7ext3':\r\n        this.version = 5;\r\n        break;\r\n      default:\r\n        this.version = 1;\r\n        break;\r\n    }\r\n\r\n    const encDict = {\r\n      Filter: 'Standard'\r\n    };\r\n\r\n    switch (this.version) {\r\n      case 1:\r\n      case 2:\r\n      case 4:\r\n        this._setupEncryptionV1V2V4(this.version, encDict, options);\r\n        break;\r\n      case 5:\r\n        this._setupEncryptionV5(encDict, options);\r\n        break;\r\n    }\r\n\r\n    this.dictionary = this.document.ref(encDict);\r\n  }\r\n\r\n  _setupEncryptionV1V2V4(v, encDict, options) {\r\n    let r, permissions;\r\n    switch (v) {\r\n      case 1:\r\n        r = 2;\r\n        this.keyBits = 40;\r\n        permissions = getPermissionsR2(options.permissions);\r\n        break;\r\n      case 2:\r\n        r = 3;\r\n        this.keyBits = 128;\r\n        permissions = getPermissionsR3(options.permissions);\r\n        break;\r\n      case 4:\r\n        r = 4;\r\n        this.keyBits = 128;\r\n        permissions = getPermissionsR3(options.permissions);\r\n        break;\r\n    }\r\n\r\n    const paddedUserPassword = processPasswordR2R3R4(options.userPassword);\r\n    const paddedOwnerPassword = options.ownerPassword\r\n      ? processPasswordR2R3R4(options.ownerPassword)\r\n      : paddedUserPassword;\r\n\r\n    const ownerPasswordEntry = getOwnerPasswordR2R3R4(\r\n      r,\r\n      this.keyBits,\r\n      paddedUserPassword,\r\n      paddedOwnerPassword\r\n    );\r\n    this.encryptionKey = getEncryptionKeyR2R3R4(\r\n      r,\r\n      this.keyBits,\r\n      this.document._id,\r\n      paddedUserPassword,\r\n      ownerPasswordEntry,\r\n      permissions\r\n    );\r\n    let userPasswordEntry;\r\n    if (r === 2) {\r\n      userPasswordEntry = getUserPasswordR2(this.encryptionKey);\r\n    } else {\r\n      userPasswordEntry = getUserPasswordR3R4(\r\n        this.document._id,\r\n        this.encryptionKey\r\n      );\r\n    }\r\n\r\n    encDict.V = v;\r\n    if (v >= 2) {\r\n      encDict.Length = this.keyBits;\r\n    }\r\n    if (v === 4) {\r\n      encDict.CF = {\r\n        StdCF: {\r\n          AuthEvent: 'DocOpen',\r\n          CFM: 'AESV2',\r\n          Length: this.keyBits / 8\r\n        }\r\n      };\r\n      encDict.StmF = 'StdCF';\r\n      encDict.StrF = 'StdCF';\r\n    }\r\n    encDict.R = r;\r\n    encDict.O = wordArrayToBuffer(ownerPasswordEntry);\r\n    encDict.U = wordArrayToBuffer(userPasswordEntry);\r\n    encDict.P = permissions;\r\n  }\r\n\r\n  _setupEncryptionV5(encDict, options) {\r\n    this.keyBits = 256;\r\n    const permissions = getPermissionsR3(options.permissions);\r\n\r\n    const processedUserPassword = processPasswordR5(options.userPassword);\r\n    const processedOwnerPassword = options.ownerPassword\r\n      ? processPasswordR5(options.ownerPassword)\r\n      : processedUserPassword;\r\n\r\n    this.encryptionKey = getEncryptionKeyR5(\r\n      PDFSecurity.generateRandomWordArray\r\n    );\r\n    const userPasswordEntry = getUserPasswordR5(\r\n      processedUserPassword,\r\n      PDFSecurity.generateRandomWordArray\r\n    );\r\n    const userKeySalt = CryptoJS.lib.WordArray.create(\r\n      userPasswordEntry.words.slice(10, 12),\r\n      8\r\n    );\r\n    const userEncryptionKeyEntry = getUserEncryptionKeyR5(\r\n      processedUserPassword,\r\n      userKeySalt,\r\n      this.encryptionKey\r\n    );\r\n    const ownerPasswordEntry = getOwnerPasswordR5(\r\n      processedOwnerPassword,\r\n      userPasswordEntry,\r\n      PDFSecurity.generateRandomWordArray\r\n    );\r\n    const ownerKeySalt = CryptoJS.lib.WordArray.create(\r\n      ownerPasswordEntry.words.slice(10, 12),\r\n      8\r\n    );\r\n    const ownerEncryptionKeyEntry = getOwnerEncryptionKeyR5(\r\n      processedOwnerPassword,\r\n      ownerKeySalt,\r\n      userPasswordEntry,\r\n      this.encryptionKey\r\n    );\r\n    const permsEntry = getEncryptedPermissionsR5(\r\n      permissions,\r\n      this.encryptionKey,\r\n      PDFSecurity.generateRandomWordArray\r\n    );\r\n\r\n    encDict.V = 5;\r\n    encDict.Length = this.keyBits;\r\n    encDict.CF = {\r\n      StdCF: {\r\n        AuthEvent: 'DocOpen',\r\n        CFM: 'AESV3',\r\n        Length: this.keyBits / 8\r\n      }\r\n    };\r\n    encDict.StmF = 'StdCF';\r\n    encDict.StrF = 'StdCF';\r\n    encDict.R = 5;\r\n    encDict.O = wordArrayToBuffer(ownerPasswordEntry);\r\n    encDict.OE = wordArrayToBuffer(ownerEncryptionKeyEntry);\r\n    encDict.U = wordArrayToBuffer(userPasswordEntry);\r\n    encDict.UE = wordArrayToBuffer(userEncryptionKeyEntry);\r\n    encDict.P = permissions;\r\n    encDict.Perms = wordArrayToBuffer(permsEntry);\r\n  }\r\n\r\n  getEncryptFn(obj, gen) {\r\n    let digest;\r\n    if (this.version < 5) {\r\n      digest = this.encryptionKey\r\n        .clone()\r\n        .concat(\r\n          CryptoJS.lib.WordArray.create(\r\n            [\r\n              ((obj & 0xff) << 24) |\r\n                ((obj & 0xff00) << 8) |\r\n                ((obj >> 8) & 0xff00) |\r\n                (gen & 0xff),\r\n              (gen & 0xff00) << 16\r\n            ],\r\n            5\r\n          )\r\n        );\r\n    }\r\n\r\n    if (this.version === 1 || this.version === 2) {\r\n      let key = CryptoJS.MD5(digest);\r\n      key.sigBytes = Math.min(16, this.keyBits / 8 + 5);\r\n      return buffer =>\r\n        wordArrayToBuffer(\r\n          CryptoJS.RC4.encrypt(CryptoJS.lib.WordArray.create(buffer), key)\r\n            .ciphertext\r\n        );\r\n    }\r\n\r\n    let key;\r\n    if (this.version === 4) {\r\n      key = CryptoJS.MD5(\r\n        digest.concat(CryptoJS.lib.WordArray.create([0x73416c54], 4))\r\n      );\r\n    } else {\r\n      key = this.encryptionKey;\r\n    }\r\n\r\n    const iv = PDFSecurity.generateRandomWordArray(16);\r\n    const options = {\r\n      mode: CryptoJS.mode.CBC,\r\n      padding: CryptoJS.pad.Pkcs7,\r\n      iv\r\n    };\r\n\r\n    return buffer =>\r\n      wordArrayToBuffer(\r\n        iv\r\n          .clone()\r\n          .concat(\r\n            CryptoJS.AES.encrypt(\r\n              CryptoJS.lib.WordArray.create(buffer),\r\n              key,\r\n              options\r\n            ).ciphertext\r\n          )\r\n      );\r\n  }\r\n\r\n  end() {\r\n    this.dictionary.end();\r\n  }\r\n}\r\n\r\nfunction getPermissionsR2(permissionObject = {}) {\r\n  let permissions = 0xffffffc0 >> 0;\r\n  if (permissionObject.printing) {\r\n    permissions |= 0b000000000100;\r\n  }\r\n  if (permissionObject.modifying) {\r\n    permissions |= 0b000000001000;\r\n  }\r\n  if (permissionObject.copying) {\r\n    permissions |= 0b000000010000;\r\n  }\r\n  if (permissionObject.annotating) {\r\n    permissions |= 0b000000100000;\r\n  }\r\n  return permissions;\r\n}\r\n\r\nfunction getPermissionsR3(permissionObject = {}) {\r\n  let permissions = 0xfffff0c0 >> 0;\r\n  if (permissionObject.printing === 'lowResolution') {\r\n    permissions |= 0b000000000100;\r\n  }\r\n  if (permissionObject.printing === 'highResolution') {\r\n    permissions |= 0b100000000100;\r\n  }\r\n  if (permissionObject.modifying) {\r\n    permissions |= 0b000000001000;\r\n  }\r\n  if (permissionObject.copying) {\r\n    permissions |= 0b000000010000;\r\n  }\r\n  if (permissionObject.annotating) {\r\n    permissions |= 0b000000100000;\r\n  }\r\n  if (permissionObject.fillingForms) {\r\n    permissions |= 0b000100000000;\r\n  }\r\n  if (permissionObject.contentAccessibility) {\r\n    permissions |= 0b001000000000;\r\n  }\r\n  if (permissionObject.documentAssembly) {\r\n    permissions |= 0b010000000000;\r\n  }\r\n  return permissions;\r\n}\r\n\r\nfunction getUserPasswordR2(encryptionKey) {\r\n  return CryptoJS.RC4.encrypt(processPasswordR2R3R4(), encryptionKey)\r\n    .ciphertext;\r\n}\r\n\r\nfunction getUserPasswordR3R4(documentId, encryptionKey) {\r\n  const key = encryptionKey.clone();\r\n  let cipher = CryptoJS.MD5(\r\n    processPasswordR2R3R4().concat(CryptoJS.lib.WordArray.create(documentId))\r\n  );\r\n  for (let i = 0; i < 20; i++) {\r\n    const xorRound = Math.ceil(key.sigBytes / 4);\r\n    for (let j = 0; j < xorRound; j++) {\r\n      key.words[j] =\r\n        encryptionKey.words[j] ^ (i | (i << 8) | (i << 16) | (i << 24));\r\n    }\r\n    cipher = CryptoJS.RC4.encrypt(cipher, key).ciphertext;\r\n  }\r\n  return cipher.concat(CryptoJS.lib.WordArray.create(null, 16));\r\n}\r\n\r\nfunction getOwnerPasswordR2R3R4(\r\n  r,\r\n  keyBits,\r\n  paddedUserPassword,\r\n  paddedOwnerPassword\r\n) {\r\n  let digest = paddedOwnerPassword;\r\n  let round = r >= 3 ? 51 : 1;\r\n  for (let i = 0; i < round; i++) {\r\n    digest = CryptoJS.MD5(digest);\r\n  }\r\n\r\n  const key = digest.clone();\r\n  key.sigBytes = keyBits / 8;\r\n  let cipher = paddedUserPassword;\r\n  round = r >= 3 ? 20 : 1;\r\n  for (let i = 0; i < round; i++) {\r\n    const xorRound = Math.ceil(key.sigBytes / 4);\r\n    for (let j = 0; j < xorRound; j++) {\r\n      key.words[j] = digest.words[j] ^ (i | (i << 8) | (i << 16) | (i << 24));\r\n    }\r\n    cipher = CryptoJS.RC4.encrypt(cipher, key).ciphertext;\r\n  }\r\n  return cipher;\r\n}\r\n\r\nfunction getEncryptionKeyR2R3R4(\r\n  r,\r\n  keyBits,\r\n  documentId,\r\n  paddedUserPassword,\r\n  ownerPasswordEntry,\r\n  permissions\r\n) {\r\n  let key = paddedUserPassword\r\n    .clone()\r\n    .concat(ownerPasswordEntry)\r\n    .concat(CryptoJS.lib.WordArray.create([lsbFirstWord(permissions)], 4))\r\n    .concat(CryptoJS.lib.WordArray.create(documentId));\r\n  const round = r >= 3 ? 51 : 1;\r\n  for (let i = 0; i < round; i++) {\r\n    key = CryptoJS.MD5(key);\r\n    key.sigBytes = keyBits / 8;\r\n  }\r\n  return key;\r\n}\r\n\r\nfunction getUserPasswordR5(processedUserPassword, generateRandomWordArray) {\r\n  const validationSalt = generateRandomWordArray(8);\r\n  const keySalt = generateRandomWordArray(8);\r\n  return CryptoJS.SHA256(processedUserPassword.clone().concat(validationSalt))\r\n    .concat(validationSalt)\r\n    .concat(keySalt);\r\n}\r\n\r\nfunction getUserEncryptionKeyR5(\r\n  processedUserPassword,\r\n  userKeySalt,\r\n  encryptionKey\r\n) {\r\n  const key = CryptoJS.SHA256(\r\n    processedUserPassword.clone().concat(userKeySalt)\r\n  );\r\n  const options = {\r\n    mode: CryptoJS.mode.CBC,\r\n    padding: CryptoJS.pad.NoPadding,\r\n    iv: CryptoJS.lib.WordArray.create(null, 16)\r\n  };\r\n  return CryptoJS.AES.encrypt(encryptionKey, key, options).ciphertext;\r\n}\r\n\r\nfunction getOwnerPasswordR5(\r\n  processedOwnerPassword,\r\n  userPasswordEntry,\r\n  generateRandomWordArray\r\n) {\r\n  const validationSalt = generateRandomWordArray(8);\r\n  const keySalt = generateRandomWordArray(8);\r\n  return CryptoJS.SHA256(\r\n    processedOwnerPassword\r\n      .clone()\r\n      .concat(validationSalt)\r\n      .concat(userPasswordEntry)\r\n  )\r\n    .concat(validationSalt)\r\n    .concat(keySalt);\r\n}\r\n\r\nfunction getOwnerEncryptionKeyR5(\r\n  processedOwnerPassword,\r\n  ownerKeySalt,\r\n  userPasswordEntry,\r\n  encryptionKey\r\n) {\r\n  const key = CryptoJS.SHA256(\r\n    processedOwnerPassword\r\n      .clone()\r\n      .concat(ownerKeySalt)\r\n      .concat(userPasswordEntry)\r\n  );\r\n  const options = {\r\n    mode: CryptoJS.mode.CBC,\r\n    padding: CryptoJS.pad.NoPadding,\r\n    iv: CryptoJS.lib.WordArray.create(null, 16)\r\n  };\r\n  return CryptoJS.AES.encrypt(encryptionKey, key, options).ciphertext;\r\n}\r\n\r\nfunction getEncryptionKeyR5(generateRandomWordArray) {\r\n  return generateRandomWordArray(32);\r\n}\r\n\r\nfunction getEncryptedPermissionsR5(\r\n  permissions,\r\n  encryptionKey,\r\n  generateRandomWordArray\r\n) {\r\n  const cipher = CryptoJS.lib.WordArray.create(\r\n    [lsbFirstWord(permissions), 0xffffffff, 0x54616462],\r\n    12\r\n  ).concat(generateRandomWordArray(4));\r\n  const options = {\r\n    mode: CryptoJS.mode.ECB,\r\n    padding: CryptoJS.pad.NoPadding\r\n  };\r\n  return CryptoJS.AES.encrypt(cipher, encryptionKey, options).ciphertext;\r\n}\r\n\r\nfunction processPasswordR2R3R4(password = '') {\r\n  const out = Buffer.alloc(32);\r\n  const length = password.length;\r\n  let index = 0;\r\n  while (index < length && index < 32) {\r\n    const code = password.charCodeAt(index);\r\n    if (code > 0xff) {\r\n      throw new Error('Password contains one or more invalid characters.');\r\n    }\r\n    out[index] = code;\r\n    index++;\r\n  }\r\n  while (index < 32) {\r\n    out[index] = PASSWORD_PADDING[index - length];\r\n    index++;\r\n  }\r\n  return CryptoJS.lib.WordArray.create(out);\r\n}\r\n\r\nfunction processPasswordR5(password = '') {\r\n  password = unescape(encodeURIComponent(saslprep(password)));\r\n  const length = Math.min(127, password.length);\r\n  const out = Buffer.alloc(length);\r\n\r\n  for (let i = 0; i < length; i++) {\r\n    out[i] = password.charCodeAt(i);\r\n  }\r\n\r\n  return CryptoJS.lib.WordArray.create(out);\r\n}\r\n\r\nfunction lsbFirstWord(data) {\r\n  return (\r\n    ((data & 0xff) << 24) |\r\n    ((data & 0xff00) << 8) |\r\n    ((data >> 8) & 0xff00) |\r\n    ((data >> 24) & 0xff)\r\n  );\r\n}\r\n\r\nfunction wordArrayToBuffer(wordArray) {\r\n  const byteArray = [];\r\n  for (let i = 0; i < wordArray.sigBytes; i++) {\r\n    byteArray.push(\r\n      (wordArray.words[Math.floor(i / 4)] >> (8 * (3 - (i % 4)))) & 0xff\r\n    );\r\n  }\r\n  return Buffer.from(byteArray);\r\n}\r\n\r\nconst PASSWORD_PADDING = [\r\n  0x28,\r\n  0xbf,\r\n  0x4e,\r\n  0x5e,\r\n  0x4e,\r\n  0x75,\r\n  0x8a,\r\n  0x41,\r\n  0x64,\r\n  0x00,\r\n  0x4e,\r\n  0x56,\r\n  0xff,\r\n  0xfa,\r\n  0x01,\r\n  0x08,\r\n  0x2e,\r\n  0x2e,\r\n  0x00,\r\n  0xb6,\r\n  0xd0,\r\n  0x68,\r\n  0x3e,\r\n  0x80,\r\n  0x2f,\r\n  0x0c,\r\n  0xa9,\r\n  0xfe,\r\n  0x64,\r\n  0x53,\r\n  0x69,\r\n  0x7a\r\n];\r\n\r\nexport default PDFSecurity;\r\n","let cx, cy, px, py, sx, sy;\r\n\r\ncx = cy = px = py = sx = sy = 0;\r\n\r\nconst parameters = {\r\n  A: 7,\r\n  a: 7,\r\n  C: 6,\r\n  c: 6,\r\n  H: 1,\r\n  h: 1,\r\n  L: 2,\r\n  l: 2,\r\n  M: 2,\r\n  m: 2,\r\n  Q: 4,\r\n  q: 4,\r\n  S: 4,\r\n  s: 4,\r\n  T: 2,\r\n  t: 2,\r\n  V: 1,\r\n  v: 1,\r\n  Z: 0,\r\n  z: 0\r\n};\r\n\r\nconst parse = function(path) {\r\n  let cmd;\r\n  const ret = [];\r\n  let args = [];\r\n  let curArg = '';\r\n  let foundDecimal = false;\r\n  let params = 0;\r\n\r\n  for (let c of path) {\r\n    if (parameters[c] != null) {\r\n      params = parameters[c];\r\n      if (cmd) {\r\n        // save existing command\r\n        if (curArg.length > 0) {\r\n          args[args.length] = +curArg;\r\n        }\r\n        ret[ret.length] = { cmd, args };\r\n\r\n        args = [];\r\n        curArg = '';\r\n        foundDecimal = false;\r\n      }\r\n\r\n      cmd = c;\r\n    } else if (\r\n      [' ', ','].includes(c) ||\r\n      (c === '-' && curArg.length > 0 && curArg[curArg.length - 1] !== 'e') ||\r\n      (c === '.' && foundDecimal)\r\n    ) {\r\n      if (curArg.length === 0) {\r\n        continue;\r\n      }\r\n\r\n      if (args.length === params) {\r\n        // handle reused commands\r\n        ret[ret.length] = { cmd, args };\r\n        args = [+curArg];\r\n\r\n        // handle assumed commands\r\n        if (cmd === 'M') {\r\n          cmd = 'L';\r\n        }\r\n        if (cmd === 'm') {\r\n          cmd = 'l';\r\n        }\r\n      } else {\r\n        args[args.length] = +curArg;\r\n      }\r\n\r\n      foundDecimal = c === '.';\r\n\r\n      // fix for negative numbers or repeated decimals with no delimeter between commands\r\n      curArg = ['-', '.'].includes(c) ? c : '';\r\n    } else {\r\n      curArg += c;\r\n      if (c === '.') {\r\n        foundDecimal = true;\r\n      }\r\n    }\r\n  }\r\n\r\n  // add the last command\r\n  if (curArg.length > 0) {\r\n    if (args.length === params) {\r\n      // handle reused commands\r\n      ret[ret.length] = { cmd, args };\r\n      args = [+curArg];\r\n\r\n      // handle assumed commands\r\n      if (cmd === 'M') {\r\n        cmd = 'L';\r\n      }\r\n      if (cmd === 'm') {\r\n        cmd = 'l';\r\n      }\r\n    } else {\r\n      args[args.length] = +curArg;\r\n    }\r\n  }\r\n\r\n  ret[ret.length] = { cmd, args };\r\n\r\n  return ret;\r\n};\r\n\r\nconst apply = function(commands, doc) {\r\n  // current point, control point, and subpath starting point\r\n  cx = cy = px = py = sx = sy = 0;\r\n\r\n  // run the commands\r\n  for (let i = 0; i < commands.length; i++) {\r\n    const c = commands[i];\r\n    if (typeof runners[c.cmd] === 'function') {\r\n      runners[c.cmd](doc, c.args);\r\n    }\r\n  }\r\n};\r\n\r\nconst runners = {\r\n  M(doc, a) {\r\n    cx = a[0];\r\n    cy = a[1];\r\n    px = py = null;\r\n    sx = cx;\r\n    sy = cy;\r\n    return doc.moveTo(cx, cy);\r\n  },\r\n\r\n  m(doc, a) {\r\n    cx += a[0];\r\n    cy += a[1];\r\n    px = py = null;\r\n    sx = cx;\r\n    sy = cy;\r\n    return doc.moveTo(cx, cy);\r\n  },\r\n\r\n  C(doc, a) {\r\n    cx = a[4];\r\n    cy = a[5];\r\n    px = a[2];\r\n    py = a[3];\r\n    return doc.bezierCurveTo(...a);\r\n  },\r\n\r\n  c(doc, a) {\r\n    doc.bezierCurveTo(\r\n      a[0] + cx,\r\n      a[1] + cy,\r\n      a[2] + cx,\r\n      a[3] + cy,\r\n      a[4] + cx,\r\n      a[5] + cy\r\n    );\r\n    px = cx + a[2];\r\n    py = cy + a[3];\r\n    cx += a[4];\r\n    return (cy += a[5]);\r\n  },\r\n\r\n  S(doc, a) {\r\n    if (px === null) {\r\n      px = cx;\r\n      py = cy;\r\n    }\r\n\r\n    doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), a[0], a[1], a[2], a[3]);\r\n    px = a[0];\r\n    py = a[1];\r\n    cx = a[2];\r\n    return (cy = a[3]);\r\n  },\r\n\r\n  s(doc, a) {\r\n    if (px === null) {\r\n      px = cx;\r\n      py = cy;\r\n    }\r\n\r\n    doc.bezierCurveTo(\r\n      cx - (px - cx),\r\n      cy - (py - cy),\r\n      cx + a[0],\r\n      cy + a[1],\r\n      cx + a[2],\r\n      cy + a[3]\r\n    );\r\n    px = cx + a[0];\r\n    py = cy + a[1];\r\n    cx += a[2];\r\n    return (cy += a[3]);\r\n  },\r\n\r\n  Q(doc, a) {\r\n    px = a[0];\r\n    py = a[1];\r\n    cx = a[2];\r\n    cy = a[3];\r\n    return doc.quadraticCurveTo(a[0], a[1], cx, cy);\r\n  },\r\n\r\n  q(doc, a) {\r\n    doc.quadraticCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy);\r\n    px = cx + a[0];\r\n    py = cy + a[1];\r\n    cx += a[2];\r\n    return (cy += a[3]);\r\n  },\r\n\r\n  T(doc, a) {\r\n    if (px === null) {\r\n      px = cx;\r\n      py = cy;\r\n    } else {\r\n      px = cx - (px - cx);\r\n      py = cy - (py - cy);\r\n    }\r\n\r\n    doc.quadraticCurveTo(px, py, a[0], a[1]);\r\n    px = cx - (px - cx);\r\n    py = cy - (py - cy);\r\n    cx = a[0];\r\n    return (cy = a[1]);\r\n  },\r\n\r\n  t(doc, a) {\r\n    if (px === null) {\r\n      px = cx;\r\n      py = cy;\r\n    } else {\r\n      px = cx - (px - cx);\r\n      py = cy - (py - cy);\r\n    }\r\n\r\n    doc.quadraticCurveTo(px, py, cx + a[0], cy + a[1]);\r\n    cx += a[0];\r\n    return (cy += a[1]);\r\n  },\r\n\r\n  A(doc, a) {\r\n    solveArc(doc, cx, cy, a);\r\n    cx = a[5];\r\n    return (cy = a[6]);\r\n  },\r\n\r\n  a(doc, a) {\r\n    a[5] += cx;\r\n    a[6] += cy;\r\n    solveArc(doc, cx, cy, a);\r\n    cx = a[5];\r\n    return (cy = a[6]);\r\n  },\r\n\r\n  L(doc, a) {\r\n    cx = a[0];\r\n    cy = a[1];\r\n    px = py = null;\r\n    return doc.lineTo(cx, cy);\r\n  },\r\n\r\n  l(doc, a) {\r\n    cx += a[0];\r\n    cy += a[1];\r\n    px = py = null;\r\n    return doc.lineTo(cx, cy);\r\n  },\r\n\r\n  H(doc, a) {\r\n    cx = a[0];\r\n    px = py = null;\r\n    return doc.lineTo(cx, cy);\r\n  },\r\n\r\n  h(doc, a) {\r\n    cx += a[0];\r\n    px = py = null;\r\n    return doc.lineTo(cx, cy);\r\n  },\r\n\r\n  V(doc, a) {\r\n    cy = a[0];\r\n    px = py = null;\r\n    return doc.lineTo(cx, cy);\r\n  },\r\n\r\n  v(doc, a) {\r\n    cy += a[0];\r\n    px = py = null;\r\n    return doc.lineTo(cx, cy);\r\n  },\r\n\r\n  Z(doc) {\r\n    doc.closePath();\r\n    cx = sx;\r\n    return (cy = sy);\r\n  },\r\n\r\n  z(doc) {\r\n    doc.closePath();\r\n    cx = sx;\r\n    return (cy = sy);\r\n  }\r\n};\r\n\r\nconst solveArc = function(doc, x, y, coords) {\r\n  const [rx, ry, rot, large, sweep, ex, ey] = coords;\r\n  const segs = arcToSegments(ex, ey, rx, ry, large, sweep, rot, x, y);\r\n\r\n  for (let seg of segs) {\r\n    const bez = segmentToBezier(...seg);\r\n    doc.bezierCurveTo(...bez);\r\n  }\r\n};\r\n\r\n// from Inkscape svgtopdf, thanks!\r\nconst arcToSegments = function(x, y, rx, ry, large, sweep, rotateX, ox, oy) {\r\n  const th = rotateX * (Math.PI / 180);\r\n  const sin_th = Math.sin(th);\r\n  const cos_th = Math.cos(th);\r\n  rx = Math.abs(rx);\r\n  ry = Math.abs(ry);\r\n  px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5;\r\n  py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5;\r\n  let pl = (px * px) / (rx * rx) + (py * py) / (ry * ry);\r\n  if (pl > 1) {\r\n    pl = Math.sqrt(pl);\r\n    rx *= pl;\r\n    ry *= pl;\r\n  }\r\n\r\n  const a00 = cos_th / rx;\r\n  const a01 = sin_th / rx;\r\n  const a10 = -sin_th / ry;\r\n  const a11 = cos_th / ry;\r\n  const x0 = a00 * ox + a01 * oy;\r\n  const y0 = a10 * ox + a11 * oy;\r\n  const x1 = a00 * x + a01 * y;\r\n  const y1 = a10 * x + a11 * y;\r\n\r\n  const d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0);\r\n  let sfactor_sq = 1 / d - 0.25;\r\n  if (sfactor_sq < 0) {\r\n    sfactor_sq = 0;\r\n  }\r\n  let sfactor = Math.sqrt(sfactor_sq);\r\n  if (sweep === large) {\r\n    sfactor = -sfactor;\r\n  }\r\n\r\n  const xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0);\r\n  const yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0);\r\n\r\n  const th0 = Math.atan2(y0 - yc, x0 - xc);\r\n  const th1 = Math.atan2(y1 - yc, x1 - xc);\r\n\r\n  let th_arc = th1 - th0;\r\n  if (th_arc < 0 && sweep === 1) {\r\n    th_arc += 2 * Math.PI;\r\n  } else if (th_arc > 0 && sweep === 0) {\r\n    th_arc -= 2 * Math.PI;\r\n  }\r\n\r\n  const segments = Math.ceil(Math.abs(th_arc / (Math.PI * 0.5 + 0.001)));\r\n  const result = [];\r\n\r\n  for (let i = 0; i < segments; i++) {\r\n    const th2 = th0 + (i * th_arc) / segments;\r\n    const th3 = th0 + ((i + 1) * th_arc) / segments;\r\n    result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th];\r\n  }\r\n\r\n  return result;\r\n};\r\n\r\nconst segmentToBezier = function(cx, cy, th0, th1, rx, ry, sin_th, cos_th) {\r\n  const a00 = cos_th * rx;\r\n  const a01 = -sin_th * ry;\r\n  const a10 = sin_th * rx;\r\n  const a11 = cos_th * ry;\r\n\r\n  const th_half = 0.5 * (th1 - th0);\r\n  const t =\r\n    ((8 / 3) * Math.sin(th_half * 0.5) * Math.sin(th_half * 0.5)) /\r\n    Math.sin(th_half);\r\n  const x1 = cx + Math.cos(th0) - t * Math.sin(th0);\r\n  const y1 = cy + Math.sin(th0) + t * Math.cos(th0);\r\n  const x3 = cx + Math.cos(th1);\r\n  const y3 = cy + Math.sin(th1);\r\n  const x2 = x3 + t * Math.sin(th1);\r\n  const y2 = y3 - t * Math.cos(th1);\r\n\r\n  return [\r\n    a00 * x1 + a01 * y1,\r\n    a10 * x1 + a11 * y1,\r\n    a00 * x2 + a01 * y2,\r\n    a10 * x2 + a11 * y2,\r\n    a00 * x3 + a01 * y3,\r\n    a10 * x3 + a11 * y3\r\n  ];\r\n};\r\n\r\nclass SVGPath {\r\n  static apply(doc, path) {\r\n    const commands = parse(path);\r\n    apply(commands, doc);\r\n  }\r\n}\r\n\r\nexport default SVGPath;\r\n","import PDFObject from './object';\r\n\r\nconst { number } = PDFObject;\r\n\r\nclass PDFGradient {\r\n  constructor(doc) {\r\n    this.doc = doc;\r\n    this.stops = [];\r\n    this.embedded = false;\r\n    this.transform = [1, 0, 0, 1, 0, 0];\r\n  }\r\n\r\n  stop(pos, color, opacity) {\r\n    if (opacity == null) {\r\n      opacity = 1;\r\n    }\r\n    color = this.doc._normalizeColor(color);\r\n\r\n    if (this.stops.length === 0) {\r\n      if (color.length === 3) {\r\n        this._colorSpace = 'DeviceRGB';\r\n      } else if (color.length === 4) {\r\n        this._colorSpace = 'DeviceCMYK';\r\n      } else if (color.length === 1) {\r\n        this._colorSpace = 'DeviceGray';\r\n      } else {\r\n        throw new Error('Unknown color space');\r\n      }\r\n    } else if (\r\n      (this._colorSpace === 'DeviceRGB' && color.length !== 3) ||\r\n      (this._colorSpace === 'DeviceCMYK' && color.length !== 4) ||\r\n      (this._colorSpace === 'DeviceGray' && color.length !== 1)\r\n    ) {\r\n      throw new Error('All gradient stops must use the same color space');\r\n    }\r\n\r\n    opacity = Math.max(0, Math.min(1, opacity));\r\n    this.stops.push([pos, color, opacity]);\r\n    return this;\r\n  }\r\n\r\n  setTransform(m11, m12, m21, m22, dx, dy) {\r\n    this.transform = [m11, m12, m21, m22, dx, dy];\r\n    return this;\r\n  }\r\n\r\n  embed(m) {\r\n    let fn;\r\n    const stopsLength = this.stops.length;\r\n    if (stopsLength === 0) {\r\n      return;\r\n    }\r\n    this.embedded = true;\r\n    this.matrix = m;\r\n\r\n    // if the last stop comes before 100%, add a copy at 100%\r\n    const last = this.stops[stopsLength - 1];\r\n    if (last[0] < 1) {\r\n      this.stops.push([1, last[1], last[2]]);\r\n    }\r\n\r\n    const bounds = [];\r\n    const encode = [];\r\n    const stops = [];\r\n\r\n    for (let i = 0; i < stopsLength - 1; i++) {\r\n      encode.push(0, 1);\r\n      if (i + 2 !== stopsLength) {\r\n        bounds.push(this.stops[i + 1][0]);\r\n      }\r\n\r\n      fn = this.doc.ref({\r\n        FunctionType: 2,\r\n        Domain: [0, 1],\r\n        C0: this.stops[i + 0][1],\r\n        C1: this.stops[i + 1][1],\r\n        N: 1\r\n      });\r\n\r\n      stops.push(fn);\r\n      fn.end();\r\n    }\r\n\r\n    // if there are only two stops, we don't need a stitching function\r\n    if (stopsLength === 1) {\r\n      fn = stops[0];\r\n    } else {\r\n      fn = this.doc.ref({\r\n        FunctionType: 3, // stitching function\r\n        Domain: [0, 1],\r\n        Functions: stops,\r\n        Bounds: bounds,\r\n        Encode: encode\r\n      });\r\n\r\n      fn.end();\r\n    }\r\n\r\n    this.id = `Sh${++this.doc._gradCount}`;\r\n\r\n    const shader = this.shader(fn);\r\n    shader.end();\r\n\r\n    const pattern = this.doc.ref({\r\n      Type: 'Pattern',\r\n      PatternType: 2,\r\n      Shading: shader,\r\n      Matrix: this.matrix.map(number)\r\n    });\r\n\r\n    pattern.end();\r\n\r\n    if (this.stops.some(stop => stop[2] < 1)) {\r\n      let grad = this.opacityGradient();\r\n      grad._colorSpace = 'DeviceGray';\r\n\r\n      for (let stop of this.stops) {\r\n        grad.stop(stop[0], [stop[2]]);\r\n      }\r\n\r\n      grad = grad.embed(this.matrix);\r\n\r\n      const pageBBox = [0, 0, this.doc.page.width, this.doc.page.height];\r\n\r\n      const form = this.doc.ref({\r\n        Type: 'XObject',\r\n        Subtype: 'Form',\r\n        FormType: 1,\r\n        BBox: pageBBox,\r\n        Group: {\r\n          Type: 'Group',\r\n          S: 'Transparency',\r\n          CS: 'DeviceGray'\r\n        },\r\n        Resources: {\r\n          ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],\r\n          Pattern: {\r\n            Sh1: grad\r\n          }\r\n        }\r\n      });\r\n\r\n      form.write('/Pattern cs /Sh1 scn');\r\n      form.end(`${pageBBox.join(' ')} re f`);\r\n\r\n      const gstate = this.doc.ref({\r\n        Type: 'ExtGState',\r\n        SMask: {\r\n          Type: 'Mask',\r\n          S: 'Luminosity',\r\n          G: form\r\n        }\r\n      });\r\n\r\n      gstate.end();\r\n\r\n      const opacityPattern = this.doc.ref({\r\n        Type: 'Pattern',\r\n        PatternType: 1,\r\n        PaintType: 1,\r\n        TilingType: 2,\r\n        BBox: pageBBox,\r\n        XStep: pageBBox[2],\r\n        YStep: pageBBox[3],\r\n        Resources: {\r\n          ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],\r\n          Pattern: {\r\n            Sh1: pattern\r\n          },\r\n          ExtGState: {\r\n            Gs1: gstate\r\n          }\r\n        }\r\n      });\r\n\r\n      opacityPattern.write('/Gs1 gs /Pattern cs /Sh1 scn');\r\n      opacityPattern.end(`${pageBBox.join(' ')} re f`);\r\n\r\n      this.doc.page.patterns[this.id] = opacityPattern;\r\n    } else {\r\n      this.doc.page.patterns[this.id] = pattern;\r\n    }\r\n\r\n    return pattern;\r\n  }\r\n\r\n  apply(stroke) {\r\n    // apply gradient transform to existing document ctm\r\n    const [m0, m1, m2, m3, m4, m5] = this.doc._ctm;\r\n    const [m11, m12, m21, m22, dx, dy] = this.transform;\r\n    const m = [\r\n      m0 * m11 + m2 * m12,\r\n      m1 * m11 + m3 * m12,\r\n      m0 * m21 + m2 * m22,\r\n      m1 * m21 + m3 * m22,\r\n      m0 * dx + m2 * dy + m4,\r\n      m1 * dx + m3 * dy + m5\r\n    ];\r\n\r\n    if (!this.embedded || m.join(' ') !== this.matrix.join(' ')) {\r\n      this.embed(m);\r\n    }\r\n    this.doc._setColorSpace('Pattern', stroke);\r\n    const op = stroke ? 'SCN' : 'scn';\r\n    return this.doc.addContent(`/${this.id} ${op}`);\r\n  }\r\n}\r\n\r\nclass PDFLinearGradient extends PDFGradient {\r\n  constructor(doc, x1, y1, x2, y2) {\r\n    super(doc);\r\n    this.x1 = x1;\r\n    this.y1 = y1;\r\n    this.x2 = x2;\r\n    this.y2 = y2;\r\n  }\r\n\r\n  shader(fn) {\r\n    return this.doc.ref({\r\n      ShadingType: 2,\r\n      ColorSpace: this._colorSpace,\r\n      Coords: [this.x1, this.y1, this.x2, this.y2],\r\n      Function: fn,\r\n      Extend: [true, true]\r\n    });\r\n  }\r\n\r\n  opacityGradient() {\r\n    return new PDFLinearGradient(this.doc, this.x1, this.y1, this.x2, this.y2);\r\n  }\r\n}\r\n\r\nclass PDFRadialGradient extends PDFGradient {\r\n  constructor(doc, x1, y1, r1, x2, y2, r2) {\r\n    super(doc);\r\n    this.doc = doc;\r\n    this.x1 = x1;\r\n    this.y1 = y1;\r\n    this.r1 = r1;\r\n    this.x2 = x2;\r\n    this.y2 = y2;\r\n    this.r2 = r2;\r\n  }\r\n\r\n  shader(fn) {\r\n    return this.doc.ref({\r\n      ShadingType: 3,\r\n      ColorSpace: this._colorSpace,\r\n      Coords: [this.x1, this.y1, this.r1, this.x2, this.y2, this.r2],\r\n      Function: fn,\r\n      Extend: [true, true]\r\n    });\r\n  }\r\n\r\n  opacityGradient() {\r\n    return new PDFRadialGradient(\r\n      this.doc,\r\n      this.x1,\r\n      this.y1,\r\n      this.r1,\r\n      this.x2,\r\n      this.y2,\r\n      this.r2\r\n    );\r\n  }\r\n}\r\n\r\nexport default { PDFGradient, PDFLinearGradient, PDFRadialGradient };\r\n","/*\r\nPDF tiling pattern support. Uncolored only.\r\n */\r\n\r\nconst underlyingColorSpaces = ['DeviceCMYK', 'DeviceRGB'];\r\n\r\nclass PDFTilingPattern {\r\n  constructor(doc, bBox, xStep, yStep, stream) {\r\n    this.doc = doc;\r\n    this.bBox = bBox;\r\n    this.xStep = xStep;\r\n    this.yStep = yStep;\r\n    this.stream = stream;\r\n  }\r\n\r\n  createPattern() {\r\n    // no resources needed for our current usage\r\n    // required entry\r\n    const resources = this.doc.ref();\r\n    resources.end();\r\n    // apply default transform matrix (flipped in the default doc._ctm)\r\n    // see document.js & gradient.js\r\n    const [m0, m1, m2, m3, m4, m5] = this.doc._ctm;\r\n    const [m11, m12, m21, m22, dx, dy] = [1, 0, 0, 1, 0, 0];\r\n    const m = [\r\n      m0 * m11 + m2 * m12,\r\n      m1 * m11 + m3 * m12,\r\n      m0 * m21 + m2 * m22,\r\n      m1 * m21 + m3 * m22,\r\n      m0 * dx + m2 * dy + m4,\r\n      m1 * dx + m3 * dy + m5\r\n    ];\r\n    const pattern = this.doc.ref({\r\n      Type: 'Pattern',\r\n      PatternType: 1, // tiling\r\n      PaintType: 2, // 1-colored, 2-uncolored\r\n      TilingType: 2, // 2-no distortion\r\n      BBox: this.bBox,\r\n      XStep: this.xStep,\r\n      YStep: this.yStep,\r\n      Matrix: m.map(v => +v.toFixed(5)),\r\n      Resources: resources\r\n    });\r\n    pattern.end(this.stream);\r\n    return pattern;\r\n  }\r\n\r\n  embedPatternColorSpaces() {\r\n    // map each pattern to an underlying color space\r\n    // and embed on each page\r\n    underlyingColorSpaces.forEach(csName => {\r\n      const csId = this.getPatternColorSpaceId(csName);\r\n\r\n      if (this.doc.page.colorSpaces[csId]) return;\r\n      const cs = this.doc.ref(['Pattern', csName]);\r\n      cs.end();\r\n      this.doc.page.colorSpaces[csId] = cs;\r\n    });\r\n  }\r\n\r\n  getPatternColorSpaceId(underlyingColorspace) {\r\n    return `CsP${underlyingColorspace}`;\r\n  }\r\n\r\n  embed() {\r\n    if (!this.id) {\r\n      this.doc._patternCount = this.doc._patternCount + 1;\r\n      this.id = 'P' + this.doc._patternCount;\r\n      this.pattern = this.createPattern();\r\n    }\r\n\r\n    // patterns are embedded in each page\r\n    if (!this.doc.page.patterns[this.id]) {\r\n      this.doc.page.patterns[this.id] = this.pattern;\r\n    }\r\n  }\r\n\r\n  apply(stroke, patternColor) {\r\n    // do any embedding/creating that might be needed\r\n    this.embedPatternColorSpaces();\r\n    this.embed();\r\n\r\n    const normalizedColor = this.doc._normalizeColor(patternColor);\r\n    if (!normalizedColor)\r\n      throw Error(`invalid pattern color. (value: ${patternColor})`);\r\n\r\n    // select one of the pattern color spaces\r\n    const csId = this.getPatternColorSpaceId(\r\n      this.doc._getColorSpace(normalizedColor)\r\n    );\r\n    this.doc._setColorSpace(csId, stroke);\r\n\r\n    // stroke/fill using the pattern and color (in the above underlying color space)\r\n    const op = stroke ? 'SCN' : 'scn';\r\n    return this.doc.addContent(\r\n      `${normalizedColor.join(' ')} /${this.id} ${op}`\r\n    );\r\n  }\r\n}\r\n\r\nexport default { PDFTilingPattern };\r\n","import Gradient from '../gradient';\r\nimport pattern from '../pattern';\r\n\r\nconst { PDFGradient, PDFLinearGradient, PDFRadialGradient } = Gradient;\r\nconst { PDFTilingPattern } = pattern;\r\n\r\nexport default {\r\n  initColor() {\r\n    // The opacity dictionaries\r\n    this._opacityRegistry = {};\r\n    this._opacityCount = 0;\r\n    this._patternCount = 0;\r\n    return (this._gradCount = 0);\r\n  },\r\n\r\n  _normalizeColor(color) {\r\n    if (typeof color === 'string') {\r\n      if (color.charAt(0) === '#') {\r\n        if (color.length === 4) {\r\n          color = color.replace(\r\n            /#([0-9A-F])([0-9A-F])([0-9A-F])/i,\r\n            '#$1$1$2$2$3$3'\r\n          );\r\n        }\r\n        const hex = parseInt(color.slice(1), 16);\r\n        color = [hex >> 16, (hex >> 8) & 0xff, hex & 0xff];\r\n      } else if (namedColors[color]) {\r\n        color = namedColors[color];\r\n      }\r\n    }\r\n\r\n    if (Array.isArray(color)) {\r\n      // RGB\r\n      if (color.length === 3) {\r\n        color = color.map(part => part / 255);\r\n        // CMYK\r\n      } else if (color.length === 4) {\r\n        color = color.map(part => part / 100);\r\n      }\r\n      return color;\r\n    }\r\n\r\n    return null;\r\n  },\r\n\r\n  _setColor(color, stroke) {\r\n    if (color instanceof PDFGradient) {\r\n      color.apply(stroke);\r\n      return true;\r\n      // see if tiling pattern, decode & apply it it\r\n    } else if (Array.isArray(color) && color[0] instanceof PDFTilingPattern) {\r\n      color[0].apply(stroke, color[1]);\r\n      return true;\r\n    }\r\n    // any other case should be a normal color and not a pattern\r\n    return this._setColorCore(color, stroke);\r\n  },\r\n\r\n  _setColorCore(color, stroke) {\r\n    color = this._normalizeColor(color);\r\n    if (!color) {\r\n      return false;\r\n    }\r\n\r\n    const op = stroke ? 'SCN' : 'scn';\r\n    const space = this._getColorSpace(color);\r\n    this._setColorSpace(space, stroke);\r\n\r\n    color = color.join(' ');\r\n    this.addContent(`${color} ${op}`);\r\n\r\n    return true;\r\n  },\r\n\r\n  _setColorSpace(space, stroke) {\r\n    const op = stroke ? 'CS' : 'cs';\r\n    return this.addContent(`/${space} ${op}`);\r\n  },\r\n\r\n  _getColorSpace(color) {\r\n    return color.length === 4 ? 'DeviceCMYK' : 'DeviceRGB';\r\n  },\r\n\r\n  fillColor(color, opacity) {\r\n    const set = this._setColor(color, false);\r\n    if (set) {\r\n      this.fillOpacity(opacity);\r\n    }\r\n\r\n    // save this for text wrapper, which needs to reset\r\n    // the fill color on new pages\r\n    this._fillColor = [color, opacity];\r\n    return this;\r\n  },\r\n\r\n  strokeColor(color, opacity) {\r\n    const set = this._setColor(color, true);\r\n    if (set) {\r\n      this.strokeOpacity(opacity);\r\n    }\r\n    return this;\r\n  },\r\n\r\n  opacity(opacity) {\r\n    this._doOpacity(opacity, opacity);\r\n    return this;\r\n  },\r\n\r\n  fillOpacity(opacity) {\r\n    this._doOpacity(opacity, null);\r\n    return this;\r\n  },\r\n\r\n  strokeOpacity(opacity) {\r\n    this._doOpacity(null, opacity);\r\n    return this;\r\n  },\r\n\r\n  _doOpacity(fillOpacity, strokeOpacity) {\r\n    let dictionary, name;\r\n    if (fillOpacity == null && strokeOpacity == null) {\r\n      return;\r\n    }\r\n\r\n    if (fillOpacity != null) {\r\n      fillOpacity = Math.max(0, Math.min(1, fillOpacity));\r\n    }\r\n    if (strokeOpacity != null) {\r\n      strokeOpacity = Math.max(0, Math.min(1, strokeOpacity));\r\n    }\r\n    const key = `${fillOpacity}_${strokeOpacity}`;\r\n\r\n    if (this._opacityRegistry[key]) {\r\n      [dictionary, name] = this._opacityRegistry[key];\r\n    } else {\r\n      dictionary = { Type: 'ExtGState' };\r\n\r\n      if (fillOpacity != null) {\r\n        dictionary.ca = fillOpacity;\r\n      }\r\n      if (strokeOpacity != null) {\r\n        dictionary.CA = strokeOpacity;\r\n      }\r\n\r\n      dictionary = this.ref(dictionary);\r\n      dictionary.end();\r\n      const id = ++this._opacityCount;\r\n      name = `Gs${id}`;\r\n      this._opacityRegistry[key] = [dictionary, name];\r\n    }\r\n\r\n    this.page.ext_gstates[name] = dictionary;\r\n    return this.addContent(`/${name} gs`);\r\n  },\r\n\r\n  linearGradient(x1, y1, x2, y2) {\r\n    return new PDFLinearGradient(this, x1, y1, x2, y2);\r\n  },\r\n\r\n  radialGradient(x1, y1, r1, x2, y2, r2) {\r\n    return new PDFRadialGradient(this, x1, y1, r1, x2, y2, r2);\r\n  },\r\n\r\n  pattern(bbox, xStep, yStep, stream) {\r\n    return new PDFTilingPattern(this, bbox, xStep, yStep, stream);\r\n  }\r\n};\r\n\r\nvar namedColors = {\r\n  aliceblue: [240, 248, 255],\r\n  antiquewhite: [250, 235, 215],\r\n  aqua: [0, 255, 255],\r\n  aquamarine: [127, 255, 212],\r\n  azure: [240, 255, 255],\r\n  beige: [245, 245, 220],\r\n  bisque: [255, 228, 196],\r\n  black: [0, 0, 0],\r\n  blanchedalmond: [255, 235, 205],\r\n  blue: [0, 0, 255],\r\n  blueviolet: [138, 43, 226],\r\n  brown: [165, 42, 42],\r\n  burlywood: [222, 184, 135],\r\n  cadetblue: [95, 158, 160],\r\n  chartreuse: [127, 255, 0],\r\n  chocolate: [210, 105, 30],\r\n  coral: [255, 127, 80],\r\n  cornflowerblue: [100, 149, 237],\r\n  cornsilk: [255, 248, 220],\r\n  crimson: [220, 20, 60],\r\n  cyan: [0, 255, 255],\r\n  darkblue: [0, 0, 139],\r\n  darkcyan: [0, 139, 139],\r\n  darkgoldenrod: [184, 134, 11],\r\n  darkgray: [169, 169, 169],\r\n  darkgreen: [0, 100, 0],\r\n  darkgrey: [169, 169, 169],\r\n  darkkhaki: [189, 183, 107],\r\n  darkmagenta: [139, 0, 139],\r\n  darkolivegreen: [85, 107, 47],\r\n  darkorange: [255, 140, 0],\r\n  darkorchid: [153, 50, 204],\r\n  darkred: [139, 0, 0],\r\n  darksalmon: [233, 150, 122],\r\n  darkseagreen: [143, 188, 143],\r\n  darkslateblue: [72, 61, 139],\r\n  darkslategray: [47, 79, 79],\r\n  darkslategrey: [47, 79, 79],\r\n  darkturquoise: [0, 206, 209],\r\n  darkviolet: [148, 0, 211],\r\n  deeppink: [255, 20, 147],\r\n  deepskyblue: [0, 191, 255],\r\n  dimgray: [105, 105, 105],\r\n  dimgrey: [105, 105, 105],\r\n  dodgerblue: [30, 144, 255],\r\n  firebrick: [178, 34, 34],\r\n  floralwhite: [255, 250, 240],\r\n  forestgreen: [34, 139, 34],\r\n  fuchsia: [255, 0, 255],\r\n  gainsboro: [220, 220, 220],\r\n  ghostwhite: [248, 248, 255],\r\n  gold: [255, 215, 0],\r\n  goldenrod: [218, 165, 32],\r\n  gray: [128, 128, 128],\r\n  grey: [128, 128, 128],\r\n  green: [0, 128, 0],\r\n  greenyellow: [173, 255, 47],\r\n  honeydew: [240, 255, 240],\r\n  hotpink: [255, 105, 180],\r\n  indianred: [205, 92, 92],\r\n  indigo: [75, 0, 130],\r\n  ivory: [255, 255, 240],\r\n  khaki: [240, 230, 140],\r\n  lavender: [230, 230, 250],\r\n  lavenderblush: [255, 240, 245],\r\n  lawngreen: [124, 252, 0],\r\n  lemonchiffon: [255, 250, 205],\r\n  lightblue: [173, 216, 230],\r\n  lightcoral: [240, 128, 128],\r\n  lightcyan: [224, 255, 255],\r\n  lightgoldenrodyellow: [250, 250, 210],\r\n  lightgray: [211, 211, 211],\r\n  lightgreen: [144, 238, 144],\r\n  lightgrey: [211, 211, 211],\r\n  lightpink: [255, 182, 193],\r\n  lightsalmon: [255, 160, 122],\r\n  lightseagreen: [32, 178, 170],\r\n  lightskyblue: [135, 206, 250],\r\n  lightslategray: [119, 136, 153],\r\n  lightslategrey: [119, 136, 153],\r\n  lightsteelblue: [176, 196, 222],\r\n  lightyellow: [255, 255, 224],\r\n  lime: [0, 255, 0],\r\n  limegreen: [50, 205, 50],\r\n  linen: [250, 240, 230],\r\n  magenta: [255, 0, 255],\r\n  maroon: [128, 0, 0],\r\n  mediumaquamarine: [102, 205, 170],\r\n  mediumblue: [0, 0, 205],\r\n  mediumorchid: [186, 85, 211],\r\n  mediumpurple: [147, 112, 219],\r\n  mediumseagreen: [60, 179, 113],\r\n  mediumslateblue: [123, 104, 238],\r\n  mediumspringgreen: [0, 250, 154],\r\n  mediumturquoise: [72, 209, 204],\r\n  mediumvioletred: [199, 21, 133],\r\n  midnightblue: [25, 25, 112],\r\n  mintcream: [245, 255, 250],\r\n  mistyrose: [255, 228, 225],\r\n  moccasin: [255, 228, 181],\r\n  navajowhite: [255, 222, 173],\r\n  navy: [0, 0, 128],\r\n  oldlace: [253, 245, 230],\r\n  olive: [128, 128, 0],\r\n  olivedrab: [107, 142, 35],\r\n  orange: [255, 165, 0],\r\n  orangered: [255, 69, 0],\r\n  orchid: [218, 112, 214],\r\n  palegoldenrod: [238, 232, 170],\r\n  palegreen: [152, 251, 152],\r\n  paleturquoise: [175, 238, 238],\r\n  palevioletred: [219, 112, 147],\r\n  papayawhip: [255, 239, 213],\r\n  peachpuff: [255, 218, 185],\r\n  peru: [205, 133, 63],\r\n  pink: [255, 192, 203],\r\n  plum: [221, 160, 221],\r\n  powderblue: [176, 224, 230],\r\n  purple: [128, 0, 128],\r\n  red: [255, 0, 0],\r\n  rosybrown: [188, 143, 143],\r\n  royalblue: [65, 105, 225],\r\n  saddlebrown: [139, 69, 19],\r\n  salmon: [250, 128, 114],\r\n  sandybrown: [244, 164, 96],\r\n  seagreen: [46, 139, 87],\r\n  seashell: [255, 245, 238],\r\n  sienna: [160, 82, 45],\r\n  silver: [192, 192, 192],\r\n  skyblue: [135, 206, 235],\r\n  slateblue: [106, 90, 205],\r\n  slategray: [112, 128, 144],\r\n  slategrey: [112, 128, 144],\r\n  snow: [255, 250, 250],\r\n  springgreen: [0, 255, 127],\r\n  steelblue: [70, 130, 180],\r\n  tan: [210, 180, 140],\r\n  teal: [0, 128, 128],\r\n  thistle: [216, 191, 216],\r\n  tomato: [255, 99, 71],\r\n  turquoise: [64, 224, 208],\r\n  violet: [238, 130, 238],\r\n  wheat: [245, 222, 179],\r\n  white: [255, 255, 255],\r\n  whitesmoke: [245, 245, 245],\r\n  yellow: [255, 255, 0],\r\n  yellowgreen: [154, 205, 50]\r\n};\r\n","import SVGPath from '../path';\r\nimport PDFObject from '../object';\r\n\r\nconst { number } = PDFObject;\r\n\r\n// This constant is used to approximate a symmetrical arc using a cubic\r\n// Bezier curve.\r\nconst KAPPA = 4.0 * ((Math.sqrt(2) - 1.0) / 3.0);\r\nexport default {\r\n  initVector() {\r\n    this._ctm = [1, 0, 0, 1, 0, 0]; // current transformation matrix\r\n    return (this._ctmStack = []);\r\n  },\r\n\r\n  save() {\r\n    this._ctmStack.push(this._ctm.slice());\r\n    // TODO: save/restore colorspace and styles so not setting it unnessesarily all the time?\r\n    return this.addContent('q');\r\n  },\r\n\r\n  restore() {\r\n    this._ctm = this._ctmStack.pop() || [1, 0, 0, 1, 0, 0];\r\n    return this.addContent('Q');\r\n  },\r\n\r\n  closePath() {\r\n    return this.addContent('h');\r\n  },\r\n\r\n  lineWidth(w) {\r\n    return this.addContent(`${number(w)} w`);\r\n  },\r\n\r\n  _CAP_STYLES: {\r\n    BUTT: 0,\r\n    ROUND: 1,\r\n    SQUARE: 2\r\n  },\r\n\r\n  lineCap(c) {\r\n    if (typeof c === 'string') {\r\n      c = this._CAP_STYLES[c.toUpperCase()];\r\n    }\r\n    return this.addContent(`${c} J`);\r\n  },\r\n\r\n  _JOIN_STYLES: {\r\n    MITER: 0,\r\n    ROUND: 1,\r\n    BEVEL: 2\r\n  },\r\n\r\n  lineJoin(j) {\r\n    if (typeof j === 'string') {\r\n      j = this._JOIN_STYLES[j.toUpperCase()];\r\n    }\r\n    return this.addContent(`${j} j`);\r\n  },\r\n\r\n  miterLimit(m) {\r\n    return this.addContent(`${number(m)} M`);\r\n  },\r\n\r\n  dash(length, options = {}) {\r\n    const originalLength = length;\r\n    if (!Array.isArray(length)) {\r\n      length = [length, options.space || length];\r\n    }\r\n\r\n    const valid = length.every(x => Number.isFinite(x) && x > 0);\r\n    if (!valid) {\r\n      throw new Error(\r\n        `dash(${JSON.stringify(originalLength)}, ${JSON.stringify(\r\n          options\r\n        )}) invalid, lengths must be numeric and greater than zero`\r\n      );\r\n    }\r\n\r\n    length = length.map(number).join(' ');\r\n    return this.addContent(`[${length}] ${number(options.phase || 0)} d`);\r\n  },\r\n\r\n  undash() {\r\n    return this.addContent('[] 0 d');\r\n  },\r\n\r\n  moveTo(x, y) {\r\n    return this.addContent(`${number(x)} ${number(y)} m`);\r\n  },\r\n\r\n  lineTo(x, y) {\r\n    return this.addContent(`${number(x)} ${number(y)} l`);\r\n  },\r\n\r\n  bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\r\n    return this.addContent(\r\n      `${number(cp1x)} ${number(cp1y)} ${number(cp2x)} ${number(cp2y)} ${number(\r\n        x\r\n      )} ${number(y)} c`\r\n    );\r\n  },\r\n\r\n  quadraticCurveTo(cpx, cpy, x, y) {\r\n    return this.addContent(\r\n      `${number(cpx)} ${number(cpy)} ${number(x)} ${number(y)} v`\r\n    );\r\n  },\r\n\r\n  rect(x, y, w, h) {\r\n    return this.addContent(\r\n      `${number(x)} ${number(y)} ${number(w)} ${number(h)} re`\r\n    );\r\n  },\r\n\r\n  roundedRect(x, y, w, h, r) {\r\n    if (r == null) {\r\n      r = 0;\r\n    }\r\n    r = Math.min(r, 0.5 * w, 0.5 * h);\r\n\r\n    // amount to inset control points from corners (see `ellipse`)\r\n    const c = r * (1.0 - KAPPA);\r\n\r\n    this.moveTo(x + r, y);\r\n    this.lineTo(x + w - r, y);\r\n    this.bezierCurveTo(x + w - c, y, x + w, y + c, x + w, y + r);\r\n    this.lineTo(x + w, y + h - r);\r\n    this.bezierCurveTo(x + w, y + h - c, x + w - c, y + h, x + w - r, y + h);\r\n    this.lineTo(x + r, y + h);\r\n    this.bezierCurveTo(x + c, y + h, x, y + h - c, x, y + h - r);\r\n    this.lineTo(x, y + r);\r\n    this.bezierCurveTo(x, y + c, x + c, y, x + r, y);\r\n    return this.closePath();\r\n  },\r\n\r\n  ellipse(x, y, r1, r2) {\r\n    // based on http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas/2173084#2173084\r\n    if (r2 == null) {\r\n      r2 = r1;\r\n    }\r\n    x -= r1;\r\n    y -= r2;\r\n    const ox = r1 * KAPPA;\r\n    const oy = r2 * KAPPA;\r\n    const xe = x + r1 * 2;\r\n    const ye = y + r2 * 2;\r\n    const xm = x + r1;\r\n    const ym = y + r2;\r\n\r\n    this.moveTo(x, ym);\r\n    this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);\r\n    this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);\r\n    this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);\r\n    this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);\r\n    return this.closePath();\r\n  },\r\n\r\n  circle(x, y, radius) {\r\n    return this.ellipse(x, y, radius);\r\n  },\r\n\r\n  arc(x, y, radius, startAngle, endAngle, anticlockwise) {\r\n    if (anticlockwise == null) {\r\n      anticlockwise = false;\r\n    }\r\n    const TWO_PI = 2.0 * Math.PI;\r\n    const HALF_PI = 0.5 * Math.PI;\r\n\r\n    let deltaAng = endAngle - startAngle;\r\n\r\n    if (Math.abs(deltaAng) > TWO_PI) {\r\n      // draw only full circle if more than that is specified\r\n      deltaAng = TWO_PI;\r\n    } else if (deltaAng !== 0 && anticlockwise !== deltaAng < 0) {\r\n      // necessary to flip direction of rendering\r\n      const dir = anticlockwise ? -1 : 1;\r\n      deltaAng = dir * TWO_PI + deltaAng;\r\n    }\r\n\r\n    const numSegs = Math.ceil(Math.abs(deltaAng) / HALF_PI);\r\n    const segAng = deltaAng / numSegs;\r\n    const handleLen = (segAng / HALF_PI) * KAPPA * radius;\r\n    let curAng = startAngle;\r\n\r\n    // component distances between anchor point and control point\r\n    let deltaCx = -Math.sin(curAng) * handleLen;\r\n    let deltaCy = Math.cos(curAng) * handleLen;\r\n\r\n    // anchor point\r\n    let ax = x + Math.cos(curAng) * radius;\r\n    let ay = y + Math.sin(curAng) * radius;\r\n\r\n    // calculate and render segments\r\n    this.moveTo(ax, ay);\r\n\r\n    for (let segIdx = 0; segIdx < numSegs; segIdx++) {\r\n      // starting control point\r\n      const cp1x = ax + deltaCx;\r\n      const cp1y = ay + deltaCy;\r\n\r\n      // step angle\r\n      curAng += segAng;\r\n\r\n      // next anchor point\r\n      ax = x + Math.cos(curAng) * radius;\r\n      ay = y + Math.sin(curAng) * radius;\r\n\r\n      // next control point delta\r\n      deltaCx = -Math.sin(curAng) * handleLen;\r\n      deltaCy = Math.cos(curAng) * handleLen;\r\n\r\n      // ending control point\r\n      const cp2x = ax - deltaCx;\r\n      const cp2y = ay - deltaCy;\r\n\r\n      // render segment\r\n      this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, ax, ay);\r\n    }\r\n\r\n    return this;\r\n  },\r\n\r\n  polygon(...points) {\r\n    this.moveTo(...(points.shift() || []));\r\n    for (let point of points) {\r\n      this.lineTo(...(point || []));\r\n    }\r\n    return this.closePath();\r\n  },\r\n\r\n  path(path) {\r\n    SVGPath.apply(this, path);\r\n    return this;\r\n  },\r\n\r\n  _windingRule(rule) {\r\n    if (/even-?odd/.test(rule)) {\r\n      return '*';\r\n    }\r\n\r\n    return '';\r\n  },\r\n\r\n  fill(color, rule) {\r\n    if (/(even-?odd)|(non-?zero)/.test(color)) {\r\n      rule = color;\r\n      color = null;\r\n    }\r\n\r\n    if (color) {\r\n      this.fillColor(color);\r\n    }\r\n    return this.addContent(`f${this._windingRule(rule)}`);\r\n  },\r\n\r\n  stroke(color) {\r\n    if (color) {\r\n      this.strokeColor(color);\r\n    }\r\n    return this.addContent('S');\r\n  },\r\n\r\n  fillAndStroke(fillColor, strokeColor, rule) {\r\n    if (strokeColor == null) {\r\n      strokeColor = fillColor;\r\n    }\r\n    const isFillRule = /(even-?odd)|(non-?zero)/;\r\n    if (isFillRule.test(fillColor)) {\r\n      rule = fillColor;\r\n      fillColor = null;\r\n    }\r\n\r\n    if (isFillRule.test(strokeColor)) {\r\n      rule = strokeColor;\r\n      strokeColor = fillColor;\r\n    }\r\n\r\n    if (fillColor) {\r\n      this.fillColor(fillColor);\r\n      this.strokeColor(strokeColor);\r\n    }\r\n\r\n    return this.addContent(`B${this._windingRule(rule)}`);\r\n  },\r\n\r\n  clip(rule) {\r\n    return this.addContent(`W${this._windingRule(rule)} n`);\r\n  },\r\n\r\n  transform(m11, m12, m21, m22, dx, dy) {\r\n    // keep track of the current transformation matrix\r\n    const m = this._ctm;\r\n    const [m0, m1, m2, m3, m4, m5] = m;\r\n    m[0] = m0 * m11 + m2 * m12;\r\n    m[1] = m1 * m11 + m3 * m12;\r\n    m[2] = m0 * m21 + m2 * m22;\r\n    m[3] = m1 * m21 + m3 * m22;\r\n    m[4] = m0 * dx + m2 * dy + m4;\r\n    m[5] = m1 * dx + m3 * dy + m5;\r\n\r\n    const values = [m11, m12, m21, m22, dx, dy].map(v => number(v)).join(' ');\r\n    return this.addContent(`${values} cm`);\r\n  },\r\n\r\n  translate(x, y) {\r\n    return this.transform(1, 0, 0, 1, x, y);\r\n  },\r\n\r\n  rotate(angle, options = {}) {\r\n    let y;\r\n    const rad = (angle * Math.PI) / 180;\r\n    const cos = Math.cos(rad);\r\n    const sin = Math.sin(rad);\r\n    let x = (y = 0);\r\n\r\n    if (options.origin != null) {\r\n      [x, y] = options.origin;\r\n      const x1 = x * cos - y * sin;\r\n      const y1 = x * sin + y * cos;\r\n      x -= x1;\r\n      y -= y1;\r\n    }\r\n\r\n    return this.transform(cos, sin, -sin, cos, x, y);\r\n  },\r\n\r\n  scale(xFactor, yFactor, options = {}) {\r\n    let y;\r\n    if (yFactor == null) {\r\n      yFactor = xFactor;\r\n    }\r\n    if (typeof yFactor === 'object') {\r\n      options = yFactor;\r\n      yFactor = xFactor;\r\n    }\r\n\r\n    let x = (y = 0);\r\n    if (options.origin != null) {\r\n      [x, y] = options.origin;\r\n      x -= xFactor * x;\r\n      y -= yFactor * y;\r\n    }\r\n\r\n    return this.transform(xFactor, 0, 0, yFactor, x, y);\r\n  }\r\n};\r\n","import fs from 'fs';\r\n\r\nconst WIN_ANSI_MAP = {\r\n  402: 131,\r\n  8211: 150,\r\n  8212: 151,\r\n  8216: 145,\r\n  8217: 146,\r\n  8218: 130,\r\n  8220: 147,\r\n  8221: 148,\r\n  8222: 132,\r\n  8224: 134,\r\n  8225: 135,\r\n  8226: 149,\r\n  8230: 133,\r\n  8364: 128,\r\n  8240: 137,\r\n  8249: 139,\r\n  8250: 155,\r\n  710: 136,\r\n  8482: 153,\r\n  338: 140,\r\n  339: 156,\r\n  732: 152,\r\n  352: 138,\r\n  353: 154,\r\n  376: 159,\r\n  381: 142,\r\n  382: 158\r\n};\r\n\r\nconst characters = `\\\r\n.notdef       .notdef        .notdef        .notdef\r\n.notdef       .notdef        .notdef        .notdef\r\n.notdef       .notdef        .notdef        .notdef\r\n.notdef       .notdef        .notdef        .notdef\r\n.notdef       .notdef        .notdef        .notdef\r\n.notdef       .notdef        .notdef        .notdef\r\n.notdef       .notdef        .notdef        .notdef\r\n.notdef       .notdef        .notdef        .notdef\r\n  \r\nspace         exclam         quotedbl       numbersign\r\ndollar        percent        ampersand      quotesingle\r\nparenleft     parenright     asterisk       plus\r\ncomma         hyphen         period         slash\r\nzero          one            two            three\r\nfour          five           six            seven\r\neight         nine           colon          semicolon\r\nless          equal          greater        question\r\n  \r\nat            A              B              C\r\nD             E              F              G\r\nH             I              J              K\r\nL             M              N              O\r\nP             Q              R              S\r\nT             U              V              W\r\nX             Y              Z              bracketleft\r\nbackslash     bracketright   asciicircum    underscore\r\n  \r\ngrave         a              b              c\r\nd             e              f              g\r\nh             i              j              k\r\nl             m              n              o\r\np             q              r              s\r\nt             u              v              w\r\nx             y              z              braceleft\r\nbar           braceright     asciitilde     .notdef\r\n  \r\nEuro          .notdef        quotesinglbase florin\r\nquotedblbase  ellipsis       dagger         daggerdbl\r\ncircumflex    perthousand    Scaron         guilsinglleft\r\nOE            .notdef        Zcaron         .notdef\r\n.notdef       quoteleft      quoteright     quotedblleft\r\nquotedblright bullet         endash         emdash\r\ntilde         trademark      scaron         guilsinglright\r\noe            .notdef        zcaron         ydieresis\r\n  \r\nspace         exclamdown     cent           sterling\r\ncurrency      yen            brokenbar      section\r\ndieresis      copyright      ordfeminine    guillemotleft\r\nlogicalnot    hyphen         registered     macron\r\ndegree        plusminus      twosuperior    threesuperior\r\nacute         mu             paragraph      periodcentered\r\ncedilla       onesuperior    ordmasculine   guillemotright\r\nonequarter    onehalf        threequarters  questiondown\r\n  \r\nAgrave        Aacute         Acircumflex    Atilde\r\nAdieresis     Aring          AE             Ccedilla\r\nEgrave        Eacute         Ecircumflex    Edieresis\r\nIgrave        Iacute         Icircumflex    Idieresis\r\nEth           Ntilde         Ograve         Oacute\r\nOcircumflex   Otilde         Odieresis      multiply\r\nOslash        Ugrave         Uacute         Ucircumflex\r\nUdieresis     Yacute         Thorn          germandbls\r\n  \r\nagrave        aacute         acircumflex    atilde\r\nadieresis     aring          ae             ccedilla\r\negrave        eacute         ecircumflex    edieresis\r\nigrave        iacute         icircumflex    idieresis\r\neth           ntilde         ograve         oacute\r\nocircumflex   otilde         odieresis      divide\r\noslash        ugrave         uacute         ucircumflex\r\nudieresis     yacute         thorn          ydieresis\\\r\n`.split(/\\s+/);\r\n\r\nclass AFMFont {\r\n  static open(filename) {\r\n    return new AFMFont(fs.readFileSync(filename, 'utf8'));\r\n  }\r\n\r\n  constructor(contents) {\r\n    this.contents = contents;\r\n    this.attributes = {};\r\n    this.glyphWidths = {};\r\n    this.boundingBoxes = {};\r\n    this.kernPairs = {};\r\n\r\n    this.parse();\r\n    // todo: remove charWidths since appears to not be used\r\n    this.charWidths = new Array(256);\r\n    for (let char = 0; char <= 255; char++) {\r\n      this.charWidths[char] = this.glyphWidths[characters[char]];\r\n    }\r\n\r\n    this.bbox = this.attributes['FontBBox'].split(/\\s+/).map(e => +e);\r\n    this.ascender = +(this.attributes['Ascender'] || 0);\r\n    this.descender = +(this.attributes['Descender'] || 0);\r\n    this.xHeight = +(this.attributes['XHeight'] || 0);\r\n    this.capHeight = +(this.attributes['CapHeight'] || 0);\r\n    this.lineGap =\r\n      this.bbox[3] - this.bbox[1] - (this.ascender - this.descender);\r\n  }\r\n\r\n  parse() {\r\n    let section = '';\r\n    for (let line of this.contents.split('\\n')) {\r\n      var match;\r\n      var a;\r\n      if ((match = line.match(/^Start(\\w+)/))) {\r\n        section = match[1];\r\n        continue;\r\n      } else if ((match = line.match(/^End(\\w+)/))) {\r\n        section = '';\r\n        continue;\r\n      }\r\n\r\n      switch (section) {\r\n        case 'FontMetrics':\r\n          match = line.match(/(^\\w+)\\s+(.*)/);\r\n          var key = match[1];\r\n          var value = match[2];\r\n\r\n          if ((a = this.attributes[key])) {\r\n            if (!Array.isArray(a)) {\r\n              a = this.attributes[key] = [a];\r\n            }\r\n            a.push(value);\r\n          } else {\r\n            this.attributes[key] = value;\r\n          }\r\n          break;\r\n\r\n        case 'CharMetrics':\r\n          if (!/^CH?\\s/.test(line)) {\r\n            continue;\r\n          }\r\n          var name = line.match(/\\bN\\s+(\\.?\\w+)\\s*;/)[1];\r\n          this.glyphWidths[name] = +line.match(/\\bWX\\s+(\\d+)\\s*;/)[1];\r\n          break;\r\n\r\n        case 'KernPairs':\r\n          match = line.match(/^KPX\\s+(\\.?\\w+)\\s+(\\.?\\w+)\\s+(-?\\d+)/);\r\n          if (match) {\r\n            this.kernPairs[match[1] + '\\0' + match[2]] = parseInt(match[3]);\r\n          }\r\n          break;\r\n      }\r\n    }\r\n  }\r\n\r\n  encodeText(text) {\r\n    const res = [];\r\n    for (let i = 0, len = text.length; i < len; i++) {\r\n      let char = text.charCodeAt(i);\r\n      char = WIN_ANSI_MAP[char] || char;\r\n      res.push(char.toString(16));\r\n    }\r\n\r\n    return res;\r\n  }\r\n\r\n  glyphsForString(string) {\r\n    const glyphs = [];\r\n\r\n    for (let i = 0, len = string.length; i < len; i++) {\r\n      const charCode = string.charCodeAt(i);\r\n      glyphs.push(this.characterToGlyph(charCode));\r\n    }\r\n\r\n    return glyphs;\r\n  }\r\n\r\n  characterToGlyph(character) {\r\n    return characters[WIN_ANSI_MAP[character] || character] || '.notdef';\r\n  }\r\n\r\n  widthOfGlyph(glyph) {\r\n    return this.glyphWidths[glyph] || 0;\r\n  }\r\n\r\n  getKernPair(left, right) {\r\n    return this.kernPairs[left + '\\0' + right] || 0;\r\n  }\r\n\r\n  advancesForGlyphs(glyphs) {\r\n    const advances = [];\r\n\r\n    for (let index = 0; index < glyphs.length; index++) {\r\n      const left = glyphs[index];\r\n      const right = glyphs[index + 1];\r\n      advances.push(this.widthOfGlyph(left) + this.getKernPair(left, right));\r\n    }\r\n\r\n    return advances;\r\n  }\r\n}\r\n\r\nexport default AFMFont;\r\n","class PDFFont {\r\n  constructor() {}\r\n\r\n  encode() {\r\n    throw new Error('Must be implemented by subclasses');\r\n  }\r\n\r\n  widthOfString() {\r\n    throw new Error('Must be implemented by subclasses');\r\n  }\r\n\r\n  ref() {\r\n    return this.dictionary != null\r\n      ? this.dictionary\r\n      : (this.dictionary = this.document.ref());\r\n  }\r\n\r\n  finalize() {\r\n    if (this.embedded || this.dictionary == null) {\r\n      return;\r\n    }\r\n\r\n    this.embed();\r\n    return (this.embedded = true);\r\n  }\r\n\r\n  embed() {\r\n    throw new Error('Must be implemented by subclasses');\r\n  }\r\n\r\n  lineHeight(size, includeGap) {\r\n    if (includeGap == null) {\r\n      includeGap = false;\r\n    }\r\n    const gap = includeGap ? this.lineGap : 0;\r\n    return ((this.ascender + gap - this.descender) / 1000) * size;\r\n  }\r\n}\r\n\r\nexport default PDFFont;\r\n","import AFMFont from './afm';\r\nimport PDFFont from '../font';\r\nimport fs from 'fs';\r\n\r\n// This insanity is so bundlers can inline the font files\r\nconst STANDARD_FONTS = {\r\n  Courier() {\r\n    return fs.readFileSync(__dirname + '/data/Courier.afm', 'utf8');\r\n  },\r\n  'Courier-Bold'() {\r\n    return fs.readFileSync(__dirname + '/data/Courier-Bold.afm', 'utf8');\r\n  },\r\n  'Courier-Oblique'() {\r\n    return fs.readFileSync(__dirname + '/data/Courier-Oblique.afm', 'utf8');\r\n  },\r\n  'Courier-BoldOblique'() {\r\n    return fs.readFileSync(__dirname + '/data/Courier-BoldOblique.afm', 'utf8');\r\n  },\r\n  Helvetica() {\r\n    return fs.readFileSync(__dirname + '/data/Helvetica.afm', 'utf8');\r\n  },\r\n  'Helvetica-Bold'() {\r\n    return fs.readFileSync(__dirname + '/data/Helvetica-Bold.afm', 'utf8');\r\n  },\r\n  'Helvetica-Oblique'() {\r\n    return fs.readFileSync(__dirname + '/data/Helvetica-Oblique.afm', 'utf8');\r\n  },\r\n  'Helvetica-BoldOblique'() {\r\n    return fs.readFileSync(\r\n      __dirname + '/data/Helvetica-BoldOblique.afm',\r\n      'utf8'\r\n    );\r\n  },\r\n  'Times-Roman'() {\r\n    return fs.readFileSync(__dirname + '/data/Times-Roman.afm', 'utf8');\r\n  },\r\n  'Times-Bold'() {\r\n    return fs.readFileSync(__dirname + '/data/Times-Bold.afm', 'utf8');\r\n  },\r\n  'Times-Italic'() {\r\n    return fs.readFileSync(__dirname + '/data/Times-Italic.afm', 'utf8');\r\n  },\r\n  'Times-BoldItalic'() {\r\n    return fs.readFileSync(__dirname + '/data/Times-BoldItalic.afm', 'utf8');\r\n  },\r\n  Symbol() {\r\n    return fs.readFileSync(__dirname + '/data/Symbol.afm', 'utf8');\r\n  },\r\n  ZapfDingbats() {\r\n    return fs.readFileSync(__dirname + '/data/ZapfDingbats.afm', 'utf8');\r\n  }\r\n};\r\n\r\nclass StandardFont extends PDFFont {\r\n  constructor(document, name, id) {\r\n    super();\r\n    this.document = document;\r\n    this.name = name;\r\n    this.id = id;\r\n    this.font = new AFMFont(STANDARD_FONTS[this.name]());\r\n    ({\r\n      ascender: this.ascender,\r\n      descender: this.descender,\r\n      bbox: this.bbox,\r\n      lineGap: this.lineGap,\r\n      xHeight: this.xHeight,\r\n      capHeight: this.capHeight\r\n    } = this.font);\r\n  }\r\n\r\n  embed() {\r\n    this.dictionary.data = {\r\n      Type: 'Font',\r\n      BaseFont: this.name,\r\n      Subtype: 'Type1',\r\n      Encoding: 'WinAnsiEncoding'\r\n    };\r\n\r\n    return this.dictionary.end();\r\n  }\r\n\r\n  encode(text) {\r\n    const encoded = this.font.encodeText(text);\r\n    const glyphs = this.font.glyphsForString(`${text}`);\r\n    const advances = this.font.advancesForGlyphs(glyphs);\r\n    const positions = [];\r\n    for (let i = 0; i < glyphs.length; i++) {\r\n      const glyph = glyphs[i];\r\n      positions.push({\r\n        xAdvance: advances[i],\r\n        yAdvance: 0,\r\n        xOffset: 0,\r\n        yOffset: 0,\r\n        advanceWidth: this.font.widthOfGlyph(glyph)\r\n      });\r\n    }\r\n\r\n    return [encoded, positions];\r\n  }\r\n\r\n  widthOfString(string, size) {\r\n    const glyphs = this.font.glyphsForString(`${string}`);\r\n    const advances = this.font.advancesForGlyphs(glyphs);\r\n\r\n    let width = 0;\r\n    for (let advance of advances) {\r\n      width += advance;\r\n    }\r\n\r\n    const scale = size / 1000;\r\n    return width * scale;\r\n  }\r\n\r\n  static isStandardFont(name) {\r\n    return name in STANDARD_FONTS;\r\n  }\r\n}\r\n\r\nexport default StandardFont;\r\n","import PDFFont from '../font';\r\n\r\nconst toHex = function(num) {\r\n  return `0000${num.toString(16)}`.slice(-4);\r\n};\r\n\r\nclass EmbeddedFont extends PDFFont {\r\n  constructor(document, font, id) {\r\n    super();\r\n    this.document = document;\r\n    this.font = font;\r\n    this.id = id;\r\n    this.subset = this.font.createSubset();\r\n    this.unicode = [[0]];\r\n    this.widths = [this.font.getGlyph(0).advanceWidth];\r\n\r\n    this.name = this.font.postscriptName;\r\n    this.scale = 1000 / this.font.unitsPerEm;\r\n    this.ascender = this.font.ascent * this.scale;\r\n    this.descender = this.font.descent * this.scale;\r\n    this.xHeight = this.font.xHeight * this.scale;\r\n    this.capHeight = this.font.capHeight * this.scale;\r\n    this.lineGap = this.font.lineGap * this.scale;\r\n    this.bbox = this.font.bbox;\r\n\r\n    if (document.options.fontLayoutCache !== false) {\r\n      this.layoutCache = Object.create(null);\r\n    }\r\n  }\r\n\r\n  layoutRun(text, features) {\r\n    const run = this.font.layout(text, features);\r\n\r\n    // Normalize position values\r\n    for (let i = 0; i < run.positions.length; i++) {\r\n      const position = run.positions[i];\r\n      for (let key in position) {\r\n        position[key] *= this.scale;\r\n      }\r\n\r\n      position.advanceWidth = run.glyphs[i].advanceWidth * this.scale;\r\n    }\r\n\r\n    return run;\r\n  }\r\n\r\n  layoutCached(text) {\r\n    if (!this.layoutCache) {\r\n      return this.layoutRun(text);\r\n    }\r\n    let cached;\r\n    if ((cached = this.layoutCache[text])) {\r\n      return cached;\r\n    }\r\n\r\n    const run = this.layoutRun(text);\r\n    this.layoutCache[text] = run;\r\n    return run;\r\n  }\r\n\r\n  layout(text, features, onlyWidth) {\r\n    // Skip the cache if any user defined features are applied\r\n    if (features) {\r\n      return this.layoutRun(text, features);\r\n    }\r\n\r\n    let glyphs = onlyWidth ? null : [];\r\n    let positions = onlyWidth ? null : [];\r\n    let advanceWidth = 0;\r\n\r\n    // Split the string by words to increase cache efficiency.\r\n    // For this purpose, spaces and tabs are a good enough delimeter.\r\n    let last = 0;\r\n    let index = 0;\r\n    while (index <= text.length) {\r\n      var needle;\r\n      if (\r\n        (index === text.length && last < index) ||\r\n        ((needle = text.charAt(index)), [' ', '\\t'].includes(needle))\r\n      ) {\r\n        const run = this.layoutCached(text.slice(last, ++index));\r\n        if (!onlyWidth) {\r\n          glyphs = glyphs.concat(run.glyphs);\r\n          positions = positions.concat(run.positions);\r\n        }\r\n\r\n        advanceWidth += run.advanceWidth;\r\n        last = index;\r\n      } else {\r\n        index++;\r\n      }\r\n    }\r\n\r\n    return { glyphs, positions, advanceWidth };\r\n  }\r\n\r\n  encode(text, features) {\r\n    const { glyphs, positions } = this.layout(text, features);\r\n\r\n    const res = [];\r\n    for (let i = 0; i < glyphs.length; i++) {\r\n      const glyph = glyphs[i];\r\n      const gid = this.subset.includeGlyph(glyph.id);\r\n      res.push(`0000${gid.toString(16)}`.slice(-4));\r\n\r\n      if (this.widths[gid] == null) {\r\n        this.widths[gid] = glyph.advanceWidth * this.scale;\r\n      }\r\n      if (this.unicode[gid] == null) {\r\n        this.unicode[gid] = glyph.codePoints;\r\n      }\r\n    }\r\n\r\n    return [res, positions];\r\n  }\r\n\r\n  widthOfString(string, size, features) {\r\n    const width = this.layout(string, features, true).advanceWidth;\r\n    const scale = size / 1000;\r\n    return width * scale;\r\n  }\r\n\r\n  embed() {\r\n    const isCFF = this.subset.cff != null;\r\n    const fontFile = this.document.ref();\r\n\r\n    if (isCFF) {\r\n      fontFile.data.Subtype = 'CIDFontType0C';\r\n    }\r\n\r\n    this.subset\r\n      .encodeStream()\r\n      .on('data', data => fontFile.write(data))\r\n      .on('end', () => fontFile.end());\r\n\r\n    const familyClass =\r\n      ((this.font['OS/2'] != null\r\n        ? this.font['OS/2'].sFamilyClass\r\n        : undefined) || 0) >> 8;\r\n    let flags = 0;\r\n    if (this.font.post.isFixedPitch) {\r\n      flags |= 1 << 0;\r\n    }\r\n    if (1 <= familyClass && familyClass <= 7) {\r\n      flags |= 1 << 1;\r\n    }\r\n    flags |= 1 << 2; // assume the font uses non-latin characters\r\n    if (familyClass === 10) {\r\n      flags |= 1 << 3;\r\n    }\r\n    if (this.font.head.macStyle.italic) {\r\n      flags |= 1 << 6;\r\n    }\r\n\r\n    // generate a tag (6 uppercase letters. 17 is the char code offset from '0' to 'A'. 73 will map to 'Z')\r\n    const tag = [1, 2, 3, 4, 5, 6]\r\n      .map(i => String.fromCharCode((this.id.charCodeAt(i) || 73) + 17))\r\n      .join('');\r\n    const name = tag + '+' + this.font.postscriptName;\r\n\r\n    const { bbox } = this.font;\r\n    const descriptor = this.document.ref({\r\n      Type: 'FontDescriptor',\r\n      FontName: name,\r\n      Flags: flags,\r\n      FontBBox: [\r\n        bbox.minX * this.scale,\r\n        bbox.minY * this.scale,\r\n        bbox.maxX * this.scale,\r\n        bbox.maxY * this.scale\r\n      ],\r\n      ItalicAngle: this.font.italicAngle,\r\n      Ascent: this.ascender,\r\n      Descent: this.descender,\r\n      CapHeight: (this.font.capHeight || this.font.ascent) * this.scale,\r\n      XHeight: (this.font.xHeight || 0) * this.scale,\r\n      StemV: 0\r\n    }); // not sure how to calculate this\r\n\r\n    if (isCFF) {\r\n      descriptor.data.FontFile3 = fontFile;\r\n    } else {\r\n      descriptor.data.FontFile2 = fontFile;\r\n    }\r\n\r\n    if (this.document.subset) {\r\n      const CIDSet = Buffer.from('FFFFFFFFC0', 'hex');\r\n      const CIDSetRef = this.document.ref();\r\n      CIDSetRef.write(CIDSet);\r\n      CIDSetRef.end();\r\n\r\n      descriptor.data.CIDSet = CIDSetRef;\r\n    }\r\n\r\n    descriptor.end();\r\n\r\n    const descendantFontData = {\r\n      Type: 'Font',\r\n      Subtype: 'CIDFontType0',\r\n      BaseFont: name,\r\n      CIDSystemInfo: {\r\n        Registry: new String('Adobe'),\r\n        Ordering: new String('Identity'),\r\n        Supplement: 0\r\n      },\r\n      FontDescriptor: descriptor,\r\n      W: [0, this.widths]\r\n    };\r\n\r\n    if (!isCFF) {\r\n      descendantFontData.Subtype = 'CIDFontType2';\r\n      descendantFontData.CIDToGIDMap = 'Identity';\r\n    }\r\n\r\n    const descendantFont = this.document.ref(descendantFontData);\r\n\r\n    descendantFont.end();\r\n\r\n    this.dictionary.data = {\r\n      Type: 'Font',\r\n      Subtype: 'Type0',\r\n      BaseFont: name,\r\n      Encoding: 'Identity-H',\r\n      DescendantFonts: [descendantFont],\r\n      ToUnicode: this.toUnicodeCmap()\r\n    };\r\n\r\n    return this.dictionary.end();\r\n  }\r\n\r\n  // Maps the glyph ids encoded in the PDF back to unicode strings\r\n  // Because of ligature substitutions and the like, there may be one or more\r\n  // unicode characters represented by each glyph.\r\n  toUnicodeCmap() {\r\n    const cmap = this.document.ref();\r\n\r\n    const entries = [];\r\n    for (let codePoints of this.unicode) {\r\n      const encoded = [];\r\n\r\n      // encode codePoints to utf16\r\n      for (let value of codePoints) {\r\n        if (value > 0xffff) {\r\n          value -= 0x10000;\r\n          encoded.push(toHex(((value >>> 10) & 0x3ff) | 0xd800));\r\n          value = 0xdc00 | (value & 0x3ff);\r\n        }\r\n\r\n        encoded.push(toHex(value));\r\n      }\r\n\r\n      entries.push(`<${encoded.join(' ')}>`);\r\n    }\r\n\r\n    cmap.end(`\\\r\n/CIDInit /ProcSet findresource begin\r\n12 dict begin\r\nbegincmap\r\n/CIDSystemInfo <<\r\n  /Registry (Adobe)\r\n  /Ordering (UCS)\r\n  /Supplement 0\r\n>> def\r\n/CMapName /Adobe-Identity-UCS def\r\n/CMapType 2 def\r\n1 begincodespacerange\r\n<0000><ffff>\r\nendcodespacerange\r\n1 beginbfrange\r\n<0000> <${toHex(entries.length - 1)}> [${entries.join(' ')}]\r\nendbfrange\r\nendcmap\r\nCMapName currentdict /CMap defineresource pop\r\nend\r\nend\\\r\n`);\r\n\r\n    return cmap;\r\n  }\r\n}\r\n\r\nexport default EmbeddedFont;\r\n","import fs from 'fs';\r\nimport fontkit from '@foliojs-fork/fontkit';\r\nimport StandardFont from './font/standard';\r\nimport EmbeddedFont from './font/embedded';\r\n\r\nclass PDFFontFactory {\r\n  static open(document, src, family, id) {\r\n    let font;\r\n    if (typeof src === 'string') {\r\n      if (StandardFont.isStandardFont(src)) {\r\n        return new StandardFont(document, src, id);\r\n      }\r\n\r\n      src = fs.readFileSync(src);\r\n    }\r\n    if (Buffer.isBuffer(src)) {\r\n      font = fontkit.create(src, family);\r\n    } else if (src instanceof Uint8Array) {\r\n      font = fontkit.create(Buffer.from(src), family);\r\n    } else if (src instanceof ArrayBuffer) {\r\n      font = fontkit.create(Buffer.from(new Uint8Array(src)), family);\r\n    }\r\n\r\n    if (font == null) {\r\n      throw new Error('Not a supported font format or standard PDF font.');\r\n    }\r\n\r\n    return new EmbeddedFont(document, font, id);\r\n  }\r\n}\r\n\r\nexport default PDFFontFactory;\r\n","import PDFFontFactory from '../font_factory';\r\n\r\nexport default {\r\n  initFonts(defaultFont = 'Helvetica') {\r\n    // Lookup table for embedded fonts\r\n    this._fontFamilies = {};\r\n    this._fontCount = 0;\r\n\r\n    // Font state\r\n    this._fontSize = 12;\r\n    this._font = null;\r\n\r\n    this._registeredFonts = {};\r\n\r\n    // Set the default font\r\n    if (defaultFont) {\r\n      this.font(defaultFont);\r\n    }\r\n  },\r\n\r\n  font(src, family, size) {\r\n    let cacheKey, font;\r\n    if (typeof family === 'number') {\r\n      size = family;\r\n      family = null;\r\n    }\r\n\r\n    // check registered fonts if src is a string\r\n    if (typeof src === 'string' && this._registeredFonts[src]) {\r\n      cacheKey = src;\r\n      ({ src, family } = this._registeredFonts[src]);\r\n    } else {\r\n      cacheKey = family || src;\r\n      if (typeof cacheKey !== 'string') {\r\n        cacheKey = null;\r\n      }\r\n    }\r\n\r\n    if (size != null) {\r\n      this.fontSize(size);\r\n    }\r\n\r\n    // fast path: check if the font is already in the PDF\r\n    if ((font = this._fontFamilies[cacheKey])) {\r\n      this._font = font;\r\n      return this;\r\n    }\r\n\r\n    // load the font\r\n    const id = `F${++this._fontCount}`;\r\n    this._font = PDFFontFactory.open(this, src, family, id);\r\n\r\n    // check for existing font familes with the same name already in the PDF\r\n    // useful if the font was passed as a buffer\r\n    if ((font = this._fontFamilies[this._font.name])) {\r\n      this._font = font;\r\n      return this;\r\n    }\r\n\r\n    // save the font for reuse later\r\n    if (cacheKey) {\r\n      this._fontFamilies[cacheKey] = this._font;\r\n    }\r\n\r\n    if (this._font.name) {\r\n      this._fontFamilies[this._font.name] = this._font;\r\n    }\r\n\r\n    return this;\r\n  },\r\n\r\n  fontSize(_fontSize) {\r\n    this._fontSize = _fontSize;\r\n    return this;\r\n  },\r\n\r\n  currentLineHeight(includeGap) {\r\n    if (includeGap == null) {\r\n      includeGap = false;\r\n    }\r\n    return this._font.lineHeight(this._fontSize, includeGap);\r\n  },\r\n\r\n  registerFont(name, src, family) {\r\n    this._registeredFonts[name] = {\r\n      src,\r\n      family\r\n    };\r\n\r\n    return this;\r\n  }\r\n};\r\n","import { EventEmitter } from 'events';\r\nimport LineBreaker from '@foliojs-fork/linebreak';\r\n\r\nclass LineWrapper extends EventEmitter {\r\n  constructor(document, options) {\r\n    super();\r\n    this.document = document;\r\n    this.indent = options.indent || 0;\r\n    this.characterSpacing = options.characterSpacing || 0;\r\n    this.wordSpacing = options.wordSpacing === 0;\r\n    this.columns = options.columns || 1;\r\n    this.columnGap = options.columnGap != null ? options.columnGap : 18; // 1/4 inch\r\n    this.lineWidth =\r\n      (options.width - this.columnGap * (this.columns - 1)) / this.columns;\r\n    this.spaceLeft = this.lineWidth;\r\n    this.startX = this.document.x;\r\n    this.startY = this.document.y;\r\n    this.column = 1;\r\n    this.ellipsis = options.ellipsis;\r\n    this.continuedX = 0;\r\n    this.features = options.features;\r\n\r\n    // calculate the maximum Y position the text can appear at\r\n    if (options.height != null) {\r\n      this.height = options.height;\r\n      this.maxY = this.startY + options.height;\r\n    } else {\r\n      this.maxY = this.document.page.maxY();\r\n    }\r\n\r\n    // handle paragraph indents\r\n    this.on('firstLine', options => {\r\n      // if this is the first line of the text segment, and\r\n      // we're continuing where we left off, indent that much\r\n      // otherwise use the user specified indent option\r\n      const indent = this.continuedX || this.indent;\r\n      this.document.x += indent;\r\n      this.lineWidth -= indent;\r\n\r\n      return this.once('line', () => {\r\n        this.document.x -= indent;\r\n        this.lineWidth += indent;\r\n        if (options.continued && !this.continuedX) {\r\n          this.continuedX = this.indent;\r\n        }\r\n        if (!options.continued) {\r\n          return (this.continuedX = 0);\r\n        }\r\n      });\r\n    });\r\n\r\n    // handle left aligning last lines of paragraphs\r\n    this.on('lastLine', options => {\r\n      const { align } = options;\r\n      if (align === 'justify') {\r\n        options.align = 'left';\r\n      }\r\n      this.lastLine = true;\r\n\r\n      return this.once('line', () => {\r\n        this.document.y += options.paragraphGap || 0;\r\n        options.align = align;\r\n        return (this.lastLine = false);\r\n      });\r\n    });\r\n  }\r\n\r\n  wordWidth(word) {\r\n    return (\r\n      this.document.widthOfString(word, this) +\r\n      this.characterSpacing +\r\n      this.wordSpacing\r\n    );\r\n  }\r\n\r\n  eachWord(text, fn) {\r\n    // setup a unicode line breaker\r\n    let bk;\r\n    const breaker = new LineBreaker(text);\r\n    let last = null;\r\n    const wordWidths = Object.create(null);\r\n\r\n    while ((bk = breaker.nextBreak())) {\r\n      var shouldContinue;\r\n      let word = text.slice(\r\n        (last != null ? last.position : undefined) || 0,\r\n        bk.position\r\n      );\r\n      let w =\r\n        wordWidths[word] != null\r\n          ? wordWidths[word]\r\n          : (wordWidths[word] = this.wordWidth(word));\r\n\r\n      // if the word is longer than the whole line, chop it up\r\n      // TODO: break by grapheme clusters, not JS string characters\r\n      if (w > this.lineWidth + this.continuedX) {\r\n        // make some fake break objects\r\n        let lbk = last;\r\n        const fbk = {};\r\n\r\n        while (word.length) {\r\n          // fit as much of the word as possible into the space we have\r\n          var l, mightGrow;\r\n          if (w > this.spaceLeft) {\r\n            // start our check at the end of our available space - this method is faster than a loop of each character and it resolves\r\n            // an issue with long loops when processing massive words, such as a huge number of spaces\r\n            l = Math.ceil(this.spaceLeft / (w / word.length));\r\n            w = this.wordWidth(word.slice(0, l));\r\n            mightGrow = w <= this.spaceLeft && l < word.length;\r\n          } else {\r\n            l = word.length;\r\n          }\r\n          let mustShrink = w > this.spaceLeft && l > 0;\r\n          // shrink or grow word as necessary after our near-guess above\r\n          while (mustShrink || mightGrow) {\r\n            if (mustShrink) {\r\n              w = this.wordWidth(word.slice(0, --l));\r\n              mustShrink = w > this.spaceLeft && l > 0;\r\n            } else {\r\n              w = this.wordWidth(word.slice(0, ++l));\r\n              mustShrink = w > this.spaceLeft && l > 0;\r\n              mightGrow = w <= this.spaceLeft && l < word.length;\r\n            }\r\n          }\r\n\r\n          // check for the edge case where a single character cannot fit into a line.\r\n          if (l === 0 && this.spaceLeft === this.lineWidth) {\r\n            l = 1;\r\n          }\r\n\r\n          // send a required break unless this is the last piece and a linebreak is not specified\r\n          fbk.required = bk.required || l < word.length;\r\n          shouldContinue = fn(word.slice(0, l), w, fbk, lbk);\r\n          lbk = { required: false };\r\n\r\n          // get the remaining piece of the word\r\n          word = word.slice(l);\r\n          w = this.wordWidth(word);\r\n\r\n          if (shouldContinue === false) {\r\n            break;\r\n          }\r\n        }\r\n      } else {\r\n        // otherwise just emit the break as it was given to us\r\n        shouldContinue = fn(word, w, bk, last);\r\n      }\r\n\r\n      if (shouldContinue === false) {\r\n        break;\r\n      }\r\n      last = bk;\r\n    }\r\n  }\r\n\r\n  wrap(text, options) {\r\n    // override options from previous continued fragments\r\n    if (options.indent != null) {\r\n      this.indent = options.indent;\r\n    }\r\n    if (options.characterSpacing != null) {\r\n      this.characterSpacing = options.characterSpacing;\r\n    }\r\n    if (options.wordSpacing != null) {\r\n      this.wordSpacing = options.wordSpacing;\r\n    }\r\n    if (options.ellipsis != null) {\r\n      this.ellipsis = options.ellipsis;\r\n    }\r\n\r\n    // make sure we're actually on the page\r\n    // and that the first line of is never by\r\n    // itself at the bottom of a page (orphans)\r\n    const nextY = this.document.y + this.document.currentLineHeight(true);\r\n    if (this.document.y > this.maxY || nextY > this.maxY) {\r\n      this.nextSection();\r\n    }\r\n\r\n    let buffer = '';\r\n    let textWidth = 0;\r\n    let wc = 0;\r\n    let lc = 0;\r\n\r\n    let { y } = this.document; // used to reset Y pos if options.continued (below)\r\n    const emitLine = () => {\r\n      options.textWidth = textWidth + this.wordSpacing * (wc - 1);\r\n      options.wordCount = wc;\r\n      options.lineWidth = this.lineWidth;\r\n      ({ y } = this.document);\r\n      this.emit('line', buffer, options, this);\r\n      return lc++;\r\n    };\r\n\r\n    this.emit('sectionStart', options, this);\r\n\r\n    this.eachWord(text, (word, w, bk, last) => {\r\n      if (last == null || last.required) {\r\n        this.emit('firstLine', options, this);\r\n        this.spaceLeft = this.lineWidth;\r\n      }\r\n\r\n      if (w <= this.spaceLeft) {\r\n        buffer += word;\r\n        textWidth += w;\r\n        wc++;\r\n      }\r\n\r\n      if (bk.required || w > this.spaceLeft) {\r\n        // if the user specified a max height and an ellipsis, and is about to pass the\r\n        // max height and max columns after the next line, append the ellipsis\r\n        const lh = this.document.currentLineHeight(true);\r\n        if (\r\n          this.height != null &&\r\n          this.ellipsis &&\r\n          this.document.y + lh * 2 > this.maxY &&\r\n          this.column >= this.columns\r\n        ) {\r\n          if (this.ellipsis === true) {\r\n            this.ellipsis = '…';\r\n          } // map default ellipsis character\r\n          buffer = buffer.replace(/\\s+$/, '');\r\n          textWidth = this.wordWidth(buffer + this.ellipsis);\r\n\r\n          // remove characters from the buffer until the ellipsis fits\r\n          // to avoid infinite loop need to stop while-loop if buffer is empty string\r\n          while (buffer && textWidth > this.lineWidth) {\r\n            buffer = buffer.slice(0, -1).replace(/\\s+$/, '');\r\n            textWidth = this.wordWidth(buffer + this.ellipsis);\r\n          }\r\n          // need to add ellipsis only if there is enough space for it\r\n          if (textWidth <= this.lineWidth) {\r\n            buffer = buffer + this.ellipsis;\r\n          }\r\n\r\n          textWidth = this.wordWidth(buffer);\r\n        }\r\n\r\n        if (bk.required) {\r\n          if (w > this.spaceLeft) {\r\n            emitLine();\r\n            buffer = word;\r\n            textWidth = w;\r\n            wc = 1;\r\n          }\r\n\r\n          this.emit('lastLine', options, this);\r\n        }\r\n\r\n        emitLine();\r\n\r\n        // if we've reached the edge of the page,\r\n        // continue on a new page or column\r\n        if (this.document.y + lh > this.maxY) {\r\n          const shouldContinue = this.nextSection();\r\n\r\n          // stop if we reached the maximum height\r\n          if (!shouldContinue) {\r\n            wc = 0;\r\n            buffer = '';\r\n            return false;\r\n          }\r\n        }\r\n\r\n        // reset the space left and buffer\r\n        if (bk.required) {\r\n          this.spaceLeft = this.lineWidth;\r\n          buffer = '';\r\n          textWidth = 0;\r\n          return (wc = 0);\r\n        } else {\r\n          // reset the space left and buffer\r\n          this.spaceLeft = this.lineWidth - w;\r\n          buffer = word;\r\n          textWidth = w;\r\n          return (wc = 1);\r\n        }\r\n      } else {\r\n        return (this.spaceLeft -= w);\r\n      }\r\n    });\r\n\r\n    if (wc > 0) {\r\n      this.emit('lastLine', options, this);\r\n      emitLine();\r\n    }\r\n\r\n    this.emit('sectionEnd', options, this);\r\n\r\n    // if the wrap is set to be continued, save the X position\r\n    // to start the first line of the next segment at, and reset\r\n    // the y position\r\n    if (options.continued === true) {\r\n      if (lc > 1) {\r\n        this.continuedX = 0;\r\n      }\r\n      this.continuedX += options.textWidth || 0;\r\n      return (this.document.y = y);\r\n    } else {\r\n      return (this.document.x = this.startX);\r\n    }\r\n  }\r\n\r\n  nextSection(options) {\r\n    this.emit('sectionEnd', options, this);\r\n\r\n    if (++this.column > this.columns) {\r\n      // if a max height was specified by the user, we're done.\r\n      // otherwise, the default is to make a new page at the bottom.\r\n      if (this.height != null) {\r\n        return false;\r\n      }\r\n\r\n      this.document.continueOnNewPage();\r\n      this.column = 1;\r\n      this.startY = this.document.page.margins.top;\r\n      this.maxY = this.document.page.maxY();\r\n      this.document.x = this.startX;\r\n      if (this.document._fillColor) {\r\n        this.document.fillColor(...this.document._fillColor);\r\n      }\r\n      this.emit('pageBreak', options, this);\r\n    } else {\r\n      this.document.x += this.lineWidth + this.columnGap;\r\n      this.document.y = this.startY;\r\n      this.emit('columnBreak', options, this);\r\n    }\r\n\r\n    this.emit('sectionStart', options, this);\r\n    return true;\r\n  }\r\n}\r\n\r\nexport default LineWrapper;\r\n","import LineWrapper from '../line_wrapper';\r\nimport PDFObject from '../object';\r\n\r\nconst { number } = PDFObject;\r\n\r\nexport default {\r\n  initText() {\r\n    this._line = this._line.bind(this);\r\n    // Current coordinates\r\n    this.x = 0;\r\n    this.y = 0;\r\n    return (this._lineGap = 0);\r\n  },\r\n\r\n  lineGap(_lineGap) {\r\n    this._lineGap = _lineGap;\r\n    return this;\r\n  },\r\n\r\n  moveDown(lines) {\r\n    if (lines == null) {\r\n      lines = 1;\r\n    }\r\n    this.y += this.currentLineHeight(true) * lines + this._lineGap;\r\n    return this;\r\n  },\r\n\r\n  moveUp(lines) {\r\n    if (lines == null) {\r\n      lines = 1;\r\n    }\r\n    this.y -= this.currentLineHeight(true) * lines + this._lineGap;\r\n    return this;\r\n  },\r\n\r\n  _text(text, x, y, options, lineCallback) {\r\n    options = this._initOptions(x, y, options);\r\n\r\n    // Convert text to a string\r\n    text = text == null ? '' : `${text}`;\r\n\r\n    // if the wordSpacing option is specified, remove multiple consecutive spaces\r\n    if (options.wordSpacing) {\r\n      text = text.replace(/\\s{2,}/g, ' ');\r\n    }\r\n\r\n    const addStructure = () => {\r\n      if (options.structParent) {\r\n        options.structParent.add(this.struct(options.structType || 'P',\r\n          [ this.markStructureContent(options.structType || 'P') ]));\r\n      }\r\n    };\r\n\r\n    // word wrapping\r\n    if (options.width) {\r\n      let wrapper = this._wrapper;\r\n      if (!wrapper) {\r\n        wrapper = new LineWrapper(this, options);\r\n        wrapper.on('line', lineCallback);\r\n        wrapper.on('firstLine', addStructure);\r\n      }\r\n\r\n      this._wrapper = options.continued ? wrapper : null;\r\n      this._textOptions = options.continued ? options : null;\r\n      wrapper.wrap(text, options);\r\n\r\n      // render paragraphs as single lines\r\n    } else {\r\n      for (let line of text.split('\\n')) {\r\n        addStructure();\r\n        lineCallback(line, options);\r\n      }\r\n    }\r\n\r\n    return this;\r\n  },\r\n\r\n  text(text, x, y, options) {\r\n    return this._text(text, x, y, options, this._line);\r\n  },\r\n\r\n  widthOfString(string, options = {}) {\r\n    return (\r\n      this._font.widthOfString(string, this._fontSize, options.features) +\r\n      (options.characterSpacing || 0) * (string.length - 1)\r\n    );\r\n  },\r\n\r\n  heightOfString(text, options) {\r\n    const { x, y } = this;\r\n\r\n    options = this._initOptions(options);\r\n    options.height = Infinity; // don't break pages\r\n\r\n    const lineGap = options.lineGap || this._lineGap || 0;\r\n    this._text(text, this.x, this.y, options, () => {\r\n      return (this.y += this.currentLineHeight(true) + lineGap);\r\n    });\r\n\r\n    const height = this.y - y;\r\n    this.x = x;\r\n    this.y = y;\r\n\r\n    return height;\r\n  },\r\n\r\n  list(list, x, y, options, wrapper) {\r\n    options = this._initOptions(x, y, options);\r\n\r\n    const listType = options.listType || 'bullet';\r\n    const unit = Math.round((this._font.ascender / 1000) * this._fontSize);\r\n    const midLine = unit / 2;\r\n    const r = options.bulletRadius || unit / 3;\r\n    const indent =\r\n      options.textIndent || (listType === 'bullet' ? r * 5 : unit * 2);\r\n    const itemIndent =\r\n      options.bulletIndent || (listType === 'bullet' ? r * 8 : unit * 2);\r\n\r\n    let level = 1;\r\n    const items = [];\r\n    const levels = [];\r\n    const numbers = [];\r\n\r\n    var flatten = function(list) {\r\n      let n = 1;\r\n      for (let i = 0; i < list.length; i++) {\r\n        const item = list[i];\r\n        if (Array.isArray(item)) {\r\n          level++;\r\n          flatten(item);\r\n          level--;\r\n        } else {\r\n          items.push(item);\r\n          levels.push(level);\r\n          if (listType !== 'bullet') {\r\n            numbers.push(n++);\r\n          }\r\n        }\r\n      }\r\n    };\r\n\r\n    flatten(list);\r\n\r\n    const label = function(n) {\r\n      switch (listType) {\r\n        case 'numbered':\r\n          return `${n}.`;\r\n        case 'lettered':\r\n          var letter = String.fromCharCode(((n - 1) % 26) + 65);\r\n          var times = Math.floor((n - 1) / 26 + 1);\r\n          var text = Array(times + 1).join(letter);\r\n          return `${text}.`;\r\n      }\r\n    };\r\n\r\n    wrapper = new LineWrapper(this, options);\r\n    wrapper.on('line', this._line);\r\n\r\n    level = 1;\r\n    let i = 0;\r\n    wrapper.on('firstLine', () => {\r\n      let item, itemType, labelType, bodyType;\r\n      if (options.structParent) {\r\n        if (options.structTypes) {\r\n          [ itemType, labelType, bodyType ] = options.structTypes;\r\n        } else {\r\n          [ itemType, labelType, bodyType ] = [ 'LI', 'Lbl', 'LBody' ];\r\n        }\r\n      }\r\n\r\n      if (itemType) {\r\n        item = this.struct(itemType);\r\n        options.structParent.add(item);\r\n      } else if (options.structParent) {\r\n        item = options.structParent;\r\n      }\r\n\r\n      let l;\r\n      if ((l = levels[i++]) !== level) {\r\n        const diff = itemIndent * (l - level);\r\n        this.x += diff;\r\n        wrapper.lineWidth -= diff;\r\n        level = l;\r\n      }\r\n\r\n      if (item && (labelType || bodyType)) {\r\n        item.add(this.struct(labelType || bodyType,\r\n          [ this.markStructureContent(labelType || bodyType) ]));\r\n      }\r\n      switch (listType) {\r\n        case 'bullet':\r\n          this.circle(this.x - indent + r, this.y + midLine, r);\r\n          this.fill();\r\n          break;\r\n        case 'numbered':\r\n        case 'lettered':\r\n          var text = label(numbers[i - 1]);\r\n          this._fragment(text, this.x - indent, this.y, options);\r\n          break;\r\n      }\r\n\r\n      if (item && labelType && bodyType) {\r\n        item.add(this.struct(bodyType, [ this.markStructureContent(bodyType) ]));\r\n      }\r\n      if (item && item !== options.structParent) {\r\n        item.end();\r\n      }\r\n    });\r\n\r\n    wrapper.on('sectionStart', () => {\r\n      const pos = indent + itemIndent * (level - 1);\r\n      this.x += pos;\r\n      return (wrapper.lineWidth -= pos);\r\n    });\r\n\r\n    wrapper.on('sectionEnd', () => {\r\n      const pos = indent + itemIndent * (level - 1);\r\n      this.x -= pos;\r\n      return (wrapper.lineWidth += pos);\r\n    });\r\n\r\n    wrapper.wrap(items.join('\\n'), options);\r\n\r\n    return this;\r\n  },\r\n\r\n  _initOptions(x = {}, y, options = {}) {\r\n    if (typeof x === 'object') {\r\n      options = x;\r\n      x = null;\r\n    }\r\n\r\n    // clone options object\r\n    const result = Object.assign({}, options);\r\n\r\n    // extend options with previous values for continued text\r\n    if (this._textOptions) {\r\n      for (let key in this._textOptions) {\r\n        const val = this._textOptions[key];\r\n        if (key !== 'continued') {\r\n          if (result[key] === undefined) {\r\n            result[key] = val;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Update the current position\r\n    if (x != null) {\r\n      this.x = x;\r\n    }\r\n    if (y != null) {\r\n      this.y = y;\r\n    }\r\n\r\n    // wrap to margins if no x or y position passed\r\n    if (result.lineBreak !== false) {\r\n      if (result.width == null) {\r\n        result.width = this.page.width - this.x - this.page.margins.right;\r\n      }\r\n      result.width = Math.max(result.width, 0);\r\n    }\r\n\r\n    if (!result.columns) {\r\n      result.columns = 0;\r\n    }\r\n    if (result.columnGap == null) {\r\n      result.columnGap = 18;\r\n    } // 1/4 inch\r\n\r\n    return result;\r\n  },\r\n\r\n  _line(text, options = {}, wrapper) {\r\n    this._fragment(text, this.x, this.y, options);\r\n    const lineGap = options.lineGap || this._lineGap || 0;\r\n\r\n    if (!wrapper) {\r\n      return (this.x += this.widthOfString(text));\r\n    } else {\r\n      return (this.y += this.currentLineHeight(true) + lineGap);\r\n    }\r\n  },\r\n\r\n  _fragment(text, x, y, options) {\r\n    let dy, encoded, i, positions, textWidth, words;\r\n    text = `${text}`.replace(/\\n/g, '');\r\n    if (text.length === 0) {\r\n      return;\r\n    }\r\n\r\n    // handle options\r\n    const align = options.align || 'left';\r\n    let wordSpacing = options.wordSpacing || 0;\r\n    const characterSpacing = options.characterSpacing || 0;\r\n\r\n    // text alignments\r\n    if (options.width) {\r\n      switch (align) {\r\n        case 'right':\r\n          textWidth = this.widthOfString(text.replace(/\\s+$/, ''), options);\r\n          x += options.lineWidth - textWidth;\r\n          break;\r\n\r\n        case 'center':\r\n          x += options.lineWidth / 2 - options.textWidth / 2;\r\n          break;\r\n\r\n        case 'justify':\r\n          // calculate the word spacing value\r\n          words = text.trim().split(/\\s+/);\r\n          textWidth = this.widthOfString(text.replace(/\\s+/g, ''), options);\r\n          var spaceWidth = this.widthOfString(' ') + characterSpacing;\r\n          wordSpacing = Math.max(\r\n            0,\r\n            (options.lineWidth - textWidth) / Math.max(1, words.length - 1) -\r\n              spaceWidth\r\n          );\r\n          break;\r\n      }\r\n    }\r\n\r\n    // text baseline alignments based on http://wiki.apache.org/xmlgraphics-fop/LineLayout/AlignmentHandling\r\n    if (typeof options.baseline === 'number') {\r\n      dy = -options.baseline;\r\n    } else {\r\n      switch (options.baseline) {\r\n        case 'svg-middle':\r\n          dy = 0.5 * this._font.xHeight;\r\n          break;\r\n        case 'middle':\r\n        case 'svg-central':\r\n          dy = 0.5 * (this._font.descender + this._font.ascender);\r\n          break;\r\n        case 'bottom':\r\n        case 'ideographic':\r\n          dy = this._font.descender;\r\n          break;\r\n        case 'alphabetic':\r\n          dy = 0;\r\n          break;\r\n        case 'mathematical':\r\n          dy = 0.5 * this._font.ascender;\r\n          break;\r\n        case 'hanging':\r\n          dy = 0.8 * this._font.ascender;\r\n          break;\r\n        case 'top':\r\n          dy = this._font.ascender;\r\n          break;\r\n        default:\r\n          dy = this._font.ascender;\r\n      }\r\n      dy = (dy / 1000) * this._fontSize;\r\n    }\r\n\r\n    // calculate the actual rendered width of the string after word and character spacing\r\n    const renderedWidth =\r\n      options.textWidth +\r\n      wordSpacing * (options.wordCount - 1) +\r\n      characterSpacing * (text.length - 1);\r\n\r\n    // create link annotations if the link option is given\r\n    if (options.link != null) {\r\n      this.link(x, y, renderedWidth, this.currentLineHeight(), options.link);\r\n    }\r\n    if (options.goTo != null) {\r\n      this.goTo(x, y, renderedWidth, this.currentLineHeight(), options.goTo);\r\n    }\r\n    if (options.destination != null) {\r\n      this.addNamedDestination(options.destination, 'XYZ', x, y, null);\r\n    }\r\n\r\n    // create underline\r\n    if (options.underline) {\r\n      this.save();\r\n      if (!options.stroke) {\r\n        this.strokeColor(...(this._fillColor || []));\r\n      }\r\n\r\n      const lineWidth =\r\n        this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10);\r\n      this.lineWidth(lineWidth);\r\n\r\n      let lineY = (y + this.currentLineHeight())  - lineWidth\r\n      this.moveTo(x, lineY);\r\n      this.lineTo(x + renderedWidth, lineY);\r\n      this.stroke();\r\n      this.restore();\r\n    }\r\n    \r\n    // create strikethrough line\r\n    if (options.strike) {\r\n      this.save();\r\n      if (!options.stroke) {\r\n        this.strokeColor(...(this._fillColor || []));\r\n      }\r\n\r\n      const lineWidth =\r\n        this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10);\r\n      this.lineWidth(lineWidth);\r\n\r\n      let lineY = y + this.currentLineHeight() / 2;\r\n      this.moveTo(x, lineY);\r\n      this.lineTo(x + renderedWidth, lineY);\r\n      this.stroke();\r\n      this.restore();\r\n    }\r\n\r\n    this.save();\r\n\r\n    // oblique (angle in degrees or boolean)\r\n    if (options.oblique) {\r\n      let skew;\r\n      if (typeof options.oblique === 'number') {\r\n        skew = -Math.tan((options.oblique * Math.PI) / 180);\r\n      } else {\r\n        skew = -0.25;\r\n      }\r\n      this.transform(1, 0, 0, 1, x, y);\r\n      this.transform(1, 0, skew, 1, -skew * dy, 0);\r\n      this.transform(1, 0, 0, 1, -x, -y);\r\n    }\r\n\r\n    // flip coordinate system\r\n    this.transform(1, 0, 0, -1, 0, this.page.height);\r\n    y = this.page.height - y - dy;\r\n\r\n    // add current font to page if necessary\r\n    if (this.page.fonts[this._font.id] == null) {\r\n      this.page.fonts[this._font.id] = this._font.ref();\r\n    }\r\n\r\n    // begin the text object\r\n    this.addContent('BT');\r\n\r\n    // text position\r\n    this.addContent(`1 0 0 1 ${number(x)} ${number(y)} Tm`);\r\n\r\n    // font and font size\r\n    this.addContent(`/${this._font.id} ${number(this._fontSize)} Tf`);\r\n\r\n    // rendering mode\r\n    const mode = options.fill && options.stroke ? 2 : options.stroke ? 1 : 0;\r\n    if (mode) {\r\n      this.addContent(`${mode} Tr`);\r\n    }\r\n\r\n    // Character spacing\r\n    if (characterSpacing) {\r\n      this.addContent(`${number(characterSpacing)} Tc`);\r\n    }\r\n\r\n    // Add the actual text\r\n    // If we have a word spacing value, we need to encode each word separately\r\n    // since the normal Tw operator only works on character code 32, which isn't\r\n    // used for embedded fonts.\r\n    if (wordSpacing) {\r\n      words = text.trim().split(/\\s+/);\r\n      wordSpacing += this.widthOfString(' ') + characterSpacing;\r\n      wordSpacing *= 1000 / this._fontSize;\r\n\r\n      encoded = [];\r\n      positions = [];\r\n      for (let word of words) {\r\n        const [encodedWord, positionsWord] = this._font.encode(\r\n          word,\r\n          options.features\r\n        );\r\n        encoded = encoded.concat(encodedWord);\r\n        positions = positions.concat(positionsWord);\r\n\r\n        // add the word spacing to the end of the word\r\n        // clone object because of cache\r\n        const space = {};\r\n        const object = positions[positions.length - 1];\r\n        for (let key in object) {\r\n          const val = object[key];\r\n          space[key] = val;\r\n        }\r\n        space.xAdvance += wordSpacing;\r\n        positions[positions.length - 1] = space;\r\n      }\r\n    } else {\r\n      [encoded, positions] = this._font.encode(text, options.features);\r\n    }\r\n\r\n    const scale = this._fontSize / 1000;\r\n    const commands = [];\r\n    let last = 0;\r\n    let hadOffset = false;\r\n\r\n    // Adds a segment of text to the TJ command buffer\r\n    const addSegment = cur => {\r\n      if (last < cur) {\r\n        const hex = encoded.slice(last, cur).join('');\r\n        const advance =\r\n          positions[cur - 1].xAdvance - positions[cur - 1].advanceWidth;\r\n        commands.push(`<${hex}> ${number(-advance)}`);\r\n      }\r\n\r\n      return (last = cur);\r\n    };\r\n\r\n    // Flushes the current TJ commands to the output stream\r\n    const flush = i => {\r\n      addSegment(i);\r\n\r\n      if (commands.length > 0) {\r\n        this.addContent(`[${commands.join(' ')}] TJ`);\r\n        return (commands.length = 0);\r\n      }\r\n    };\r\n\r\n    for (i = 0; i < positions.length; i++) {\r\n      // If we have an x or y offset, we have to break out of the current TJ command\r\n      // so we can move the text position.\r\n      const pos = positions[i];\r\n      if (pos.xOffset || pos.yOffset) {\r\n        // Flush the current buffer\r\n        flush(i);\r\n\r\n        // Move the text position and flush just the current character\r\n        this.addContent(\r\n          `1 0 0 1 ${number(x + pos.xOffset * scale)} ${number(\r\n            y + pos.yOffset * scale\r\n          )} Tm`\r\n        );\r\n        flush(i + 1);\r\n\r\n        hadOffset = true;\r\n      } else {\r\n        // If the last character had an offset, reset the text position\r\n        if (hadOffset) {\r\n          this.addContent(`1 0 0 1 ${number(x)} ${number(y)} Tm`);\r\n          hadOffset = false;\r\n        }\r\n\r\n        // Group segments that don't have any advance adjustments\r\n        if (pos.xAdvance - pos.advanceWidth !== 0) {\r\n          addSegment(i + 1);\r\n        }\r\n      }\r\n\r\n      x += pos.xAdvance * scale;\r\n    }\r\n\r\n    // Flush any remaining commands\r\n    flush(i);\r\n\r\n    // end the text object\r\n    this.addContent('ET');\r\n\r\n    // restore flipped coordinate system\r\n    return this.restore();\r\n  }\r\n};\r\n","const MARKERS = [\r\n  0xffc0,\r\n  0xffc1,\r\n  0xffc2,\r\n  0xffc3,\r\n  0xffc5,\r\n  0xffc6,\r\n  0xffc7,\r\n  0xffc8,\r\n  0xffc9,\r\n  0xffca,\r\n  0xffcb,\r\n  0xffcc,\r\n  0xffcd,\r\n  0xffce,\r\n  0xffcf\r\n];\r\n\r\nconst COLOR_SPACE_MAP = {\r\n  1: 'DeviceGray',\r\n  3: 'DeviceRGB',\r\n  4: 'DeviceCMYK'\r\n};\r\n\r\nclass JPEG {\r\n  constructor(data, label) {\r\n    let marker;\r\n    this.data = data;\r\n    this.label = label;\r\n    if (this.data.readUInt16BE(0) !== 0xffd8) {\r\n      throw 'SOI not found in JPEG';\r\n    }\r\n\r\n    let pos = 2;\r\n    while (pos < this.data.length) {\r\n      marker = this.data.readUInt16BE(pos);\r\n      pos += 2;\r\n      if (MARKERS.includes(marker)) {\r\n        break;\r\n      }\r\n      pos += this.data.readUInt16BE(pos);\r\n    }\r\n\r\n    if (!MARKERS.includes(marker)) {\r\n      throw 'Invalid JPEG.';\r\n    }\r\n    pos += 2;\r\n\r\n    this.bits = this.data[pos++];\r\n    this.height = this.data.readUInt16BE(pos);\r\n    pos += 2;\r\n\r\n    this.width = this.data.readUInt16BE(pos);\r\n    pos += 2;\r\n\r\n    const channels = this.data[pos++];\r\n    this.colorSpace = COLOR_SPACE_MAP[channels];\r\n\r\n    this.obj = null;\r\n  }\r\n\r\n  embed(document) {\r\n    if (this.obj) {\r\n      return;\r\n    }\r\n\r\n    this.obj = document.ref({\r\n      Type: 'XObject',\r\n      Subtype: 'Image',\r\n      BitsPerComponent: this.bits,\r\n      Width: this.width,\r\n      Height: this.height,\r\n      ColorSpace: this.colorSpace,\r\n      Filter: 'DCTDecode'\r\n    });\r\n\r\n    // add extra decode params for CMYK images. By swapping the\r\n    // min and max values from the default, we invert the colors. See\r\n    // section 4.8.4 of the spec.\r\n    if (this.colorSpace === 'DeviceCMYK') {\r\n      this.obj.data['Decode'] = [1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0];\r\n    }\r\n\r\n    this.obj.end(this.data);\r\n\r\n    // free memory\r\n    return (this.data = null);\r\n  }\r\n}\r\n\r\nexport default JPEG;\r\n","import zlib from 'zlib';\r\nimport PNG from 'png-js';\r\n\r\nclass PNGImage {\r\n  constructor(data, label) {\r\n    this.label = label;\r\n    this.image = new PNG(data);\r\n    this.width = this.image.width;\r\n    this.height = this.image.height;\r\n    this.imgData = this.image.imgData;\r\n    this.obj = null;\r\n  }\r\n\r\n  embed(document) {\r\n    let dataDecoded = false;\r\n\r\n    this.document = document;\r\n    if (this.obj) {\r\n      return;\r\n    }\r\n\r\n    const hasAlphaChannel = this.image.hasAlphaChannel;\r\n    const isInterlaced = this.image.interlaceMethod === 1;\r\n\r\n    this.obj = this.document.ref({\r\n      Type: 'XObject',\r\n      Subtype: 'Image',\r\n      BitsPerComponent: hasAlphaChannel ? 8 : this.image.bits,\r\n      Width: this.width,\r\n      Height: this.height,\r\n      Filter: 'FlateDecode'\r\n    });\r\n\r\n    if (!hasAlphaChannel) {\r\n      const params = this.document.ref({\r\n        Predictor: isInterlaced ? 1 : 15,\r\n        Colors: this.image.colors,\r\n        BitsPerComponent: this.image.bits,\r\n        Columns: this.width\r\n      });\r\n\r\n      this.obj.data['DecodeParms'] = params;\r\n      params.end();\r\n    }\r\n\r\n    if (this.image.palette.length === 0) {\r\n      this.obj.data['ColorSpace'] = this.image.colorSpace;\r\n    } else {\r\n      // embed the color palette in the PDF as an object stream\r\n      const palette = this.document.ref();\r\n      palette.end(Buffer.from(this.image.palette));\r\n\r\n      // build the color space array for the image\r\n      this.obj.data['ColorSpace'] = [\r\n        'Indexed',\r\n        'DeviceRGB',\r\n        this.image.palette.length / 3 - 1,\r\n        palette\r\n      ];\r\n    }\r\n\r\n    // For PNG color types 0, 2 and 3, the transparency data is stored in\r\n    // a dedicated PNG chunk.\r\n    if (this.image.transparency.grayscale != null) {\r\n      // Use Color Key Masking (spec section 4.8.5)\r\n      // An array with N elements, where N is two times the number of color components.\r\n      const val = this.image.transparency.grayscale;\r\n      this.obj.data['Mask'] = [val, val];\r\n    } else if (this.image.transparency.rgb) {\r\n      // Use Color Key Masking (spec section 4.8.5)\r\n      // An array with N elements, where N is two times the number of color components.\r\n      const { rgb } = this.image.transparency;\r\n      const mask = [];\r\n      for (let x of rgb) {\r\n        mask.push(x, x);\r\n      }\r\n\r\n      this.obj.data['Mask'] = mask;\r\n    } else if (this.image.transparency.indexed) {\r\n      // Create a transparency SMask for the image based on the data\r\n      // in the PLTE and tRNS sections. See below for details on SMasks.\r\n      dataDecoded = true;\r\n      return this.loadIndexedAlphaChannel();\r\n    } else if (hasAlphaChannel) {\r\n      // For PNG color types 4 and 6, the transparency data is stored as a alpha\r\n      // channel mixed in with the main image data. Separate this data out into an\r\n      // SMask object and store it separately in the PDF.\r\n      dataDecoded = true;\r\n      return this.splitAlphaChannel();\r\n    }\r\n\r\n    if (isInterlaced && !dataDecoded) {\r\n      return this.decodeData();\r\n    }\r\n\r\n    this.finalize();\r\n  }\r\n\r\n  finalize() {\r\n    if (this.alphaChannel) {\r\n      const sMask = this.document.ref({\r\n        Type: 'XObject',\r\n        Subtype: 'Image',\r\n        Height: this.height,\r\n        Width: this.width,\r\n        BitsPerComponent: 8,\r\n        Filter: 'FlateDecode',\r\n        ColorSpace: 'DeviceGray',\r\n        Decode: [0, 1]\r\n      });\r\n\r\n      sMask.end(this.alphaChannel);\r\n      this.obj.data['SMask'] = sMask;\r\n    }\r\n\r\n    // add the actual image data\r\n    this.obj.end(this.imgData);\r\n\r\n    // free memory\r\n    this.image = null;\r\n    return (this.imgData = null);\r\n  }\r\n\r\n  splitAlphaChannel() {\r\n    return this.image.decodePixels(pixels => {\r\n      let a, p;\r\n      const colorCount = this.image.colors;\r\n      const pixelCount = this.width * this.height;\r\n      const imgData = Buffer.alloc(pixelCount * colorCount);\r\n      const alphaChannel = Buffer.alloc(pixelCount);\r\n\r\n      let i = (p = a = 0);\r\n      const len = pixels.length;\r\n      // For 16bit images copy only most significant byte (MSB) - PNG data is always stored in network byte order (MSB first)\r\n      const skipByteCount = this.image.bits === 16 ? 1 : 0;\r\n      while (i < len) {\r\n        for (let colorIndex = 0; colorIndex < colorCount; colorIndex++) {\r\n          imgData[p++] = pixels[i++];\r\n          i += skipByteCount;\r\n        }\r\n        alphaChannel[a++] = pixels[i++];\r\n        i += skipByteCount;\r\n      }\r\n\r\n      this.imgData = zlib.deflateSync(imgData);\r\n      this.alphaChannel = zlib.deflateSync(alphaChannel);\r\n      return this.finalize();\r\n    });\r\n  }\r\n\r\n  loadIndexedAlphaChannel() {\r\n    const transparency = this.image.transparency.indexed;\r\n    return this.image.decodePixels(pixels => {\r\n      const alphaChannel = Buffer.alloc(this.width * this.height);\r\n\r\n      let i = 0;\r\n      for (let j = 0, end = pixels.length; j < end; j++) {\r\n        alphaChannel[i++] = transparency[pixels[j]];\r\n      }\r\n\r\n      this.alphaChannel = zlib.deflateSync(alphaChannel);\r\n      return this.finalize();\r\n    });\r\n  }\r\n\r\n  decodeData() {\r\n    this.image.decodePixels(pixels => {\r\n      this.imgData = zlib.deflateSync(pixels);\r\n      this.finalize();\r\n    });\r\n  }\r\n}\r\n\r\nexport default PNGImage;\r\n","/*\r\nPDFImage - embeds images in PDF documents\r\nBy Devon Govett\r\n*/\r\n\r\nimport fs from 'fs';\r\nimport JPEG from './image/jpeg';\r\nimport PNG from './image/png';\r\n\r\nclass PDFImage {\r\n  static open(src, label) {\r\n    let data;\r\n    if (Buffer.isBuffer(src)) {\r\n      data = src;\r\n    } else if (src instanceof ArrayBuffer) {\r\n      data = Buffer.from(new Uint8Array(src));\r\n    } else {\r\n      let match;\r\n      if ((match = /^data:.+;base64,(.*)$/.exec(src))) {\r\n        data = Buffer.from(match[1], 'base64');\r\n      } else {\r\n        data = fs.readFileSync(src);\r\n        if (!data) {\r\n          return;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (data[0] === 0xff && data[1] === 0xd8) {\r\n      return new JPEG(data, label);\r\n    } else if (data[0] === 0x89 && data.toString('ascii', 1, 4) === 'PNG') {\r\n      return new PNG(data, label);\r\n    } else {\r\n      throw new Error('Unknown image format.');\r\n    }\r\n  }\r\n}\r\n\r\nexport default PDFImage;\r\n","import PDFImage from '../image';\r\n\r\nexport default {\r\n  initImages() {\r\n    this._imageRegistry = {};\r\n    return (this._imageCount = 0);\r\n  },\r\n\r\n  image(src, x, y, options = {}) {\r\n    let bh, bp, bw, image, ip, left, left1;\r\n    if (typeof x === 'object') {\r\n      options = x;\r\n      x = null;\r\n    }\r\n\r\n    x = (left = x != null ? x : options.x) != null ? left : this.x;\r\n    y = (left1 = y != null ? y : options.y) != null ? left1 : this.y;\r\n\r\n    if (typeof src === 'string') {\r\n      image = this._imageRegistry[src];\r\n    }\r\n\r\n    if (!image) {\r\n      if (src.width && src.height) {\r\n        image = src;\r\n      } else {\r\n        image = this.openImage(src);\r\n      }\r\n    }\r\n\r\n    if (!image.obj) {\r\n      image.embed(this);\r\n    }\r\n\r\n    if (this.page.xobjects[image.label] == null) {\r\n      this.page.xobjects[image.label] = image.obj;\r\n    }\r\n\r\n    let w = options.width || image.width;\r\n    let h = options.height || image.height;\r\n\r\n    if (options.width && !options.height) {\r\n      const wp = w / image.width;\r\n      w = image.width * wp;\r\n      h = image.height * wp;\r\n    } else if (options.height && !options.width) {\r\n      const hp = h / image.height;\r\n      w = image.width * hp;\r\n      h = image.height * hp;\r\n    } else if (options.scale) {\r\n      w = image.width * options.scale;\r\n      h = image.height * options.scale;\r\n    } else if (options.fit) {\r\n      [bw, bh] = options.fit;\r\n      bp = bw / bh;\r\n      ip = image.width / image.height;\r\n      if (ip > bp) {\r\n        w = bw;\r\n        h = bw / ip;\r\n      } else {\r\n        h = bh;\r\n        w = bh * ip;\r\n      }\r\n    } else if (options.cover) {\r\n      [bw, bh] = options.cover;\r\n      bp = bw / bh;\r\n      ip = image.width / image.height;\r\n      if (ip > bp) {\r\n        h = bh;\r\n        w = bh * ip;\r\n      } else {\r\n        w = bw;\r\n        h = bw / ip;\r\n      }\r\n    }\r\n\r\n    if (options.fit || options.cover) {\r\n      if (options.align === 'center') {\r\n        x = x + bw / 2 - w / 2;\r\n      } else if (options.align === 'right') {\r\n        x = x + bw - w;\r\n      }\r\n\r\n      if (options.valign === 'center') {\r\n        y = y + bh / 2 - h / 2;\r\n      } else if (options.valign === 'bottom') {\r\n        y = y + bh - h;\r\n      }\r\n    }\r\n\r\n    // create link annotations if the link option is given\r\n    if (options.link != null) {\r\n      this.link(x, y, w, h, options.link);\r\n    }\r\n    if (options.goTo != null) {\r\n      this.goTo(x, y, w, h, options.goTo);\r\n    }\r\n    if (options.destination != null) {\r\n      this.addNamedDestination(options.destination, 'XYZ', x, y, null);\r\n    }\r\n\r\n    // Set the current y position to below the image if it is in the document flow\r\n    if (this.y === y) {\r\n      this.y += h;\r\n    }\r\n\r\n    this.save();\r\n    this.transform(w, 0, 0, -h, x, y + h);\r\n    this.addContent(`/${image.label} Do`);\r\n    this.restore();\r\n\r\n    return this;\r\n  },\r\n\r\n  openImage(src) {\r\n    let image;\r\n    if (typeof src === 'string') {\r\n      image = this._imageRegistry[src];\r\n    }\r\n\r\n    if (!image) {\r\n      image = PDFImage.open(src, `I${++this._imageCount}`);\r\n      if (typeof src === 'string') {\r\n        this._imageRegistry[src] = image;\r\n      }\r\n    }\r\n\r\n    return image;\r\n  }\r\n};\r\n","export default {\r\n  annotate(x, y, w, h, options) {\r\n    options.Type = 'Annot';\r\n    options.Rect = this._convertRect(x, y, w, h);\r\n    options.Border = [0, 0, 0];\r\n\r\n    if (options.Subtype === 'Link' && typeof options.F === 'undefined') {\r\n      options.F = 1 << 2; // Print Annotation Flag\r\n    }\r\n\r\n    if (options.Subtype !== 'Link') {\r\n      if (options.C == null) {\r\n        options.C = this._normalizeColor(options.color || [0, 0, 0]);\r\n      }\r\n    } // convert colors\r\n    delete options.color;\r\n\r\n    if (typeof options.Dest === 'string') {\r\n      options.Dest = new String(options.Dest);\r\n    }\r\n\r\n    // Capitalize keys\r\n    for (let key in options) {\r\n      const val = options[key];\r\n      options[key[0].toUpperCase() + key.slice(1)] = val;\r\n    }\r\n\r\n    const ref = this.ref(options);\r\n    this.page.annotations.push(ref);\r\n    ref.end();\r\n    return this;\r\n  },\r\n\r\n  note(x, y, w, h, contents, options = {}) {\r\n    options.Subtype = 'Text';\r\n    options.Contents = new String(contents);\r\n    options.Name = 'Comment';\r\n    if (options.color == null) {\r\n      options.color = [243, 223, 92];\r\n    }\r\n    return this.annotate(x, y, w, h, options);\r\n  },\r\n\r\n  goTo(x, y, w, h, name, options = {}) {\r\n    options.Subtype = 'Link';\r\n    options.A = this.ref({\r\n      S: 'GoTo',\r\n      D: new String(name)\r\n    });\r\n    options.A.end();\r\n    return this.annotate(x, y, w, h, options);\r\n  },\r\n\r\n  link(x, y, w, h, url, options = {}) {\r\n    options.Subtype = 'Link';\r\n\r\n    if (typeof url === 'number') {\r\n      // Link to a page in the document (the page must already exist)\r\n      const pages = this._root.data.Pages.data;\r\n      if (url >= 0 && url < pages.Kids.length) {\r\n        options.A = this.ref({\r\n          S: 'GoTo',\r\n          D: [pages.Kids[url], 'XYZ', null, null, null]\r\n        });\r\n        options.A.end();\r\n      } else {\r\n        throw new Error(`The document has no page ${url}`);\r\n      }\r\n    } else {\r\n      // Link to an external url\r\n      options.A = this.ref({\r\n        S: 'URI',\r\n        URI: new String(url)\r\n      });\r\n      options.A.end();\r\n    }\r\n\r\n    return this.annotate(x, y, w, h, options);\r\n  },\r\n\r\n  _markup(x, y, w, h, options = {}) {\r\n    const [x1, y1, x2, y2] = this._convertRect(x, y, w, h);\r\n    options.QuadPoints = [x1, y2, x2, y2, x1, y1, x2, y1];\r\n    options.Contents = new String();\r\n    return this.annotate(x, y, w, h, options);\r\n  },\r\n\r\n  highlight(x, y, w, h, options = {}) {\r\n    options.Subtype = 'Highlight';\r\n    if (options.color == null) {\r\n      options.color = [241, 238, 148];\r\n    }\r\n    return this._markup(x, y, w, h, options);\r\n  },\r\n\r\n  underline(x, y, w, h, options = {}) {\r\n    options.Subtype = 'Underline';\r\n    return this._markup(x, y, w, h, options);\r\n  },\r\n\r\n  strike(x, y, w, h, options = {}) {\r\n    options.Subtype = 'StrikeOut';\r\n    return this._markup(x, y, w, h, options);\r\n  },\r\n\r\n  lineAnnotation(x1, y1, x2, y2, options = {}) {\r\n    options.Subtype = 'Line';\r\n    options.Contents = new String();\r\n    options.L = [x1, this.page.height - y1, x2, this.page.height - y2];\r\n    return this.annotate(x1, y1, x2, y2, options);\r\n  },\r\n\r\n  rectAnnotation(x, y, w, h, options = {}) {\r\n    options.Subtype = 'Square';\r\n    options.Contents = new String();\r\n    return this.annotate(x, y, w, h, options);\r\n  },\r\n\r\n  ellipseAnnotation(x, y, w, h, options = {}) {\r\n    options.Subtype = 'Circle';\r\n    options.Contents = new String();\r\n    return this.annotate(x, y, w, h, options);\r\n  },\r\n\r\n  textAnnotation(x, y, w, h, text, options = {}) {\r\n    options.Subtype = 'FreeText';\r\n    options.Contents = new String(text);\r\n    options.DA = new String();\r\n    return this.annotate(x, y, w, h, options);\r\n  },\r\n\r\n  fileAnnotation(x, y, w, h, file = {}, options = {}) {\r\n    // create hidden file\r\n    const filespec = this.file(\r\n      file.src,\r\n      Object.assign({ hidden: true }, file)\r\n    );\r\n\r\n    options.Subtype = 'FileAttachment';\r\n    options.FS = filespec;\r\n\r\n    // add description from filespec unless description (Contents) has already been set\r\n    if (options.Contents) {\r\n      options.Contents = new String(options.Contents);\r\n    } else if (filespec.data.Desc) {\r\n      options.Contents = filespec.data.Desc;\r\n    }\r\n\r\n    return this.annotate(x, y, w, h, options);\r\n  },\r\n\r\n  _convertRect(x1, y1, w, h) {\r\n    // flip y1 and y2\r\n    let y2 = y1;\r\n    y1 += h;\r\n\r\n    // make x2\r\n    let x2 = x1 + w;\r\n\r\n    // apply current transformation matrix to points\r\n    const [m0, m1, m2, m3, m4, m5] = this._ctm;\r\n    x1 = m0 * x1 + m2 * y1 + m4;\r\n    y1 = m1 * x1 + m3 * y1 + m5;\r\n    x2 = m0 * x2 + m2 * y2 + m4;\r\n    y2 = m1 * x2 + m3 * y2 + m5;\r\n\r\n    return [x1, y1, x2, y2];\r\n  }\r\n};\r\n","class PDFOutline {\r\n  constructor(document, parent, title, dest, options = { expanded: false }) {\r\n    this.document = document;\r\n    this.options = options;\r\n    this.outlineData = {};\r\n\r\n    if (dest !== null) {\r\n      this.outlineData['Dest'] = [dest.dictionary, 'Fit'];\r\n    }\r\n\r\n    if (parent !== null) {\r\n      this.outlineData['Parent'] = parent;\r\n    }\r\n\r\n    if (title !== null) {\r\n      this.outlineData['Title'] = new String(title);\r\n    }\r\n\r\n    this.dictionary = this.document.ref(this.outlineData);\r\n    this.children = [];\r\n  }\r\n\r\n  addItem(title, options = { expanded: false }) {\r\n    const result = new PDFOutline(\r\n      this.document,\r\n      this.dictionary,\r\n      title,\r\n      this.document.page,\r\n      options\r\n    );\r\n    this.children.push(result);\r\n\r\n    return result;\r\n  }\r\n\r\n  endOutline() {\r\n    if (this.children.length > 0) {\r\n      if (this.options.expanded) {\r\n        this.outlineData.Count = this.children.length;\r\n      }\r\n\r\n      const first = this.children[0],\r\n        last = this.children[this.children.length - 1];\r\n      this.outlineData.First = first.dictionary;\r\n      this.outlineData.Last = last.dictionary;\r\n\r\n      for (let i = 0, len = this.children.length; i < len; i++) {\r\n        const child = this.children[i];\r\n        if (i > 0) {\r\n          child.outlineData.Prev = this.children[i - 1].dictionary;\r\n        }\r\n        if (i < this.children.length - 1) {\r\n          child.outlineData.Next = this.children[i + 1].dictionary;\r\n        }\r\n        child.endOutline();\r\n      }\r\n    }\r\n\r\n    return this.dictionary.end();\r\n  }\r\n}\r\n\r\nexport default PDFOutline;\r\n","import PDFOutline from '../outline';\r\n\r\nexport default {\r\n  initOutline() {\r\n    return (this.outline = new PDFOutline(this, null, null, null));\r\n  },\r\n\r\n  endOutline() {\r\n    this.outline.endOutline();\r\n    if (this.outline.children.length > 0) {\r\n      this._root.data.Outlines = this.outline.dictionary;\r\n      return (this._root.data.PageMode = 'UseOutlines');\r\n    }\r\n  }\r\n};\r\n","/*\r\nPDFStructureContent - a reference to a marked structure content\r\nBy Ben Schmidt\r\n*/\r\n\r\nclass PDFStructureContent {\r\n  constructor(pageRef, mcid) {\r\n    this.refs = [{ pageRef, mcid }];\r\n  }\r\n\r\n  push(structContent) {\r\n    structContent.refs.forEach((ref) => this.refs.push(ref));\r\n  }\r\n}\r\n\r\nexport default PDFStructureContent;\r\n","/*\r\nPDFStructureElement - represents an element in the PDF logical structure tree\r\nBy Ben Schmidt\r\n*/\r\n\r\nimport PDFStructureContent from \"./structure_content\";\r\n\r\nclass PDFStructureElement {\r\n  constructor(document, type, options = {}, children = null) {\r\n    this.document = document;\r\n\r\n    this._attached = false;\r\n    this._ended = false;\r\n    this._flushed = false;\r\n    this.dictionary = document.ref({\r\n      // Type: \"StructElem\",\r\n      S: type\r\n    });\r\n\r\n    const data = this.dictionary.data;\r\n\r\n    if (Array.isArray(options) || this._isValidChild(options)) {\r\n      children = options;\r\n      options = {};\r\n    }\r\n\r\n    if (typeof options.title !== 'undefined') {\r\n      data.T = new String(options.title);\r\n    }\r\n    if (typeof options.lang !== 'undefined') {\r\n      data.Lang = new String(options.lang);\r\n    }\r\n    if (typeof options.alt !== 'undefined') {\r\n      data.Alt = new String(options.alt);\r\n    }\r\n    if (typeof options.expanded !== 'undefined') {\r\n      data.E = new String(options.expanded);\r\n    }\r\n    if (typeof options.actual !== 'undefined') {\r\n      data.ActualText = new String(options.actual);\r\n    }\r\n\r\n    this._children = [];\r\n\r\n    if (children) {\r\n      if (!Array.isArray(children)) {\r\n        children = [children];\r\n      }\r\n      children.forEach((child) => this.add(child));\r\n      this.end();\r\n    }\r\n  }\r\n\r\n  add(child) {\r\n    if (this._ended) {\r\n      throw new Error(`Cannot add child to already-ended structure element`);\r\n    }\r\n\r\n    if (!this._isValidChild(child)) {\r\n      throw new Error(`Invalid structure element child`);\r\n    }\r\n\r\n    if (child instanceof PDFStructureElement) {\r\n      child.setParent(this.dictionary);\r\n      if (this._attached) {\r\n        child.setAttached();\r\n      }\r\n    }\r\n\r\n    if (child instanceof PDFStructureContent) {\r\n      this._addContentToParentTree(child);\r\n    }\r\n\r\n    if (typeof child === 'function' && this._attached) {\r\n      // _contentForClosure() adds the content to the parent tree\r\n      child = this._contentForClosure(child);\r\n    }\r\n\r\n    this._children.push(child);\r\n\r\n    return this;\r\n  }\r\n\r\n  _addContentToParentTree(content) {\r\n    content.refs.forEach(({ pageRef, mcid }) => {\r\n      const pageStructParents = this.document.getStructParentTree()\r\n        .get(pageRef.data.StructParents);\r\n      pageStructParents[mcid] = this.dictionary;\r\n    });\r\n  }\r\n\r\n  setParent(parentRef) {\r\n    if (this.dictionary.data.P) {\r\n      throw new Error(`Structure element added to more than one parent`);\r\n    }\r\n\r\n    this.dictionary.data.P = parentRef;\r\n\r\n    this._flush();\r\n  }\r\n\r\n  setAttached() {\r\n    if (this._attached) {\r\n      return;\r\n    }\r\n\r\n    this._children.forEach((child, index) => {\r\n      if (child instanceof PDFStructureElement) {\r\n        child.setAttached();\r\n      }\r\n      if (typeof child === 'function') {\r\n        this._children[index] = this._contentForClosure(child);\r\n      }\r\n    });\r\n\r\n    this._attached = true;\r\n\r\n    this._flush();\r\n  }\r\n\r\n  end() {\r\n    if (this._ended) {\r\n      return;\r\n    }\r\n\r\n    this._children\r\n      .filter((child) => child instanceof PDFStructureElement)\r\n      .forEach((child) => child.end());\r\n\r\n    this._ended = true;\r\n\r\n    this._flush();\r\n  }\r\n\r\n  _isValidChild(child) {\r\n    return child instanceof PDFStructureElement ||\r\n        child instanceof PDFStructureContent ||\r\n        typeof child === 'function';\r\n  }\r\n\r\n  _contentForClosure(closure) {\r\n    const content = this.document.markStructureContent(this.dictionary.data.S);\r\n    closure();\r\n    this.document.endMarkedContent();\r\n\r\n    this._addContentToParentTree(content);\r\n\r\n    return content;\r\n  }\r\n\r\n  _isFlushable() {\r\n    if (!this.dictionary.data.P || !this._ended) {\r\n      return false;\r\n    }\r\n\r\n    return this._children.every((child) => {\r\n      if (typeof child === 'function') {\r\n        return false;\r\n      }\r\n      if (child instanceof PDFStructureElement) {\r\n        return child._isFlushable();\r\n      }\r\n      return true;\r\n    });\r\n  }\r\n\r\n  _flush() {\r\n    if (this._flushed || !this._isFlushable()) {\r\n      return;\r\n    }\r\n\r\n    this.dictionary.data.K = [];\r\n\r\n    this._children.forEach((child) => this._flushChild(child));\r\n\r\n    this.dictionary.end();\r\n\r\n    // free memory used by children; the dictionary itself may still be\r\n    // referenced by a parent structure element or root, but we can\r\n    // at least trim the tree here\r\n    this._children = [];\r\n    this.dictionary.data.K = null;\r\n\r\n    this._flushed = true;\r\n  }\r\n\r\n  _flushChild(child) {\r\n    if (child instanceof PDFStructureElement) {\r\n      this.dictionary.data.K.push(child.dictionary);\r\n    }\r\n\r\n    if (child instanceof PDFStructureContent) {\r\n      child.refs.forEach(({ pageRef, mcid }) => {\r\n        if (!this.dictionary.data.Pg) {\r\n          this.dictionary.data.Pg = pageRef;\r\n        }\r\n\r\n        if (this.dictionary.data.Pg === pageRef) {\r\n          this.dictionary.data.K.push(mcid);\r\n        } else {\r\n          this.dictionary.data.K.push({\r\n            Type: \"MCR\",\r\n            Pg: pageRef,\r\n            MCID: mcid\r\n          });\r\n        }\r\n      });\r\n    }\r\n  }\r\n}\r\n\r\nexport default PDFStructureElement;\r\n","/*\r\nPDFNumberTree - represents a number tree object\r\n*/\r\n\r\nimport PDFTree from \"./tree\";\r\n\r\nclass PDFNumberTree extends PDFTree {\r\n  _compareKeys(a, b) {\r\n    return parseInt(a) - parseInt(b);\r\n  }\r\n\r\n  _keysName() {\r\n    return \"Nums\";\r\n  }\r\n\r\n  _dataForKey(k) {\r\n    return parseInt(k);\r\n  }\r\n}\r\n\r\nexport default PDFNumberTree;\r\n","/*\r\nMarkings mixin - support marked content sequences in content streams\r\nBy Ben Schmidt\r\n*/\r\n\r\nimport PDFStructureElement from \"../structure_element\";\r\nimport PDFStructureContent from \"../structure_content\";\r\nimport PDFNumberTree from \"../number_tree\";\r\nimport PDFObject from \"../object\";\r\n\r\nexport default {\r\n\r\n  initMarkings(options) {\r\n    this.structChildren = [];\r\n\r\n    if (options.tagged) {\r\n      this.getMarkInfoDictionary().data.Marked = true;\r\n      this.getStructTreeRoot();\r\n    }\r\n  },\r\n\r\n  markContent(tag, options = null) {\r\n    if (tag === 'Artifact' || (options && options.mcid)) {\r\n      let toClose = 0;\r\n      this.page.markings.forEach((marking) => {\r\n        if (toClose || marking.structContent || marking.tag === 'Artifact') {\r\n          toClose++;\r\n        }\r\n      });\r\n      while (toClose--) {\r\n        this.endMarkedContent();\r\n      }\r\n    }\r\n\r\n    if (!options) {\r\n      this.page.markings.push({ tag });\r\n      this.addContent(`/${tag} BMC`);\r\n      return this;\r\n    }\r\n\r\n    this.page.markings.push({ tag, options });\r\n\r\n    const dictionary = {};\r\n\r\n    if (typeof options.mcid !== 'undefined') {\r\n      dictionary.MCID = options.mcid;\r\n    }\r\n    if (tag === 'Artifact') {\r\n      if (typeof options.type === 'string') {\r\n        dictionary.Type = options.type;\r\n      }\r\n      if (Array.isArray(options.bbox)) {\r\n        dictionary.BBox = [options.bbox[0], this.page.height - options.bbox[3],\r\n          options.bbox[2], this.page.height - options.bbox[1]];\r\n      }\r\n      if (Array.isArray(options.attached) &&\r\n        options.attached.every(val => typeof val === 'string')) {\r\n        dictionary.Attached = options.attached;\r\n      }\r\n    }\r\n    if (tag === 'Span') {\r\n      if (options.lang) {\r\n        dictionary.Lang = new String(options.lang);\r\n      }\r\n      if (options.alt) {\r\n        dictionary.Alt = new String(options.alt);\r\n      }\r\n      if (options.expanded) {\r\n        dictionary.E = new String(options.expanded);\r\n      }\r\n      if (options.actual) {\r\n        dictionary.ActualText = new String(options.actual);\r\n      }\r\n    }\r\n\r\n    this.addContent(`/${tag} ${PDFObject.convert(dictionary)} BDC`);\r\n    return this;\r\n  },\r\n\r\n  markStructureContent(tag, options = {}) {\r\n    const pageStructParents = this.getStructParentTree().get(this.page.structParentTreeKey);\r\n    const mcid = pageStructParents.length;\r\n    pageStructParents.push(null);\r\n\r\n    this.markContent(tag, { ...options, mcid });\r\n\r\n    const structContent = new PDFStructureContent(this.page.dictionary, mcid);\r\n    this.page.markings.slice(-1)[0].structContent = structContent;\r\n    return structContent;\r\n  },\r\n\r\n  endMarkedContent() {\r\n    this.page.markings.pop();\r\n    this.addContent('EMC');\r\n    return this;\r\n  },\r\n\r\n  struct(type, options = {}, children = null) {\r\n    return new PDFStructureElement(this, type, options, children);\r\n  },\r\n\r\n  addStructure(structElem) {\r\n    const structTreeRoot = this.getStructTreeRoot();\r\n    structElem.setParent(structTreeRoot);\r\n    structElem.setAttached();\r\n    this.structChildren.push(structElem);\r\n    if (!structTreeRoot.data.K) {\r\n      structTreeRoot.data.K = [];\r\n    }\r\n    structTreeRoot.data.K.push(structElem.dictionary);\r\n    return this;\r\n  },\r\n\r\n  initPageMarkings(pageMarkings) {\r\n    pageMarkings.forEach((marking) => {\r\n      if (marking.structContent) {\r\n        const structContent = marking.structContent;\r\n        const newStructContent = this.markStructureContent(marking.tag, marking.options);\r\n        structContent.push(newStructContent);\r\n        this.page.markings.slice(-1)[0].structContent = structContent;\r\n      } else {\r\n        this.markContent(marking.tag, marking.options);\r\n      }\r\n    });\r\n  },\r\n\r\n  endPageMarkings(page) {\r\n    const pageMarkings = page.markings;\r\n    pageMarkings.forEach(() => page.write('EMC'));\r\n    page.markings = [];\r\n    return pageMarkings;\r\n  },\r\n\r\n  getMarkInfoDictionary() {\r\n    if (!this._root.data.MarkInfo) {\r\n      this._root.data.MarkInfo = this.ref({});\r\n    }\r\n    return this._root.data.MarkInfo;\r\n  },\r\n\r\n  getStructTreeRoot() {\r\n    if (!this._root.data.StructTreeRoot) {\r\n      this._root.data.StructTreeRoot = this.ref({\r\n        Type: 'StructTreeRoot',\r\n        ParentTree: new PDFNumberTree(),\r\n        ParentTreeNextKey: 0\r\n      });\r\n    }\r\n    return this._root.data.StructTreeRoot;\r\n  },\r\n\r\n  getStructParentTree() {\r\n    return this.getStructTreeRoot().data.ParentTree;\r\n  },\r\n\r\n  createStructParentTreeNextKey() {\r\n    // initialise the MarkInfo dictionary\r\n    this.getMarkInfoDictionary();\r\n\r\n    const structTreeRoot = this.getStructTreeRoot();\r\n    const key = structTreeRoot.data.ParentTreeNextKey++;\r\n    structTreeRoot.data.ParentTree.add(key, []);\r\n    return key;\r\n  },\r\n\r\n  endMarkings() {\r\n    const structTreeRoot = this._root.data.StructTreeRoot;\r\n    if (structTreeRoot) {\r\n      structTreeRoot.end();\r\n      this.structChildren.forEach((structElem) => structElem.end());\r\n    }\r\n    if (this._root.data.MarkInfo) {\r\n      this._root.data.MarkInfo.end();\r\n    }\r\n  }\r\n\r\n};\r\n","const FIELD_FLAGS = {\r\n  readOnly: 1,\r\n  required: 2,\r\n  noExport: 4,\r\n  multiline: 0x1000,\r\n  password: 0x2000,\r\n  toggleToOffButton: 0x4000,\r\n  radioButton: 0x8000,\r\n  pushButton: 0x10000,\r\n  combo: 0x20000,\r\n  edit: 0x40000,\r\n  sort: 0x80000,\r\n  multiSelect: 0x200000,\r\n  noSpell: 0x400000\r\n};\r\nconst FIELD_JUSTIFY = {\r\n  left: 0,\r\n  center: 1,\r\n  right: 2\r\n};\r\nconst VALUE_MAP = { value: 'V', defaultValue: 'DV' };\r\nconst FORMAT_SPECIAL = {\r\n  zip: '0',\r\n  zipPlus4: '1',\r\n  zip4: '1',\r\n  phone: '2',\r\n  ssn: '3'\r\n};\r\nconst FORMAT_DEFAULT = {\r\n  number: {\r\n    nDec: 0,\r\n    sepComma: false,\r\n    negStyle: 'MinusBlack',\r\n    currency: '',\r\n    currencyPrepend: true\r\n  },\r\n  percent: {\r\n    nDec: 0,\r\n    sepComma: false\r\n  }\r\n};\r\n\r\nexport default {\r\n  /**\r\n   * Must call if adding AcroForms to a document. Must also call font() before\r\n   * this method to set the default font.\r\n   */\r\n  initForm() {\r\n    if (!this._font) {\r\n      throw new Error('Must set a font before calling initForm method');\r\n    }\r\n    this._acroform = {\r\n      fonts: {},\r\n      defaultFont: this._font.name\r\n    };\r\n    this._acroform.fonts[this._font.id] = this._font.ref();\r\n\r\n    let data = {\r\n      Fields: [],\r\n      NeedAppearances: true,\r\n      DA: new String(`/${this._font.id} 0 Tf 0 g`),\r\n      DR: {\r\n        Font: {}\r\n      }\r\n    };\r\n    data.DR.Font[this._font.id] = this._font.ref();\r\n    const AcroForm = this.ref(data);\r\n    this._root.data.AcroForm = AcroForm;\r\n    return this;\r\n  },\r\n\r\n  /**\r\n   * Called automatically by document.js\r\n   */\r\n  endAcroForm() {\r\n    if (this._root.data.AcroForm) {\r\n      if (\r\n        !Object.keys(this._acroform.fonts).length &&\r\n        !this._acroform.defaultFont\r\n      ) {\r\n        throw new Error('No fonts specified for PDF form');\r\n      }\r\n      let fontDict = this._root.data.AcroForm.data.DR.Font;\r\n      Object.keys(this._acroform.fonts).forEach(name => {\r\n        fontDict[name] = this._acroform.fonts[name];\r\n      });\r\n      this._root.data.AcroForm.data.Fields.forEach(fieldRef => {\r\n        this._endChild(fieldRef);\r\n      });\r\n      this._root.data.AcroForm.end();\r\n    }\r\n    return this;\r\n  },\r\n\r\n  _endChild(ref) {\r\n    if (Array.isArray(ref.data.Kids)) {\r\n      ref.data.Kids.forEach(childRef => {\r\n        this._endChild(childRef);\r\n      });\r\n      ref.end();\r\n    }\r\n    return this;\r\n  },\r\n\r\n  /**\r\n   * Creates and adds a form field to the document. Form fields are intermediate\r\n   * nodes in a PDF form that are used to specify form name heirarchy and form\r\n   * value defaults.\r\n   * @param {string} name - field name (T attribute in field dictionary)\r\n   * @param {object} options  - other attributes to include in field dictionary\r\n   */\r\n  formField(name, options = {}) {\r\n    let fieldDict = this._fieldDict(name, null, options);\r\n    let fieldRef = this.ref(fieldDict);\r\n    this._addToParent(fieldRef);\r\n    return fieldRef;\r\n  },\r\n\r\n  /**\r\n   * Creates and adds a Form Annotation to the document. Form annotations are\r\n   * called Widget annotations internally within a PDF file.\r\n   * @param {string} name - form field name (T attribute of widget annotation\r\n   * dictionary)\r\n   * @param {number} x\r\n   * @param {number} y\r\n   * @param {number} w\r\n   * @param {number} h\r\n   * @param {object} options\r\n   */\r\n  formAnnotation(name, type, x, y, w, h, options = {}) {\r\n    let fieldDict = this._fieldDict(name, type, options);\r\n    fieldDict.Subtype = 'Widget';\r\n    if (fieldDict.F === undefined) {\r\n      fieldDict.F = 4; // print the annotation\r\n    }\r\n\r\n    // Add Field annot to page, and get it's ref\r\n    this.annotate(x, y, w, h, fieldDict);\r\n    let annotRef = this.page.annotations[this.page.annotations.length - 1];\r\n\r\n    return this._addToParent(annotRef);\r\n  },\r\n\r\n  formText(name, x, y, w, h, options = {}) {\r\n    return this.formAnnotation(name, 'text', x, y, w, h, options);\r\n  },\r\n\r\n  formPushButton(name, x, y, w, h, options = {}) {\r\n    return this.formAnnotation(name, 'pushButton', x, y, w, h, options);\r\n  },\r\n\r\n  formCombo(name, x, y, w, h, options = {}) {\r\n    return this.formAnnotation(name, 'combo', x, y, w, h, options);\r\n  },\r\n\r\n  formList(name, x, y, w, h, options = {}) {\r\n    return this.formAnnotation(name, 'list', x, y, w, h, options);\r\n  },\r\n\r\n  formRadioButton(name, x, y, w, h, options = {}) {\r\n    return this.formAnnotation(name, 'radioButton', x, y, w, h, options);\r\n  },\r\n\r\n  formCheckbox(name, x, y, w, h, options = {}) {\r\n    return this.formAnnotation(name, 'checkbox', x, y, w, h, options);\r\n  },\r\n\r\n  _addToParent(fieldRef) {\r\n    let parent = fieldRef.data.Parent;\r\n    if (parent) {\r\n      if (!parent.data.Kids) {\r\n        parent.data.Kids = [];\r\n      }\r\n      parent.data.Kids.push(fieldRef);\r\n    } else {\r\n      this._root.data.AcroForm.data.Fields.push(fieldRef);\r\n    }\r\n    return this;\r\n  },\r\n\r\n  _fieldDict(name, type, options = {}) {\r\n    if (!this._acroform) {\r\n      throw new Error(\r\n        'Call document.initForms() method before adding form elements to document'\r\n      );\r\n    }\r\n    let opts = Object.assign({}, options);\r\n    if (type !== null) {\r\n      opts = this._resolveType(type, options);\r\n    }\r\n    opts = this._resolveFlags(opts);\r\n    opts = this._resolveJustify(opts);\r\n    opts = this._resolveFont(opts);\r\n    opts = this._resolveStrings(opts);\r\n    opts = this._resolveColors(opts);\r\n    opts = this._resolveFormat(opts);\r\n    opts.T = new String(name);\r\n    if (opts.parent) {\r\n      opts.Parent = opts.parent;\r\n      delete opts.parent;\r\n    }\r\n    return opts;\r\n  },\r\n\r\n  _resolveType(type, opts) {\r\n    if (type === 'text') {\r\n      opts.FT = 'Tx';\r\n    } else if (type === 'pushButton') {\r\n      opts.FT = 'Btn';\r\n      opts.pushButton = true;\r\n    } else if (type === 'radioButton') {\r\n      opts.FT = 'Btn';\r\n      opts.radioButton = true;\r\n    } else if (type === 'checkbox') {\r\n      opts.FT = 'Btn';\r\n    } else if (type === 'combo') {\r\n      opts.FT = 'Ch';\r\n      opts.combo = true;\r\n    } else if (type === 'list') {\r\n      opts.FT = 'Ch';\r\n    } else {\r\n      throw new Error(`Invalid form annotation type '${type}'`);\r\n    }\r\n    return opts;\r\n  },\r\n\r\n  _resolveFormat(opts) {\r\n    const f = opts.format;\r\n    if (f && f.type) {\r\n      let fnKeystroke;\r\n      let fnFormat;\r\n      let params = '';\r\n      if (FORMAT_SPECIAL[f.type] !== undefined) {\r\n        fnKeystroke = `AFSpecial_Keystroke`;\r\n        fnFormat = `AFSpecial_Format`;\r\n        params = FORMAT_SPECIAL[f.type];\r\n      } else {\r\n        let format = f.type.charAt(0).toUpperCase() + f.type.slice(1);\r\n        fnKeystroke = `AF${format}_Keystroke`;\r\n        fnFormat = `AF${format}_Format`;\r\n\r\n        if (f.type === 'date') {\r\n          fnKeystroke += 'Ex';\r\n          params = String(f.param);\r\n        } else if (f.type === 'time') {\r\n          params = String(f.param);\r\n        } else if (f.type === 'number') {\r\n          let p = Object.assign({}, FORMAT_DEFAULT.number, f);\r\n          params = String(\r\n            [\r\n              String(p.nDec),\r\n              p.sepComma ? '0' : '1',\r\n              '\"' + p.negStyle + '\"',\r\n              'null',\r\n              '\"' + p.currency + '\"',\r\n              String(p.currencyPrepend)\r\n            ].join(',')\r\n          );\r\n        } else if (f.type === 'percent') {\r\n          let p = Object.assign({}, FORMAT_DEFAULT.percent, f);\r\n          params = String([String(p.nDec), p.sepComma ? '0' : '1'].join(','));\r\n        }\r\n      }\r\n      opts.AA = opts.AA ? opts.AA : {};\r\n      opts.AA.K = {\r\n        S: 'JavaScript',\r\n        JS: new String(`${fnKeystroke}(${params});`)\r\n      };\r\n      opts.AA.F = {\r\n        S: 'JavaScript',\r\n        JS: new String(`${fnFormat}(${params});`)\r\n      };\r\n    }\r\n    delete opts.format;\r\n    return opts;\r\n  },\r\n\r\n  _resolveColors(opts) {\r\n    let color = this._normalizeColor(opts.backgroundColor);\r\n    if (color) {\r\n      if (!opts.MK) {\r\n        opts.MK = {};\r\n      }\r\n      opts.MK.BG = color;\r\n    }\r\n    color = this._normalizeColor(opts.borderColor);\r\n    if (color) {\r\n      if (!opts.MK) {\r\n        opts.MK = {};\r\n      }\r\n      opts.MK.BC = color;\r\n    }\r\n    delete opts.backgroundColor;\r\n    delete opts.borderColor;\r\n    return opts;\r\n  },\r\n\r\n  _resolveFlags(options) {\r\n    let result = 0;\r\n    Object.keys(options).forEach(key => {\r\n      if (FIELD_FLAGS[key]) {\r\n        result |= FIELD_FLAGS[key];\r\n        delete options[key];\r\n      }\r\n    });\r\n    if (result !== 0) {\r\n      options.Ff = options.Ff ? options.Ff : 0;\r\n      options.Ff |= result;\r\n    }\r\n    return options;\r\n  },\r\n\r\n  _resolveJustify(options) {\r\n    let result = 0;\r\n    if (options.align !== undefined) {\r\n      if (typeof FIELD_JUSTIFY[options.align] === 'number') {\r\n        result = FIELD_JUSTIFY[options.align];\r\n      }\r\n      delete options.align;\r\n    }\r\n    if (result !== 0) {\r\n      options.Q = result; // default\r\n    }\r\n    return options;\r\n  },\r\n\r\n  _resolveFont(options) {\r\n    // add current font to document-level AcroForm dict if necessary\r\n    if (this._acroform.fonts[this._font.id] === null) {\r\n      this._acroform.fonts[this._font.id] = this._font.ref();\r\n    }\r\n\r\n    // add current font to field's resource dict (RD) if not the default acroform font\r\n    if (this._acroform.defaultFont !== this._font.name) {\r\n      options.DR = { Font: {} };\r\n\r\n      // Get the fontSize option. If not set use auto sizing\r\n      const fontSize = options.fontSize || 0;\r\n\r\n      options.DR.Font[this._font.id] = this._font.ref();\r\n      options.DA = new String(`/${this._font.id} ${fontSize} Tf 0 g`);\r\n    }\r\n    return options;\r\n  },\r\n\r\n  _resolveStrings(options) {\r\n    let select = [];\r\n    function appendChoices(a) {\r\n      if (Array.isArray(a)) {\r\n        for (let idx = 0; idx < a.length; idx++) {\r\n          if (typeof a[idx] === 'string') {\r\n            select.push(new String(a[idx]));\r\n          } else {\r\n            select.push(a[idx]);\r\n          }\r\n        }\r\n      }\r\n    }\r\n    appendChoices(options.Opt);\r\n    if (options.select) {\r\n      appendChoices(options.select);\r\n      delete options.select;\r\n    }\r\n    if (select.length) {\r\n      options.Opt = select;\r\n    }\r\n\r\n    Object.keys(VALUE_MAP).forEach(key => {\r\n      if (options[key] !== undefined) {\r\n        options[VALUE_MAP[key]] = options[key];\r\n        delete options[key];\r\n      }\r\n    });\r\n    ['V', 'DV'].forEach(key => {\r\n      if (typeof options[key] === 'string') {\r\n        options[key] = new String(options[key]);\r\n      }\r\n    });\r\n\r\n    if (options.MK && options.MK.CA) {\r\n      options.MK.CA = new String(options.MK.CA);\r\n    }\r\n    if (options.label) {\r\n      options.MK = options.MK ? options.MK : {};\r\n      options.MK.CA = new String(options.label);\r\n      delete options.label;\r\n    }\r\n    return options;\r\n  }\r\n};\r\n","import fs from 'fs';\r\nimport CryptoJS from 'crypto-js';\r\n\r\nexport default {\r\n  /**\r\n   * Embed contents of `src` in PDF\r\n   * @param {Buffer | ArrayBuffer | string} src input Buffer, ArrayBuffer, base64 encoded string or path to file\r\n   * @param {object} options\r\n   *  * options.name: filename to be shown in PDF, will use `src` if none set\r\n   *  * options.type: filetype to be shown in PDF\r\n   *  * options.description: description to be shown in PDF\r\n   *  * options.hidden: if true, do not add attachment to EmbeddedFiles dictionary. Useful for file attachment annotations\r\n   *  * options.creationDate: override creation date\r\n   *  * options.modifiedDate: override modified date\r\n   * @returns filespec reference\r\n   */\r\n  file(src, options = {}) {\r\n    options.name = options.name || src;\r\n\r\n    const refBody = {\r\n      Type: 'EmbeddedFile',\r\n      Params: {}\r\n    };\r\n    let data;\r\n\r\n    if (!src) {\r\n      throw new Error('No src specified');\r\n    }\r\n    if (Buffer.isBuffer(src)) {\r\n      data = src;\r\n    } else if (src instanceof ArrayBuffer) {\r\n      data = Buffer.from(new Uint8Array(src));\r\n    } else {\r\n      let match;\r\n      if ((match = /^data:(.*);base64,(.*)$/.exec(src))) {\r\n        if (match[1]) {\r\n          refBody.Subtype = match[1].replace('/', '#2F');\r\n        }\r\n        data = Buffer.from(match[2], 'base64');\r\n      } else {\r\n        data = fs.readFileSync(src);\r\n        if (!data) {\r\n          throw new Error(`Could not read contents of file at filepath ${src}`);\r\n        }\r\n\r\n        // update CreationDate and ModDate\r\n        const { birthtime, ctime } = fs.statSync(src);\r\n        refBody.Params.CreationDate = birthtime;\r\n        refBody.Params.ModDate = ctime;\r\n      }\r\n    }\r\n\r\n    // override creation date and modified date\r\n    if (options.creationDate instanceof Date) {\r\n      refBody.Params.CreationDate = options.creationDate;\r\n    }\r\n    if (options.modifiedDate instanceof Date) {\r\n      refBody.Params.ModDate = options.modifiedDate;\r\n    }\r\n    // add optional subtype\r\n    if (options.type) {\r\n      refBody.Subtype = options.type.replace('/', '#2F');\r\n    }\r\n\r\n    // add checksum and size information\r\n    const checksum = CryptoJS.MD5(\r\n      CryptoJS.lib.WordArray.create(new Uint8Array(data))\r\n    );\r\n    refBody.Params.CheckSum = new String(checksum);\r\n    refBody.Params.Size = data.byteLength;\r\n\r\n    // save some space when embedding the same file again\r\n    // if a file with the same name and metadata exists, reuse its reference\r\n    let ref;\r\n    if (!this._fileRegistry) this._fileRegistry = {};\r\n    let file = this._fileRegistry[options.name];\r\n    if (file && isEqual(refBody, file)) {\r\n      ref = file.ref;\r\n    } else {\r\n      ref = this.ref(refBody);\r\n      ref.end(data);\r\n\r\n      this._fileRegistry[options.name] = { ...refBody, ref };\r\n    }\r\n    // add filespec for embedded file\r\n    const fileSpecBody = {\r\n      Type: 'Filespec',\r\n      F: new String(options.name),\r\n      EF: { F: ref },\r\n      UF: new String(options.name)\r\n    };\r\n    if (options.description) {\r\n      fileSpecBody.Desc = new String(options.description);\r\n    }\r\n    const filespec = this.ref(fileSpecBody);\r\n    filespec.end();\r\n\r\n    if (!options.hidden) {\r\n      this.addNamedEmbeddedFile(options.name, filespec);\r\n    }\r\n\r\n    return filespec;\r\n  }\r\n};\r\n\r\n/** check two embedded file metadata objects for equality */\r\nfunction isEqual(a, b) {\r\n  return (\r\n    a.Subtype === b.Subtype &&\r\n    a.Params.CheckSum.toString() === b.Params.CheckSum.toString() &&\r\n    a.Params.Size === b.Params.Size &&\r\n    a.Params.CreationDate === b.Params.CreationDate &&\r\n    a.Params.ModDate === b.Params.ModDate\r\n  );\r\n}\r\n","import fs from 'fs';\r\n\r\nexport default {\r\n\r\n    initPDFA(pSubset) {\r\n        if (pSubset.charAt(pSubset.length - 3) === '-') {\r\n            this.subset_conformance = pSubset.charAt(pSubset.length - 1).toUpperCase();\r\n            this.subset = parseInt(pSubset.charAt(pSubset.length - 2));\r\n        } else {\r\n            // Default to Basic conformance when user doesn't specify\r\n            this.subset_conformance = 'B';\r\n            this.subset = parseInt(pSubset.charAt(pSubset.length - 1));\r\n        }\r\n    },\r\n\r\n    endSubset() {\r\n        this._addPdfaMetadata();\r\n        const jsPath = `${__dirname}/data/sRGB_IEC61966_2_1.icc`\r\n        const jestPath = `${__dirname}/../color_profiles/sRGB_IEC61966_2_1.icc`\r\n        this._addColorOutputIntent(fs.existsSync(jsPath) ? jsPath : jestPath);\r\n    },\r\n\r\n    _addColorOutputIntent(pICCPath) {\r\n        const iccProfile = fs.readFileSync(pICCPath);\r\n\r\n        const colorProfileRef = this.ref({\r\n            Length: iccProfile.length,\r\n            N: 3\r\n        });\r\n        colorProfileRef.write(iccProfile);\r\n        colorProfileRef.end();\r\n\r\n        const intentRef = this.ref({\r\n            Type: 'OutputIntent',\r\n            S: 'GTS_PDFA1',\r\n            Info: new String('sRGB IEC61966-2.1'),\r\n            OutputConditionIdentifier: new String('sRGB IEC61966-2.1'),\r\n            DestOutputProfile: colorProfileRef,\r\n        });\r\n        intentRef.end();\r\n\r\n        this._root.data.OutputIntents = [intentRef];\r\n    },\r\n\r\n    _getPdfaid() {\r\n        return `\r\n        <rdf:Description xmlns:pdfaid=\"http://www.aiim.org/pdfa/ns/id/\" rdf:about=\"\">\r\n            <pdfaid:part>${this.subset}</pdfaid:part>\r\n            <pdfaid:conformance>${this.subset_conformance}</pdfaid:conformance>\r\n        </rdf:Description>\r\n        `;\r\n    },\r\n\r\n    _addPdfaMetadata() {\r\n        this.appendXML(this._getPdfaid());\r\n    },\r\n\r\n}","import PDFA from './pdfa';\r\n\r\nexport default {\r\n    _importSubset(subset) {\r\n        Object.assign(this, subset)\r\n    },\r\n\r\n    initSubset(options) {\r\n\r\n        switch (options.subset) {\r\n            case 'PDF/A-1':\r\n            case 'PDF/A-1a':\r\n            case 'PDF/A-1b':\r\n            case 'PDF/A-2':\r\n            case 'PDF/A-2a':\r\n            case 'PDF/A-2b':\r\n            case 'PDF/A-3':\r\n            case 'PDF/A-3a':\r\n            case 'PDF/A-3b':\r\n                this._importSubset(PDFA);\r\n                this.initPDFA(options.subset);\r\n                break;\r\n        }\r\n    }\r\n}","\r\nclass PDFMetadata {\r\n    constructor() {\r\n        this._metadata = `\r\n        <?xpacket begin=\"\\ufeff\" id=\"W5M0MpCehiHzreSzNTczkc9d\"?>\r\n            <x:xmpmeta xmlns:x=\"adobe:ns:meta/\">\r\n                <rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\r\n        `;\r\n    }\r\n    \r\n    _closeTags() {\r\n        this._metadata = this._metadata.concat(`\r\n                </rdf:RDF>\r\n            </x:xmpmeta>\r\n        <?xpacket end=\"w\"?>\r\n        `);\r\n    }\r\n\r\n    append(xml, newline=true) {\r\n        this._metadata = this._metadata.concat(xml); \r\n        if (newline)\r\n            this._metadata = this._metadata.concat('\\n'); \r\n    }\r\n\r\n    getXML() { return this._metadata; }\r\n\r\n    getLength() { return this._metadata.length; }\r\n\r\n    end() {\r\n        this._closeTags();\r\n        this._metadata = this._metadata.trim();\r\n    }\r\n}\r\n\r\nexport default PDFMetadata;","import PDFMetadata from \"../metadata\"\r\n\r\nexport default {\r\n    initMetadata() {\r\n        this.metadata = new PDFMetadata();\r\n    },\r\n\r\n    appendXML(xml, newline=true) { this.metadata.append(xml,newline); },\r\n\r\n    _addInfo() {\r\n        this.appendXML(`\r\n        <rdf:Description rdf:about=\"\" xmlns:xmp=\"http://ns.adobe.com/xap/1.0/\">\r\n            <xmp:CreateDate>${this.info.CreationDate.toISOString().split('.')[0]+\"Z\"}</xmp:CreateDate>\r\n            <xmp:CreatorTool>${this.info.Creator}</xmp:CreatorTool>\r\n        </rdf:Description>\r\n        `\r\n        );\r\n\r\n        if (this.info.Title || this.info.Author || this.info.Subject) {\r\n            this.appendXML(`\r\n            <rdf:Description rdf:about=\"\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\">\r\n            `);\r\n            \r\n            if (this.info.Title) {\r\n                this.appendXML(`\r\n                <dc:title>\r\n                    <rdf:Alt>\r\n                        <rdf:li xml:lang=\"x-default\">${this.info.Title}</rdf:li>\r\n                    </rdf:Alt>\r\n                </dc:title>\r\n                `);\r\n            }\r\n\r\n            if (this.info.Author) {\r\n                this.appendXML(`\r\n                <dc:creator>\r\n                    <rdf:Seq>\r\n                        <rdf:li>${this.info.Author}</rdf:li>\r\n                    </rdf:Seq>\r\n                </dc:creator>\r\n                `);\r\n            }\r\n\r\n            if (this.info.Subject) {\r\n                this.appendXML(`\r\n                <dc:description>\r\n                    <rdf:Alt>\r\n                        <rdf:li xml:lang=\"x-default\">${this.info.Subject}</rdf:li>\r\n                    </rdf:Alt>\r\n                </dc:description>\r\n                `);\r\n            }\r\n\r\n            this.appendXML(`\r\n            </rdf:Description>\r\n            `);\r\n        }\r\n\r\n        this.appendXML(`\r\n        <rdf:Description rdf:about=\"\" xmlns:pdf=\"http://ns.adobe.com/pdf/1.3/\">\r\n            <pdf:Producer>${this.info.Creator}</pdf:Producer>`, false);\r\n\r\n        if (this.info.Keywords) {\r\n            this.appendXML(`\r\n            <pdf:Keywords>${this.info.Keywords}</pdf:Keywords>`, false);\r\n        }\r\n\r\n        this.appendXML(`\r\n        </rdf:Description>\r\n        `);\r\n    },\r\n\r\n    endMetadata() {\r\n        this._addInfo();\r\n    \r\n        this.metadata.end();\r\n\r\n        /*\r\n        Metadata was introduced in PDF 1.4, so adding it to 1.3 \r\n        will likely only take up more space.\r\n        */\r\n        if (this.version != 1.3) {\r\n            this.metadataRef = this.ref({\r\n                length: this.metadata.getLength(),\r\n                Type: 'Metadata',\r\n                Subtype: 'XML'\r\n            });\r\n            this.metadataRef.compress = false;\r\n            this.metadataRef.write(Buffer.from(this.metadata.getXML(), 'utf-8'));\r\n            this.metadataRef.end();\r\n            this._root.data.Metadata = this.metadataRef;\r\n        }\r\n    }\r\n}","/*\r\nPDFDocument - represents an entire PDF document\r\nBy Devon Govett\r\n*/\r\n\r\nimport stream from 'stream';\r\nimport fs from 'fs';\r\nimport PDFObject from './object';\r\nimport PDFReference from './reference';\r\nimport PDFPage from './page';\r\nimport PDFNameTree from './name_tree';\r\nimport PDFSecurity from './security';\r\nimport ColorMixin from './mixins/color';\r\nimport VectorMixin from './mixins/vector';\r\nimport FontsMixin from './mixins/fonts';\r\nimport TextMixin from './mixins/text';\r\nimport ImagesMixin from './mixins/images';\r\nimport AnnotationsMixin from './mixins/annotations';\r\nimport OutlineMixin from './mixins/outline';\r\nimport MarkingsMixin from './mixins/markings';\r\nimport AcroFormMixin from './mixins/acroform';\r\nimport AttachmentsMixin from './mixins/attachments';\r\nimport LineWrapper from './line_wrapper';\r\nimport SubsetMixin from './mixins/subsets';\r\nimport MetadataMixin from './mixins/metadata';\r\n\r\nclass PDFDocument extends stream.Readable {\r\n  constructor(options = {}) {\r\n    super(options);\r\n    this.options = options;\r\n\r\n    // PDF version\r\n    switch (options.pdfVersion) {\r\n      case '1.4':\r\n        this.version = 1.4;\r\n        break;\r\n      case '1.5':\r\n        this.version = 1.5;\r\n        break;\r\n      case '1.6':\r\n        this.version = 1.6;\r\n        break;\r\n      case '1.7':\r\n      case '1.7ext3':\r\n        this.version = 1.7;\r\n        break;\r\n      default:\r\n        this.version = 1.3;\r\n        break;\r\n    }\r\n\r\n    // Whether streams should be compressed\r\n    this.compress =\r\n      this.options.compress != null ? this.options.compress : true;\r\n\r\n    this._pageBuffer = [];\r\n    this._pageBufferStart = 0;\r\n\r\n    // The PDF object store\r\n    this._offsets = [];\r\n    this._waiting = 0;\r\n    this._ended = false;\r\n    this._offset = 0;\r\n    const Pages = this.ref({\r\n      Type: 'Pages',\r\n      Count: 0,\r\n      Kids: []\r\n    });\r\n\r\n    const Names = this.ref({\r\n      Dests: new PDFNameTree()\r\n    });\r\n\r\n    this._root = this.ref({\r\n      Type: 'Catalog',\r\n      Pages,\r\n      Names\r\n    });\r\n\r\n    if (this.options.lang) {\r\n      this._root.data.Lang = new String(this.options.lang);\r\n    }\r\n\r\n    // The current page\r\n    this.page = null;\r\n\r\n    // Initialize mixins\r\n    this.initMetadata();\r\n    this.initColor();\r\n    this.initVector();\r\n    this.initFonts(options.font);\r\n    this.initText();\r\n    this.initImages();\r\n    this.initOutline();\r\n    this.initMarkings(options);\r\n    this.initSubset(options);\r\n\r\n    // Initialize the metadata\r\n    this.info = {\r\n      Producer: 'PDFKit',\r\n      Creator: 'PDFKit',\r\n      CreationDate: new Date()\r\n    };\r\n\r\n    if (this.options.info) {\r\n      for (let key in this.options.info) {\r\n        const val = this.options.info[key];\r\n        this.info[key] = val;\r\n      }\r\n    }\r\n\r\n    if (this.options.displayTitle) {\r\n      this._root.data.ViewerPreferences = this.ref({\r\n        DisplayDocTitle: true\r\n      });\r\n    }\r\n\r\n    // Generate file ID\r\n    this._id = PDFSecurity.generateFileID(this.info);\r\n\r\n    // Initialize security settings\r\n    this._security = PDFSecurity.create(this, options);\r\n\r\n    // Write the header\r\n    // PDF version\r\n    this._write(`%PDF-${this.version}`);\r\n\r\n    // 4 binary chars, as recommended by the spec\r\n    this._write('%\\xFF\\xFF\\xFF\\xFF');\r\n\r\n    // Add the first page\r\n    if (this.options.autoFirstPage !== false) {\r\n      this.addPage();\r\n    }\r\n  }\r\n\r\n  addPage(options) {\r\n    if (options == null) {\r\n      ({ options } = this);\r\n    }\r\n\r\n    // end the current page if needed\r\n    if (!this.options.bufferPages) {\r\n      this.flushPages();\r\n    }\r\n\r\n    // create a page object\r\n    this.page = new PDFPage(this, options);\r\n    this._pageBuffer.push(this.page);\r\n\r\n    // add the page to the object store\r\n    const pages = this._root.data.Pages.data;\r\n    pages.Kids.push(this.page.dictionary);\r\n    pages.Count++;\r\n\r\n    // reset x and y coordinates\r\n    this.x = this.page.margins.left;\r\n    this.y = this.page.margins.top;\r\n\r\n    // flip PDF coordinate system so that the origin is in\r\n    // the top left rather than the bottom left\r\n    this._ctm = [1, 0, 0, 1, 0, 0];\r\n    this.transform(1, 0, 0, -1, 0, this.page.height);\r\n\r\n    this.emit('pageAdded');\r\n\r\n    return this;\r\n  }\r\n\r\n  continueOnNewPage(options) {\r\n    const pageMarkings = this.endPageMarkings(this.page);\r\n\r\n    this.addPage(options);\r\n\r\n    this.initPageMarkings(pageMarkings);\r\n\r\n    return this;\r\n  }\r\n\r\n  bufferedPageRange() {\r\n    return { start: this._pageBufferStart, count: this._pageBuffer.length };\r\n  }\r\n\r\n  switchToPage(n) {\r\n    let page;\r\n    if (!(page = this._pageBuffer[n - this._pageBufferStart])) {\r\n      throw new Error(\r\n        `switchToPage(${n}) out of bounds, current buffer covers pages ${\r\n          this._pageBufferStart\r\n        } to ${this._pageBufferStart + this._pageBuffer.length - 1}`\r\n      );\r\n    }\r\n\r\n    return (this.page = page);\r\n  }\r\n\r\n  flushPages() {\r\n    // this local variable exists so we're future-proof against\r\n    // reentrant calls to flushPages.\r\n    const pages = this._pageBuffer;\r\n    this._pageBuffer = [];\r\n    this._pageBufferStart += pages.length;\r\n    for (let page of pages) {\r\n      this.endPageMarkings(page);\r\n      page.end();\r\n    }\r\n  }\r\n\r\n  addNamedDestination(name, ...args) {\r\n    if (args.length === 0) {\r\n      args = ['XYZ', null, null, null];\r\n    }\r\n    if (args[0] === 'XYZ' && args[2] !== null) {\r\n      args[2] = this.page.height - args[2];\r\n    }\r\n    args.unshift(this.page.dictionary);\r\n    this._root.data.Names.data.Dests.add(name, args);\r\n  }\r\n\r\n  addNamedEmbeddedFile(name, ref) {\r\n    if (!this._root.data.Names.data.EmbeddedFiles) {\r\n      // disabling /Limits for this tree fixes attachments not showing in Adobe Reader\r\n      this._root.data.Names.data.EmbeddedFiles = new PDFNameTree({ limits: false });\r\n    }\r\n\r\n    // add filespec to EmbeddedFiles\r\n    this._root.data.Names.data.EmbeddedFiles.add(name, ref);\r\n  }\r\n\r\n  addNamedJavaScript(name, js) {\r\n    if (!this._root.data.Names.data.JavaScript) {\r\n      this._root.data.Names.data.JavaScript = new PDFNameTree();\r\n    }\r\n    let data = {\r\n      JS: new String(js),\r\n      S: 'JavaScript'\r\n    };\r\n    this._root.data.Names.data.JavaScript.add(name, data);\r\n  }\r\n\r\n  ref(data) {\r\n    const ref = new PDFReference(this, this._offsets.length + 1, data);\r\n    this._offsets.push(null); // placeholder for this object's offset once it is finalized\r\n    this._waiting++;\r\n    return ref;\r\n  }\r\n\r\n  _read() {}\r\n  // do nothing, but this method is required by node\r\n\r\n  _write(data) {\r\n    if (!Buffer.isBuffer(data)) {\r\n      data = Buffer.from(data + '\\n', 'binary');\r\n    }\r\n\r\n    this.push(data);\r\n    return (this._offset += data.length);\r\n  }\r\n\r\n  addContent(data) {\r\n    this.page.write(data);\r\n    return this;\r\n  }\r\n\r\n  _refEnd(ref) {\r\n    this._offsets[ref.id - 1] = ref.offset;\r\n    if (--this._waiting === 0 && this._ended) {\r\n      this._finalize();\r\n      return (this._ended = false);\r\n    }\r\n  }\r\n\r\n  write(filename, fn) {\r\n    // print a deprecation warning with a stacktrace\r\n    const err = new Error(`\\\r\nPDFDocument#write is deprecated, and will be removed in a future version of PDFKit. \\\r\nPlease pipe the document into a Node stream.\\\r\n`);\r\n\r\n    console.warn(err.stack);\r\n\r\n    this.pipe(fs.createWriteStream(filename));\r\n    this.end();\r\n    return this.once('end', fn);\r\n  }\r\n\r\n  end() {\r\n    this.flushPages();\r\n\r\n    this._info = this.ref();\r\n    for (let key in this.info) {\r\n      let val = this.info[key];\r\n      if (typeof val === 'string') {\r\n        val = new String(val);\r\n      }\r\n\r\n      let entry = this.ref(val);\r\n      entry.end();\r\n\r\n      this._info.data[key] = entry;\r\n    }\r\n\r\n    this._info.end();\r\n\r\n    for (let name in this._fontFamilies) {\r\n      const font = this._fontFamilies[name];\r\n      font.finalize();\r\n    }\r\n\r\n    this.endOutline();\r\n    this.endMarkings();\r\n\r\n    if (this.subset) {\r\n      this.endSubset();\r\n    }\r\n\r\n    this.endMetadata();\r\n\r\n    this._root.end();\r\n    this._root.data.Pages.end();\r\n    this._root.data.Names.end();\r\n    this.endAcroForm();\r\n\r\n    if (this._root.data.ViewerPreferences) {\r\n      this._root.data.ViewerPreferences.end();\r\n    }\r\n\r\n    if (this._security) {\r\n      this._security.end();\r\n    }\r\n\r\n    if (this._waiting === 0) {\r\n      return this._finalize();\r\n    } else {\r\n      return (this._ended = true);\r\n    }\r\n  }\r\n\r\n  _finalize() {\r\n    // generate xref\r\n    const xRefOffset = this._offset;\r\n    this._write('xref');\r\n    this._write(`0 ${this._offsets.length + 1}`);\r\n    this._write('0000000000 65535 f ');\r\n\r\n    for (let offset of this._offsets) {\r\n      offset = `0000000000${offset}`.slice(-10);\r\n      this._write(offset + ' 00000 n ');\r\n    }\r\n\r\n    // trailer\r\n    const trailer = {\r\n      Size: this._offsets.length + 1,\r\n      Root: this._root,\r\n      Info: this._info,\r\n      ID: [this._id, this._id]\r\n    };\r\n    if (this._security) {\r\n      trailer.Encrypt = this._security.dictionary;\r\n    }\r\n\r\n    this._write('trailer');\r\n    this._write(PDFObject.convert(trailer));\r\n\r\n    this._write('startxref');\r\n    this._write(`${xRefOffset}`);\r\n    this._write('%%EOF');\r\n\r\n    // end the stream\r\n    return this.push(null);\r\n  }\r\n\r\n  toString() {\r\n    return '[object PDFDocument]';\r\n  }\r\n}\r\n\r\nconst mixin = methods => {\r\n  Object.assign(PDFDocument.prototype, methods);\r\n};\r\n\r\nmixin(MetadataMixin);\r\nmixin(ColorMixin);\r\nmixin(VectorMixin);\r\nmixin(FontsMixin);\r\nmixin(TextMixin);\r\nmixin(ImagesMixin);\r\nmixin(AnnotationsMixin);\r\nmixin(OutlineMixin);\r\nmixin(MarkingsMixin);\r\nmixin(AcroFormMixin);\r\nmixin(AttachmentsMixin);\r\nmixin(SubsetMixin);\r\n\r\nPDFDocument.LineWrapper = LineWrapper;\r\n\r\nexport default PDFDocument;\r\n","var ___EXPOSE_LOADER_IMPORT___ = require(\"-!../../node_modules/source-map-loader/dist/cjs.js!./pdfMake.js\");\nvar ___EXPOSE_LOADER_GET_GLOBAL_THIS___ = require(\"../../node_modules/expose-loader/dist/runtime/getGlobalThis.js\");\nvar ___EXPOSE_LOADER_GLOBAL_THIS___ = ___EXPOSE_LOADER_GET_GLOBAL_THIS___;\nif (typeof ___EXPOSE_LOADER_GLOBAL_THIS___[\"pdfMake\"] === 'undefined') ___EXPOSE_LOADER_GLOBAL_THIS___[\"pdfMake\"] = ___EXPOSE_LOADER_IMPORT___;\nmodule.exports = ___EXPOSE_LOADER_IMPORT___;\n","// Currently in sync with Node.js lib/assert.js\n// https://github.com/nodejs/node/commit/2a51ae424a513ec9a6aa3466baa0cc1d55dd4f3b\n\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nvar _require = require('./internal/errors'),\n  _require$codes = _require.codes,\n  ERR_AMBIGUOUS_ARGUMENT = _require$codes.ERR_AMBIGUOUS_ARGUMENT,\n  ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n  ERR_INVALID_ARG_VALUE = _require$codes.ERR_INVALID_ARG_VALUE,\n  ERR_INVALID_RETURN_VALUE = _require$codes.ERR_INVALID_RETURN_VALUE,\n  ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS;\nvar AssertionError = require('./internal/assert/assertion_error');\nvar _require2 = require('util/'),\n  inspect = _require2.inspect;\nvar _require$types = require('util/').types,\n  isPromise = _require$types.isPromise,\n  isRegExp = _require$types.isRegExp;\nvar objectAssign = require('object.assign/polyfill')();\nvar objectIs = require('object-is/polyfill')();\nvar RegExpPrototypeTest = require('call-bind/callBound')('RegExp.prototype.test');\nvar errorCache = new Map();\nvar isDeepEqual;\nvar isDeepStrictEqual;\nvar parseExpressionAt;\nvar findNodeAround;\nvar decoder;\nfunction lazyLoadComparison() {\n  var comparison = require('./internal/util/comparisons');\n  isDeepEqual = comparison.isDeepEqual;\n  isDeepStrictEqual = comparison.isDeepStrictEqual;\n}\n\n// Escape control characters but not \\n and \\t to keep the line breaks and\n// indentation intact.\n// eslint-disable-next-line no-control-regex\nvar escapeSequencesRegExp = /[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f]/g;\nvar meta = [\"\\\\u0000\", \"\\\\u0001\", \"\\\\u0002\", \"\\\\u0003\", \"\\\\u0004\", \"\\\\u0005\", \"\\\\u0006\", \"\\\\u0007\", '\\\\b', '', '', \"\\\\u000b\", '\\\\f', '', \"\\\\u000e\", \"\\\\u000f\", \"\\\\u0010\", \"\\\\u0011\", \"\\\\u0012\", \"\\\\u0013\", \"\\\\u0014\", \"\\\\u0015\", \"\\\\u0016\", \"\\\\u0017\", \"\\\\u0018\", \"\\\\u0019\", \"\\\\u001a\", \"\\\\u001b\", \"\\\\u001c\", \"\\\\u001d\", \"\\\\u001e\", \"\\\\u001f\"];\nvar escapeFn = function escapeFn(str) {\n  return meta[str.charCodeAt(0)];\n};\nvar warned = false;\n\n// The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nvar assert = module.exports = ok;\nvar NO_EXCEPTION_SENTINEL = {};\n\n// All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided. All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nfunction innerFail(obj) {\n  if (obj.message instanceof Error) throw obj.message;\n  throw new AssertionError(obj);\n}\nfunction fail(actual, expected, message, operator, stackStartFn) {\n  var argsLen = arguments.length;\n  var internalMessage;\n  if (argsLen === 0) {\n    internalMessage = 'Failed';\n  } else if (argsLen === 1) {\n    message = actual;\n    actual = undefined;\n  } else {\n    if (warned === false) {\n      warned = true;\n      var warn = process.emitWarning ? process.emitWarning : console.warn.bind(console);\n      warn('assert.fail() with more than one argument is deprecated. ' + 'Please use assert.strictEqual() instead or only pass a message.', 'DeprecationWarning', 'DEP0094');\n    }\n    if (argsLen === 2) operator = '!=';\n  }\n  if (message instanceof Error) throw message;\n  var errArgs = {\n    actual: actual,\n    expected: expected,\n    operator: operator === undefined ? 'fail' : operator,\n    stackStartFn: stackStartFn || fail\n  };\n  if (message !== undefined) {\n    errArgs.message = message;\n  }\n  var err = new AssertionError(errArgs);\n  if (internalMessage) {\n    err.message = internalMessage;\n    err.generatedMessage = true;\n  }\n  throw err;\n}\nassert.fail = fail;\n\n// The AssertionError is defined in internal/error.\nassert.AssertionError = AssertionError;\nfunction innerOk(fn, argLen, value, message) {\n  if (!value) {\n    var generatedMessage = false;\n    if (argLen === 0) {\n      generatedMessage = true;\n      message = 'No value argument passed to `assert.ok()`';\n    } else if (message instanceof Error) {\n      throw message;\n    }\n    var err = new AssertionError({\n      actual: value,\n      expected: true,\n      message: message,\n      operator: '==',\n      stackStartFn: fn\n    });\n    err.generatedMessage = generatedMessage;\n    throw err;\n  }\n}\n\n// Pure assertion tests whether a value is truthy, as determined\n// by !!value.\nfunction ok() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n  innerOk.apply(void 0, [ok, args.length].concat(args));\n}\nassert.ok = ok;\n\n// The equality assertion tests shallow, coercive equality with ==.\n/* eslint-disable no-restricted-properties */\nassert.equal = function equal(actual, expected, message) {\n  if (arguments.length < 2) {\n    throw new ERR_MISSING_ARGS('actual', 'expected');\n  }\n  // eslint-disable-next-line eqeqeq\n  if (actual != expected) {\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: '==',\n      stackStartFn: equal\n    });\n  }\n};\n\n// The non-equality assertion tests for whether two objects are not\n// equal with !=.\nassert.notEqual = function notEqual(actual, expected, message) {\n  if (arguments.length < 2) {\n    throw new ERR_MISSING_ARGS('actual', 'expected');\n  }\n  // eslint-disable-next-line eqeqeq\n  if (actual == expected) {\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: '!=',\n      stackStartFn: notEqual\n    });\n  }\n};\n\n// The equivalence assertion tests a deep equality relation.\nassert.deepEqual = function deepEqual(actual, expected, message) {\n  if (arguments.length < 2) {\n    throw new ERR_MISSING_ARGS('actual', 'expected');\n  }\n  if (isDeepEqual === undefined) lazyLoadComparison();\n  if (!isDeepEqual(actual, expected)) {\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: 'deepEqual',\n      stackStartFn: deepEqual\n    });\n  }\n};\n\n// The non-equivalence assertion tests for any deep inequality.\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n  if (arguments.length < 2) {\n    throw new ERR_MISSING_ARGS('actual', 'expected');\n  }\n  if (isDeepEqual === undefined) lazyLoadComparison();\n  if (isDeepEqual(actual, expected)) {\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: 'notDeepEqual',\n      stackStartFn: notDeepEqual\n    });\n  }\n};\n/* eslint-enable */\n\nassert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\n  if (arguments.length < 2) {\n    throw new ERR_MISSING_ARGS('actual', 'expected');\n  }\n  if (isDeepEqual === undefined) lazyLoadComparison();\n  if (!isDeepStrictEqual(actual, expected)) {\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: 'deepStrictEqual',\n      stackStartFn: deepStrictEqual\n    });\n  }\n};\nassert.notDeepStrictEqual = notDeepStrictEqual;\nfunction notDeepStrictEqual(actual, expected, message) {\n  if (arguments.length < 2) {\n    throw new ERR_MISSING_ARGS('actual', 'expected');\n  }\n  if (isDeepEqual === undefined) lazyLoadComparison();\n  if (isDeepStrictEqual(actual, expected)) {\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: 'notDeepStrictEqual',\n      stackStartFn: notDeepStrictEqual\n    });\n  }\n}\nassert.strictEqual = function strictEqual(actual, expected, message) {\n  if (arguments.length < 2) {\n    throw new ERR_MISSING_ARGS('actual', 'expected');\n  }\n  if (!objectIs(actual, expected)) {\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: 'strictEqual',\n      stackStartFn: strictEqual\n    });\n  }\n};\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n  if (arguments.length < 2) {\n    throw new ERR_MISSING_ARGS('actual', 'expected');\n  }\n  if (objectIs(actual, expected)) {\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: 'notStrictEqual',\n      stackStartFn: notStrictEqual\n    });\n  }\n};\nvar Comparison = /*#__PURE__*/_createClass(function Comparison(obj, keys, actual) {\n  var _this = this;\n  _classCallCheck(this, Comparison);\n  keys.forEach(function (key) {\n    if (key in obj) {\n      if (actual !== undefined && typeof actual[key] === 'string' && isRegExp(obj[key]) && RegExpPrototypeTest(obj[key], actual[key])) {\n        _this[key] = actual[key];\n      } else {\n        _this[key] = obj[key];\n      }\n    }\n  });\n});\nfunction compareExceptionKey(actual, expected, key, message, keys, fn) {\n  if (!(key in actual) || !isDeepStrictEqual(actual[key], expected[key])) {\n    if (!message) {\n      // Create placeholder objects to create a nice output.\n      var a = new Comparison(actual, keys);\n      var b = new Comparison(expected, keys, actual);\n      var err = new AssertionError({\n        actual: a,\n        expected: b,\n        operator: 'deepStrictEqual',\n        stackStartFn: fn\n      });\n      err.actual = actual;\n      err.expected = expected;\n      err.operator = fn.name;\n      throw err;\n    }\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: fn.name,\n      stackStartFn: fn\n    });\n  }\n}\nfunction expectedException(actual, expected, msg, fn) {\n  if (typeof expected !== 'function') {\n    if (isRegExp(expected)) return RegExpPrototypeTest(expected, actual);\n    // assert.doesNotThrow does not accept objects.\n    if (arguments.length === 2) {\n      throw new ERR_INVALID_ARG_TYPE('expected', ['Function', 'RegExp'], expected);\n    }\n\n    // Handle primitives properly.\n    if (_typeof(actual) !== 'object' || actual === null) {\n      var err = new AssertionError({\n        actual: actual,\n        expected: expected,\n        message: msg,\n        operator: 'deepStrictEqual',\n        stackStartFn: fn\n      });\n      err.operator = fn.name;\n      throw err;\n    }\n    var keys = Object.keys(expected);\n    // Special handle errors to make sure the name and the message are compared\n    // as well.\n    if (expected instanceof Error) {\n      keys.push('name', 'message');\n    } else if (keys.length === 0) {\n      throw new ERR_INVALID_ARG_VALUE('error', expected, 'may not be an empty object');\n    }\n    if (isDeepEqual === undefined) lazyLoadComparison();\n    keys.forEach(function (key) {\n      if (typeof actual[key] === 'string' && isRegExp(expected[key]) && RegExpPrototypeTest(expected[key], actual[key])) {\n        return;\n      }\n      compareExceptionKey(actual, expected, key, msg, keys, fn);\n    });\n    return true;\n  }\n  // Guard instanceof against arrow functions as they don't have a prototype.\n  if (expected.prototype !== undefined && actual instanceof expected) {\n    return true;\n  }\n  if (Error.isPrototypeOf(expected)) {\n    return false;\n  }\n  return expected.call({}, actual) === true;\n}\nfunction getActual(fn) {\n  if (typeof fn !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('fn', 'Function', fn);\n  }\n  try {\n    fn();\n  } catch (e) {\n    return e;\n  }\n  return NO_EXCEPTION_SENTINEL;\n}\nfunction checkIsPromise(obj) {\n  // Accept native ES6 promises and promises that are implemented in a similar\n  // way. Do not accept thenables that use a function as `obj` and that have no\n  // `catch` handler.\n\n  // TODO: thenables are checked up until they have the correct methods,\n  // but according to documentation, the `then` method should receive\n  // the `fulfill` and `reject` arguments as well or it may be never resolved.\n\n  return isPromise(obj) || obj !== null && _typeof(obj) === 'object' && typeof obj.then === 'function' && typeof obj.catch === 'function';\n}\nfunction waitForActual(promiseFn) {\n  return Promise.resolve().then(function () {\n    var resultPromise;\n    if (typeof promiseFn === 'function') {\n      // Return a rejected promise if `promiseFn` throws synchronously.\n      resultPromise = promiseFn();\n      // Fail in case no promise is returned.\n      if (!checkIsPromise(resultPromise)) {\n        throw new ERR_INVALID_RETURN_VALUE('instance of Promise', 'promiseFn', resultPromise);\n      }\n    } else if (checkIsPromise(promiseFn)) {\n      resultPromise = promiseFn;\n    } else {\n      throw new ERR_INVALID_ARG_TYPE('promiseFn', ['Function', 'Promise'], promiseFn);\n    }\n    return Promise.resolve().then(function () {\n      return resultPromise;\n    }).then(function () {\n      return NO_EXCEPTION_SENTINEL;\n    }).catch(function (e) {\n      return e;\n    });\n  });\n}\nfunction expectsError(stackStartFn, actual, error, message) {\n  if (typeof error === 'string') {\n    if (arguments.length === 4) {\n      throw new ERR_INVALID_ARG_TYPE('error', ['Object', 'Error', 'Function', 'RegExp'], error);\n    }\n    if (_typeof(actual) === 'object' && actual !== null) {\n      if (actual.message === error) {\n        throw new ERR_AMBIGUOUS_ARGUMENT('error/message', \"The error message \\\"\".concat(actual.message, \"\\\" is identical to the message.\"));\n      }\n    } else if (actual === error) {\n      throw new ERR_AMBIGUOUS_ARGUMENT('error/message', \"The error \\\"\".concat(actual, \"\\\" is identical to the message.\"));\n    }\n    message = error;\n    error = undefined;\n  } else if (error != null && _typeof(error) !== 'object' && typeof error !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('error', ['Object', 'Error', 'Function', 'RegExp'], error);\n  }\n  if (actual === NO_EXCEPTION_SENTINEL) {\n    var details = '';\n    if (error && error.name) {\n      details += \" (\".concat(error.name, \")\");\n    }\n    details += message ? \": \".concat(message) : '.';\n    var fnType = stackStartFn.name === 'rejects' ? 'rejection' : 'exception';\n    innerFail({\n      actual: undefined,\n      expected: error,\n      operator: stackStartFn.name,\n      message: \"Missing expected \".concat(fnType).concat(details),\n      stackStartFn: stackStartFn\n    });\n  }\n  if (error && !expectedException(actual, error, message, stackStartFn)) {\n    throw actual;\n  }\n}\nfunction expectsNoError(stackStartFn, actual, error, message) {\n  if (actual === NO_EXCEPTION_SENTINEL) return;\n  if (typeof error === 'string') {\n    message = error;\n    error = undefined;\n  }\n  if (!error || expectedException(actual, error)) {\n    var details = message ? \": \".concat(message) : '.';\n    var fnType = stackStartFn.name === 'doesNotReject' ? 'rejection' : 'exception';\n    innerFail({\n      actual: actual,\n      expected: error,\n      operator: stackStartFn.name,\n      message: \"Got unwanted \".concat(fnType).concat(details, \"\\n\") + \"Actual message: \\\"\".concat(actual && actual.message, \"\\\"\"),\n      stackStartFn: stackStartFn\n    });\n  }\n  throw actual;\n}\nassert.throws = function throws(promiseFn) {\n  for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n    args[_key2 - 1] = arguments[_key2];\n  }\n  expectsError.apply(void 0, [throws, getActual(promiseFn)].concat(args));\n};\nassert.rejects = function rejects(promiseFn) {\n  for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n    args[_key3 - 1] = arguments[_key3];\n  }\n  return waitForActual(promiseFn).then(function (result) {\n    return expectsError.apply(void 0, [rejects, result].concat(args));\n  });\n};\nassert.doesNotThrow = function doesNotThrow(fn) {\n  for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n    args[_key4 - 1] = arguments[_key4];\n  }\n  expectsNoError.apply(void 0, [doesNotThrow, getActual(fn)].concat(args));\n};\nassert.doesNotReject = function doesNotReject(fn) {\n  for (var _len5 = arguments.length, args = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n    args[_key5 - 1] = arguments[_key5];\n  }\n  return waitForActual(fn).then(function (result) {\n    return expectsNoError.apply(void 0, [doesNotReject, result].concat(args));\n  });\n};\nassert.ifError = function ifError(err) {\n  if (err !== null && err !== undefined) {\n    var message = 'ifError got unwanted exception: ';\n    if (_typeof(err) === 'object' && typeof err.message === 'string') {\n      if (err.message.length === 0 && err.constructor) {\n        message += err.constructor.name;\n      } else {\n        message += err.message;\n      }\n    } else {\n      message += inspect(err);\n    }\n    var newErr = new AssertionError({\n      actual: err,\n      expected: null,\n      operator: 'ifError',\n      message: message,\n      stackStartFn: ifError\n    });\n\n    // Make sure we actually have a stack trace!\n    var origStack = err.stack;\n    if (typeof origStack === 'string') {\n      // This will remove any duplicated frames from the error frames taken\n      // from within `ifError` and add the original error frames to the newly\n      // created ones.\n      var tmp2 = origStack.split('\\n');\n      tmp2.shift();\n      // Filter all frames existing in err.stack.\n      var tmp1 = newErr.stack.split('\\n');\n      for (var i = 0; i < tmp2.length; i++) {\n        // Find the first occurrence of the frame.\n        var pos = tmp1.indexOf(tmp2[i]);\n        if (pos !== -1) {\n          // Only keep new frames.\n          tmp1 = tmp1.slice(0, pos);\n          break;\n        }\n      }\n      newErr.stack = \"\".concat(tmp1.join('\\n'), \"\\n\").concat(tmp2.join('\\n'));\n    }\n    throw newErr;\n  }\n};\n\n// Currently in sync with Node.js lib/assert.js\n// https://github.com/nodejs/node/commit/2a871df3dfb8ea663ef5e1f8f62701ec51384ecb\nfunction internalMatch(string, regexp, message, fn, fnName) {\n  if (!isRegExp(regexp)) {\n    throw new ERR_INVALID_ARG_TYPE('regexp', 'RegExp', regexp);\n  }\n  var match = fnName === 'match';\n  if (typeof string !== 'string' || RegExpPrototypeTest(regexp, string) !== match) {\n    if (message instanceof Error) {\n      throw message;\n    }\n    var generatedMessage = !message;\n\n    // 'The input was expected to not match the regular expression ' +\n    message = message || (typeof string !== 'string' ? 'The \"string\" argument must be of type string. Received type ' + \"\".concat(_typeof(string), \" (\").concat(inspect(string), \")\") : (match ? 'The input did not match the regular expression ' : 'The input was expected to not match the regular expression ') + \"\".concat(inspect(regexp), \". Input:\\n\\n\").concat(inspect(string), \"\\n\"));\n    var err = new AssertionError({\n      actual: string,\n      expected: regexp,\n      message: message,\n      operator: fnName,\n      stackStartFn: fn\n    });\n    err.generatedMessage = generatedMessage;\n    throw err;\n  }\n}\nassert.match = function match(string, regexp, message) {\n  internalMatch(string, regexp, message, match, 'match');\n};\nassert.doesNotMatch = function doesNotMatch(string, regexp, message) {\n  internalMatch(string, regexp, message, doesNotMatch, 'doesNotMatch');\n};\n\n// Expose a strict only variant of assert\nfunction strict() {\n  for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n    args[_key6] = arguments[_key6];\n  }\n  innerOk.apply(void 0, [strict, args.length].concat(args));\n}\nassert.strict = objectAssign(strict, assert, {\n  equal: assert.strictEqual,\n  deepEqual: assert.deepStrictEqual,\n  notEqual: assert.notStrictEqual,\n  notDeepEqual: assert.notDeepStrictEqual\n});\nassert.strict.strict = assert.strict;","// Currently in sync with Node.js lib/internal/assert/assertion_error.js\n// https://github.com/nodejs/node/commit/0817840f775032169ddd70c85ac059f18ffcc81c\n\n'use strict';\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct.bind(); } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar _require = require('util/'),\n  inspect = _require.inspect;\nvar _require2 = require('../errors'),\n  ERR_INVALID_ARG_TYPE = _require2.codes.ERR_INVALID_ARG_TYPE;\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\nfunction endsWith(str, search, this_len) {\n  if (this_len === undefined || this_len > str.length) {\n    this_len = str.length;\n  }\n  return str.substring(this_len - search.length, this_len) === search;\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat\nfunction repeat(str, count) {\n  count = Math.floor(count);\n  if (str.length == 0 || count == 0) return '';\n  var maxCount = str.length * count;\n  count = Math.floor(Math.log(count) / Math.log(2));\n  while (count) {\n    str += str;\n    count--;\n  }\n  str += str.substring(0, maxCount - str.length);\n  return str;\n}\nvar blue = '';\nvar green = '';\nvar red = '';\nvar white = '';\nvar kReadableOperator = {\n  deepStrictEqual: 'Expected values to be strictly deep-equal:',\n  strictEqual: 'Expected values to be strictly equal:',\n  strictEqualObject: 'Expected \"actual\" to be reference-equal to \"expected\":',\n  deepEqual: 'Expected values to be loosely deep-equal:',\n  equal: 'Expected values to be loosely equal:',\n  notDeepStrictEqual: 'Expected \"actual\" not to be strictly deep-equal to:',\n  notStrictEqual: 'Expected \"actual\" to be strictly unequal to:',\n  notStrictEqualObject: 'Expected \"actual\" not to be reference-equal to \"expected\":',\n  notDeepEqual: 'Expected \"actual\" not to be loosely deep-equal to:',\n  notEqual: 'Expected \"actual\" to be loosely unequal to:',\n  notIdentical: 'Values identical but not reference-equal:'\n};\n\n// Comparing short primitives should just show === / !== instead of using the\n// diff.\nvar kMaxShortLength = 10;\nfunction copyError(source) {\n  var keys = Object.keys(source);\n  var target = Object.create(Object.getPrototypeOf(source));\n  keys.forEach(function (key) {\n    target[key] = source[key];\n  });\n  Object.defineProperty(target, 'message', {\n    value: source.message\n  });\n  return target;\n}\nfunction inspectValue(val) {\n  // The util.inspect default values could be changed. This makes sure the\n  // error messages contain the necessary information nevertheless.\n  return inspect(val, {\n    compact: false,\n    customInspect: false,\n    depth: 1000,\n    maxArrayLength: Infinity,\n    // Assert compares only enumerable properties (with a few exceptions).\n    showHidden: false,\n    // Having a long line as error is better than wrapping the line for\n    // comparison for now.\n    // TODO(BridgeAR): `breakLength` should be limited as soon as soon as we\n    // have meta information about the inspected properties (i.e., know where\n    // in what line the property starts and ends).\n    breakLength: Infinity,\n    // Assert does not detect proxies currently.\n    showProxy: false,\n    sorted: true,\n    // Inspect getters as we also check them when comparing entries.\n    getters: true\n  });\n}\nfunction createErrDiff(actual, expected, operator) {\n  var other = '';\n  var res = '';\n  var lastPos = 0;\n  var end = '';\n  var skipped = false;\n  var actualInspected = inspectValue(actual);\n  var actualLines = actualInspected.split('\\n');\n  var expectedLines = inspectValue(expected).split('\\n');\n  var i = 0;\n  var indicator = '';\n\n  // In case both values are objects explicitly mark them as not reference equal\n  // for the `strictEqual` operator.\n  if (operator === 'strictEqual' && _typeof(actual) === 'object' && _typeof(expected) === 'object' && actual !== null && expected !== null) {\n    operator = 'strictEqualObject';\n  }\n\n  // If \"actual\" and \"expected\" fit on a single line and they are not strictly\n  // equal, check further special handling.\n  if (actualLines.length === 1 && expectedLines.length === 1 && actualLines[0] !== expectedLines[0]) {\n    var inputLength = actualLines[0].length + expectedLines[0].length;\n    // If the character length of \"actual\" and \"expected\" together is less than\n    // kMaxShortLength and if neither is an object and at least one of them is\n    // not `zero`, use the strict equal comparison to visualize the output.\n    if (inputLength <= kMaxShortLength) {\n      if ((_typeof(actual) !== 'object' || actual === null) && (_typeof(expected) !== 'object' || expected === null) && (actual !== 0 || expected !== 0)) {\n        // -0 === +0\n        return \"\".concat(kReadableOperator[operator], \"\\n\\n\") + \"\".concat(actualLines[0], \" !== \").concat(expectedLines[0], \"\\n\");\n      }\n    } else if (operator !== 'strictEqualObject') {\n      // If the stderr is a tty and the input length is lower than the current\n      // columns per line, add a mismatch indicator below the output. If it is\n      // not a tty, use a default value of 80 characters.\n      var maxLength = process.stderr && process.stderr.isTTY ? process.stderr.columns : 80;\n      if (inputLength < maxLength) {\n        while (actualLines[0][i] === expectedLines[0][i]) {\n          i++;\n        }\n        // Ignore the first characters.\n        if (i > 2) {\n          // Add position indicator for the first mismatch in case it is a\n          // single line and the input length is less than the column length.\n          indicator = \"\\n  \".concat(repeat(' ', i), \"^\");\n          i = 0;\n        }\n      }\n    }\n  }\n\n  // Remove all ending lines that match (this optimizes the output for\n  // readability by reducing the number of total changed lines).\n  var a = actualLines[actualLines.length - 1];\n  var b = expectedLines[expectedLines.length - 1];\n  while (a === b) {\n    if (i++ < 2) {\n      end = \"\\n  \".concat(a).concat(end);\n    } else {\n      other = a;\n    }\n    actualLines.pop();\n    expectedLines.pop();\n    if (actualLines.length === 0 || expectedLines.length === 0) break;\n    a = actualLines[actualLines.length - 1];\n    b = expectedLines[expectedLines.length - 1];\n  }\n  var maxLines = Math.max(actualLines.length, expectedLines.length);\n  // Strict equal with identical objects that are not identical by reference.\n  // E.g., assert.deepStrictEqual({ a: Symbol() }, { a: Symbol() })\n  if (maxLines === 0) {\n    // We have to get the result again. The lines were all removed before.\n    var _actualLines = actualInspected.split('\\n');\n\n    // Only remove lines in case it makes sense to collapse those.\n    // TODO: Accept env to always show the full error.\n    if (_actualLines.length > 30) {\n      _actualLines[26] = \"\".concat(blue, \"...\").concat(white);\n      while (_actualLines.length > 27) {\n        _actualLines.pop();\n      }\n    }\n    return \"\".concat(kReadableOperator.notIdentical, \"\\n\\n\").concat(_actualLines.join('\\n'), \"\\n\");\n  }\n  if (i > 3) {\n    end = \"\\n\".concat(blue, \"...\").concat(white).concat(end);\n    skipped = true;\n  }\n  if (other !== '') {\n    end = \"\\n  \".concat(other).concat(end);\n    other = '';\n  }\n  var printedLines = 0;\n  var msg = kReadableOperator[operator] + \"\\n\".concat(green, \"+ actual\").concat(white, \" \").concat(red, \"- expected\").concat(white);\n  var skippedMsg = \" \".concat(blue, \"...\").concat(white, \" Lines skipped\");\n  for (i = 0; i < maxLines; i++) {\n    // Only extra expected lines exist\n    var cur = i - lastPos;\n    if (actualLines.length < i + 1) {\n      // If the last diverging line is more than one line above and the\n      // current line is at least line three, add some of the former lines and\n      // also add dots to indicate skipped entries.\n      if (cur > 1 && i > 2) {\n        if (cur > 4) {\n          res += \"\\n\".concat(blue, \"...\").concat(white);\n          skipped = true;\n        } else if (cur > 3) {\n          res += \"\\n  \".concat(expectedLines[i - 2]);\n          printedLines++;\n        }\n        res += \"\\n  \".concat(expectedLines[i - 1]);\n        printedLines++;\n      }\n      // Mark the current line as the last diverging one.\n      lastPos = i;\n      // Add the expected line to the cache.\n      other += \"\\n\".concat(red, \"-\").concat(white, \" \").concat(expectedLines[i]);\n      printedLines++;\n      // Only extra actual lines exist\n    } else if (expectedLines.length < i + 1) {\n      // If the last diverging line is more than one line above and the\n      // current line is at least line three, add some of the former lines and\n      // also add dots to indicate skipped entries.\n      if (cur > 1 && i > 2) {\n        if (cur > 4) {\n          res += \"\\n\".concat(blue, \"...\").concat(white);\n          skipped = true;\n        } else if (cur > 3) {\n          res += \"\\n  \".concat(actualLines[i - 2]);\n          printedLines++;\n        }\n        res += \"\\n  \".concat(actualLines[i - 1]);\n        printedLines++;\n      }\n      // Mark the current line as the last diverging one.\n      lastPos = i;\n      // Add the actual line to the result.\n      res += \"\\n\".concat(green, \"+\").concat(white, \" \").concat(actualLines[i]);\n      printedLines++;\n      // Lines diverge\n    } else {\n      var expectedLine = expectedLines[i];\n      var actualLine = actualLines[i];\n      // If the lines diverge, specifically check for lines that only diverge by\n      // a trailing comma. In that case it is actually identical and we should\n      // mark it as such.\n      var divergingLines = actualLine !== expectedLine && (!endsWith(actualLine, ',') || actualLine.slice(0, -1) !== expectedLine);\n      // If the expected line has a trailing comma but is otherwise identical,\n      // add a comma at the end of the actual line. Otherwise the output could\n      // look weird as in:\n      //\n      //   [\n      //     1         // No comma at the end!\n      // +   2\n      //   ]\n      //\n      if (divergingLines && endsWith(expectedLine, ',') && expectedLine.slice(0, -1) === actualLine) {\n        divergingLines = false;\n        actualLine += ',';\n      }\n      if (divergingLines) {\n        // If the last diverging line is more than one line above and the\n        // current line is at least line three, add some of the former lines and\n        // also add dots to indicate skipped entries.\n        if (cur > 1 && i > 2) {\n          if (cur > 4) {\n            res += \"\\n\".concat(blue, \"...\").concat(white);\n            skipped = true;\n          } else if (cur > 3) {\n            res += \"\\n  \".concat(actualLines[i - 2]);\n            printedLines++;\n          }\n          res += \"\\n  \".concat(actualLines[i - 1]);\n          printedLines++;\n        }\n        // Mark the current line as the last diverging one.\n        lastPos = i;\n        // Add the actual line to the result and cache the expected diverging\n        // line so consecutive diverging lines show up as +++--- and not +-+-+-.\n        res += \"\\n\".concat(green, \"+\").concat(white, \" \").concat(actualLine);\n        other += \"\\n\".concat(red, \"-\").concat(white, \" \").concat(expectedLine);\n        printedLines += 2;\n        // Lines are identical\n      } else {\n        // Add all cached information to the result before adding other things\n        // and reset the cache.\n        res += other;\n        other = '';\n        // If the last diverging line is exactly one line above or if it is the\n        // very first line, add the line to the result.\n        if (cur === 1 || i === 0) {\n          res += \"\\n  \".concat(actualLine);\n          printedLines++;\n        }\n      }\n    }\n    // Inspected object to big (Show ~20 rows max)\n    if (printedLines > 20 && i < maxLines - 2) {\n      return \"\".concat(msg).concat(skippedMsg, \"\\n\").concat(res, \"\\n\").concat(blue, \"...\").concat(white).concat(other, \"\\n\") + \"\".concat(blue, \"...\").concat(white);\n    }\n  }\n  return \"\".concat(msg).concat(skipped ? skippedMsg : '', \"\\n\").concat(res).concat(other).concat(end).concat(indicator);\n}\nvar AssertionError = /*#__PURE__*/function (_Error, _inspect$custom) {\n  _inherits(AssertionError, _Error);\n  var _super = _createSuper(AssertionError);\n  function AssertionError(options) {\n    var _this;\n    _classCallCheck(this, AssertionError);\n    if (_typeof(options) !== 'object' || options === null) {\n      throw new ERR_INVALID_ARG_TYPE('options', 'Object', options);\n    }\n    var message = options.message,\n      operator = options.operator,\n      stackStartFn = options.stackStartFn;\n    var actual = options.actual,\n      expected = options.expected;\n    var limit = Error.stackTraceLimit;\n    Error.stackTraceLimit = 0;\n    if (message != null) {\n      _this = _super.call(this, String(message));\n    } else {\n      if (process.stderr && process.stderr.isTTY) {\n        // Reset on each call to make sure we handle dynamically set environment\n        // variables correct.\n        if (process.stderr && process.stderr.getColorDepth && process.stderr.getColorDepth() !== 1) {\n          blue = \"\\x1B[34m\";\n          green = \"\\x1B[32m\";\n          white = \"\\x1B[39m\";\n          red = \"\\x1B[31m\";\n        } else {\n          blue = '';\n          green = '';\n          white = '';\n          red = '';\n        }\n      }\n      // Prevent the error stack from being visible by duplicating the error\n      // in a very close way to the original in case both sides are actually\n      // instances of Error.\n      if (_typeof(actual) === 'object' && actual !== null && _typeof(expected) === 'object' && expected !== null && 'stack' in actual && actual instanceof Error && 'stack' in expected && expected instanceof Error) {\n        actual = copyError(actual);\n        expected = copyError(expected);\n      }\n      if (operator === 'deepStrictEqual' || operator === 'strictEqual') {\n        _this = _super.call(this, createErrDiff(actual, expected, operator));\n      } else if (operator === 'notDeepStrictEqual' || operator === 'notStrictEqual') {\n        // In case the objects are equal but the operator requires unequal, show\n        // the first object and say A equals B\n        var base = kReadableOperator[operator];\n        var res = inspectValue(actual).split('\\n');\n\n        // In case \"actual\" is an object, it should not be reference equal.\n        if (operator === 'notStrictEqual' && _typeof(actual) === 'object' && actual !== null) {\n          base = kReadableOperator.notStrictEqualObject;\n        }\n\n        // Only remove lines in case it makes sense to collapse those.\n        // TODO: Accept env to always show the full error.\n        if (res.length > 30) {\n          res[26] = \"\".concat(blue, \"...\").concat(white);\n          while (res.length > 27) {\n            res.pop();\n          }\n        }\n\n        // Only print a single input.\n        if (res.length === 1) {\n          _this = _super.call(this, \"\".concat(base, \" \").concat(res[0]));\n        } else {\n          _this = _super.call(this, \"\".concat(base, \"\\n\\n\").concat(res.join('\\n'), \"\\n\"));\n        }\n      } else {\n        var _res = inspectValue(actual);\n        var other = '';\n        var knownOperators = kReadableOperator[operator];\n        if (operator === 'notDeepEqual' || operator === 'notEqual') {\n          _res = \"\".concat(kReadableOperator[operator], \"\\n\\n\").concat(_res);\n          if (_res.length > 1024) {\n            _res = \"\".concat(_res.slice(0, 1021), \"...\");\n          }\n        } else {\n          other = \"\".concat(inspectValue(expected));\n          if (_res.length > 512) {\n            _res = \"\".concat(_res.slice(0, 509), \"...\");\n          }\n          if (other.length > 512) {\n            other = \"\".concat(other.slice(0, 509), \"...\");\n          }\n          if (operator === 'deepEqual' || operator === 'equal') {\n            _res = \"\".concat(knownOperators, \"\\n\\n\").concat(_res, \"\\n\\nshould equal\\n\\n\");\n          } else {\n            other = \" \".concat(operator, \" \").concat(other);\n          }\n        }\n        _this = _super.call(this, \"\".concat(_res).concat(other));\n      }\n    }\n    Error.stackTraceLimit = limit;\n    _this.generatedMessage = !message;\n    Object.defineProperty(_assertThisInitialized(_this), 'name', {\n      value: 'AssertionError [ERR_ASSERTION]',\n      enumerable: false,\n      writable: true,\n      configurable: true\n    });\n    _this.code = 'ERR_ASSERTION';\n    _this.actual = actual;\n    _this.expected = expected;\n    _this.operator = operator;\n    if (Error.captureStackTrace) {\n      // eslint-disable-next-line no-restricted-syntax\n      Error.captureStackTrace(_assertThisInitialized(_this), stackStartFn);\n    }\n    // Create error message including the error code in the name.\n    _this.stack;\n    // Reset the name.\n    _this.name = 'AssertionError';\n    return _possibleConstructorReturn(_this);\n  }\n  _createClass(AssertionError, [{\n    key: \"toString\",\n    value: function toString() {\n      return \"\".concat(this.name, \" [\").concat(this.code, \"]: \").concat(this.message);\n    }\n  }, {\n    key: _inspect$custom,\n    value: function value(recurseTimes, ctx) {\n      // This limits the `actual` and `expected` property default inspection to\n      // the minimum depth. Otherwise those values would be too verbose compared\n      // to the actual error message which contains a combined view of these two\n      // input values.\n      return inspect(this, _objectSpread(_objectSpread({}, ctx), {}, {\n        customInspect: false,\n        depth: 0\n      }));\n    }\n  }]);\n  return AssertionError;\n}( /*#__PURE__*/_wrapNativeSuper(Error), inspect.custom);\nmodule.exports = AssertionError;","// Currently in sync with Node.js lib/internal/errors.js\n// https://github.com/nodejs/node/commit/3b044962c48fe313905877a96b5d0894a5404f6f\n\n/* eslint node-core/documented-errors: \"error\" */\n/* eslint node-core/alphabetize-errors: \"error\" */\n/* eslint node-core/prefer-util-format-errors: \"error\" */\n\n'use strict';\n\n// The whole point behind this internal module is to allow Node.js to no\n// longer be forced to treat every error message change as a semver-major\n// change. The NodeError classes here all expose a `code` property whose\n// value statically and permanently identifies the error. While the error\n// message may change, the code should not.\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nvar codes = {};\n\n// Lazy loaded\nvar assert;\nvar util;\nfunction createErrorType(code, message, Base) {\n  if (!Base) {\n    Base = Error;\n  }\n  function getMessage(arg1, arg2, arg3) {\n    if (typeof message === 'string') {\n      return message;\n    } else {\n      return message(arg1, arg2, arg3);\n    }\n  }\n  var NodeError = /*#__PURE__*/function (_Base) {\n    _inherits(NodeError, _Base);\n    var _super = _createSuper(NodeError);\n    function NodeError(arg1, arg2, arg3) {\n      var _this;\n      _classCallCheck(this, NodeError);\n      _this = _super.call(this, getMessage(arg1, arg2, arg3));\n      _this.code = code;\n      return _this;\n    }\n    return _createClass(NodeError);\n  }(Base);\n  codes[code] = NodeError;\n}\n\n// https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\nfunction oneOf(expected, thing) {\n  if (Array.isArray(expected)) {\n    var len = expected.length;\n    expected = expected.map(function (i) {\n      return String(i);\n    });\n    if (len > 2) {\n      return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n    } else if (len === 2) {\n      return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n    } else {\n      return \"of \".concat(thing, \" \").concat(expected[0]);\n    }\n  } else {\n    return \"of \".concat(thing, \" \").concat(String(expected));\n  }\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\nfunction startsWith(str, search, pos) {\n  return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\nfunction endsWith(str, search, this_len) {\n  if (this_len === undefined || this_len > str.length) {\n    this_len = str.length;\n  }\n  return str.substring(this_len - search.length, this_len) === search;\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\nfunction includes(str, search, start) {\n  if (typeof start !== 'number') {\n    start = 0;\n  }\n  if (start + search.length > str.length) {\n    return false;\n  } else {\n    return str.indexOf(search, start) !== -1;\n  }\n}\ncreateErrorType('ERR_AMBIGUOUS_ARGUMENT', 'The \"%s\" argument is ambiguous. %s', TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n  if (assert === undefined) assert = require('../assert');\n  assert(typeof name === 'string', \"'name' must be a string\");\n\n  // determiner: 'must be' or 'must not be'\n  var determiner;\n  if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n    determiner = 'must not be';\n    expected = expected.replace(/^not /, '');\n  } else {\n    determiner = 'must be';\n  }\n  var msg;\n  if (endsWith(name, ' argument')) {\n    // For cases like 'first argument'\n    msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  } else {\n    var type = includes(name, '.') ? 'property' : 'argument';\n    msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  }\n\n  // TODO(BridgeAR): Improve the output by showing `null` and similar.\n  msg += \". Received type \".concat(_typeof(actual));\n  return msg;\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_VALUE', function (name, value) {\n  var reason = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'is invalid';\n  if (util === undefined) util = require('util/');\n  var inspected = util.inspect(value);\n  if (inspected.length > 128) {\n    inspected = \"\".concat(inspected.slice(0, 128), \"...\");\n  }\n  return \"The argument '\".concat(name, \"' \").concat(reason, \". Received \").concat(inspected);\n}, TypeError, RangeError);\ncreateErrorType('ERR_INVALID_RETURN_VALUE', function (input, name, value) {\n  var type;\n  if (value && value.constructor && value.constructor.name) {\n    type = \"instance of \".concat(value.constructor.name);\n  } else {\n    type = \"type \".concat(_typeof(value));\n  }\n  return \"Expected \".concat(input, \" to be returned from the \\\"\").concat(name, \"\\\"\") + \" function but got \".concat(type, \".\");\n}, TypeError);\ncreateErrorType('ERR_MISSING_ARGS', function () {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n  if (assert === undefined) assert = require('../assert');\n  assert(args.length > 0, 'At least one arg needs to be specified');\n  var msg = 'The ';\n  var len = args.length;\n  args = args.map(function (a) {\n    return \"\\\"\".concat(a, \"\\\"\");\n  });\n  switch (len) {\n    case 1:\n      msg += \"\".concat(args[0], \" argument\");\n      break;\n    case 2:\n      msg += \"\".concat(args[0], \" and \").concat(args[1], \" arguments\");\n      break;\n    default:\n      msg += args.slice(0, len - 1).join(', ');\n      msg += \", and \".concat(args[len - 1], \" arguments\");\n      break;\n  }\n  return \"\".concat(msg, \" must be specified\");\n}, TypeError);\nmodule.exports.codes = codes;","// Currently in sync with Node.js lib/internal/util/comparisons.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n\n'use strict';\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar regexFlagsSupported = /a/g.flags !== undefined;\nvar arrayFromSet = function arrayFromSet(set) {\n  var array = [];\n  set.forEach(function (value) {\n    return array.push(value);\n  });\n  return array;\n};\nvar arrayFromMap = function arrayFromMap(map) {\n  var array = [];\n  map.forEach(function (value, key) {\n    return array.push([key, value]);\n  });\n  return array;\n};\nvar objectIs = Object.is ? Object.is : require('object-is');\nvar objectGetOwnPropertySymbols = Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols : function () {\n  return [];\n};\nvar numberIsNaN = Number.isNaN ? Number.isNaN : require('is-nan');\nfunction uncurryThis(f) {\n  return f.call.bind(f);\n}\nvar hasOwnProperty = uncurryThis(Object.prototype.hasOwnProperty);\nvar propertyIsEnumerable = uncurryThis(Object.prototype.propertyIsEnumerable);\nvar objectToString = uncurryThis(Object.prototype.toString);\nvar _require$types = require('util/').types,\n  isAnyArrayBuffer = _require$types.isAnyArrayBuffer,\n  isArrayBufferView = _require$types.isArrayBufferView,\n  isDate = _require$types.isDate,\n  isMap = _require$types.isMap,\n  isRegExp = _require$types.isRegExp,\n  isSet = _require$types.isSet,\n  isNativeError = _require$types.isNativeError,\n  isBoxedPrimitive = _require$types.isBoxedPrimitive,\n  isNumberObject = _require$types.isNumberObject,\n  isStringObject = _require$types.isStringObject,\n  isBooleanObject = _require$types.isBooleanObject,\n  isBigIntObject = _require$types.isBigIntObject,\n  isSymbolObject = _require$types.isSymbolObject,\n  isFloat32Array = _require$types.isFloat32Array,\n  isFloat64Array = _require$types.isFloat64Array;\nfunction isNonIndex(key) {\n  if (key.length === 0 || key.length > 10) return true;\n  for (var i = 0; i < key.length; i++) {\n    var code = key.charCodeAt(i);\n    if (code < 48 || code > 57) return true;\n  }\n  // The maximum size for an array is 2 ** 32 -1.\n  return key.length === 10 && key >= Math.pow(2, 32);\n}\nfunction getOwnNonIndexProperties(value) {\n  return Object.keys(value).filter(isNonIndex).concat(objectGetOwnPropertySymbols(value).filter(Object.prototype.propertyIsEnumerable.bind(value)));\n}\n\n// Taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js\n// original notice:\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license  MIT\n */\nfunction compare(a, b) {\n  if (a === b) {\n    return 0;\n  }\n  var x = a.length;\n  var y = b.length;\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i];\n      y = b[i];\n      break;\n    }\n  }\n  if (x < y) {\n    return -1;\n  }\n  if (y < x) {\n    return 1;\n  }\n  return 0;\n}\nvar ONLY_ENUMERABLE = undefined;\nvar kStrict = true;\nvar kLoose = false;\nvar kNoIterator = 0;\nvar kIsArray = 1;\nvar kIsSet = 2;\nvar kIsMap = 3;\n\n// Check if they have the same source and flags\nfunction areSimilarRegExps(a, b) {\n  return regexFlagsSupported ? a.source === b.source && a.flags === b.flags : RegExp.prototype.toString.call(a) === RegExp.prototype.toString.call(b);\n}\nfunction areSimilarFloatArrays(a, b) {\n  if (a.byteLength !== b.byteLength) {\n    return false;\n  }\n  for (var offset = 0; offset < a.byteLength; offset++) {\n    if (a[offset] !== b[offset]) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction areSimilarTypedArrays(a, b) {\n  if (a.byteLength !== b.byteLength) {\n    return false;\n  }\n  return compare(new Uint8Array(a.buffer, a.byteOffset, a.byteLength), new Uint8Array(b.buffer, b.byteOffset, b.byteLength)) === 0;\n}\nfunction areEqualArrayBuffers(buf1, buf2) {\n  return buf1.byteLength === buf2.byteLength && compare(new Uint8Array(buf1), new Uint8Array(buf2)) === 0;\n}\nfunction isEqualBoxedPrimitive(val1, val2) {\n  if (isNumberObject(val1)) {\n    return isNumberObject(val2) && objectIs(Number.prototype.valueOf.call(val1), Number.prototype.valueOf.call(val2));\n  }\n  if (isStringObject(val1)) {\n    return isStringObject(val2) && String.prototype.valueOf.call(val1) === String.prototype.valueOf.call(val2);\n  }\n  if (isBooleanObject(val1)) {\n    return isBooleanObject(val2) && Boolean.prototype.valueOf.call(val1) === Boolean.prototype.valueOf.call(val2);\n  }\n  if (isBigIntObject(val1)) {\n    return isBigIntObject(val2) && BigInt.prototype.valueOf.call(val1) === BigInt.prototype.valueOf.call(val2);\n  }\n  return isSymbolObject(val2) && Symbol.prototype.valueOf.call(val1) === Symbol.prototype.valueOf.call(val2);\n}\n\n// Notes: Type tags are historical [[Class]] properties that can be set by\n// FunctionTemplate::SetClassName() in C++ or Symbol.toStringTag in JS\n// and retrieved using Object.prototype.toString.call(obj) in JS\n// See https://tc39.github.io/ecma262/#sec-object.prototype.tostring\n// for a list of tags pre-defined in the spec.\n// There are some unspecified tags in the wild too (e.g. typed array tags).\n// Since tags can be altered, they only serve fast failures\n//\n// Typed arrays and buffers are checked by comparing the content in their\n// underlying ArrayBuffer. This optimization requires that it's\n// reasonable to interpret their underlying memory in the same way,\n// which is checked by comparing their type tags.\n// (e.g. a Uint8Array and a Uint16Array with the same memory content\n// could still be different because they will be interpreted differently).\n//\n// For strict comparison, objects should have\n// a) The same built-in type tags\n// b) The same prototypes.\n\nfunction innerDeepEqual(val1, val2, strict, memos) {\n  // All identical values are equivalent, as determined by ===.\n  if (val1 === val2) {\n    if (val1 !== 0) return true;\n    return strict ? objectIs(val1, val2) : true;\n  }\n\n  // Check more closely if val1 and val2 are equal.\n  if (strict) {\n    if (_typeof(val1) !== 'object') {\n      return typeof val1 === 'number' && numberIsNaN(val1) && numberIsNaN(val2);\n    }\n    if (_typeof(val2) !== 'object' || val1 === null || val2 === null) {\n      return false;\n    }\n    if (Object.getPrototypeOf(val1) !== Object.getPrototypeOf(val2)) {\n      return false;\n    }\n  } else {\n    if (val1 === null || _typeof(val1) !== 'object') {\n      if (val2 === null || _typeof(val2) !== 'object') {\n        // eslint-disable-next-line eqeqeq\n        return val1 == val2;\n      }\n      return false;\n    }\n    if (val2 === null || _typeof(val2) !== 'object') {\n      return false;\n    }\n  }\n  var val1Tag = objectToString(val1);\n  var val2Tag = objectToString(val2);\n  if (val1Tag !== val2Tag) {\n    return false;\n  }\n  if (Array.isArray(val1)) {\n    // Check for sparse arrays and general fast path\n    if (val1.length !== val2.length) {\n      return false;\n    }\n    var keys1 = getOwnNonIndexProperties(val1, ONLY_ENUMERABLE);\n    var keys2 = getOwnNonIndexProperties(val2, ONLY_ENUMERABLE);\n    if (keys1.length !== keys2.length) {\n      return false;\n    }\n    return keyCheck(val1, val2, strict, memos, kIsArray, keys1);\n  }\n  // [browserify] This triggers on certain types in IE (Map/Set) so we don't\n  // wan't to early return out of the rest of the checks. However we can check\n  // if the second value is one of these values and the first isn't.\n  if (val1Tag === '[object Object]') {\n    // return keyCheck(val1, val2, strict, memos, kNoIterator);\n    if (!isMap(val1) && isMap(val2) || !isSet(val1) && isSet(val2)) {\n      return false;\n    }\n  }\n  if (isDate(val1)) {\n    if (!isDate(val2) || Date.prototype.getTime.call(val1) !== Date.prototype.getTime.call(val2)) {\n      return false;\n    }\n  } else if (isRegExp(val1)) {\n    if (!isRegExp(val2) || !areSimilarRegExps(val1, val2)) {\n      return false;\n    }\n  } else if (isNativeError(val1) || val1 instanceof Error) {\n    // Do not compare the stack as it might differ even though the error itself\n    // is otherwise identical.\n    if (val1.message !== val2.message || val1.name !== val2.name) {\n      return false;\n    }\n  } else if (isArrayBufferView(val1)) {\n    if (!strict && (isFloat32Array(val1) || isFloat64Array(val1))) {\n      if (!areSimilarFloatArrays(val1, val2)) {\n        return false;\n      }\n    } else if (!areSimilarTypedArrays(val1, val2)) {\n      return false;\n    }\n    // Buffer.compare returns true, so val1.length === val2.length. If they both\n    // only contain numeric keys, we don't need to exam further than checking\n    // the symbols.\n    var _keys = getOwnNonIndexProperties(val1, ONLY_ENUMERABLE);\n    var _keys2 = getOwnNonIndexProperties(val2, ONLY_ENUMERABLE);\n    if (_keys.length !== _keys2.length) {\n      return false;\n    }\n    return keyCheck(val1, val2, strict, memos, kNoIterator, _keys);\n  } else if (isSet(val1)) {\n    if (!isSet(val2) || val1.size !== val2.size) {\n      return false;\n    }\n    return keyCheck(val1, val2, strict, memos, kIsSet);\n  } else if (isMap(val1)) {\n    if (!isMap(val2) || val1.size !== val2.size) {\n      return false;\n    }\n    return keyCheck(val1, val2, strict, memos, kIsMap);\n  } else if (isAnyArrayBuffer(val1)) {\n    if (!areEqualArrayBuffers(val1, val2)) {\n      return false;\n    }\n  } else if (isBoxedPrimitive(val1) && !isEqualBoxedPrimitive(val1, val2)) {\n    return false;\n  }\n  return keyCheck(val1, val2, strict, memos, kNoIterator);\n}\nfunction getEnumerables(val, keys) {\n  return keys.filter(function (k) {\n    return propertyIsEnumerable(val, k);\n  });\n}\nfunction keyCheck(val1, val2, strict, memos, iterationType, aKeys) {\n  // For all remaining Object pairs, including Array, objects and Maps,\n  // equivalence is determined by having:\n  // a) The same number of owned enumerable properties\n  // b) The same set of keys/indexes (although not necessarily the same order)\n  // c) Equivalent values for every corresponding key/index\n  // d) For Sets and Maps, equal contents\n  // Note: this accounts for both named and indexed properties on Arrays.\n  if (arguments.length === 5) {\n    aKeys = Object.keys(val1);\n    var bKeys = Object.keys(val2);\n\n    // The pair must have the same number of owned properties.\n    if (aKeys.length !== bKeys.length) {\n      return false;\n    }\n  }\n\n  // Cheap key test\n  var i = 0;\n  for (; i < aKeys.length; i++) {\n    if (!hasOwnProperty(val2, aKeys[i])) {\n      return false;\n    }\n  }\n  if (strict && arguments.length === 5) {\n    var symbolKeysA = objectGetOwnPropertySymbols(val1);\n    if (symbolKeysA.length !== 0) {\n      var count = 0;\n      for (i = 0; i < symbolKeysA.length; i++) {\n        var key = symbolKeysA[i];\n        if (propertyIsEnumerable(val1, key)) {\n          if (!propertyIsEnumerable(val2, key)) {\n            return false;\n          }\n          aKeys.push(key);\n          count++;\n        } else if (propertyIsEnumerable(val2, key)) {\n          return false;\n        }\n      }\n      var symbolKeysB = objectGetOwnPropertySymbols(val2);\n      if (symbolKeysA.length !== symbolKeysB.length && getEnumerables(val2, symbolKeysB).length !== count) {\n        return false;\n      }\n    } else {\n      var _symbolKeysB = objectGetOwnPropertySymbols(val2);\n      if (_symbolKeysB.length !== 0 && getEnumerables(val2, _symbolKeysB).length !== 0) {\n        return false;\n      }\n    }\n  }\n  if (aKeys.length === 0 && (iterationType === kNoIterator || iterationType === kIsArray && val1.length === 0 || val1.size === 0)) {\n    return true;\n  }\n\n  // Use memos to handle cycles.\n  if (memos === undefined) {\n    memos = {\n      val1: new Map(),\n      val2: new Map(),\n      position: 0\n    };\n  } else {\n    // We prevent up to two map.has(x) calls by directly retrieving the value\n    // and checking for undefined. The map can only contain numbers, so it is\n    // safe to check for undefined only.\n    var val2MemoA = memos.val1.get(val1);\n    if (val2MemoA !== undefined) {\n      var val2MemoB = memos.val2.get(val2);\n      if (val2MemoB !== undefined) {\n        return val2MemoA === val2MemoB;\n      }\n    }\n    memos.position++;\n  }\n  memos.val1.set(val1, memos.position);\n  memos.val2.set(val2, memos.position);\n  var areEq = objEquiv(val1, val2, strict, aKeys, memos, iterationType);\n  memos.val1.delete(val1);\n  memos.val2.delete(val2);\n  return areEq;\n}\nfunction setHasEqualElement(set, val1, strict, memo) {\n  // Go looking.\n  var setValues = arrayFromSet(set);\n  for (var i = 0; i < setValues.length; i++) {\n    var val2 = setValues[i];\n    if (innerDeepEqual(val1, val2, strict, memo)) {\n      // Remove the matching element to make sure we do not check that again.\n      set.delete(val2);\n      return true;\n    }\n  }\n  return false;\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#Loose_equality_using\n// Sadly it is not possible to detect corresponding values properly in case the\n// type is a string, number, bigint or boolean. The reason is that those values\n// can match lots of different string values (e.g., 1n == '+00001').\nfunction findLooseMatchingPrimitives(prim) {\n  switch (_typeof(prim)) {\n    case 'undefined':\n      return null;\n    case 'object':\n      // Only pass in null as object!\n      return undefined;\n    case 'symbol':\n      return false;\n    case 'string':\n      prim = +prim;\n    // Loose equal entries exist only if the string is possible to convert to\n    // a regular number and not NaN.\n    // Fall through\n    case 'number':\n      if (numberIsNaN(prim)) {\n        return false;\n      }\n  }\n  return true;\n}\nfunction setMightHaveLoosePrim(a, b, prim) {\n  var altValue = findLooseMatchingPrimitives(prim);\n  if (altValue != null) return altValue;\n  return b.has(altValue) && !a.has(altValue);\n}\nfunction mapMightHaveLoosePrim(a, b, prim, item, memo) {\n  var altValue = findLooseMatchingPrimitives(prim);\n  if (altValue != null) {\n    return altValue;\n  }\n  var curB = b.get(altValue);\n  if (curB === undefined && !b.has(altValue) || !innerDeepEqual(item, curB, false, memo)) {\n    return false;\n  }\n  return !a.has(altValue) && innerDeepEqual(item, curB, false, memo);\n}\nfunction setEquiv(a, b, strict, memo) {\n  // This is a lazily initiated Set of entries which have to be compared\n  // pairwise.\n  var set = null;\n  var aValues = arrayFromSet(a);\n  for (var i = 0; i < aValues.length; i++) {\n    var val = aValues[i];\n    // Note: Checking for the objects first improves the performance for object\n    // heavy sets but it is a minor slow down for primitives. As they are fast\n    // to check this improves the worst case scenario instead.\n    if (_typeof(val) === 'object' && val !== null) {\n      if (set === null) {\n        set = new Set();\n      }\n      // If the specified value doesn't exist in the second set its an not null\n      // object (or non strict only: a not matching primitive) we'll need to go\n      // hunting for something thats deep-(strict-)equal to it. To make this\n      // O(n log n) complexity we have to copy these values in a new set first.\n      set.add(val);\n    } else if (!b.has(val)) {\n      if (strict) return false;\n\n      // Fast path to detect missing string, symbol, undefined and null values.\n      if (!setMightHaveLoosePrim(a, b, val)) {\n        return false;\n      }\n      if (set === null) {\n        set = new Set();\n      }\n      set.add(val);\n    }\n  }\n  if (set !== null) {\n    var bValues = arrayFromSet(b);\n    for (var _i = 0; _i < bValues.length; _i++) {\n      var _val = bValues[_i];\n      // We have to check if a primitive value is already\n      // matching and only if it's not, go hunting for it.\n      if (_typeof(_val) === 'object' && _val !== null) {\n        if (!setHasEqualElement(set, _val, strict, memo)) return false;\n      } else if (!strict && !a.has(_val) && !setHasEqualElement(set, _val, strict, memo)) {\n        return false;\n      }\n    }\n    return set.size === 0;\n  }\n  return true;\n}\nfunction mapHasEqualEntry(set, map, key1, item1, strict, memo) {\n  // To be able to handle cases like:\n  //   Map([[{}, 'a'], [{}, 'b']]) vs Map([[{}, 'b'], [{}, 'a']])\n  // ... we need to consider *all* matching keys, not just the first we find.\n  var setValues = arrayFromSet(set);\n  for (var i = 0; i < setValues.length; i++) {\n    var key2 = setValues[i];\n    if (innerDeepEqual(key1, key2, strict, memo) && innerDeepEqual(item1, map.get(key2), strict, memo)) {\n      set.delete(key2);\n      return true;\n    }\n  }\n  return false;\n}\nfunction mapEquiv(a, b, strict, memo) {\n  var set = null;\n  var aEntries = arrayFromMap(a);\n  for (var i = 0; i < aEntries.length; i++) {\n    var _aEntries$i = _slicedToArray(aEntries[i], 2),\n      key = _aEntries$i[0],\n      item1 = _aEntries$i[1];\n    if (_typeof(key) === 'object' && key !== null) {\n      if (set === null) {\n        set = new Set();\n      }\n      set.add(key);\n    } else {\n      // By directly retrieving the value we prevent another b.has(key) check in\n      // almost all possible cases.\n      var item2 = b.get(key);\n      if (item2 === undefined && !b.has(key) || !innerDeepEqual(item1, item2, strict, memo)) {\n        if (strict) return false;\n        // Fast path to detect missing string, symbol, undefined and null\n        // keys.\n        if (!mapMightHaveLoosePrim(a, b, key, item1, memo)) return false;\n        if (set === null) {\n          set = new Set();\n        }\n        set.add(key);\n      }\n    }\n  }\n  if (set !== null) {\n    var bEntries = arrayFromMap(b);\n    for (var _i2 = 0; _i2 < bEntries.length; _i2++) {\n      var _bEntries$_i = _slicedToArray(bEntries[_i2], 2),\n        _key = _bEntries$_i[0],\n        item = _bEntries$_i[1];\n      if (_typeof(_key) === 'object' && _key !== null) {\n        if (!mapHasEqualEntry(set, a, _key, item, strict, memo)) return false;\n      } else if (!strict && (!a.has(_key) || !innerDeepEqual(a.get(_key), item, false, memo)) && !mapHasEqualEntry(set, a, _key, item, false, memo)) {\n        return false;\n      }\n    }\n    return set.size === 0;\n  }\n  return true;\n}\nfunction objEquiv(a, b, strict, keys, memos, iterationType) {\n  // Sets and maps don't have their entries accessible via normal object\n  // properties.\n  var i = 0;\n  if (iterationType === kIsSet) {\n    if (!setEquiv(a, b, strict, memos)) {\n      return false;\n    }\n  } else if (iterationType === kIsMap) {\n    if (!mapEquiv(a, b, strict, memos)) {\n      return false;\n    }\n  } else if (iterationType === kIsArray) {\n    for (; i < a.length; i++) {\n      if (hasOwnProperty(a, i)) {\n        if (!hasOwnProperty(b, i) || !innerDeepEqual(a[i], b[i], strict, memos)) {\n          return false;\n        }\n      } else if (hasOwnProperty(b, i)) {\n        return false;\n      } else {\n        // Array is sparse.\n        var keysA = Object.keys(a);\n        for (; i < keysA.length; i++) {\n          var key = keysA[i];\n          if (!hasOwnProperty(b, key) || !innerDeepEqual(a[key], b[key], strict, memos)) {\n            return false;\n          }\n        }\n        if (keysA.length !== Object.keys(b).length) {\n          return false;\n        }\n        return true;\n      }\n    }\n  }\n\n  // The pair must have equivalent values for every corresponding key.\n  // Possibly expensive deep test:\n  for (i = 0; i < keys.length; i++) {\n    var _key2 = keys[i];\n    if (!innerDeepEqual(a[_key2], b[_key2], strict, memos)) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction isDeepEqual(val1, val2) {\n  return innerDeepEqual(val1, val2, kLoose);\n}\nfunction isDeepStrictEqual(val1, val2) {\n  return innerDeepEqual(val1, val2, kStrict);\n}\nmodule.exports = {\n  isDeepEqual: isDeepEqual,\n  isDeepStrictEqual: isDeepStrictEqual\n};","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(\n      uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n    ))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\n}\n","/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n   http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n   Bit reading helpers\n*/\n\nvar BROTLI_READ_SIZE = 4096;\nvar BROTLI_IBUF_SIZE =  (2 * BROTLI_READ_SIZE + 32);\nvar BROTLI_IBUF_MASK =  (2 * BROTLI_READ_SIZE - 1);\n\nvar kBitMask = new Uint32Array([\n  0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767,\n  65535, 131071, 262143, 524287, 1048575, 2097151, 4194303, 8388607, 16777215\n]);\n\n/* Input byte buffer, consist of a ringbuffer and a \"slack\" region where */\n/* bytes from the start of the ringbuffer are copied. */\nfunction BrotliBitReader(input) {\n  this.buf_ = new Uint8Array(BROTLI_IBUF_SIZE);\n  this.input_ = input;    /* input callback */\n  \n  this.reset();\n}\n\nBrotliBitReader.READ_SIZE = BROTLI_READ_SIZE;\nBrotliBitReader.IBUF_MASK = BROTLI_IBUF_MASK;\n\nBrotliBitReader.prototype.reset = function() {\n  this.buf_ptr_ = 0;      /* next input will write here */\n  this.val_ = 0;          /* pre-fetched bits */\n  this.pos_ = 0;          /* byte position in stream */\n  this.bit_pos_ = 0;      /* current bit-reading position in val_ */\n  this.bit_end_pos_ = 0;  /* bit-reading end position from LSB of val_ */\n  this.eos_ = 0;          /* input stream is finished */\n  \n  this.readMoreInput();\n  for (var i = 0; i < 4; i++) {\n    this.val_ |= this.buf_[this.pos_] << (8 * i);\n    ++this.pos_;\n  }\n  \n  return this.bit_end_pos_ > 0;\n};\n\n/* Fills up the input ringbuffer by calling the input callback.\n\n   Does nothing if there are at least 32 bytes present after current position.\n\n   Returns 0 if either:\n    - the input callback returned an error, or\n    - there is no more input and the position is past the end of the stream.\n\n   After encountering the end of the input stream, 32 additional zero bytes are\n   copied to the ringbuffer, therefore it is safe to call this function after\n   every 32 bytes of input is read.\n*/\nBrotliBitReader.prototype.readMoreInput = function() {\n  if (this.bit_end_pos_ > 256) {\n    return;\n  } else if (this.eos_) {\n    if (this.bit_pos_ > this.bit_end_pos_)\n      throw new Error('Unexpected end of input ' + this.bit_pos_ + ' ' + this.bit_end_pos_);\n  } else {\n    var dst = this.buf_ptr_;\n    var bytes_read = this.input_.read(this.buf_, dst, BROTLI_READ_SIZE);\n    if (bytes_read < 0) {\n      throw new Error('Unexpected end of input');\n    }\n    \n    if (bytes_read < BROTLI_READ_SIZE) {\n      this.eos_ = 1;\n      /* Store 32 bytes of zero after the stream end. */\n      for (var p = 0; p < 32; p++)\n        this.buf_[dst + bytes_read + p] = 0;\n    }\n    \n    if (dst === 0) {\n      /* Copy the head of the ringbuffer to the slack region. */\n      for (var p = 0; p < 32; p++)\n        this.buf_[(BROTLI_READ_SIZE << 1) + p] = this.buf_[p];\n\n      this.buf_ptr_ = BROTLI_READ_SIZE;\n    } else {\n      this.buf_ptr_ = 0;\n    }\n    \n    this.bit_end_pos_ += bytes_read << 3;\n  }\n};\n\n/* Guarantees that there are at least 24 bits in the buffer. */\nBrotliBitReader.prototype.fillBitWindow = function() {    \n  while (this.bit_pos_ >= 8) {\n    this.val_ >>>= 8;\n    this.val_ |= this.buf_[this.pos_ & BROTLI_IBUF_MASK] << 24;\n    ++this.pos_;\n    this.bit_pos_ = this.bit_pos_ - 8 >>> 0;\n    this.bit_end_pos_ = this.bit_end_pos_ - 8 >>> 0;\n  }\n};\n\n/* Reads the specified number of bits from Read Buffer. */\nBrotliBitReader.prototype.readBits = function(n_bits) {\n  if (32 - this.bit_pos_ < n_bits) {\n    this.fillBitWindow();\n  }\n  \n  var val = ((this.val_ >>> this.bit_pos_) & kBitMask[n_bits]);\n  this.bit_pos_ += n_bits;\n  return val;\n};\n\nmodule.exports = BrotliBitReader;\n","/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n   http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n   Lookup table to map the previous two bytes to a context id.\n\n   There are four different context modeling modes defined here:\n     CONTEXT_LSB6: context id is the least significant 6 bits of the last byte,\n     CONTEXT_MSB6: context id is the most significant 6 bits of the last byte,\n     CONTEXT_UTF8: second-order context model tuned for UTF8-encoded text,\n     CONTEXT_SIGNED: second-order context model tuned for signed integers.\n\n   The context id for the UTF8 context model is calculated as follows. If p1\n   and p2 are the previous two bytes, we calcualte the context as\n\n     context = kContextLookup[p1] | kContextLookup[p2 + 256].\n\n   If the previous two bytes are ASCII characters (i.e. < 128), this will be\n   equivalent to\n\n     context = 4 * context1(p1) + context2(p2),\n\n   where context1 is based on the previous byte in the following way:\n\n     0  : non-ASCII control\n     1  : \\t, \\n, \\r\n     2  : space\n     3  : other punctuation\n     4  : \" '\n     5  : %\n     6  : ( < [ {\n     7  : ) > ] }\n     8  : , ; :\n     9  : .\n     10 : =\n     11 : number\n     12 : upper-case vowel\n     13 : upper-case consonant\n     14 : lower-case vowel\n     15 : lower-case consonant\n\n   and context2 is based on the second last byte:\n\n     0 : control, space\n     1 : punctuation\n     2 : upper-case letter, number\n     3 : lower-case letter\n\n   If the last byte is ASCII, and the second last byte is not (in a valid UTF8\n   stream it will be a continuation byte, value between 128 and 191), the\n   context is the same as if the second last byte was an ASCII control or space.\n\n   If the last byte is a UTF8 lead byte (value >= 192), then the next byte will\n   be a continuation byte and the context id is 2 or 3 depending on the LSB of\n   the last byte and to a lesser extent on the second last byte if it is ASCII.\n\n   If the last byte is a UTF8 continuation byte, the second last byte can be:\n     - continuation byte: the next byte is probably ASCII or lead byte (assuming\n       4-byte UTF8 characters are rare) and the context id is 0 or 1.\n     - lead byte (192 - 207): next byte is ASCII or lead byte, context is 0 or 1\n     - lead byte (208 - 255): next byte is continuation byte, context is 2 or 3\n\n   The possible value combinations of the previous two bytes, the range of\n   context ids and the type of the next byte is summarized in the table below:\n\n   |--------\\-----------------------------------------------------------------|\n   |         \\                         Last byte                              |\n   | Second   \\---------------------------------------------------------------|\n   | last byte \\    ASCII            |   cont. byte        |   lead byte      |\n   |            \\   (0-127)          |   (128-191)         |   (192-)         |\n   |=============|===================|=====================|==================|\n   |  ASCII      | next: ASCII/lead  |  not valid          |  next: cont.     |\n   |  (0-127)    | context: 4 - 63   |                     |  context: 2 - 3  |\n   |-------------|-------------------|---------------------|------------------|\n   |  cont. byte | next: ASCII/lead  |  next: ASCII/lead   |  next: cont.     |\n   |  (128-191)  | context: 4 - 63   |  context: 0 - 1     |  context: 2 - 3  |\n   |-------------|-------------------|---------------------|------------------|\n   |  lead byte  | not valid         |  next: ASCII/lead   |  not valid       |\n   |  (192-207)  |                   |  context: 0 - 1     |                  |\n   |-------------|-------------------|---------------------|------------------|\n   |  lead byte  | not valid         |  next: cont.        |  not valid       |\n   |  (208-)     |                   |  context: 2 - 3     |                  |\n   |-------------|-------------------|---------------------|------------------|\n\n   The context id for the signed context mode is calculated as:\n\n     context = (kContextLookup[512 + p1] << 3) | kContextLookup[512 + p2].\n\n   For any context modeling modes, the context ids can be calculated by |-ing\n   together two lookups from one table using context model dependent offsets:\n\n     context = kContextLookup[offset1 + p1] | kContextLookup[offset2 + p2].\n\n   where offset1 and offset2 are dependent on the context mode.\n*/\n\nvar CONTEXT_LSB6         = 0;\nvar CONTEXT_MSB6         = 1;\nvar CONTEXT_UTF8         = 2;\nvar CONTEXT_SIGNED       = 3;\n\n/* Common context lookup table for all context modes. */\nexports.lookup = new Uint8Array([\n  /* CONTEXT_UTF8, last byte. */\n  /* ASCII range. */\n   0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  4,  0,  0,  4,  0,  0,\n   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,\n   8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12,\n  44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 32, 32, 24, 40, 28, 12,\n  12, 48, 52, 52, 52, 48, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48,\n  52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12,\n  12, 56, 60, 60, 60, 56, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56,\n  60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12,  0,\n  /* UTF8 continuation byte range. */\n  0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,\n  0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,\n  0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,\n  0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,\n  /* UTF8 lead byte range. */\n  2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,\n  2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,\n  2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,\n  2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,\n  /* CONTEXT_UTF8 second last byte. */\n  /* ASCII range. */\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1,\n  1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,\n  1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0,\n  /* UTF8 continuation byte range. */\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* UTF8 lead byte range. */\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n  /* CONTEXT_SIGNED, second last byte. */\n  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n  6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7,\n  /* CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bits. */\n   0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n  16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,\n  16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,\n  16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,\n  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,\n  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,\n  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,\n  40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,\n  40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,\n  40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,\n  48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56,\n  /* CONTEXT_LSB6, last byte. */\n   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,\n  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,\n  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,\n  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,\n  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n  /* CONTEXT_MSB6, last byte. */\n   0,  0,  0,  0,  1,  1,  1,  1,  2,  2,  2,  2,  3,  3,  3,  3,\n   4,  4,  4,  4,  5,  5,  5,  5,  6,  6,  6,  6,  7,  7,  7,  7,\n   8,  8,  8,  8,  9,  9,  9,  9, 10, 10, 10, 10, 11, 11, 11, 11,\n  12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15,\n  16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19,\n  20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23,\n  24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27,\n  28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31,\n  32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35,\n  36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39,\n  40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43,\n  44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47,\n  48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51,\n  52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55,\n  56, 56, 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59,\n  60, 60, 60, 60, 61, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 63,\n  /* CONTEXT_{M,L}SB6, second last byte, */\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n]);\n\nexports.lookupOffsets = new Uint16Array([\n  /* CONTEXT_LSB6 */\n  1024, 1536,\n  /* CONTEXT_MSB6 */\n  1280, 1536,\n  /* CONTEXT_UTF8 */\n  0, 256,\n  /* CONTEXT_SIGNED */\n  768, 512,\n]);\n","/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n   http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n*/\n\nvar BrotliInput = require('./streams').BrotliInput;\nvar BrotliOutput = require('./streams').BrotliOutput;\nvar BrotliBitReader = require('./bit_reader');\nvar BrotliDictionary = require('./dictionary');\nvar HuffmanCode = require('./huffman').HuffmanCode;\nvar BrotliBuildHuffmanTable = require('./huffman').BrotliBuildHuffmanTable;\nvar Context = require('./context');\nvar Prefix = require('./prefix');\nvar Transform = require('./transform');\n\nvar kDefaultCodeLength = 8;\nvar kCodeLengthRepeatCode = 16;\nvar kNumLiteralCodes = 256;\nvar kNumInsertAndCopyCodes = 704;\nvar kNumBlockLengthCodes = 26;\nvar kLiteralContextBits = 6;\nvar kDistanceContextBits = 2;\n\nvar HUFFMAN_TABLE_BITS = 8;\nvar HUFFMAN_TABLE_MASK = 0xff;\n/* Maximum possible Huffman table size for an alphabet size of 704, max code\n * length 15 and root table bits 8. */\nvar HUFFMAN_MAX_TABLE_SIZE = 1080;\n\nvar CODE_LENGTH_CODES = 18;\nvar kCodeLengthCodeOrder = new Uint8Array([\n  1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n]);\n\nvar NUM_DISTANCE_SHORT_CODES = 16;\nvar kDistanceShortCodeIndexOffset = new Uint8Array([\n  3, 2, 1, 0, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2\n]);\n\nvar kDistanceShortCodeValueOffset = new Int8Array([\n  0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3\n]);\n\nvar kMaxHuffmanTableSize = new Uint16Array([\n  256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822,\n  854, 886, 920, 952, 984, 1016, 1048, 1080\n]);\n\nfunction DecodeWindowBits(br) {\n  var n;\n  if (br.readBits(1) === 0) {\n    return 16;\n  }\n  \n  n = br.readBits(3);\n  if (n > 0) {\n    return 17 + n;\n  }\n  \n  n = br.readBits(3);\n  if (n > 0) {\n    return 8 + n;\n  }\n  \n  return 17;\n}\n\n/* Decodes a number in the range [0..255], by reading 1 - 11 bits. */\nfunction DecodeVarLenUint8(br) {\n  if (br.readBits(1)) {\n    var nbits = br.readBits(3);\n    if (nbits === 0) {\n      return 1;\n    } else {\n      return br.readBits(nbits) + (1 << nbits);\n    }\n  }\n  return 0;\n}\n\nfunction MetaBlockLength() {\n  this.meta_block_length = 0;\n  this.input_end = 0;\n  this.is_uncompressed = 0;\n  this.is_metadata = false;\n}\n\nfunction DecodeMetaBlockLength(br) {\n  var out = new MetaBlockLength;  \n  var size_nibbles;\n  var size_bytes;\n  var i;\n  \n  out.input_end = br.readBits(1);\n  if (out.input_end && br.readBits(1)) {\n    return out;\n  }\n  \n  size_nibbles = br.readBits(2) + 4;\n  if (size_nibbles === 7) {\n    out.is_metadata = true;\n    \n    if (br.readBits(1) !== 0)\n      throw new Error('Invalid reserved bit');\n    \n    size_bytes = br.readBits(2);\n    if (size_bytes === 0)\n      return out;\n    \n    for (i = 0; i < size_bytes; i++) {\n      var next_byte = br.readBits(8);\n      if (i + 1 === size_bytes && size_bytes > 1 && next_byte === 0)\n        throw new Error('Invalid size byte');\n      \n      out.meta_block_length |= next_byte << (i * 8);\n    }\n  } else {\n    for (i = 0; i < size_nibbles; ++i) {\n      var next_nibble = br.readBits(4);\n      if (i + 1 === size_nibbles && size_nibbles > 4 && next_nibble === 0)\n        throw new Error('Invalid size nibble');\n      \n      out.meta_block_length |= next_nibble << (i * 4);\n    }\n  }\n  \n  ++out.meta_block_length;\n  \n  if (!out.input_end && !out.is_metadata) {\n    out.is_uncompressed = br.readBits(1);\n  }\n  \n  return out;\n}\n\n/* Decodes the next Huffman code from bit-stream. */\nfunction ReadSymbol(table, index, br) {\n  var start_index = index;\n  \n  var nbits;\n  br.fillBitWindow();\n  index += (br.val_ >>> br.bit_pos_) & HUFFMAN_TABLE_MASK;\n  nbits = table[index].bits - HUFFMAN_TABLE_BITS;\n  if (nbits > 0) {\n    br.bit_pos_ += HUFFMAN_TABLE_BITS;\n    index += table[index].value;\n    index += (br.val_ >>> br.bit_pos_) & ((1 << nbits) - 1);\n  }\n  br.bit_pos_ += table[index].bits;\n  return table[index].value;\n}\n\nfunction ReadHuffmanCodeLengths(code_length_code_lengths, num_symbols, code_lengths, br) {\n  var symbol = 0;\n  var prev_code_len = kDefaultCodeLength;\n  var repeat = 0;\n  var repeat_code_len = 0;\n  var space = 32768;\n  \n  var table = [];\n  for (var i = 0; i < 32; i++)\n    table.push(new HuffmanCode(0, 0));\n  \n  BrotliBuildHuffmanTable(table, 0, 5, code_length_code_lengths, CODE_LENGTH_CODES);\n\n  while (symbol < num_symbols && space > 0) {\n    var p = 0;\n    var code_len;\n    \n    br.readMoreInput();\n    br.fillBitWindow();\n    p += (br.val_ >>> br.bit_pos_) & 31;\n    br.bit_pos_ += table[p].bits;\n    code_len = table[p].value & 0xff;\n    if (code_len < kCodeLengthRepeatCode) {\n      repeat = 0;\n      code_lengths[symbol++] = code_len;\n      if (code_len !== 0) {\n        prev_code_len = code_len;\n        space -= 32768 >> code_len;\n      }\n    } else {\n      var extra_bits = code_len - 14;\n      var old_repeat;\n      var repeat_delta;\n      var new_len = 0;\n      if (code_len === kCodeLengthRepeatCode) {\n        new_len = prev_code_len;\n      }\n      if (repeat_code_len !== new_len) {\n        repeat = 0;\n        repeat_code_len = new_len;\n      }\n      old_repeat = repeat;\n      if (repeat > 0) {\n        repeat -= 2;\n        repeat <<= extra_bits;\n      }\n      repeat += br.readBits(extra_bits) + 3;\n      repeat_delta = repeat - old_repeat;\n      if (symbol + repeat_delta > num_symbols) {\n        throw new Error('[ReadHuffmanCodeLengths] symbol + repeat_delta > num_symbols');\n      }\n      \n      for (var x = 0; x < repeat_delta; x++)\n        code_lengths[symbol + x] = repeat_code_len;\n      \n      symbol += repeat_delta;\n      \n      if (repeat_code_len !== 0) {\n        space -= repeat_delta << (15 - repeat_code_len);\n      }\n    }\n  }\n  if (space !== 0) {\n    throw new Error(\"[ReadHuffmanCodeLengths] space = \" + space);\n  }\n  \n  for (; symbol < num_symbols; symbol++)\n    code_lengths[symbol] = 0;\n}\n\nfunction ReadHuffmanCode(alphabet_size, tables, table, br) {\n  var table_size = 0;\n  var simple_code_or_skip;\n  var code_lengths = new Uint8Array(alphabet_size);\n  \n  br.readMoreInput();\n  \n  /* simple_code_or_skip is used as follows:\n     1 for simple code;\n     0 for no skipping, 2 skips 2 code lengths, 3 skips 3 code lengths */\n  simple_code_or_skip = br.readBits(2);\n  if (simple_code_or_skip === 1) {\n    /* Read symbols, codes & code lengths directly. */\n    var i;\n    var max_bits_counter = alphabet_size - 1;\n    var max_bits = 0;\n    var symbols = new Int32Array(4);\n    var num_symbols = br.readBits(2) + 1;\n    while (max_bits_counter) {\n      max_bits_counter >>= 1;\n      ++max_bits;\n    }\n\n    for (i = 0; i < num_symbols; ++i) {\n      symbols[i] = br.readBits(max_bits) % alphabet_size;\n      code_lengths[symbols[i]] = 2;\n    }\n    code_lengths[symbols[0]] = 1;\n    switch (num_symbols) {\n      case 1:\n        break;\n      case 3:\n        if ((symbols[0] === symbols[1]) ||\n            (symbols[0] === symbols[2]) ||\n            (symbols[1] === symbols[2])) {\n          throw new Error('[ReadHuffmanCode] invalid symbols');\n        }\n        break;\n      case 2:\n        if (symbols[0] === symbols[1]) {\n          throw new Error('[ReadHuffmanCode] invalid symbols');\n        }\n        \n        code_lengths[symbols[1]] = 1;\n        break;\n      case 4:\n        if ((symbols[0] === symbols[1]) ||\n            (symbols[0] === symbols[2]) ||\n            (symbols[0] === symbols[3]) ||\n            (symbols[1] === symbols[2]) ||\n            (symbols[1] === symbols[3]) ||\n            (symbols[2] === symbols[3])) {\n          throw new Error('[ReadHuffmanCode] invalid symbols');\n        }\n        \n        if (br.readBits(1)) {\n          code_lengths[symbols[2]] = 3;\n          code_lengths[symbols[3]] = 3;\n        } else {\n          code_lengths[symbols[0]] = 2;\n        }\n        break;\n    }\n  } else {  /* Decode Huffman-coded code lengths. */\n    var i;\n    var code_length_code_lengths = new Uint8Array(CODE_LENGTH_CODES);\n    var space = 32;\n    var num_codes = 0;\n    /* Static Huffman code for the code length code lengths */\n    var huff = [\n      new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2), \n      new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(4, 1),\n      new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2), \n      new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(4, 5)\n    ];\n    for (i = simple_code_or_skip; i < CODE_LENGTH_CODES && space > 0; ++i) {\n      var code_len_idx = kCodeLengthCodeOrder[i];\n      var p = 0;\n      var v;\n      br.fillBitWindow();\n      p += (br.val_ >>> br.bit_pos_) & 15;\n      br.bit_pos_ += huff[p].bits;\n      v = huff[p].value;\n      code_length_code_lengths[code_len_idx] = v;\n      if (v !== 0) {\n        space -= (32 >> v);\n        ++num_codes;\n      }\n    }\n    \n    if (!(num_codes === 1 || space === 0))\n      throw new Error('[ReadHuffmanCode] invalid num_codes or space');\n    \n    ReadHuffmanCodeLengths(code_length_code_lengths, alphabet_size, code_lengths, br);\n  }\n  \n  table_size = BrotliBuildHuffmanTable(tables, table, HUFFMAN_TABLE_BITS, code_lengths, alphabet_size);\n  \n  if (table_size === 0) {\n    throw new Error(\"[ReadHuffmanCode] BuildHuffmanTable failed: \");\n  }\n  \n  return table_size;\n}\n\nfunction ReadBlockLength(table, index, br) {\n  var code;\n  var nbits;\n  code = ReadSymbol(table, index, br);\n  nbits = Prefix.kBlockLengthPrefixCode[code].nbits;\n  return Prefix.kBlockLengthPrefixCode[code].offset + br.readBits(nbits);\n}\n\nfunction TranslateShortCodes(code, ringbuffer, index) {\n  var val;\n  if (code < NUM_DISTANCE_SHORT_CODES) {\n    index += kDistanceShortCodeIndexOffset[code];\n    index &= 3;\n    val = ringbuffer[index] + kDistanceShortCodeValueOffset[code];\n  } else {\n    val = code - NUM_DISTANCE_SHORT_CODES + 1;\n  }\n  return val;\n}\n\nfunction MoveToFront(v, index) {\n  var value = v[index];\n  var i = index;\n  for (; i; --i) v[i] = v[i - 1];\n  v[0] = value;\n}\n\nfunction InverseMoveToFrontTransform(v, v_len) {\n  var mtf = new Uint8Array(256);\n  var i;\n  for (i = 0; i < 256; ++i) {\n    mtf[i] = i;\n  }\n  for (i = 0; i < v_len; ++i) {\n    var index = v[i];\n    v[i] = mtf[index];\n    if (index) MoveToFront(mtf, index);\n  }\n}\n\n/* Contains a collection of huffman trees with the same alphabet size. */\nfunction HuffmanTreeGroup(alphabet_size, num_htrees) {\n  this.alphabet_size = alphabet_size;\n  this.num_htrees = num_htrees;\n  this.codes = new Array(num_htrees + num_htrees * kMaxHuffmanTableSize[(alphabet_size + 31) >>> 5]);  \n  this.htrees = new Uint32Array(num_htrees);\n}\n\nHuffmanTreeGroup.prototype.decode = function(br) {\n  var i;\n  var table_size;\n  var next = 0;\n  for (i = 0; i < this.num_htrees; ++i) {\n    this.htrees[i] = next;\n    table_size = ReadHuffmanCode(this.alphabet_size, this.codes, next, br);\n    next += table_size;\n  }\n};\n\nfunction DecodeContextMap(context_map_size, br) {\n  var out = { num_htrees: null, context_map: null };\n  var use_rle_for_zeros;\n  var max_run_length_prefix = 0;\n  var table;\n  var i;\n  \n  br.readMoreInput();\n  var num_htrees = out.num_htrees = DecodeVarLenUint8(br) + 1;\n\n  var context_map = out.context_map = new Uint8Array(context_map_size);\n  if (num_htrees <= 1) {\n    return out;\n  }\n\n  use_rle_for_zeros = br.readBits(1);\n  if (use_rle_for_zeros) {\n    max_run_length_prefix = br.readBits(4) + 1;\n  }\n  \n  table = [];\n  for (i = 0; i < HUFFMAN_MAX_TABLE_SIZE; i++) {\n    table[i] = new HuffmanCode(0, 0);\n  }\n  \n  ReadHuffmanCode(num_htrees + max_run_length_prefix, table, 0, br);\n  \n  for (i = 0; i < context_map_size;) {\n    var code;\n\n    br.readMoreInput();\n    code = ReadSymbol(table, 0, br);\n    if (code === 0) {\n      context_map[i] = 0;\n      ++i;\n    } else if (code <= max_run_length_prefix) {\n      var reps = 1 + (1 << code) + br.readBits(code);\n      while (--reps) {\n        if (i >= context_map_size) {\n          throw new Error(\"[DecodeContextMap] i >= context_map_size\");\n        }\n        context_map[i] = 0;\n        ++i;\n      }\n    } else {\n      context_map[i] = code - max_run_length_prefix;\n      ++i;\n    }\n  }\n  if (br.readBits(1)) {\n    InverseMoveToFrontTransform(context_map, context_map_size);\n  }\n  \n  return out;\n}\n\nfunction DecodeBlockType(max_block_type, trees, tree_type, block_types, ringbuffers, indexes, br) {\n  var ringbuffer = tree_type * 2;\n  var index = tree_type;\n  var type_code = ReadSymbol(trees, tree_type * HUFFMAN_MAX_TABLE_SIZE, br);\n  var block_type;\n  if (type_code === 0) {\n    block_type = ringbuffers[ringbuffer + (indexes[index] & 1)];\n  } else if (type_code === 1) {\n    block_type = ringbuffers[ringbuffer + ((indexes[index] - 1) & 1)] + 1;\n  } else {\n    block_type = type_code - 2;\n  }\n  if (block_type >= max_block_type) {\n    block_type -= max_block_type;\n  }\n  block_types[tree_type] = block_type;\n  ringbuffers[ringbuffer + (indexes[index] & 1)] = block_type;\n  ++indexes[index];\n}\n\nfunction CopyUncompressedBlockToOutput(output, len, pos, ringbuffer, ringbuffer_mask, br) {\n  var rb_size = ringbuffer_mask + 1;\n  var rb_pos = pos & ringbuffer_mask;\n  var br_pos = br.pos_ & BrotliBitReader.IBUF_MASK;\n  var nbytes;\n\n  /* For short lengths copy byte-by-byte */\n  if (len < 8 || br.bit_pos_ + (len << 3) < br.bit_end_pos_) {\n    while (len-- > 0) {\n      br.readMoreInput();\n      ringbuffer[rb_pos++] = br.readBits(8);\n      if (rb_pos === rb_size) {\n        output.write(ringbuffer, rb_size);\n        rb_pos = 0;\n      }\n    }\n    return;\n  }\n\n  if (br.bit_end_pos_ < 32) {\n    throw new Error('[CopyUncompressedBlockToOutput] br.bit_end_pos_ < 32');\n  }\n\n  /* Copy remaining 0-4 bytes from br.val_ to ringbuffer. */\n  while (br.bit_pos_ < 32) {\n    ringbuffer[rb_pos] = (br.val_ >>> br.bit_pos_);\n    br.bit_pos_ += 8;\n    ++rb_pos;\n    --len;\n  }\n\n  /* Copy remaining bytes from br.buf_ to ringbuffer. */\n  nbytes = (br.bit_end_pos_ - br.bit_pos_) >> 3;\n  if (br_pos + nbytes > BrotliBitReader.IBUF_MASK) {\n    var tail = BrotliBitReader.IBUF_MASK + 1 - br_pos;\n    for (var x = 0; x < tail; x++)\n      ringbuffer[rb_pos + x] = br.buf_[br_pos + x];\n    \n    nbytes -= tail;\n    rb_pos += tail;\n    len -= tail;\n    br_pos = 0;\n  }\n\n  for (var x = 0; x < nbytes; x++)\n    ringbuffer[rb_pos + x] = br.buf_[br_pos + x];\n  \n  rb_pos += nbytes;\n  len -= nbytes;\n\n  /* If we wrote past the logical end of the ringbuffer, copy the tail of the\n     ringbuffer to its beginning and flush the ringbuffer to the output. */\n  if (rb_pos >= rb_size) {\n    output.write(ringbuffer, rb_size);\n    rb_pos -= rb_size;    \n    for (var x = 0; x < rb_pos; x++)\n      ringbuffer[x] = ringbuffer[rb_size + x];\n  }\n\n  /* If we have more to copy than the remaining size of the ringbuffer, then we\n     first fill the ringbuffer from the input and then flush the ringbuffer to\n     the output */\n  while (rb_pos + len >= rb_size) {\n    nbytes = rb_size - rb_pos;\n    if (br.input_.read(ringbuffer, rb_pos, nbytes) < nbytes) {\n      throw new Error('[CopyUncompressedBlockToOutput] not enough bytes');\n    }\n    output.write(ringbuffer, rb_size);\n    len -= nbytes;\n    rb_pos = 0;\n  }\n\n  /* Copy straight from the input onto the ringbuffer. The ringbuffer will be\n     flushed to the output at a later time. */\n  if (br.input_.read(ringbuffer, rb_pos, len) < len) {\n    throw new Error('[CopyUncompressedBlockToOutput] not enough bytes');\n  }\n\n  /* Restore the state of the bit reader. */\n  br.reset();\n}\n\n/* Advances the bit reader position to the next byte boundary and verifies\n   that any skipped bits are set to zero. */\nfunction JumpToByteBoundary(br) {\n  var new_bit_pos = (br.bit_pos_ + 7) & ~7;\n  var pad_bits = br.readBits(new_bit_pos - br.bit_pos_);\n  return pad_bits == 0;\n}\n\nfunction BrotliDecompressedSize(buffer) {\n  var input = new BrotliInput(buffer);\n  var br = new BrotliBitReader(input);\n  DecodeWindowBits(br);\n  var out = DecodeMetaBlockLength(br);\n  return out.meta_block_length;\n}\n\nexports.BrotliDecompressedSize = BrotliDecompressedSize;\n\nfunction BrotliDecompressBuffer(buffer, output_size) {\n  var input = new BrotliInput(buffer);\n  \n  if (output_size == null) {\n    output_size = BrotliDecompressedSize(buffer);\n  }\n  \n  var output_buffer = new Uint8Array(output_size);\n  var output = new BrotliOutput(output_buffer);\n  \n  BrotliDecompress(input, output);\n  \n  if (output.pos < output.buffer.length) {\n    output.buffer = output.buffer.subarray(0, output.pos);\n  }\n  \n  return output.buffer;\n}\n\nexports.BrotliDecompressBuffer = BrotliDecompressBuffer;\n\nfunction BrotliDecompress(input, output) {\n  var i;\n  var pos = 0;\n  var input_end = 0;\n  var window_bits = 0;\n  var max_backward_distance;\n  var max_distance = 0;\n  var ringbuffer_size;\n  var ringbuffer_mask;\n  var ringbuffer;\n  var ringbuffer_end;\n  /* This ring buffer holds a few past copy distances that will be used by */\n  /* some special distance codes. */\n  var dist_rb = [ 16, 15, 11, 4 ];\n  var dist_rb_idx = 0;\n  /* The previous 2 bytes used for context. */\n  var prev_byte1 = 0;\n  var prev_byte2 = 0;\n  var hgroup = [new HuffmanTreeGroup(0, 0), new HuffmanTreeGroup(0, 0), new HuffmanTreeGroup(0, 0)];\n  var block_type_trees;\n  var block_len_trees;\n  var br;\n\n  /* We need the slack region for the following reasons:\n       - always doing two 8-byte copies for fast backward copying\n       - transforms\n       - flushing the input ringbuffer when decoding uncompressed blocks */\n  var kRingBufferWriteAheadSlack = 128 + BrotliBitReader.READ_SIZE;\n\n  br = new BrotliBitReader(input);\n\n  /* Decode window size. */\n  window_bits = DecodeWindowBits(br);\n  max_backward_distance = (1 << window_bits) - 16;\n\n  ringbuffer_size = 1 << window_bits;\n  ringbuffer_mask = ringbuffer_size - 1;\n  ringbuffer = new Uint8Array(ringbuffer_size + kRingBufferWriteAheadSlack + BrotliDictionary.maxDictionaryWordLength);\n  ringbuffer_end = ringbuffer_size;\n\n  block_type_trees = [];\n  block_len_trees = [];\n  for (var x = 0; x < 3 * HUFFMAN_MAX_TABLE_SIZE; x++) {\n    block_type_trees[x] = new HuffmanCode(0, 0);\n    block_len_trees[x] = new HuffmanCode(0, 0);\n  }\n\n  while (!input_end) {\n    var meta_block_remaining_len = 0;\n    var is_uncompressed;\n    var block_length = [ 1 << 28, 1 << 28, 1 << 28 ];\n    var block_type = [ 0 ];\n    var num_block_types = [ 1, 1, 1 ];\n    var block_type_rb = [ 0, 1, 0, 1, 0, 1 ];\n    var block_type_rb_index = [ 0 ];\n    var distance_postfix_bits;\n    var num_direct_distance_codes;\n    var distance_postfix_mask;\n    var num_distance_codes;\n    var context_map = null;\n    var context_modes = null;\n    var num_literal_htrees;\n    var dist_context_map = null;\n    var num_dist_htrees;\n    var context_offset = 0;\n    var context_map_slice = null;\n    var literal_htree_index = 0;\n    var dist_context_offset = 0;\n    var dist_context_map_slice = null;\n    var dist_htree_index = 0;\n    var context_lookup_offset1 = 0;\n    var context_lookup_offset2 = 0;\n    var context_mode;\n    var htree_command;\n\n    for (i = 0; i < 3; ++i) {\n      hgroup[i].codes = null;\n      hgroup[i].htrees = null;\n    }\n\n    br.readMoreInput();\n    \n    var _out = DecodeMetaBlockLength(br);\n    meta_block_remaining_len = _out.meta_block_length;\n    if (pos + meta_block_remaining_len > output.buffer.length) {\n      /* We need to grow the output buffer to fit the additional data. */\n      var tmp = new Uint8Array( pos + meta_block_remaining_len );\n      tmp.set( output.buffer );\n      output.buffer = tmp;\n    }    \n    input_end = _out.input_end;\n    is_uncompressed = _out.is_uncompressed;\n    \n    if (_out.is_metadata) {\n      JumpToByteBoundary(br);\n      \n      for (; meta_block_remaining_len > 0; --meta_block_remaining_len) {\n        br.readMoreInput();\n        /* Read one byte and ignore it. */\n        br.readBits(8);\n      }\n      \n      continue;\n    }\n    \n    if (meta_block_remaining_len === 0) {\n      continue;\n    }\n    \n    if (is_uncompressed) {\n      br.bit_pos_ = (br.bit_pos_ + 7) & ~7;\n      CopyUncompressedBlockToOutput(output, meta_block_remaining_len, pos,\n                                    ringbuffer, ringbuffer_mask, br);\n      pos += meta_block_remaining_len;\n      continue;\n    }\n    \n    for (i = 0; i < 3; ++i) {\n      num_block_types[i] = DecodeVarLenUint8(br) + 1;\n      if (num_block_types[i] >= 2) {\n        ReadHuffmanCode(num_block_types[i] + 2, block_type_trees, i * HUFFMAN_MAX_TABLE_SIZE, br);\n        ReadHuffmanCode(kNumBlockLengthCodes, block_len_trees, i * HUFFMAN_MAX_TABLE_SIZE, br);\n        block_length[i] = ReadBlockLength(block_len_trees, i * HUFFMAN_MAX_TABLE_SIZE, br);\n        block_type_rb_index[i] = 1;\n      }\n    }\n    \n    br.readMoreInput();\n    \n    distance_postfix_bits = br.readBits(2);\n    num_direct_distance_codes = NUM_DISTANCE_SHORT_CODES + (br.readBits(4) << distance_postfix_bits);\n    distance_postfix_mask = (1 << distance_postfix_bits) - 1;\n    num_distance_codes = (num_direct_distance_codes + (48 << distance_postfix_bits));\n    context_modes = new Uint8Array(num_block_types[0]);\n\n    for (i = 0; i < num_block_types[0]; ++i) {\n       br.readMoreInput();\n       context_modes[i] = (br.readBits(2) << 1);\n    }\n    \n    var _o1 = DecodeContextMap(num_block_types[0] << kLiteralContextBits, br);\n    num_literal_htrees = _o1.num_htrees;\n    context_map = _o1.context_map;\n    \n    var _o2 = DecodeContextMap(num_block_types[2] << kDistanceContextBits, br);\n    num_dist_htrees = _o2.num_htrees;\n    dist_context_map = _o2.context_map;\n    \n    hgroup[0] = new HuffmanTreeGroup(kNumLiteralCodes, num_literal_htrees);\n    hgroup[1] = new HuffmanTreeGroup(kNumInsertAndCopyCodes, num_block_types[1]);\n    hgroup[2] = new HuffmanTreeGroup(num_distance_codes, num_dist_htrees);\n\n    for (i = 0; i < 3; ++i) {\n      hgroup[i].decode(br);\n    }\n\n    context_map_slice = 0;\n    dist_context_map_slice = 0;\n    context_mode = context_modes[block_type[0]];\n    context_lookup_offset1 = Context.lookupOffsets[context_mode];\n    context_lookup_offset2 = Context.lookupOffsets[context_mode + 1];\n    htree_command = hgroup[1].htrees[0];\n\n    while (meta_block_remaining_len > 0) {\n      var cmd_code;\n      var range_idx;\n      var insert_code;\n      var copy_code;\n      var insert_length;\n      var copy_length;\n      var distance_code;\n      var distance;\n      var context;\n      var j;\n      var copy_dst;\n\n      br.readMoreInput();\n      \n      if (block_length[1] === 0) {\n        DecodeBlockType(num_block_types[1],\n                        block_type_trees, 1, block_type, block_type_rb,\n                        block_type_rb_index, br);\n        block_length[1] = ReadBlockLength(block_len_trees, HUFFMAN_MAX_TABLE_SIZE, br);\n        htree_command = hgroup[1].htrees[block_type[1]];\n      }\n      --block_length[1];\n      cmd_code = ReadSymbol(hgroup[1].codes, htree_command, br);\n      range_idx = cmd_code >> 6;\n      if (range_idx >= 2) {\n        range_idx -= 2;\n        distance_code = -1;\n      } else {\n        distance_code = 0;\n      }\n      insert_code = Prefix.kInsertRangeLut[range_idx] + ((cmd_code >> 3) & 7);\n      copy_code = Prefix.kCopyRangeLut[range_idx] + (cmd_code & 7);\n      insert_length = Prefix.kInsertLengthPrefixCode[insert_code].offset +\n          br.readBits(Prefix.kInsertLengthPrefixCode[insert_code].nbits);\n      copy_length = Prefix.kCopyLengthPrefixCode[copy_code].offset +\n          br.readBits(Prefix.kCopyLengthPrefixCode[copy_code].nbits);\n      prev_byte1 = ringbuffer[pos-1 & ringbuffer_mask];\n      prev_byte2 = ringbuffer[pos-2 & ringbuffer_mask];\n      for (j = 0; j < insert_length; ++j) {\n        br.readMoreInput();\n\n        if (block_length[0] === 0) {\n          DecodeBlockType(num_block_types[0],\n                          block_type_trees, 0, block_type, block_type_rb,\n                          block_type_rb_index, br);\n          block_length[0] = ReadBlockLength(block_len_trees, 0, br);\n          context_offset = block_type[0] << kLiteralContextBits;\n          context_map_slice = context_offset;\n          context_mode = context_modes[block_type[0]];\n          context_lookup_offset1 = Context.lookupOffsets[context_mode];\n          context_lookup_offset2 = Context.lookupOffsets[context_mode + 1];\n        }\n        context = (Context.lookup[context_lookup_offset1 + prev_byte1] |\n                   Context.lookup[context_lookup_offset2 + prev_byte2]);\n        literal_htree_index = context_map[context_map_slice + context];\n        --block_length[0];\n        prev_byte2 = prev_byte1;\n        prev_byte1 = ReadSymbol(hgroup[0].codes, hgroup[0].htrees[literal_htree_index], br);\n        ringbuffer[pos & ringbuffer_mask] = prev_byte1;\n        if ((pos & ringbuffer_mask) === ringbuffer_mask) {\n          output.write(ringbuffer, ringbuffer_size);\n        }\n        ++pos;\n      }\n      meta_block_remaining_len -= insert_length;\n      if (meta_block_remaining_len <= 0) break;\n\n      if (distance_code < 0) {\n        var context;\n        \n        br.readMoreInput();\n        if (block_length[2] === 0) {\n          DecodeBlockType(num_block_types[2],\n                          block_type_trees, 2, block_type, block_type_rb,\n                          block_type_rb_index, br);\n          block_length[2] = ReadBlockLength(block_len_trees, 2 * HUFFMAN_MAX_TABLE_SIZE, br);\n          dist_context_offset = block_type[2] << kDistanceContextBits;\n          dist_context_map_slice = dist_context_offset;\n        }\n        --block_length[2];\n        context = (copy_length > 4 ? 3 : copy_length - 2) & 0xff;\n        dist_htree_index = dist_context_map[dist_context_map_slice + context];\n        distance_code = ReadSymbol(hgroup[2].codes, hgroup[2].htrees[dist_htree_index], br);\n        if (distance_code >= num_direct_distance_codes) {\n          var nbits;\n          var postfix;\n          var offset;\n          distance_code -= num_direct_distance_codes;\n          postfix = distance_code & distance_postfix_mask;\n          distance_code >>= distance_postfix_bits;\n          nbits = (distance_code >> 1) + 1;\n          offset = ((2 + (distance_code & 1)) << nbits) - 4;\n          distance_code = num_direct_distance_codes +\n              ((offset + br.readBits(nbits)) <<\n               distance_postfix_bits) + postfix;\n        }\n      }\n\n      /* Convert the distance code to the actual distance by possibly looking */\n      /* up past distnaces from the ringbuffer. */\n      distance = TranslateShortCodes(distance_code, dist_rb, dist_rb_idx);\n      if (distance < 0) {\n        throw new Error('[BrotliDecompress] invalid distance');\n      }\n\n      if (pos < max_backward_distance &&\n          max_distance !== max_backward_distance) {\n        max_distance = pos;\n      } else {\n        max_distance = max_backward_distance;\n      }\n\n      copy_dst = pos & ringbuffer_mask;\n\n      if (distance > max_distance) {\n        if (copy_length >= BrotliDictionary.minDictionaryWordLength &&\n            copy_length <= BrotliDictionary.maxDictionaryWordLength) {\n          var offset = BrotliDictionary.offsetsByLength[copy_length];\n          var word_id = distance - max_distance - 1;\n          var shift = BrotliDictionary.sizeBitsByLength[copy_length];\n          var mask = (1 << shift) - 1;\n          var word_idx = word_id & mask;\n          var transform_idx = word_id >> shift;\n          offset += word_idx * copy_length;\n          if (transform_idx < Transform.kNumTransforms) {\n            var len = Transform.transformDictionaryWord(ringbuffer, copy_dst, offset, copy_length, transform_idx);\n            copy_dst += len;\n            pos += len;\n            meta_block_remaining_len -= len;\n            if (copy_dst >= ringbuffer_end) {\n              output.write(ringbuffer, ringbuffer_size);\n              \n              for (var _x = 0; _x < (copy_dst - ringbuffer_end); _x++)\n                ringbuffer[_x] = ringbuffer[ringbuffer_end + _x];\n            }\n          } else {\n            throw new Error(\"Invalid backward reference. pos: \" + pos + \" distance: \" + distance +\n              \" len: \" + copy_length + \" bytes left: \" + meta_block_remaining_len);\n          }\n        } else {\n          throw new Error(\"Invalid backward reference. pos: \" + pos + \" distance: \" + distance +\n            \" len: \" + copy_length + \" bytes left: \" + meta_block_remaining_len);\n        }\n      } else {\n        if (distance_code > 0) {\n          dist_rb[dist_rb_idx & 3] = distance;\n          ++dist_rb_idx;\n        }\n\n        if (copy_length > meta_block_remaining_len) {\n          throw new Error(\"Invalid backward reference. pos: \" + pos + \" distance: \" + distance +\n            \" len: \" + copy_length + \" bytes left: \" + meta_block_remaining_len);\n        }\n\n        for (j = 0; j < copy_length; ++j) {\n          ringbuffer[pos & ringbuffer_mask] = ringbuffer[(pos - distance) & ringbuffer_mask];\n          if ((pos & ringbuffer_mask) === ringbuffer_mask) {\n            output.write(ringbuffer, ringbuffer_size);\n          }\n          ++pos;\n          --meta_block_remaining_len;\n        }\n      }\n\n      /* When we get here, we must have inserted at least one literal and */\n      /* made a copy of at least length two, therefore accessing the last 2 */\n      /* bytes is valid. */\n      prev_byte1 = ringbuffer[(pos - 1) & ringbuffer_mask];\n      prev_byte2 = ringbuffer[(pos - 2) & ringbuffer_mask];\n    }\n\n    /* Protect pos from overflow, wrap it around at every GB of input data */\n    pos &= 0x3fffffff;\n  }\n\n  output.write(ringbuffer, pos & ringbuffer_mask);\n}\n\nexports.BrotliDecompress = BrotliDecompress;\n\nBrotliDictionary.init();\n","var base64 = require('base64-js');\n\n/**\n * The normal dictionary-data.js is quite large, which makes it \n * unsuitable for browser usage. In order to make it smaller, \n * we read dictionary.bin, which is a compressed version of\n * the dictionary, and on initial load, Brotli decompresses \n * it's own dictionary. 😜\n */\nexports.init = function() {\n  var BrotliDecompressBuffer = require('./decode').BrotliDecompressBuffer;\n  var compressed = base64.toByteArray(require('./dictionary.bin.js'));\n  return BrotliDecompressBuffer(compressed);\n};\n","module.exports=\"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\";\n","/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n   http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n   Collection of static dictionary words.\n*/\n\nvar data = require('./dictionary-data');\nexports.init = function() {\n  exports.dictionary = data.init();\n};\n\nexports.offsetsByLength = new Uint32Array([\n     0,     0,     0,     0,     0,  4096,  9216, 21504, 35840, 44032,\n 53248, 63488, 74752, 87040, 93696, 100864, 104704, 106752, 108928, 113536,\n 115968, 118528, 119872, 121280, 122016,\n]);\n\nexports.sizeBitsByLength = new Uint8Array([\n  0,  0,  0,  0, 10, 10, 11, 11, 10, 10,\n 10, 10, 10,  9,  9,  8,  7,  7,  8,  7,\n  7,  6,  6,  5,  5,\n]);\n\nexports.minDictionaryWordLength = 4;\nexports.maxDictionaryWordLength = 24;\n","function HuffmanCode(bits, value) {\n  this.bits = bits;   /* number of bits used for this symbol */\n  this.value = value; /* symbol value or table offset */\n}\n\nexports.HuffmanCode = HuffmanCode;\n\nvar MAX_LENGTH = 15;\n\n/* Returns reverse(reverse(key, len) + 1, len), where reverse(key, len) is the\n   bit-wise reversal of the len least significant bits of key. */\nfunction GetNextKey(key, len) {\n  var step = 1 << (len - 1);\n  while (key & step) {\n    step >>= 1;\n  }\n  return (key & (step - 1)) + step;\n}\n\n/* Stores code in table[0], table[step], table[2*step], ..., table[end] */\n/* Assumes that end is an integer multiple of step */\nfunction ReplicateValue(table, i, step, end, code) {\n  do {\n    end -= step;\n    table[i + end] = new HuffmanCode(code.bits, code.value);\n  } while (end > 0);\n}\n\n/* Returns the table width of the next 2nd level table. count is the histogram\n   of bit lengths for the remaining symbols, len is the code length of the next\n   processed symbol */\nfunction NextTableBitSize(count, len, root_bits) {\n  var left = 1 << (len - root_bits);\n  while (len < MAX_LENGTH) {\n    left -= count[len];\n    if (left <= 0) break;\n    ++len;\n    left <<= 1;\n  }\n  return len - root_bits;\n}\n\nexports.BrotliBuildHuffmanTable = function(root_table, table, root_bits, code_lengths, code_lengths_size) {\n  var start_table = table;\n  var code;            /* current table entry */\n  var len;             /* current code length */\n  var symbol;          /* symbol index in original or sorted table */\n  var key;             /* reversed prefix code */\n  var step;            /* step size to replicate values in current table */\n  var low;             /* low bits for current root entry */\n  var mask;            /* mask for low bits */\n  var table_bits;      /* key length of current table */\n  var table_size;      /* size of current table */\n  var total_size;      /* sum of root table size and 2nd level table sizes */\n  var sorted;          /* symbols sorted by code length */\n  var count = new Int32Array(MAX_LENGTH + 1);  /* number of codes of each length */\n  var offset = new Int32Array(MAX_LENGTH + 1);  /* offsets in sorted table for each length */\n\n  sorted = new Int32Array(code_lengths_size);\n\n  /* build histogram of code lengths */\n  for (symbol = 0; symbol < code_lengths_size; symbol++) {\n    count[code_lengths[symbol]]++;\n  }\n\n  /* generate offsets into sorted symbol table by code length */\n  offset[1] = 0;\n  for (len = 1; len < MAX_LENGTH; len++) {\n    offset[len + 1] = offset[len] + count[len];\n  }\n\n  /* sort symbols by length, by symbol order within each length */\n  for (symbol = 0; symbol < code_lengths_size; symbol++) {\n    if (code_lengths[symbol] !== 0) {\n      sorted[offset[code_lengths[symbol]]++] = symbol;\n    }\n  }\n  \n  table_bits = root_bits;\n  table_size = 1 << table_bits;\n  total_size = table_size;\n\n  /* special case code with only one value */\n  if (offset[MAX_LENGTH] === 1) {\n    for (key = 0; key < total_size; ++key) {\n      root_table[table + key] = new HuffmanCode(0, sorted[0] & 0xffff);\n    }\n    \n    return total_size;\n  }\n\n  /* fill in root table */\n  key = 0;\n  symbol = 0;\n  for (len = 1, step = 2; len <= root_bits; ++len, step <<= 1) {\n    for (; count[len] > 0; --count[len]) {\n      code = new HuffmanCode(len & 0xff, sorted[symbol++] & 0xffff);\n      ReplicateValue(root_table, table + key, step, table_size, code);\n      key = GetNextKey(key, len);\n    }\n  }\n\n  /* fill in 2nd level tables and add pointers to root table */\n  mask = total_size - 1;\n  low = -1;\n  for (len = root_bits + 1, step = 2; len <= MAX_LENGTH; ++len, step <<= 1) {\n    for (; count[len] > 0; --count[len]) {\n      if ((key & mask) !== low) {\n        table += table_size;\n        table_bits = NextTableBitSize(count, len, root_bits);\n        table_size = 1 << table_bits;\n        total_size += table_size;\n        low = key & mask;\n        root_table[start_table + low] = new HuffmanCode((table_bits + root_bits) & 0xff, ((table - start_table) - low) & 0xffff);\n      }\n      code = new HuffmanCode((len - root_bits) & 0xff, sorted[symbol++] & 0xffff);\n      ReplicateValue(root_table, table + (key >> root_bits), step, table_size, code);\n      key = GetNextKey(key, len);\n    }\n  }\n  \n  return total_size;\n}\n","/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n   http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n   Lookup tables to map prefix codes to value ranges. This is used during\n   decoding of the block lengths, literal insertion lengths and copy lengths.\n*/\n\n/* Represents the range of values belonging to a prefix code: */\n/* [offset, offset + 2^nbits) */\nfunction PrefixCodeRange(offset, nbits) {\n  this.offset = offset;\n  this.nbits = nbits;\n}\n\nexports.kBlockLengthPrefixCode = [\n  new PrefixCodeRange(1, 2), new PrefixCodeRange(5, 2), new PrefixCodeRange(9, 2), new PrefixCodeRange(13, 2),\n  new PrefixCodeRange(17, 3), new PrefixCodeRange(25, 3), new PrefixCodeRange(33, 3), new PrefixCodeRange(41, 3),\n  new PrefixCodeRange(49, 4), new PrefixCodeRange(65, 4), new PrefixCodeRange(81, 4), new PrefixCodeRange(97, 4),\n  new PrefixCodeRange(113, 5), new PrefixCodeRange(145, 5), new PrefixCodeRange(177, 5), new PrefixCodeRange(209, 5),\n  new PrefixCodeRange(241, 6), new PrefixCodeRange(305, 6), new PrefixCodeRange(369, 7), new PrefixCodeRange(497, 8),\n  new PrefixCodeRange(753, 9), new PrefixCodeRange(1265, 10), new PrefixCodeRange(2289, 11), new PrefixCodeRange(4337, 12),\n  new PrefixCodeRange(8433, 13), new PrefixCodeRange(16625, 24)\n];\n\nexports.kInsertLengthPrefixCode = [\n  new PrefixCodeRange(0, 0), new PrefixCodeRange(1, 0), new PrefixCodeRange(2, 0), new PrefixCodeRange(3, 0),\n  new PrefixCodeRange(4, 0), new PrefixCodeRange(5, 0), new PrefixCodeRange(6, 1), new PrefixCodeRange(8, 1),\n  new PrefixCodeRange(10, 2), new PrefixCodeRange(14, 2), new PrefixCodeRange(18, 3), new PrefixCodeRange(26, 3),\n  new PrefixCodeRange(34, 4), new PrefixCodeRange(50, 4), new PrefixCodeRange(66, 5), new PrefixCodeRange(98, 5),\n  new PrefixCodeRange(130, 6), new PrefixCodeRange(194, 7), new PrefixCodeRange(322, 8), new PrefixCodeRange(578, 9),\n  new PrefixCodeRange(1090, 10), new PrefixCodeRange(2114, 12), new PrefixCodeRange(6210, 14), new PrefixCodeRange(22594, 24),\n];\n\nexports.kCopyLengthPrefixCode = [\n  new PrefixCodeRange(2, 0), new PrefixCodeRange(3, 0), new PrefixCodeRange(4, 0), new PrefixCodeRange(5, 0),\n  new PrefixCodeRange(6, 0), new PrefixCodeRange(7, 0), new PrefixCodeRange(8, 0), new PrefixCodeRange(9, 0),\n  new PrefixCodeRange(10, 1), new PrefixCodeRange(12, 1), new PrefixCodeRange(14, 2), new PrefixCodeRange(18, 2),\n  new PrefixCodeRange(22, 3), new PrefixCodeRange(30, 3), new PrefixCodeRange(38, 4), new PrefixCodeRange(54, 4),\n  new PrefixCodeRange(70, 5), new PrefixCodeRange(102, 5), new PrefixCodeRange(134, 6), new PrefixCodeRange(198, 7),\n  new PrefixCodeRange(326, 8), new PrefixCodeRange(582, 9), new PrefixCodeRange(1094, 10), new PrefixCodeRange(2118, 24),\n];\n\nexports.kInsertRangeLut = [\n  0, 0, 8, 8, 0, 16, 8, 16, 16,\n];\n\nexports.kCopyRangeLut = [\n  0, 8, 0, 8, 16, 0, 16, 8, 16,\n];\n","function BrotliInput(buffer) {\n  this.buffer = buffer;\n  this.pos = 0;\n}\n\nBrotliInput.prototype.read = function(buf, i, count) {\n  if (this.pos + count > this.buffer.length) {\n    count = this.buffer.length - this.pos;\n  }\n  \n  for (var p = 0; p < count; p++)\n    buf[i + p] = this.buffer[this.pos + p];\n  \n  this.pos += count;\n  return count;\n}\n\nexports.BrotliInput = BrotliInput;\n\nfunction BrotliOutput(buf) {\n  this.buffer = buf;\n  this.pos = 0;\n}\n\nBrotliOutput.prototype.write = function(buf, count) {\n  if (this.pos + count > this.buffer.length)\n    throw new Error('Output buffer is not large enough');\n  \n  this.buffer.set(buf.subarray(0, count), this.pos);\n  this.pos += count;\n  return count;\n};\n\nexports.BrotliOutput = BrotliOutput;\n","/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n   http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n   Transformations on dictionary words.\n*/\n\nvar BrotliDictionary = require('./dictionary');\n\nvar kIdentity       = 0;\nvar kOmitLast1      = 1;\nvar kOmitLast2      = 2;\nvar kOmitLast3      = 3;\nvar kOmitLast4      = 4;\nvar kOmitLast5      = 5;\nvar kOmitLast6      = 6;\nvar kOmitLast7      = 7;\nvar kOmitLast8      = 8;\nvar kOmitLast9      = 9;\nvar kUppercaseFirst = 10;\nvar kUppercaseAll   = 11;\nvar kOmitFirst1     = 12;\nvar kOmitFirst2     = 13;\nvar kOmitFirst3     = 14;\nvar kOmitFirst4     = 15;\nvar kOmitFirst5     = 16;\nvar kOmitFirst6     = 17;\nvar kOmitFirst7     = 18;\nvar kOmitFirst8     = 19;\nvar kOmitFirst9     = 20;\n\nfunction Transform(prefix, transform, suffix) {\n  this.prefix = new Uint8Array(prefix.length);\n  this.transform = transform;\n  this.suffix = new Uint8Array(suffix.length);\n  \n  for (var i = 0; i < prefix.length; i++)\n    this.prefix[i] = prefix.charCodeAt(i);\n  \n  for (var i = 0; i < suffix.length; i++)\n    this.suffix[i] = suffix.charCodeAt(i);\n}\n\nvar kTransforms = [\n     new Transform(         \"\", kIdentity,       \"\"           ),\n     new Transform(         \"\", kIdentity,       \" \"          ),\n     new Transform(        \" \", kIdentity,       \" \"          ),\n     new Transform(         \"\", kOmitFirst1,     \"\"           ),\n     new Transform(         \"\", kUppercaseFirst, \" \"          ),\n     new Transform(         \"\", kIdentity,       \" the \"      ),\n     new Transform(        \" \", kIdentity,       \"\"           ),\n     new Transform(       \"s \", kIdentity,       \" \"          ),\n     new Transform(         \"\", kIdentity,       \" of \"       ),\n     new Transform(         \"\", kUppercaseFirst, \"\"           ),\n     new Transform(         \"\", kIdentity,       \" and \"      ),\n     new Transform(         \"\", kOmitFirst2,     \"\"           ),\n     new Transform(         \"\", kOmitLast1,      \"\"           ),\n     new Transform(       \", \", kIdentity,       \" \"          ),\n     new Transform(         \"\", kIdentity,       \", \"         ),\n     new Transform(        \" \", kUppercaseFirst, \" \"          ),\n     new Transform(         \"\", kIdentity,       \" in \"       ),\n     new Transform(         \"\", kIdentity,       \" to \"       ),\n     new Transform(       \"e \", kIdentity,       \" \"          ),\n     new Transform(         \"\", kIdentity,       \"\\\"\"         ),\n     new Transform(         \"\", kIdentity,       \".\"          ),\n     new Transform(         \"\", kIdentity,       \"\\\">\"        ),\n     new Transform(         \"\", kIdentity,       \"\\n\"         ),\n     new Transform(         \"\", kOmitLast3,      \"\"           ),\n     new Transform(         \"\", kIdentity,       \"]\"          ),\n     new Transform(         \"\", kIdentity,       \" for \"      ),\n     new Transform(         \"\", kOmitFirst3,     \"\"           ),\n     new Transform(         \"\", kOmitLast2,      \"\"           ),\n     new Transform(         \"\", kIdentity,       \" a \"        ),\n     new Transform(         \"\", kIdentity,       \" that \"     ),\n     new Transform(        \" \", kUppercaseFirst, \"\"           ),\n     new Transform(         \"\", kIdentity,       \". \"         ),\n     new Transform(        \".\", kIdentity,       \"\"           ),\n     new Transform(        \" \", kIdentity,       \", \"         ),\n     new Transform(         \"\", kOmitFirst4,     \"\"           ),\n     new Transform(         \"\", kIdentity,       \" with \"     ),\n     new Transform(         \"\", kIdentity,       \"'\"          ),\n     new Transform(         \"\", kIdentity,       \" from \"     ),\n     new Transform(         \"\", kIdentity,       \" by \"       ),\n     new Transform(         \"\", kOmitFirst5,     \"\"           ),\n     new Transform(         \"\", kOmitFirst6,     \"\"           ),\n     new Transform(    \" the \", kIdentity,       \"\"           ),\n     new Transform(         \"\", kOmitLast4,      \"\"           ),\n     new Transform(         \"\", kIdentity,       \". The \"     ),\n     new Transform(         \"\", kUppercaseAll,   \"\"           ),\n     new Transform(         \"\", kIdentity,       \" on \"       ),\n     new Transform(         \"\", kIdentity,       \" as \"       ),\n     new Transform(         \"\", kIdentity,       \" is \"       ),\n     new Transform(         \"\", kOmitLast7,      \"\"           ),\n     new Transform(         \"\", kOmitLast1,      \"ing \"       ),\n     new Transform(         \"\", kIdentity,       \"\\n\\t\"       ),\n     new Transform(         \"\", kIdentity,       \":\"          ),\n     new Transform(        \" \", kIdentity,       \". \"         ),\n     new Transform(         \"\", kIdentity,       \"ed \"        ),\n     new Transform(         \"\", kOmitFirst9,     \"\"           ),\n     new Transform(         \"\", kOmitFirst7,     \"\"           ),\n     new Transform(         \"\", kOmitLast6,      \"\"           ),\n     new Transform(         \"\", kIdentity,       \"(\"          ),\n     new Transform(         \"\", kUppercaseFirst, \", \"         ),\n     new Transform(         \"\", kOmitLast8,      \"\"           ),\n     new Transform(         \"\", kIdentity,       \" at \"       ),\n     new Transform(         \"\", kIdentity,       \"ly \"        ),\n     new Transform(    \" the \", kIdentity,       \" of \"       ),\n     new Transform(         \"\", kOmitLast5,      \"\"           ),\n     new Transform(         \"\", kOmitLast9,      \"\"           ),\n     new Transform(        \" \", kUppercaseFirst, \", \"         ),\n     new Transform(         \"\", kUppercaseFirst, \"\\\"\"         ),\n     new Transform(        \".\", kIdentity,       \"(\"          ),\n     new Transform(         \"\", kUppercaseAll,   \" \"          ),\n     new Transform(         \"\", kUppercaseFirst, \"\\\">\"        ),\n     new Transform(         \"\", kIdentity,       \"=\\\"\"        ),\n     new Transform(        \" \", kIdentity,       \".\"          ),\n     new Transform(    \".com/\", kIdentity,       \"\"           ),\n     new Transform(    \" the \", kIdentity,       \" of the \"   ),\n     new Transform(         \"\", kUppercaseFirst, \"'\"          ),\n     new Transform(         \"\", kIdentity,       \". This \"    ),\n     new Transform(         \"\", kIdentity,       \",\"          ),\n     new Transform(        \".\", kIdentity,       \" \"          ),\n     new Transform(         \"\", kUppercaseFirst, \"(\"          ),\n     new Transform(         \"\", kUppercaseFirst, \".\"          ),\n     new Transform(         \"\", kIdentity,       \" not \"      ),\n     new Transform(        \" \", kIdentity,       \"=\\\"\"        ),\n     new Transform(         \"\", kIdentity,       \"er \"        ),\n     new Transform(        \" \", kUppercaseAll,   \" \"          ),\n     new Transform(         \"\", kIdentity,       \"al \"        ),\n     new Transform(        \" \", kUppercaseAll,   \"\"           ),\n     new Transform(         \"\", kIdentity,       \"='\"         ),\n     new Transform(         \"\", kUppercaseAll,   \"\\\"\"         ),\n     new Transform(         \"\", kUppercaseFirst, \". \"         ),\n     new Transform(        \" \", kIdentity,       \"(\"          ),\n     new Transform(         \"\", kIdentity,       \"ful \"       ),\n     new Transform(        \" \", kUppercaseFirst, \". \"         ),\n     new Transform(         \"\", kIdentity,       \"ive \"       ),\n     new Transform(         \"\", kIdentity,       \"less \"      ),\n     new Transform(         \"\", kUppercaseAll,   \"'\"          ),\n     new Transform(         \"\", kIdentity,       \"est \"       ),\n     new Transform(        \" \", kUppercaseFirst, \".\"          ),\n     new Transform(         \"\", kUppercaseAll,   \"\\\">\"        ),\n     new Transform(        \" \", kIdentity,       \"='\"         ),\n     new Transform(         \"\", kUppercaseFirst, \",\"          ),\n     new Transform(         \"\", kIdentity,       \"ize \"       ),\n     new Transform(         \"\", kUppercaseAll,   \".\"          ),\n     new Transform( \"\\xc2\\xa0\", kIdentity,       \"\"           ),\n     new Transform(        \" \", kIdentity,       \",\"          ),\n     new Transform(         \"\", kUppercaseFirst, \"=\\\"\"        ),\n     new Transform(         \"\", kUppercaseAll,   \"=\\\"\"        ),\n     new Transform(         \"\", kIdentity,       \"ous \"       ),\n     new Transform(         \"\", kUppercaseAll,   \", \"         ),\n     new Transform(         \"\", kUppercaseFirst, \"='\"         ),\n     new Transform(        \" \", kUppercaseFirst, \",\"          ),\n     new Transform(        \" \", kUppercaseAll,   \"=\\\"\"        ),\n     new Transform(        \" \", kUppercaseAll,   \", \"         ),\n     new Transform(         \"\", kUppercaseAll,   \",\"          ),\n     new Transform(         \"\", kUppercaseAll,   \"(\"          ),\n     new Transform(         \"\", kUppercaseAll,   \". \"         ),\n     new Transform(        \" \", kUppercaseAll,   \".\"          ),\n     new Transform(         \"\", kUppercaseAll,   \"='\"         ),\n     new Transform(        \" \", kUppercaseAll,   \". \"         ),\n     new Transform(        \" \", kUppercaseFirst, \"=\\\"\"        ),\n     new Transform(        \" \", kUppercaseAll,   \"='\"         ),\n     new Transform(        \" \", kUppercaseFirst, \"='\"         )\n];\n\nexports.kTransforms = kTransforms;\nexports.kNumTransforms = kTransforms.length;\n\nfunction ToUpperCase(p, i) {\n  if (p[i] < 0xc0) {\n    if (p[i] >= 97 && p[i] <= 122) {\n      p[i] ^= 32;\n    }\n    return 1;\n  }\n  \n  /* An overly simplified uppercasing model for utf-8. */\n  if (p[i] < 0xe0) {\n    p[i + 1] ^= 32;\n    return 2;\n  }\n  \n  /* An arbitrary transform for three byte characters. */\n  p[i + 2] ^= 5;\n  return 3;\n}\n\nexports.transformDictionaryWord = function(dst, idx, word, len, transform) {\n  var prefix = kTransforms[transform].prefix;\n  var suffix = kTransforms[transform].suffix;\n  var t = kTransforms[transform].transform;\n  var skip = t < kOmitFirst1 ? 0 : t - (kOmitFirst1 - 1);\n  var i = 0;\n  var start_idx = idx;\n  var uppercase;\n  \n  if (skip > len) {\n    skip = len;\n  }\n  \n  var prefix_pos = 0;\n  while (prefix_pos < prefix.length) {\n    dst[idx++] = prefix[prefix_pos++];\n  }\n  \n  word += skip;\n  len -= skip;\n  \n  if (t <= kOmitLast9) {\n    len -= t;\n  }\n  \n  for (i = 0; i < len; i++) {\n    dst[idx++] = BrotliDictionary.dictionary[word + i];\n  }\n  \n  uppercase = idx - len;\n  \n  if (t === kUppercaseFirst) {\n    ToUpperCase(dst, uppercase);\n  } else if (t === kUppercaseAll) {\n    while (len > 0) {\n      var step = ToUpperCase(dst, uppercase);\n      uppercase += step;\n      len -= step;\n    }\n  }\n  \n  var suffix_pos = 0;\n  while (suffix_pos < suffix.length) {\n    dst[idx++] = suffix[suffix_pos++];\n  }\n  \n  return idx - start_idx;\n}\n","module.exports = require('./dec/decode').BrotliDecompressBuffer;\n","'use strict';\n/* eslint camelcase: \"off\" */\n\nvar assert = require('assert');\n\nvar Zstream = require('pako/lib/zlib/zstream');\nvar zlib_deflate = require('pako/lib/zlib/deflate.js');\nvar zlib_inflate = require('pako/lib/zlib/inflate.js');\nvar constants = require('pako/lib/zlib/constants');\n\nfor (var key in constants) {\n  exports[key] = constants[key];\n}\n\n// zlib modes\nexports.NONE = 0;\nexports.DEFLATE = 1;\nexports.INFLATE = 2;\nexports.GZIP = 3;\nexports.GUNZIP = 4;\nexports.DEFLATERAW = 5;\nexports.INFLATERAW = 6;\nexports.UNZIP = 7;\n\nvar GZIP_HEADER_ID1 = 0x1f;\nvar GZIP_HEADER_ID2 = 0x8b;\n\n/**\n * Emulate Node's zlib C++ layer for use by the JS layer in index.js\n */\nfunction Zlib(mode) {\n  if (typeof mode !== 'number' || mode < exports.DEFLATE || mode > exports.UNZIP) {\n    throw new TypeError('Bad argument');\n  }\n\n  this.dictionary = null;\n  this.err = 0;\n  this.flush = 0;\n  this.init_done = false;\n  this.level = 0;\n  this.memLevel = 0;\n  this.mode = mode;\n  this.strategy = 0;\n  this.windowBits = 0;\n  this.write_in_progress = false;\n  this.pending_close = false;\n  this.gzip_id_bytes_read = 0;\n}\n\nZlib.prototype.close = function () {\n  if (this.write_in_progress) {\n    this.pending_close = true;\n    return;\n  }\n\n  this.pending_close = false;\n\n  assert(this.init_done, 'close before init');\n  assert(this.mode <= exports.UNZIP);\n\n  if (this.mode === exports.DEFLATE || this.mode === exports.GZIP || this.mode === exports.DEFLATERAW) {\n    zlib_deflate.deflateEnd(this.strm);\n  } else if (this.mode === exports.INFLATE || this.mode === exports.GUNZIP || this.mode === exports.INFLATERAW || this.mode === exports.UNZIP) {\n    zlib_inflate.inflateEnd(this.strm);\n  }\n\n  this.mode = exports.NONE;\n\n  this.dictionary = null;\n};\n\nZlib.prototype.write = function (flush, input, in_off, in_len, out, out_off, out_len) {\n  return this._write(true, flush, input, in_off, in_len, out, out_off, out_len);\n};\n\nZlib.prototype.writeSync = function (flush, input, in_off, in_len, out, out_off, out_len) {\n  return this._write(false, flush, input, in_off, in_len, out, out_off, out_len);\n};\n\nZlib.prototype._write = function (async, flush, input, in_off, in_len, out, out_off, out_len) {\n  assert.equal(arguments.length, 8);\n\n  assert(this.init_done, 'write before init');\n  assert(this.mode !== exports.NONE, 'already finalized');\n  assert.equal(false, this.write_in_progress, 'write already in progress');\n  assert.equal(false, this.pending_close, 'close is pending');\n\n  this.write_in_progress = true;\n\n  assert.equal(false, flush === undefined, 'must provide flush value');\n\n  this.write_in_progress = true;\n\n  if (flush !== exports.Z_NO_FLUSH && flush !== exports.Z_PARTIAL_FLUSH && flush !== exports.Z_SYNC_FLUSH && flush !== exports.Z_FULL_FLUSH && flush !== exports.Z_FINISH && flush !== exports.Z_BLOCK) {\n    throw new Error('Invalid flush value');\n  }\n\n  if (input == null) {\n    input = Buffer.alloc(0);\n    in_len = 0;\n    in_off = 0;\n  }\n\n  this.strm.avail_in = in_len;\n  this.strm.input = input;\n  this.strm.next_in = in_off;\n  this.strm.avail_out = out_len;\n  this.strm.output = out;\n  this.strm.next_out = out_off;\n  this.flush = flush;\n\n  if (!async) {\n    // sync version\n    this._process();\n\n    if (this._checkError()) {\n      return this._afterSync();\n    }\n    return;\n  }\n\n  // async version\n  var self = this;\n  process.nextTick(function () {\n    self._process();\n    self._after();\n  });\n\n  return this;\n};\n\nZlib.prototype._afterSync = function () {\n  var avail_out = this.strm.avail_out;\n  var avail_in = this.strm.avail_in;\n\n  this.write_in_progress = false;\n\n  return [avail_in, avail_out];\n};\n\nZlib.prototype._process = function () {\n  var next_expected_header_byte = null;\n\n  // If the avail_out is left at 0, then it means that it ran out\n  // of room.  If there was avail_out left over, then it means\n  // that all of the input was consumed.\n  switch (this.mode) {\n    case exports.DEFLATE:\n    case exports.GZIP:\n    case exports.DEFLATERAW:\n      this.err = zlib_deflate.deflate(this.strm, this.flush);\n      break;\n    case exports.UNZIP:\n      if (this.strm.avail_in > 0) {\n        next_expected_header_byte = this.strm.next_in;\n      }\n\n      switch (this.gzip_id_bytes_read) {\n        case 0:\n          if (next_expected_header_byte === null) {\n            break;\n          }\n\n          if (this.strm.input[next_expected_header_byte] === GZIP_HEADER_ID1) {\n            this.gzip_id_bytes_read = 1;\n            next_expected_header_byte++;\n\n            if (this.strm.avail_in === 1) {\n              // The only available byte was already read.\n              break;\n            }\n          } else {\n            this.mode = exports.INFLATE;\n            break;\n          }\n\n        // fallthrough\n        case 1:\n          if (next_expected_header_byte === null) {\n            break;\n          }\n\n          if (this.strm.input[next_expected_header_byte] === GZIP_HEADER_ID2) {\n            this.gzip_id_bytes_read = 2;\n            this.mode = exports.GUNZIP;\n          } else {\n            // There is no actual difference between INFLATE and INFLATERAW\n            // (after initialization).\n            this.mode = exports.INFLATE;\n          }\n\n          break;\n        default:\n          throw new Error('invalid number of gzip magic number bytes read');\n      }\n\n    // fallthrough\n    case exports.INFLATE:\n    case exports.GUNZIP:\n    case exports.INFLATERAW:\n      this.err = zlib_inflate.inflate(this.strm, this.flush\n\n      // If data was encoded with dictionary\n      );if (this.err === exports.Z_NEED_DICT && this.dictionary) {\n        // Load it\n        this.err = zlib_inflate.inflateSetDictionary(this.strm, this.dictionary);\n        if (this.err === exports.Z_OK) {\n          // And try to decode again\n          this.err = zlib_inflate.inflate(this.strm, this.flush);\n        } else if (this.err === exports.Z_DATA_ERROR) {\n          // Both inflateSetDictionary() and inflate() return Z_DATA_ERROR.\n          // Make it possible for After() to tell a bad dictionary from bad\n          // input.\n          this.err = exports.Z_NEED_DICT;\n        }\n      }\n      while (this.strm.avail_in > 0 && this.mode === exports.GUNZIP && this.err === exports.Z_STREAM_END && this.strm.next_in[0] !== 0x00) {\n        // Bytes remain in input buffer. Perhaps this is another compressed\n        // member in the same archive, or just trailing garbage.\n        // Trailing zero bytes are okay, though, since they are frequently\n        // used for padding.\n\n        this.reset();\n        this.err = zlib_inflate.inflate(this.strm, this.flush);\n      }\n      break;\n    default:\n      throw new Error('Unknown mode ' + this.mode);\n  }\n};\n\nZlib.prototype._checkError = function () {\n  // Acceptable error states depend on the type of zlib stream.\n  switch (this.err) {\n    case exports.Z_OK:\n    case exports.Z_BUF_ERROR:\n      if (this.strm.avail_out !== 0 && this.flush === exports.Z_FINISH) {\n        this._error('unexpected end of file');\n        return false;\n      }\n      break;\n    case exports.Z_STREAM_END:\n      // normal statuses, not fatal\n      break;\n    case exports.Z_NEED_DICT:\n      if (this.dictionary == null) {\n        this._error('Missing dictionary');\n      } else {\n        this._error('Bad dictionary');\n      }\n      return false;\n    default:\n      // something else.\n      this._error('Zlib error');\n      return false;\n  }\n\n  return true;\n};\n\nZlib.prototype._after = function () {\n  if (!this._checkError()) {\n    return;\n  }\n\n  var avail_out = this.strm.avail_out;\n  var avail_in = this.strm.avail_in;\n\n  this.write_in_progress = false;\n\n  // call the write() cb\n  this.callback(avail_in, avail_out);\n\n  if (this.pending_close) {\n    this.close();\n  }\n};\n\nZlib.prototype._error = function (message) {\n  if (this.strm.msg) {\n    message = this.strm.msg;\n  }\n  this.onerror(message, this.err\n\n  // no hope of rescue.\n  );this.write_in_progress = false;\n  if (this.pending_close) {\n    this.close();\n  }\n};\n\nZlib.prototype.init = function (windowBits, level, memLevel, strategy, dictionary) {\n  assert(arguments.length === 4 || arguments.length === 5, 'init(windowBits, level, memLevel, strategy, [dictionary])');\n\n  assert(windowBits >= 8 && windowBits <= 15, 'invalid windowBits');\n  assert(level >= -1 && level <= 9, 'invalid compression level');\n\n  assert(memLevel >= 1 && memLevel <= 9, 'invalid memlevel');\n\n  assert(strategy === exports.Z_FILTERED || strategy === exports.Z_HUFFMAN_ONLY || strategy === exports.Z_RLE || strategy === exports.Z_FIXED || strategy === exports.Z_DEFAULT_STRATEGY, 'invalid strategy');\n\n  this._init(level, windowBits, memLevel, strategy, dictionary);\n  this._setDictionary();\n};\n\nZlib.prototype.params = function () {\n  throw new Error('deflateParams Not supported');\n};\n\nZlib.prototype.reset = function () {\n  this._reset();\n  this._setDictionary();\n};\n\nZlib.prototype._init = function (level, windowBits, memLevel, strategy, dictionary) {\n  this.level = level;\n  this.windowBits = windowBits;\n  this.memLevel = memLevel;\n  this.strategy = strategy;\n\n  this.flush = exports.Z_NO_FLUSH;\n\n  this.err = exports.Z_OK;\n\n  if (this.mode === exports.GZIP || this.mode === exports.GUNZIP) {\n    this.windowBits += 16;\n  }\n\n  if (this.mode === exports.UNZIP) {\n    this.windowBits += 32;\n  }\n\n  if (this.mode === exports.DEFLATERAW || this.mode === exports.INFLATERAW) {\n    this.windowBits = -1 * this.windowBits;\n  }\n\n  this.strm = new Zstream();\n\n  switch (this.mode) {\n    case exports.DEFLATE:\n    case exports.GZIP:\n    case exports.DEFLATERAW:\n      this.err = zlib_deflate.deflateInit2(this.strm, this.level, exports.Z_DEFLATED, this.windowBits, this.memLevel, this.strategy);\n      break;\n    case exports.INFLATE:\n    case exports.GUNZIP:\n    case exports.INFLATERAW:\n    case exports.UNZIP:\n      this.err = zlib_inflate.inflateInit2(this.strm, this.windowBits);\n      break;\n    default:\n      throw new Error('Unknown mode ' + this.mode);\n  }\n\n  if (this.err !== exports.Z_OK) {\n    this._error('Init error');\n  }\n\n  this.dictionary = dictionary;\n\n  this.write_in_progress = false;\n  this.init_done = true;\n};\n\nZlib.prototype._setDictionary = function () {\n  if (this.dictionary == null) {\n    return;\n  }\n\n  this.err = exports.Z_OK;\n\n  switch (this.mode) {\n    case exports.DEFLATE:\n    case exports.DEFLATERAW:\n      this.err = zlib_deflate.deflateSetDictionary(this.strm, this.dictionary);\n      break;\n    default:\n      break;\n  }\n\n  if (this.err !== exports.Z_OK) {\n    this._error('Failed to set dictionary');\n  }\n};\n\nZlib.prototype._reset = function () {\n  this.err = exports.Z_OK;\n\n  switch (this.mode) {\n    case exports.DEFLATE:\n    case exports.DEFLATERAW:\n    case exports.GZIP:\n      this.err = zlib_deflate.deflateReset(this.strm);\n      break;\n    case exports.INFLATE:\n    case exports.INFLATERAW:\n    case exports.GUNZIP:\n      this.err = zlib_inflate.inflateReset(this.strm);\n      break;\n    default:\n      break;\n  }\n\n  if (this.err !== exports.Z_OK) {\n    this._error('Failed to reset stream');\n  }\n};\n\nexports.Zlib = Zlib;","'use strict';\n\nvar Buffer = require('buffer').Buffer;\nvar Transform = require('stream').Transform;\nvar binding = require('./binding');\nvar util = require('util');\nvar assert = require('assert').ok;\nvar kMaxLength = require('buffer').kMaxLength;\nvar kRangeErrorMessage = 'Cannot create final Buffer. It would be larger ' + 'than 0x' + kMaxLength.toString(16) + ' bytes';\n\n// zlib doesn't provide these, so kludge them in following the same\n// const naming scheme zlib uses.\nbinding.Z_MIN_WINDOWBITS = 8;\nbinding.Z_MAX_WINDOWBITS = 15;\nbinding.Z_DEFAULT_WINDOWBITS = 15;\n\n// fewer than 64 bytes per chunk is stupid.\n// technically it could work with as few as 8, but even 64 bytes\n// is absurdly low.  Usually a MB or more is best.\nbinding.Z_MIN_CHUNK = 64;\nbinding.Z_MAX_CHUNK = Infinity;\nbinding.Z_DEFAULT_CHUNK = 16 * 1024;\n\nbinding.Z_MIN_MEMLEVEL = 1;\nbinding.Z_MAX_MEMLEVEL = 9;\nbinding.Z_DEFAULT_MEMLEVEL = 8;\n\nbinding.Z_MIN_LEVEL = -1;\nbinding.Z_MAX_LEVEL = 9;\nbinding.Z_DEFAULT_LEVEL = binding.Z_DEFAULT_COMPRESSION;\n\n// expose all the zlib constants\nvar bkeys = Object.keys(binding);\nfor (var bk = 0; bk < bkeys.length; bk++) {\n  var bkey = bkeys[bk];\n  if (bkey.match(/^Z/)) {\n    Object.defineProperty(exports, bkey, {\n      enumerable: true, value: binding[bkey], writable: false\n    });\n  }\n}\n\n// translation table for return codes.\nvar codes = {\n  Z_OK: binding.Z_OK,\n  Z_STREAM_END: binding.Z_STREAM_END,\n  Z_NEED_DICT: binding.Z_NEED_DICT,\n  Z_ERRNO: binding.Z_ERRNO,\n  Z_STREAM_ERROR: binding.Z_STREAM_ERROR,\n  Z_DATA_ERROR: binding.Z_DATA_ERROR,\n  Z_MEM_ERROR: binding.Z_MEM_ERROR,\n  Z_BUF_ERROR: binding.Z_BUF_ERROR,\n  Z_VERSION_ERROR: binding.Z_VERSION_ERROR\n};\n\nvar ckeys = Object.keys(codes);\nfor (var ck = 0; ck < ckeys.length; ck++) {\n  var ckey = ckeys[ck];\n  codes[codes[ckey]] = ckey;\n}\n\nObject.defineProperty(exports, 'codes', {\n  enumerable: true, value: Object.freeze(codes), writable: false\n});\n\nexports.Deflate = Deflate;\nexports.Inflate = Inflate;\nexports.Gzip = Gzip;\nexports.Gunzip = Gunzip;\nexports.DeflateRaw = DeflateRaw;\nexports.InflateRaw = InflateRaw;\nexports.Unzip = Unzip;\n\nexports.createDeflate = function (o) {\n  return new Deflate(o);\n};\n\nexports.createInflate = function (o) {\n  return new Inflate(o);\n};\n\nexports.createDeflateRaw = function (o) {\n  return new DeflateRaw(o);\n};\n\nexports.createInflateRaw = function (o) {\n  return new InflateRaw(o);\n};\n\nexports.createGzip = function (o) {\n  return new Gzip(o);\n};\n\nexports.createGunzip = function (o) {\n  return new Gunzip(o);\n};\n\nexports.createUnzip = function (o) {\n  return new Unzip(o);\n};\n\n// Convenience methods.\n// compress/decompress a string or buffer in one step.\nexports.deflate = function (buffer, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  return zlibBuffer(new Deflate(opts), buffer, callback);\n};\n\nexports.deflateSync = function (buffer, opts) {\n  return zlibBufferSync(new Deflate(opts), buffer);\n};\n\nexports.gzip = function (buffer, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  return zlibBuffer(new Gzip(opts), buffer, callback);\n};\n\nexports.gzipSync = function (buffer, opts) {\n  return zlibBufferSync(new Gzip(opts), buffer);\n};\n\nexports.deflateRaw = function (buffer, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  return zlibBuffer(new DeflateRaw(opts), buffer, callback);\n};\n\nexports.deflateRawSync = function (buffer, opts) {\n  return zlibBufferSync(new DeflateRaw(opts), buffer);\n};\n\nexports.unzip = function (buffer, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  return zlibBuffer(new Unzip(opts), buffer, callback);\n};\n\nexports.unzipSync = function (buffer, opts) {\n  return zlibBufferSync(new Unzip(opts), buffer);\n};\n\nexports.inflate = function (buffer, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  return zlibBuffer(new Inflate(opts), buffer, callback);\n};\n\nexports.inflateSync = function (buffer, opts) {\n  return zlibBufferSync(new Inflate(opts), buffer);\n};\n\nexports.gunzip = function (buffer, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  return zlibBuffer(new Gunzip(opts), buffer, callback);\n};\n\nexports.gunzipSync = function (buffer, opts) {\n  return zlibBufferSync(new Gunzip(opts), buffer);\n};\n\nexports.inflateRaw = function (buffer, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  return zlibBuffer(new InflateRaw(opts), buffer, callback);\n};\n\nexports.inflateRawSync = function (buffer, opts) {\n  return zlibBufferSync(new InflateRaw(opts), buffer);\n};\n\nfunction zlibBuffer(engine, buffer, callback) {\n  var buffers = [];\n  var nread = 0;\n\n  engine.on('error', onError);\n  engine.on('end', onEnd);\n\n  engine.end(buffer);\n  flow();\n\n  function flow() {\n    var chunk;\n    while (null !== (chunk = engine.read())) {\n      buffers.push(chunk);\n      nread += chunk.length;\n    }\n    engine.once('readable', flow);\n  }\n\n  function onError(err) {\n    engine.removeListener('end', onEnd);\n    engine.removeListener('readable', flow);\n    callback(err);\n  }\n\n  function onEnd() {\n    var buf;\n    var err = null;\n\n    if (nread >= kMaxLength) {\n      err = new RangeError(kRangeErrorMessage);\n    } else {\n      buf = Buffer.concat(buffers, nread);\n    }\n\n    buffers = [];\n    engine.close();\n    callback(err, buf);\n  }\n}\n\nfunction zlibBufferSync(engine, buffer) {\n  if (typeof buffer === 'string') buffer = Buffer.from(buffer);\n\n  if (!Buffer.isBuffer(buffer)) throw new TypeError('Not a string or buffer');\n\n  var flushFlag = engine._finishFlushFlag;\n\n  return engine._processChunk(buffer, flushFlag);\n}\n\n// generic zlib\n// minimal 2-byte header\nfunction Deflate(opts) {\n  if (!(this instanceof Deflate)) return new Deflate(opts);\n  Zlib.call(this, opts, binding.DEFLATE);\n}\n\nfunction Inflate(opts) {\n  if (!(this instanceof Inflate)) return new Inflate(opts);\n  Zlib.call(this, opts, binding.INFLATE);\n}\n\n// gzip - bigger header, same deflate compression\nfunction Gzip(opts) {\n  if (!(this instanceof Gzip)) return new Gzip(opts);\n  Zlib.call(this, opts, binding.GZIP);\n}\n\nfunction Gunzip(opts) {\n  if (!(this instanceof Gunzip)) return new Gunzip(opts);\n  Zlib.call(this, opts, binding.GUNZIP);\n}\n\n// raw - no header\nfunction DeflateRaw(opts) {\n  if (!(this instanceof DeflateRaw)) return new DeflateRaw(opts);\n  Zlib.call(this, opts, binding.DEFLATERAW);\n}\n\nfunction InflateRaw(opts) {\n  if (!(this instanceof InflateRaw)) return new InflateRaw(opts);\n  Zlib.call(this, opts, binding.INFLATERAW);\n}\n\n// auto-detect header.\nfunction Unzip(opts) {\n  if (!(this instanceof Unzip)) return new Unzip(opts);\n  Zlib.call(this, opts, binding.UNZIP);\n}\n\nfunction isValidFlushFlag(flag) {\n  return flag === binding.Z_NO_FLUSH || flag === binding.Z_PARTIAL_FLUSH || flag === binding.Z_SYNC_FLUSH || flag === binding.Z_FULL_FLUSH || flag === binding.Z_FINISH || flag === binding.Z_BLOCK;\n}\n\n// the Zlib class they all inherit from\n// This thing manages the queue of requests, and returns\n// true or false if there is anything in the queue when\n// you call the .write() method.\n\nfunction Zlib(opts, mode) {\n  var _this = this;\n\n  this._opts = opts = opts || {};\n  this._chunkSize = opts.chunkSize || exports.Z_DEFAULT_CHUNK;\n\n  Transform.call(this, opts);\n\n  if (opts.flush && !isValidFlushFlag(opts.flush)) {\n    throw new Error('Invalid flush flag: ' + opts.flush);\n  }\n  if (opts.finishFlush && !isValidFlushFlag(opts.finishFlush)) {\n    throw new Error('Invalid flush flag: ' + opts.finishFlush);\n  }\n\n  this._flushFlag = opts.flush || binding.Z_NO_FLUSH;\n  this._finishFlushFlag = typeof opts.finishFlush !== 'undefined' ? opts.finishFlush : binding.Z_FINISH;\n\n  if (opts.chunkSize) {\n    if (opts.chunkSize < exports.Z_MIN_CHUNK || opts.chunkSize > exports.Z_MAX_CHUNK) {\n      throw new Error('Invalid chunk size: ' + opts.chunkSize);\n    }\n  }\n\n  if (opts.windowBits) {\n    if (opts.windowBits < exports.Z_MIN_WINDOWBITS || opts.windowBits > exports.Z_MAX_WINDOWBITS) {\n      throw new Error('Invalid windowBits: ' + opts.windowBits);\n    }\n  }\n\n  if (opts.level) {\n    if (opts.level < exports.Z_MIN_LEVEL || opts.level > exports.Z_MAX_LEVEL) {\n      throw new Error('Invalid compression level: ' + opts.level);\n    }\n  }\n\n  if (opts.memLevel) {\n    if (opts.memLevel < exports.Z_MIN_MEMLEVEL || opts.memLevel > exports.Z_MAX_MEMLEVEL) {\n      throw new Error('Invalid memLevel: ' + opts.memLevel);\n    }\n  }\n\n  if (opts.strategy) {\n    if (opts.strategy != exports.Z_FILTERED && opts.strategy != exports.Z_HUFFMAN_ONLY && opts.strategy != exports.Z_RLE && opts.strategy != exports.Z_FIXED && opts.strategy != exports.Z_DEFAULT_STRATEGY) {\n      throw new Error('Invalid strategy: ' + opts.strategy);\n    }\n  }\n\n  if (opts.dictionary) {\n    if (!Buffer.isBuffer(opts.dictionary)) {\n      throw new Error('Invalid dictionary: it should be a Buffer instance');\n    }\n  }\n\n  this._handle = new binding.Zlib(mode);\n\n  var self = this;\n  this._hadError = false;\n  this._handle.onerror = function (message, errno) {\n    // there is no way to cleanly recover.\n    // continuing only obscures problems.\n    _close(self);\n    self._hadError = true;\n\n    var error = new Error(message);\n    error.errno = errno;\n    error.code = exports.codes[errno];\n    self.emit('error', error);\n  };\n\n  var level = exports.Z_DEFAULT_COMPRESSION;\n  if (typeof opts.level === 'number') level = opts.level;\n\n  var strategy = exports.Z_DEFAULT_STRATEGY;\n  if (typeof opts.strategy === 'number') strategy = opts.strategy;\n\n  this._handle.init(opts.windowBits || exports.Z_DEFAULT_WINDOWBITS, level, opts.memLevel || exports.Z_DEFAULT_MEMLEVEL, strategy, opts.dictionary);\n\n  this._buffer = Buffer.allocUnsafe(this._chunkSize);\n  this._offset = 0;\n  this._level = level;\n  this._strategy = strategy;\n\n  this.once('end', this.close);\n\n  Object.defineProperty(this, '_closed', {\n    get: function () {\n      return !_this._handle;\n    },\n    configurable: true,\n    enumerable: true\n  });\n}\n\nutil.inherits(Zlib, Transform);\n\nZlib.prototype.params = function (level, strategy, callback) {\n  if (level < exports.Z_MIN_LEVEL || level > exports.Z_MAX_LEVEL) {\n    throw new RangeError('Invalid compression level: ' + level);\n  }\n  if (strategy != exports.Z_FILTERED && strategy != exports.Z_HUFFMAN_ONLY && strategy != exports.Z_RLE && strategy != exports.Z_FIXED && strategy != exports.Z_DEFAULT_STRATEGY) {\n    throw new TypeError('Invalid strategy: ' + strategy);\n  }\n\n  if (this._level !== level || this._strategy !== strategy) {\n    var self = this;\n    this.flush(binding.Z_SYNC_FLUSH, function () {\n      assert(self._handle, 'zlib binding closed');\n      self._handle.params(level, strategy);\n      if (!self._hadError) {\n        self._level = level;\n        self._strategy = strategy;\n        if (callback) callback();\n      }\n    });\n  } else {\n    process.nextTick(callback);\n  }\n};\n\nZlib.prototype.reset = function () {\n  assert(this._handle, 'zlib binding closed');\n  return this._handle.reset();\n};\n\n// This is the _flush function called by the transform class,\n// internally, when the last chunk has been written.\nZlib.prototype._flush = function (callback) {\n  this._transform(Buffer.alloc(0), '', callback);\n};\n\nZlib.prototype.flush = function (kind, callback) {\n  var _this2 = this;\n\n  var ws = this._writableState;\n\n  if (typeof kind === 'function' || kind === undefined && !callback) {\n    callback = kind;\n    kind = binding.Z_FULL_FLUSH;\n  }\n\n  if (ws.ended) {\n    if (callback) process.nextTick(callback);\n  } else if (ws.ending) {\n    if (callback) this.once('end', callback);\n  } else if (ws.needDrain) {\n    if (callback) {\n      this.once('drain', function () {\n        return _this2.flush(kind, callback);\n      });\n    }\n  } else {\n    this._flushFlag = kind;\n    this.write(Buffer.alloc(0), '', callback);\n  }\n};\n\nZlib.prototype.close = function (callback) {\n  _close(this, callback);\n  process.nextTick(emitCloseNT, this);\n};\n\nfunction _close(engine, callback) {\n  if (callback) process.nextTick(callback);\n\n  // Caller may invoke .close after a zlib error (which will null _handle).\n  if (!engine._handle) return;\n\n  engine._handle.close();\n  engine._handle = null;\n}\n\nfunction emitCloseNT(self) {\n  self.emit('close');\n}\n\nZlib.prototype._transform = function (chunk, encoding, cb) {\n  var flushFlag;\n  var ws = this._writableState;\n  var ending = ws.ending || ws.ended;\n  var last = ending && (!chunk || ws.length === chunk.length);\n\n  if (chunk !== null && !Buffer.isBuffer(chunk)) return cb(new Error('invalid input'));\n\n  if (!this._handle) return cb(new Error('zlib binding closed'));\n\n  // If it's the last chunk, or a final flush, we use the Z_FINISH flush flag\n  // (or whatever flag was provided using opts.finishFlush).\n  // If it's explicitly flushing at some other time, then we use\n  // Z_FULL_FLUSH. Otherwise, use Z_NO_FLUSH for maximum compression\n  // goodness.\n  if (last) flushFlag = this._finishFlushFlag;else {\n    flushFlag = this._flushFlag;\n    // once we've flushed the last of the queue, stop flushing and\n    // go back to the normal behavior.\n    if (chunk.length >= ws.length) {\n      this._flushFlag = this._opts.flush || binding.Z_NO_FLUSH;\n    }\n  }\n\n  this._processChunk(chunk, flushFlag, cb);\n};\n\nZlib.prototype._processChunk = function (chunk, flushFlag, cb) {\n  var availInBefore = chunk && chunk.length;\n  var availOutBefore = this._chunkSize - this._offset;\n  var inOff = 0;\n\n  var self = this;\n\n  var async = typeof cb === 'function';\n\n  if (!async) {\n    var buffers = [];\n    var nread = 0;\n\n    var error;\n    this.on('error', function (er) {\n      error = er;\n    });\n\n    assert(this._handle, 'zlib binding closed');\n    do {\n      var res = this._handle.writeSync(flushFlag, chunk, // in\n      inOff, // in_off\n      availInBefore, // in_len\n      this._buffer, // out\n      this._offset, //out_off\n      availOutBefore); // out_len\n    } while (!this._hadError && callback(res[0], res[1]));\n\n    if (this._hadError) {\n      throw error;\n    }\n\n    if (nread >= kMaxLength) {\n      _close(this);\n      throw new RangeError(kRangeErrorMessage);\n    }\n\n    var buf = Buffer.concat(buffers, nread);\n    _close(this);\n\n    return buf;\n  }\n\n  assert(this._handle, 'zlib binding closed');\n  var req = this._handle.write(flushFlag, chunk, // in\n  inOff, // in_off\n  availInBefore, // in_len\n  this._buffer, // out\n  this._offset, //out_off\n  availOutBefore); // out_len\n\n  req.buffer = chunk;\n  req.callback = callback;\n\n  function callback(availInAfter, availOutAfter) {\n    // When the callback is used in an async write, the callback's\n    // context is the `req` object that was created. The req object\n    // is === this._handle, and that's why it's important to null\n    // out the values after they are done being used. `this._handle`\n    // can stay in memory longer than the callback and buffer are needed.\n    if (this) {\n      this.buffer = null;\n      this.callback = null;\n    }\n\n    if (self._hadError) return;\n\n    var have = availOutBefore - availOutAfter;\n    assert(have >= 0, 'have should not go down');\n\n    if (have > 0) {\n      var out = self._buffer.slice(self._offset, self._offset + have);\n      self._offset += have;\n      // serve some output to the consumer.\n      if (async) {\n        self.push(out);\n      } else {\n        buffers.push(out);\n        nread += out.length;\n      }\n    }\n\n    // exhausted the output buffer, or used all the input create a new one.\n    if (availOutAfter === 0 || self._offset >= self._chunkSize) {\n      availOutBefore = self._chunkSize;\n      self._offset = 0;\n      self._buffer = Buffer.allocUnsafe(self._chunkSize);\n    }\n\n    if (availOutAfter === 0) {\n      // Not actually done.  Need to reprocess.\n      // Also, update the availInBefore to the availInAfter value,\n      // so that if we have to hit it a third (fourth, etc.) time,\n      // it'll have the correct byte counts.\n      inOff += availInBefore - availInAfter;\n      availInBefore = availInAfter;\n\n      if (!async) return true;\n\n      var newReq = self._handle.write(flushFlag, chunk, inOff, availInBefore, self._buffer, self._offset, self._chunkSize);\n      newReq.callback = callback; // this same function\n      newReq.buffer = chunk;\n      return;\n    }\n\n    if (!async) return false;\n\n    // finished with the chunk.\n    cb();\n  }\n};\n\nutil.inherits(Deflate, Zlib);\nutil.inherits(Inflate, Zlib);\nutil.inherits(Gzip, Zlib);\nutil.inherits(Gunzip, Zlib);\nutil.inherits(DeflateRaw, Zlib);\nutil.inherits(InflateRaw, Zlib);\nutil.inherits(Unzip, Zlib);","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n","'use strict';\n\nvar bind = require('function-bind');\nvar GetIntrinsic = require('get-intrinsic');\nvar setFunctionLength = require('set-function-length');\n\nvar $TypeError = require('es-errors/type');\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $defineProperty = require('es-define-property');\nvar $max = GetIntrinsic('%Math.max%');\n\nmodule.exports = function callBind(originalFunction) {\n\tif (typeof originalFunction !== 'function') {\n\t\tthrow new $TypeError('a function is required');\n\t}\n\tvar func = $reflectApply(bind, $call, arguments);\n\treturn setFunctionLength(\n\t\tfunc,\n\t\t1 + $max(0, originalFunction.length - (arguments.length - 1)),\n\t\ttrue\n\t);\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n","var clone = (function() {\n'use strict';\n\n/**\n * Clones (copies) an Object using deep copying.\n *\n * This function supports circular references by default, but if you are certain\n * there are no circular references in your object, you can save some CPU time\n * by calling clone(obj, false).\n *\n * Caution: if `circular` is false and `parent` contains circular references,\n * your program may enter an infinite loop and crash.\n *\n * @param `parent` - the object to be cloned\n * @param `circular` - set to true if the object to be cloned may contain\n *    circular references. (optional - true by default)\n * @param `depth` - set to a number if the object is only to be cloned to\n *    a particular depth. (optional - defaults to Infinity)\n * @param `prototype` - sets the prototype to be used when cloning an object.\n *    (optional - defaults to parent prototype).\n*/\nfunction clone(parent, circular, depth, prototype) {\n  var filter;\n  if (typeof circular === 'object') {\n    depth = circular.depth;\n    prototype = circular.prototype;\n    filter = circular.filter;\n    circular = circular.circular\n  }\n  // maintain two arrays for circular references, where corresponding parents\n  // and children have the same index\n  var allParents = [];\n  var allChildren = [];\n\n  var useBuffer = typeof Buffer != 'undefined';\n\n  if (typeof circular == 'undefined')\n    circular = true;\n\n  if (typeof depth == 'undefined')\n    depth = Infinity;\n\n  // recurse this function so we don't reset allParents and allChildren\n  function _clone(parent, depth) {\n    // cloning null always returns null\n    if (parent === null)\n      return null;\n\n    if (depth == 0)\n      return parent;\n\n    var child;\n    var proto;\n    if (typeof parent != 'object') {\n      return parent;\n    }\n\n    if (clone.__isArray(parent)) {\n      child = [];\n    } else if (clone.__isRegExp(parent)) {\n      child = new RegExp(parent.source, __getRegExpFlags(parent));\n      if (parent.lastIndex) child.lastIndex = parent.lastIndex;\n    } else if (clone.__isDate(parent)) {\n      child = new Date(parent.getTime());\n    } else if (useBuffer && Buffer.isBuffer(parent)) {\n      if (Buffer.allocUnsafe) {\n        // Node.js >= 4.5.0\n        child = Buffer.allocUnsafe(parent.length);\n      } else {\n        // Older Node.js versions\n        child = new Buffer(parent.length);\n      }\n      parent.copy(child);\n      return child;\n    } else {\n      if (typeof prototype == 'undefined') {\n        proto = Object.getPrototypeOf(parent);\n        child = Object.create(proto);\n      }\n      else {\n        child = Object.create(prototype);\n        proto = prototype;\n      }\n    }\n\n    if (circular) {\n      var index = allParents.indexOf(parent);\n\n      if (index != -1) {\n        return allChildren[index];\n      }\n      allParents.push(parent);\n      allChildren.push(child);\n    }\n\n    for (var i in parent) {\n      var attrs;\n      if (proto) {\n        attrs = Object.getOwnPropertyDescriptor(proto, i);\n      }\n\n      if (attrs && attrs.set == null) {\n        continue;\n      }\n      child[i] = _clone(parent[i], depth - 1);\n    }\n\n    return child;\n  }\n\n  return _clone(parent, depth);\n}\n\n/**\n * Simple flat clone using prototype, accepts only objects, usefull for property\n * override on FLAT configuration object (no nested props).\n *\n * USE WITH CAUTION! This may not behave as you wish if you do not know how this\n * works.\n */\nclone.clonePrototype = function clonePrototype(parent) {\n  if (parent === null)\n    return null;\n\n  var c = function () {};\n  c.prototype = parent;\n  return new c();\n};\n\n// private utility functions\n\nfunction __objToStr(o) {\n  return Object.prototype.toString.call(o);\n};\nclone.__objToStr = __objToStr;\n\nfunction __isDate(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object Date]';\n};\nclone.__isDate = __isDate;\n\nfunction __isArray(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object Array]';\n};\nclone.__isArray = __isArray;\n\nfunction __isRegExp(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object RegExp]';\n};\nclone.__isRegExp = __isRegExp;\n\nfunction __getRegExpFlags(re) {\n  var flags = '';\n  if (re.global) flags += 'g';\n  if (re.ignoreCase) flags += 'i';\n  if (re.multiline) flags += 'm';\n  return flags;\n};\nclone.__getRegExpFlags = __getRegExpFlags;\n\nreturn clone;\n})();\n\nif (typeof module === 'object' && module.exports) {\n  module.exports = clone;\n}\n","require('../../modules/es.object.values');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.values;\n","require('../../modules/es.aggregate-error');\nrequire('../../modules/es.array.iterator');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.promise');\nrequire('../../modules/es.promise.all-settled');\nrequire('../../modules/es.promise.any');\nrequire('../../modules/es.promise.finally');\nrequire('../../modules/es.string.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Promise;\n","var parent = require('../../stable/promise');\nrequire('../../modules/esnext.aggregate-error');\n// TODO: Remove from `core-js@4`\nrequire('../../modules/esnext.promise.all-settled');\nrequire('../../modules/esnext.promise.try');\nrequire('../../modules/esnext.promise.any');\n\nmodule.exports = parent;\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n  if (isCallable(argument)) return argument;\n  throw TypeError(tryToString(argument) + ' is not a function');\n};\n","var global = require('../internals/global');\nvar isConstructor = require('../internals/is-constructor');\nvar tryToString = require('../internals/try-to-string');\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsConstructor(argument) is true`\nmodule.exports = function (argument) {\n  if (isConstructor(argument)) return argument;\n  throw TypeError(tryToString(argument) + ' is not a constructor');\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument) {\n  if (typeof argument == 'object' || isCallable(argument)) return argument;\n  throw TypeError(\"Can't set \" + String(argument) + ' as a prototype');\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar definePropertyModule = require('../internals/object-define-property');\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n  definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n    configurable: true,\n    value: create(null)\n  });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n  ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\n\n// `AdvanceStringIndex` abstract operation\n// https://tc39.es/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n  return index + (unicode ? charAt(S, index).length : 1);\n};\n","var global = require('../internals/global');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (it, Prototype) {\n  if (isPrototypeOf(Prototype, it)) return it;\n  throw TypeError('Incorrect invocation');\n};\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n  if (isObject(argument)) return argument;\n  throw TypeError(String(argument) + ' is not an object');\n};\n","'use strict';\nvar toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\nvar min = Math.min;\n\n// `Array.prototype.copyWithin` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.copywithin\n// eslint-disable-next-line es/no-array-prototype-copywithin -- safe\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n  var O = toObject(this);\n  var len = lengthOfArrayLike(O);\n  var to = toAbsoluteIndex(target, len);\n  var from = toAbsoluteIndex(start, len);\n  var end = arguments.length > 2 ? arguments[2] : undefined;\n  var count = min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n  var inc = 1;\n  if (from < to && to < from + count) {\n    inc = -1;\n    from += count - 1;\n    to += count - 1;\n  }\n  while (count-- > 0) {\n    if (from in O) O[to] = O[from];\n    else delete O[to];\n    to += inc;\n    from += inc;\n  } return O;\n};\n","'use strict';\nvar toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.fill` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.fill\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n  var O = toObject(this);\n  var length = lengthOfArrayLike(O);\n  var argumentsLength = arguments.length;\n  var index = toAbsoluteIndex(argumentsLength > 1 ? arguments[1] : undefined, length);\n  var end = argumentsLength > 2 ? arguments[2] : undefined;\n  var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n  while (endPos > index) O[index++] = value;\n  return O;\n};\n","'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\nmodule.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {\n  return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n} : [].forEach;\n","module.exports = function (Constructor, list) {\n  var index = 0;\n  var length = list.length;\n  var result = new Constructor(length);\n  while (length > index) result[index] = list[index++];\n  return result;\n};\n","'use strict';\nvar global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar toObject = require('../internals/to-object');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar isConstructor = require('../internals/is-constructor');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar Array = global.Array;\n\n// `Array.from` method implementation\n// https://tc39.es/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n  var O = toObject(arrayLike);\n  var IS_CONSTRUCTOR = isConstructor(this);\n  var argumentsLength = arguments.length;\n  var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n  var mapping = mapfn !== undefined;\n  if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined);\n  var iteratorMethod = getIteratorMethod(O);\n  var index = 0;\n  var length, result, step, iterator, next, value;\n  // if the target is not iterable or it's an array with the default iterator - use a simple case\n  if (iteratorMethod && !(this == Array && isArrayIteratorMethod(iteratorMethod))) {\n    iterator = getIterator(O, iteratorMethod);\n    next = iterator.next;\n    result = IS_CONSTRUCTOR ? new this() : [];\n    for (;!(step = call(next, iterator)).done; index++) {\n      value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\n      createProperty(result, index, value);\n    }\n  } else {\n    length = lengthOfArrayLike(O);\n    result = IS_CONSTRUCTOR ? new this(length) : Array(length);\n    for (;length > index; index++) {\n      value = mapping ? mapfn(O[index], index) : O[index];\n      createProperty(result, index, value);\n    }\n  }\n  result.length = index;\n  return result;\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIndexedObject($this);\n    var length = lengthOfArrayLike(O);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare -- NaN check\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare -- NaN check\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) {\n      if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.includes` method\n  // https://tc39.es/ecma262/#sec-array.prototype.includes\n  includes: createMethod(true),\n  // `Array.prototype.indexOf` method\n  // https://tc39.es/ecma262/#sec-array.prototype.indexof\n  indexOf: createMethod(false)\n};\n","var bind = require('../internals/function-bind-context');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = uncurryThis([].push);\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation\nvar createMethod = function (TYPE) {\n  var IS_MAP = TYPE == 1;\n  var IS_FILTER = TYPE == 2;\n  var IS_SOME = TYPE == 3;\n  var IS_EVERY = TYPE == 4;\n  var IS_FIND_INDEX = TYPE == 6;\n  var IS_FILTER_REJECT = TYPE == 7;\n  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n  return function ($this, callbackfn, that, specificCreate) {\n    var O = toObject($this);\n    var self = IndexedObject(O);\n    var boundFunction = bind(callbackfn, that);\n    var length = lengthOfArrayLike(self);\n    var index = 0;\n    var create = specificCreate || arraySpeciesCreate;\n    var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;\n    var value, result;\n    for (;length > index; index++) if (NO_HOLES || index in self) {\n      value = self[index];\n      result = boundFunction(value, index, O);\n      if (TYPE) {\n        if (IS_MAP) target[index] = result; // map\n        else if (result) switch (TYPE) {\n          case 3: return true;              // some\n          case 5: return value;             // find\n          case 6: return index;             // findIndex\n          case 2: push(target, value);      // filter\n        } else switch (TYPE) {\n          case 4: return false;             // every\n          case 7: push(target, value);      // filterReject\n        }\n      }\n    }\n    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.forEach` method\n  // https://tc39.es/ecma262/#sec-array.prototype.foreach\n  forEach: createMethod(0),\n  // `Array.prototype.map` method\n  // https://tc39.es/ecma262/#sec-array.prototype.map\n  map: createMethod(1),\n  // `Array.prototype.filter` method\n  // https://tc39.es/ecma262/#sec-array.prototype.filter\n  filter: createMethod(2),\n  // `Array.prototype.some` method\n  // https://tc39.es/ecma262/#sec-array.prototype.some\n  some: createMethod(3),\n  // `Array.prototype.every` method\n  // https://tc39.es/ecma262/#sec-array.prototype.every\n  every: createMethod(4),\n  // `Array.prototype.find` method\n  // https://tc39.es/ecma262/#sec-array.prototype.find\n  find: createMethod(5),\n  // `Array.prototype.findIndex` method\n  // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n  findIndex: createMethod(6),\n  // `Array.prototype.filterReject` method\n  // https://github.com/tc39/proposal-array-filtering\n  filterReject: createMethod(7)\n};\n","'use strict';\n/* eslint-disable es/no-array-prototype-lastindexof -- safe */\nvar apply = require('../internals/function-apply');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar min = Math.min;\nvar $lastIndexOf = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$lastIndexOf && 1 / [1].lastIndexOf(1, -0) < 0;\nvar STRICT_METHOD = arrayMethodIsStrict('lastIndexOf');\nvar FORCED = NEGATIVE_ZERO || !STRICT_METHOD;\n\n// `Array.prototype.lastIndexOf` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.lastindexof\nmodule.exports = FORCED ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n  // convert -0 to +0\n  if (NEGATIVE_ZERO) return apply($lastIndexOf, this, arguments) || 0;\n  var O = toIndexedObject(this);\n  var length = lengthOfArrayLike(O);\n  var index = length - 1;\n  if (arguments.length > 1) index = min(index, toIntegerOrInfinity(arguments[1]));\n  if (index < 0) index = length + index;\n  for (;index >= 0; index--) if (index in O && O[index] === searchElement) return index || 0;\n  return -1;\n} : $lastIndexOf;\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n  // We can't use this feature detection in V8 since it causes\n  // deoptimization and serious performance degradation\n  // https://github.com/zloirock/core-js/issues/677\n  return V8_VERSION >= 51 || !fails(function () {\n    var array = [];\n    var constructor = array.constructor = {};\n    constructor[SPECIES] = function () {\n      return { foo: 1 };\n    };\n    return array[METHOD_NAME](Boolean).foo !== 1;\n  });\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = function (METHOD_NAME, argument) {\n  var method = [][METHOD_NAME];\n  return !!method && fails(function () {\n    // eslint-disable-next-line no-useless-call,no-throw-literal -- required for testing\n    method.call(null, argument || function () { throw 1; }, 1);\n  });\n};\n","var global = require('../internals/global');\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\nvar TypeError = global.TypeError;\n\n// `Array.prototype.{ reduce, reduceRight }` methods implementation\nvar createMethod = function (IS_RIGHT) {\n  return function (that, callbackfn, argumentsLength, memo) {\n    aCallable(callbackfn);\n    var O = toObject(that);\n    var self = IndexedObject(O);\n    var length = lengthOfArrayLike(O);\n    var index = IS_RIGHT ? length - 1 : 0;\n    var i = IS_RIGHT ? -1 : 1;\n    if (argumentsLength < 2) while (true) {\n      if (index in self) {\n        memo = self[index];\n        index += i;\n        break;\n      }\n      index += i;\n      if (IS_RIGHT ? index < 0 : length <= index) {\n        throw TypeError('Reduce of empty array with no initial value');\n      }\n    }\n    for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {\n      memo = callbackfn(memo, self[index], index, O);\n    }\n    return memo;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.reduce` method\n  // https://tc39.es/ecma262/#sec-array.prototype.reduce\n  left: createMethod(false),\n  // `Array.prototype.reduceRight` method\n  // https://tc39.es/ecma262/#sec-array.prototype.reduceright\n  right: createMethod(true)\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis([].slice);\n","var arraySlice = require('../internals/array-slice');\n\nvar floor = Math.floor;\n\nvar mergeSort = function (array, comparefn) {\n  var length = array.length;\n  var middle = floor(length / 2);\n  return length < 8 ? insertionSort(array, comparefn) : merge(\n    array,\n    mergeSort(arraySlice(array, 0, middle), comparefn),\n    mergeSort(arraySlice(array, middle), comparefn),\n    comparefn\n  );\n};\n\nvar insertionSort = function (array, comparefn) {\n  var length = array.length;\n  var i = 1;\n  var element, j;\n\n  while (i < length) {\n    j = i;\n    element = array[i];\n    while (j && comparefn(array[j - 1], element) > 0) {\n      array[j] = array[--j];\n    }\n    if (j !== i++) array[j] = element;\n  } return array;\n};\n\nvar merge = function (array, left, right, comparefn) {\n  var llength = left.length;\n  var rlength = right.length;\n  var lindex = 0;\n  var rindex = 0;\n\n  while (lindex < llength || rindex < rlength) {\n    array[lindex + rindex] = (lindex < llength && rindex < rlength)\n      ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]\n      : lindex < llength ? left[lindex++] : right[rindex++];\n  } return array;\n};\n\nmodule.exports = mergeSort;\n","var global = require('../internals/global');\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\nvar Array = global.Array;\n\n// a part of `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray) {\n  var C;\n  if (isArray(originalArray)) {\n    C = originalArray.constructor;\n    // cross-realm fallback\n    if (isConstructor(C) && (C === Array || isArray(C.prototype))) C = undefined;\n    else if (isObject(C)) {\n      C = C[SPECIES];\n      if (C === null) C = undefined;\n    }\n  } return C === undefined ? Array : C;\n};\n","var arraySpeciesConstructor = require('../internals/array-species-constructor');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n  return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);\n};\n","var anObject = require('../internals/an-object');\nvar iteratorClose = require('../internals/iterator-close');\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n  try {\n    return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n  } catch (error) {\n    iteratorClose(iterator, 'throw', error);\n  }\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n  var called = 0;\n  var iteratorWithReturn = {\n    next: function () {\n      return { done: !!called++ };\n    },\n    'return': function () {\n      SAFE_CLOSING = true;\n    }\n  };\n  iteratorWithReturn[ITERATOR] = function () {\n    return this;\n  };\n  // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing\n  Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n  if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n  var ITERATION_SUPPORT = false;\n  try {\n    var object = {};\n    object[ITERATOR] = function () {\n      return {\n        next: function () {\n          return { done: ITERATION_SUPPORT = true };\n        }\n      };\n    };\n    exec(object);\n  } catch (error) { /* empty */ }\n  return ITERATION_SUPPORT;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n  return stringSlice(toString(it), 8, -1);\n};\n","var global = require('../internals/global');\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar Object = global.Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n  var O, tag, result;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n    // builtinTag case\n    : CORRECT_ARGUMENTS ? classofRaw(O)\n    // ES3 arguments fallback\n    : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar arraySlice = require('../internals/array-slice');\n\nvar replace = uncurryThis(''.replace);\nvar split = uncurryThis(''.split);\nvar join = uncurryThis([].join);\n\nvar TEST = (function (arg) { return String(Error(arg).stack); })('zxcasd');\nvar V8_OR_CHAKRA_STACK_ENTRY = /\\n\\s*at [^:]*:[^\\n]*/;\nvar IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);\nvar IS_FIREFOX_OR_SAFARI_STACK = /@[^\\n]*\\n/.test(TEST) && !/zxcasd/.test(TEST);\n\nmodule.exports = function (stack, dropEntries) {\n  if (typeof stack != 'string') return stack;\n  if (IS_V8_OR_CHAKRA_STACK) {\n    while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, '');\n  } else if (IS_FIREFOX_OR_SAFARI_STACK) {\n    return join(arraySlice(split(stack, '\\n'), dropEntries), '\\n');\n  } return stack;\n};\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\nvar create = require('../internals/object-create');\nvar redefineAll = require('../internals/redefine-all');\nvar bind = require('../internals/function-bind-context');\nvar anInstance = require('../internals/an-instance');\nvar iterate = require('../internals/iterate');\nvar defineIterator = require('../internals/define-iterator');\nvar setSpecies = require('../internals/set-species');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fastKey = require('../internals/internal-metadata').fastKey;\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n  getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n    var Constructor = wrapper(function (that, iterable) {\n      anInstance(that, Prototype);\n      setInternalState(that, {\n        type: CONSTRUCTOR_NAME,\n        index: create(null),\n        first: undefined,\n        last: undefined,\n        size: 0\n      });\n      if (!DESCRIPTORS) that.size = 0;\n      if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n    });\n\n    var Prototype = Constructor.prototype;\n\n    var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n    var define = function (that, key, value) {\n      var state = getInternalState(that);\n      var entry = getEntry(that, key);\n      var previous, index;\n      // change existing entry\n      if (entry) {\n        entry.value = value;\n      // create new entry\n      } else {\n        state.last = entry = {\n          index: index = fastKey(key, true),\n          key: key,\n          value: value,\n          previous: previous = state.last,\n          next: undefined,\n          removed: false\n        };\n        if (!state.first) state.first = entry;\n        if (previous) previous.next = entry;\n        if (DESCRIPTORS) state.size++;\n        else that.size++;\n        // add to index\n        if (index !== 'F') state.index[index] = entry;\n      } return that;\n    };\n\n    var getEntry = function (that, key) {\n      var state = getInternalState(that);\n      // fast case\n      var index = fastKey(key);\n      var entry;\n      if (index !== 'F') return state.index[index];\n      // frozen object case\n      for (entry = state.first; entry; entry = entry.next) {\n        if (entry.key == key) return entry;\n      }\n    };\n\n    redefineAll(Prototype, {\n      // `{ Map, Set }.prototype.clear()` methods\n      // https://tc39.es/ecma262/#sec-map.prototype.clear\n      // https://tc39.es/ecma262/#sec-set.prototype.clear\n      clear: function clear() {\n        var that = this;\n        var state = getInternalState(that);\n        var data = state.index;\n        var entry = state.first;\n        while (entry) {\n          entry.removed = true;\n          if (entry.previous) entry.previous = entry.previous.next = undefined;\n          delete data[entry.index];\n          entry = entry.next;\n        }\n        state.first = state.last = undefined;\n        if (DESCRIPTORS) state.size = 0;\n        else that.size = 0;\n      },\n      // `{ Map, Set }.prototype.delete(key)` methods\n      // https://tc39.es/ecma262/#sec-map.prototype.delete\n      // https://tc39.es/ecma262/#sec-set.prototype.delete\n      'delete': function (key) {\n        var that = this;\n        var state = getInternalState(that);\n        var entry = getEntry(that, key);\n        if (entry) {\n          var next = entry.next;\n          var prev = entry.previous;\n          delete state.index[entry.index];\n          entry.removed = true;\n          if (prev) prev.next = next;\n          if (next) next.previous = prev;\n          if (state.first == entry) state.first = next;\n          if (state.last == entry) state.last = prev;\n          if (DESCRIPTORS) state.size--;\n          else that.size--;\n        } return !!entry;\n      },\n      // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods\n      // https://tc39.es/ecma262/#sec-map.prototype.foreach\n      // https://tc39.es/ecma262/#sec-set.prototype.foreach\n      forEach: function forEach(callbackfn /* , that = undefined */) {\n        var state = getInternalState(this);\n        var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n        var entry;\n        while (entry = entry ? entry.next : state.first) {\n          boundFunction(entry.value, entry.key, this);\n          // revert to the last existing entry\n          while (entry && entry.removed) entry = entry.previous;\n        }\n      },\n      // `{ Map, Set}.prototype.has(key)` methods\n      // https://tc39.es/ecma262/#sec-map.prototype.has\n      // https://tc39.es/ecma262/#sec-set.prototype.has\n      has: function has(key) {\n        return !!getEntry(this, key);\n      }\n    });\n\n    redefineAll(Prototype, IS_MAP ? {\n      // `Map.prototype.get(key)` method\n      // https://tc39.es/ecma262/#sec-map.prototype.get\n      get: function get(key) {\n        var entry = getEntry(this, key);\n        return entry && entry.value;\n      },\n      // `Map.prototype.set(key, value)` method\n      // https://tc39.es/ecma262/#sec-map.prototype.set\n      set: function set(key, value) {\n        return define(this, key === 0 ? 0 : key, value);\n      }\n    } : {\n      // `Set.prototype.add(value)` method\n      // https://tc39.es/ecma262/#sec-set.prototype.add\n      add: function add(value) {\n        return define(this, value = value === 0 ? 0 : value, value);\n      }\n    });\n    if (DESCRIPTORS) defineProperty(Prototype, 'size', {\n      get: function () {\n        return getInternalState(this).size;\n      }\n    });\n    return Constructor;\n  },\n  setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) {\n    var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n    var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n    var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n    // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods\n    // https://tc39.es/ecma262/#sec-map.prototype.entries\n    // https://tc39.es/ecma262/#sec-map.prototype.keys\n    // https://tc39.es/ecma262/#sec-map.prototype.values\n    // https://tc39.es/ecma262/#sec-map.prototype-@@iterator\n    // https://tc39.es/ecma262/#sec-set.prototype.entries\n    // https://tc39.es/ecma262/#sec-set.prototype.keys\n    // https://tc39.es/ecma262/#sec-set.prototype.values\n    // https://tc39.es/ecma262/#sec-set.prototype-@@iterator\n    defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) {\n      setInternalState(this, {\n        type: ITERATOR_NAME,\n        target: iterated,\n        state: getInternalCollectionState(iterated),\n        kind: kind,\n        last: undefined\n      });\n    }, function () {\n      var state = getInternalIteratorState(this);\n      var kind = state.kind;\n      var entry = state.last;\n      // revert to the last existing entry\n      while (entry && entry.removed) entry = entry.previous;\n      // get next entry\n      if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n        // or finish the iteration\n        state.target = undefined;\n        return { value: undefined, done: true };\n      }\n      // return step by kind\n      if (kind == 'keys') return { value: entry.key, done: false };\n      if (kind == 'values') return { value: entry.value, done: false };\n      return { value: [entry.key, entry.value], done: false };\n    }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n    // `{ Map, Set }.prototype[@@species]` accessors\n    // https://tc39.es/ecma262/#sec-get-map-@@species\n    // https://tc39.es/ecma262/#sec-get-set-@@species\n    setSpecies(CONSTRUCTOR_NAME);\n  }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar iterate = require('../internals/iterate');\nvar anInstance = require('../internals/an-instance');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar fails = require('../internals/fails');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar inheritIfRequired = require('../internals/inherit-if-required');\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common) {\n  var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\n  var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\n  var ADDER = IS_MAP ? 'set' : 'add';\n  var NativeConstructor = global[CONSTRUCTOR_NAME];\n  var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n  var Constructor = NativeConstructor;\n  var exported = {};\n\n  var fixMethod = function (KEY) {\n    var uncurriedNativeMethod = uncurryThis(NativePrototype[KEY]);\n    redefine(NativePrototype, KEY,\n      KEY == 'add' ? function add(value) {\n        uncurriedNativeMethod(this, value === 0 ? 0 : value);\n        return this;\n      } : KEY == 'delete' ? function (key) {\n        return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n      } : KEY == 'get' ? function get(key) {\n        return IS_WEAK && !isObject(key) ? undefined : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n      } : KEY == 'has' ? function has(key) {\n        return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n      } : function set(key, value) {\n        uncurriedNativeMethod(this, key === 0 ? 0 : key, value);\n        return this;\n      }\n    );\n  };\n\n  var REPLACE = isForced(\n    CONSTRUCTOR_NAME,\n    !isCallable(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails(function () {\n      new NativeConstructor().entries().next();\n    }))\n  );\n\n  if (REPLACE) {\n    // create collection constructor\n    Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n    InternalMetadataModule.enable();\n  } else if (isForced(CONSTRUCTOR_NAME, true)) {\n    var instance = new Constructor();\n    // early implementations not supports chaining\n    var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n    // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n    var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n    // most early implementations doesn't supports iterables, most modern - not close it correctly\n    // eslint-disable-next-line no-new -- required for testing\n    var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });\n    // for early implementations -0 and +0 not the same\n    var BUGGY_ZERO = !IS_WEAK && fails(function () {\n      // V8 ~ Chromium 42- fails only with 5+ elements\n      var $instance = new NativeConstructor();\n      var index = 5;\n      while (index--) $instance[ADDER](index, index);\n      return !$instance.has(-0);\n    });\n\n    if (!ACCEPT_ITERABLES) {\n      Constructor = wrapper(function (dummy, iterable) {\n        anInstance(dummy, NativePrototype);\n        var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);\n        if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n        return that;\n      });\n      Constructor.prototype = NativePrototype;\n      NativePrototype.constructor = Constructor;\n    }\n\n    if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n      fixMethod('delete');\n      fixMethod('has');\n      IS_MAP && fixMethod('get');\n    }\n\n    if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n\n    // weak collections should not contains .clear method\n    if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;\n  }\n\n  exported[CONSTRUCTOR_NAME] = Constructor;\n  $({ global: true, forced: Constructor != NativeConstructor }, exported);\n\n  setToStringTag(Constructor, CONSTRUCTOR_NAME);\n\n  if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n  return Constructor;\n};\n","var hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source) {\n  var keys = ownKeys(source);\n  var defineProperty = definePropertyModule.f;\n  var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    if (!hasOwn(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n  }\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\nmodule.exports = function (METHOD_NAME) {\n  var regexp = /./;\n  try {\n    '/./'[METHOD_NAME](regexp);\n  } catch (error1) {\n    try {\n      regexp[MATCH] = false;\n      return '/./'[METHOD_NAME](regexp);\n    } catch (error2) { /* empty */ }\n  } return false;\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n  function F() { /* empty */ }\n  F.prototype.constructor = null;\n  // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n  return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\n\nvar quot = /\"/g;\nvar replace = uncurryThis(''.replace);\n\n// `CreateHTML` abstract operation\n// https://tc39.es/ecma262/#sec-createhtml\nmodule.exports = function (string, tag, attribute, value) {\n  var S = toString(requireObjectCoercible(string));\n  var p1 = '<' + tag;\n  if (attribute !== '') p1 += ' ' + attribute + '=\"' + replace(toString(value), quot, '&quot;') + '\"';\n  return p1 + '>' + S + '</' + tag + '>';\n};\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next) {\n  var TO_STRING_TAG = NAME + ' Iterator';\n  IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });\n  setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n  Iterators[TO_STRING_TAG] = returnThis;\n  return IteratorConstructor;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n  return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n","module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n","'use strict';\nvar toPropertyKey = require('../internals/to-property-key');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n  var propertyKey = toPropertyKey(key);\n  if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n  else object[propertyKey] = value;\n};\n","'use strict';\nvar global = require('../internals/global');\nvar anObject = require('../internals/an-object');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\n\nvar TypeError = global.TypeError;\n\n// `Date.prototype[@@toPrimitive](hint)` method implementation\n// https://tc39.es/ecma262/#sec-date.prototype-@@toprimitive\nmodule.exports = function (hint) {\n  anObject(this);\n  if (hint === 'string' || hint === 'default') hint = 'string';\n  else if (hint !== 'number') throw TypeError('Incorrect hint');\n  return ordinaryToPrimitive(this, hint);\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar IS_PURE = require('../internals/is-pure');\nvar FunctionName = require('../internals/function-name');\nvar isCallable = require('../internals/is-callable');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n  createIteratorConstructor(IteratorConstructor, NAME, next);\n\n  var getIterationMethod = function (KIND) {\n    if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n    if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n    switch (KIND) {\n      case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n      case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n      case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n    } return function () { return new IteratorConstructor(this); };\n  };\n\n  var TO_STRING_TAG = NAME + ' Iterator';\n  var INCORRECT_VALUES_NAME = false;\n  var IterablePrototype = Iterable.prototype;\n  var nativeIterator = IterablePrototype[ITERATOR]\n    || IterablePrototype['@@iterator']\n    || DEFAULT && IterablePrototype[DEFAULT];\n  var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n  var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n  var CurrentIteratorPrototype, methods, KEY;\n\n  // fix native\n  if (anyNativeIterator) {\n    CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n    if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n      if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n        if (setPrototypeOf) {\n          setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n        } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n          redefine(CurrentIteratorPrototype, ITERATOR, returnThis);\n        }\n      }\n      // Set @@toStringTag to native iterators\n      setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n      if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n    }\n  }\n\n  // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n  if (PROPER_FUNCTION_NAME && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n    if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n      createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\n    } else {\n      INCORRECT_VALUES_NAME = true;\n      defaultIterator = function values() { return call(nativeIterator, this); };\n    }\n  }\n\n  // export additional methods\n  if (DEFAULT) {\n    methods = {\n      values: getIterationMethod(VALUES),\n      keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n      entries: getIterationMethod(ENTRIES)\n    };\n    if (FORCED) for (KEY in methods) {\n      if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n        redefine(IterablePrototype, KEY, methods[KEY]);\n      }\n    } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n  }\n\n  // define iterator\n  if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n    redefine(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n  }\n  Iterators[NAME] = defaultIterator;\n\n  return methods;\n};\n","var path = require('../internals/path');\nvar hasOwn = require('../internals/has-own-property');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (NAME) {\n  var Symbol = path.Symbol || (path.Symbol = {});\n  if (!hasOwn(Symbol, NAME)) defineProperty(Symbol, NAME, {\n    value: wrappedWellKnownSymbolModule.f(NAME)\n  });\n};\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n  return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n  return EXISTS ? document.createElement(it) : {};\n};\n","// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n  CSSRuleList: 0,\n  CSSStyleDeclaration: 0,\n  CSSValueList: 0,\n  ClientRectList: 0,\n  DOMRectList: 0,\n  DOMStringList: 0,\n  DOMTokenList: 1,\n  DataTransferItemList: 0,\n  FileList: 0,\n  HTMLAllCollection: 0,\n  HTMLCollection: 0,\n  HTMLFormElement: 0,\n  HTMLSelectElement: 0,\n  MediaList: 0,\n  MimeTypeArray: 0,\n  NamedNodeMap: 0,\n  NodeList: 1,\n  PaintRequestList: 0,\n  Plugin: 0,\n  PluginArray: 0,\n  SVGLengthList: 0,\n  SVGNumberList: 0,\n  SVGPathSegList: 0,\n  SVGPointList: 0,\n  SVGStringList: 0,\n  SVGTransformList: 0,\n  SourceBufferList: 0,\n  StyleSheetList: 0,\n  TextTrackCueList: 0,\n  TextTrackList: 0,\n  TouchList: 0\n};\n","// in old WebKit versions, `element.classList` is not an instance of global `DOMTokenList`\nvar documentCreateElement = require('../internals/document-create-element');\n\nvar classList = documentCreateElement('span').classList;\nvar DOMTokenListPrototype = classList && classList.constructor && classList.constructor.prototype;\n\nmodule.exports = DOMTokenListPrototype === Object.prototype ? undefined : DOMTokenListPrototype;\n","var userAgent = require('../internals/engine-user-agent');\n\nvar firefox = userAgent.match(/firefox\\/(\\d+)/i);\n\nmodule.exports = !!firefox && +firefox[1];\n","module.exports = typeof window == 'object';\n","var UA = require('../internals/engine-user-agent');\n\nmodule.exports = /MSIE|Trident/.test(UA);\n","var userAgent = require('../internals/engine-user-agent');\nvar global = require('../internals/global');\n\nmodule.exports = /ipad|iphone|ipod/i.test(userAgent) && global.Pebble !== undefined;\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent);\n","var classof = require('../internals/classof-raw');\nvar global = require('../internals/global');\n\nmodule.exports = classof(global.process) == 'process';\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /web0s(?!.*chrome)/i.test(userAgent);\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n  match = v8.split('.');\n  // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n  // but their correct versions are not interesting for us\n  version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n  match = userAgent.match(/Edge\\/(\\d+)/);\n  if (!match || match[1] >= 74) {\n    match = userAgent.match(/Chrome\\/(\\d+)/);\n    if (match) version = +match[1];\n  }\n}\n\nmodule.exports = version;\n","var userAgent = require('../internals/engine-user-agent');\n\nvar webkit = userAgent.match(/AppleWebKit\\/(\\d+)\\./);\n\nmodule.exports = !!webkit && +webkit[1];\n","// IE8- don't enum bug keys\nmodule.exports = [\n  'constructor',\n  'hasOwnProperty',\n  'isPrototypeOf',\n  'propertyIsEnumerable',\n  'toLocaleString',\n  'toString',\n  'valueOf'\n];\n","var fails = require('../internals/fails');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = !fails(function () {\n  var error = Error('a');\n  if (!('stack' in error)) return true;\n  // eslint-disable-next-line es/no-object-defineproperty -- safe\n  Object.defineProperty(error, 'stack', createPropertyDescriptor(1, 7));\n  return error.stack !== 7;\n});\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n  options.target      - name of the target object\n  options.global      - target is the global object\n  options.stat        - export as static methods of target\n  options.proto       - export as prototype methods of target\n  options.real        - real prototype method for the `pure` version\n  options.forced      - export even if the native feature is available\n  options.bind        - bind methods to the target, required for the `pure` version\n  options.wrap        - wrap constructors to preventing global pollution, required for the `pure` version\n  options.unsafe      - use the simple assignment of property instead of delete + defineProperty\n  options.sham        - add a flag to not completely full polyfills\n  options.enumerable  - export as enumerable property\n  options.noTargetGet - prevent calling a getter on target\n  options.name        - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n  var TARGET = options.target;\n  var GLOBAL = options.global;\n  var STATIC = options.stat;\n  var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n  if (GLOBAL) {\n    target = global;\n  } else if (STATIC) {\n    target = global[TARGET] || setGlobal(TARGET, {});\n  } else {\n    target = (global[TARGET] || {}).prototype;\n  }\n  if (target) for (key in source) {\n    sourceProperty = source[key];\n    if (options.noTargetGet) {\n      descriptor = getOwnPropertyDescriptor(target, key);\n      targetProperty = descriptor && descriptor.value;\n    } else targetProperty = target[key];\n    FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n    // contained in target\n    if (!FORCED && targetProperty !== undefined) {\n      if (typeof sourceProperty == typeof targetProperty) continue;\n      copyConstructorProperties(sourceProperty, targetProperty);\n    }\n    // add a flag to not completely full polyfills\n    if (options.sham || (targetProperty && targetProperty.sham)) {\n      createNonEnumerableProperty(sourceProperty, 'sham', true);\n    }\n    // extend global\n    redefine(target, key, sourceProperty, options);\n  }\n};\n","module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (error) {\n    return true;\n  }\n};\n","'use strict';\n// TODO: Remove from `core-js@4` since it's moved to entry points\nrequire('../modules/es.regexp.exec');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar redefine = require('../internals/redefine');\nvar regexpExec = require('../internals/regexp-exec');\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar SPECIES = wellKnownSymbol('species');\nvar RegExpPrototype = RegExp.prototype;\n\nmodule.exports = function (KEY, exec, FORCED, SHAM) {\n  var SYMBOL = wellKnownSymbol(KEY);\n\n  var DELEGATES_TO_SYMBOL = !fails(function () {\n    // String methods call symbol-named RegEp methods\n    var O = {};\n    O[SYMBOL] = function () { return 7; };\n    return ''[KEY](O) != 7;\n  });\n\n  var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {\n    // Symbol-named RegExp methods call .exec\n    var execCalled = false;\n    var re = /a/;\n\n    if (KEY === 'split') {\n      // We can't use real regex here since it causes deoptimization\n      // and serious performance degradation in V8\n      // https://github.com/zloirock/core-js/issues/306\n      re = {};\n      // RegExp[@@split] doesn't call the regex's exec method, but first creates\n      // a new one. We need to return the patched regex when creating the new one.\n      re.constructor = {};\n      re.constructor[SPECIES] = function () { return re; };\n      re.flags = '';\n      re[SYMBOL] = /./[SYMBOL];\n    }\n\n    re.exec = function () { execCalled = true; return null; };\n\n    re[SYMBOL]('');\n    return !execCalled;\n  });\n\n  if (\n    !DELEGATES_TO_SYMBOL ||\n    !DELEGATES_TO_EXEC ||\n    FORCED\n  ) {\n    var uncurriedNativeRegExpMethod = uncurryThis(/./[SYMBOL]);\n    var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n      var uncurriedNativeMethod = uncurryThis(nativeMethod);\n      var $exec = regexp.exec;\n      if ($exec === regexpExec || $exec === RegExpPrototype.exec) {\n        if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n          // The native String method already delegates to @@method (this\n          // polyfilled function), leasing to infinite recursion.\n          // We avoid it by directly calling the native @@method method.\n          return { done: true, value: uncurriedNativeRegExpMethod(regexp, str, arg2) };\n        }\n        return { done: true, value: uncurriedNativeMethod(str, regexp, arg2) };\n      }\n      return { done: false };\n    });\n\n    redefine(String.prototype, KEY, methods[0]);\n    redefine(RegExpPrototype, SYMBOL, methods[1]);\n  }\n\n  if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], 'sham', true);\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n  // eslint-disable-next-line es/no-object-isextensible, es/no-object-preventextensions -- required for testing\n  return Object.isExtensible(Object.preventExtensions({}));\n});\n","var FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (bind ? call.bind(apply) : function () {\n  return call.apply(apply, arguments);\n});\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n  aCallable(fn);\n  return that === undefined ? fn : bind ? bind(fn, that) : function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n","'use strict';\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar arraySlice = require('../internals/array-slice');\n\nvar Function = global.Function;\nvar concat = uncurryThis([].concat);\nvar join = uncurryThis([].join);\nvar factories = {};\n\nvar construct = function (C, argsLength, args) {\n  if (!hasOwn(factories, argsLength)) {\n    for (var list = [], i = 0; i < argsLength; i++) list[i] = 'a[' + i + ']';\n    factories[argsLength] = Function('C,a', 'return new C(' + join(list, ',') + ')');\n  } return factories[argsLength](C, args);\n};\n\n// `Function.prototype.bind` method implementation\n// https://tc39.es/ecma262/#sec-function.prototype.bind\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n  var F = aCallable(this);\n  var Prototype = F.prototype;\n  var partArgs = arraySlice(arguments, 1);\n  var boundFunction = function bound(/* args... */) {\n    var args = concat(partArgs, arraySlice(arguments));\n    return this instanceof boundFunction ? construct(F, args.length, args) : F.apply(that, args);\n  };\n  if (isObject(Prototype)) boundFunction.prototype = Prototype;\n  return boundFunction;\n};\n","var call = Function.prototype.call;\n\nmodule.exports = call.bind ? call.bind(call) : function () {\n  return call.apply(call, arguments);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n  EXISTS: EXISTS,\n  PROPER: PROPER,\n  CONFIGURABLE: CONFIGURABLE\n};\n","var FunctionPrototype = Function.prototype;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\nvar callBind = bind && bind.bind(call);\n\nmodule.exports = bind ? function (fn) {\n  return fn && callBind(call, fn);\n} : function (fn) {\n  return fn && function () {\n    return call.apply(fn, arguments);\n  };\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n  return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n  return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n","var classof = require('../internals/classof');\nvar getMethod = require('../internals/get-method');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n  if (it != undefined) return getMethod(it, ITERATOR)\n    || getMethod(it, '@@iterator')\n    || Iterators[classof(it)];\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument, usingIterator) {\n  var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n  if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\n  throw TypeError(tryToString(argument) + ' is not iterable');\n};\n","var aCallable = require('../internals/a-callable');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n  var func = V[P];\n  return func == null ? undefined : aCallable(func);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar floor = Math.floor;\nvar charAt = uncurryThis(''.charAt);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d{1,2}|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d{1,2})/g;\n\n// `GetSubstitution` abstract operation\n// https://tc39.es/ecma262/#sec-getsubstitution\nmodule.exports = function (matched, str, position, captures, namedCaptures, replacement) {\n  var tailPos = position + matched.length;\n  var m = captures.length;\n  var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n  if (namedCaptures !== undefined) {\n    namedCaptures = toObject(namedCaptures);\n    symbols = SUBSTITUTION_SYMBOLS;\n  }\n  return replace(replacement, symbols, function (match, ch) {\n    var capture;\n    switch (charAt(ch, 0)) {\n      case '$': return '$';\n      case '&': return matched;\n      case '`': return stringSlice(str, 0, position);\n      case \"'\": return stringSlice(str, tailPos);\n      case '<':\n        capture = namedCaptures[stringSlice(ch, 1, -1)];\n        break;\n      default: // \\d\\d?\n        var n = +ch;\n        if (n === 0) return match;\n        if (n > m) {\n          var f = floor(n / 10);\n          if (f === 0) return match;\n          if (f <= m) return captures[f - 1] === undefined ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1);\n          return match;\n        }\n        capture = captures[n - 1];\n    }\n    return capture === undefined ? '' : capture;\n  });\n};\n","var check = function (it) {\n  return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n  // eslint-disable-next-line es/no-global-this -- safe\n  check(typeof globalThis == 'object' && globalThis) ||\n  check(typeof window == 'object' && window) ||\n  // eslint-disable-next-line no-restricted-globals -- safe\n  check(typeof self == 'object' && self) ||\n  check(typeof global == 'object' && global) ||\n  // eslint-disable-next-line no-new-func -- fallback\n  (function () { return this; })() || Function('return this')();\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n  return hasOwnProperty(toObject(it), key);\n};\n","module.exports = {};\n","var global = require('../internals/global');\n\nmodule.exports = function (a, b) {\n  var console = global.console;\n  if (console && console.error) {\n    arguments.length == 1 ? console.error(a) : console.error(a, b);\n  }\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- requied for testing\n  return Object.defineProperty(createElement('div'), 'a', {\n    get: function () { return 7; }\n  }).a != 7;\n});\n","// IEEE754 conversions based on https://github.com/feross/ieee754\nvar global = require('../internals/global');\n\nvar Array = global.Array;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\n\nvar pack = function (number, mantissaLength, bytes) {\n  var buffer = Array(bytes);\n  var exponentLength = bytes * 8 - mantissaLength - 1;\n  var eMax = (1 << exponentLength) - 1;\n  var eBias = eMax >> 1;\n  var rt = mantissaLength === 23 ? pow(2, -24) - pow(2, -77) : 0;\n  var sign = number < 0 || number === 0 && 1 / number < 0 ? 1 : 0;\n  var index = 0;\n  var exponent, mantissa, c;\n  number = abs(number);\n  // eslint-disable-next-line no-self-compare -- NaN check\n  if (number != number || number === Infinity) {\n    // eslint-disable-next-line no-self-compare -- NaN check\n    mantissa = number != number ? 1 : 0;\n    exponent = eMax;\n  } else {\n    exponent = floor(log(number) / LN2);\n    if (number * (c = pow(2, -exponent)) < 1) {\n      exponent--;\n      c *= 2;\n    }\n    if (exponent + eBias >= 1) {\n      number += rt / c;\n    } else {\n      number += rt * pow(2, 1 - eBias);\n    }\n    if (number * c >= 2) {\n      exponent++;\n      c /= 2;\n    }\n    if (exponent + eBias >= eMax) {\n      mantissa = 0;\n      exponent = eMax;\n    } else if (exponent + eBias >= 1) {\n      mantissa = (number * c - 1) * pow(2, mantissaLength);\n      exponent = exponent + eBias;\n    } else {\n      mantissa = number * pow(2, eBias - 1) * pow(2, mantissaLength);\n      exponent = 0;\n    }\n  }\n  for (; mantissaLength >= 8; buffer[index++] = mantissa & 255, mantissa /= 256, mantissaLength -= 8);\n  exponent = exponent << mantissaLength | mantissa;\n  exponentLength += mantissaLength;\n  for (; exponentLength > 0; buffer[index++] = exponent & 255, exponent /= 256, exponentLength -= 8);\n  buffer[--index] |= sign * 128;\n  return buffer;\n};\n\nvar unpack = function (buffer, mantissaLength) {\n  var bytes = buffer.length;\n  var exponentLength = bytes * 8 - mantissaLength - 1;\n  var eMax = (1 << exponentLength) - 1;\n  var eBias = eMax >> 1;\n  var nBits = exponentLength - 7;\n  var index = bytes - 1;\n  var sign = buffer[index--];\n  var exponent = sign & 127;\n  var mantissa;\n  sign >>= 7;\n  for (; nBits > 0; exponent = exponent * 256 + buffer[index], index--, nBits -= 8);\n  mantissa = exponent & (1 << -nBits) - 1;\n  exponent >>= -nBits;\n  nBits += mantissaLength;\n  for (; nBits > 0; mantissa = mantissa * 256 + buffer[index], index--, nBits -= 8);\n  if (exponent === 0) {\n    exponent = 1 - eBias;\n  } else if (exponent === eMax) {\n    return mantissa ? NaN : sign ? -Infinity : Infinity;\n  } else {\n    mantissa = mantissa + pow(2, mantissaLength);\n    exponent = exponent - eBias;\n  } return (sign ? -1 : 1) * mantissa * pow(2, exponent - mantissaLength);\n};\n\nmodule.exports = {\n  pack: pack,\n  unpack: unpack\n};\n","var global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar Object = global.Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n  // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n  // eslint-disable-next-line no-prototype-builtins -- safe\n  return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n  return classof(it) == 'String' ? split(it, '') : Object(it);\n} : Object;\n","var isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n  var NewTarget, NewTargetPrototype;\n  if (\n    // it can work only with native `setPrototypeOf`\n    setPrototypeOf &&\n    // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n    isCallable(NewTarget = dummy.constructor) &&\n    NewTarget !== Wrapper &&\n    isObject(NewTargetPrototype = NewTarget.prototype) &&\n    NewTargetPrototype !== Wrapper.prototype\n  ) setPrototypeOf($this, NewTargetPrototype);\n  return $this;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n  store.inspectSource = function (it) {\n    return functionToString(it);\n  };\n}\n\nmodule.exports = store.inspectSource;\n","var isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\n// `InstallErrorCause` abstract operation\n// https://tc39.es/proposal-error-cause/#sec-errorobjects-install-error-cause\nmodule.exports = function (O, options) {\n  if (isObject(options) && 'cause' in options) {\n    createNonEnumerableProperty(O, 'cause', options.cause);\n  }\n};\n","var $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternalModule = require('../internals/object-get-own-property-names-external');\nvar uid = require('../internals/uid');\nvar FREEZING = require('../internals/freezing');\n\nvar REQUIRED = false;\nvar METADATA = uid('meta');\nvar id = 0;\n\n// eslint-disable-next-line es/no-object-isextensible -- safe\nvar isExtensible = Object.isExtensible || function () {\n  return true;\n};\n\nvar setMetadata = function (it) {\n  defineProperty(it, METADATA, { value: {\n    objectID: 'O' + id++, // object ID\n    weakData: {}          // weak collections IDs\n  } });\n};\n\nvar fastKey = function (it, create) {\n  // return a primitive with prefix\n  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if (!hasOwn(it, METADATA)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return 'F';\n    // not necessary to add metadata\n    if (!create) return 'E';\n    // add missing metadata\n    setMetadata(it);\n  // return object ID\n  } return it[METADATA].objectID;\n};\n\nvar getWeakData = function (it, create) {\n  if (!hasOwn(it, METADATA)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return true;\n    // not necessary to add metadata\n    if (!create) return false;\n    // add missing metadata\n    setMetadata(it);\n  // return the store of weak collections IDs\n  } return it[METADATA].weakData;\n};\n\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n  if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it);\n  return it;\n};\n\nvar enable = function () {\n  meta.enable = function () { /* empty */ };\n  REQUIRED = true;\n  var getOwnPropertyNames = getOwnPropertyNamesModule.f;\n  var splice = uncurryThis([].splice);\n  var test = {};\n  test[METADATA] = 1;\n\n  // prevent exposing of metadata key\n  if (getOwnPropertyNames(test).length) {\n    getOwnPropertyNamesModule.f = function (it) {\n      var result = getOwnPropertyNames(it);\n      for (var i = 0, length = result.length; i < length; i++) {\n        if (result[i] === METADATA) {\n          splice(result, i, 1);\n          break;\n        }\n      } return result;\n    };\n\n    $({ target: 'Object', stat: true, forced: true }, {\n      getOwnPropertyNames: getOwnPropertyNamesExternalModule.f\n    });\n  }\n};\n\nvar meta = module.exports = {\n  enable: enable,\n  fastKey: fastKey,\n  getWeakData: getWeakData,\n  onFreeze: onFreeze\n};\n\nhiddenKeys[METADATA] = true;\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n  return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n  return function (it) {\n    var state;\n    if (!isObject(it) || (state = get(it)).type !== TYPE) {\n      throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n    } return state;\n  };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n  var store = shared.state || (shared.state = new WeakMap());\n  var wmget = uncurryThis(store.get);\n  var wmhas = uncurryThis(store.has);\n  var wmset = uncurryThis(store.set);\n  set = function (it, metadata) {\n    if (wmhas(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n    metadata.facade = it;\n    wmset(store, it, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return wmget(store, it) || {};\n  };\n  has = function (it) {\n    return wmhas(store, it);\n  };\n} else {\n  var STATE = sharedKey('state');\n  hiddenKeys[STATE] = true;\n  set = function (it, metadata) {\n    if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n    metadata.facade = it;\n    createNonEnumerableProperty(it, STATE, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return hasOwn(it, STATE) ? it[STATE] : {};\n  };\n  has = function (it) {\n    return hasOwn(it, STATE);\n  };\n}\n\nmodule.exports = {\n  set: set,\n  get: get,\n  has: has,\n  enforce: enforce,\n  getterFor: getterFor\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(argument) {\n  return classof(argument) == 'Array';\n};\n","// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = function (argument) {\n  return typeof argument == 'function';\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof');\nvar getBuiltIn = require('../internals/get-built-in');\nvar inspectSource = require('../internals/inspect-source');\n\nvar noop = function () { /* empty */ };\nvar empty = [];\nvar construct = getBuiltIn('Reflect', 'construct');\nvar constructorRegExp = /^\\s*(?:class|function)\\b/;\nvar exec = uncurryThis(constructorRegExp.exec);\nvar INCORRECT_TO_STRING = !constructorRegExp.exec(noop);\n\nvar isConstructorModern = function (argument) {\n  if (!isCallable(argument)) return false;\n  try {\n    construct(noop, empty, argument);\n    return true;\n  } catch (error) {\n    return false;\n  }\n};\n\nvar isConstructorLegacy = function (argument) {\n  if (!isCallable(argument)) return false;\n  switch (classof(argument)) {\n    case 'AsyncFunction':\n    case 'GeneratorFunction':\n    case 'AsyncGeneratorFunction': return false;\n    // we can't check .prototype since constructors produced by .bind haven't it\n  } return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));\n};\n\n// `IsConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-isconstructor\nmodule.exports = !construct || fails(function () {\n  var called;\n  return isConstructorModern(isConstructorModern.call)\n    || !isConstructorModern(Object)\n    || !isConstructorModern(function () { called = true; })\n    || called;\n}) ? isConstructorLegacy : isConstructorModern;\n","var fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n  var value = data[normalize(feature)];\n  return value == POLYFILL ? true\n    : value == NATIVE ? false\n    : isCallable(detection) ? fails(detection)\n    : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n  return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","var isObject = require('../internals/is-object');\n\nvar floor = Math.floor;\n\n// `IsIntegralNumber` abstract operation\n// https://tc39.es/ecma262/#sec-isintegralnumber\n// eslint-disable-next-line es/no-number-isinteger -- safe\nmodule.exports = Number.isInteger || function isInteger(it) {\n  return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","var isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n  return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","module.exports = false;\n","var isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n  var isRegExp;\n  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');\n};\n","var global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Object = global.Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  var $Symbol = getBuiltIn('Symbol');\n  return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, Object(it));\n};\n","var global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar TypeError = global.TypeError;\n\nvar Result = function (stopped, result) {\n  this.stopped = stopped;\n  this.result = result;\n};\n\nvar ResultPrototype = Result.prototype;\n\nmodule.exports = function (iterable, unboundFunction, options) {\n  var that = options && options.that;\n  var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n  var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n  var INTERRUPTED = !!(options && options.INTERRUPTED);\n  var fn = bind(unboundFunction, that);\n  var iterator, iterFn, index, length, result, next, step;\n\n  var stop = function (condition) {\n    if (iterator) iteratorClose(iterator, 'normal', condition);\n    return new Result(true, condition);\n  };\n\n  var callFn = function (value) {\n    if (AS_ENTRIES) {\n      anObject(value);\n      return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n    } return INTERRUPTED ? fn(value, stop) : fn(value);\n  };\n\n  if (IS_ITERATOR) {\n    iterator = iterable;\n  } else {\n    iterFn = getIteratorMethod(iterable);\n    if (!iterFn) throw TypeError(tryToString(iterable) + ' is not iterable');\n    // optimisation for array iterators\n    if (isArrayIteratorMethod(iterFn)) {\n      for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {\n        result = callFn(iterable[index]);\n        if (result && isPrototypeOf(ResultPrototype, result)) return result;\n      } return new Result(false);\n    }\n    iterator = getIterator(iterable, iterFn);\n  }\n\n  next = iterator.next;\n  while (!(step = call(next, iterator)).done) {\n    try {\n      result = callFn(step.value);\n    } catch (error) {\n      iteratorClose(iterator, 'throw', error);\n    }\n    if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result;\n  } return new Result(false);\n};\n","var call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar getMethod = require('../internals/get-method');\n\nmodule.exports = function (iterator, kind, value) {\n  var innerResult, innerError;\n  anObject(iterator);\n  try {\n    innerResult = getMethod(iterator, 'return');\n    if (!innerResult) {\n      if (kind === 'throw') throw value;\n      return value;\n    }\n    innerResult = call(innerResult, iterator);\n  } catch (error) {\n    innerError = true;\n    innerResult = error;\n  }\n  if (kind === 'throw') throw value;\n  if (innerError) throw innerResult;\n  anObject(innerResult);\n  return value;\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar create = require('../internals/object-create');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n  arrayIterator = [].keys();\n  // Safari 8 has buggy iterators w/o `next`\n  if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n  else {\n    PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n    if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n  }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {\n  var test = {};\n  // FF44- legacy iterators case\n  return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n  redefine(IteratorPrototype, ITERATOR, function () {\n    return this;\n  });\n}\n\nmodule.exports = {\n  IteratorPrototype: IteratorPrototype,\n  BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","module.exports = {};\n","var toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n  return toLength(obj.length);\n};\n","var global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar macrotask = require('../internals/task').set;\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_IOS_PEBBLE = require('../internals/engine-is-ios-pebble');\nvar IS_WEBOS_WEBKIT = require('../internals/engine-is-webos-webkit');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar MutationObserver = global.MutationObserver || global.WebKitMutationObserver;\nvar document = global.document;\nvar process = global.process;\nvar Promise = global.Promise;\n// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`\nvar queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');\nvar queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;\n\nvar flush, head, last, notify, toggle, node, promise, then;\n\n// modern engines have queueMicrotask method\nif (!queueMicrotask) {\n  flush = function () {\n    var parent, fn;\n    if (IS_NODE && (parent = process.domain)) parent.exit();\n    while (head) {\n      fn = head.fn;\n      head = head.next;\n      try {\n        fn();\n      } catch (error) {\n        if (head) notify();\n        else last = undefined;\n        throw error;\n      }\n    } last = undefined;\n    if (parent) parent.enter();\n  };\n\n  // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339\n  // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898\n  if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) {\n    toggle = true;\n    node = document.createTextNode('');\n    new MutationObserver(flush).observe(node, { characterData: true });\n    notify = function () {\n      node.data = toggle = !toggle;\n    };\n  // environments with maybe non-completely correct, but existent Promise\n  } else if (!IS_IOS_PEBBLE && Promise && Promise.resolve) {\n    // Promise.resolve without an argument throws an error in LG WebOS 2\n    promise = Promise.resolve(undefined);\n    // workaround of WebKit ~ iOS Safari 10.1 bug\n    promise.constructor = Promise;\n    then = bind(promise.then, promise);\n    notify = function () {\n      then(flush);\n    };\n  // Node.js without promises\n  } else if (IS_NODE) {\n    notify = function () {\n      process.nextTick(flush);\n    };\n  // for other environments - macrotask based on:\n  // - setImmediate\n  // - MessageChannel\n  // - window.postMessag\n  // - onreadystatechange\n  // - setTimeout\n  } else {\n    // strange IE + webpack dev server bug - use .bind(global)\n    macrotask = bind(macrotask, global);\n    notify = function () {\n      macrotask(flush);\n    };\n  }\n}\n\nmodule.exports = queueMicrotask || function (fn) {\n  var task = { fn: fn, next: undefined };\n  if (last) last.next = task;\n  if (!head) {\n    head = task;\n    notify();\n  } last = task;\n};\n","var global = require('../internals/global');\n\nmodule.exports = global.Promise;\n","/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n  var symbol = Symbol();\n  // Chrome 38 Symbol has incorrect toString conversion\n  // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n  return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n    // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n    !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(inspectSource(WeakMap));\n","'use strict';\nvar aCallable = require('../internals/a-callable');\n\nvar PromiseCapability = function (C) {\n  var resolve, reject;\n  this.promise = new C(function ($$resolve, $$reject) {\n    if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n    resolve = $$resolve;\n    reject = $$reject;\n  });\n  this.resolve = aCallable(resolve);\n  this.reject = aCallable(reject);\n};\n\n// `NewPromiseCapability` abstract operation\n// https://tc39.es/ecma262/#sec-newpromisecapability\nmodule.exports.f = function (C) {\n  return new PromiseCapability(C);\n};\n","var toString = require('../internals/to-string');\n\nmodule.exports = function (argument, $default) {\n  return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument);\n};\n","var global = require('../internals/global');\nvar isRegExp = require('../internals/is-regexp');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (it) {\n  if (isRegExp(it)) {\n    throw TypeError(\"The method doesn't accept regular expressions\");\n  } return it;\n};\n","var global = require('../internals/global');\n\nvar globalIsFinite = global.isFinite;\n\n// `Number.isFinite` method\n// https://tc39.es/ecma262/#sec-number.isfinite\n// eslint-disable-next-line es/no-number-isfinite -- safe\nmodule.exports = Number.isFinite || function isFinite(it) {\n  return typeof it == 'number' && globalIsFinite(it);\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar call = require('../internals/function-call');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\n// eslint-disable-next-line es/no-object-assign -- safe\nvar $assign = Object.assign;\n// eslint-disable-next-line es/no-object-defineproperty -- required for testing\nvar defineProperty = Object.defineProperty;\nvar concat = uncurryThis([].concat);\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\nmodule.exports = !$assign || fails(function () {\n  // should have correct order of operations (Edge bug)\n  if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', {\n    enumerable: true,\n    get: function () {\n      defineProperty(this, 'b', {\n        value: 3,\n        enumerable: false\n      });\n    }\n  }), { b: 2 })).b !== 1) return true;\n  // should work with symbols and should have deterministic property order (V8 bug)\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line es/no-symbol -- safe\n  var symbol = Symbol();\n  var alphabet = 'abcdefghijklmnopqrst';\n  A[symbol] = 7;\n  alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n  return $assign({}, A)[symbol] != 7 || objectKeys($assign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`\n  var T = toObject(target);\n  var argumentsLength = arguments.length;\n  var index = 1;\n  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n  var propertyIsEnumerable = propertyIsEnumerableModule.f;\n  while (argumentsLength > index) {\n    var S = IndexedObject(arguments[index++]);\n    var keys = getOwnPropertySymbols ? concat(objectKeys(S), getOwnPropertySymbols(S)) : objectKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) {\n      key = keys[j++];\n      if (!DESCRIPTORS || call(propertyIsEnumerable, S, key)) T[key] = S[key];\n    }\n  } return T;\n} : $assign;\n","/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar defineProperties = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n  return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n  activeXDocument.write(scriptTag(''));\n  activeXDocument.close();\n  var temp = activeXDocument.parentWindow.Object;\n  activeXDocument = null; // avoid memory leak\n  return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = documentCreateElement('iframe');\n  var JS = 'java' + SCRIPT + ':';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  html.appendChild(iframe);\n  // https://github.com/zloirock/core-js/issues/475\n  iframe.src = String(JS);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(scriptTag('document.F=Object'));\n  iframeDocument.close();\n  return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n  try {\n    activeXDocument = new ActiveXObject('htmlfile');\n  } catch (error) { /* ignore */ }\n  NullProtoObject = typeof document != 'undefined'\n    ? document.domain && activeXDocument\n      ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n      : NullProtoObjectViaIFrame()\n    : NullProtoObjectViaActiveX(activeXDocument); // WSH\n  var length = enumBugKeys.length;\n  while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n  return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    EmptyConstructor[PROTOTYPE] = anObject(O);\n    result = new EmptyConstructor();\n    EmptyConstructor[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = NullProtoObject();\n  return Properties === undefined ? result : defineProperties(result, Properties);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var props = toIndexedObject(Properties);\n  var keys = objectKeys(Properties);\n  var length = keys.length;\n  var index = 0;\n  var key;\n  while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n  return O;\n};\n","var global = require('../internals/global');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar TypeError = global.TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? $defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPropertyKey(P);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return $defineProperty(O, P, Attributes);\n  } catch (error) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n  O = toIndexedObject(O);\n  P = toPropertyKey(P);\n  if (IE8_DOM_DEFINE) try {\n    return $getOwnPropertyDescriptor(O, P);\n  } catch (error) { /* empty */ }\n  if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","/* eslint-disable es/no-object-getownpropertynames -- safe */\nvar classof = require('../internals/classof-raw');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar arraySlice = require('../internals/array-slice');\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n  try {\n    return $getOwnPropertyNames(it);\n  } catch (error) {\n    return arraySlice(windowNames);\n  }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n  return windowNames && classof(it) == 'Window'\n    ? getWindowNames(it)\n    : $getOwnPropertyNames(toIndexedObject(it));\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return internalObjectKeys(O, hiddenKeys);\n};\n","// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","var global = require('../internals/global');\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar Object = global.Object;\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n  var object = toObject(O);\n  if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n  var constructor = object.constructor;\n  if (isCallable(constructor) && object instanceof constructor) {\n    return constructor.prototype;\n  } return object instanceof Object ? ObjectPrototype : null;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n  var O = toIndexedObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (hasOwn(O, key = names[i++])) {\n    ~indexOf(result, key) || push(result, key);\n  }\n  return result;\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n  return internalObjectKeys(O, enumBugKeys);\n};\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n  var descriptor = getOwnPropertyDescriptor(this, V);\n  return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","/* eslint-disable no-proto -- safe */\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n  var CORRECT_SETTER = false;\n  var test = {};\n  var setter;\n  try {\n    // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n    setter = uncurryThis(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set);\n    setter(test, []);\n    CORRECT_SETTER = test instanceof Array;\n  } catch (error) { /* empty */ }\n  return function setPrototypeOf(O, proto) {\n    anObject(O);\n    aPossiblePrototype(proto);\n    if (CORRECT_SETTER) setter(O, proto);\n    else O.__proto__ = proto;\n    return O;\n  };\n}() : undefined);\n","var DESCRIPTORS = require('../internals/descriptors');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar objectKeys = require('../internals/object-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $propertyIsEnumerable = require('../internals/object-property-is-enumerable').f;\n\nvar propertyIsEnumerable = uncurryThis($propertyIsEnumerable);\nvar push = uncurryThis([].push);\n\n// `Object.{ entries, values }` methods implementation\nvar createMethod = function (TO_ENTRIES) {\n  return function (it) {\n    var O = toIndexedObject(it);\n    var keys = objectKeys(O);\n    var length = keys.length;\n    var i = 0;\n    var result = [];\n    var key;\n    while (length > i) {\n      key = keys[i++];\n      if (!DESCRIPTORS || propertyIsEnumerable(O, key)) {\n        push(result, TO_ENTRIES ? [key, O[key]] : O[key]);\n      }\n    }\n    return result;\n  };\n};\n\nmodule.exports = {\n  // `Object.entries` method\n  // https://tc39.es/ecma262/#sec-object.entries\n  entries: createMethod(true),\n  // `Object.values` method\n  // https://tc39.es/ecma262/#sec-object.values\n  values: createMethod(false)\n};\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classof = require('../internals/classof');\n\n// `Object.prototype.toString` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n  return '[object ' + classof(this) + ']';\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar TypeError = global.TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n  var fn, val;\n  if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n  if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n  if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n","var getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n  var keys = getOwnPropertyNamesModule.f(anObject(it));\n  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n  return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","module.exports = function (exec) {\n  try {\n    return { error: false, value: exec() };\n  } catch (error) {\n    return { error: true, value: error };\n  }\n};\n","var anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar newPromiseCapability = require('../internals/new-promise-capability');\n\nmodule.exports = function (C, x) {\n  anObject(C);\n  if (isObject(x) && x.constructor === C) return x;\n  var promiseCapability = newPromiseCapability.f(C);\n  var resolve = promiseCapability.resolve;\n  resolve(x);\n  return promiseCapability.promise;\n};\n","var redefine = require('../internals/redefine');\n\nmodule.exports = function (target, src, options) {\n  for (var key in src) redefine(target, key, src[key], options);\n  return target;\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n  var unsafe = options ? !!options.unsafe : false;\n  var simple = options ? !!options.enumerable : false;\n  var noTargetGet = options ? !!options.noTargetGet : false;\n  var name = options && options.name !== undefined ? options.name : key;\n  var state;\n  if (isCallable(value)) {\n    if (String(name).slice(0, 7) === 'Symbol(') {\n      name = '[' + String(name).replace(/^Symbol\\(([^)]*)\\)/, '$1') + ']';\n    }\n    if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n      createNonEnumerableProperty(value, 'name', name);\n    }\n    state = enforceInternalState(value);\n    if (!state.source) {\n      state.source = TEMPLATE.join(typeof name == 'string' ? name : '');\n    }\n  }\n  if (O === global) {\n    if (simple) O[key] = value;\n    else setGlobal(key, value);\n    return;\n  } else if (!unsafe) {\n    delete O[key];\n  } else if (!noTargetGet && O[key]) {\n    simple = true;\n  }\n  if (simple) O[key] = value;\n  else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n  return isCallable(this) && getInternalState(this).source || inspectSource(this);\n});\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof-raw');\nvar regexpExec = require('../internals/regexp-exec');\n\nvar TypeError = global.TypeError;\n\n// `RegExpExec` abstract operation\n// https://tc39.es/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n  var exec = R.exec;\n  if (isCallable(exec)) {\n    var result = call(exec, R, S);\n    if (result !== null) anObject(result);\n    return result;\n  }\n  if (classof(R) === 'RegExp') return call(regexpExec, R, S);\n  throw TypeError('RegExp#exec called on incompatible receiver');\n};\n","'use strict';\n/* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */\n/* eslint-disable regexp/no-useless-quantifier -- testing */\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar regexpFlags = require('../internals/regexp-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar shared = require('../internals/shared');\nvar create = require('../internals/object-create');\nvar getInternalState = require('../internals/internal-state').get;\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar UNSUPPORTED_NCG = require('../internals/regexp-unsupported-ncg');\n\nvar nativeReplace = shared('native-string-replace', String.prototype.replace);\nvar nativeExec = RegExp.prototype.exec;\nvar patchedExec = nativeExec;\nvar charAt = uncurryThis(''.charAt);\nvar indexOf = uncurryThis(''.indexOf);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n  var re1 = /a/;\n  var re2 = /b*/g;\n  call(nativeExec, re1, 'a');\n  call(nativeExec, re2, 'a');\n  return re1.lastIndex !== 0 || re2.lastIndex !== 0;\n})();\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y || stickyHelpers.BROKEN_CARET;\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG;\n\nif (PATCH) {\n  // eslint-disable-next-line max-statements -- TODO\n  patchedExec = function exec(string) {\n    var re = this;\n    var state = getInternalState(re);\n    var str = toString(string);\n    var raw = state.raw;\n    var result, reCopy, lastIndex, match, i, object, group;\n\n    if (raw) {\n      raw.lastIndex = re.lastIndex;\n      result = call(patchedExec, raw, str);\n      re.lastIndex = raw.lastIndex;\n      return result;\n    }\n\n    var groups = state.groups;\n    var sticky = UNSUPPORTED_Y && re.sticky;\n    var flags = call(regexpFlags, re);\n    var source = re.source;\n    var charsAdded = 0;\n    var strCopy = str;\n\n    if (sticky) {\n      flags = replace(flags, 'y', '');\n      if (indexOf(flags, 'g') === -1) {\n        flags += 'g';\n      }\n\n      strCopy = stringSlice(str, re.lastIndex);\n      // Support anchored sticky behavior.\n      if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt(str, re.lastIndex - 1) !== '\\n')) {\n        source = '(?: ' + source + ')';\n        strCopy = ' ' + strCopy;\n        charsAdded++;\n      }\n      // ^(? + rx + ) is needed, in combination with some str slicing, to\n      // simulate the 'y' flag.\n      reCopy = new RegExp('^(?:' + source + ')', flags);\n    }\n\n    if (NPCG_INCLUDED) {\n      reCopy = new RegExp('^' + source + '$(?!\\\\s)', flags);\n    }\n    if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;\n\n    match = call(nativeExec, sticky ? reCopy : re, strCopy);\n\n    if (sticky) {\n      if (match) {\n        match.input = stringSlice(match.input, charsAdded);\n        match[0] = stringSlice(match[0], charsAdded);\n        match.index = re.lastIndex;\n        re.lastIndex += match[0].length;\n      } else re.lastIndex = 0;\n    } else if (UPDATES_LAST_INDEX_WRONG && match) {\n      re.lastIndex = re.global ? match.index + match[0].length : lastIndex;\n    }\n    if (NPCG_INCLUDED && match && match.length > 1) {\n      // Fix browsers whose `exec` methods don't consistently return `undefined`\n      // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n      call(nativeReplace, match[0], reCopy, function () {\n        for (i = 1; i < arguments.length - 2; i++) {\n          if (arguments[i] === undefined) match[i] = undefined;\n        }\n      });\n    }\n\n    if (match && groups) {\n      match.groups = object = create(null);\n      for (i = 0; i < groups.length; i++) {\n        group = groups[i];\n        object[group[0]] = match[group[1]];\n      }\n    }\n\n    return match;\n  };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n  var that = anObject(this);\n  var result = '';\n  if (that.global) result += 'g';\n  if (that.ignoreCase) result += 'i';\n  if (that.multiline) result += 'm';\n  if (that.dotAll) result += 's';\n  if (that.unicode) result += 'u';\n  if (that.sticky) result += 'y';\n  return result;\n};\n","var fails = require('../internals/fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nexports.UNSUPPORTED_Y = fails(function () {\n  var re = $RegExp('a', 'y');\n  re.lastIndex = 2;\n  return re.exec('abcd') != null;\n});\n\nexports.BROKEN_CARET = fails(function () {\n  // https://bugzilla.mozilla.org/show_bug.cgi?id=773687\n  var re = $RegExp('^r', 'gy');\n  re.lastIndex = 2;\n  return re.exec('str') != null;\n});\n","var fails = require('../internals/fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nmodule.exports = fails(function () {\n  var re = $RegExp('.', 's');\n  return !(re.dotAll && re.exec('\\n') && re.flags === 's');\n});\n","var fails = require('../internals/fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('(?<a>b)', 'g') -> /(?<a>b)/g and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nmodule.exports = fails(function () {\n  var re = $RegExp('(?<a>b)', 'g');\n  return re.exec('b').groups.a !== 'b' ||\n    'b'.replace(re, '$<a>c') !== 'bc';\n});\n","var global = require('../internals/global');\n\nvar TypeError = global.TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n  return it;\n};\n","var global = require('../internals/global');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n  try {\n    defineProperty(global, key, { value: value, configurable: true, writable: true });\n  } catch (error) {\n    global[key] = value;\n  } return value;\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar definePropertyModule = require('../internals/object-define-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n  var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n  var defineProperty = definePropertyModule.f;\n\n  if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n    defineProperty(Constructor, SPECIES, {\n      configurable: true,\n      get: function () { return this; }\n    });\n  }\n};\n","var defineProperty = require('../internals/object-define-property').f;\nvar hasOwn = require('../internals/has-own-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC) {\n  if (it && !hasOwn(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n    defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });\n  }\n};\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n  return keys[key] || (keys[key] = uid(key));\n};\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: '3.19.0',\n  mode: IS_PURE ? 'pure' : 'global',\n  copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\n});\n","var anObject = require('../internals/an-object');\nvar aConstructor = require('../internals/a-constructor');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n  var C = anObject(O).constructor;\n  var S;\n  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aConstructor(S);\n};\n","var fails = require('../internals/fails');\n\n// check the existence of a method, lowercase\n// of a tag and escaping quotes in arguments\nmodule.exports = function (METHOD_NAME) {\n  return fails(function () {\n    var test = ''[METHOD_NAME]('\"');\n    return test !== test.toLowerCase() || test.split('\"').length > 3;\n  });\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar stringSlice = uncurryThis(''.slice);\n\nvar createMethod = function (CONVERT_TO_STRING) {\n  return function ($this, pos) {\n    var S = toString(requireObjectCoercible($this));\n    var position = toIntegerOrInfinity(pos);\n    var size = S.length;\n    var first, second;\n    if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n    first = charCodeAt(S, position);\n    return first < 0xD800 || first > 0xDBFF || position + 1 === size\n      || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF\n        ? CONVERT_TO_STRING\n          ? charAt(S, position)\n          : first\n        : CONVERT_TO_STRING\n          ? stringSlice(S, position, position + 2)\n          : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n  };\n};\n\nmodule.exports = {\n  // `String.prototype.codePointAt` method\n  // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n  codeAt: createMethod(false),\n  // `String.prototype.at` method\n  // https://github.com/mathiasbynens/String.prototype.at\n  charAt: createMethod(true)\n};\n","'use strict';\nvar global = require('../internals/global');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar RangeError = global.RangeError;\n\n// `String.prototype.repeat` method implementation\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\nmodule.exports = function repeat(count) {\n  var str = toString(requireObjectCoercible(this));\n  var result = '';\n  var n = toIntegerOrInfinity(count);\n  if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');\n  for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n  return result;\n};\n","var PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n  return fails(function () {\n    return !!whitespaces[METHOD_NAME]()\n      || non[METHOD_NAME]() !== non\n      || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME);\n  });\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar whitespaces = require('../internals/whitespaces');\n\nvar replace = uncurryThis(''.replace);\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n  return function ($this) {\n    var string = toString(requireObjectCoercible($this));\n    if (TYPE & 1) string = replace(string, ltrim, '');\n    if (TYPE & 2) string = replace(string, rtrim, '');\n    return string;\n  };\n};\n\nmodule.exports = {\n  // `String.prototype.{ trimLeft, trimStart }` methods\n  // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n  start: createMethod(1),\n  // `String.prototype.{ trimRight, trimEnd }` methods\n  // https://tc39.es/ecma262/#sec-string.prototype.trimend\n  end: createMethod(2),\n  // `String.prototype.trim` method\n  // https://tc39.es/ecma262/#sec-string.prototype.trim\n  trim: createMethod(3)\n};\n","var global = require('../internals/global');\nvar apply = require('../internals/function-apply');\nvar bind = require('../internals/function-bind-context');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar fails = require('../internals/fails');\nvar html = require('../internals/html');\nvar arraySlice = require('../internals/array-slice');\nvar createElement = require('../internals/document-create-element');\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar Dispatch = global.Dispatch;\nvar Function = global.Function;\nvar MessageChannel = global.MessageChannel;\nvar String = global.String;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar location, defer, channel, port;\n\ntry {\n  // Deno throws a ReferenceError on `location` access without `--location` flag\n  location = global.location;\n} catch (error) { /* empty */ }\n\nvar run = function (id) {\n  if (hasOwn(queue, id)) {\n    var fn = queue[id];\n    delete queue[id];\n    fn();\n  }\n};\n\nvar runner = function (id) {\n  return function () {\n    run(id);\n  };\n};\n\nvar listener = function (event) {\n  run(event.data);\n};\n\nvar post = function (id) {\n  // old engines have not location.origin\n  global.postMessage(String(id), location.protocol + '//' + location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n  set = function setImmediate(fn) {\n    var args = arraySlice(arguments, 1);\n    queue[++counter] = function () {\n      apply(isCallable(fn) ? fn : Function(fn), undefined, args);\n    };\n    defer(counter);\n    return counter;\n  };\n  clear = function clearImmediate(id) {\n    delete queue[id];\n  };\n  // Node.js 0.8-\n  if (IS_NODE) {\n    defer = function (id) {\n      process.nextTick(runner(id));\n    };\n  // Sphere (JS game engine) Dispatch API\n  } else if (Dispatch && Dispatch.now) {\n    defer = function (id) {\n      Dispatch.now(runner(id));\n    };\n  // Browsers with MessageChannel, includes WebWorkers\n  // except iOS - https://github.com/zloirock/core-js/issues/624\n  } else if (MessageChannel && !IS_IOS) {\n    channel = new MessageChannel();\n    port = channel.port2;\n    channel.port1.onmessage = listener;\n    defer = bind(port.postMessage, port);\n  // Browsers with postMessage, skip WebWorkers\n  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n  } else if (\n    global.addEventListener &&\n    isCallable(global.postMessage) &&\n    !global.importScripts &&\n    location && location.protocol !== 'file:' &&\n    !fails(post)\n  ) {\n    defer = post;\n    global.addEventListener('message', listener, false);\n  // IE8-\n  } else if (ONREADYSTATECHANGE in createElement('script')) {\n    defer = function (id) {\n      html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n        html.removeChild(this);\n        run(id);\n      };\n    };\n  // Rest old browsers\n  } else {\n    defer = function (id) {\n      setTimeout(runner(id), 0);\n    };\n  }\n}\n\nmodule.exports = {\n  set: set,\n  clear: clear\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\n// `thisNumberValue` abstract operation\n// https://tc39.es/ecma262/#sec-thisnumbervalue\nmodule.exports = uncurryThis(1.0.valueOf);\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n  var integer = toIntegerOrInfinity(index);\n  return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","var global = require('../internals/global');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toLength = require('../internals/to-length');\n\nvar RangeError = global.RangeError;\n\n// `ToIndex` abstract operation\n// https://tc39.es/ecma262/#sec-toindex\nmodule.exports = function (it) {\n  if (it === undefined) return 0;\n  var number = toIntegerOrInfinity(it);\n  var length = toLength(number);\n  if (number !== length) throw RangeError('Wrong length or index');\n  return length;\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n  return IndexedObject(requireObjectCoercible(it));\n};\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n  var number = +argument;\n  // eslint-disable-next-line no-self-compare -- safe\n  return number !== number || number === 0 ? 0 : (number > 0 ? floor : ceil)(number);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n  return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var global = require('../internals/global');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar Object = global.Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n  return Object(requireObjectCoercible(argument));\n};\n","var global = require('../internals/global');\nvar toPositiveInteger = require('../internals/to-positive-integer');\n\nvar RangeError = global.RangeError;\n\nmodule.exports = function (it, BYTES) {\n  var offset = toPositiveInteger(it);\n  if (offset % BYTES) throw RangeError('Wrong offset');\n  return offset;\n};\n","var global = require('../internals/global');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar RangeError = global.RangeError;\n\nmodule.exports = function (it) {\n  var result = toIntegerOrInfinity(it);\n  if (result < 0) throw RangeError(\"The argument can't be less than 0\");\n  return result;\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TypeError = global.TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n  if (!isObject(input) || isSymbol(input)) return input;\n  var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n  var result;\n  if (exoticToPrim) {\n    if (pref === undefined) pref = 'default';\n    result = call(exoticToPrim, input, pref);\n    if (!isObject(result) || isSymbol(result)) return result;\n    throw TypeError(\"Can't convert object to primitive value\");\n  }\n  if (pref === undefined) pref = 'number';\n  return ordinaryToPrimitive(input, pref);\n};\n","var toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n  var key = toPrimitive(argument, 'string');\n  return isSymbol(key) ? key : key + '';\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var global = require('../internals/global');\nvar classof = require('../internals/classof');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n  if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');\n  return String(argument);\n};\n","var global = require('../internals/global');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n  try {\n    return String(argument);\n  } catch (error) {\n    return 'Object';\n  }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = require('../internals/typed-array-constructors-require-wrappers');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar ArrayBufferModule = require('../internals/array-buffer');\nvar anInstance = require('../internals/an-instance');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar isIntegralNumber = require('../internals/is-integral-number');\nvar toLength = require('../internals/to-length');\nvar toIndex = require('../internals/to-index');\nvar toOffset = require('../internals/to-offset');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar classof = require('../internals/classof');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar create = require('../internals/object-create');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar typedArrayFrom = require('../internals/typed-array-from');\nvar forEach = require('../internals/array-iteration').forEach;\nvar setSpecies = require('../internals/set-species');\nvar definePropertyModule = require('../internals/object-define-property');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar InternalStateModule = require('../internals/internal-state');\nvar inheritIfRequired = require('../internals/inherit-if-required');\n\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar round = Math.round;\nvar RangeError = global.RangeError;\nvar ArrayBuffer = ArrayBufferModule.ArrayBuffer;\nvar ArrayBufferPrototype = ArrayBuffer.prototype;\nvar DataView = ArrayBufferModule.DataView;\nvar NATIVE_ARRAY_BUFFER_VIEWS = ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS;\nvar TYPED_ARRAY_CONSTRUCTOR = ArrayBufferViewCore.TYPED_ARRAY_CONSTRUCTOR;\nvar TYPED_ARRAY_TAG = ArrayBufferViewCore.TYPED_ARRAY_TAG;\nvar TypedArray = ArrayBufferViewCore.TypedArray;\nvar TypedArrayPrototype = ArrayBufferViewCore.TypedArrayPrototype;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\nvar isTypedArray = ArrayBufferViewCore.isTypedArray;\nvar BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\nvar WRONG_LENGTH = 'Wrong length';\n\nvar fromList = function (C, list) {\n  aTypedArrayConstructor(C);\n  var index = 0;\n  var length = list.length;\n  var result = new C(length);\n  while (length > index) result[index] = list[index++];\n  return result;\n};\n\nvar addGetter = function (it, key) {\n  nativeDefineProperty(it, key, { get: function () {\n    return getInternalState(this)[key];\n  } });\n};\n\nvar isArrayBuffer = function (it) {\n  var klass;\n  return isPrototypeOf(ArrayBufferPrototype, it) || (klass = classof(it)) == 'ArrayBuffer' || klass == 'SharedArrayBuffer';\n};\n\nvar isTypedArrayIndex = function (target, key) {\n  return isTypedArray(target)\n    && !isSymbol(key)\n    && key in target\n    && isIntegralNumber(+key)\n    && key >= 0;\n};\n\nvar wrappedGetOwnPropertyDescriptor = function getOwnPropertyDescriptor(target, key) {\n  key = toPropertyKey(key);\n  return isTypedArrayIndex(target, key)\n    ? createPropertyDescriptor(2, target[key])\n    : nativeGetOwnPropertyDescriptor(target, key);\n};\n\nvar wrappedDefineProperty = function defineProperty(target, key, descriptor) {\n  key = toPropertyKey(key);\n  if (isTypedArrayIndex(target, key)\n    && isObject(descriptor)\n    && hasOwn(descriptor, 'value')\n    && !hasOwn(descriptor, 'get')\n    && !hasOwn(descriptor, 'set')\n    // TODO: add validation descriptor w/o calling accessors\n    && !descriptor.configurable\n    && (!hasOwn(descriptor, 'writable') || descriptor.writable)\n    && (!hasOwn(descriptor, 'enumerable') || descriptor.enumerable)\n  ) {\n    target[key] = descriptor.value;\n    return target;\n  } return nativeDefineProperty(target, key, descriptor);\n};\n\nif (DESCRIPTORS) {\n  if (!NATIVE_ARRAY_BUFFER_VIEWS) {\n    getOwnPropertyDescriptorModule.f = wrappedGetOwnPropertyDescriptor;\n    definePropertyModule.f = wrappedDefineProperty;\n    addGetter(TypedArrayPrototype, 'buffer');\n    addGetter(TypedArrayPrototype, 'byteOffset');\n    addGetter(TypedArrayPrototype, 'byteLength');\n    addGetter(TypedArrayPrototype, 'length');\n  }\n\n  $({ target: 'Object', stat: true, forced: !NATIVE_ARRAY_BUFFER_VIEWS }, {\n    getOwnPropertyDescriptor: wrappedGetOwnPropertyDescriptor,\n    defineProperty: wrappedDefineProperty\n  });\n\n  module.exports = function (TYPE, wrapper, CLAMPED) {\n    var BYTES = TYPE.match(/\\d+$/)[0] / 8;\n    var CONSTRUCTOR_NAME = TYPE + (CLAMPED ? 'Clamped' : '') + 'Array';\n    var GETTER = 'get' + TYPE;\n    var SETTER = 'set' + TYPE;\n    var NativeTypedArrayConstructor = global[CONSTRUCTOR_NAME];\n    var TypedArrayConstructor = NativeTypedArrayConstructor;\n    var TypedArrayConstructorPrototype = TypedArrayConstructor && TypedArrayConstructor.prototype;\n    var exported = {};\n\n    var getter = function (that, index) {\n      var data = getInternalState(that);\n      return data.view[GETTER](index * BYTES + data.byteOffset, true);\n    };\n\n    var setter = function (that, index, value) {\n      var data = getInternalState(that);\n      if (CLAMPED) value = (value = round(value)) < 0 ? 0 : value > 0xFF ? 0xFF : value & 0xFF;\n      data.view[SETTER](index * BYTES + data.byteOffset, value, true);\n    };\n\n    var addElement = function (that, index) {\n      nativeDefineProperty(that, index, {\n        get: function () {\n          return getter(this, index);\n        },\n        set: function (value) {\n          return setter(this, index, value);\n        },\n        enumerable: true\n      });\n    };\n\n    if (!NATIVE_ARRAY_BUFFER_VIEWS) {\n      TypedArrayConstructor = wrapper(function (that, data, offset, $length) {\n        anInstance(that, TypedArrayConstructorPrototype);\n        var index = 0;\n        var byteOffset = 0;\n        var buffer, byteLength, length;\n        if (!isObject(data)) {\n          length = toIndex(data);\n          byteLength = length * BYTES;\n          buffer = new ArrayBuffer(byteLength);\n        } else if (isArrayBuffer(data)) {\n          buffer = data;\n          byteOffset = toOffset(offset, BYTES);\n          var $len = data.byteLength;\n          if ($length === undefined) {\n            if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n            byteLength = $len - byteOffset;\n            if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n          } else {\n            byteLength = toLength($length) * BYTES;\n            if (byteLength + byteOffset > $len) throw RangeError(WRONG_LENGTH);\n          }\n          length = byteLength / BYTES;\n        } else if (isTypedArray(data)) {\n          return fromList(TypedArrayConstructor, data);\n        } else {\n          return call(typedArrayFrom, TypedArrayConstructor, data);\n        }\n        setInternalState(that, {\n          buffer: buffer,\n          byteOffset: byteOffset,\n          byteLength: byteLength,\n          length: length,\n          view: new DataView(buffer)\n        });\n        while (index < length) addElement(that, index++);\n      });\n\n      if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);\n      TypedArrayConstructorPrototype = TypedArrayConstructor.prototype = create(TypedArrayPrototype);\n    } else if (TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS) {\n      TypedArrayConstructor = wrapper(function (dummy, data, typedArrayOffset, $length) {\n        anInstance(dummy, TypedArrayConstructorPrototype);\n        return inheritIfRequired(function () {\n          if (!isObject(data)) return new NativeTypedArrayConstructor(toIndex(data));\n          if (isArrayBuffer(data)) return $length !== undefined\n            ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES), $length)\n            : typedArrayOffset !== undefined\n              ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES))\n              : new NativeTypedArrayConstructor(data);\n          if (isTypedArray(data)) return fromList(TypedArrayConstructor, data);\n          return call(typedArrayFrom, TypedArrayConstructor, data);\n        }(), dummy, TypedArrayConstructor);\n      });\n\n      if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);\n      forEach(getOwnPropertyNames(NativeTypedArrayConstructor), function (key) {\n        if (!(key in TypedArrayConstructor)) {\n          createNonEnumerableProperty(TypedArrayConstructor, key, NativeTypedArrayConstructor[key]);\n        }\n      });\n      TypedArrayConstructor.prototype = TypedArrayConstructorPrototype;\n    }\n\n    if (TypedArrayConstructorPrototype.constructor !== TypedArrayConstructor) {\n      createNonEnumerableProperty(TypedArrayConstructorPrototype, 'constructor', TypedArrayConstructor);\n    }\n\n    createNonEnumerableProperty(TypedArrayConstructorPrototype, TYPED_ARRAY_CONSTRUCTOR, TypedArrayConstructor);\n\n    if (TYPED_ARRAY_TAG) {\n      createNonEnumerableProperty(TypedArrayConstructorPrototype, TYPED_ARRAY_TAG, CONSTRUCTOR_NAME);\n    }\n\n    exported[CONSTRUCTOR_NAME] = TypedArrayConstructor;\n\n    $({\n      global: true, forced: TypedArrayConstructor != NativeTypedArrayConstructor, sham: !NATIVE_ARRAY_BUFFER_VIEWS\n    }, exported);\n\n    if (!(BYTES_PER_ELEMENT in TypedArrayConstructor)) {\n      createNonEnumerableProperty(TypedArrayConstructor, BYTES_PER_ELEMENT, BYTES);\n    }\n\n    if (!(BYTES_PER_ELEMENT in TypedArrayConstructorPrototype)) {\n      createNonEnumerableProperty(TypedArrayConstructorPrototype, BYTES_PER_ELEMENT, BYTES);\n    }\n\n    setSpecies(CONSTRUCTOR_NAME);\n  };\n} else module.exports = function () { /* empty */ };\n","/* eslint-disable no-new -- required for testing */\nvar global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar NATIVE_ARRAY_BUFFER_VIEWS = require('../internals/array-buffer-view-core').NATIVE_ARRAY_BUFFER_VIEWS;\n\nvar ArrayBuffer = global.ArrayBuffer;\nvar Int8Array = global.Int8Array;\n\nmodule.exports = !NATIVE_ARRAY_BUFFER_VIEWS || !fails(function () {\n  Int8Array(1);\n}) || !fails(function () {\n  new Int8Array(-1);\n}) || !checkCorrectnessOfIteration(function (iterable) {\n  new Int8Array();\n  new Int8Array(null);\n  new Int8Array(1.5);\n  new Int8Array(iterable);\n}, true) || fails(function () {\n  // Safari (11+) bug - a reason why even Safari 13 should load a typed array polyfill\n  return new Int8Array(new ArrayBuffer(2), 1, undefined).length !== 1;\n});\n","var arrayFromConstructorAndList = require('../internals/array-from-constructor-and-list');\nvar typedArraySpeciesConstructor = require('../internals/typed-array-species-constructor');\n\nmodule.exports = function (instance, list) {\n  return arrayFromConstructorAndList(typedArraySpeciesConstructor(instance), list);\n};\n","var bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar aConstructor = require('../internals/a-constructor');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar aTypedArrayConstructor = require('../internals/array-buffer-view-core').aTypedArrayConstructor;\n\nmodule.exports = function from(source /* , mapfn, thisArg */) {\n  var C = aConstructor(this);\n  var O = toObject(source);\n  var argumentsLength = arguments.length;\n  var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n  var mapping = mapfn !== undefined;\n  var iteratorMethod = getIteratorMethod(O);\n  var i, length, result, step, iterator, next;\n  if (iteratorMethod && !isArrayIteratorMethod(iteratorMethod)) {\n    iterator = getIterator(O, iteratorMethod);\n    next = iterator.next;\n    O = [];\n    while (!(step = call(next, iterator)).done) {\n      O.push(step.value);\n    }\n  }\n  if (mapping && argumentsLength > 2) {\n    mapfn = bind(mapfn, arguments[2]);\n  }\n  length = lengthOfArrayLike(O);\n  result = new (aTypedArrayConstructor(C))(length);\n  for (i = 0; length > i; i++) {\n    result[i] = mapping ? mapfn(O[i], i) : O[i];\n  }\n  return result;\n};\n","var ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar speciesConstructor = require('../internals/species-constructor');\n\nvar TYPED_ARRAY_CONSTRUCTOR = ArrayBufferViewCore.TYPED_ARRAY_CONSTRUCTOR;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\n\n// a part of `TypedArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#typedarray-species-create\nmodule.exports = function (originalArray) {\n  return aTypedArrayConstructor(speciesConstructor(originalArray, originalArray[TYPED_ARRAY_CONSTRUCTOR]));\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n  return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n  && !Symbol.sham\n  && typeof Symbol.iterator == 'symbol';\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nexports.f = wellKnownSymbol;\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar symbolFor = Symbol && Symbol['for'];\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n  if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n    var description = 'Symbol.' + name;\n    if (NATIVE_SYMBOL && hasOwn(Symbol, name)) {\n      WellKnownSymbolsStore[name] = Symbol[name];\n    } else if (USE_SYMBOL_AS_UID && symbolFor) {\n      WellKnownSymbolsStore[name] = symbolFor(description);\n    } else {\n      WellKnownSymbolsStore[name] = createWellKnownSymbol(description);\n    }\n  } return WellKnownSymbolsStore[name];\n};\n","// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n  '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar create = require('../internals/object-create');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar clearErrorStack = require('../internals/clear-error-stack');\nvar installErrorCause = require('../internals/install-error-cause');\nvar iterate = require('../internals/iterate');\nvar normalizeStringArgument = require('../internals/normalize-string-argument');\nvar ERROR_STACK_INSTALLABLE = require('../internals/error-stack-installable');\n\nvar Error = global.Error;\nvar push = [].push;\n\nvar $AggregateError = function AggregateError(errors, message /* , options */) {\n  var that = isPrototypeOf(AggregateErrorPrototype, this) ? this : create(AggregateErrorPrototype);\n  var options = arguments.length > 2 ? arguments[2] : undefined;\n  if (setPrototypeOf) {\n    that = setPrototypeOf(new Error(undefined), getPrototypeOf(that));\n  }\n  createNonEnumerableProperty(that, 'message', normalizeStringArgument(message, ''));\n  if (ERROR_STACK_INSTALLABLE) createNonEnumerableProperty(that, 'stack', clearErrorStack(that.stack, 1));\n  installErrorCause(that, options);\n  var errorsArray = [];\n  iterate(errors, push, { that: errorsArray });\n  createNonEnumerableProperty(that, 'errors', errorsArray);\n  return that;\n};\n\nif (setPrototypeOf) setPrototypeOf($AggregateError, Error);\nelse copyConstructorProperties($AggregateError, Error);\n\nvar AggregateErrorPrototype = $AggregateError.prototype = create(Error.prototype, {\n  constructor: createPropertyDescriptor(1, $AggregateError),\n  message: createPropertyDescriptor(1, ''),\n  name: createPropertyDescriptor(1, 'AggregateError')\n});\n\n// `AggregateError` constructor\n// https://tc39.es/ecma262/#sec-aggregate-error-constructor\n$({ global: true }, {\n  AggregateError: $AggregateError\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';\nvar TypeError = global.TypeError;\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n  var array = [];\n  array[IS_CONCAT_SPREADABLE] = false;\n  return array.concat()[0] !== array;\n});\n\nvar SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');\n\nvar isConcatSpreadable = function (O) {\n  if (!isObject(O)) return false;\n  var spreadable = O[IS_CONCAT_SPREADABLE];\n  return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;\n\n// `Array.prototype.concat` method\n// https://tc39.es/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, forced: FORCED }, {\n  // eslint-disable-next-line no-unused-vars -- required for `.length`\n  concat: function concat(arg) {\n    var O = toObject(this);\n    var A = arraySpeciesCreate(O, 0);\n    var n = 0;\n    var i, k, length, len, E;\n    for (i = -1, length = arguments.length; i < length; i++) {\n      E = i === -1 ? O : arguments[i];\n      if (isConcatSpreadable(E)) {\n        len = lengthOfArrayLike(E);\n        if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n        for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n      } else {\n        if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n        createProperty(A, n++, E);\n      }\n    }\n    A.length = n;\n    return A;\n  }\n});\n","var $ = require('../internals/export');\nvar copyWithin = require('../internals/array-copy-within');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.copyWithin` method\n// https://tc39.es/ecma262/#sec-array.prototype.copywithin\n$({ target: 'Array', proto: true }, {\n  copyWithin: copyWithin\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('copyWithin');\n","var $ = require('../internals/export');\nvar fill = require('../internals/array-fill');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.fill` method\n// https://tc39.es/ecma262/#sec-array.prototype.fill\n$({ target: 'Array', proto: true }, {\n  fill: fill\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('fill');\n","'use strict';\nvar $ = require('../internals/export');\nvar $filter = require('../internals/array-iteration').filter;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.es/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n  filter: function filter(callbackfn /* , thisArg */) {\n    return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n","var $ = require('../internals/export');\nvar from = require('../internals/array-from');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\n\nvar INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) {\n  // eslint-disable-next-line es/no-array-from -- required for testing\n  Array.from(iterable);\n});\n\n// `Array.from` method\n// https://tc39.es/ecma262/#sec-array.from\n$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {\n  from: from\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $includes = require('../internals/array-includes').includes;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.includes` method\n// https://tc39.es/ecma262/#sec-array.prototype.includes\n$({ target: 'Array', proto: true }, {\n  includes: function includes(el /* , fromIndex = 0 */) {\n    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('includes');\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n  setInternalState(this, {\n    type: ARRAY_ITERATOR,\n    target: toIndexedObject(iterated), // target\n    index: 0,                          // next index\n    kind: kind                         // kind\n  });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n  var state = getInternalState(this);\n  var target = state.target;\n  var kind = state.kind;\n  var index = state.index++;\n  if (!target || index >= target.length) {\n    state.target = undefined;\n    return { value: undefined, done: true };\n  }\n  if (kind == 'keys') return { value: index, done: false };\n  if (kind == 'values') return { value: target[index], done: false };\n  return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IndexedObject = require('../internals/indexed-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar un$Join = uncurryThis([].join);\n\nvar ES3_STRINGS = IndexedObject != Object;\nvar STRICT_METHOD = arrayMethodIsStrict('join', ',');\n\n// `Array.prototype.join` method\n// https://tc39.es/ecma262/#sec-array.prototype.join\n$({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD }, {\n  join: function join(separator) {\n    return un$Join(toIndexedObject(this), separator === undefined ? ',' : separator);\n  }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $map = require('../internals/array-iteration').map;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n\n// `Array.prototype.map` method\n// https://tc39.es/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n  map: function map(callbackfn /* , thisArg */) {\n    return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar createProperty = require('../internals/create-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar un$Slice = require('../internals/array-slice');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\n\nvar SPECIES = wellKnownSymbol('species');\nvar Array = global.Array;\nvar max = Math.max;\n\n// `Array.prototype.slice` method\n// https://tc39.es/ecma262/#sec-array.prototype.slice\n// fallback for not array-like ES3 strings and DOM objects\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n  slice: function slice(start, end) {\n    var O = toIndexedObject(this);\n    var length = lengthOfArrayLike(O);\n    var k = toAbsoluteIndex(start, length);\n    var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n    // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n    var Constructor, result, n;\n    if (isArray(O)) {\n      Constructor = O.constructor;\n      // cross-realm fallback\n      if (isConstructor(Constructor) && (Constructor === Array || isArray(Constructor.prototype))) {\n        Constructor = undefined;\n      } else if (isObject(Constructor)) {\n        Constructor = Constructor[SPECIES];\n        if (Constructor === null) Constructor = undefined;\n      }\n      if (Constructor === Array || Constructor === undefined) {\n        return un$Slice(O, k, fin);\n      }\n    }\n    result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0));\n    for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n    result.length = n;\n    return result;\n  }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\nvar internalSort = require('../internals/array-sort');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar FF = require('../internals/engine-ff-version');\nvar IE_OR_EDGE = require('../internals/engine-is-ie-or-edge');\nvar V8 = require('../internals/engine-v8-version');\nvar WEBKIT = require('../internals/engine-webkit-version');\n\nvar test = [];\nvar un$Sort = uncurryThis(test.sort);\nvar push = uncurryThis(test.push);\n\n// IE8-\nvar FAILS_ON_UNDEFINED = fails(function () {\n  test.sort(undefined);\n});\n// V8 bug\nvar FAILS_ON_NULL = fails(function () {\n  test.sort(null);\n});\n// Old WebKit\nvar STRICT_METHOD = arrayMethodIsStrict('sort');\n\nvar STABLE_SORT = !fails(function () {\n  // feature detection can be too slow, so check engines versions\n  if (V8) return V8 < 70;\n  if (FF && FF > 3) return;\n  if (IE_OR_EDGE) return true;\n  if (WEBKIT) return WEBKIT < 603;\n\n  var result = '';\n  var code, chr, value, index;\n\n  // generate an array with more 512 elements (Chakra and old V8 fails only in this case)\n  for (code = 65; code < 76; code++) {\n    chr = String.fromCharCode(code);\n\n    switch (code) {\n      case 66: case 69: case 70: case 72: value = 3; break;\n      case 68: case 71: value = 4; break;\n      default: value = 2;\n    }\n\n    for (index = 0; index < 47; index++) {\n      test.push({ k: chr + index, v: value });\n    }\n  }\n\n  test.sort(function (a, b) { return b.v - a.v; });\n\n  for (index = 0; index < test.length; index++) {\n    chr = test[index].k.charAt(0);\n    if (result.charAt(result.length - 1) !== chr) result += chr;\n  }\n\n  return result !== 'DGBEFHACIJK';\n});\n\nvar FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT;\n\nvar getSortCompare = function (comparefn) {\n  return function (x, y) {\n    if (y === undefined) return -1;\n    if (x === undefined) return 1;\n    if (comparefn !== undefined) return +comparefn(x, y) || 0;\n    return toString(x) > toString(y) ? 1 : -1;\n  };\n};\n\n// `Array.prototype.sort` method\n// https://tc39.es/ecma262/#sec-array.prototype.sort\n$({ target: 'Array', proto: true, forced: FORCED }, {\n  sort: function sort(comparefn) {\n    if (comparefn !== undefined) aCallable(comparefn);\n\n    var array = toObject(this);\n\n    if (STABLE_SORT) return comparefn === undefined ? un$Sort(array) : un$Sort(array, comparefn);\n\n    var items = [];\n    var arrayLength = lengthOfArrayLike(array);\n    var itemsLength, index;\n\n    for (index = 0; index < arrayLength; index++) {\n      if (index in array) push(items, array[index]);\n    }\n\n    internalSort(items, getSortCompare(comparefn));\n\n    itemsLength = items.length;\n    index = 0;\n\n    while (index < itemsLength) array[index] = items[index++];\n    while (index < arrayLength) delete array[index++];\n\n    return array;\n  }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toObject = require('../internals/to-object');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar createProperty = require('../internals/create-property');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice');\n\nvar TypeError = global.TypeError;\nvar max = Math.max;\nvar min = Math.min;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded';\n\n// `Array.prototype.splice` method\n// https://tc39.es/ecma262/#sec-array.prototype.splice\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n  splice: function splice(start, deleteCount /* , ...items */) {\n    var O = toObject(this);\n    var len = lengthOfArrayLike(O);\n    var actualStart = toAbsoluteIndex(start, len);\n    var argumentsLength = arguments.length;\n    var insertCount, actualDeleteCount, A, k, from, to;\n    if (argumentsLength === 0) {\n      insertCount = actualDeleteCount = 0;\n    } else if (argumentsLength === 1) {\n      insertCount = 0;\n      actualDeleteCount = len - actualStart;\n    } else {\n      insertCount = argumentsLength - 2;\n      actualDeleteCount = min(max(toIntegerOrInfinity(deleteCount), 0), len - actualStart);\n    }\n    if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER) {\n      throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED);\n    }\n    A = arraySpeciesCreate(O, actualDeleteCount);\n    for (k = 0; k < actualDeleteCount; k++) {\n      from = actualStart + k;\n      if (from in O) createProperty(A, k, O[from]);\n    }\n    A.length = actualDeleteCount;\n    if (insertCount < actualDeleteCount) {\n      for (k = actualStart; k < len - actualDeleteCount; k++) {\n        from = k + actualDeleteCount;\n        to = k + insertCount;\n        if (from in O) O[to] = O[from];\n        else delete O[to];\n      }\n      for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1];\n    } else if (insertCount > actualDeleteCount) {\n      for (k = len - actualDeleteCount; k > actualStart; k--) {\n        from = k + actualDeleteCount - 1;\n        to = k + insertCount - 1;\n        if (from in O) O[to] = O[from];\n        else delete O[to];\n      }\n    }\n    for (k = 0; k < insertCount; k++) {\n      O[k + actualStart] = arguments[k + 2];\n    }\n    O.length = len - actualDeleteCount + insertCount;\n    return A;\n  }\n});\n","var hasOwn = require('../internals/has-own-property');\nvar redefine = require('../internals/redefine');\nvar dateToPrimitive = require('../internals/date-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\nvar DatePrototype = Date.prototype;\n\n// `Date.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-date.prototype-@@toprimitive\nif (!hasOwn(DatePrototype, TO_PRIMITIVE)) {\n  redefine(DatePrototype, TO_PRIMITIVE, dateToPrimitive);\n}\n","var DESCRIPTORS = require('../internals/descriptors');\nvar FUNCTION_NAME_EXISTS = require('../internals/function-name').EXISTS;\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineProperty = require('../internals/object-define-property').f;\n\nvar FunctionPrototype = Function.prototype;\nvar functionToString = uncurryThis(FunctionPrototype.toString);\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar regExpExec = uncurryThis(nameRE.exec);\nvar NAME = 'name';\n\n// Function instances `.name` property\n// https://tc39.es/ecma262/#sec-function-instances-name\nif (DESCRIPTORS && !FUNCTION_NAME_EXISTS) {\n  defineProperty(FunctionPrototype, NAME, {\n    configurable: true,\n    get: function () {\n      try {\n        return regExpExec(nameRE, functionToString(this))[1];\n      } catch (error) {\n        return '';\n      }\n    }\n  });\n}\n","var $ = require('../internals/export');\nvar global = require('../internals/global');\n\n// `globalThis` object\n// https://tc39.es/ecma262/#sec-globalthis\n$({ global: true }, {\n  globalThis: global\n});\n","var global = require('../internals/global');\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n// JSON[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-json-@@tostringtag\nsetToStringTag(global.JSON, 'JSON', true);\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Map` constructor\n// https://tc39.es/ecma262/#sec-map-objects\ncollection('Map', function (init) {\n  return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","var setToStringTag = require('../internals/set-to-string-tag');\n\n// Math[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-math-@@tostringtag\nsetToStringTag(Math, 'Math', true);\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar hasOwn = require('../internals/has-own-property');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar isSymbol = require('../internals/is-symbol');\nvar toPrimitive = require('../internals/to-primitive');\nvar fails = require('../internals/fails');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar defineProperty = require('../internals/object-define-property').f;\nvar thisNumberValue = require('../internals/this-number-value');\nvar trim = require('../internals/string-trim').trim;\n\nvar NUMBER = 'Number';\nvar NativeNumber = global[NUMBER];\nvar NumberPrototype = NativeNumber.prototype;\nvar TypeError = global.TypeError;\nvar arraySlice = uncurryThis(''.slice);\nvar charCodeAt = uncurryThis(''.charCodeAt);\n\n// `ToNumeric` abstract operation\n// https://tc39.es/ecma262/#sec-tonumeric\nvar toNumeric = function (value) {\n  var primValue = toPrimitive(value, 'number');\n  return typeof primValue == 'bigint' ? primValue : toNumber(primValue);\n};\n\n// `ToNumber` abstract operation\n// https://tc39.es/ecma262/#sec-tonumber\nvar toNumber = function (argument) {\n  var it = toPrimitive(argument, 'number');\n  var first, third, radix, maxCode, digits, length, index, code;\n  if (isSymbol(it)) throw TypeError('Cannot convert a Symbol value to a number');\n  if (typeof it == 'string' && it.length > 2) {\n    it = trim(it);\n    first = charCodeAt(it, 0);\n    if (first === 43 || first === 45) {\n      third = charCodeAt(it, 2);\n      if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n    } else if (first === 48) {\n      switch (charCodeAt(it, 1)) {\n        case 66: case 98: radix = 2; maxCode = 49; break; // fast equal of /^0b[01]+$/i\n        case 79: case 111: radix = 8; maxCode = 55; break; // fast equal of /^0o[0-7]+$/i\n        default: return +it;\n      }\n      digits = arraySlice(it, 2);\n      length = digits.length;\n      for (index = 0; index < length; index++) {\n        code = charCodeAt(digits, index);\n        // parseInt parses a string to a first unavailable symbol\n        // but ToNumber should return NaN if a string contains unavailable symbols\n        if (code < 48 || code > maxCode) return NaN;\n      } return parseInt(digits, radix);\n    }\n  } return +it;\n};\n\n// `Number` constructor\n// https://tc39.es/ecma262/#sec-number-constructor\nif (isForced(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) {\n  var NumberWrapper = function Number(value) {\n    var n = arguments.length < 1 ? 0 : NativeNumber(toNumeric(value));\n    var dummy = this;\n    // check on 1..constructor(foo) case\n    return isPrototypeOf(NumberPrototype, dummy) && fails(function () { thisNumberValue(dummy); })\n      ? inheritIfRequired(Object(n), dummy, NumberWrapper) : n;\n  };\n  for (var keys = DESCRIPTORS ? getOwnPropertyNames(NativeNumber) : (\n    // ES3:\n    'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n    // ES2015 (in case, if modules with ES2015 Number statics required before):\n    'EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,' +\n    // ESNext\n    'fromString,range'\n  ).split(','), j = 0, key; keys.length > j; j++) {\n    if (hasOwn(NativeNumber, key = keys[j]) && !hasOwn(NumberWrapper, key)) {\n      defineProperty(NumberWrapper, key, getOwnPropertyDescriptor(NativeNumber, key));\n    }\n  }\n  NumberWrapper.prototype = NumberPrototype;\n  NumberPrototype.constructor = NumberWrapper;\n  redefine(global, NUMBER, NumberWrapper);\n}\n","var $ = require('../internals/export');\n\n// `Number.EPSILON` constant\n// https://tc39.es/ecma262/#sec-number.epsilon\n$({ target: 'Number', stat: true }, {\n  EPSILON: Math.pow(2, -52)\n});\n","var $ = require('../internals/export');\nvar numberIsFinite = require('../internals/number-is-finite');\n\n// `Number.isFinite` method\n// https://tc39.es/ecma262/#sec-number.isfinite\n$({ target: 'Number', stat: true }, { isFinite: numberIsFinite });\n","var $ = require('../internals/export');\nvar isIntegralNumber = require('../internals/is-integral-number');\n\n// `Number.isInteger` method\n// https://tc39.es/ecma262/#sec-number.isinteger\n$({ target: 'Number', stat: true }, {\n  isInteger: isIntegralNumber\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar thisNumberValue = require('../internals/this-number-value');\nvar $repeat = require('../internals/string-repeat');\nvar fails = require('../internals/fails');\n\nvar RangeError = global.RangeError;\nvar String = global.String;\nvar floor = Math.floor;\nvar repeat = uncurryThis($repeat);\nvar stringSlice = uncurryThis(''.slice);\nvar un$ToFixed = uncurryThis(1.0.toFixed);\n\nvar pow = function (x, n, acc) {\n  return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\n\nvar log = function (x) {\n  var n = 0;\n  var x2 = x;\n  while (x2 >= 4096) {\n    n += 12;\n    x2 /= 4096;\n  }\n  while (x2 >= 2) {\n    n += 1;\n    x2 /= 2;\n  } return n;\n};\n\nvar multiply = function (data, n, c) {\n  var index = -1;\n  var c2 = c;\n  while (++index < 6) {\n    c2 += n * data[index];\n    data[index] = c2 % 1e7;\n    c2 = floor(c2 / 1e7);\n  }\n};\n\nvar divide = function (data, n) {\n  var index = 6;\n  var c = 0;\n  while (--index >= 0) {\n    c += data[index];\n    data[index] = floor(c / n);\n    c = (c % n) * 1e7;\n  }\n};\n\nvar dataToString = function (data) {\n  var index = 6;\n  var s = '';\n  while (--index >= 0) {\n    if (s !== '' || index === 0 || data[index] !== 0) {\n      var t = String(data[index]);\n      s = s === '' ? t : s + repeat('0', 7 - t.length) + t;\n    }\n  } return s;\n};\n\nvar FORCED = fails(function () {\n  return un$ToFixed(0.00008, 3) !== '0.000' ||\n    un$ToFixed(0.9, 0) !== '1' ||\n    un$ToFixed(1.255, 2) !== '1.25' ||\n    un$ToFixed(1000000000000000128.0, 0) !== '1000000000000000128';\n}) || !fails(function () {\n  // V8 ~ Android 4.3-\n  un$ToFixed({});\n});\n\n// `Number.prototype.toFixed` method\n// https://tc39.es/ecma262/#sec-number.prototype.tofixed\n$({ target: 'Number', proto: true, forced: FORCED }, {\n  toFixed: function toFixed(fractionDigits) {\n    var number = thisNumberValue(this);\n    var fractDigits = toIntegerOrInfinity(fractionDigits);\n    var data = [0, 0, 0, 0, 0, 0];\n    var sign = '';\n    var result = '0';\n    var e, z, j, k;\n\n    if (fractDigits < 0 || fractDigits > 20) throw RangeError('Incorrect fraction digits');\n    // eslint-disable-next-line no-self-compare -- NaN check\n    if (number != number) return 'NaN';\n    if (number <= -1e21 || number >= 1e21) return String(number);\n    if (number < 0) {\n      sign = '-';\n      number = -number;\n    }\n    if (number > 1e-21) {\n      e = log(number * pow(2, 69, 1)) - 69;\n      z = e < 0 ? number * pow(2, -e, 1) : number / pow(2, e, 1);\n      z *= 0x10000000000000;\n      e = 52 - e;\n      if (e > 0) {\n        multiply(data, 0, z);\n        j = fractDigits;\n        while (j >= 7) {\n          multiply(data, 1e7, 0);\n          j -= 7;\n        }\n        multiply(data, pow(10, j, 1), 0);\n        j = e - 1;\n        while (j >= 23) {\n          divide(data, 1 << 23);\n          j -= 23;\n        }\n        divide(data, 1 << j);\n        multiply(data, 1, 1);\n        divide(data, 2);\n        result = dataToString(data);\n      } else {\n        multiply(data, 0, z);\n        multiply(data, 1 << -e, 0);\n        result = dataToString(data) + repeat('0', fractDigits);\n      }\n    }\n    if (fractDigits > 0) {\n      k = result.length;\n      result = sign + (k <= fractDigits\n        ? '0.' + repeat('0', fractDigits - k) + result\n        : stringSlice(result, 0, k - fractDigits) + '.' + stringSlice(result, k - fractDigits));\n    } else {\n      result = sign + result;\n    } return result;\n  }\n});\n","var $ = require('../internals/export');\nvar assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\n// eslint-disable-next-line es/no-object-assign -- required for testing\n$({ target: 'Object', stat: true, forced: Object.assign !== assign }, {\n  assign: assign\n});\n","var $ = require('../internals/export');\nvar FREEZING = require('../internals/freezing');\nvar fails = require('../internals/fails');\nvar isObject = require('../internals/is-object');\nvar onFreeze = require('../internals/internal-metadata').onFreeze;\n\n// eslint-disable-next-line es/no-object-freeze -- safe\nvar $freeze = Object.freeze;\nvar FAILS_ON_PRIMITIVES = fails(function () { $freeze(1); });\n\n// `Object.freeze` method\n// https://tc39.es/ecma262/#sec-object.freeze\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, {\n  freeze: function freeze(it) {\n    return $freeze && isObject(it) ? $freeze(onFreeze(it)) : it;\n  }\n});\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetOwnPropertyDescriptor(1); });\nvar FORCED = !DESCRIPTORS || FAILS_ON_PRIMITIVES;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\n$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {\n  getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {\n    return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);\n  }\n});\n","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar ownKeys = require('../internals/own-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar createProperty = require('../internals/create-property');\n\n// `Object.getOwnPropertyDescriptors` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n  getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n    var O = toIndexedObject(object);\n    var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n    var keys = ownKeys(O);\n    var result = {};\n    var index = 0;\n    var key, descriptor;\n    while (keys.length > index) {\n      descriptor = getOwnPropertyDescriptor(O, key = keys[index++]);\n      if (descriptor !== undefined) createProperty(result, key, descriptor);\n    }\n    return result;\n  }\n});\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toObject = require('../internals/to-object');\nvar nativeGetPrototypeOf = require('../internals/object-get-prototype-of');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetPrototypeOf(1); });\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !CORRECT_PROTOTYPE_GETTER }, {\n  getPrototypeOf: function getPrototypeOf(it) {\n    return nativeGetPrototypeOf(toObject(it));\n  }\n});\n\n","var $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar nativeKeys = require('../internals/object-keys');\nvar fails = require('../internals/fails');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n  keys: function keys(it) {\n    return nativeKeys(toObject(it));\n  }\n});\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar redefine = require('../internals/redefine');\nvar toString = require('../internals/object-to-string');\n\n// `Object.prototype.toString` method\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nif (!TO_STRING_TAG_SUPPORT) {\n  redefine(Object.prototype, 'toString', toString, { unsafe: true });\n}\n","var $ = require('../internals/export');\nvar $values = require('../internals/object-to-array').values;\n\n// `Object.values` method\n// https://tc39.es/ecma262/#sec-object.values\n$({ target: 'Object', stat: true }, {\n  values: function values(O) {\n    return $values(O);\n  }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\n\n// `Promise.allSettled` method\n// https://tc39.es/ecma262/#sec-promise.allsettled\n$({ target: 'Promise', stat: true }, {\n  allSettled: function allSettled(iterable) {\n    var C = this;\n    var capability = newPromiseCapabilityModule.f(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var promiseResolve = aCallable(C.resolve);\n      var values = [];\n      var counter = 0;\n      var remaining = 1;\n      iterate(iterable, function (promise) {\n        var index = counter++;\n        var alreadyCalled = false;\n        remaining++;\n        call(promiseResolve, C, promise).then(function (value) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[index] = { status: 'fulfilled', value: value };\n          --remaining || resolve(values);\n        }, function (error) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[index] = { status: 'rejected', reason: error };\n          --remaining || resolve(values);\n        });\n      });\n      --remaining || resolve(values);\n    });\n    if (result.error) reject(result.value);\n    return capability.promise;\n  }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar aCallable = require('../internals/a-callable');\nvar getBuiltIn = require('../internals/get-built-in');\nvar call = require('../internals/function-call');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\n\nvar PROMISE_ANY_ERROR = 'No one promise resolved';\n\n// `Promise.any` method\n// https://tc39.es/ecma262/#sec-promise.any\n$({ target: 'Promise', stat: true }, {\n  any: function any(iterable) {\n    var C = this;\n    var AggregateError = getBuiltIn('AggregateError');\n    var capability = newPromiseCapabilityModule.f(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var promiseResolve = aCallable(C.resolve);\n      var errors = [];\n      var counter = 0;\n      var remaining = 1;\n      var alreadyResolved = false;\n      iterate(iterable, function (promise) {\n        var index = counter++;\n        var alreadyRejected = false;\n        remaining++;\n        call(promiseResolve, C, promise).then(function (value) {\n          if (alreadyRejected || alreadyResolved) return;\n          alreadyResolved = true;\n          resolve(value);\n        }, function (error) {\n          if (alreadyRejected || alreadyResolved) return;\n          alreadyRejected = true;\n          errors[index] = error;\n          --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR));\n        });\n      });\n      --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR));\n    });\n    if (result.error) reject(result.value);\n    return capability.promise;\n  }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar NativePromise = require('../internals/native-promise-constructor');\nvar fails = require('../internals/fails');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar speciesConstructor = require('../internals/species-constructor');\nvar promiseResolve = require('../internals/promise-resolve');\nvar redefine = require('../internals/redefine');\n\n// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829\nvar NON_GENERIC = !!NativePromise && fails(function () {\n  NativePromise.prototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ });\n});\n\n// `Promise.prototype.finally` method\n// https://tc39.es/ecma262/#sec-promise.prototype.finally\n$({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, {\n  'finally': function (onFinally) {\n    var C = speciesConstructor(this, getBuiltIn('Promise'));\n    var isFunction = isCallable(onFinally);\n    return this.then(\n      isFunction ? function (x) {\n        return promiseResolve(C, onFinally()).then(function () { return x; });\n      } : onFinally,\n      isFunction ? function (e) {\n        return promiseResolve(C, onFinally()).then(function () { throw e; });\n      } : onFinally\n    );\n  }\n});\n\n// makes sure that native promise-based APIs `Promise#finally` properly works with patched `Promise#then`\nif (!IS_PURE && isCallable(NativePromise)) {\n  var method = getBuiltIn('Promise').prototype['finally'];\n  if (NativePromise.prototype['finally'] !== method) {\n    redefine(NativePromise.prototype, 'finally', method, { unsafe: true });\n  }\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar call = require('../internals/function-call');\nvar NativePromise = require('../internals/native-promise-constructor');\nvar redefine = require('../internals/redefine');\nvar redefineAll = require('../internals/redefine-all');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar setSpecies = require('../internals/set-species');\nvar aCallable = require('../internals/a-callable');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar anInstance = require('../internals/an-instance');\nvar inspectSource = require('../internals/inspect-source');\nvar iterate = require('../internals/iterate');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar speciesConstructor = require('../internals/species-constructor');\nvar task = require('../internals/task').set;\nvar microtask = require('../internals/microtask');\nvar promiseResolve = require('../internals/promise-resolve');\nvar hostReportErrors = require('../internals/host-report-errors');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar InternalStateModule = require('../internals/internal-state');\nvar isForced = require('../internals/is-forced');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_BROWSER = require('../internals/engine-is-browser');\nvar IS_NODE = require('../internals/engine-is-node');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\nvar PROMISE = 'Promise';\n\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar getInternalPromiseState = InternalStateModule.getterFor(PROMISE);\nvar NativePromisePrototype = NativePromise && NativePromise.prototype;\nvar PromiseConstructor = NativePromise;\nvar PromisePrototype = NativePromisePrototype;\nvar TypeError = global.TypeError;\nvar document = global.document;\nvar process = global.process;\nvar newPromiseCapability = newPromiseCapabilityModule.f;\nvar newGenericPromiseCapability = newPromiseCapability;\n\nvar DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);\nvar NATIVE_REJECTION_EVENT = isCallable(global.PromiseRejectionEvent);\nvar UNHANDLED_REJECTION = 'unhandledrejection';\nvar REJECTION_HANDLED = 'rejectionhandled';\nvar PENDING = 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\nvar HANDLED = 1;\nvar UNHANDLED = 2;\nvar SUBCLASSING = false;\n\nvar Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;\n\nvar FORCED = isForced(PROMISE, function () {\n  var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(PromiseConstructor);\n  var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(PromiseConstructor);\n  // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n  // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n  // We can't detect it synchronously, so just check versions\n  if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) return true;\n  // We need Promise#finally in the pure version for preventing prototype pollution\n  if (IS_PURE && !PromisePrototype['finally']) return true;\n  // We can't use @@species feature detection in V8 since it causes\n  // deoptimization and performance degradation\n  // https://github.com/zloirock/core-js/issues/679\n  if (V8_VERSION >= 51 && /native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) return false;\n  // Detect correctness of subclassing with @@species support\n  var promise = new PromiseConstructor(function (resolve) { resolve(1); });\n  var FakePromise = function (exec) {\n    exec(function () { /* empty */ }, function () { /* empty */ });\n  };\n  var constructor = promise.constructor = {};\n  constructor[SPECIES] = FakePromise;\n  SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise;\n  if (!SUBCLASSING) return true;\n  // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n  return !GLOBAL_CORE_JS_PROMISE && IS_BROWSER && !NATIVE_REJECTION_EVENT;\n});\n\nvar INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) {\n  PromiseConstructor.all(iterable)['catch'](function () { /* empty */ });\n});\n\n// helpers\nvar isThenable = function (it) {\n  var then;\n  return isObject(it) && isCallable(then = it.then) ? then : false;\n};\n\nvar notify = function (state, isReject) {\n  if (state.notified) return;\n  state.notified = true;\n  var chain = state.reactions;\n  microtask(function () {\n    var value = state.value;\n    var ok = state.state == FULFILLED;\n    var index = 0;\n    // variable length - can't use forEach\n    while (chain.length > index) {\n      var reaction = chain[index++];\n      var handler = ok ? reaction.ok : reaction.fail;\n      var resolve = reaction.resolve;\n      var reject = reaction.reject;\n      var domain = reaction.domain;\n      var result, then, exited;\n      try {\n        if (handler) {\n          if (!ok) {\n            if (state.rejection === UNHANDLED) onHandleUnhandled(state);\n            state.rejection = HANDLED;\n          }\n          if (handler === true) result = value;\n          else {\n            if (domain) domain.enter();\n            result = handler(value); // can throw\n            if (domain) {\n              domain.exit();\n              exited = true;\n            }\n          }\n          if (result === reaction.promise) {\n            reject(TypeError('Promise-chain cycle'));\n          } else if (then = isThenable(result)) {\n            call(then, result, resolve, reject);\n          } else resolve(result);\n        } else reject(value);\n      } catch (error) {\n        if (domain && !exited) domain.exit();\n        reject(error);\n      }\n    }\n    state.reactions = [];\n    state.notified = false;\n    if (isReject && !state.rejection) onUnhandled(state);\n  });\n};\n\nvar dispatchEvent = function (name, promise, reason) {\n  var event, handler;\n  if (DISPATCH_EVENT) {\n    event = document.createEvent('Event');\n    event.promise = promise;\n    event.reason = reason;\n    event.initEvent(name, false, true);\n    global.dispatchEvent(event);\n  } else event = { promise: promise, reason: reason };\n  if (!NATIVE_REJECTION_EVENT && (handler = global['on' + name])) handler(event);\n  else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);\n};\n\nvar onUnhandled = function (state) {\n  call(task, global, function () {\n    var promise = state.facade;\n    var value = state.value;\n    var IS_UNHANDLED = isUnhandled(state);\n    var result;\n    if (IS_UNHANDLED) {\n      result = perform(function () {\n        if (IS_NODE) {\n          process.emit('unhandledRejection', value, promise);\n        } else dispatchEvent(UNHANDLED_REJECTION, promise, value);\n      });\n      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n      state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;\n      if (result.error) throw result.value;\n    }\n  });\n};\n\nvar isUnhandled = function (state) {\n  return state.rejection !== HANDLED && !state.parent;\n};\n\nvar onHandleUnhandled = function (state) {\n  call(task, global, function () {\n    var promise = state.facade;\n    if (IS_NODE) {\n      process.emit('rejectionHandled', promise);\n    } else dispatchEvent(REJECTION_HANDLED, promise, state.value);\n  });\n};\n\nvar bind = function (fn, state, unwrap) {\n  return function (value) {\n    fn(state, value, unwrap);\n  };\n};\n\nvar internalReject = function (state, value, unwrap) {\n  if (state.done) return;\n  state.done = true;\n  if (unwrap) state = unwrap;\n  state.value = value;\n  state.state = REJECTED;\n  notify(state, true);\n};\n\nvar internalResolve = function (state, value, unwrap) {\n  if (state.done) return;\n  state.done = true;\n  if (unwrap) state = unwrap;\n  try {\n    if (state.facade === value) throw TypeError(\"Promise can't be resolved itself\");\n    var then = isThenable(value);\n    if (then) {\n      microtask(function () {\n        var wrapper = { done: false };\n        try {\n          call(then, value,\n            bind(internalResolve, wrapper, state),\n            bind(internalReject, wrapper, state)\n          );\n        } catch (error) {\n          internalReject(wrapper, error, state);\n        }\n      });\n    } else {\n      state.value = value;\n      state.state = FULFILLED;\n      notify(state, false);\n    }\n  } catch (error) {\n    internalReject({ done: false }, error, state);\n  }\n};\n\n// constructor polyfill\nif (FORCED) {\n  // 25.4.3.1 Promise(executor)\n  PromiseConstructor = function Promise(executor) {\n    anInstance(this, PromisePrototype);\n    aCallable(executor);\n    call(Internal, this);\n    var state = getInternalState(this);\n    try {\n      executor(bind(internalResolve, state), bind(internalReject, state));\n    } catch (error) {\n      internalReject(state, error);\n    }\n  };\n  PromisePrototype = PromiseConstructor.prototype;\n  // eslint-disable-next-line no-unused-vars -- required for `.length`\n  Internal = function Promise(executor) {\n    setInternalState(this, {\n      type: PROMISE,\n      done: false,\n      notified: false,\n      parent: false,\n      reactions: [],\n      rejection: false,\n      state: PENDING,\n      value: undefined\n    });\n  };\n  Internal.prototype = redefineAll(PromisePrototype, {\n    // `Promise.prototype.then` method\n    // https://tc39.es/ecma262/#sec-promise.prototype.then\n    then: function then(onFulfilled, onRejected) {\n      var state = getInternalPromiseState(this);\n      var reactions = state.reactions;\n      var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));\n      reaction.ok = isCallable(onFulfilled) ? onFulfilled : true;\n      reaction.fail = isCallable(onRejected) && onRejected;\n      reaction.domain = IS_NODE ? process.domain : undefined;\n      state.parent = true;\n      reactions[reactions.length] = reaction;\n      if (state.state != PENDING) notify(state, false);\n      return reaction.promise;\n    },\n    // `Promise.prototype.catch` method\n    // https://tc39.es/ecma262/#sec-promise.prototype.catch\n    'catch': function (onRejected) {\n      return this.then(undefined, onRejected);\n    }\n  });\n  OwnPromiseCapability = function () {\n    var promise = new Internal();\n    var state = getInternalState(promise);\n    this.promise = promise;\n    this.resolve = bind(internalResolve, state);\n    this.reject = bind(internalReject, state);\n  };\n  newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n    return C === PromiseConstructor || C === PromiseWrapper\n      ? new OwnPromiseCapability(C)\n      : newGenericPromiseCapability(C);\n  };\n\n  if (!IS_PURE && isCallable(NativePromise) && NativePromisePrototype !== Object.prototype) {\n    nativeThen = NativePromisePrototype.then;\n\n    if (!SUBCLASSING) {\n      // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs\n      redefine(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) {\n        var that = this;\n        return new PromiseConstructor(function (resolve, reject) {\n          call(nativeThen, that, resolve, reject);\n        }).then(onFulfilled, onRejected);\n      // https://github.com/zloirock/core-js/issues/640\n      }, { unsafe: true });\n\n      // makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then`\n      redefine(NativePromisePrototype, 'catch', PromisePrototype['catch'], { unsafe: true });\n    }\n\n    // make `.constructor === Promise` work for native promise-based APIs\n    try {\n      delete NativePromisePrototype.constructor;\n    } catch (error) { /* empty */ }\n\n    // make `instanceof Promise` work for native promise-based APIs\n    if (setPrototypeOf) {\n      setPrototypeOf(NativePromisePrototype, PromisePrototype);\n    }\n  }\n}\n\n$({ global: true, wrap: true, forced: FORCED }, {\n  Promise: PromiseConstructor\n});\n\nsetToStringTag(PromiseConstructor, PROMISE, false, true);\nsetSpecies(PROMISE);\n\nPromiseWrapper = getBuiltIn(PROMISE);\n\n// statics\n$({ target: PROMISE, stat: true, forced: FORCED }, {\n  // `Promise.reject` method\n  // https://tc39.es/ecma262/#sec-promise.reject\n  reject: function reject(r) {\n    var capability = newPromiseCapability(this);\n    call(capability.reject, undefined, r);\n    return capability.promise;\n  }\n});\n\n$({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, {\n  // `Promise.resolve` method\n  // https://tc39.es/ecma262/#sec-promise.resolve\n  resolve: function resolve(x) {\n    return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x);\n  }\n});\n\n$({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, {\n  // `Promise.all` method\n  // https://tc39.es/ecma262/#sec-promise.all\n  all: function all(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var $promiseResolve = aCallable(C.resolve);\n      var values = [];\n      var counter = 0;\n      var remaining = 1;\n      iterate(iterable, function (promise) {\n        var index = counter++;\n        var alreadyCalled = false;\n        remaining++;\n        call($promiseResolve, C, promise).then(function (value) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[index] = value;\n          --remaining || resolve(values);\n        }, reject);\n      });\n      --remaining || resolve(values);\n    });\n    if (result.error) reject(result.value);\n    return capability.promise;\n  },\n  // `Promise.race` method\n  // https://tc39.es/ecma262/#sec-promise.race\n  race: function race(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var reject = capability.reject;\n    var result = perform(function () {\n      var $promiseResolve = aCallable(C.resolve);\n      iterate(iterable, function (promise) {\n        call($promiseResolve, C, promise).then(capability.resolve, reject);\n      });\n    });\n    if (result.error) reject(result.value);\n    return capability.promise;\n  }\n});\n","var $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar apply = require('../internals/function-apply');\nvar bind = require('../internals/function-bind');\nvar aConstructor = require('../internals/a-constructor');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar fails = require('../internals/fails');\n\nvar nativeConstruct = getBuiltIn('Reflect', 'construct');\nvar ObjectPrototype = Object.prototype;\nvar push = [].push;\n\n// `Reflect.construct` method\n// https://tc39.es/ecma262/#sec-reflect.construct\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n  function F() { /* empty */ }\n  return !(nativeConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\n\nvar ARGS_BUG = !fails(function () {\n  nativeConstruct(function () { /* empty */ });\n});\n\nvar FORCED = NEW_TARGET_BUG || ARGS_BUG;\n\n$({ target: 'Reflect', stat: true, forced: FORCED, sham: FORCED }, {\n  construct: function construct(Target, args /* , newTarget */) {\n    aConstructor(Target);\n    anObject(args);\n    var newTarget = arguments.length < 3 ? Target : aConstructor(arguments[2]);\n    if (ARGS_BUG && !NEW_TARGET_BUG) return nativeConstruct(Target, args, newTarget);\n    if (Target == newTarget) {\n      // w/o altered newTarget, optimization for 0-4 arguments\n      switch (args.length) {\n        case 0: return new Target();\n        case 1: return new Target(args[0]);\n        case 2: return new Target(args[0], args[1]);\n        case 3: return new Target(args[0], args[1], args[2]);\n        case 4: return new Target(args[0], args[1], args[2], args[3]);\n      }\n      // w/o altered newTarget, lot of arguments case\n      var $args = [null];\n      apply(push, $args, args);\n      return new (apply(bind, Target, $args))();\n    }\n    // with altered newTarget, not support built-in constructors\n    var proto = newTarget.prototype;\n    var instance = create(isObject(proto) ? proto : ObjectPrototype);\n    var result = apply(Target, instance, args);\n    return isObject(result) ? result : instance;\n  }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar exec = require('../internals/regexp-exec');\n\n// `RegExp.prototype.exec` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.exec\n$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {\n  exec: exec\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar objectDefinePropertyModule = require('../internals/object-define-property');\nvar regExpFlags = require('../internals/regexp-flags');\nvar fails = require('../internals/fails');\n\nvar RegExpPrototype = RegExp.prototype;\n\nvar FORCED = DESCRIPTORS && fails(function () {\n  // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n  return Object.getOwnPropertyDescriptor(RegExpPrototype, 'flags').get.call({ dotAll: true, sticky: true }) !== 'sy';\n});\n\n// `RegExp.prototype.flags` getter\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nif (FORCED) objectDefinePropertyModule.f(RegExpPrototype, 'flags', {\n  configurable: true,\n  get: regExpFlags\n});\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar redefine = require('../internals/redefine');\nvar anObject = require('../internals/an-object');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar $toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\nvar regExpFlags = require('../internals/regexp-flags');\n\nvar TO_STRING = 'toString';\nvar RegExpPrototype = RegExp.prototype;\nvar n$ToString = RegExpPrototype[TO_STRING];\nvar getFlags = uncurryThis(regExpFlags);\n\nvar NOT_GENERIC = fails(function () { return n$ToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });\n// FF44- RegExp#toString has a wrong name\nvar INCORRECT_NAME = PROPER_FUNCTION_NAME && n$ToString.name != TO_STRING;\n\n// `RegExp.prototype.toString` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.tostring\nif (NOT_GENERIC || INCORRECT_NAME) {\n  redefine(RegExp.prototype, TO_STRING, function toString() {\n    var R = anObject(this);\n    var p = $toString(R.source);\n    var rf = R.flags;\n    var f = $toString(rf === undefined && isPrototypeOf(RegExpPrototype, R) && !('flags' in RegExpPrototype) ? getFlags(R) : rf);\n    return '/' + p + '/' + f;\n  }, { unsafe: true });\n}\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Set` constructor\n// https://tc39.es/ecma262/#sec-set-objects\ncollection('Set', function (init) {\n  return function Set() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","'use strict';\nvar $ = require('../internals/export');\nvar codeAt = require('../internals/string-multibyte').codeAt;\n\n// `String.prototype.codePointAt` method\n// https://tc39.es/ecma262/#sec-string.prototype.codepointat\n$({ target: 'String', proto: true }, {\n  codePointAt: function codePointAt(pos) {\n    return codeAt(this, pos);\n  }\n});\n","var $ = require('../internals/export');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\n\nvar RangeError = global.RangeError;\nvar fromCharCode = String.fromCharCode;\n// eslint-disable-next-line es/no-string-fromcodepoint -- required for testing\nvar $fromCodePoint = String.fromCodePoint;\nvar join = uncurryThis([].join);\n\n// length should be 1, old FF problem\nvar INCORRECT_LENGTH = !!$fromCodePoint && $fromCodePoint.length != 1;\n\n// `String.fromCodePoint` method\n// https://tc39.es/ecma262/#sec-string.fromcodepoint\n$({ target: 'String', stat: true, forced: INCORRECT_LENGTH }, {\n  // eslint-disable-next-line no-unused-vars -- required for `.length`\n  fromCodePoint: function fromCodePoint(x) {\n    var elements = [];\n    var length = arguments.length;\n    var i = 0;\n    var code;\n    while (length > i) {\n      code = +arguments[i++];\n      if (toAbsoluteIndex(code, 0x10FFFF) !== code) throw RangeError(code + ' is not a valid code point');\n      elements[i] = code < 0x10000\n        ? fromCharCode(code)\n        : fromCharCode(((code -= 0x10000) >> 10) + 0xD800, code % 0x400 + 0xDC00);\n    } return join(elements, '');\n  }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\n\nvar stringIndexOf = uncurryThis(''.indexOf);\n\n// `String.prototype.includes` method\n// https://tc39.es/ecma262/#sec-string.prototype.includes\n$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\n  includes: function includes(searchString /* , position = 0 */) {\n    return !!~stringIndexOf(\n      toString(requireObjectCoercible(this)),\n      toString(notARegExp(searchString)),\n      arguments.length > 1 ? arguments[1] : undefined\n    );\n  }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.italics` method\n// https://tc39.es/ecma262/#sec-string.prototype.italics\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('italics') }, {\n  italics: function italics() {\n    return createHTML(this, 'i', '', '');\n  }\n});\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar toString = require('../internals/to-string');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n  setInternalState(this, {\n    type: STRING_ITERATOR,\n    string: toString(iterated),\n    index: 0\n  });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n  var state = getInternalState(this);\n  var string = state.string;\n  var index = state.index;\n  var point;\n  if (index >= string.length) return { value: undefined, done: true };\n  point = charAt(string, index);\n  state.index += point.length;\n  return { value: point, done: false };\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.link` method\n// https://tc39.es/ecma262/#sec-string.prototype.link\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('link') }, {\n  link: function link(url) {\n    return createHTML(this, 'a', 'href', url);\n  }\n});\n","'use strict';\n/* eslint-disable es/no-string-prototype-matchall -- safe */\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar anObject = require('../internals/an-object');\nvar classof = require('../internals/classof-raw');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar isRegExp = require('../internals/is-regexp');\nvar regExpFlags = require('../internals/regexp-flags');\nvar getMethod = require('../internals/get-method');\nvar redefine = require('../internals/redefine');\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar speciesConstructor = require('../internals/species-constructor');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\nvar InternalStateModule = require('../internals/internal-state');\nvar IS_PURE = require('../internals/is-pure');\n\nvar MATCH_ALL = wellKnownSymbol('matchAll');\nvar REGEXP_STRING = 'RegExp String';\nvar REGEXP_STRING_ITERATOR = REGEXP_STRING + ' Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(REGEXP_STRING_ITERATOR);\nvar RegExpPrototype = RegExp.prototype;\nvar TypeError = global.TypeError;\nvar getFlags = uncurryThis(regExpFlags);\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar un$MatchAll = uncurryThis(''.matchAll);\n\nvar WORKS_WITH_NON_GLOBAL_REGEX = !!un$MatchAll && !fails(function () {\n  un$MatchAll('a', /./);\n});\n\nvar $RegExpStringIterator = createIteratorConstructor(function RegExpStringIterator(regexp, string, $global, fullUnicode) {\n  setInternalState(this, {\n    type: REGEXP_STRING_ITERATOR,\n    regexp: regexp,\n    string: string,\n    global: $global,\n    unicode: fullUnicode,\n    done: false\n  });\n}, REGEXP_STRING, function next() {\n  var state = getInternalState(this);\n  if (state.done) return { value: undefined, done: true };\n  var R = state.regexp;\n  var S = state.string;\n  var match = regExpExec(R, S);\n  if (match === null) return { value: undefined, done: state.done = true };\n  if (state.global) {\n    if (toString(match[0]) === '') R.lastIndex = advanceStringIndex(S, toLength(R.lastIndex), state.unicode);\n    return { value: match, done: false };\n  }\n  state.done = true;\n  return { value: match, done: false };\n});\n\nvar $matchAll = function (string) {\n  var R = anObject(this);\n  var S = toString(string);\n  var C, flagsValue, flags, matcher, $global, fullUnicode;\n  C = speciesConstructor(R, RegExp);\n  flagsValue = R.flags;\n  if (flagsValue === undefined && isPrototypeOf(RegExpPrototype, R) && !('flags' in RegExpPrototype)) {\n    flagsValue = getFlags(R);\n  }\n  flags = flagsValue === undefined ? '' : toString(flagsValue);\n  matcher = new C(C === RegExp ? R.source : R, flags);\n  $global = !!~stringIndexOf(flags, 'g');\n  fullUnicode = !!~stringIndexOf(flags, 'u');\n  matcher.lastIndex = toLength(R.lastIndex);\n  return new $RegExpStringIterator(matcher, S, $global, fullUnicode);\n};\n\n// `String.prototype.matchAll` method\n// https://tc39.es/ecma262/#sec-string.prototype.matchall\n$({ target: 'String', proto: true, forced: WORKS_WITH_NON_GLOBAL_REGEX }, {\n  matchAll: function matchAll(regexp) {\n    var O = requireObjectCoercible(this);\n    var flags, S, matcher, rx;\n    if (regexp != null) {\n      if (isRegExp(regexp)) {\n        flags = toString(requireObjectCoercible('flags' in RegExpPrototype\n          ? regexp.flags\n          : getFlags(regexp)\n        ));\n        if (!~stringIndexOf(flags, 'g')) throw TypeError('`.matchAll` does not allow non-global regexes');\n      }\n      if (WORKS_WITH_NON_GLOBAL_REGEX) return un$MatchAll(O, regexp);\n      matcher = getMethod(regexp, MATCH_ALL);\n      if (matcher === undefined && IS_PURE && classof(regexp) == 'RegExp') matcher = $matchAll;\n      if (matcher) return call(matcher, regexp, O);\n    } else if (WORKS_WITH_NON_GLOBAL_REGEX) return un$MatchAll(O, regexp);\n    S = toString(O);\n    rx = new RegExp(regexp, 'g');\n    return IS_PURE ? call($matchAll, rx, S) : rx[MATCH_ALL](S);\n  }\n});\n\nIS_PURE || MATCH_ALL in RegExpPrototype || redefine(RegExpPrototype, MATCH_ALL, $matchAll);\n","'use strict';\nvar call = require('../internals/function-call');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar getMethod = require('../internals/get-method');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNative) {\n  return [\n    // `String.prototype.match` method\n    // https://tc39.es/ecma262/#sec-string.prototype.match\n    function match(regexp) {\n      var O = requireObjectCoercible(this);\n      var matcher = regexp == undefined ? undefined : getMethod(regexp, MATCH);\n      return matcher ? call(matcher, regexp, O) : new RegExp(regexp)[MATCH](toString(O));\n    },\n    // `RegExp.prototype[@@match]` method\n    // https://tc39.es/ecma262/#sec-regexp.prototype-@@match\n    function (string) {\n      var rx = anObject(this);\n      var S = toString(string);\n      var res = maybeCallNative(nativeMatch, rx, S);\n\n      if (res.done) return res.value;\n\n      if (!rx.global) return regExpExec(rx, S);\n\n      var fullUnicode = rx.unicode;\n      rx.lastIndex = 0;\n      var A = [];\n      var n = 0;\n      var result;\n      while ((result = regExpExec(rx, S)) !== null) {\n        var matchStr = toString(result[0]);\n        A[n] = matchStr;\n        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n        n++;\n      }\n      return n === 0 ? null : A;\n    }\n  ];\n});\n","var $ = require('../internals/export');\nvar repeat = require('../internals/string-repeat');\n\n// `String.prototype.repeat` method\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\n$({ target: 'String', proto: true }, {\n  repeat: repeat\n});\n","'use strict';\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar fails = require('../internals/fails');\nvar anObject = require('../internals/an-object');\nvar isCallable = require('../internals/is-callable');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar getMethod = require('../internals/get-method');\nvar getSubstitution = require('../internals/get-substitution');\nvar regExpExec = require('../internals/regexp-exec-abstract');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar REPLACE = wellKnownSymbol('replace');\nvar max = Math.max;\nvar min = Math.min;\nvar concat = uncurryThis([].concat);\nvar push = uncurryThis([].push);\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar stringSlice = uncurryThis(''.slice);\n\nvar maybeToString = function (it) {\n  return it === undefined ? it : String(it);\n};\n\n// IE <= 11 replaces $0 with the whole match, as if it was $&\n// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0\nvar REPLACE_KEEPS_$0 = (function () {\n  // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing\n  return 'a'.replace(/./, '$0') === '$0';\n})();\n\n// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string\nvar REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {\n  if (/./[REPLACE]) {\n    return /./[REPLACE]('a', '$0') === '';\n  }\n  return false;\n})();\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n  var re = /./;\n  re.exec = function () {\n    var result = [];\n    result.groups = { a: '7' };\n    return result;\n  };\n  // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive\n  return ''.replace(re, '$<a>') !== '7';\n});\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNative) {\n  var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\n\n  return [\n    // `String.prototype.replace` method\n    // https://tc39.es/ecma262/#sec-string.prototype.replace\n    function replace(searchValue, replaceValue) {\n      var O = requireObjectCoercible(this);\n      var replacer = searchValue == undefined ? undefined : getMethod(searchValue, REPLACE);\n      return replacer\n        ? call(replacer, searchValue, O, replaceValue)\n        : call(nativeReplace, toString(O), searchValue, replaceValue);\n    },\n    // `RegExp.prototype[@@replace]` method\n    // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace\n    function (string, replaceValue) {\n      var rx = anObject(this);\n      var S = toString(string);\n\n      if (\n        typeof replaceValue == 'string' &&\n        stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 &&\n        stringIndexOf(replaceValue, '$<') === -1\n      ) {\n        var res = maybeCallNative(nativeReplace, rx, S, replaceValue);\n        if (res.done) return res.value;\n      }\n\n      var functionalReplace = isCallable(replaceValue);\n      if (!functionalReplace) replaceValue = toString(replaceValue);\n\n      var global = rx.global;\n      if (global) {\n        var fullUnicode = rx.unicode;\n        rx.lastIndex = 0;\n      }\n      var results = [];\n      while (true) {\n        var result = regExpExec(rx, S);\n        if (result === null) break;\n\n        push(results, result);\n        if (!global) break;\n\n        var matchStr = toString(result[0]);\n        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n      }\n\n      var accumulatedResult = '';\n      var nextSourcePosition = 0;\n      for (var i = 0; i < results.length; i++) {\n        result = results[i];\n\n        var matched = toString(result[0]);\n        var position = max(min(toIntegerOrInfinity(result.index), S.length), 0);\n        var captures = [];\n        // NOTE: This is equivalent to\n        //   captures = result.slice(1).map(maybeToString)\n        // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n        // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n        // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n        for (var j = 1; j < result.length; j++) push(captures, maybeToString(result[j]));\n        var namedCaptures = result.groups;\n        if (functionalReplace) {\n          var replacerArgs = concat([matched], captures, position, S);\n          if (namedCaptures !== undefined) push(replacerArgs, namedCaptures);\n          var replacement = toString(apply(replaceValue, undefined, replacerArgs));\n        } else {\n          replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n        }\n        if (position >= nextSourcePosition) {\n          accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement;\n          nextSourcePosition = position + matched.length;\n        }\n      }\n      return accumulatedResult + stringSlice(S, nextSourcePosition);\n    }\n  ];\n}, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);\n","'use strict';\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar isRegExp = require('../internals/is-regexp');\nvar anObject = require('../internals/an-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar speciesConstructor = require('../internals/species-constructor');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar getMethod = require('../internals/get-method');\nvar arraySlice = require('../internals/array-slice');\nvar callRegExpExec = require('../internals/regexp-exec-abstract');\nvar regexpExec = require('../internals/regexp-exec');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar fails = require('../internals/fails');\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\nvar MAX_UINT32 = 0xFFFFFFFF;\nvar min = Math.min;\nvar $push = [].push;\nvar exec = uncurryThis(/./.exec);\nvar push = uncurryThis($push);\nvar stringSlice = uncurryThis(''.slice);\n\n// Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n// Weex JS has frozen built-in prototypes, so use try / catch wrapper\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {\n  // eslint-disable-next-line regexp/no-empty-group -- required for testing\n  var re = /(?:)/;\n  var originalExec = re.exec;\n  re.exec = function () { return originalExec.apply(this, arguments); };\n  var result = 'ab'.split(re);\n  return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';\n});\n\n// @@split logic\nfixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNative) {\n  var internalSplit;\n  if (\n    'abbc'.split(/(b)*/)[1] == 'c' ||\n    // eslint-disable-next-line regexp/no-empty-group -- required for testing\n    'test'.split(/(?:)/, -1).length != 4 ||\n    'ab'.split(/(?:ab)*/).length != 2 ||\n    '.'.split(/(.?)(.?)/).length != 4 ||\n    // eslint-disable-next-line regexp/no-empty-capturing-group, regexp/no-empty-group -- required for testing\n    '.'.split(/()()/).length > 1 ||\n    ''.split(/.?/).length\n  ) {\n    // based on es5-shim implementation, need to rework it\n    internalSplit = function (separator, limit) {\n      var string = toString(requireObjectCoercible(this));\n      var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n      if (lim === 0) return [];\n      if (separator === undefined) return [string];\n      // If `separator` is not a regex, use native split\n      if (!isRegExp(separator)) {\n        return call(nativeSplit, string, separator, lim);\n      }\n      var output = [];\n      var flags = (separator.ignoreCase ? 'i' : '') +\n                  (separator.multiline ? 'm' : '') +\n                  (separator.unicode ? 'u' : '') +\n                  (separator.sticky ? 'y' : '');\n      var lastLastIndex = 0;\n      // Make `global` and avoid `lastIndex` issues by working with a copy\n      var separatorCopy = new RegExp(separator.source, flags + 'g');\n      var match, lastIndex, lastLength;\n      while (match = call(regexpExec, separatorCopy, string)) {\n        lastIndex = separatorCopy.lastIndex;\n        if (lastIndex > lastLastIndex) {\n          push(output, stringSlice(string, lastLastIndex, match.index));\n          if (match.length > 1 && match.index < string.length) apply($push, output, arraySlice(match, 1));\n          lastLength = match[0].length;\n          lastLastIndex = lastIndex;\n          if (output.length >= lim) break;\n        }\n        if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop\n      }\n      if (lastLastIndex === string.length) {\n        if (lastLength || !exec(separatorCopy, '')) push(output, '');\n      } else push(output, stringSlice(string, lastLastIndex));\n      return output.length > lim ? arraySlice(output, 0, lim) : output;\n    };\n  // Chakra, V8\n  } else if ('0'.split(undefined, 0).length) {\n    internalSplit = function (separator, limit) {\n      return separator === undefined && limit === 0 ? [] : call(nativeSplit, this, separator, limit);\n    };\n  } else internalSplit = nativeSplit;\n\n  return [\n    // `String.prototype.split` method\n    // https://tc39.es/ecma262/#sec-string.prototype.split\n    function split(separator, limit) {\n      var O = requireObjectCoercible(this);\n      var splitter = separator == undefined ? undefined : getMethod(separator, SPLIT);\n      return splitter\n        ? call(splitter, separator, O, limit)\n        : call(internalSplit, toString(O), separator, limit);\n    },\n    // `RegExp.prototype[@@split]` method\n    // https://tc39.es/ecma262/#sec-regexp.prototype-@@split\n    //\n    // NOTE: This cannot be properly polyfilled in engines that don't support\n    // the 'y' flag.\n    function (string, limit) {\n      var rx = anObject(this);\n      var S = toString(string);\n      var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit);\n\n      if (res.done) return res.value;\n\n      var C = speciesConstructor(rx, RegExp);\n\n      var unicodeMatching = rx.unicode;\n      var flags = (rx.ignoreCase ? 'i' : '') +\n                  (rx.multiline ? 'm' : '') +\n                  (rx.unicode ? 'u' : '') +\n                  (UNSUPPORTED_Y ? 'g' : 'y');\n\n      // ^(? + rx + ) is needed, in combination with some S slicing, to\n      // simulate the 'y' flag.\n      var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags);\n      var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n      if (lim === 0) return [];\n      if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n      var p = 0;\n      var q = 0;\n      var A = [];\n      while (q < S.length) {\n        splitter.lastIndex = UNSUPPORTED_Y ? 0 : q;\n        var z = callRegExpExec(splitter, UNSUPPORTED_Y ? stringSlice(S, q) : S);\n        var e;\n        if (\n          z === null ||\n          (e = min(toLength(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p\n        ) {\n          q = advanceStringIndex(S, q, unicodeMatching);\n        } else {\n          push(A, stringSlice(S, p, q));\n          if (A.length === lim) return A;\n          for (var i = 1; i <= z.length - 1; i++) {\n            push(A, z[i]);\n            if (A.length === lim) return A;\n          }\n          q = p = e;\n        }\n      }\n      push(A, stringSlice(S, p));\n      return A;\n    }\n  ];\n}, !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC, UNSUPPORTED_Y);\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.strike` method\n// https://tc39.es/ecma262/#sec-string.prototype.strike\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('strike') }, {\n  strike: function strike() {\n    return createHTML(this, 'strike', '', '');\n  }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n  trim: function trim() {\n    return $trim(this);\n  }\n});\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.asyncIterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.asynciterator\ndefineWellKnownSymbol('asyncIterator');\n","// `Symbol.prototype.description` getter\n// https://tc39.es/ecma262/#sec-symbol.prototype.description\n'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar toString = require('../internals/to-string');\nvar defineProperty = require('../internals/object-define-property').f;\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\n\nvar NativeSymbol = global.Symbol;\nvar SymbolPrototype = NativeSymbol && NativeSymbol.prototype;\n\nif (DESCRIPTORS && isCallable(NativeSymbol) && (!('description' in SymbolPrototype) ||\n  // Safari 12 bug\n  NativeSymbol().description !== undefined\n)) {\n  var EmptyStringDescriptionStore = {};\n  // wrap Symbol constructor for correct work with undefined description\n  var SymbolWrapper = function Symbol() {\n    var description = arguments.length < 1 || arguments[0] === undefined ? undefined : toString(arguments[0]);\n    var result = isPrototypeOf(SymbolPrototype, this)\n      ? new NativeSymbol(description)\n      // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)'\n      : description === undefined ? NativeSymbol() : NativeSymbol(description);\n    if (description === '') EmptyStringDescriptionStore[result] = true;\n    return result;\n  };\n\n  copyConstructorProperties(SymbolWrapper, NativeSymbol);\n  SymbolWrapper.prototype = SymbolPrototype;\n  SymbolPrototype.constructor = SymbolWrapper;\n\n  var NATIVE_SYMBOL = String(NativeSymbol('test')) == 'Symbol(test)';\n  var symbolToString = uncurryThis(SymbolPrototype.toString);\n  var symbolValueOf = uncurryThis(SymbolPrototype.valueOf);\n  var regexp = /^Symbol\\((.*)\\)[^)]+$/;\n  var replace = uncurryThis(''.replace);\n  var stringSlice = uncurryThis(''.slice);\n\n  defineProperty(SymbolPrototype, 'description', {\n    configurable: true,\n    get: function description() {\n      var symbol = symbolValueOf(this);\n      var string = symbolToString(symbol);\n      if (hasOwn(EmptyStringDescriptionStore, symbol)) return '';\n      var desc = NATIVE_SYMBOL ? stringSlice(string, 7, -1) : replace(string, regexp, '$1');\n      return desc === '' ? undefined : desc;\n    }\n  });\n\n  $({ global: true, forced: true }, {\n    Symbol: SymbolWrapper\n  });\n}\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.iterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.iterator\ndefineWellKnownSymbol('iterator');\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar fails = require('../internals/fails');\nvar hasOwn = require('../internals/has-own-property');\nvar isArray = require('../internals/is-array');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar isSymbol = require('../internals/is-symbol');\nvar anObject = require('../internals/an-object');\nvar toObject = require('../internals/to-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar $toString = require('../internals/to-string');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar nativeObjectCreate = require('../internals/object-create');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar arraySlice = require('../internals/array-slice');\nvar redefine = require('../internals/redefine');\nvar shared = require('../internals/shared');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar uid = require('../internals/uid');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineWellKnownSymbol = require('../internals/define-well-known-symbol');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar HIDDEN = sharedKey('hidden');\nvar SYMBOL = 'Symbol';\nvar PROTOTYPE = 'prototype';\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\n\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = global.Symbol;\nvar SymbolPrototype = $Symbol && $Symbol[PROTOTYPE];\nvar TypeError = global.TypeError;\nvar QObject = global.QObject;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar push = uncurryThis([].push);\n\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\nvar WellKnownSymbolsStore = shared('wks');\n\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n  return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n    get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n  })).a != 7;\n}) ? function (O, P, Attributes) {\n  var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);\n  if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n  nativeDefineProperty(O, P, Attributes);\n  if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n    nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);\n  }\n} : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n  var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype);\n  setInternalState(symbol, {\n    type: SYMBOL,\n    tag: tag,\n    description: description\n  });\n  if (!DESCRIPTORS) symbol.description = description;\n  return symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n  if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n  anObject(O);\n  var key = toPropertyKey(P);\n  anObject(Attributes);\n  if (hasOwn(AllSymbols, key)) {\n    if (!Attributes.enumerable) {\n      if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));\n      O[HIDDEN][key] = true;\n    } else {\n      if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n      Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n    } return setSymbolDescriptor(O, key, Attributes);\n  } return nativeDefineProperty(O, key, Attributes);\n};\n\nvar $defineProperties = function defineProperties(O, Properties) {\n  anObject(O);\n  var properties = toIndexedObject(Properties);\n  var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n  $forEach(keys, function (key) {\n    if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) $defineProperty(O, key, properties[key]);\n  });\n  return O;\n};\n\nvar $create = function create(O, Properties) {\n  return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n  var P = toPropertyKey(V);\n  var enumerable = call(nativePropertyIsEnumerable, this, P);\n  if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) return false;\n  return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P]\n    ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n  var it = toIndexedObject(O);\n  var key = toPropertyKey(P);\n  if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) return;\n  var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n  if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) {\n    descriptor.enumerable = true;\n  }\n  return descriptor;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n  var names = nativeGetOwnPropertyNames(toIndexedObject(O));\n  var result = [];\n  $forEach(names, function (key) {\n    if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) push(result, key);\n  });\n  return result;\n};\n\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(O) {\n  var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n  var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n  var result = [];\n  $forEach(names, function (key) {\n    if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) {\n      push(result, AllSymbols[key]);\n    }\n  });\n  return result;\n};\n\n// `Symbol` constructor\n// https://tc39.es/ecma262/#sec-symbol-constructor\nif (!NATIVE_SYMBOL) {\n  $Symbol = function Symbol() {\n    if (isPrototypeOf(SymbolPrototype, this)) throw TypeError('Symbol is not a constructor');\n    var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);\n    var tag = uid(description);\n    var setter = function (value) {\n      if (this === ObjectPrototype) call(setter, ObjectPrototypeSymbols, value);\n      if (hasOwn(this, HIDDEN) && hasOwn(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n      setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));\n    };\n    if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n    return wrap(tag, description);\n  };\n\n  SymbolPrototype = $Symbol[PROTOTYPE];\n\n  redefine(SymbolPrototype, 'toString', function toString() {\n    return getInternalState(this).tag;\n  });\n\n  redefine($Symbol, 'withoutSetter', function (description) {\n    return wrap(uid(description), description);\n  });\n\n  propertyIsEnumerableModule.f = $propertyIsEnumerable;\n  definePropertyModule.f = $defineProperty;\n  getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n  getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n  getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;\n\n  wrappedWellKnownSymbolModule.f = function (name) {\n    return wrap(wellKnownSymbol(name), name);\n  };\n\n  if (DESCRIPTORS) {\n    // https://github.com/tc39/proposal-Symbol-description\n    nativeDefineProperty(SymbolPrototype, 'description', {\n      configurable: true,\n      get: function description() {\n        return getInternalState(this).description;\n      }\n    });\n    if (!IS_PURE) {\n      redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n    }\n  }\n}\n\n$({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {\n  Symbol: $Symbol\n});\n\n$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n  defineWellKnownSymbol(name);\n});\n\n$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n  // `Symbol.for` method\n  // https://tc39.es/ecma262/#sec-symbol.for\n  'for': function (key) {\n    var string = $toString(key);\n    if (hasOwn(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n    var symbol = $Symbol(string);\n    StringToSymbolRegistry[string] = symbol;\n    SymbolToStringRegistry[symbol] = string;\n    return symbol;\n  },\n  // `Symbol.keyFor` method\n  // https://tc39.es/ecma262/#sec-symbol.keyfor\n  keyFor: function keyFor(sym) {\n    if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');\n    if (hasOwn(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n  },\n  useSetter: function () { USE_SETTER = true; },\n  useSimple: function () { USE_SETTER = false; }\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n  // `Object.create` method\n  // https://tc39.es/ecma262/#sec-object.create\n  create: $create,\n  // `Object.defineProperty` method\n  // https://tc39.es/ecma262/#sec-object.defineproperty\n  defineProperty: $defineProperty,\n  // `Object.defineProperties` method\n  // https://tc39.es/ecma262/#sec-object.defineproperties\n  defineProperties: $defineProperties,\n  // `Object.getOwnPropertyDescriptor` method\n  // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n  // `Object.getOwnPropertyNames` method\n  // https://tc39.es/ecma262/#sec-object.getownpropertynames\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // `Object.getOwnPropertySymbols` method\n  // https://tc39.es/ecma262/#sec-object.getownpropertysymbols\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\n$({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, {\n  getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n    return getOwnPropertySymbolsModule.f(toObject(it));\n  }\n});\n\n// `JSON.stringify` method behavior with symbols\n// https://tc39.es/ecma262/#sec-json.stringify\nif ($stringify) {\n  var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails(function () {\n    var symbol = $Symbol();\n    // MS Edge converts symbol values to JSON as {}\n    return $stringify([symbol]) != '[null]'\n      // WebKit converts symbol values to JSON as null\n      || $stringify({ a: symbol }) != '{}'\n      // V8 throws on boxed symbols\n      || $stringify(Object(symbol)) != '{}';\n  });\n\n  $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {\n    // eslint-disable-next-line no-unused-vars -- required for `.length`\n    stringify: function stringify(it, replacer, space) {\n      var args = arraySlice(arguments);\n      var $replacer = replacer;\n      if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n      if (!isArray(replacer)) replacer = function (key, value) {\n        if (isCallable($replacer)) value = call($replacer, this, key, value);\n        if (!isSymbol(value)) return value;\n      };\n      args[1] = replacer;\n      return apply($stringify, null, args);\n    }\n  });\n}\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\nif (!SymbolPrototype[TO_PRIMITIVE]) {\n  var valueOf = SymbolPrototype.valueOf;\n  // eslint-disable-next-line no-unused-vars -- required for .length\n  redefine(SymbolPrototype, TO_PRIMITIVE, function (hint) {\n    // TODO: improve hint logic\n    return call(valueOf, this);\n  });\n}\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.toPrimitive` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.toprimitive\ndefineWellKnownSymbol('toPrimitive');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.toStringTag` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.tostringtag\ndefineWellKnownSymbol('toStringTag');\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $ArrayCopyWithin = require('../internals/array-copy-within');\n\nvar u$ArrayCopyWithin = uncurryThis($ArrayCopyWithin);\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.copyWithin` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.copywithin\nexportTypedArrayMethod('copyWithin', function copyWithin(target, start /* , end */) {\n  return u$ArrayCopyWithin(aTypedArray(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $every = require('../internals/array-iteration').every;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.every` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.every\nexportTypedArrayMethod('every', function every(callbackfn /* , thisArg */) {\n  return $every(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar call = require('../internals/function-call');\nvar $fill = require('../internals/array-fill');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.fill` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.fill\nexportTypedArrayMethod('fill', function fill(value /* , start, end */) {\n  var length = arguments.length;\n  return call(\n    $fill,\n    aTypedArray(this),\n    value,\n    length > 1 ? arguments[1] : undefined,\n    length > 2 ? arguments[2] : undefined\n  );\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $filter = require('../internals/array-iteration').filter;\nvar fromSpeciesAndList = require('../internals/typed-array-from-species-and-list');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.filter` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.filter\nexportTypedArrayMethod('filter', function filter(callbackfn /* , thisArg */) {\n  var list = $filter(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  return fromSpeciesAndList(this, list);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $findIndex = require('../internals/array-iteration').findIndex;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.findIndex` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.findindex\nexportTypedArrayMethod('findIndex', function findIndex(predicate /* , thisArg */) {\n  return $findIndex(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $find = require('../internals/array-iteration').find;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.find` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.find\nexportTypedArrayMethod('find', function find(predicate /* , thisArg */) {\n  return $find(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Float32Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Float32', function (init) {\n  return function Float32Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Float64Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Float64', function (init) {\n  return function Float64Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.forEach` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.foreach\nexportTypedArrayMethod('forEach', function forEach(callbackfn /* , thisArg */) {\n  $forEach(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = require('../internals/typed-array-constructors-require-wrappers');\nvar exportTypedArrayStaticMethod = require('../internals/array-buffer-view-core').exportTypedArrayStaticMethod;\nvar typedArrayFrom = require('../internals/typed-array-from');\n\n// `%TypedArray%.from` method\n// https://tc39.es/ecma262/#sec-%typedarray%.from\nexportTypedArrayStaticMethod('from', typedArrayFrom, TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS);\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $includes = require('../internals/array-includes').includes;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.includes` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.includes\nexportTypedArrayMethod('includes', function includes(searchElement /* , fromIndex */) {\n  return $includes(aTypedArray(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $indexOf = require('../internals/array-includes').indexOf;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.indexOf` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.indexof\nexportTypedArrayMethod('indexOf', function indexOf(searchElement /* , fromIndex */) {\n  return $indexOf(aTypedArray(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n});\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Int16Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Int16', function (init) {\n  return function Int16Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Int32Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Int32', function (init) {\n  return function Int32Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Int8Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Int8', function (init) {\n  return function Int8Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n","'use strict';\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar ArrayIterators = require('../modules/es.array.iterator');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar Uint8Array = global.Uint8Array;\nvar arrayValues = uncurryThis(ArrayIterators.values);\nvar arrayKeys = uncurryThis(ArrayIterators.keys);\nvar arrayEntries = uncurryThis(ArrayIterators.entries);\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar nativeTypedArrayIterator = Uint8Array && Uint8Array.prototype[ITERATOR];\n\nvar PROPER_ARRAY_VALUES_NAME = !!nativeTypedArrayIterator && nativeTypedArrayIterator.name === 'values';\n\nvar typedArrayValues = function values() {\n  return arrayValues(aTypedArray(this));\n};\n\n// `%TypedArray%.prototype.entries` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.entries\nexportTypedArrayMethod('entries', function entries() {\n  return arrayEntries(aTypedArray(this));\n});\n// `%TypedArray%.prototype.keys` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.keys\nexportTypedArrayMethod('keys', function keys() {\n  return arrayKeys(aTypedArray(this));\n});\n// `%TypedArray%.prototype.values` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.values\nexportTypedArrayMethod('values', typedArrayValues, PROPER_FUNCTION_NAME && !PROPER_ARRAY_VALUES_NAME);\n// `%TypedArray%.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype-@@iterator\nexportTypedArrayMethod(ITERATOR, typedArrayValues, PROPER_FUNCTION_NAME && !PROPER_ARRAY_VALUES_NAME);\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $join = uncurryThis([].join);\n\n// `%TypedArray%.prototype.join` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.join\nexportTypedArrayMethod('join', function join(separator) {\n  return $join(aTypedArray(this), separator);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar apply = require('../internals/function-apply');\nvar $lastIndexOf = require('../internals/array-last-index-of');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.lastIndexOf` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.lastindexof\nexportTypedArrayMethod('lastIndexOf', function lastIndexOf(searchElement /* , fromIndex */) {\n  var length = arguments.length;\n  return apply($lastIndexOf, aTypedArray(this), length > 1 ? [searchElement, arguments[1]] : [searchElement]);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $map = require('../internals/array-iteration').map;\nvar typedArraySpeciesConstructor = require('../internals/typed-array-species-constructor');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.map` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.map\nexportTypedArrayMethod('map', function map(mapfn /* , thisArg */) {\n  return $map(aTypedArray(this), mapfn, arguments.length > 1 ? arguments[1] : undefined, function (O, length) {\n    return new (typedArraySpeciesConstructor(O))(length);\n  });\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $reduceRight = require('../internals/array-reduce').right;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.reduceRicht` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduceright\nexportTypedArrayMethod('reduceRight', function reduceRight(callbackfn /* , initialValue */) {\n  var length = arguments.length;\n  return $reduceRight(aTypedArray(this), callbackfn, length, length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $reduce = require('../internals/array-reduce').left;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.reduce` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduce\nexportTypedArrayMethod('reduce', function reduce(callbackfn /* , initialValue */) {\n  var length = arguments.length;\n  return $reduce(aTypedArray(this), callbackfn, length, length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar floor = Math.floor;\n\n// `%TypedArray%.prototype.reverse` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reverse\nexportTypedArrayMethod('reverse', function reverse() {\n  var that = this;\n  var length = aTypedArray(that).length;\n  var middle = floor(length / 2);\n  var index = 0;\n  var value;\n  while (index < middle) {\n    value = that[index];\n    that[index++] = that[--length];\n    that[length] = value;\n  } return that;\n});\n","'use strict';\nvar global = require('../internals/global');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toOffset = require('../internals/to-offset');\nvar toObject = require('../internals/to-object');\nvar fails = require('../internals/fails');\n\nvar RangeError = global.RangeError;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\nvar FORCED = fails(function () {\n  // eslint-disable-next-line es/no-typed-arrays -- required for testing\n  new Int8Array(1).set({});\n});\n\n// `%TypedArray%.prototype.set` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.set\nexportTypedArrayMethod('set', function set(arrayLike /* , offset */) {\n  aTypedArray(this);\n  var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1);\n  var length = this.length;\n  var src = toObject(arrayLike);\n  var len = lengthOfArrayLike(src);\n  var index = 0;\n  if (len + offset > length) throw RangeError('Wrong length');\n  while (index < len) this[offset + index] = src[index++];\n}, FORCED);\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar typedArraySpeciesConstructor = require('../internals/typed-array-species-constructor');\nvar fails = require('../internals/fails');\nvar arraySlice = require('../internals/array-slice');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\nvar FORCED = fails(function () {\n  // eslint-disable-next-line es/no-typed-arrays -- required for testing\n  new Int8Array(1).slice();\n});\n\n// `%TypedArray%.prototype.slice` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.slice\nexportTypedArrayMethod('slice', function slice(start, end) {\n  var list = arraySlice(aTypedArray(this), start, end);\n  var C = typedArraySpeciesConstructor(this);\n  var index = 0;\n  var length = list.length;\n  var result = new C(length);\n  while (length > index) result[index] = list[index++];\n  return result;\n}, FORCED);\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $some = require('../internals/array-iteration').some;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.some` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.some\nexportTypedArrayMethod('some', function some(callbackfn /* , thisArg */) {\n  return $some(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar aCallable = require('../internals/a-callable');\nvar internalSort = require('../internals/array-sort');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar FF = require('../internals/engine-ff-version');\nvar IE_OR_EDGE = require('../internals/engine-is-ie-or-edge');\nvar V8 = require('../internals/engine-v8-version');\nvar WEBKIT = require('../internals/engine-webkit-version');\n\nvar Array = global.Array;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar Uint16Array = global.Uint16Array;\nvar un$Sort = Uint16Array && uncurryThis(Uint16Array.prototype.sort);\n\n// WebKit\nvar ACCEPT_INCORRECT_ARGUMENTS = !!un$Sort && !(fails(function () {\n  un$Sort(new Uint16Array(2), null);\n}) && fails(function () {\n  un$Sort(new Uint16Array(2), {});\n}));\n\nvar STABLE_SORT = !!un$Sort && !fails(function () {\n  // feature detection can be too slow, so check engines versions\n  if (V8) return V8 < 74;\n  if (FF) return FF < 67;\n  if (IE_OR_EDGE) return true;\n  if (WEBKIT) return WEBKIT < 602;\n\n  var array = new Uint16Array(516);\n  var expected = Array(516);\n  var index, mod;\n\n  for (index = 0; index < 516; index++) {\n    mod = index % 4;\n    array[index] = 515 - index;\n    expected[index] = index - 2 * mod + 3;\n  }\n\n  un$Sort(array, function (a, b) {\n    return (a / 4 | 0) - (b / 4 | 0);\n  });\n\n  for (index = 0; index < 516; index++) {\n    if (array[index] !== expected[index]) return true;\n  }\n});\n\nvar getSortCompare = function (comparefn) {\n  return function (x, y) {\n    if (comparefn !== undefined) return +comparefn(x, y) || 0;\n    // eslint-disable-next-line no-self-compare -- NaN check\n    if (y !== y) return -1;\n    // eslint-disable-next-line no-self-compare -- NaN check\n    if (x !== x) return 1;\n    if (x === 0 && y === 0) return 1 / x > 0 && 1 / y < 0 ? 1 : -1;\n    return x > y;\n  };\n};\n\n// `%TypedArray%.prototype.sort` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.sort\nexportTypedArrayMethod('sort', function sort(comparefn) {\n  if (comparefn !== undefined) aCallable(comparefn);\n  if (STABLE_SORT) return un$Sort(this, comparefn);\n\n  return internalSort(aTypedArray(this), getSortCompare(comparefn));\n}, !STABLE_SORT || ACCEPT_INCORRECT_ARGUMENTS);\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar toLength = require('../internals/to-length');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar typedArraySpeciesConstructor = require('../internals/typed-array-species-constructor');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.subarray` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.subarray\nexportTypedArrayMethod('subarray', function subarray(begin, end) {\n  var O = aTypedArray(this);\n  var length = O.length;\n  var beginIndex = toAbsoluteIndex(begin, length);\n  var C = typedArraySpeciesConstructor(O);\n  return new C(\n    O.buffer,\n    O.byteOffset + beginIndex * O.BYTES_PER_ELEMENT,\n    toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - beginIndex)\n  );\n});\n","'use strict';\nvar global = require('../internals/global');\nvar apply = require('../internals/function-apply');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar fails = require('../internals/fails');\nvar arraySlice = require('../internals/array-slice');\n\nvar Int8Array = global.Int8Array;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $toLocaleString = [].toLocaleString;\n\n// iOS Safari 6.x fails here\nvar TO_LOCALE_STRING_BUG = !!Int8Array && fails(function () {\n  $toLocaleString.call(new Int8Array(1));\n});\n\nvar FORCED = fails(function () {\n  return [1, 2].toLocaleString() != new Int8Array([1, 2]).toLocaleString();\n}) || !fails(function () {\n  Int8Array.prototype.toLocaleString.call([1, 2]);\n});\n\n// `%TypedArray%.prototype.toLocaleString` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tolocalestring\nexportTypedArrayMethod('toLocaleString', function toLocaleString() {\n  return apply(\n    $toLocaleString,\n    TO_LOCALE_STRING_BUG ? arraySlice(aTypedArray(this)) : aTypedArray(this),\n    arraySlice(arguments)\n  );\n}, FORCED);\n","'use strict';\nvar exportTypedArrayMethod = require('../internals/array-buffer-view-core').exportTypedArrayMethod;\nvar fails = require('../internals/fails');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar Uint8Array = global.Uint8Array;\nvar Uint8ArrayPrototype = Uint8Array && Uint8Array.prototype || {};\nvar arrayToString = [].toString;\nvar join = uncurryThis([].join);\n\nif (fails(function () { arrayToString.call({}); })) {\n  arrayToString = function toString() {\n    return join(this);\n  };\n}\n\nvar IS_NOT_ARRAY_METHOD = Uint8ArrayPrototype.toString != arrayToString;\n\n// `%TypedArray%.prototype.toString` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tostring\nexportTypedArrayMethod('toString', arrayToString, IS_NOT_ARRAY_METHOD);\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Uint16Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint16', function (init) {\n  return function Uint16Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Uint32Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint32', function (init) {\n  return function Uint32Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Uint8Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint8', function (init) {\n  return function Uint8Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Uint8ClampedArray` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint8', function (init) {\n  return function Uint8ClampedArray(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n}, true);\n","// TODO: Remove from `core-js@4`\nrequire('../modules/es.aggregate-error');\n","// TODO: Remove from `core-js@4`\nrequire('../modules/es.global-this');\n","// TODO: Remove from `core-js@4`\nrequire('../modules/es.promise.all-settled.js');\n","// TODO: Remove from `core-js@4`\nrequire('../modules/es.promise.any');\n","'use strict';\nvar $ = require('../internals/export');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\n\n// `Promise.try` method\n// https://github.com/tc39/proposal-promise-try\n$({ target: 'Promise', stat: true }, {\n  'try': function (callbackfn) {\n    var promiseCapability = newPromiseCapabilityModule.f(this);\n    var result = perform(callbackfn);\n    (result.error ? promiseCapability.reject : promiseCapability.resolve)(result.value);\n    return promiseCapability.promise;\n  }\n});\n","// TODO: Remove from `core-js@4`\nrequire('../modules/es.string.match-all');\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar DOMTokenListPrototype = require('../internals/dom-token-list-prototype');\nvar forEach = require('../internals/array-for-each');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar handlePrototype = function (CollectionPrototype) {\n  // some Chrome versions have non-configurable methods on DOMTokenList\n  if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {\n    createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);\n  } catch (error) {\n    CollectionPrototype.forEach = forEach;\n  }\n};\n\nfor (var COLLECTION_NAME in DOMIterables) {\n  if (DOMIterables[COLLECTION_NAME]) {\n    handlePrototype(global[COLLECTION_NAME] && global[COLLECTION_NAME].prototype);\n  }\n}\n\nhandlePrototype(DOMTokenListPrototype);\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar DOMTokenListPrototype = require('../internals/dom-token-list-prototype');\nvar ArrayIteratorMethods = require('../modules/es.array.iterator');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nvar handlePrototype = function (CollectionPrototype, COLLECTION_NAME) {\n  if (CollectionPrototype) {\n    // some Chrome versions have non-configurable methods on DOMTokenList\n    if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n      createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n    } catch (error) {\n      CollectionPrototype[ITERATOR] = ArrayValues;\n    }\n    if (!CollectionPrototype[TO_STRING_TAG]) {\n      createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n    }\n    if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n      // some Chrome versions have non-configurable methods on DOMTokenList\n      if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n        createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n      } catch (error) {\n        CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n      }\n    }\n  }\n};\n\nfor (var COLLECTION_NAME in DOMIterables) {\n  handlePrototype(global[COLLECTION_NAME] && global[COLLECTION_NAME].prototype, COLLECTION_NAME);\n}\n\nhandlePrototype(DOMTokenListPrototype, 'DOMTokenList');\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\n$({ target: 'URL', proto: true, enumerable: true }, {\n  toJSON: function toJSON() {\n    return call(URL.prototype.toString, this);\n  }\n});\n","var parent = require('../../es/promise');\nrequire('../../modules/web.dom-collections.iterator');\n\nmodule.exports = parent;\n","var objectKeys = require('object-keys');\nvar isArguments = require('is-arguments');\nvar is = require('object-is');\nvar isRegex = require('is-regex');\nvar flags = require('regexp.prototype.flags');\nvar isDate = require('is-date-object');\n\nvar getTime = Date.prototype.getTime;\n\nfunction deepEqual(actual, expected, options) {\n  var opts = options || {};\n\n  // 7.1. All identical values are equivalent, as determined by ===.\n  if (opts.strict ? is(actual, expected) : actual === expected) {\n    return true;\n  }\n\n  // 7.3. Other pairs that do not both pass typeof value == 'object', equivalence is determined by ==.\n  if (!actual || !expected || (typeof actual !== 'object' && typeof expected !== 'object')) {\n    return opts.strict ? is(actual, expected) : actual == expected;\n  }\n\n  /*\n   * 7.4. For all other Object pairs, including Array objects, equivalence is\n   * determined by having the same number of owned properties (as verified\n   * with Object.prototype.hasOwnProperty.call), the same set of keys\n   * (although not necessarily the same order), equivalent values for every\n   * corresponding key, and an identical 'prototype' property. Note: this\n   * accounts for both named and indexed properties on Arrays.\n   */\n  // eslint-disable-next-line no-use-before-define\n  return objEquiv(actual, expected, opts);\n}\n\nfunction isUndefinedOrNull(value) {\n  return value === null || value === undefined;\n}\n\nfunction isBuffer(x) {\n  if (!x || typeof x !== 'object' || typeof x.length !== 'number') {\n    return false;\n  }\n  if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n    return false;\n  }\n  if (x.length > 0 && typeof x[0] !== 'number') {\n    return false;\n  }\n  return true;\n}\n\nfunction objEquiv(a, b, opts) {\n  /* eslint max-statements: [2, 50] */\n  var i, key;\n  if (typeof a !== typeof b) { return false; }\n  if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) { return false; }\n\n  // an identical 'prototype' property.\n  if (a.prototype !== b.prototype) { return false; }\n\n  if (isArguments(a) !== isArguments(b)) { return false; }\n\n  var aIsRegex = isRegex(a);\n  var bIsRegex = isRegex(b);\n  if (aIsRegex !== bIsRegex) { return false; }\n  if (aIsRegex || bIsRegex) {\n    return a.source === b.source && flags(a) === flags(b);\n  }\n\n  if (isDate(a) && isDate(b)) {\n    return getTime.call(a) === getTime.call(b);\n  }\n\n  var aIsBuffer = isBuffer(a);\n  var bIsBuffer = isBuffer(b);\n  if (aIsBuffer !== bIsBuffer) { return false; }\n  if (aIsBuffer || bIsBuffer) { // && would work too, because both are true or both false here\n    if (a.length !== b.length) { return false; }\n    for (i = 0; i < a.length; i++) {\n      if (a[i] !== b[i]) { return false; }\n    }\n    return true;\n  }\n\n  if (typeof a !== typeof b) { return false; }\n\n  try {\n    var ka = objectKeys(a);\n    var kb = objectKeys(b);\n  } catch (e) { // happens when one is a string literal and the other isn't\n    return false;\n  }\n  // having the same number of owned properties (keys incorporates hasOwnProperty)\n  if (ka.length !== kb.length) { return false; }\n\n  // the same set of keys (although not necessarily the same order),\n  ka.sort();\n  kb.sort();\n  // ~~~cheap key test\n  for (i = ka.length - 1; i >= 0; i--) {\n    if (ka[i] != kb[i]) { return false; }\n  }\n  // equivalent values for every corresponding key, and ~~~possibly expensive deep test\n  for (i = ka.length - 1; i >= 0; i--) {\n    key = ka[i];\n    if (!deepEqual(a[key], b[key], opts)) { return false; }\n  }\n\n  return true;\n}\n\nmodule.exports = deepEqual;\n","'use strict';\n\nvar $defineProperty = require('es-define-property');\n\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\n\nvar gopd = require('gopd');\n\n/** @type {import('.')} */\nmodule.exports = function defineDataProperty(\n\tobj,\n\tproperty,\n\tvalue\n) {\n\tif (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {\n\t\tthrow new $TypeError('`obj` must be an object or a function`');\n\t}\n\tif (typeof property !== 'string' && typeof property !== 'symbol') {\n\t\tthrow new $TypeError('`property` must be a string or a symbol`');\n\t}\n\tif (arguments.length > 3 && typeof arguments[3] !== 'boolean' && arguments[3] !== null) {\n\t\tthrow new $TypeError('`nonEnumerable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 4 && typeof arguments[4] !== 'boolean' && arguments[4] !== null) {\n\t\tthrow new $TypeError('`nonWritable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 5 && typeof arguments[5] !== 'boolean' && arguments[5] !== null) {\n\t\tthrow new $TypeError('`nonConfigurable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 6 && typeof arguments[6] !== 'boolean') {\n\t\tthrow new $TypeError('`loose`, if provided, must be a boolean');\n\t}\n\n\tvar nonEnumerable = arguments.length > 3 ? arguments[3] : null;\n\tvar nonWritable = arguments.length > 4 ? arguments[4] : null;\n\tvar nonConfigurable = arguments.length > 5 ? arguments[5] : null;\n\tvar loose = arguments.length > 6 ? arguments[6] : false;\n\n\t/* @type {false | TypedPropertyDescriptor<unknown>} */\n\tvar desc = !!gopd && gopd(obj, property);\n\n\tif ($defineProperty) {\n\t\t$defineProperty(obj, property, {\n\t\t\tconfigurable: nonConfigurable === null && desc ? desc.configurable : !nonConfigurable,\n\t\t\tenumerable: nonEnumerable === null && desc ? desc.enumerable : !nonEnumerable,\n\t\t\tvalue: value,\n\t\t\twritable: nonWritable === null && desc ? desc.writable : !nonWritable\n\t\t});\n\t} else if (loose || (!nonEnumerable && !nonWritable && !nonConfigurable)) {\n\t\t// must fall back to [[Set]], and was not explicitly asked to make non-enumerable, non-writable, or non-configurable\n\t\tobj[property] = value; // eslint-disable-line no-param-reassign\n\t} else {\n\t\tthrow new $SyntaxError('This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.');\n\t}\n};\n","'use strict';\n\nvar keys = require('object-keys');\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar defineDataProperty = require('define-data-property');\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar supportsDescriptors = require('has-property-descriptors')();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object) {\n\t\tif (predicate === true) {\n\t\t\tif (object[name] === value) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else if (!isFunction(predicate) || !predicate()) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\tif (supportsDescriptors) {\n\t\tdefineDataProperty(object, name, value, true);\n\t} else {\n\t\tdefineDataProperty(object, name, value);\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\n/** @type {import('.')} */\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true) || false;\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = false;\n\t}\n}\n\nmodule.exports = $defineProperty;\n","'use strict';\n\n/** @type {import('./eval')} */\nmodule.exports = EvalError;\n","'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Error;\n","'use strict';\n\n/** @type {import('./range')} */\nmodule.exports = RangeError;\n","'use strict';\n\n/** @type {import('./ref')} */\nmodule.exports = ReferenceError;\n","'use strict';\n\n/** @type {import('./syntax')} */\nmodule.exports = SyntaxError;\n","'use strict';\n\n/** @type {import('./type')} */\nmodule.exports = TypeError;\n","'use strict';\n\n/** @type {import('./uri')} */\nmodule.exports = URIError;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n  ? R.apply\n  : function ReflectApply(target, receiver, args) {\n    return Function.prototype.apply.call(target, receiver, args);\n  }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n  ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target)\n      .concat(Object.getOwnPropertySymbols(target));\n  };\n} else {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target);\n  };\n}\n\nfunction ProcessEmitWarning(warning) {\n  if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n  return value !== value;\n}\n\nfunction EventEmitter() {\n  EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n  if (typeof listener !== 'function') {\n    throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n  }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n  enumerable: true,\n  get: function() {\n    return defaultMaxListeners;\n  },\n  set: function(arg) {\n    if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n      throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n    }\n    defaultMaxListeners = arg;\n  }\n});\n\nEventEmitter.init = function() {\n\n  if (this._events === undefined ||\n      this._events === Object.getPrototypeOf(this)._events) {\n    this._events = Object.create(null);\n    this._eventsCount = 0;\n  }\n\n  this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n  if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n    throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n  }\n  this._maxListeners = n;\n  return this;\n};\n\nfunction _getMaxListeners(that) {\n  if (that._maxListeners === undefined)\n    return EventEmitter.defaultMaxListeners;\n  return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n  return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n  var args = [];\n  for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n  var doError = (type === 'error');\n\n  var events = this._events;\n  if (events !== undefined)\n    doError = (doError && events.error === undefined);\n  else if (!doError)\n    return false;\n\n  // If there is no 'error' event listener then throw.\n  if (doError) {\n    var er;\n    if (args.length > 0)\n      er = args[0];\n    if (er instanceof Error) {\n      // Note: The comments on the `throw` lines are intentional, they show\n      // up in Node's output if this results in an unhandled exception.\n      throw er; // Unhandled 'error' event\n    }\n    // At least give some kind of context to the user\n    var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n    err.context = er;\n    throw err; // Unhandled 'error' event\n  }\n\n  var handler = events[type];\n\n  if (handler === undefined)\n    return false;\n\n  if (typeof handler === 'function') {\n    ReflectApply(handler, this, args);\n  } else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      ReflectApply(listeners[i], this, args);\n  }\n\n  return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n  var m;\n  var events;\n  var existing;\n\n  checkListener(listener);\n\n  events = target._events;\n  if (events === undefined) {\n    events = target._events = Object.create(null);\n    target._eventsCount = 0;\n  } else {\n    // To avoid recursion in the case that type === \"newListener\"! Before\n    // adding it to the listeners, first emit \"newListener\".\n    if (events.newListener !== undefined) {\n      target.emit('newListener', type,\n                  listener.listener ? listener.listener : listener);\n\n      // Re-assign `events` because a newListener handler could have caused the\n      // this._events to be assigned to a new object\n      events = target._events;\n    }\n    existing = events[type];\n  }\n\n  if (existing === undefined) {\n    // Optimize the case of one listener. Don't need the extra array object.\n    existing = events[type] = listener;\n    ++target._eventsCount;\n  } else {\n    if (typeof existing === 'function') {\n      // Adding the second element, need to change to array.\n      existing = events[type] =\n        prepend ? [listener, existing] : [existing, listener];\n      // If we've already got an array, just append.\n    } else if (prepend) {\n      existing.unshift(listener);\n    } else {\n      existing.push(listener);\n    }\n\n    // Check for listener leak\n    m = _getMaxListeners(target);\n    if (m > 0 && existing.length > m && !existing.warned) {\n      existing.warned = true;\n      // No error code for this since it is a Warning\n      // eslint-disable-next-line no-restricted-syntax\n      var w = new Error('Possible EventEmitter memory leak detected. ' +\n                          existing.length + ' ' + String(type) + ' listeners ' +\n                          'added. Use emitter.setMaxListeners() to ' +\n                          'increase limit');\n      w.name = 'MaxListenersExceededWarning';\n      w.emitter = target;\n      w.type = type;\n      w.count = existing.length;\n      ProcessEmitWarning(w);\n    }\n  }\n\n  return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n  return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n    function prependListener(type, listener) {\n      return _addListener(this, type, listener, true);\n    };\n\nfunction onceWrapper() {\n  if (!this.fired) {\n    this.target.removeListener(this.type, this.wrapFn);\n    this.fired = true;\n    if (arguments.length === 0)\n      return this.listener.call(this.target);\n    return this.listener.apply(this.target, arguments);\n  }\n}\n\nfunction _onceWrap(target, type, listener) {\n  var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n  var wrapped = onceWrapper.bind(state);\n  wrapped.listener = listener;\n  state.wrapFn = wrapped;\n  return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n  checkListener(listener);\n  this.on(type, _onceWrap(this, type, listener));\n  return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n    function prependOnceListener(type, listener) {\n      checkListener(listener);\n      this.prependListener(type, _onceWrap(this, type, listener));\n      return this;\n    };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n    function removeListener(type, listener) {\n      var list, events, position, i, originalListener;\n\n      checkListener(listener);\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      list = events[type];\n      if (list === undefined)\n        return this;\n\n      if (list === listener || list.listener === listener) {\n        if (--this._eventsCount === 0)\n          this._events = Object.create(null);\n        else {\n          delete events[type];\n          if (events.removeListener)\n            this.emit('removeListener', type, list.listener || listener);\n        }\n      } else if (typeof list !== 'function') {\n        position = -1;\n\n        for (i = list.length - 1; i >= 0; i--) {\n          if (list[i] === listener || list[i].listener === listener) {\n            originalListener = list[i].listener;\n            position = i;\n            break;\n          }\n        }\n\n        if (position < 0)\n          return this;\n\n        if (position === 0)\n          list.shift();\n        else {\n          spliceOne(list, position);\n        }\n\n        if (list.length === 1)\n          events[type] = list[0];\n\n        if (events.removeListener !== undefined)\n          this.emit('removeListener', type, originalListener || listener);\n      }\n\n      return this;\n    };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n    function removeAllListeners(type) {\n      var listeners, events, i;\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      // not listening for removeListener, no need to emit\n      if (events.removeListener === undefined) {\n        if (arguments.length === 0) {\n          this._events = Object.create(null);\n          this._eventsCount = 0;\n        } else if (events[type] !== undefined) {\n          if (--this._eventsCount === 0)\n            this._events = Object.create(null);\n          else\n            delete events[type];\n        }\n        return this;\n      }\n\n      // emit removeListener for all listeners on all events\n      if (arguments.length === 0) {\n        var keys = Object.keys(events);\n        var key;\n        for (i = 0; i < keys.length; ++i) {\n          key = keys[i];\n          if (key === 'removeListener') continue;\n          this.removeAllListeners(key);\n        }\n        this.removeAllListeners('removeListener');\n        this._events = Object.create(null);\n        this._eventsCount = 0;\n        return this;\n      }\n\n      listeners = events[type];\n\n      if (typeof listeners === 'function') {\n        this.removeListener(type, listeners);\n      } else if (listeners !== undefined) {\n        // LIFO order\n        for (i = listeners.length - 1; i >= 0; i--) {\n          this.removeListener(type, listeners[i]);\n        }\n      }\n\n      return this;\n    };\n\nfunction _listeners(target, type, unwrap) {\n  var events = target._events;\n\n  if (events === undefined)\n    return [];\n\n  var evlistener = events[type];\n  if (evlistener === undefined)\n    return [];\n\n  if (typeof evlistener === 'function')\n    return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n  return unwrap ?\n    unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n  return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n  return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  if (typeof emitter.listenerCount === 'function') {\n    return emitter.listenerCount(type);\n  } else {\n    return listenerCount.call(emitter, type);\n  }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n  var events = this._events;\n\n  if (events !== undefined) {\n    var evlistener = events[type];\n\n    if (typeof evlistener === 'function') {\n      return 1;\n    } else if (evlistener !== undefined) {\n      return evlistener.length;\n    }\n  }\n\n  return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n  return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n  var copy = new Array(n);\n  for (var i = 0; i < n; ++i)\n    copy[i] = arr[i];\n  return copy;\n}\n\nfunction spliceOne(list, index) {\n  for (; index + 1 < list.length; index++)\n    list[index] = list[index + 1];\n  list.pop();\n}\n\nfunction unwrapListeners(arr) {\n  var ret = new Array(arr.length);\n  for (var i = 0; i < ret.length; ++i) {\n    ret[i] = arr[i].listener || arr[i];\n  }\n  return ret;\n}\n\nfunction once(emitter, name) {\n  return new Promise(function (resolve, reject) {\n    function errorListener(err) {\n      emitter.removeListener(name, resolver);\n      reject(err);\n    }\n\n    function resolver() {\n      if (typeof emitter.removeListener === 'function') {\n        emitter.removeListener('error', errorListener);\n      }\n      resolve([].slice.call(arguments));\n    };\n\n    eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n    if (name !== 'error') {\n      addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n    }\n  });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n  if (typeof emitter.on === 'function') {\n    eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n  }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n  if (typeof emitter.on === 'function') {\n    if (flags.once) {\n      emitter.once(name, listener);\n    } else {\n      emitter.on(name, listener);\n    }\n  } else if (typeof emitter.addEventListener === 'function') {\n    // EventTarget does not have `error` event semantics like Node\n    // EventEmitters, we do not listen for `error` events here.\n    emitter.addEventListener(name, function wrapListener(arg) {\n      // IE does not have builtin `{ once: true }` support so we\n      // have to do it manually.\n      if (flags.once) {\n        emitter.removeEventListener(name, wrapListener);\n      }\n      listener(arg);\n    });\n  } else {\n    throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n  }\n}\n","\"use strict\";\n\n// eslint-disable-next-line func-names\nmodule.exports = function () {\n  if (typeof globalThis === \"object\") {\n    return globalThis;\n  }\n\n  var g;\n\n  try {\n    // This works if eval is allowed (see CSP)\n    // eslint-disable-next-line no-new-func\n    g = this || new Function(\"return this\")();\n  } catch (e) {\n    // This works if the window reference is available\n    if (typeof window === \"object\") {\n      return window;\n    } // This works if the self reference is available\n\n\n    if (typeof self === \"object\") {\n      return self;\n    } // This works if the global reference is available\n\n\n    if (typeof global !== \"undefined\") {\n      return global;\n    }\n  }\n\n  return g;\n}();","'use strict';\n\nvar isCallable = require('is-callable');\n\nvar toStr = Object.prototype.toString;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar forEachArray = function forEachArray(array, iterator, receiver) {\n    for (var i = 0, len = array.length; i < len; i++) {\n        if (hasOwnProperty.call(array, i)) {\n            if (receiver == null) {\n                iterator(array[i], i, array);\n            } else {\n                iterator.call(receiver, array[i], i, array);\n            }\n        }\n    }\n};\n\nvar forEachString = function forEachString(string, iterator, receiver) {\n    for (var i = 0, len = string.length; i < len; i++) {\n        // no such thing as a sparse string.\n        if (receiver == null) {\n            iterator(string.charAt(i), i, string);\n        } else {\n            iterator.call(receiver, string.charAt(i), i, string);\n        }\n    }\n};\n\nvar forEachObject = function forEachObject(object, iterator, receiver) {\n    for (var k in object) {\n        if (hasOwnProperty.call(object, k)) {\n            if (receiver == null) {\n                iterator(object[k], k, object);\n            } else {\n                iterator.call(receiver, object[k], k, object);\n            }\n        }\n    }\n};\n\nvar forEach = function forEach(list, iterator, thisArg) {\n    if (!isCallable(iterator)) {\n        throw new TypeError('iterator must be a function');\n    }\n\n    var receiver;\n    if (arguments.length >= 3) {\n        receiver = thisArg;\n    }\n\n    if (toStr.call(list) === '[object Array]') {\n        forEachArray(list, iterator, receiver);\n    } else if (typeof list === 'string') {\n        forEachString(list, iterator, receiver);\n    } else {\n        forEachObject(list, iterator, receiver);\n    }\n};\n\nmodule.exports = forEach;\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar toStr = Object.prototype.toString;\nvar max = Math.max;\nvar funcType = '[object Function]';\n\nvar concatty = function concatty(a, b) {\n    var arr = [];\n\n    for (var i = 0; i < a.length; i += 1) {\n        arr[i] = a[i];\n    }\n    for (var j = 0; j < b.length; j += 1) {\n        arr[j + a.length] = b[j];\n    }\n\n    return arr;\n};\n\nvar slicy = function slicy(arrLike, offset) {\n    var arr = [];\n    for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {\n        arr[j] = arrLike[i];\n    }\n    return arr;\n};\n\nvar joiny = function (arr, joiner) {\n    var str = '';\n    for (var i = 0; i < arr.length; i += 1) {\n        str += arr[i];\n        if (i + 1 < arr.length) {\n            str += joiner;\n        }\n    }\n    return str;\n};\n\nmodule.exports = function bind(that) {\n    var target = this;\n    if (typeof target !== 'function' || toStr.apply(target) !== funcType) {\n        throw new TypeError(ERROR_MESSAGE + target);\n    }\n    var args = slicy(arguments, 1);\n\n    var bound;\n    var binder = function () {\n        if (this instanceof bound) {\n            var result = target.apply(\n                this,\n                concatty(args, arguments)\n            );\n            if (Object(result) === result) {\n                return result;\n            }\n            return this;\n        }\n        return target.apply(\n            that,\n            concatty(args, arguments)\n        );\n\n    };\n\n    var boundLength = max(0, target.length - args.length);\n    var boundArgs = [];\n    for (var i = 0; i < boundLength; i++) {\n        boundArgs[i] = '$' + i;\n    }\n\n    bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);\n\n    if (target.prototype) {\n        var Empty = function Empty() {};\n        Empty.prototype = target.prototype;\n        bound.prototype = new Empty();\n        Empty.prototype = null;\n    }\n\n    return bound;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\nvar functionsHaveNames = function functionsHaveNames() {\n\treturn typeof function f() {}.name === 'string';\n};\n\nvar gOPD = Object.getOwnPropertyDescriptor;\nif (gOPD) {\n\ttry {\n\t\tgOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\tgOPD = null;\n\t}\n}\n\nfunctionsHaveNames.functionsHaveConfigurableNames = function functionsHaveConfigurableNames() {\n\tif (!functionsHaveNames() || !gOPD) {\n\t\treturn false;\n\t}\n\tvar desc = gOPD(function () {}, 'name');\n\treturn !!desc && !!desc.configurable;\n};\n\nvar $bind = Function.prototype.bind;\n\nfunctionsHaveNames.boundFunctionsHaveNames = function boundFunctionsHaveNames() {\n\treturn functionsHaveNames() && typeof $bind === 'function' && function f() {}.bind().name !== '';\n};\n\nmodule.exports = functionsHaveNames;\n","'use strict';\n\nvar undefined;\n\nvar $Error = require('es-errors');\nvar $EvalError = require('es-errors/eval');\nvar $RangeError = require('es-errors/range');\nvar $ReferenceError = require('es-errors/ref');\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\nvar $URIError = require('es-errors/uri');\n\nvar $Function = Function;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\nvar hasProto = require('has-proto')();\n\nvar getProto = Object.getPrototypeOf || (\n\thasProto\n\t\t? function (x) { return x.__proto__; } // eslint-disable-line no-proto\n\t\t: null\n);\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t__proto__: null,\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': $Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': $EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': $RangeError,\n\t'%ReferenceError%': $ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': $URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nif (getProto) {\n\ttry {\n\t\tnull.error; // eslint-disable-line no-unused-expressions\n\t} catch (e) {\n\t\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\t\tvar errorProto = getProto(getProto(e));\n\t\tINTRINSICS['%Error.prototype%'] = errorProto;\n\t}\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen && getProto) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t__proto__: null,\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('hasown');\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\nvar $exec = bind.call(Function.call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n","'use strict';\n\nvar $defineProperty = require('es-define-property');\n\nvar hasPropertyDescriptors = function hasPropertyDescriptors() {\n\treturn !!$defineProperty;\n};\n\nhasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() {\n\t// node v0.6 has a bug where array lengths can be Set but not Defined\n\tif (!$defineProperty) {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn $defineProperty([], 'length', { value: 1 }).length !== 1;\n\t} catch (e) {\n\t\t// In Firefox 4-22, defining length on an array throws an exception.\n\t\treturn true;\n\t}\n};\n\nmodule.exports = hasPropertyDescriptors;\n","'use strict';\n\nvar test = {\n\t__proto__: null,\n\tfoo: {}\n};\n\nvar $Object = Object;\n\n/** @type {import('.')} */\nmodule.exports = function hasProto() {\n\t// @ts-expect-error: TS errors on an inherited property for some reason\n\treturn { __proto__: test }.foo === test.foo\n\t\t&& !(test instanceof $Object);\n};\n","'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar hasSymbols = require('has-symbols/shams');\n\n/** @type {import('.')} */\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n","'use strict';\n\nvar call = Function.prototype.call;\nvar $hasOwn = Object.prototype.hasOwnProperty;\nvar bind = require('function-bind');\n\n/** @type {import('.')} */\nmodule.exports = bind.call(call, $hasOwn);\n","\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Multibyte codec. In this scheme, a character is represented by 1 or more bytes.\n// Our codec supports UTF-16 surrogates, extensions for GB18030 and unicode sequences.\n// To save memory and loading time, we read table files only when requested.\n\nexports._dbcs = DBCSCodec;\n\nvar UNASSIGNED = -1,\n    GB18030_CODE = -2,\n    SEQ_START  = -10,\n    NODE_START = -1000,\n    UNASSIGNED_NODE = new Array(0x100),\n    DEF_CHAR = -1;\n\nfor (var i = 0; i < 0x100; i++)\n    UNASSIGNED_NODE[i] = UNASSIGNED;\n\n\n// Class DBCSCodec reads and initializes mapping tables.\nfunction DBCSCodec(codecOptions, iconv) {\n    this.encodingName = codecOptions.encodingName;\n    if (!codecOptions)\n        throw new Error(\"DBCS codec is called without the data.\")\n    if (!codecOptions.table)\n        throw new Error(\"Encoding '\" + this.encodingName + \"' has no data.\");\n\n    // Load tables.\n    var mappingTable = codecOptions.table();\n\n\n    // Decode tables: MBCS -> Unicode.\n\n    // decodeTables is a trie, encoded as an array of arrays of integers. Internal arrays are trie nodes and all have len = 256.\n    // Trie root is decodeTables[0].\n    // Values: >=  0 -> unicode character code. can be > 0xFFFF\n    //         == UNASSIGNED -> unknown/unassigned sequence.\n    //         == GB18030_CODE -> this is the end of a GB18030 4-byte sequence.\n    //         <= NODE_START -> index of the next node in our trie to process next byte.\n    //         <= SEQ_START  -> index of the start of a character code sequence, in decodeTableSeq.\n    this.decodeTables = [];\n    this.decodeTables[0] = UNASSIGNED_NODE.slice(0); // Create root node.\n\n    // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here. \n    this.decodeTableSeq = [];\n\n    // Actual mapping tables consist of chunks. Use them to fill up decode tables.\n    for (var i = 0; i < mappingTable.length; i++)\n        this._addDecodeChunk(mappingTable[i]);\n\n    // Load & create GB18030 tables when needed.\n    if (typeof codecOptions.gb18030 === 'function') {\n        this.gb18030 = codecOptions.gb18030(); // Load GB18030 ranges.\n\n        // Add GB18030 common decode nodes.\n        var commonThirdByteNodeIdx = this.decodeTables.length;\n        this.decodeTables.push(UNASSIGNED_NODE.slice(0));\n\n        var commonFourthByteNodeIdx = this.decodeTables.length;\n        this.decodeTables.push(UNASSIGNED_NODE.slice(0));\n\n        // Fill out the tree\n        var firstByteNode = this.decodeTables[0];\n        for (var i = 0x81; i <= 0xFE; i++) {\n            var secondByteNode = this.decodeTables[NODE_START - firstByteNode[i]];\n            for (var j = 0x30; j <= 0x39; j++) {\n                if (secondByteNode[j] === UNASSIGNED) {\n                    secondByteNode[j] = NODE_START - commonThirdByteNodeIdx;\n                } else if (secondByteNode[j] > NODE_START) {\n                    throw new Error(\"gb18030 decode tables conflict at byte 2\");\n                }\n\n                var thirdByteNode = this.decodeTables[NODE_START - secondByteNode[j]];\n                for (var k = 0x81; k <= 0xFE; k++) {\n                    if (thirdByteNode[k] === UNASSIGNED) {\n                        thirdByteNode[k] = NODE_START - commonFourthByteNodeIdx;\n                    } else if (thirdByteNode[k] === NODE_START - commonFourthByteNodeIdx) {\n                        continue;\n                    } else if (thirdByteNode[k] > NODE_START) {\n                        throw new Error(\"gb18030 decode tables conflict at byte 3\");\n                    }\n\n                    var fourthByteNode = this.decodeTables[NODE_START - thirdByteNode[k]];\n                    for (var l = 0x30; l <= 0x39; l++) {\n                        if (fourthByteNode[l] === UNASSIGNED)\n                            fourthByteNode[l] = GB18030_CODE;\n                    }\n                }\n            }\n        }\n    }\n\n    this.defaultCharUnicode = iconv.defaultCharUnicode;\n\n    \n    // Encode tables: Unicode -> DBCS.\n\n    // `encodeTable` is array mapping from unicode char to encoded char. All its values are integers for performance.\n    // Because it can be sparse, it is represented as array of buckets by 256 chars each. Bucket can be null.\n    // Values: >=  0 -> it is a normal char. Write the value (if <=256 then 1 byte, if <=65536 then 2 bytes, etc.).\n    //         == UNASSIGNED -> no conversion found. Output a default char.\n    //         <= SEQ_START  -> it's an index in encodeTableSeq, see below. The character starts a sequence.\n    this.encodeTable = [];\n    \n    // `encodeTableSeq` is used when a sequence of unicode characters is encoded as a single code. We use a tree of\n    // objects where keys correspond to characters in sequence and leafs are the encoded dbcs values. A special DEF_CHAR key\n    // means end of sequence (needed when one sequence is a strict subsequence of another).\n    // Objects are kept separately from encodeTable to increase performance.\n    this.encodeTableSeq = [];\n\n    // Some chars can be decoded, but need not be encoded.\n    var skipEncodeChars = {};\n    if (codecOptions.encodeSkipVals)\n        for (var i = 0; i < codecOptions.encodeSkipVals.length; i++) {\n            var val = codecOptions.encodeSkipVals[i];\n            if (typeof val === 'number')\n                skipEncodeChars[val] = true;\n            else\n                for (var j = val.from; j <= val.to; j++)\n                    skipEncodeChars[j] = true;\n        }\n        \n    // Use decode trie to recursively fill out encode tables.\n    this._fillEncodeTable(0, 0, skipEncodeChars);\n\n    // Add more encoding pairs when needed.\n    if (codecOptions.encodeAdd) {\n        for (var uChar in codecOptions.encodeAdd)\n            if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar))\n                this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]);\n    }\n\n    this.defCharSB  = this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)];\n    if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]['?'];\n    if (this.defCharSB === UNASSIGNED) this.defCharSB = \"?\".charCodeAt(0);\n}\n\nDBCSCodec.prototype.encoder = DBCSEncoder;\nDBCSCodec.prototype.decoder = DBCSDecoder;\n\n// Decoder helpers\nDBCSCodec.prototype._getDecodeTrieNode = function(addr) {\n    var bytes = [];\n    for (; addr > 0; addr >>>= 8)\n        bytes.push(addr & 0xFF);\n    if (bytes.length == 0)\n        bytes.push(0);\n\n    var node = this.decodeTables[0];\n    for (var i = bytes.length-1; i > 0; i--) { // Traverse nodes deeper into the trie.\n        var val = node[bytes[i]];\n\n        if (val == UNASSIGNED) { // Create new node.\n            node[bytes[i]] = NODE_START - this.decodeTables.length;\n            this.decodeTables.push(node = UNASSIGNED_NODE.slice(0));\n        }\n        else if (val <= NODE_START) { // Existing node.\n            node = this.decodeTables[NODE_START - val];\n        }\n        else\n            throw new Error(\"Overwrite byte in \" + this.encodingName + \", addr: \" + addr.toString(16));\n    }\n    return node;\n}\n\n\nDBCSCodec.prototype._addDecodeChunk = function(chunk) {\n    // First element of chunk is the hex mbcs code where we start.\n    var curAddr = parseInt(chunk[0], 16);\n\n    // Choose the decoding node where we'll write our chars.\n    var writeTable = this._getDecodeTrieNode(curAddr);\n    curAddr = curAddr & 0xFF;\n\n    // Write all other elements of the chunk to the table.\n    for (var k = 1; k < chunk.length; k++) {\n        var part = chunk[k];\n        if (typeof part === \"string\") { // String, write as-is.\n            for (var l = 0; l < part.length;) {\n                var code = part.charCodeAt(l++);\n                if (0xD800 <= code && code < 0xDC00) { // Decode surrogate\n                    var codeTrail = part.charCodeAt(l++);\n                    if (0xDC00 <= codeTrail && codeTrail < 0xE000)\n                        writeTable[curAddr++] = 0x10000 + (code - 0xD800) * 0x400 + (codeTrail - 0xDC00);\n                    else\n                        throw new Error(\"Incorrect surrogate pair in \"  + this.encodingName + \" at chunk \" + chunk[0]);\n                }\n                else if (0x0FF0 < code && code <= 0x0FFF) { // Character sequence (our own encoding used)\n                    var len = 0xFFF - code + 2;\n                    var seq = [];\n                    for (var m = 0; m < len; m++)\n                        seq.push(part.charCodeAt(l++)); // Simple variation: don't support surrogates or subsequences in seq.\n\n                    writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length;\n                    this.decodeTableSeq.push(seq);\n                }\n                else\n                    writeTable[curAddr++] = code; // Basic char\n            }\n        } \n        else if (typeof part === \"number\") { // Integer, meaning increasing sequence starting with prev character.\n            var charCode = writeTable[curAddr - 1] + 1;\n            for (var l = 0; l < part; l++)\n                writeTable[curAddr++] = charCode++;\n        }\n        else\n            throw new Error(\"Incorrect type '\" + typeof part + \"' given in \"  + this.encodingName + \" at chunk \" + chunk[0]);\n    }\n    if (curAddr > 0xFF)\n        throw new Error(\"Incorrect chunk in \"  + this.encodingName + \" at addr \" + chunk[0] + \": too long\" + curAddr);\n}\n\n// Encoder helpers\nDBCSCodec.prototype._getEncodeBucket = function(uCode) {\n    var high = uCode >> 8; // This could be > 0xFF because of astral characters.\n    if (this.encodeTable[high] === undefined)\n        this.encodeTable[high] = UNASSIGNED_NODE.slice(0); // Create bucket on demand.\n    return this.encodeTable[high];\n}\n\nDBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) {\n    var bucket = this._getEncodeBucket(uCode);\n    var low = uCode & 0xFF;\n    if (bucket[low] <= SEQ_START)\n        this.encodeTableSeq[SEQ_START-bucket[low]][DEF_CHAR] = dbcsCode; // There's already a sequence, set a single-char subsequence of it.\n    else if (bucket[low] == UNASSIGNED)\n        bucket[low] = dbcsCode;\n}\n\nDBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) {\n    \n    // Get the root of character tree according to first character of the sequence.\n    var uCode = seq[0];\n    var bucket = this._getEncodeBucket(uCode);\n    var low = uCode & 0xFF;\n\n    var node;\n    if (bucket[low] <= SEQ_START) {\n        // There's already a sequence with  - use it.\n        node = this.encodeTableSeq[SEQ_START-bucket[low]];\n    }\n    else {\n        // There was no sequence object - allocate a new one.\n        node = {};\n        if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low]; // If a char was set before - make it a single-char subsequence.\n        bucket[low] = SEQ_START - this.encodeTableSeq.length;\n        this.encodeTableSeq.push(node);\n    }\n\n    // Traverse the character tree, allocating new nodes as needed.\n    for (var j = 1; j < seq.length-1; j++) {\n        var oldVal = node[uCode];\n        if (typeof oldVal === 'object')\n            node = oldVal;\n        else {\n            node = node[uCode] = {}\n            if (oldVal !== undefined)\n                node[DEF_CHAR] = oldVal\n        }\n    }\n\n    // Set the leaf to given dbcsCode.\n    uCode = seq[seq.length-1];\n    node[uCode] = dbcsCode;\n}\n\nDBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) {\n    var node = this.decodeTables[nodeIdx];\n    var hasValues = false;\n    var subNodeEmpty = {};\n    for (var i = 0; i < 0x100; i++) {\n        var uCode = node[i];\n        var mbCode = prefix + i;\n        if (skipEncodeChars[mbCode])\n            continue;\n\n        if (uCode >= 0) {\n            this._setEncodeChar(uCode, mbCode);\n            hasValues = true;\n        } else if (uCode <= NODE_START) {\n            var subNodeIdx = NODE_START - uCode;\n            if (!subNodeEmpty[subNodeIdx]) {  // Skip empty subtrees (they are too large in gb18030).\n                var newPrefix = (mbCode << 8) >>> 0;  // NOTE: '>>> 0' keeps 32-bit num positive.\n                if (this._fillEncodeTable(subNodeIdx, newPrefix, skipEncodeChars))\n                    hasValues = true;\n                else\n                    subNodeEmpty[subNodeIdx] = true;\n            }\n        } else if (uCode <= SEQ_START) {\n            this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode);\n            hasValues = true;\n        }\n    }\n    return hasValues;\n}\n\n\n\n// == Encoder ==================================================================\n\nfunction DBCSEncoder(options, codec) {\n    // Encoder state\n    this.leadSurrogate = -1;\n    this.seqObj = undefined;\n    \n    // Static data\n    this.encodeTable = codec.encodeTable;\n    this.encodeTableSeq = codec.encodeTableSeq;\n    this.defaultCharSingleByte = codec.defCharSB;\n    this.gb18030 = codec.gb18030;\n}\n\nDBCSEncoder.prototype.write = function(str) {\n    var newBuf = Buffer.alloc(str.length * (this.gb18030 ? 4 : 3)),\n        leadSurrogate = this.leadSurrogate,\n        seqObj = this.seqObj, nextChar = -1,\n        i = 0, j = 0;\n\n    while (true) {\n        // 0. Get next character.\n        if (nextChar === -1) {\n            if (i == str.length) break;\n            var uCode = str.charCodeAt(i++);\n        }\n        else {\n            var uCode = nextChar;\n            nextChar = -1;    \n        }\n\n        // 1. Handle surrogates.\n        if (0xD800 <= uCode && uCode < 0xE000) { // Char is one of surrogates.\n            if (uCode < 0xDC00) { // We've got lead surrogate.\n                if (leadSurrogate === -1) {\n                    leadSurrogate = uCode;\n                    continue;\n                } else {\n                    leadSurrogate = uCode;\n                    // Double lead surrogate found.\n                    uCode = UNASSIGNED;\n                }\n            } else { // We've got trail surrogate.\n                if (leadSurrogate !== -1) {\n                    uCode = 0x10000 + (leadSurrogate - 0xD800) * 0x400 + (uCode - 0xDC00);\n                    leadSurrogate = -1;\n                } else {\n                    // Incomplete surrogate pair - only trail surrogate found.\n                    uCode = UNASSIGNED;\n                }\n                \n            }\n        }\n        else if (leadSurrogate !== -1) {\n            // Incomplete surrogate pair - only lead surrogate found.\n            nextChar = uCode; uCode = UNASSIGNED; // Write an error, then current char.\n            leadSurrogate = -1;\n        }\n\n        // 2. Convert uCode character.\n        var dbcsCode = UNASSIGNED;\n        if (seqObj !== undefined && uCode != UNASSIGNED) { // We are in the middle of the sequence\n            var resCode = seqObj[uCode];\n            if (typeof resCode === 'object') { // Sequence continues.\n                seqObj = resCode;\n                continue;\n\n            } else if (typeof resCode == 'number') { // Sequence finished. Write it.\n                dbcsCode = resCode;\n\n            } else if (resCode == undefined) { // Current character is not part of the sequence.\n\n                // Try default character for this sequence\n                resCode = seqObj[DEF_CHAR];\n                if (resCode !== undefined) {\n                    dbcsCode = resCode; // Found. Write it.\n                    nextChar = uCode; // Current character will be written too in the next iteration.\n\n                } else {\n                    // TODO: What if we have no default? (resCode == undefined)\n                    // Then, we should write first char of the sequence as-is and try the rest recursively.\n                    // Didn't do it for now because no encoding has this situation yet.\n                    // Currently, just skip the sequence and write current char.\n                }\n            }\n            seqObj = undefined;\n        }\n        else if (uCode >= 0) {  // Regular character\n            var subtable = this.encodeTable[uCode >> 8];\n            if (subtable !== undefined)\n                dbcsCode = subtable[uCode & 0xFF];\n            \n            if (dbcsCode <= SEQ_START) { // Sequence start\n                seqObj = this.encodeTableSeq[SEQ_START-dbcsCode];\n                continue;\n            }\n\n            if (dbcsCode == UNASSIGNED && this.gb18030) {\n                // Use GB18030 algorithm to find character(s) to write.\n                var idx = findIdx(this.gb18030.uChars, uCode);\n                if (idx != -1) {\n                    var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]);\n                    newBuf[j++] = 0x81 + Math.floor(dbcsCode / 12600); dbcsCode = dbcsCode % 12600;\n                    newBuf[j++] = 0x30 + Math.floor(dbcsCode / 1260); dbcsCode = dbcsCode % 1260;\n                    newBuf[j++] = 0x81 + Math.floor(dbcsCode / 10); dbcsCode = dbcsCode % 10;\n                    newBuf[j++] = 0x30 + dbcsCode;\n                    continue;\n                }\n            }\n        }\n\n        // 3. Write dbcsCode character.\n        if (dbcsCode === UNASSIGNED)\n            dbcsCode = this.defaultCharSingleByte;\n        \n        if (dbcsCode < 0x100) {\n            newBuf[j++] = dbcsCode;\n        }\n        else if (dbcsCode < 0x10000) {\n            newBuf[j++] = dbcsCode >> 8;   // high byte\n            newBuf[j++] = dbcsCode & 0xFF; // low byte\n        }\n        else if (dbcsCode < 0x1000000) {\n            newBuf[j++] = dbcsCode >> 16;\n            newBuf[j++] = (dbcsCode >> 8) & 0xFF;\n            newBuf[j++] = dbcsCode & 0xFF;\n        } else {\n            newBuf[j++] = dbcsCode >>> 24;\n            newBuf[j++] = (dbcsCode >>> 16) & 0xFF;\n            newBuf[j++] = (dbcsCode >>> 8) & 0xFF;\n            newBuf[j++] = dbcsCode & 0xFF;\n        }\n    }\n\n    this.seqObj = seqObj;\n    this.leadSurrogate = leadSurrogate;\n    return newBuf.slice(0, j);\n}\n\nDBCSEncoder.prototype.end = function() {\n    if (this.leadSurrogate === -1 && this.seqObj === undefined)\n        return; // All clean. Most often case.\n\n    var newBuf = Buffer.alloc(10), j = 0;\n\n    if (this.seqObj) { // We're in the sequence.\n        var dbcsCode = this.seqObj[DEF_CHAR];\n        if (dbcsCode !== undefined) { // Write beginning of the sequence.\n            if (dbcsCode < 0x100) {\n                newBuf[j++] = dbcsCode;\n            }\n            else {\n                newBuf[j++] = dbcsCode >> 8;   // high byte\n                newBuf[j++] = dbcsCode & 0xFF; // low byte\n            }\n        } else {\n            // See todo above.\n        }\n        this.seqObj = undefined;\n    }\n\n    if (this.leadSurrogate !== -1) {\n        // Incomplete surrogate pair - only lead surrogate found.\n        newBuf[j++] = this.defaultCharSingleByte;\n        this.leadSurrogate = -1;\n    }\n    \n    return newBuf.slice(0, j);\n}\n\n// Export for testing\nDBCSEncoder.prototype.findIdx = findIdx;\n\n\n// == Decoder ==================================================================\n\nfunction DBCSDecoder(options, codec) {\n    // Decoder state\n    this.nodeIdx = 0;\n    this.prevBytes = [];\n\n    // Static data\n    this.decodeTables = codec.decodeTables;\n    this.decodeTableSeq = codec.decodeTableSeq;\n    this.defaultCharUnicode = codec.defaultCharUnicode;\n    this.gb18030 = codec.gb18030;\n}\n\nDBCSDecoder.prototype.write = function(buf) {\n    var newBuf = Buffer.alloc(buf.length*2),\n        nodeIdx = this.nodeIdx, \n        prevBytes = this.prevBytes, prevOffset = this.prevBytes.length,\n        seqStart = -this.prevBytes.length, // idx of the start of current parsed sequence.\n        uCode;\n\n    for (var i = 0, j = 0; i < buf.length; i++) {\n        var curByte = (i >= 0) ? buf[i] : prevBytes[i + prevOffset];\n\n        // Lookup in current trie node.\n        var uCode = this.decodeTables[nodeIdx][curByte];\n\n        if (uCode >= 0) { \n            // Normal character, just use it.\n        }\n        else if (uCode === UNASSIGNED) { // Unknown char.\n            // TODO: Callback with seq.\n            uCode = this.defaultCharUnicode.charCodeAt(0);\n            i = seqStart; // Skip one byte ('i' will be incremented by the for loop) and try to parse again.\n        }\n        else if (uCode === GB18030_CODE) {\n            if (i >= 3) {\n                var ptr = (buf[i-3]-0x81)*12600 + (buf[i-2]-0x30)*1260 + (buf[i-1]-0x81)*10 + (curByte-0x30);\n            } else {\n                var ptr = (prevBytes[i-3+prevOffset]-0x81)*12600 + \n                          (((i-2 >= 0) ? buf[i-2] : prevBytes[i-2+prevOffset])-0x30)*1260 + \n                          (((i-1 >= 0) ? buf[i-1] : prevBytes[i-1+prevOffset])-0x81)*10 + \n                          (curByte-0x30);\n            }\n            var idx = findIdx(this.gb18030.gbChars, ptr);\n            uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx];\n        }\n        else if (uCode <= NODE_START) { // Go to next trie node.\n            nodeIdx = NODE_START - uCode;\n            continue;\n        }\n        else if (uCode <= SEQ_START) { // Output a sequence of chars.\n            var seq = this.decodeTableSeq[SEQ_START - uCode];\n            for (var k = 0; k < seq.length - 1; k++) {\n                uCode = seq[k];\n                newBuf[j++] = uCode & 0xFF;\n                newBuf[j++] = uCode >> 8;\n            }\n            uCode = seq[seq.length-1];\n        }\n        else\n            throw new Error(\"iconv-lite internal error: invalid decoding table value \" + uCode + \" at \" + nodeIdx + \"/\" + curByte);\n\n        // Write the character to buffer, handling higher planes using surrogate pair.\n        if (uCode >= 0x10000) { \n            uCode -= 0x10000;\n            var uCodeLead = 0xD800 | (uCode >> 10);\n            newBuf[j++] = uCodeLead & 0xFF;\n            newBuf[j++] = uCodeLead >> 8;\n\n            uCode = 0xDC00 | (uCode & 0x3FF);\n        }\n        newBuf[j++] = uCode & 0xFF;\n        newBuf[j++] = uCode >> 8;\n\n        // Reset trie node.\n        nodeIdx = 0; seqStart = i+1;\n    }\n\n    this.nodeIdx = nodeIdx;\n    this.prevBytes = (seqStart >= 0)\n        ? Array.prototype.slice.call(buf, seqStart)\n        : prevBytes.slice(seqStart + prevOffset).concat(Array.prototype.slice.call(buf));\n\n    return newBuf.slice(0, j).toString('ucs2');\n}\n\nDBCSDecoder.prototype.end = function() {\n    var ret = '';\n\n    // Try to parse all remaining chars.\n    while (this.prevBytes.length > 0) {\n        // Skip 1 character in the buffer.\n        ret += this.defaultCharUnicode;\n        var bytesArr = this.prevBytes.slice(1);\n\n        // Parse remaining as usual.\n        this.prevBytes = [];\n        this.nodeIdx = 0;\n        if (bytesArr.length > 0)\n            ret += this.write(bytesArr);\n    }\n\n    this.prevBytes = [];\n    this.nodeIdx = 0;\n    return ret;\n}\n\n// Binary search for GB18030. Returns largest i such that table[i] <= val.\nfunction findIdx(table, val) {\n    if (table[0] > val)\n        return -1;\n\n    var l = 0, r = table.length;\n    while (l < r-1) { // always table[l] <= val < table[r]\n        var mid = l + ((r-l+1) >> 1);\n        if (table[mid] <= val)\n            l = mid;\n        else\n            r = mid;\n    }\n    return l;\n}\n\n","\"use strict\";\n\n// Description of supported double byte encodings and aliases.\n// Tables are not require()-d until they are needed to speed up library load.\n// require()-s are direct to support Browserify.\n\nmodule.exports = {\n    \n    // == Japanese/ShiftJIS ====================================================\n    // All japanese encodings are based on JIS X set of standards:\n    // JIS X 0201 - Single-byte encoding of ASCII + ¥ + Kana chars at 0xA1-0xDF.\n    // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes. \n    //              Has several variations in 1978, 1983, 1990 and 1997.\n    // JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead.\n    // JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233.\n    //              2 planes, first is superset of 0208, second - revised 0212.\n    //              Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx)\n\n    // Byte encodings are:\n    //  * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte\n    //               encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC.\n    //               Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI.\n    //  * EUC-JP:    Up to 3 bytes per character. Used mostly on *nixes.\n    //               0x00-0x7F       - lower part of 0201\n    //               0x8E, 0xA1-0xDF - upper part of 0201\n    //               (0xA1-0xFE)x2   - 0208 plane (94x94).\n    //               0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94).\n    //  * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon.\n    //               Used as-is in ISO2022 family.\n    //  * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII, \n    //                0201-1976 Roman, 0208-1978, 0208-1983.\n    //  * ISO2022-JP-1: Adds esc seq for 0212-1990.\n    //  * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7.\n    //  * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2.\n    //  * ISO2022-JP-2004: Adds 0213-2004 Plane 1.\n    //\n    // After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes.\n    //\n    // Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html\n\n    'shiftjis': {\n        type: '_dbcs',\n        table: function() { return require('./tables/shiftjis.json') },\n        encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n        encodeSkipVals: [{from: 0xED40, to: 0xF940}],\n    },\n    'csshiftjis': 'shiftjis',\n    'mskanji': 'shiftjis',\n    'sjis': 'shiftjis',\n    'windows31j': 'shiftjis',\n    'ms31j': 'shiftjis',\n    'xsjis': 'shiftjis',\n    'windows932': 'shiftjis',\n    'ms932': 'shiftjis',\n    '932': 'shiftjis',\n    'cp932': 'shiftjis',\n\n    'eucjp': {\n        type: '_dbcs',\n        table: function() { return require('./tables/eucjp.json') },\n        encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n    },\n\n    // TODO: KDDI extension to Shift_JIS\n    // TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes.\n    // TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars.\n\n\n    // == Chinese/GBK ==========================================================\n    // http://en.wikipedia.org/wiki/GBK\n    // We mostly implement W3C recommendation: https://www.w3.org/TR/encoding/#gbk-encoder\n\n    // Oldest GB2312 (1981, ~7600 chars) is a subset of CP936\n    'gb2312': 'cp936',\n    'gb231280': 'cp936',\n    'gb23121980': 'cp936',\n    'csgb2312': 'cp936',\n    'csiso58gb231280': 'cp936',\n    'euccn': 'cp936',\n\n    // Microsoft's CP936 is a subset and approximation of GBK.\n    'windows936': 'cp936',\n    'ms936': 'cp936',\n    '936': 'cp936',\n    'cp936': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp936.json') },\n    },\n\n    // GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other.\n    'gbk': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) },\n    },\n    'xgbk': 'gbk',\n    'isoir58': 'gbk',\n\n    // GB18030 is an algorithmic extension of GBK.\n    // Main source: https://www.w3.org/TR/encoding/#gbk-encoder\n    // http://icu-project.org/docs/papers/gb18030.html\n    // http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml\n    // http://www.khngai.com/chinese/charmap/tblgbk.php?page=0\n    'gb18030': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) },\n        gb18030: function() { return require('./tables/gb18030-ranges.json') },\n        encodeSkipVals: [0x80],\n        encodeAdd: {'€': 0xA2E3},\n    },\n\n    'chinese': 'gb18030',\n\n\n    // == Korean ===============================================================\n    // EUC-KR, KS_C_5601 and KS X 1001 are exactly the same.\n    'windows949': 'cp949',\n    'ms949': 'cp949',\n    '949': 'cp949',\n    'cp949': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp949.json') },\n    },\n\n    'cseuckr': 'cp949',\n    'csksc56011987': 'cp949',\n    'euckr': 'cp949',\n    'isoir149': 'cp949',\n    'korean': 'cp949',\n    'ksc56011987': 'cp949',\n    'ksc56011989': 'cp949',\n    'ksc5601': 'cp949',\n\n\n    // == Big5/Taiwan/Hong Kong ================================================\n    // There are lots of tables for Big5 and cp950. Please see the following links for history:\n    // http://moztw.org/docs/big5/  http://www.haible.de/bruno/charsets/conversion-tables/Big5.html\n    // Variations, in roughly number of defined chars:\n    //  * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT\n    //  * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/\n    //  * Big5-2003 (Taiwan standard) almost superset of cp950.\n    //  * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers.\n    //  * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard. \n    //    many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years.\n    //    Plus, it has 4 combining sequences.\n    //    Seems that Mozilla refused to support it for 10 yrs. https://bugzilla.mozilla.org/show_bug.cgi?id=162431 https://bugzilla.mozilla.org/show_bug.cgi?id=310299\n    //    because big5-hkscs is the only encoding to include astral characters in non-algorithmic way.\n    //    Implementations are not consistent within browsers; sometimes labeled as just big5.\n    //    MS Internet Explorer switches from big5 to big5-hkscs when a patch applied.\n    //    Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31\n    //    In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s.\n    //    Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt\n    //                   http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt\n    // \n    // Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder\n    // Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong.\n\n    'windows950': 'cp950',\n    'ms950': 'cp950',\n    '950': 'cp950',\n    'cp950': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp950.json') },\n    },\n\n    // Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus.\n    'big5': 'big5hkscs',\n    'big5hkscs': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp950.json').concat(require('./tables/big5-added.json')) },\n        encodeSkipVals: [\n            // Although Encoding Standard says we should avoid encoding to HKSCS area (See Step 1 of\n            // https://encoding.spec.whatwg.org/#index-big5-pointer), we still do it to increase compatibility with ICU.\n            // But if a single unicode point can be encoded both as HKSCS and regular Big5, we prefer the latter.\n            0x8e69, 0x8e6f, 0x8e7e, 0x8eab, 0x8eb4, 0x8ecd, 0x8ed0, 0x8f57, 0x8f69, 0x8f6e, 0x8fcb, 0x8ffe,\n            0x906d, 0x907a, 0x90c4, 0x90dc, 0x90f1, 0x91bf, 0x92af, 0x92b0, 0x92b1, 0x92b2, 0x92d1, 0x9447, 0x94ca,\n            0x95d9, 0x96fc, 0x9975, 0x9b76, 0x9b78, 0x9b7b, 0x9bc6, 0x9bde, 0x9bec, 0x9bf6, 0x9c42, 0x9c53, 0x9c62,\n            0x9c68, 0x9c6b, 0x9c77, 0x9cbc, 0x9cbd, 0x9cd0, 0x9d57, 0x9d5a, 0x9dc4, 0x9def, 0x9dfb, 0x9ea9, 0x9eef,\n            0x9efd, 0x9f60, 0x9fcb, 0xa077, 0xa0dc, 0xa0df, 0x8fcc, 0x92c8, 0x9644, 0x96ed,\n\n            // Step 2 of https://encoding.spec.whatwg.org/#index-big5-pointer: Use last pointer for U+2550, U+255E, U+2561, U+256A, U+5341, or U+5345\n            0xa2a4, 0xa2a5, 0xa2a7, 0xa2a6, 0xa2cc, 0xa2ce,\n        ],\n    },\n\n    'cnbig5': 'big5hkscs',\n    'csbig5': 'big5hkscs',\n    'xxbig5': 'big5hkscs',\n};\n","\"use strict\";\n\n// Update this array if you add/rename/remove files in this directory.\n// We support Browserify by skipping automatic module discovery and requiring modules directly.\nvar modules = [\n    require(\"./internal\"),\n    require(\"./utf32\"),\n    require(\"./utf16\"),\n    require(\"./utf7\"),\n    require(\"./sbcs-codec\"),\n    require(\"./sbcs-data\"),\n    require(\"./sbcs-data-generated\"),\n    require(\"./dbcs-codec\"),\n    require(\"./dbcs-data\"),\n];\n\n// Put all encoding/alias/codec definitions to single object and export it.\nfor (var i = 0; i < modules.length; i++) {\n    var module = modules[i];\n    for (var enc in module)\n        if (Object.prototype.hasOwnProperty.call(module, enc))\n            exports[enc] = module[enc];\n}\n","\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Export Node.js internal encodings.\n\nmodule.exports = {\n    // Encodings\n    utf8:   { type: \"_internal\", bomAware: true},\n    cesu8:  { type: \"_internal\", bomAware: true},\n    unicode11utf8: \"utf8\",\n\n    ucs2:   { type: \"_internal\", bomAware: true},\n    utf16le: \"ucs2\",\n\n    binary: { type: \"_internal\" },\n    base64: { type: \"_internal\" },\n    hex:    { type: \"_internal\" },\n\n    // Codec.\n    _internal: InternalCodec,\n};\n\n//------------------------------------------------------------------------------\n\nfunction InternalCodec(codecOptions, iconv) {\n    this.enc = codecOptions.encodingName;\n    this.bomAware = codecOptions.bomAware;\n\n    if (this.enc === \"base64\")\n        this.encoder = InternalEncoderBase64;\n    else if (this.enc === \"cesu8\") {\n        this.enc = \"utf8\"; // Use utf8 for decoding.\n        this.encoder = InternalEncoderCesu8;\n\n        // Add decoder for versions of Node not supporting CESU-8\n        if (Buffer.from('eda0bdedb2a9', 'hex').toString() !== '💩') {\n            this.decoder = InternalDecoderCesu8;\n            this.defaultCharUnicode = iconv.defaultCharUnicode;\n        }\n    }\n}\n\nInternalCodec.prototype.encoder = InternalEncoder;\nInternalCodec.prototype.decoder = InternalDecoder;\n\n//------------------------------------------------------------------------------\n\n// We use node.js internal decoder. Its signature is the same as ours.\nvar StringDecoder = require('string_decoder').StringDecoder;\n\nif (!StringDecoder.prototype.end) // Node v0.8 doesn't have this method.\n    StringDecoder.prototype.end = function() {};\n\n\nfunction InternalDecoder(options, codec) {\n    this.decoder = new StringDecoder(codec.enc);\n}\n\nInternalDecoder.prototype.write = function(buf) {\n    if (!Buffer.isBuffer(buf)) {\n        buf = Buffer.from(buf);\n    }\n\n    return this.decoder.write(buf);\n}\n\nInternalDecoder.prototype.end = function() {\n    return this.decoder.end();\n}\n\n\n//------------------------------------------------------------------------------\n// Encoder is mostly trivial\n\nfunction InternalEncoder(options, codec) {\n    this.enc = codec.enc;\n}\n\nInternalEncoder.prototype.write = function(str) {\n    return Buffer.from(str, this.enc);\n}\n\nInternalEncoder.prototype.end = function() {\n}\n\n\n//------------------------------------------------------------------------------\n// Except base64 encoder, which must keep its state.\n\nfunction InternalEncoderBase64(options, codec) {\n    this.prevStr = '';\n}\n\nInternalEncoderBase64.prototype.write = function(str) {\n    str = this.prevStr + str;\n    var completeQuads = str.length - (str.length % 4);\n    this.prevStr = str.slice(completeQuads);\n    str = str.slice(0, completeQuads);\n\n    return Buffer.from(str, \"base64\");\n}\n\nInternalEncoderBase64.prototype.end = function() {\n    return Buffer.from(this.prevStr, \"base64\");\n}\n\n\n//------------------------------------------------------------------------------\n// CESU-8 encoder is also special.\n\nfunction InternalEncoderCesu8(options, codec) {\n}\n\nInternalEncoderCesu8.prototype.write = function(str) {\n    var buf = Buffer.alloc(str.length * 3), bufIdx = 0;\n    for (var i = 0; i < str.length; i++) {\n        var charCode = str.charCodeAt(i);\n        // Naive implementation, but it works because CESU-8 is especially easy\n        // to convert from UTF-16 (which all JS strings are encoded in).\n        if (charCode < 0x80)\n            buf[bufIdx++] = charCode;\n        else if (charCode < 0x800) {\n            buf[bufIdx++] = 0xC0 + (charCode >>> 6);\n            buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n        }\n        else { // charCode will always be < 0x10000 in javascript.\n            buf[bufIdx++] = 0xE0 + (charCode >>> 12);\n            buf[bufIdx++] = 0x80 + ((charCode >>> 6) & 0x3f);\n            buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n        }\n    }\n    return buf.slice(0, bufIdx);\n}\n\nInternalEncoderCesu8.prototype.end = function() {\n}\n\n//------------------------------------------------------------------------------\n// CESU-8 decoder is not implemented in Node v4.0+\n\nfunction InternalDecoderCesu8(options, codec) {\n    this.acc = 0;\n    this.contBytes = 0;\n    this.accBytes = 0;\n    this.defaultCharUnicode = codec.defaultCharUnicode;\n}\n\nInternalDecoderCesu8.prototype.write = function(buf) {\n    var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, \n        res = '';\n    for (var i = 0; i < buf.length; i++) {\n        var curByte = buf[i];\n        if ((curByte & 0xC0) !== 0x80) { // Leading byte\n            if (contBytes > 0) { // Previous code is invalid\n                res += this.defaultCharUnicode;\n                contBytes = 0;\n            }\n\n            if (curByte < 0x80) { // Single-byte code\n                res += String.fromCharCode(curByte);\n            } else if (curByte < 0xE0) { // Two-byte code\n                acc = curByte & 0x1F;\n                contBytes = 1; accBytes = 1;\n            } else if (curByte < 0xF0) { // Three-byte code\n                acc = curByte & 0x0F;\n                contBytes = 2; accBytes = 1;\n            } else { // Four or more are not supported for CESU-8.\n                res += this.defaultCharUnicode;\n            }\n        } else { // Continuation byte\n            if (contBytes > 0) { // We're waiting for it.\n                acc = (acc << 6) | (curByte & 0x3f);\n                contBytes--; accBytes++;\n                if (contBytes === 0) {\n                    // Check for overlong encoding, but support Modified UTF-8 (encoding NULL as C0 80)\n                    if (accBytes === 2 && acc < 0x80 && acc > 0)\n                        res += this.defaultCharUnicode;\n                    else if (accBytes === 3 && acc < 0x800)\n                        res += this.defaultCharUnicode;\n                    else\n                        // Actually add character.\n                        res += String.fromCharCode(acc);\n                }\n            } else { // Unexpected continuation byte\n                res += this.defaultCharUnicode;\n            }\n        }\n    }\n    this.acc = acc; this.contBytes = contBytes; this.accBytes = accBytes;\n    return res;\n}\n\nInternalDecoderCesu8.prototype.end = function() {\n    var res = 0;\n    if (this.contBytes > 0)\n        res += this.defaultCharUnicode;\n    return res;\n}\n","\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that\n// correspond to encoded bytes (if 128 - then lower half is ASCII). \n\nexports._sbcs = SBCSCodec;\nfunction SBCSCodec(codecOptions, iconv) {\n    if (!codecOptions)\n        throw new Error(\"SBCS codec is called without the data.\")\n    \n    // Prepare char buffer for decoding.\n    if (!codecOptions.chars || (codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256))\n        throw new Error(\"Encoding '\"+codecOptions.type+\"' has incorrect 'chars' (must be of len 128 or 256)\");\n    \n    if (codecOptions.chars.length === 128) {\n        var asciiString = \"\";\n        for (var i = 0; i < 128; i++)\n            asciiString += String.fromCharCode(i);\n        codecOptions.chars = asciiString + codecOptions.chars;\n    }\n\n    this.decodeBuf = Buffer.from(codecOptions.chars, 'ucs2');\n    \n    // Encoding buffer.\n    var encodeBuf = Buffer.alloc(65536, iconv.defaultCharSingleByte.charCodeAt(0));\n\n    for (var i = 0; i < codecOptions.chars.length; i++)\n        encodeBuf[codecOptions.chars.charCodeAt(i)] = i;\n\n    this.encodeBuf = encodeBuf;\n}\n\nSBCSCodec.prototype.encoder = SBCSEncoder;\nSBCSCodec.prototype.decoder = SBCSDecoder;\n\n\nfunction SBCSEncoder(options, codec) {\n    this.encodeBuf = codec.encodeBuf;\n}\n\nSBCSEncoder.prototype.write = function(str) {\n    var buf = Buffer.alloc(str.length);\n    for (var i = 0; i < str.length; i++)\n        buf[i] = this.encodeBuf[str.charCodeAt(i)];\n    \n    return buf;\n}\n\nSBCSEncoder.prototype.end = function() {\n}\n\n\nfunction SBCSDecoder(options, codec) {\n    this.decodeBuf = codec.decodeBuf;\n}\n\nSBCSDecoder.prototype.write = function(buf) {\n    // Strings are immutable in JS -> we use ucs2 buffer to speed up computations.\n    var decodeBuf = this.decodeBuf;\n    var newBuf = Buffer.alloc(buf.length*2);\n    var idx1 = 0, idx2 = 0;\n    for (var i = 0; i < buf.length; i++) {\n        idx1 = buf[i]*2; idx2 = i*2;\n        newBuf[idx2] = decodeBuf[idx1];\n        newBuf[idx2+1] = decodeBuf[idx1+1];\n    }\n    return newBuf.toString('ucs2');\n}\n\nSBCSDecoder.prototype.end = function() {\n}\n","\"use strict\";\n\n// Generated data for sbcs codec. Don't edit manually. Regenerate using generation/gen-sbcs.js script.\nmodule.exports = {\n  \"437\": \"cp437\",\n  \"737\": \"cp737\",\n  \"775\": \"cp775\",\n  \"850\": \"cp850\",\n  \"852\": \"cp852\",\n  \"855\": \"cp855\",\n  \"856\": \"cp856\",\n  \"857\": \"cp857\",\n  \"858\": \"cp858\",\n  \"860\": \"cp860\",\n  \"861\": \"cp861\",\n  \"862\": \"cp862\",\n  \"863\": \"cp863\",\n  \"864\": \"cp864\",\n  \"865\": \"cp865\",\n  \"866\": \"cp866\",\n  \"869\": \"cp869\",\n  \"874\": \"windows874\",\n  \"922\": \"cp922\",\n  \"1046\": \"cp1046\",\n  \"1124\": \"cp1124\",\n  \"1125\": \"cp1125\",\n  \"1129\": \"cp1129\",\n  \"1133\": \"cp1133\",\n  \"1161\": \"cp1161\",\n  \"1162\": \"cp1162\",\n  \"1163\": \"cp1163\",\n  \"1250\": \"windows1250\",\n  \"1251\": \"windows1251\",\n  \"1252\": \"windows1252\",\n  \"1253\": \"windows1253\",\n  \"1254\": \"windows1254\",\n  \"1255\": \"windows1255\",\n  \"1256\": \"windows1256\",\n  \"1257\": \"windows1257\",\n  \"1258\": \"windows1258\",\n  \"28591\": \"iso88591\",\n  \"28592\": \"iso88592\",\n  \"28593\": \"iso88593\",\n  \"28594\": \"iso88594\",\n  \"28595\": \"iso88595\",\n  \"28596\": \"iso88596\",\n  \"28597\": \"iso88597\",\n  \"28598\": \"iso88598\",\n  \"28599\": \"iso88599\",\n  \"28600\": \"iso885910\",\n  \"28601\": \"iso885911\",\n  \"28603\": \"iso885913\",\n  \"28604\": \"iso885914\",\n  \"28605\": \"iso885915\",\n  \"28606\": \"iso885916\",\n  \"windows874\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€����…�����������‘’“”•–—�������� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n  },\n  \"win874\": \"windows874\",\n  \"cp874\": \"windows874\",\n  \"windows1250\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“”•–—�™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬­®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙\"\n  },\n  \"win1250\": \"windows1250\",\n  \"cp1250\": \"windows1250\",\n  \"windows1251\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n  },\n  \"win1251\": \"windows1251\",\n  \"cp1251\": \"windows1251\",\n  \"windows1252\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n  },\n  \"win1252\": \"windows1252\",\n  \"cp1252\": \"windows1252\",\n  \"windows1253\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚ƒ„…†‡�‰�‹�����‘’“”•–—�™�›���� ΅Ά£¤¥¦§¨©�«¬­®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�\"\n  },\n  \"win1253\": \"windows1253\",\n  \"cp1253\": \"windows1253\",\n  \"windows1254\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚ƒ„…†‡ˆ‰Š‹Œ����‘’“”•–—˜™š›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖ×ØÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ\"\n  },\n  \"win1254\": \"windows1254\",\n  \"cp1254\": \"windows1254\",\n  \"windows1255\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚ƒ„…†‡ˆ‰�‹�����‘’“”•–—˜™�›���� ¡¢£₪¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹֺֻּֽ־ֿ׀ׁׂ׃װױײ׳״�������אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�\"\n  },\n  \"win1255\": \"windows1255\",\n  \"cp1255\": \"windows1255\",\n  \"windows1256\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œ‌‍ں ،¢£¤¥¦§¨©ھ«¬­®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûü‎‏ے\"\n  },\n  \"win1256\": \"windows1256\",\n  \"cp1256\": \"windows1256\",\n  \"windows1257\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“”•–—�™�›�¯˛� �¢£¤�¦§Ø©Ŗ«¬­®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙\"\n  },\n  \"win1257\": \"windows1257\",\n  \"cp1257\": \"windows1257\",\n  \"windows1258\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚ƒ„…†‡ˆ‰�‹Œ����‘’“”•–—˜™�›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖ×ØÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n  },\n  \"win1258\": \"windows1258\",\n  \"cp1258\": \"windows1258\",\n  \"iso88591\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n  },\n  \"cp28591\": \"iso88591\",\n  \"iso88592\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ą˘Ł¤ĽŚ§¨ŠŞŤŹ­ŽŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙\"\n  },\n  \"cp28592\": \"iso88592\",\n  \"iso88593\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ħ˘£¤�Ĥ§¨İŞĞĴ­�Ż°ħ²³´µĥ·¸ışğĵ½�żÀÁÂ�ÄĊĈÇÈÉÊËÌÍÎÏ�ÑÒÓÔĠÖ×ĜÙÚÛÜŬŜßàáâ�äċĉçèéêëìíîï�ñòóôġö÷ĝùúûüŭŝ˙\"\n  },\n  \"cp28593\": \"iso88593\",\n  \"iso88594\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĸŖ¤ĨĻ§¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩļˇ¸šēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖ×ØŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙\"\n  },\n  \"cp28594\": \"iso88594\",\n  \"iso88595\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ\"\n  },\n  \"cp28595\": \"iso88595\",\n  \"iso88596\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ���¤�������،­�������������؛���؟�ءآأؤإئابةتثجحخدذرزسشصضطظعغ�����ـفقكلمنهوىيًٌٍَُِّْ�������������\"\n  },\n  \"cp28596\": \"iso88596\",\n  \"iso88597\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ‘’£€₯¦§¨©ͺ«¬­�―°±²³΄΅Ά·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�\"\n  },\n  \"cp28597\": \"iso88597\",\n  \"iso88598\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ �¢£¤¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾��������������������������������‗אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�\"\n  },\n  \"cp28598\": \"iso88598\",\n  \"iso88599\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖ×ØÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ\"\n  },\n  \"cp28599\": \"iso88599\",\n  \"iso885910\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĒĢĪĨĶ§ĻĐŠŦŽ­ŪŊ°ąēģīĩķ·ļđšŧž―ūŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎÏÐŅŌÓÔÕÖŨØŲÚÛÜÝÞßāáâãäåæįčéęëėíîïðņōóôõöũøųúûüýþĸ\"\n  },\n  \"cp28600\": \"iso885910\",\n  \"iso885911\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n  },\n  \"cp28601\": \"iso885911\",\n  \"iso885913\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž’\"\n  },\n  \"cp28603\": \"iso885913\",\n  \"iso885914\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ḃḃ£ĊċḊ§Ẁ©ẂḋỲ­®ŸḞḟĠġṀṁ¶ṖẁṗẃṠỳẄẅṡÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŴÑÒÓÔÕÖṪØÙÚÛÜÝŶßàáâãäåæçèéêëìíîïŵñòóôõöṫøùúûüýŷÿ\"\n  },\n  \"cp28604\": \"iso885914\",\n  \"iso885915\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£€¥Š§š©ª«¬­®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n  },\n  \"cp28605\": \"iso885915\",\n  \"iso885916\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄąŁ€„Š§š©Ș«Ź­źŻ°±ČłŽ”¶·žčș»ŒœŸżÀÁÂĂÄĆÆÇÈÉÊËÌÍÎÏĐŃÒÓÔŐÖŚŰÙÚÛÜĘȚßàáâăäćæçèéêëìíîïđńòóôőöśűùúûüęțÿ\"\n  },\n  \"cp28606\": \"iso885916\",\n  \"cp437\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm437\": \"cp437\",\n  \"csibm437\": \"cp437\",\n  \"cp737\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσςτυφχψ░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ωάέήϊίόύϋώΆΈΉΊΌΎΏ±≥≤ΪΫ÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm737\": \"cp737\",\n  \"csibm737\": \"cp737\",\n  \"cp775\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ĆüéāäģåćłēŖŗīŹÄÅÉæÆōöĢ¢ŚśÖÜø£ØפĀĪóŻżź”¦©®¬½¼Ł«»░▒▓│┤ĄČĘĖ╣║╗╝ĮŠ┐└┴┬├─┼ŲŪ╚╔╩╦╠═╬Žąčęėįšųūž┘┌█▄▌▐▀ÓßŌŃõÕµńĶķĻļņĒŅ’­±“¾¶§÷„°∙·¹³²■ \"\n  },\n  \"ibm775\": \"cp775\",\n  \"csibm775\": \"cp775\",\n  \"cp850\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø׃áíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´­±‗¾¶§÷¸°¨·¹³²■ \"\n  },\n  \"ibm850\": \"cp850\",\n  \"csibm850\": \"cp850\",\n  \"cp852\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäůćçłëŐőîŹÄĆÉĹĺôöĽľŚśÖÜŤťŁ×čáíóúĄąŽžĘ꬟Ⱥ«»░▒▓│┤ÁÂĚŞ╣║╗╝Żż┐└┴┬├─┼Ăă╚╔╩╦╠═╬¤đĐĎËďŇÍÎě┘┌█▄ŢŮ▀ÓßÔŃńňŠšŔÚŕŰýÝţ´­˝˛ˇ˘§÷¸°¨˙űŘř■ \"\n  },\n  \"ibm852\": \"cp852\",\n  \"csibm852\": \"cp852\",\n  \"cp855\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ђЂѓЃёЁєЄѕЅіІїЇјЈљЉњЊћЋќЌўЎџЏюЮъЪаАбБцЦдДеЕфФгГ«»░▒▓│┤хХиИ╣║╗╝йЙ┐└┴┬├─┼кК╚╔╩╦╠═╬¤лЛмМнНоОп┘┌█▄Пя▀ЯрРсСтТуУжЖвВьЬ№­ыЫзЗшШэЭщЩчЧ§■ \"\n  },\n  \"ibm855\": \"cp855\",\n  \"csibm855\": \"cp855\",\n  \"cp856\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"אבגדהוזחטיךכלםמןנסעףפץצקרשת�£�×����������®¬½¼�«»░▒▓│┤���©╣║╗╝¢¥┐└┴┬├─┼��╚╔╩╦╠═╬¤���������┘┌█▄¦�▀������µ�������¯´­±‗¾¶§÷¸°¨·¹³²■ \"\n  },\n  \"ibm856\": \"cp856\",\n  \"csibm856\": \"cp856\",\n  \"cp857\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäàåçêëèïîıÄÅÉæÆôöòûùİÖÜø£ØŞşáíóúñÑĞ𿮬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ºªÊËÈ�ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµ�×ÚÛÙìÿ¯´­±�¾¶§÷¸°¨·¹³²■ \"\n  },\n  \"ibm857\": \"cp857\",\n  \"csibm857\": \"cp857\",\n  \"cp858\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø׃áíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈ€ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´­±‗¾¶§÷¸°¨·¹³²■ \"\n  },\n  \"ibm858\": \"cp858\",\n  \"csibm858\": \"cp858\",\n  \"cp860\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâãàÁçêÊèÍÔìÃÂÉÀÈôõòÚùÌÕÜ¢£Ù₧ÓáíóúñѪº¿Ò¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm860\": \"cp860\",\n  \"csibm860\": \"cp860\",\n  \"cp861\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäàåçêëèÐðÞÄÅÉæÆôöþûÝýÖÜø£Ø₧ƒáíóúÁÍÓÚ¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm861\": \"cp861\",\n  \"csibm861\": \"cp861\",\n  \"cp862\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"אבגדהוזחטיךכלםמןנסעףפץצקרשת¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm862\": \"cp862\",\n  \"csibm862\": \"cp862\",\n  \"cp863\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâÂà¶çêëèïî‗À§ÉÈÊôËÏûù¤ÔÜ¢£ÙÛƒ¦´óú¨¸³¯Î⌐¬½¼¾«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm863\": \"cp863\",\n  \"csibm863\": \"cp863\",\n  \"cp864\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$٪&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~°·∙√▒─│┼┤┬├┴┐┌└┘β∞φ±½¼≈«»ﻷﻸ��ﻻﻼ� ­ﺂ£¤ﺄ��ﺎﺏﺕﺙ،ﺝﺡﺥ٠١٢٣٤٥٦٧٨٩ﻑ؛ﺱﺵﺹ؟¢ﺀﺁﺃﺅﻊﺋﺍﺑﺓﺗﺛﺟﺣﺧﺩﺫﺭﺯﺳﺷﺻﺿﻁﻅﻋﻏ¦¬÷×ﻉـﻓﻗﻛﻟﻣﻧﻫﻭﻯﻳﺽﻌﻎﻍﻡﹽّﻥﻩﻬﻰﻲﻐﻕﻵﻶﻝﻙﻱ■�\"\n  },\n  \"ibm864\": \"cp864\",\n  \"csibm864\": \"cp864\",\n  \"cp865\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø₧ƒáíóúñѪº¿⌐¬½¼¡«¤░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm865\": \"cp865\",\n  \"csibm865\": \"cp865\",\n  \"cp866\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ \"\n  },\n  \"ibm866\": \"cp866\",\n  \"csibm866\": \"cp866\",\n  \"cp869\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"������Ά�·¬¦‘’Έ―ΉΊΪΌ��ΎΫ©Ώ²³ά£έήίϊΐόύΑΒΓΔΕΖΗ½ΘΙ«»░▒▓│┤ΚΛΜΝ╣║╗╝ΞΟ┐└┴┬├─┼ΠΡ╚╔╩╦╠═╬ΣΤΥΦΧΨΩαβγ┘┌█▄δε▀ζηθικλμνξοπρσςτ΄­±υφχ§ψ΅°¨ωϋΰώ■ \"\n  },\n  \"ibm869\": \"cp869\",\n  \"csibm869\": \"cp869\",\n  \"cp922\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®‾°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŠÑÒÓÔÕÖ×ØÙÚÛÜÝŽßàáâãäåæçèéêëìíîïšñòóôõö÷øùúûüýžÿ\"\n  },\n  \"ibm922\": \"cp922\",\n  \"csibm922\": \"cp922\",\n  \"cp1046\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ﺈ×÷ﹱˆ■│─┐┌└┘ﹹﹻﹽﹿﹷﺊﻰﻳﻲﻎﻏﻐﻶﻸﻺﻼ ¤ﺋﺑﺗﺛﺟﺣ،­ﺧﺳ٠١٢٣٤٥٦٧٨٩ﺷ؛ﺻﺿﻊ؟ﻋءآأؤإئابةتثجحخدذرزسشصضطﻇعغﻌﺂﺄﺎﻓـفقكلمنهوىيًٌٍَُِّْﻗﻛﻟﻵﻷﻹﻻﻣﻧﻬﻩ�\"\n  },\n  \"ibm1046\": \"cp1046\",\n  \"csibm1046\": \"cp1046\",\n  \"cp1124\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂҐЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђґєѕіїјљњћќ§ўџ\"\n  },\n  \"ibm1124\": \"cp1124\",\n  \"csibm1124\": \"cp1124\",\n  \"cp1125\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёҐґЄєІіЇї·√№¤■ \"\n  },\n  \"ibm1125\": \"cp1125\",\n  \"csibm1125\": \"cp1125\",\n  \"cp1129\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖ×ØÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n  },\n  \"ibm1129\": \"cp1129\",\n  \"csibm1129\": \"cp1129\",\n  \"cp1133\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ກຂຄງຈສຊຍດຕຖທນບປຜຝພຟມຢຣລວຫອຮ���ຯະາຳິີຶືຸູຼັົຽ���ເແໂໃໄ່້໊໋໌ໍໆ�ໜໝ₭����������������໐໑໒໓໔໕໖໗໘໙��¢¬¦�\"\n  },\n  \"ibm1133\": \"cp1133\",\n  \"csibm1133\": \"cp1133\",\n  \"cp1161\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"��������������������������������่กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู้๊๋€฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛¢¬¦ \"\n  },\n  \"ibm1161\": \"cp1161\",\n  \"csibm1161\": \"cp1161\",\n  \"cp1162\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n  },\n  \"ibm1162\": \"cp1162\",\n  \"csibm1162\": \"cp1162\",\n  \"cp1163\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£€¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖ×ØÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n  },\n  \"ibm1163\": \"cp1163\",\n  \"csibm1163\": \"cp1163\",\n  \"maccroatian\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈Ć«Č… ÀÃÕŒœĐ—“”‘’÷◊�©⁄¤‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ\"\n  },\n  \"maccyrillic\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤\"\n  },\n  \"macgreek\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦­ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ�\"\n  },\n  \"maciceland\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüÝ°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n  },\n  \"macroman\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n  },\n  \"macromania\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂŞ∞±≤≥¥µ∂∑∏π∫ªºΩăş¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›Ţţ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n  },\n  \"macthai\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"«»…“”�•‘’� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู​–—฿เแโใไๅๆ็่้๊๋์ํ™๏๐๑๒๓๔๕๖๗๘๙®©����\"\n  },\n  \"macturkish\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸˝˛ˇ\"\n  },\n  \"macukraine\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤\"\n  },\n  \"koi8r\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ё╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡Ё╢╣╤╥╦╧╨╩╪╫╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n  },\n  \"koi8u\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґ╝╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪Ґ╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n  },\n  \"koi8ru\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґў╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪ҐЎ©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n  },\n  \"koi8t\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"қғ‚Ғ„…†‡�‰ҳ‹ҲҷҶ�Қ‘’“”•–—�™�›�����ӯӮё¤ӣ¦§���«¬­®�°±²Ё�Ӣ¶·�№�»���©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n  },\n  \"armscii8\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ �և։)(»«—.՝,-֊…՜՛՞ԱաԲբԳգԴդԵեԶզԷէԸըԹթԺժԻիԼլԽխԾծԿկՀհՁձՂղՃճՄմՅյՆնՇշՈոՉչՊպՋջՌռՍսՎվՏտՐրՑցՒւՓփՔքՕօՖֆ՚�\"\n  },\n  \"rk1048\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ЂЃ‚ѓ„…†‡€‰Љ‹ЊҚҺЏђ‘’“”•–—�™љ›њқһџ ҰұӘ¤Ө¦§Ё©Ғ«¬­®Ү°±Ііөµ¶·ё№ғ»әҢңүАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n  },\n  \"tcvn\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000ÚỤ\\u0003ỪỬỮ\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010ỨỰỲỶỸÝỴ\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÀẢÃÁẠẶẬÈẺẼÉẸỆÌỈĨÍỊÒỎÕÓỌỘỜỞỠỚỢÙỦŨ ĂÂÊÔƠƯĐăâêôơưđẶ̀̀̉̃́àảãáạẲằẳẵắẴẮẦẨẪẤỀặầẩẫấậèỂẻẽéẹềểễếệìỉỄẾỒĩíịòỔỏõóọồổỗốộờởỡớợùỖủũúụừửữứựỳỷỹýỵỐ\"\n  },\n  \"georgianacademy\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰჱჲჳჴჵჶçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n  },\n  \"georgianps\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზჱთიკლმნჲოპჟრსტჳუფქღყშჩცძწჭხჴჯჰჵæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n  },\n  \"pt154\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ҖҒӮғ„…ҶҮҲүҠӢҢҚҺҸҗ‘’“”•–—ҳҷҡӣңқһҹ ЎўЈӨҘҰ§Ё©Ә«¬ӯ®Ҝ°ұІіҙө¶·ё№ә»јҪҫҝАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n  },\n  \"viscii\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001Ẳ\\u0003\\u0004ẴẪ\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013Ỷ\\u0015\\u0016\\u0017\\u0018Ỹ\\u001a\\u001b\\u001c\\u001dỴ\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ẠẮẰẶẤẦẨẬẼẸẾỀỂỄỆỐỒỔỖỘỢỚỜỞỊỎỌỈỦŨỤỲÕắằặấầẩậẽẹếềểễệốồổỗỠƠộờởịỰỨỪỬơớƯÀÁÂÃẢĂẳẵÈÉÊẺÌÍĨỳĐứÒÓÔạỷừửÙÚỹỵÝỡưàáâãảăữẫèéêẻìíĩỉđựòóôõỏọụùúũủýợỮ\"\n  },\n  \"iso646cn\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������\"\n  },\n  \"iso646jp\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������\"\n  },\n  \"hproman8\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ÀÂÈÊËÎÏ´ˋˆ¨˜ÙÛ₤¯Ýý°ÇçÑñ¡¿¤£¥§ƒ¢âêôûáéóúàèòùäëöüÅîØÆåíøæÄìÖÜÉïßÔÁÃãÐðÍÌÓÒÕõŠšÚŸÿÞþ·µ¶¾—¼½ªº«■»±�\"\n  },\n  \"macintosh\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n  },\n  \"ascii\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"��������������������������������������������������������������������������������������������������������������������������������\"\n  },\n  \"tis620\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"���������������������������������กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n  }\n}","\"use strict\";\n\n// Manually added data to be used by sbcs codec in addition to generated one.\n\nmodule.exports = {\n    // Not supported by iconv, not sure why.\n    \"10029\": \"maccenteuro\",\n    \"maccenteuro\": {\n        \"type\": \"_sbcs\",\n        \"chars\": \"ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ\"\n    },\n\n    \"808\": \"cp808\",\n    \"ibm808\": \"cp808\",\n    \"cp808\": {\n        \"type\": \"_sbcs\",\n        \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№€■ \"\n    },\n\n    \"mik\": {\n        \"type\": \"_sbcs\",\n        \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя└┴┬├─┼╣║╚╔╩╦╠═╬┐░▒▓│┤№§╗╝┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n    },\n\n    \"cp720\": {\n        \"type\": \"_sbcs\",\n        \"chars\": \"\\x80\\x81éâ\\x84à\\x86çêëèïî\\x8d\\x8e\\x8f\\x90\\u0651\\u0652ô¤ـûùءآأؤ£إئابةتثجحخدذرزسشص«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ضطظعغفµقكلمنهوىي≡\\u064b\\u064c\\u064d\\u064e\\u064f\\u0650≈°∙·√ⁿ²■\\u00a0\"\n    },\n\n    // Aliases of generated encodings.\n    \"ascii8bit\": \"ascii\",\n    \"usascii\": \"ascii\",\n    \"ansix34\": \"ascii\",\n    \"ansix341968\": \"ascii\",\n    \"ansix341986\": \"ascii\",\n    \"csascii\": \"ascii\",\n    \"cp367\": \"ascii\",\n    \"ibm367\": \"ascii\",\n    \"isoir6\": \"ascii\",\n    \"iso646us\": \"ascii\",\n    \"iso646irv\": \"ascii\",\n    \"us\": \"ascii\",\n\n    \"latin1\": \"iso88591\",\n    \"latin2\": \"iso88592\",\n    \"latin3\": \"iso88593\",\n    \"latin4\": \"iso88594\",\n    \"latin5\": \"iso88599\",\n    \"latin6\": \"iso885910\",\n    \"latin7\": \"iso885913\",\n    \"latin8\": \"iso885914\",\n    \"latin9\": \"iso885915\",\n    \"latin10\": \"iso885916\",\n\n    \"csisolatin1\": \"iso88591\",\n    \"csisolatin2\": \"iso88592\",\n    \"csisolatin3\": \"iso88593\",\n    \"csisolatin4\": \"iso88594\",\n    \"csisolatincyrillic\": \"iso88595\",\n    \"csisolatinarabic\": \"iso88596\",\n    \"csisolatingreek\" : \"iso88597\",\n    \"csisolatinhebrew\": \"iso88598\",\n    \"csisolatin5\": \"iso88599\",\n    \"csisolatin6\": \"iso885910\",\n\n    \"l1\": \"iso88591\",\n    \"l2\": \"iso88592\",\n    \"l3\": \"iso88593\",\n    \"l4\": \"iso88594\",\n    \"l5\": \"iso88599\",\n    \"l6\": \"iso885910\",\n    \"l7\": \"iso885913\",\n    \"l8\": \"iso885914\",\n    \"l9\": \"iso885915\",\n    \"l10\": \"iso885916\",\n\n    \"isoir14\": \"iso646jp\",\n    \"isoir57\": \"iso646cn\",\n    \"isoir100\": \"iso88591\",\n    \"isoir101\": \"iso88592\",\n    \"isoir109\": \"iso88593\",\n    \"isoir110\": \"iso88594\",\n    \"isoir144\": \"iso88595\",\n    \"isoir127\": \"iso88596\",\n    \"isoir126\": \"iso88597\",\n    \"isoir138\": \"iso88598\",\n    \"isoir148\": \"iso88599\",\n    \"isoir157\": \"iso885910\",\n    \"isoir166\": \"tis620\",\n    \"isoir179\": \"iso885913\",\n    \"isoir199\": \"iso885914\",\n    \"isoir203\": \"iso885915\",\n    \"isoir226\": \"iso885916\",\n\n    \"cp819\": \"iso88591\",\n    \"ibm819\": \"iso88591\",\n\n    \"cyrillic\": \"iso88595\",\n\n    \"arabic\": \"iso88596\",\n    \"arabic8\": \"iso88596\",\n    \"ecma114\": \"iso88596\",\n    \"asmo708\": \"iso88596\",\n\n    \"greek\" : \"iso88597\",\n    \"greek8\" : \"iso88597\",\n    \"ecma118\" : \"iso88597\",\n    \"elot928\" : \"iso88597\",\n\n    \"hebrew\": \"iso88598\",\n    \"hebrew8\": \"iso88598\",\n\n    \"turkish\": \"iso88599\",\n    \"turkish8\": \"iso88599\",\n\n    \"thai\": \"iso885911\",\n    \"thai8\": \"iso885911\",\n\n    \"celtic\": \"iso885914\",\n    \"celtic8\": \"iso885914\",\n    \"isoceltic\": \"iso885914\",\n\n    \"tis6200\": \"tis620\",\n    \"tis62025291\": \"tis620\",\n    \"tis62025330\": \"tis620\",\n\n    \"10000\": \"macroman\",\n    \"10006\": \"macgreek\",\n    \"10007\": \"maccyrillic\",\n    \"10079\": \"maciceland\",\n    \"10081\": \"macturkish\",\n\n    \"cspc8codepage437\": \"cp437\",\n    \"cspc775baltic\": \"cp775\",\n    \"cspc850multilingual\": \"cp850\",\n    \"cspcp852\": \"cp852\",\n    \"cspc862latinhebrew\": \"cp862\",\n    \"cpgr\": \"cp869\",\n\n    \"msee\": \"cp1250\",\n    \"mscyrl\": \"cp1251\",\n    \"msansi\": \"cp1252\",\n    \"msgreek\": \"cp1253\",\n    \"msturk\": \"cp1254\",\n    \"mshebr\": \"cp1255\",\n    \"msarab\": \"cp1256\",\n    \"winbaltrim\": \"cp1257\",\n\n    \"cp20866\": \"koi8r\",\n    \"20866\": \"koi8r\",\n    \"ibm878\": \"koi8r\",\n    \"cskoi8r\": \"koi8r\",\n\n    \"cp21866\": \"koi8u\",\n    \"21866\": \"koi8u\",\n    \"ibm1168\": \"koi8u\",\n\n    \"strk10482002\": \"rk1048\",\n\n    \"tcvn5712\": \"tcvn\",\n    \"tcvn57121\": \"tcvn\",\n\n    \"gb198880\": \"iso646cn\",\n    \"cn\": \"iso646cn\",\n\n    \"csiso14jisc6220ro\": \"iso646jp\",\n    \"jisc62201969ro\": \"iso646jp\",\n    \"jp\": \"iso646jp\",\n\n    \"cshproman8\": \"hproman8\",\n    \"r8\": \"hproman8\",\n    \"roman8\": \"hproman8\",\n    \"xroman8\": \"hproman8\",\n    \"ibm1051\": \"hproman8\",\n\n    \"mac\": \"macintosh\",\n    \"csmacintosh\": \"macintosh\",\n};\n\n","\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Note: UTF16-LE (or UCS2) codec is Node.js native. See encodings/internal.js\n\n// == UTF16-BE codec. ==========================================================\n\nexports.utf16be = Utf16BECodec;\nfunction Utf16BECodec() {\n}\n\nUtf16BECodec.prototype.encoder = Utf16BEEncoder;\nUtf16BECodec.prototype.decoder = Utf16BEDecoder;\nUtf16BECodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf16BEEncoder() {\n}\n\nUtf16BEEncoder.prototype.write = function(str) {\n    var buf = Buffer.from(str, 'ucs2');\n    for (var i = 0; i < buf.length; i += 2) {\n        var tmp = buf[i]; buf[i] = buf[i+1]; buf[i+1] = tmp;\n    }\n    return buf;\n}\n\nUtf16BEEncoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf16BEDecoder() {\n    this.overflowByte = -1;\n}\n\nUtf16BEDecoder.prototype.write = function(buf) {\n    if (buf.length == 0)\n        return '';\n\n    var buf2 = Buffer.alloc(buf.length + 1),\n        i = 0, j = 0;\n\n    if (this.overflowByte !== -1) {\n        buf2[0] = buf[0];\n        buf2[1] = this.overflowByte;\n        i = 1; j = 2;\n    }\n\n    for (; i < buf.length-1; i += 2, j+= 2) {\n        buf2[j] = buf[i+1];\n        buf2[j+1] = buf[i];\n    }\n\n    this.overflowByte = (i == buf.length-1) ? buf[buf.length-1] : -1;\n\n    return buf2.slice(0, j).toString('ucs2');\n}\n\nUtf16BEDecoder.prototype.end = function() {\n    this.overflowByte = -1;\n}\n\n\n// == UTF-16 codec =============================================================\n// Decoder chooses automatically from UTF-16LE and UTF-16BE using BOM and space-based heuristic.\n// Defaults to UTF-16LE, as it's prevalent and default in Node.\n// http://en.wikipedia.org/wiki/UTF-16 and http://encoding.spec.whatwg.org/#utf-16le\n// Decoder default can be changed: iconv.decode(buf, 'utf16', {defaultEncoding: 'utf-16be'});\n\n// Encoder uses UTF-16LE and prepends BOM (which can be overridden with addBOM: false).\n\nexports.utf16 = Utf16Codec;\nfunction Utf16Codec(codecOptions, iconv) {\n    this.iconv = iconv;\n}\n\nUtf16Codec.prototype.encoder = Utf16Encoder;\nUtf16Codec.prototype.decoder = Utf16Decoder;\n\n\n// -- Encoding (pass-through)\n\nfunction Utf16Encoder(options, codec) {\n    options = options || {};\n    if (options.addBOM === undefined)\n        options.addBOM = true;\n    this.encoder = codec.iconv.getEncoder('utf-16le', options);\n}\n\nUtf16Encoder.prototype.write = function(str) {\n    return this.encoder.write(str);\n}\n\nUtf16Encoder.prototype.end = function() {\n    return this.encoder.end();\n}\n\n\n// -- Decoding\n\nfunction Utf16Decoder(options, codec) {\n    this.decoder = null;\n    this.initialBufs = [];\n    this.initialBufsLen = 0;\n\n    this.options = options || {};\n    this.iconv = codec.iconv;\n}\n\nUtf16Decoder.prototype.write = function(buf) {\n    if (!this.decoder) {\n        // Codec is not chosen yet. Accumulate initial bytes.\n        this.initialBufs.push(buf);\n        this.initialBufsLen += buf.length;\n        \n        if (this.initialBufsLen < 16) // We need more bytes to use space heuristic (see below)\n            return '';\n\n        // We have enough bytes -> detect endianness.\n        var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n        this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n        var resStr = '';\n        for (var i = 0; i < this.initialBufs.length; i++)\n            resStr += this.decoder.write(this.initialBufs[i]);\n\n        this.initialBufs.length = this.initialBufsLen = 0;\n        return resStr;\n    }\n\n    return this.decoder.write(buf);\n}\n\nUtf16Decoder.prototype.end = function() {\n    if (!this.decoder) {\n        var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n        this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n        var resStr = '';\n        for (var i = 0; i < this.initialBufs.length; i++)\n            resStr += this.decoder.write(this.initialBufs[i]);\n\n        var trail = this.decoder.end();\n        if (trail)\n            resStr += trail;\n\n        this.initialBufs.length = this.initialBufsLen = 0;\n        return resStr;\n    }\n    return this.decoder.end();\n}\n\nfunction detectEncoding(bufs, defaultEncoding) {\n    var b = [];\n    var charsProcessed = 0;\n    var asciiCharsLE = 0, asciiCharsBE = 0; // Number of ASCII chars when decoded as LE or BE.\n\n    outer_loop:\n    for (var i = 0; i < bufs.length; i++) {\n        var buf = bufs[i];\n        for (var j = 0; j < buf.length; j++) {\n            b.push(buf[j]);\n            if (b.length === 2) {\n                if (charsProcessed === 0) {\n                    // Check BOM first.\n                    if (b[0] === 0xFF && b[1] === 0xFE) return 'utf-16le';\n                    if (b[0] === 0xFE && b[1] === 0xFF) return 'utf-16be';\n                }\n\n                if (b[0] === 0 && b[1] !== 0) asciiCharsBE++;\n                if (b[0] !== 0 && b[1] === 0) asciiCharsLE++;\n\n                b.length = 0;\n                charsProcessed++;\n\n                if (charsProcessed >= 100) {\n                    break outer_loop;\n                }\n            }\n        }\n    }\n\n    // Make decisions.\n    // Most of the time, the content has ASCII chars (U+00**), but the opposite (U+**00) is uncommon.\n    // So, we count ASCII as if it was LE or BE, and decide from that.\n    if (asciiCharsBE > asciiCharsLE) return 'utf-16be';\n    if (asciiCharsBE < asciiCharsLE) return 'utf-16le';\n\n    // Couldn't decide (likely all zeros or not enough data).\n    return defaultEncoding || 'utf-16le';\n}\n\n\n","'use strict';\n\nvar Buffer = require('safer-buffer').Buffer;\n\n// == UTF32-LE/BE codec. ==========================================================\n\nexports._utf32 = Utf32Codec;\n\nfunction Utf32Codec(codecOptions, iconv) {\n    this.iconv = iconv;\n    this.bomAware = true;\n    this.isLE = codecOptions.isLE;\n}\n\nexports.utf32le = { type: '_utf32', isLE: true };\nexports.utf32be = { type: '_utf32', isLE: false };\n\n// Aliases\nexports.ucs4le = 'utf32le';\nexports.ucs4be = 'utf32be';\n\nUtf32Codec.prototype.encoder = Utf32Encoder;\nUtf32Codec.prototype.decoder = Utf32Decoder;\n\n// -- Encoding\n\nfunction Utf32Encoder(options, codec) {\n    this.isLE = codec.isLE;\n    this.highSurrogate = 0;\n}\n\nUtf32Encoder.prototype.write = function(str) {\n    var src = Buffer.from(str, 'ucs2');\n    var dst = Buffer.alloc(src.length * 2);\n    var write32 = this.isLE ? dst.writeUInt32LE : dst.writeUInt32BE;\n    var offset = 0;\n\n    for (var i = 0; i < src.length; i += 2) {\n        var code = src.readUInt16LE(i);\n        var isHighSurrogate = (0xD800 <= code && code < 0xDC00);\n        var isLowSurrogate = (0xDC00 <= code && code < 0xE000);\n\n        if (this.highSurrogate) {\n            if (isHighSurrogate || !isLowSurrogate) {\n                // There shouldn't be two high surrogates in a row, nor a high surrogate which isn't followed by a low\n                // surrogate. If this happens, keep the pending high surrogate as a stand-alone semi-invalid character\n                // (technically wrong, but expected by some applications, like Windows file names).\n                write32.call(dst, this.highSurrogate, offset);\n                offset += 4;\n            }\n            else {\n                // Create 32-bit value from high and low surrogates;\n                var codepoint = (((this.highSurrogate - 0xD800) << 10) | (code - 0xDC00)) + 0x10000;\n\n                write32.call(dst, codepoint, offset);\n                offset += 4;\n                this.highSurrogate = 0;\n\n                continue;\n            }\n        }\n\n        if (isHighSurrogate)\n            this.highSurrogate = code;\n        else {\n            // Even if the current character is a low surrogate, with no previous high surrogate, we'll\n            // encode it as a semi-invalid stand-alone character for the same reasons expressed above for\n            // unpaired high surrogates.\n            write32.call(dst, code, offset);\n            offset += 4;\n            this.highSurrogate = 0;\n        }\n    }\n\n    if (offset < dst.length)\n        dst = dst.slice(0, offset);\n\n    return dst;\n};\n\nUtf32Encoder.prototype.end = function() {\n    // Treat any leftover high surrogate as a semi-valid independent character.\n    if (!this.highSurrogate)\n        return;\n\n    var buf = Buffer.alloc(4);\n\n    if (this.isLE)\n        buf.writeUInt32LE(this.highSurrogate, 0);\n    else\n        buf.writeUInt32BE(this.highSurrogate, 0);\n\n    this.highSurrogate = 0;\n\n    return buf;\n};\n\n// -- Decoding\n\nfunction Utf32Decoder(options, codec) {\n    this.isLE = codec.isLE;\n    this.badChar = codec.iconv.defaultCharUnicode.charCodeAt(0);\n    this.overflow = [];\n}\n\nUtf32Decoder.prototype.write = function(src) {\n    if (src.length === 0)\n        return '';\n\n    var i = 0;\n    var codepoint = 0;\n    var dst = Buffer.alloc(src.length + 4);\n    var offset = 0;\n    var isLE = this.isLE;\n    var overflow = this.overflow;\n    var badChar = this.badChar;\n\n    if (overflow.length > 0) {\n        for (; i < src.length && overflow.length < 4; i++)\n            overflow.push(src[i]);\n        \n        if (overflow.length === 4) {\n            // NOTE: codepoint is a signed int32 and can be negative.\n            // NOTE: We copied this block from below to help V8 optimize it (it works with array, not buffer).\n            if (isLE) {\n                codepoint = overflow[i] | (overflow[i+1] << 8) | (overflow[i+2] << 16) | (overflow[i+3] << 24);\n            } else {\n                codepoint = overflow[i+3] | (overflow[i+2] << 8) | (overflow[i+1] << 16) | (overflow[i] << 24);\n            }\n            overflow.length = 0;\n\n            offset = _writeCodepoint(dst, offset, codepoint, badChar);\n        }\n    }\n\n    // Main loop. Should be as optimized as possible.\n    for (; i < src.length - 3; i += 4) {\n        // NOTE: codepoint is a signed int32 and can be negative.\n        if (isLE) {\n            codepoint = src[i] | (src[i+1] << 8) | (src[i+2] << 16) | (src[i+3] << 24);\n        } else {\n            codepoint = src[i+3] | (src[i+2] << 8) | (src[i+1] << 16) | (src[i] << 24);\n        }\n        offset = _writeCodepoint(dst, offset, codepoint, badChar);\n    }\n\n    // Keep overflowing bytes.\n    for (; i < src.length; i++) {\n        overflow.push(src[i]);\n    }\n\n    return dst.slice(0, offset).toString('ucs2');\n};\n\nfunction _writeCodepoint(dst, offset, codepoint, badChar) {\n    // NOTE: codepoint is signed int32 and can be negative. We keep it that way to help V8 with optimizations.\n    if (codepoint < 0 || codepoint > 0x10FFFF) {\n        // Not a valid Unicode codepoint\n        codepoint = badChar;\n    } \n\n    // Ephemeral Planes: Write high surrogate.\n    if (codepoint >= 0x10000) {\n        codepoint -= 0x10000;\n\n        var high = 0xD800 | (codepoint >> 10);\n        dst[offset++] = high & 0xff;\n        dst[offset++] = high >> 8;\n\n        // Low surrogate is written below.\n        var codepoint = 0xDC00 | (codepoint & 0x3FF);\n    }\n\n    // Write BMP char or low surrogate.\n    dst[offset++] = codepoint & 0xff;\n    dst[offset++] = codepoint >> 8;\n\n    return offset;\n};\n\nUtf32Decoder.prototype.end = function() {\n    this.overflow.length = 0;\n};\n\n// == UTF-32 Auto codec =============================================================\n// Decoder chooses automatically from UTF-32LE and UTF-32BE using BOM and space-based heuristic.\n// Defaults to UTF-32LE. http://en.wikipedia.org/wiki/UTF-32\n// Encoder/decoder default can be changed: iconv.decode(buf, 'utf32', {defaultEncoding: 'utf-32be'});\n\n// Encoder prepends BOM (which can be overridden with (addBOM: false}).\n\nexports.utf32 = Utf32AutoCodec;\nexports.ucs4 = 'utf32';\n\nfunction Utf32AutoCodec(options, iconv) {\n    this.iconv = iconv;\n}\n\nUtf32AutoCodec.prototype.encoder = Utf32AutoEncoder;\nUtf32AutoCodec.prototype.decoder = Utf32AutoDecoder;\n\n// -- Encoding\n\nfunction Utf32AutoEncoder(options, codec) {\n    options = options || {};\n\n    if (options.addBOM === undefined)\n        options.addBOM = true;\n\n    this.encoder = codec.iconv.getEncoder(options.defaultEncoding || 'utf-32le', options);\n}\n\nUtf32AutoEncoder.prototype.write = function(str) {\n    return this.encoder.write(str);\n};\n\nUtf32AutoEncoder.prototype.end = function() {\n    return this.encoder.end();\n};\n\n// -- Decoding\n\nfunction Utf32AutoDecoder(options, codec) {\n    this.decoder = null;\n    this.initialBufs = [];\n    this.initialBufsLen = 0;\n    this.options = options || {};\n    this.iconv = codec.iconv;\n}\n\nUtf32AutoDecoder.prototype.write = function(buf) {\n    if (!this.decoder) { \n        // Codec is not chosen yet. Accumulate initial bytes.\n        this.initialBufs.push(buf);\n        this.initialBufsLen += buf.length;\n\n        if (this.initialBufsLen < 32) // We need more bytes to use space heuristic (see below)\n            return '';\n\n        // We have enough bytes -> detect endianness.\n        var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n        this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n        var resStr = '';\n        for (var i = 0; i < this.initialBufs.length; i++)\n            resStr += this.decoder.write(this.initialBufs[i]);\n\n        this.initialBufs.length = this.initialBufsLen = 0;\n        return resStr;\n    }\n\n    return this.decoder.write(buf);\n};\n\nUtf32AutoDecoder.prototype.end = function() {\n    if (!this.decoder) {\n        var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n        this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n        var resStr = '';\n        for (var i = 0; i < this.initialBufs.length; i++)\n            resStr += this.decoder.write(this.initialBufs[i]);\n\n        var trail = this.decoder.end();\n        if (trail)\n            resStr += trail;\n\n        this.initialBufs.length = this.initialBufsLen = 0;\n        return resStr;\n    }\n\n    return this.decoder.end();\n};\n\nfunction detectEncoding(bufs, defaultEncoding) {\n    var b = [];\n    var charsProcessed = 0;\n    var invalidLE = 0, invalidBE = 0;   // Number of invalid chars when decoded as LE or BE.\n    var bmpCharsLE = 0, bmpCharsBE = 0; // Number of BMP chars when decoded as LE or BE.\n\n    outer_loop:\n    for (var i = 0; i < bufs.length; i++) {\n        var buf = bufs[i];\n        for (var j = 0; j < buf.length; j++) {\n            b.push(buf[j]);\n            if (b.length === 4) {\n                if (charsProcessed === 0) {\n                    // Check BOM first.\n                    if (b[0] === 0xFF && b[1] === 0xFE && b[2] === 0 && b[3] === 0) {\n                        return 'utf-32le';\n                    }\n                    if (b[0] === 0 && b[1] === 0 && b[2] === 0xFE && b[3] === 0xFF) {\n                        return 'utf-32be';\n                    }\n                }\n\n                if (b[0] !== 0 || b[1] > 0x10) invalidBE++;\n                if (b[3] !== 0 || b[2] > 0x10) invalidLE++;\n\n                if (b[0] === 0 && b[1] === 0 && (b[2] !== 0 || b[3] !== 0)) bmpCharsBE++;\n                if ((b[0] !== 0 || b[1] !== 0) && b[2] === 0 && b[3] === 0) bmpCharsLE++;\n\n                b.length = 0;\n                charsProcessed++;\n\n                if (charsProcessed >= 100) {\n                    break outer_loop;\n                }\n            }\n        }\n    }\n\n    // Make decisions.\n    if (bmpCharsBE - invalidBE > bmpCharsLE - invalidLE)  return 'utf-32be';\n    if (bmpCharsBE - invalidBE < bmpCharsLE - invalidLE)  return 'utf-32le';\n\n    // Couldn't decide (likely all zeros or not enough data).\n    return defaultEncoding || 'utf-32le';\n}\n","\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// UTF-7 codec, according to https://tools.ietf.org/html/rfc2152\n// See also below a UTF-7-IMAP codec, according to http://tools.ietf.org/html/rfc3501#section-5.1.3\n\nexports.utf7 = Utf7Codec;\nexports.unicode11utf7 = 'utf7'; // Alias UNICODE-1-1-UTF-7\nfunction Utf7Codec(codecOptions, iconv) {\n    this.iconv = iconv;\n};\n\nUtf7Codec.prototype.encoder = Utf7Encoder;\nUtf7Codec.prototype.decoder = Utf7Decoder;\nUtf7Codec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nvar nonDirectChars = /[^A-Za-z0-9'\\(\\),-\\.\\/:\\? \\n\\r\\t]+/g;\n\nfunction Utf7Encoder(options, codec) {\n    this.iconv = codec.iconv;\n}\n\nUtf7Encoder.prototype.write = function(str) {\n    // Naive implementation.\n    // Non-direct chars are encoded as \"+<base64>-\"; single \"+\" char is encoded as \"+-\".\n    return Buffer.from(str.replace(nonDirectChars, function(chunk) {\n        return \"+\" + (chunk === '+' ? '' : \n            this.iconv.encode(chunk, 'utf16-be').toString('base64').replace(/=+$/, '')) \n            + \"-\";\n    }.bind(this)));\n}\n\nUtf7Encoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf7Decoder(options, codec) {\n    this.iconv = codec.iconv;\n    this.inBase64 = false;\n    this.base64Accum = '';\n}\n\nvar base64Regex = /[A-Za-z0-9\\/+]/;\nvar base64Chars = [];\nfor (var i = 0; i < 256; i++)\n    base64Chars[i] = base64Regex.test(String.fromCharCode(i));\n\nvar plusChar = '+'.charCodeAt(0), \n    minusChar = '-'.charCodeAt(0),\n    andChar = '&'.charCodeAt(0);\n\nUtf7Decoder.prototype.write = function(buf) {\n    var res = \"\", lastI = 0,\n        inBase64 = this.inBase64,\n        base64Accum = this.base64Accum;\n\n    // The decoder is more involved as we must handle chunks in stream.\n\n    for (var i = 0; i < buf.length; i++) {\n        if (!inBase64) { // We're in direct mode.\n            // Write direct chars until '+'\n            if (buf[i] == plusChar) {\n                res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n                lastI = i+1;\n                inBase64 = true;\n            }\n        } else { // We decode base64.\n            if (!base64Chars[buf[i]]) { // Base64 ended.\n                if (i == lastI && buf[i] == minusChar) {// \"+-\" -> \"+\"\n                    res += \"+\";\n                } else {\n                    var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i), \"ascii\");\n                    res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n                }\n\n                if (buf[i] != minusChar) // Minus is absorbed after base64.\n                    i--;\n\n                lastI = i+1;\n                inBase64 = false;\n                base64Accum = '';\n            }\n        }\n    }\n\n    if (!inBase64) {\n        res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n    } else {\n        var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), \"ascii\");\n\n        var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n        base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n        b64str = b64str.slice(0, canBeDecoded);\n\n        res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n    }\n\n    this.inBase64 = inBase64;\n    this.base64Accum = base64Accum;\n\n    return res;\n}\n\nUtf7Decoder.prototype.end = function() {\n    var res = \"\";\n    if (this.inBase64 && this.base64Accum.length > 0)\n        res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n    this.inBase64 = false;\n    this.base64Accum = '';\n    return res;\n}\n\n\n// UTF-7-IMAP codec.\n// RFC3501 Sec. 5.1.3 Modified UTF-7 (http://tools.ietf.org/html/rfc3501#section-5.1.3)\n// Differences:\n//  * Base64 part is started by \"&\" instead of \"+\"\n//  * Direct characters are 0x20-0x7E, except \"&\" (0x26)\n//  * In Base64, \",\" is used instead of \"/\"\n//  * Base64 must not be used to represent direct characters.\n//  * No implicit shift back from Base64 (should always end with '-')\n//  * String must end in non-shifted position.\n//  * \"-&\" while in base64 is not allowed.\n\n\nexports.utf7imap = Utf7IMAPCodec;\nfunction Utf7IMAPCodec(codecOptions, iconv) {\n    this.iconv = iconv;\n};\n\nUtf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder;\nUtf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder;\nUtf7IMAPCodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf7IMAPEncoder(options, codec) {\n    this.iconv = codec.iconv;\n    this.inBase64 = false;\n    this.base64Accum = Buffer.alloc(6);\n    this.base64AccumIdx = 0;\n}\n\nUtf7IMAPEncoder.prototype.write = function(str) {\n    var inBase64 = this.inBase64,\n        base64Accum = this.base64Accum,\n        base64AccumIdx = this.base64AccumIdx,\n        buf = Buffer.alloc(str.length*5 + 10), bufIdx = 0;\n\n    for (var i = 0; i < str.length; i++) {\n        var uChar = str.charCodeAt(i);\n        if (0x20 <= uChar && uChar <= 0x7E) { // Direct character or '&'.\n            if (inBase64) {\n                if (base64AccumIdx > 0) {\n                    bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n                    base64AccumIdx = 0;\n                }\n\n                buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n                inBase64 = false;\n            }\n\n            if (!inBase64) {\n                buf[bufIdx++] = uChar; // Write direct character\n\n                if (uChar === andChar)  // Ampersand -> '&-'\n                    buf[bufIdx++] = minusChar;\n            }\n\n        } else { // Non-direct character\n            if (!inBase64) {\n                buf[bufIdx++] = andChar; // Write '&', then go to base64 mode.\n                inBase64 = true;\n            }\n            if (inBase64) {\n                base64Accum[base64AccumIdx++] = uChar >> 8;\n                base64Accum[base64AccumIdx++] = uChar & 0xFF;\n\n                if (base64AccumIdx == base64Accum.length) {\n                    bufIdx += buf.write(base64Accum.toString('base64').replace(/\\//g, ','), bufIdx);\n                    base64AccumIdx = 0;\n                }\n            }\n        }\n    }\n\n    this.inBase64 = inBase64;\n    this.base64AccumIdx = base64AccumIdx;\n\n    return buf.slice(0, bufIdx);\n}\n\nUtf7IMAPEncoder.prototype.end = function() {\n    var buf = Buffer.alloc(10), bufIdx = 0;\n    if (this.inBase64) {\n        if (this.base64AccumIdx > 0) {\n            bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n            this.base64AccumIdx = 0;\n        }\n\n        buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n        this.inBase64 = false;\n    }\n\n    return buf.slice(0, bufIdx);\n}\n\n\n// -- Decoding\n\nfunction Utf7IMAPDecoder(options, codec) {\n    this.iconv = codec.iconv;\n    this.inBase64 = false;\n    this.base64Accum = '';\n}\n\nvar base64IMAPChars = base64Chars.slice();\nbase64IMAPChars[','.charCodeAt(0)] = true;\n\nUtf7IMAPDecoder.prototype.write = function(buf) {\n    var res = \"\", lastI = 0,\n        inBase64 = this.inBase64,\n        base64Accum = this.base64Accum;\n\n    // The decoder is more involved as we must handle chunks in stream.\n    // It is forgiving, closer to standard UTF-7 (for example, '-' is optional at the end).\n\n    for (var i = 0; i < buf.length; i++) {\n        if (!inBase64) { // We're in direct mode.\n            // Write direct chars until '&'\n            if (buf[i] == andChar) {\n                res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n                lastI = i+1;\n                inBase64 = true;\n            }\n        } else { // We decode base64.\n            if (!base64IMAPChars[buf[i]]) { // Base64 ended.\n                if (i == lastI && buf[i] == minusChar) { // \"&-\" -> \"&\"\n                    res += \"&\";\n                } else {\n                    var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i), \"ascii\").replace(/,/g, '/');\n                    res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n                }\n\n                if (buf[i] != minusChar) // Minus may be absorbed after base64.\n                    i--;\n\n                lastI = i+1;\n                inBase64 = false;\n                base64Accum = '';\n            }\n        }\n    }\n\n    if (!inBase64) {\n        res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n    } else {\n        var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), \"ascii\").replace(/,/g, '/');\n\n        var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n        base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n        b64str = b64str.slice(0, canBeDecoded);\n\n        res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n    }\n\n    this.inBase64 = inBase64;\n    this.base64Accum = base64Accum;\n\n    return res;\n}\n\nUtf7IMAPDecoder.prototype.end = function() {\n    var res = \"\";\n    if (this.inBase64 && this.base64Accum.length > 0)\n        res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n    this.inBase64 = false;\n    this.base64Accum = '';\n    return res;\n}\n\n\n","\"use strict\";\n\nvar BOMChar = '\\uFEFF';\n\nexports.PrependBOM = PrependBOMWrapper\nfunction PrependBOMWrapper(encoder, options) {\n    this.encoder = encoder;\n    this.addBOM = true;\n}\n\nPrependBOMWrapper.prototype.write = function(str) {\n    if (this.addBOM) {\n        str = BOMChar + str;\n        this.addBOM = false;\n    }\n\n    return this.encoder.write(str);\n}\n\nPrependBOMWrapper.prototype.end = function() {\n    return this.encoder.end();\n}\n\n\n//------------------------------------------------------------------------------\n\nexports.StripBOM = StripBOMWrapper;\nfunction StripBOMWrapper(decoder, options) {\n    this.decoder = decoder;\n    this.pass = false;\n    this.options = options || {};\n}\n\nStripBOMWrapper.prototype.write = function(buf) {\n    var res = this.decoder.write(buf);\n    if (this.pass || !res)\n        return res;\n\n    if (res[0] === BOMChar) {\n        res = res.slice(1);\n        if (typeof this.options.stripBOM === 'function')\n            this.options.stripBOM();\n    }\n\n    this.pass = true;\n    return res;\n}\n\nStripBOMWrapper.prototype.end = function() {\n    return this.decoder.end();\n}\n\n","\"use strict\";\n\nvar Buffer = require(\"safer-buffer\").Buffer;\n\nvar bomHandling = require(\"./bom-handling\"),\n    iconv = module.exports;\n\n// All codecs and aliases are kept here, keyed by encoding name/alias.\n// They are lazy loaded in `iconv.getCodec` from `encodings/index.js`.\niconv.encodings = null;\n\n// Characters emitted in case of error.\niconv.defaultCharUnicode = '�';\niconv.defaultCharSingleByte = '?';\n\n// Public API.\niconv.encode = function encode(str, encoding, options) {\n    str = \"\" + (str || \"\"); // Ensure string.\n\n    var encoder = iconv.getEncoder(encoding, options);\n\n    var res = encoder.write(str);\n    var trail = encoder.end();\n    \n    return (trail && trail.length > 0) ? Buffer.concat([res, trail]) : res;\n}\n\niconv.decode = function decode(buf, encoding, options) {\n    if (typeof buf === 'string') {\n        if (!iconv.skipDecodeWarning) {\n            console.error('Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding');\n            iconv.skipDecodeWarning = true;\n        }\n\n        buf = Buffer.from(\"\" + (buf || \"\"), \"binary\"); // Ensure buffer.\n    }\n\n    var decoder = iconv.getDecoder(encoding, options);\n\n    var res = decoder.write(buf);\n    var trail = decoder.end();\n\n    return trail ? (res + trail) : res;\n}\n\niconv.encodingExists = function encodingExists(enc) {\n    try {\n        iconv.getCodec(enc);\n        return true;\n    } catch (e) {\n        return false;\n    }\n}\n\n// Legacy aliases to convert functions\niconv.toEncoding = iconv.encode;\niconv.fromEncoding = iconv.decode;\n\n// Search for a codec in iconv.encodings. Cache codec data in iconv._codecDataCache.\niconv._codecDataCache = {};\niconv.getCodec = function getCodec(encoding) {\n    if (!iconv.encodings)\n        iconv.encodings = require(\"../encodings\"); // Lazy load all encoding definitions.\n    \n    // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n    var enc = iconv._canonicalizeEncoding(encoding);\n\n    // Traverse iconv.encodings to find actual codec.\n    var codecOptions = {};\n    while (true) {\n        var codec = iconv._codecDataCache[enc];\n        if (codec)\n            return codec;\n\n        var codecDef = iconv.encodings[enc];\n\n        switch (typeof codecDef) {\n            case \"string\": // Direct alias to other encoding.\n                enc = codecDef;\n                break;\n\n            case \"object\": // Alias with options. Can be layered.\n                for (var key in codecDef)\n                    codecOptions[key] = codecDef[key];\n\n                if (!codecOptions.encodingName)\n                    codecOptions.encodingName = enc;\n                \n                enc = codecDef.type;\n                break;\n\n            case \"function\": // Codec itself.\n                if (!codecOptions.encodingName)\n                    codecOptions.encodingName = enc;\n\n                // The codec function must load all tables and return object with .encoder and .decoder methods.\n                // It'll be called only once (for each different options object).\n                codec = new codecDef(codecOptions, iconv);\n\n                iconv._codecDataCache[codecOptions.encodingName] = codec; // Save it to be reused later.\n                return codec;\n\n            default:\n                throw new Error(\"Encoding not recognized: '\" + encoding + \"' (searched as: '\"+enc+\"')\");\n        }\n    }\n}\n\niconv._canonicalizeEncoding = function(encoding) {\n    // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n    return (''+encoding).toLowerCase().replace(/:\\d{4}$|[^0-9a-z]/g, \"\");\n}\n\niconv.getEncoder = function getEncoder(encoding, options) {\n    var codec = iconv.getCodec(encoding),\n        encoder = new codec.encoder(options, codec);\n\n    if (codec.bomAware && options && options.addBOM)\n        encoder = new bomHandling.PrependBOM(encoder, options);\n\n    return encoder;\n}\n\niconv.getDecoder = function getDecoder(encoding, options) {\n    var codec = iconv.getCodec(encoding),\n        decoder = new codec.decoder(options, codec);\n\n    if (codec.bomAware && !(options && options.stripBOM === false))\n        decoder = new bomHandling.StripBOM(decoder, options);\n\n    return decoder;\n}\n\n// Streaming API\n// NOTE: Streaming API naturally depends on 'stream' module from Node.js. Unfortunately in browser environments this module can add\n// up to 100Kb to the output bundle. To avoid unnecessary code bloat, we don't enable Streaming API in browser by default.\n// If you would like to enable it explicitly, please add the following code to your app:\n// > iconv.enableStreamingAPI(require('stream'));\niconv.enableStreamingAPI = function enableStreamingAPI(stream_module) {\n    if (iconv.supportsStreams)\n        return;\n\n    // Dependency-inject stream module to create IconvLite stream classes.\n    var streams = require(\"./streams\")(stream_module);\n\n    // Not public API yet, but expose the stream classes.\n    iconv.IconvLiteEncoderStream = streams.IconvLiteEncoderStream;\n    iconv.IconvLiteDecoderStream = streams.IconvLiteDecoderStream;\n\n    // Streaming API.\n    iconv.encodeStream = function encodeStream(encoding, options) {\n        return new iconv.IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options);\n    }\n\n    iconv.decodeStream = function decodeStream(encoding, options) {\n        return new iconv.IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options);\n    }\n\n    iconv.supportsStreams = true;\n}\n\n// Enable Streaming API automatically if 'stream' module is available and non-empty (the majority of environments).\nvar stream_module;\ntry {\n    stream_module = require(\"stream\");\n} catch (e) {}\n\nif (stream_module && stream_module.Transform) {\n    iconv.enableStreamingAPI(stream_module);\n\n} else {\n    // In rare cases where 'stream' module is not available by default, throw a helpful exception.\n    iconv.encodeStream = iconv.decodeStream = function() {\n        throw new Error(\"iconv-lite Streaming API is not enabled. Use iconv.enableStreamingAPI(require('stream')); to enable it.\");\n    };\n}\n\nif (\"Ā\" != \"\\u0100\") {\n    console.error(\"iconv-lite warning: js files use non-utf8 encoding. See https://github.com/ashtuchkin/iconv-lite/wiki/Javascript-source-file-encodings for more info.\");\n}\n","\"use strict\";\n\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// NOTE: Due to 'stream' module being pretty large (~100Kb, significant in browser environments), \n// we opt to dependency-inject it instead of creating a hard dependency.\nmodule.exports = function(stream_module) {\n    var Transform = stream_module.Transform;\n\n    // == Encoder stream =======================================================\n\n    function IconvLiteEncoderStream(conv, options) {\n        this.conv = conv;\n        options = options || {};\n        options.decodeStrings = false; // We accept only strings, so we don't need to decode them.\n        Transform.call(this, options);\n    }\n\n    IconvLiteEncoderStream.prototype = Object.create(Transform.prototype, {\n        constructor: { value: IconvLiteEncoderStream }\n    });\n\n    IconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) {\n        if (typeof chunk != 'string')\n            return done(new Error(\"Iconv encoding stream needs strings as its input.\"));\n        try {\n            var res = this.conv.write(chunk);\n            if (res && res.length) this.push(res);\n            done();\n        }\n        catch (e) {\n            done(e);\n        }\n    }\n\n    IconvLiteEncoderStream.prototype._flush = function(done) {\n        try {\n            var res = this.conv.end();\n            if (res && res.length) this.push(res);\n            done();\n        }\n        catch (e) {\n            done(e);\n        }\n    }\n\n    IconvLiteEncoderStream.prototype.collect = function(cb) {\n        var chunks = [];\n        this.on('error', cb);\n        this.on('data', function(chunk) { chunks.push(chunk); });\n        this.on('end', function() {\n            cb(null, Buffer.concat(chunks));\n        });\n        return this;\n    }\n\n\n    // == Decoder stream =======================================================\n\n    function IconvLiteDecoderStream(conv, options) {\n        this.conv = conv;\n        options = options || {};\n        options.encoding = this.encoding = 'utf8'; // We output strings.\n        Transform.call(this, options);\n    }\n\n    IconvLiteDecoderStream.prototype = Object.create(Transform.prototype, {\n        constructor: { value: IconvLiteDecoderStream }\n    });\n\n    IconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) {\n        if (!Buffer.isBuffer(chunk) && !(chunk instanceof Uint8Array))\n            return done(new Error(\"Iconv decoding stream needs buffers as its input.\"));\n        try {\n            var res = this.conv.write(chunk);\n            if (res && res.length) this.push(res, this.encoding);\n            done();\n        }\n        catch (e) {\n            done(e);\n        }\n    }\n\n    IconvLiteDecoderStream.prototype._flush = function(done) {\n        try {\n            var res = this.conv.end();\n            if (res && res.length) this.push(res, this.encoding);                \n            done();\n        }\n        catch (e) {\n            done(e);\n        }\n    }\n\n    IconvLiteDecoderStream.prototype.collect = function(cb) {\n        var res = '';\n        this.on('error', cb);\n        this.on('data', function(chunk) { res += chunk; });\n        this.on('end', function() {\n            cb(null, res);\n        });\n        return this;\n    }\n\n    return {\n        IconvLiteEncoderStream: IconvLiteEncoderStream,\n        IconvLiteDecoderStream: IconvLiteDecoderStream,\n    };\n};\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n","if (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n          value: ctor,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      })\n    }\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      var TempCtor = function () {}\n      TempCtor.prototype = superCtor.prototype\n      ctor.prototype = new TempCtor()\n      ctor.prototype.constructor = ctor\n    }\n  }\n}\n","'use strict';\n\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\n\nvar isStandardArguments = function isArguments(value) {\n\tif (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {\n\t\treturn false;\n\t}\n\treturn $toString(value) === '[object Arguments]';\n};\n\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.length === 'number' &&\n\t\tvalue.length >= 0 &&\n\t\t$toString(value) !== '[object Array]' &&\n\t\t$toString(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n","'use strict';\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar objectClass = '[object Object]';\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar ddaClass = '[object HTMLAllCollection]'; // IE 11\nvar ddaClass2 = '[object HTML document.all class]';\nvar ddaClass3 = '[object HTMLCollection]'; // IE 9-10\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n\nvar isIE68 = !(0 in [,]); // eslint-disable-line no-sparse-arrays, comma-spacing\n\nvar isDDA = function isDocumentDotAll() { return false; };\nif (typeof document === 'object') {\n\t// Firefox 3 canonicalizes DDA to undefined when it's not accessed directly\n\tvar all = document.all;\n\tif (toStr.call(all) === toStr.call(document.all)) {\n\t\tisDDA = function isDocumentDotAll(value) {\n\t\t\t/* globals document: false */\n\t\t\t// in IE 6-8, typeof document.all is \"object\" and it's truthy\n\t\t\tif ((isIE68 || !value) && (typeof value === 'undefined' || typeof value === 'object')) {\n\t\t\t\ttry {\n\t\t\t\t\tvar str = toStr.call(value);\n\t\t\t\t\treturn (\n\t\t\t\t\t\tstr === ddaClass\n\t\t\t\t\t\t|| str === ddaClass2\n\t\t\t\t\t\t|| str === ddaClass3 // opera 12.16\n\t\t\t\t\t\t|| str === objectClass // IE 6-8\n\t\t\t\t\t) && value('') == null; // eslint-disable-line eqeqeq\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t}\n}\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value) && tryFunctionObject(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\tif (strClass !== fnClass && strClass !== genClass && !(/^\\[object HTML/).test(strClass)) { return false; }\n\t\treturn tryFunctionObject(value);\n\t};\n","'use strict';\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n","'use strict';\n\nvar toStr = Object.prototype.toString;\nvar fnToStr = Function.prototype.toString;\nvar isFnRegex = /^\\s*(?:function)?\\*/;\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar getProto = Object.getPrototypeOf;\nvar getGeneratorFunc = function () { // eslint-disable-line consistent-return\n\tif (!hasToStringTag) {\n\t\treturn false;\n\t}\n\ttry {\n\t\treturn Function('return function*() {}')();\n\t} catch (e) {\n\t}\n};\nvar GeneratorFunction;\n\nmodule.exports = function isGeneratorFunction(fn) {\n\tif (typeof fn !== 'function') {\n\t\treturn false;\n\t}\n\tif (isFnRegex.test(fnToStr.call(fn))) {\n\t\treturn true;\n\t}\n\tif (!hasToStringTag) {\n\t\tvar str = toStr.call(fn);\n\t\treturn str === '[object GeneratorFunction]';\n\t}\n\tif (!getProto) {\n\t\treturn false;\n\t}\n\tif (typeof GeneratorFunction === 'undefined') {\n\t\tvar generatorFunc = getGeneratorFunc();\n\t\tGeneratorFunction = generatorFunc ? getProto(generatorFunc) : false;\n\t}\n\treturn getProto(fn) === GeneratorFunction;\n};\n","'use strict';\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\nmodule.exports = function isNaN(value) {\n\treturn value !== value;\n};\n","'use strict';\n\nvar callBind = require('call-bind');\nvar define = require('define-properties');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = callBind(getPolyfill(), Number);\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\ndefine(polyfill, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\tif (Number.isNaN && Number.isNaN(NaN) && !Number.isNaN('a')) {\n\t\treturn Number.isNaN;\n\t}\n\treturn implementation;\n};\n","'use strict';\n\nvar define = require('define-properties');\nvar getPolyfill = require('./polyfill');\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\nmodule.exports = function shimNumberIsNaN() {\n\tvar polyfill = getPolyfill();\n\tdefine(Number, { isNaN: polyfill }, {\n\t\tisNaN: function testIsNaN() {\n\t\t\treturn Number.isNaN !== polyfill;\n\t\t}\n\t});\n\treturn polyfill;\n};\n","'use strict';\n\nvar callBound = require('call-bind/callBound');\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n","'use strict';\n\nvar whichTypedArray = require('which-typed-array');\n\n/** @type {import('.')} */\nmodule.exports = function isTypedArray(value) {\n\treturn !!whichTypedArray(value);\n};\n","'use strict';\n\nvar numberIsNaN = function (value) {\n\treturn value !== value;\n};\n\nmodule.exports = function is(a, b) {\n\tif (a === 0 && b === 0) {\n\t\treturn 1 / a === 1 / b;\n\t}\n\tif (a === b) {\n\t\treturn true;\n\t}\n\tif (numberIsNaN(a) && numberIsNaN(b)) {\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n","'use strict';\n\nvar define = require('define-properties');\nvar callBind = require('call-bind');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = callBind(getPolyfill(), Object);\n\ndefine(polyfill, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\treturn typeof Object.is === 'function' ? Object.is : implementation;\n};\n","'use strict';\n\nvar getPolyfill = require('./polyfill');\nvar define = require('define-properties');\n\nmodule.exports = function shimObjectIs() {\n\tvar polyfill = getPolyfill();\n\tdefine(Object, { is: polyfill }, {\n\t\tis: function testObjectIs() {\n\t\t\treturn Object.is !== polyfill;\n\t\t}\n\t});\n\treturn polyfill;\n};\n","'use strict';\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = require('./isArguments'); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n","'use strict';\n\nvar slice = Array.prototype.slice;\nvar isArgs = require('./isArguments');\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : require('./implementation');\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n","'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n","'use strict';\n\n// modified from https://github.com/es-shims/es6-shim\nvar objectKeys = require('object-keys');\nvar hasSymbols = require('has-symbols/shams')();\nvar callBound = require('call-bind/callBound');\nvar toObject = Object;\nvar $push = callBound('Array.prototype.push');\nvar $propIsEnumerable = callBound('Object.prototype.propertyIsEnumerable');\nvar originalGetSymbols = hasSymbols ? Object.getOwnPropertySymbols : null;\n\n// eslint-disable-next-line no-unused-vars\nmodule.exports = function assign(target, source1) {\n\tif (target == null) { throw new TypeError('target must be an object'); }\n\tvar to = toObject(target); // step 1\n\tif (arguments.length === 1) {\n\t\treturn to; // step 2\n\t}\n\tfor (var s = 1; s < arguments.length; ++s) {\n\t\tvar from = toObject(arguments[s]); // step 3.a.i\n\n\t\t// step 3.a.ii:\n\t\tvar keys = objectKeys(from);\n\t\tvar getSymbols = hasSymbols && (Object.getOwnPropertySymbols || originalGetSymbols);\n\t\tif (getSymbols) {\n\t\t\tvar syms = getSymbols(from);\n\t\t\tfor (var j = 0; j < syms.length; ++j) {\n\t\t\t\tvar key = syms[j];\n\t\t\t\tif ($propIsEnumerable(from, key)) {\n\t\t\t\t\t$push(keys, key);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// step 3.a.iii:\n\t\tfor (var i = 0; i < keys.length; ++i) {\n\t\t\tvar nextKey = keys[i];\n\t\t\tif ($propIsEnumerable(from, nextKey)) { // step 3.a.iii.2\n\t\t\t\tvar propValue = from[nextKey]; // step 3.a.iii.2.a\n\t\t\t\tto[nextKey] = propValue; // step 3.a.iii.2.b\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to; // step 4\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nvar lacksProperEnumerationOrder = function () {\n\tif (!Object.assign) {\n\t\treturn false;\n\t}\n\t/*\n\t * v8, specifically in node 4.x, has a bug with incorrect property enumeration order\n\t * note: this does not detect the bug unless there's 20 characters\n\t */\n\tvar str = 'abcdefghijklmnopqrst';\n\tvar letters = str.split('');\n\tvar map = {};\n\tfor (var i = 0; i < letters.length; ++i) {\n\t\tmap[letters[i]] = letters[i];\n\t}\n\tvar obj = Object.assign({}, map);\n\tvar actual = '';\n\tfor (var k in obj) {\n\t\tactual += k;\n\t}\n\treturn str !== actual;\n};\n\nvar assignHasPendingExceptions = function () {\n\tif (!Object.assign || !Object.preventExtensions) {\n\t\treturn false;\n\t}\n\t/*\n\t * Firefox 37 still has \"pending exception\" logic in its Object.assign implementation,\n\t * which is 72% slower than our shim, and Firefox 40's native implementation.\n\t */\n\tvar thrower = Object.preventExtensions({ 1: 2 });\n\ttry {\n\t\tObject.assign(thrower, 'xy');\n\t} catch (e) {\n\t\treturn thrower[1] === 'y';\n\t}\n\treturn false;\n};\n\nmodule.exports = function getPolyfill() {\n\tif (!Object.assign) {\n\t\treturn implementation;\n\t}\n\tif (lacksProperEnumerationOrder()) {\n\t\treturn implementation;\n\t}\n\tif (assignHasPendingExceptions()) {\n\t\treturn implementation;\n\t}\n\treturn Object.assign;\n};\n","'use strict';\n\n\nvar TYPED_OK =  (typeof Uint8Array !== 'undefined') &&\n                (typeof Uint16Array !== 'undefined') &&\n                (typeof Int32Array !== 'undefined');\n\nfunction _has(obj, key) {\n  return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nexports.assign = function (obj /*from1, from2, from3, ...*/) {\n  var sources = Array.prototype.slice.call(arguments, 1);\n  while (sources.length) {\n    var source = sources.shift();\n    if (!source) { continue; }\n\n    if (typeof source !== 'object') {\n      throw new TypeError(source + 'must be non-object');\n    }\n\n    for (var p in source) {\n      if (_has(source, p)) {\n        obj[p] = source[p];\n      }\n    }\n  }\n\n  return obj;\n};\n\n\n// reduce buffer size, avoiding mem copy\nexports.shrinkBuf = function (buf, size) {\n  if (buf.length === size) { return buf; }\n  if (buf.subarray) { return buf.subarray(0, size); }\n  buf.length = size;\n  return buf;\n};\n\n\nvar fnTyped = {\n  arraySet: function (dest, src, src_offs, len, dest_offs) {\n    if (src.subarray && dest.subarray) {\n      dest.set(src.subarray(src_offs, src_offs + len), dest_offs);\n      return;\n    }\n    // Fallback to ordinary array\n    for (var i = 0; i < len; i++) {\n      dest[dest_offs + i] = src[src_offs + i];\n    }\n  },\n  // Join array of chunks to single array.\n  flattenChunks: function (chunks) {\n    var i, l, len, pos, chunk, result;\n\n    // calculate data length\n    len = 0;\n    for (i = 0, l = chunks.length; i < l; i++) {\n      len += chunks[i].length;\n    }\n\n    // join chunks\n    result = new Uint8Array(len);\n    pos = 0;\n    for (i = 0, l = chunks.length; i < l; i++) {\n      chunk = chunks[i];\n      result.set(chunk, pos);\n      pos += chunk.length;\n    }\n\n    return result;\n  }\n};\n\nvar fnUntyped = {\n  arraySet: function (dest, src, src_offs, len, dest_offs) {\n    for (var i = 0; i < len; i++) {\n      dest[dest_offs + i] = src[src_offs + i];\n    }\n  },\n  // Join array of chunks to single array.\n  flattenChunks: function (chunks) {\n    return [].concat.apply([], chunks);\n  }\n};\n\n\n// Enable/Disable typed arrays use, for testing\n//\nexports.setTyped = function (on) {\n  if (on) {\n    exports.Buf8  = Uint8Array;\n    exports.Buf16 = Uint16Array;\n    exports.Buf32 = Int32Array;\n    exports.assign(exports, fnTyped);\n  } else {\n    exports.Buf8  = Array;\n    exports.Buf16 = Array;\n    exports.Buf32 = Array;\n    exports.assign(exports, fnUntyped);\n  }\n};\n\nexports.setTyped(TYPED_OK);\n","'use strict';\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction adler32(adler, buf, len, pos) {\n  var s1 = (adler & 0xffff) |0,\n      s2 = ((adler >>> 16) & 0xffff) |0,\n      n = 0;\n\n  while (len !== 0) {\n    // Set limit ~ twice less than 5552, to keep\n    // s2 in 31-bits, because we force signed ints.\n    // in other case %= will fail.\n    n = len > 2000 ? 2000 : len;\n    len -= n;\n\n    do {\n      s1 = (s1 + buf[pos++]) |0;\n      s2 = (s2 + s1) |0;\n    } while (--n);\n\n    s1 %= 65521;\n    s2 %= 65521;\n  }\n\n  return (s1 | (s2 << 16)) |0;\n}\n\n\nmodule.exports = adler32;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n\n  /* Allowed flush values; see deflate() and inflate() below for details */\n  Z_NO_FLUSH:         0,\n  Z_PARTIAL_FLUSH:    1,\n  Z_SYNC_FLUSH:       2,\n  Z_FULL_FLUSH:       3,\n  Z_FINISH:           4,\n  Z_BLOCK:            5,\n  Z_TREES:            6,\n\n  /* Return codes for the compression/decompression functions. Negative values\n  * are errors, positive values are used for special but normal events.\n  */\n  Z_OK:               0,\n  Z_STREAM_END:       1,\n  Z_NEED_DICT:        2,\n  Z_ERRNO:           -1,\n  Z_STREAM_ERROR:    -2,\n  Z_DATA_ERROR:      -3,\n  //Z_MEM_ERROR:     -4,\n  Z_BUF_ERROR:       -5,\n  //Z_VERSION_ERROR: -6,\n\n  /* compression levels */\n  Z_NO_COMPRESSION:         0,\n  Z_BEST_SPEED:             1,\n  Z_BEST_COMPRESSION:       9,\n  Z_DEFAULT_COMPRESSION:   -1,\n\n\n  Z_FILTERED:               1,\n  Z_HUFFMAN_ONLY:           2,\n  Z_RLE:                    3,\n  Z_FIXED:                  4,\n  Z_DEFAULT_STRATEGY:       0,\n\n  /* Possible values of the data_type field (though see inflate()) */\n  Z_BINARY:                 0,\n  Z_TEXT:                   1,\n  //Z_ASCII:                1, // = Z_TEXT (deprecated)\n  Z_UNKNOWN:                2,\n\n  /* The deflate compression method */\n  Z_DEFLATED:               8\n  //Z_NULL:                 null // Use -1 or null inline, depending on var type\n};\n","'use strict';\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n  var c, table = [];\n\n  for (var n = 0; n < 256; n++) {\n    c = n;\n    for (var k = 0; k < 8; k++) {\n      c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n    }\n    table[n] = c;\n  }\n\n  return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n  var t = crcTable,\n      end = pos + len;\n\n  crc ^= -1;\n\n  for (var i = pos; i < end; i++) {\n    crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n  }\n\n  return (crc ^ (-1)); // >>> 0;\n}\n\n\nmodule.exports = crc32;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils   = require('../utils/common');\nvar trees   = require('./trees');\nvar adler32 = require('./adler32');\nvar crc32   = require('./crc32');\nvar msg     = require('./messages');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\nvar Z_NO_FLUSH      = 0;\nvar Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH    = 2;\nvar Z_FULL_FLUSH    = 3;\nvar Z_FINISH        = 4;\nvar Z_BLOCK         = 5;\n//var Z_TREES         = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\n//var Z_NEED_DICT     = 2;\n//var Z_ERRNO         = -1;\nvar Z_STREAM_ERROR  = -2;\nvar Z_DATA_ERROR    = -3;\n//var Z_MEM_ERROR     = -4;\nvar Z_BUF_ERROR     = -5;\n//var Z_VERSION_ERROR = -6;\n\n\n/* compression levels */\n//var Z_NO_COMPRESSION      = 0;\n//var Z_BEST_SPEED          = 1;\n//var Z_BEST_COMPRESSION    = 9;\nvar Z_DEFAULT_COMPRESSION = -1;\n\n\nvar Z_FILTERED            = 1;\nvar Z_HUFFMAN_ONLY        = 2;\nvar Z_RLE                 = 3;\nvar Z_FIXED               = 4;\nvar Z_DEFAULT_STRATEGY    = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\n//var Z_BINARY              = 0;\n//var Z_TEXT                = 1;\n//var Z_ASCII               = 1; // = Z_TEXT\nvar Z_UNKNOWN             = 2;\n\n\n/* The deflate compression method */\nvar Z_DEFLATED  = 8;\n\n/*============================================================================*/\n\n\nvar MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_MEM_LEVEL = 8;\n\n\nvar LENGTH_CODES  = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nvar LITERALS      = 256;\n/* number of literal bytes 0..255 */\nvar L_CODES       = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nvar D_CODES       = 30;\n/* number of distance codes */\nvar BL_CODES      = 19;\n/* number of codes used to transfer the bit lengths */\nvar HEAP_SIZE     = 2 * L_CODES + 1;\n/* maximum heap size */\nvar MAX_BITS  = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\nvar MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nvar PRESET_DICT = 0x20;\n\nvar INIT_STATE = 42;\nvar EXTRA_STATE = 69;\nvar NAME_STATE = 73;\nvar COMMENT_STATE = 91;\nvar HCRC_STATE = 103;\nvar BUSY_STATE = 113;\nvar FINISH_STATE = 666;\n\nvar BS_NEED_MORE      = 1; /* block not completed, need more input or more output */\nvar BS_BLOCK_DONE     = 2; /* block flush performed */\nvar BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nvar BS_FINISH_DONE    = 4; /* finish done, accept no more input or output */\n\nvar OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nfunction err(strm, errorCode) {\n  strm.msg = msg[errorCode];\n  return errorCode;\n}\n\nfunction rank(f) {\n  return ((f) << 1) - ((f) > 4 ? 9 : 0);\n}\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nfunction flush_pending(strm) {\n  var s = strm.state;\n\n  //_tr_flush_bits(s);\n  var len = s.pending;\n  if (len > strm.avail_out) {\n    len = strm.avail_out;\n  }\n  if (len === 0) { return; }\n\n  utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);\n  strm.next_out += len;\n  s.pending_out += len;\n  strm.total_out += len;\n  strm.avail_out -= len;\n  s.pending -= len;\n  if (s.pending === 0) {\n    s.pending_out = 0;\n  }\n}\n\n\nfunction flush_block_only(s, last) {\n  trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n  s.block_start = s.strstart;\n  flush_pending(s.strm);\n}\n\n\nfunction put_byte(s, b) {\n  s.pending_buf[s.pending++] = b;\n}\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nfunction putShortMSB(s, b) {\n//  put_byte(s, (Byte)(b >> 8));\n//  put_byte(s, (Byte)(b & 0xff));\n  s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n  s.pending_buf[s.pending++] = b & 0xff;\n}\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read.  All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nfunction read_buf(strm, buf, start, size) {\n  var len = strm.avail_in;\n\n  if (len > size) { len = size; }\n  if (len === 0) { return 0; }\n\n  strm.avail_in -= len;\n\n  // zmemcpy(buf, strm->next_in, len);\n  utils.arraySet(buf, strm.input, strm.next_in, len, start);\n  if (strm.state.wrap === 1) {\n    strm.adler = adler32(strm.adler, buf, len, start);\n  }\n\n  else if (strm.state.wrap === 2) {\n    strm.adler = crc32(strm.adler, buf, len, start);\n  }\n\n  strm.next_in += len;\n  strm.total_in += len;\n\n  return len;\n}\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nfunction longest_match(s, cur_match) {\n  var chain_length = s.max_chain_length;      /* max hash chain length */\n  var scan = s.strstart; /* current string */\n  var match;                       /* matched string */\n  var len;                           /* length of current match */\n  var best_len = s.prev_length;              /* best match length so far */\n  var nice_match = s.nice_match;             /* stop if match long enough */\n  var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n      s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n  var _win = s.window; // shortcut\n\n  var wmask = s.w_mask;\n  var prev  = s.prev;\n\n  /* Stop when cur_match becomes <= limit. To simplify the code,\n   * we prevent matches with the string of window index 0.\n   */\n\n  var strend = s.strstart + MAX_MATCH;\n  var scan_end1  = _win[scan + best_len - 1];\n  var scan_end   = _win[scan + best_len];\n\n  /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n   * It is easy to get rid of this optimization if necessary.\n   */\n  // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n  /* Do not waste too much time if we already have a good match: */\n  if (s.prev_length >= s.good_match) {\n    chain_length >>= 2;\n  }\n  /* Do not look for matches beyond the end of the input. This is necessary\n   * to make deflate deterministic.\n   */\n  if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n  // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n  do {\n    // Assert(cur_match < s->strstart, \"no future\");\n    match = cur_match;\n\n    /* Skip to next match if the match length cannot increase\n     * or if the match length is less than 2.  Note that the checks below\n     * for insufficient lookahead only occur occasionally for performance\n     * reasons.  Therefore uninitialized memory will be accessed, and\n     * conditional jumps will be made that depend on those values.\n     * However the length of the match is limited to the lookahead, so\n     * the output of deflate is not affected by the uninitialized values.\n     */\n\n    if (_win[match + best_len]     !== scan_end  ||\n        _win[match + best_len - 1] !== scan_end1 ||\n        _win[match]                !== _win[scan] ||\n        _win[++match]              !== _win[scan + 1]) {\n      continue;\n    }\n\n    /* The check at best_len-1 can be removed because it will be made\n     * again later. (This heuristic is not always a win.)\n     * It is not necessary to compare scan[2] and match[2] since they\n     * are always equal when the other bytes match, given that\n     * the hash keys are equal and that HASH_BITS >= 8.\n     */\n    scan += 2;\n    match++;\n    // Assert(*scan == *match, \"match[2]?\");\n\n    /* We check for insufficient lookahead only every 8th comparison;\n     * the 256th check will be made at strstart+258.\n     */\n    do {\n      /*jshint noempty:false*/\n    } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             scan < strend);\n\n    // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n    len = MAX_MATCH - (strend - scan);\n    scan = strend - MAX_MATCH;\n\n    if (len > best_len) {\n      s.match_start = cur_match;\n      best_len = len;\n      if (len >= nice_match) {\n        break;\n      }\n      scan_end1  = _win[scan + best_len - 1];\n      scan_end   = _win[scan + best_len];\n    }\n  } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n  if (best_len <= s.lookahead) {\n    return best_len;\n  }\n  return s.lookahead;\n}\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n *    At least one byte has been read, or avail_in == 0; reads are\n *    performed for at least two bytes (required for the zip translate_eol\n *    option -- not supported here).\n */\nfunction fill_window(s) {\n  var _w_size = s.w_size;\n  var p, n, m, more, str;\n\n  //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n  do {\n    more = s.window_size - s.lookahead - s.strstart;\n\n    // JS ints have 32 bit, block below not needed\n    /* Deal with !@#$% 64K limit: */\n    //if (sizeof(int) <= 2) {\n    //    if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n    //        more = wsize;\n    //\n    //  } else if (more == (unsigned)(-1)) {\n    //        /* Very unlikely, but possible on 16 bit machine if\n    //         * strstart == 0 && lookahead == 1 (input done a byte at time)\n    //         */\n    //        more--;\n    //    }\n    //}\n\n\n    /* If the window is almost full and there is insufficient lookahead,\n     * move the upper half to the lower one to make room in the upper half.\n     */\n    if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n      utils.arraySet(s.window, s.window, _w_size, _w_size, 0);\n      s.match_start -= _w_size;\n      s.strstart -= _w_size;\n      /* we now have strstart >= MAX_DIST */\n      s.block_start -= _w_size;\n\n      /* Slide the hash table (could be avoided with 32 bit values\n       at the expense of memory usage). We slide even when level == 0\n       to keep the hash table consistent if we switch back to level > 0\n       later. (Using level 0 permanently is not an optimal usage of\n       zlib, so we don't care about this pathological case.)\n       */\n\n      n = s.hash_size;\n      p = n;\n      do {\n        m = s.head[--p];\n        s.head[p] = (m >= _w_size ? m - _w_size : 0);\n      } while (--n);\n\n      n = _w_size;\n      p = n;\n      do {\n        m = s.prev[--p];\n        s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n        /* If n is not on any hash chain, prev[n] is garbage but\n         * its value will never be used.\n         */\n      } while (--n);\n\n      more += _w_size;\n    }\n    if (s.strm.avail_in === 0) {\n      break;\n    }\n\n    /* If there was no sliding:\n     *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n     *    more == window_size - lookahead - strstart\n     * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n     * => more >= window_size - 2*WSIZE + 2\n     * In the BIG_MEM or MMAP case (not yet supported),\n     *   window_size == input_size + MIN_LOOKAHEAD  &&\n     *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n     * Otherwise, window_size == 2*WSIZE so more >= 2.\n     * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n     */\n    //Assert(more >= 2, \"more < 2\");\n    n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n    s.lookahead += n;\n\n    /* Initialize the hash value now that we have some input: */\n    if (s.lookahead + s.insert >= MIN_MATCH) {\n      str = s.strstart - s.insert;\n      s.ins_h = s.window[str];\n\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;\n//#if MIN_MATCH != 3\n//        Call update_hash() MIN_MATCH-3 more times\n//#endif\n      while (s.insert) {\n        /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n        s.prev[str & s.w_mask] = s.head[s.ins_h];\n        s.head[s.ins_h] = str;\n        str++;\n        s.insert--;\n        if (s.lookahead + s.insert < MIN_MATCH) {\n          break;\n        }\n      }\n    }\n    /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n     * but this is not important since only literal bytes will be emitted.\n     */\n\n  } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n  /* If the WIN_INIT bytes after the end of the current data have never been\n   * written, then zero those bytes in order to avoid memory check reports of\n   * the use of uninitialized (or uninitialised as Julian writes) bytes by\n   * the longest match routines.  Update the high water mark for the next\n   * time through here.  WIN_INIT is set to MAX_MATCH since the longest match\n   * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n   */\n//  if (s.high_water < s.window_size) {\n//    var curr = s.strstart + s.lookahead;\n//    var init = 0;\n//\n//    if (s.high_water < curr) {\n//      /* Previous high water mark below current data -- zero WIN_INIT\n//       * bytes or up to end of window, whichever is less.\n//       */\n//      init = s.window_size - curr;\n//      if (init > WIN_INIT)\n//        init = WIN_INIT;\n//      zmemzero(s->window + curr, (unsigned)init);\n//      s->high_water = curr + init;\n//    }\n//    else if (s->high_water < (ulg)curr + WIN_INIT) {\n//      /* High water mark at or above current data, but below current data\n//       * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n//       * to end of window, whichever is less.\n//       */\n//      init = (ulg)curr + WIN_INIT - s->high_water;\n//      if (init > s->window_size - s->high_water)\n//        init = s->window_size - s->high_water;\n//      zmemzero(s->window + s->high_water, (unsigned)init);\n//      s->high_water += init;\n//    }\n//  }\n//\n//  Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n//    \"not enough room for search\");\n}\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nfunction deflate_stored(s, flush) {\n  /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n   * to pending_buf_size, and each stored block has a 5 byte header:\n   */\n  var max_block_size = 0xffff;\n\n  if (max_block_size > s.pending_buf_size - 5) {\n    max_block_size = s.pending_buf_size - 5;\n  }\n\n  /* Copy as much as possible from input to output: */\n  for (;;) {\n    /* Fill the window as much as possible: */\n    if (s.lookahead <= 1) {\n\n      //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n      //  s->block_start >= (long)s->w_size, \"slide too late\");\n//      if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n//        s.block_start >= s.w_size)) {\n//        throw  new Error(\"slide too late\");\n//      }\n\n      fill_window(s);\n      if (s.lookahead === 0 && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n\n      if (s.lookahead === 0) {\n        break;\n      }\n      /* flush the current block */\n    }\n    //Assert(s->block_start >= 0L, \"block gone\");\n//    if (s.block_start < 0) throw new Error(\"block gone\");\n\n    s.strstart += s.lookahead;\n    s.lookahead = 0;\n\n    /* Emit a stored block if pending_buf will be full: */\n    var max_start = s.block_start + max_block_size;\n\n    if (s.strstart === 0 || s.strstart >= max_start) {\n      /* strstart == 0 is possible when wraparound on 16-bit machine */\n      s.lookahead = s.strstart - max_start;\n      s.strstart = max_start;\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n\n\n    }\n    /* Flush if we may have to slide, otherwise block_start may become\n     * negative and the data will be gone:\n     */\n    if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n\n  s.insert = 0;\n\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n\n  if (s.strstart > s.block_start) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n\n  return BS_NEED_MORE;\n}\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nfunction deflate_fast(s, flush) {\n  var hash_head;        /* head of the hash chain */\n  var bflush;           /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) {\n        break; /* flush the current block */\n      }\n    }\n\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n    hash_head = 0/*NIL*/;\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n\n    /* Find the longest match, discarding those <= prev_length.\n     * At this point we have always match_length < MIN_MATCH\n     */\n    if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n    }\n    if (s.match_length >= MIN_MATCH) {\n      // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n      /*** _tr_tally_dist(s, s.strstart - s.match_start,\n                     s.match_length - MIN_MATCH, bflush); ***/\n      bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n      s.lookahead -= s.match_length;\n\n      /* Insert new strings in the hash table only if the match length\n       * is not too large. This saves time but degrades compression.\n       */\n      if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n        s.match_length--; /* string at strstart already in table */\n        do {\n          s.strstart++;\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n          /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n           * always MIN_MATCH bytes ahead.\n           */\n        } while (--s.match_length !== 0);\n        s.strstart++;\n      } else\n      {\n        s.strstart += s.match_length;\n        s.match_length = 0;\n        s.ins_h = s.window[s.strstart];\n        /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;\n\n//#if MIN_MATCH != 3\n//                Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n        /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n         * matter since it will be recomputed at next deflate call.\n         */\n      }\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n      s.lookahead--;\n      s.strstart++;\n    }\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nfunction deflate_slow(s, flush) {\n  var hash_head;          /* head of hash chain */\n  var bflush;              /* set if current block must be flushed */\n\n  var max_insert;\n\n  /* Process the input block. */\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) { break; } /* flush the current block */\n    }\n\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n    hash_head = 0/*NIL*/;\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n\n    /* Find the longest match, discarding those <= prev_length.\n     */\n    s.prev_length = s.match_length;\n    s.prev_match = s.match_start;\n    s.match_length = MIN_MATCH - 1;\n\n    if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n        s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n\n      if (s.match_length <= 5 &&\n         (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n        /* If prev_match is also MIN_MATCH, match_start is garbage\n         * but we will ignore the current match anyway.\n         */\n        s.match_length = MIN_MATCH - 1;\n      }\n    }\n    /* If there was a match at the previous step and the current\n     * match is not better, output the previous match:\n     */\n    if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n      max_insert = s.strstart + s.lookahead - MIN_MATCH;\n      /* Do not insert strings in hash table beyond this. */\n\n      //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n      /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n                     s.prev_length - MIN_MATCH, bflush);***/\n      bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n      /* Insert in hash table all strings up to the end of the match.\n       * strstart-1 and strstart are already inserted. If there is not\n       * enough lookahead, the last two strings are not inserted in\n       * the hash table.\n       */\n      s.lookahead -= s.prev_length - 1;\n      s.prev_length -= 2;\n      do {\n        if (++s.strstart <= max_insert) {\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n        }\n      } while (--s.prev_length !== 0);\n      s.match_available = 0;\n      s.match_length = MIN_MATCH - 1;\n      s.strstart++;\n\n      if (bflush) {\n        /*** FLUSH_BLOCK(s, 0); ***/\n        flush_block_only(s, false);\n        if (s.strm.avail_out === 0) {\n          return BS_NEED_MORE;\n        }\n        /***/\n      }\n\n    } else if (s.match_available) {\n      /* If there was no match at the previous position, output a\n       * single literal. If there was a match but the current match\n       * is longer, truncate the previous match to a single literal.\n       */\n      //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n      /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n      if (bflush) {\n        /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n        flush_block_only(s, false);\n        /***/\n      }\n      s.strstart++;\n      s.lookahead--;\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n    } else {\n      /* There is no previous match to compare with, wait for\n       * the next step to decide.\n       */\n      s.match_available = 1;\n      s.strstart++;\n      s.lookahead--;\n    }\n  }\n  //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n  if (s.match_available) {\n    //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n    /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n    bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n    s.match_available = 0;\n  }\n  s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n\n  return BS_BLOCK_DONE;\n}\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one.  Do not maintain a hash table.  (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nfunction deflate_rle(s, flush) {\n  var bflush;            /* set if current block must be flushed */\n  var prev;              /* byte at distance one to match */\n  var scan, strend;      /* scan goes up to strend for length of run */\n\n  var _win = s.window;\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the longest run, plus one for the unrolled loop.\n     */\n    if (s.lookahead <= MAX_MATCH) {\n      fill_window(s);\n      if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) { break; } /* flush the current block */\n    }\n\n    /* See how many times the previous byte repeats */\n    s.match_length = 0;\n    if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n      scan = s.strstart - 1;\n      prev = _win[scan];\n      if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n        strend = s.strstart + MAX_MATCH;\n        do {\n          /*jshint noempty:false*/\n        } while (prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 scan < strend);\n        s.match_length = MAX_MATCH - (strend - scan);\n        if (s.match_length > s.lookahead) {\n          s.match_length = s.lookahead;\n        }\n      }\n      //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n    }\n\n    /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n    if (s.match_length >= MIN_MATCH) {\n      //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n      /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n      bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n      s.lookahead -= s.match_length;\n      s.strstart += s.match_length;\n      s.match_length = 0;\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n      s.lookahead--;\n      s.strstart++;\n    }\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = 0;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nfunction deflate_huff(s, flush) {\n  var bflush;             /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we have a literal to write. */\n    if (s.lookahead === 0) {\n      fill_window(s);\n      if (s.lookahead === 0) {\n        if (flush === Z_NO_FLUSH) {\n          return BS_NEED_MORE;\n        }\n        break;      /* flush the current block */\n      }\n    }\n\n    /* Output a literal byte */\n    s.match_length = 0;\n    //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n    /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n    bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n    s.lookahead--;\n    s.strstart++;\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = 0;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n  this.good_length = good_length;\n  this.max_lazy = max_lazy;\n  this.nice_length = nice_length;\n  this.max_chain = max_chain;\n  this.func = func;\n}\n\nvar configuration_table;\n\nconfiguration_table = [\n  /*      good lazy nice chain */\n  new Config(0, 0, 0, 0, deflate_stored),          /* 0 store only */\n  new Config(4, 4, 8, 4, deflate_fast),            /* 1 max speed, no lazy matches */\n  new Config(4, 5, 16, 8, deflate_fast),           /* 2 */\n  new Config(4, 6, 32, 32, deflate_fast),          /* 3 */\n\n  new Config(4, 4, 16, 16, deflate_slow),          /* 4 lazy matches */\n  new Config(8, 16, 32, 32, deflate_slow),         /* 5 */\n  new Config(8, 16, 128, 128, deflate_slow),       /* 6 */\n  new Config(8, 32, 128, 256, deflate_slow),       /* 7 */\n  new Config(32, 128, 258, 1024, deflate_slow),    /* 8 */\n  new Config(32, 258, 258, 4096, deflate_slow)     /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nfunction lm_init(s) {\n  s.window_size = 2 * s.w_size;\n\n  /*** CLEAR_HASH(s); ***/\n  zero(s.head); // Fill with NIL (= 0);\n\n  /* Set the default configuration parameters:\n   */\n  s.max_lazy_match = configuration_table[s.level].max_lazy;\n  s.good_match = configuration_table[s.level].good_length;\n  s.nice_match = configuration_table[s.level].nice_length;\n  s.max_chain_length = configuration_table[s.level].max_chain;\n\n  s.strstart = 0;\n  s.block_start = 0;\n  s.lookahead = 0;\n  s.insert = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  s.ins_h = 0;\n}\n\n\nfunction DeflateState() {\n  this.strm = null;            /* pointer back to this zlib stream */\n  this.status = 0;            /* as the name implies */\n  this.pending_buf = null;      /* output still pending */\n  this.pending_buf_size = 0;  /* size of pending_buf */\n  this.pending_out = 0;       /* next pending byte to output to the stream */\n  this.pending = 0;           /* nb of bytes in the pending buffer */\n  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */\n  this.gzhead = null;         /* gzip header information to write */\n  this.gzindex = 0;           /* where in extra, name, or comment */\n  this.method = Z_DEFLATED; /* can only be DEFLATED */\n  this.last_flush = -1;   /* value of flush param for previous deflate call */\n\n  this.w_size = 0;  /* LZ77 window size (32K by default) */\n  this.w_bits = 0;  /* log2(w_size)  (8..16) */\n  this.w_mask = 0;  /* w_size - 1 */\n\n  this.window = null;\n  /* Sliding window. Input bytes are read into the second half of the window,\n   * and move to the first half later to keep a dictionary of at least wSize\n   * bytes. With this organization, matches are limited to a distance of\n   * wSize-MAX_MATCH bytes, but this ensures that IO is always\n   * performed with a length multiple of the block size.\n   */\n\n  this.window_size = 0;\n  /* Actual size of window: 2*wSize, except when the user input buffer\n   * is directly used as sliding window.\n   */\n\n  this.prev = null;\n  /* Link to older string with same hash index. To limit the size of this\n   * array to 64K, this link is maintained only for the last 32K strings.\n   * An index in this array is thus a window index modulo 32K.\n   */\n\n  this.head = null;   /* Heads of the hash chains or NIL. */\n\n  this.ins_h = 0;       /* hash index of string to be inserted */\n  this.hash_size = 0;   /* number of elements in hash table */\n  this.hash_bits = 0;   /* log2(hash_size) */\n  this.hash_mask = 0;   /* hash_size-1 */\n\n  this.hash_shift = 0;\n  /* Number of bits by which ins_h must be shifted at each input\n   * step. It must be such that after MIN_MATCH steps, the oldest\n   * byte no longer takes part in the hash key, that is:\n   *   hash_shift * MIN_MATCH >= hash_bits\n   */\n\n  this.block_start = 0;\n  /* Window position at the beginning of the current output block. Gets\n   * negative when the window is moved backwards.\n   */\n\n  this.match_length = 0;      /* length of best match */\n  this.prev_match = 0;        /* previous match */\n  this.match_available = 0;   /* set if previous match exists */\n  this.strstart = 0;          /* start of string to insert */\n  this.match_start = 0;       /* start of matching string */\n  this.lookahead = 0;         /* number of valid bytes ahead in window */\n\n  this.prev_length = 0;\n  /* Length of the best match at previous step. Matches not greater than this\n   * are discarded. This is used in the lazy match evaluation.\n   */\n\n  this.max_chain_length = 0;\n  /* To speed up deflation, hash chains are never searched beyond this\n   * length.  A higher limit improves compression ratio but degrades the\n   * speed.\n   */\n\n  this.max_lazy_match = 0;\n  /* Attempt to find a better match only when the current match is strictly\n   * smaller than this value. This mechanism is used only for compression\n   * levels >= 4.\n   */\n  // That's alias to max_lazy_match, don't use directly\n  //this.max_insert_length = 0;\n  /* Insert new strings in the hash table only if the match length is not\n   * greater than this length. This saves time but degrades compression.\n   * max_insert_length is used only for compression levels <= 3.\n   */\n\n  this.level = 0;     /* compression level (1..9) */\n  this.strategy = 0;  /* favor or force Huffman coding*/\n\n  this.good_match = 0;\n  /* Use a faster search when the previous match is longer than this */\n\n  this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n              /* used by trees.c: */\n\n  /* Didn't use ct_data typedef below to suppress compiler warning */\n\n  // struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */\n  // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n  // struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */\n\n  // Use flat array of DOUBLE size, with interleaved fata,\n  // because JS does not support effective\n  this.dyn_ltree  = new utils.Buf16(HEAP_SIZE * 2);\n  this.dyn_dtree  = new utils.Buf16((2 * D_CODES + 1) * 2);\n  this.bl_tree    = new utils.Buf16((2 * BL_CODES + 1) * 2);\n  zero(this.dyn_ltree);\n  zero(this.dyn_dtree);\n  zero(this.bl_tree);\n\n  this.l_desc   = null;         /* desc. for literal tree */\n  this.d_desc   = null;         /* desc. for distance tree */\n  this.bl_desc  = null;         /* desc. for bit length tree */\n\n  //ush bl_count[MAX_BITS+1];\n  this.bl_count = new utils.Buf16(MAX_BITS + 1);\n  /* number of codes at each bit length for an optimal tree */\n\n  //int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */\n  this.heap = new utils.Buf16(2 * L_CODES + 1);  /* heap used to build the Huffman trees */\n  zero(this.heap);\n\n  this.heap_len = 0;               /* number of elements in the heap */\n  this.heap_max = 0;               /* element of largest frequency */\n  /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n   * The same heap array is used to build all trees.\n   */\n\n  this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n  zero(this.depth);\n  /* Depth of each subtree used as tie breaker for trees of equal frequency\n   */\n\n  this.l_buf = 0;          /* buffer index for literals or lengths */\n\n  this.lit_bufsize = 0;\n  /* Size of match buffer for literals/lengths.  There are 4 reasons for\n   * limiting lit_bufsize to 64K:\n   *   - frequencies can be kept in 16 bit counters\n   *   - if compression is not successful for the first block, all input\n   *     data is still in the window so we can still emit a stored block even\n   *     when input comes from standard input.  (This can also be done for\n   *     all blocks if lit_bufsize is not greater than 32K.)\n   *   - if compression is not successful for a file smaller than 64K, we can\n   *     even emit a stored file instead of a stored block (saving 5 bytes).\n   *     This is applicable only for zip (not gzip or zlib).\n   *   - creating new Huffman trees less frequently may not provide fast\n   *     adaptation to changes in the input data statistics. (Take for\n   *     example a binary file with poorly compressible code followed by\n   *     a highly compressible string table.) Smaller buffer sizes give\n   *     fast adaptation but have of course the overhead of transmitting\n   *     trees more frequently.\n   *   - I can't count above 4\n   */\n\n  this.last_lit = 0;      /* running index in l_buf */\n\n  this.d_buf = 0;\n  /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n   * the same number of elements. To use different lengths, an extra flag\n   * array would be necessary.\n   */\n\n  this.opt_len = 0;       /* bit length of current block with optimal trees */\n  this.static_len = 0;    /* bit length of current block with static trees */\n  this.matches = 0;       /* number of string matches in current block */\n  this.insert = 0;        /* bytes at end of window left to insert */\n\n\n  this.bi_buf = 0;\n  /* Output buffer. bits are inserted starting at the bottom (least\n   * significant bits).\n   */\n  this.bi_valid = 0;\n  /* Number of valid bits in bi_buf.  All bits above the last valid bit\n   * are always zero.\n   */\n\n  // Used for window memory init. We safely ignore it for JS. That makes\n  // sense only for pointers and memory check tools.\n  //this.high_water = 0;\n  /* High water mark offset in window for initialized bytes -- bytes above\n   * this are set to zero in order to avoid memory check warnings when\n   * longest match routines access bytes past the input.  This is then\n   * updated to the new high water mark.\n   */\n}\n\n\nfunction deflateResetKeep(strm) {\n  var s;\n\n  if (!strm || !strm.state) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n  strm.total_in = strm.total_out = 0;\n  strm.data_type = Z_UNKNOWN;\n\n  s = strm.state;\n  s.pending = 0;\n  s.pending_out = 0;\n\n  if (s.wrap < 0) {\n    s.wrap = -s.wrap;\n    /* was made negative by deflate(..., Z_FINISH); */\n  }\n  s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n  strm.adler = (s.wrap === 2) ?\n    0  // crc32(0, Z_NULL, 0)\n  :\n    1; // adler32(0, Z_NULL, 0)\n  s.last_flush = Z_NO_FLUSH;\n  trees._tr_init(s);\n  return Z_OK;\n}\n\n\nfunction deflateReset(strm) {\n  var ret = deflateResetKeep(strm);\n  if (ret === Z_OK) {\n    lm_init(strm.state);\n  }\n  return ret;\n}\n\n\nfunction deflateSetHeader(strm, head) {\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }\n  strm.state.gzhead = head;\n  return Z_OK;\n}\n\n\nfunction deflateInit2(strm, level, method, windowBits, memLevel, strategy) {\n  if (!strm) { // === Z_NULL\n    return Z_STREAM_ERROR;\n  }\n  var wrap = 1;\n\n  if (level === Z_DEFAULT_COMPRESSION) {\n    level = 6;\n  }\n\n  if (windowBits < 0) { /* suppress zlib wrapper */\n    wrap = 0;\n    windowBits = -windowBits;\n  }\n\n  else if (windowBits > 15) {\n    wrap = 2;           /* write gzip wrapper instead */\n    windowBits -= 16;\n  }\n\n\n  if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n    windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n    strategy < 0 || strategy > Z_FIXED) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n\n  if (windowBits === 8) {\n    windowBits = 9;\n  }\n  /* until 256-byte window bug fixed */\n\n  var s = new DeflateState();\n\n  strm.state = s;\n  s.strm = strm;\n\n  s.wrap = wrap;\n  s.gzhead = null;\n  s.w_bits = windowBits;\n  s.w_size = 1 << s.w_bits;\n  s.w_mask = s.w_size - 1;\n\n  s.hash_bits = memLevel + 7;\n  s.hash_size = 1 << s.hash_bits;\n  s.hash_mask = s.hash_size - 1;\n  s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n  s.window = new utils.Buf8(s.w_size * 2);\n  s.head = new utils.Buf16(s.hash_size);\n  s.prev = new utils.Buf16(s.w_size);\n\n  // Don't need mem init magic for JS.\n  //s.high_water = 0;  /* nothing written to s->window yet */\n\n  s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n  s.pending_buf_size = s.lit_bufsize * 4;\n\n  //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n  //s->pending_buf = (uchf *) overlay;\n  s.pending_buf = new utils.Buf8(s.pending_buf_size);\n\n  // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n  //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n  s.d_buf = 1 * s.lit_bufsize;\n\n  //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n  s.l_buf = (1 + 2) * s.lit_bufsize;\n\n  s.level = level;\n  s.strategy = strategy;\n  s.method = method;\n\n  return deflateReset(strm);\n}\n\nfunction deflateInit(strm, level) {\n  return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n}\n\n\nfunction deflate(strm, flush) {\n  var old_flush, s;\n  var beg, val; // for gzip header write only\n\n  if (!strm || !strm.state ||\n    flush > Z_BLOCK || flush < 0) {\n    return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n  }\n\n  s = strm.state;\n\n  if (!strm.output ||\n      (!strm.input && strm.avail_in !== 0) ||\n      (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n    return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n  }\n\n  s.strm = strm; /* just in case */\n  old_flush = s.last_flush;\n  s.last_flush = flush;\n\n  /* Write the header */\n  if (s.status === INIT_STATE) {\n\n    if (s.wrap === 2) { // GZIP header\n      strm.adler = 0;  //crc32(0L, Z_NULL, 0);\n      put_byte(s, 31);\n      put_byte(s, 139);\n      put_byte(s, 8);\n      if (!s.gzhead) { // s->gzhead == Z_NULL\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, s.level === 9 ? 2 :\n                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n                     4 : 0));\n        put_byte(s, OS_CODE);\n        s.status = BUSY_STATE;\n      }\n      else {\n        put_byte(s, (s.gzhead.text ? 1 : 0) +\n                    (s.gzhead.hcrc ? 2 : 0) +\n                    (!s.gzhead.extra ? 0 : 4) +\n                    (!s.gzhead.name ? 0 : 8) +\n                    (!s.gzhead.comment ? 0 : 16)\n        );\n        put_byte(s, s.gzhead.time & 0xff);\n        put_byte(s, (s.gzhead.time >> 8) & 0xff);\n        put_byte(s, (s.gzhead.time >> 16) & 0xff);\n        put_byte(s, (s.gzhead.time >> 24) & 0xff);\n        put_byte(s, s.level === 9 ? 2 :\n                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n                     4 : 0));\n        put_byte(s, s.gzhead.os & 0xff);\n        if (s.gzhead.extra && s.gzhead.extra.length) {\n          put_byte(s, s.gzhead.extra.length & 0xff);\n          put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n        }\n        if (s.gzhead.hcrc) {\n          strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n        }\n        s.gzindex = 0;\n        s.status = EXTRA_STATE;\n      }\n    }\n    else // DEFLATE header\n    {\n      var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n      var level_flags = -1;\n\n      if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n        level_flags = 0;\n      } else if (s.level < 6) {\n        level_flags = 1;\n      } else if (s.level === 6) {\n        level_flags = 2;\n      } else {\n        level_flags = 3;\n      }\n      header |= (level_flags << 6);\n      if (s.strstart !== 0) { header |= PRESET_DICT; }\n      header += 31 - (header % 31);\n\n      s.status = BUSY_STATE;\n      putShortMSB(s, header);\n\n      /* Save the adler32 of the preset dictionary: */\n      if (s.strstart !== 0) {\n        putShortMSB(s, strm.adler >>> 16);\n        putShortMSB(s, strm.adler & 0xffff);\n      }\n      strm.adler = 1; // adler32(0L, Z_NULL, 0);\n    }\n  }\n\n//#ifdef GZIP\n  if (s.status === EXTRA_STATE) {\n    if (s.gzhead.extra/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n\n      while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            break;\n          }\n        }\n        put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n        s.gzindex++;\n      }\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (s.gzindex === s.gzhead.extra.length) {\n        s.gzindex = 0;\n        s.status = NAME_STATE;\n      }\n    }\n    else {\n      s.status = NAME_STATE;\n    }\n  }\n  if (s.status === NAME_STATE) {\n    if (s.gzhead.name/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n      //int val;\n\n      do {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            val = 1;\n            break;\n          }\n        }\n        // JS specific: little magic to add zero terminator to end of string\n        if (s.gzindex < s.gzhead.name.length) {\n          val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n        } else {\n          val = 0;\n        }\n        put_byte(s, val);\n      } while (val !== 0);\n\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (val === 0) {\n        s.gzindex = 0;\n        s.status = COMMENT_STATE;\n      }\n    }\n    else {\n      s.status = COMMENT_STATE;\n    }\n  }\n  if (s.status === COMMENT_STATE) {\n    if (s.gzhead.comment/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n      //int val;\n\n      do {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            val = 1;\n            break;\n          }\n        }\n        // JS specific: little magic to add zero terminator to end of string\n        if (s.gzindex < s.gzhead.comment.length) {\n          val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n        } else {\n          val = 0;\n        }\n        put_byte(s, val);\n      } while (val !== 0);\n\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (val === 0) {\n        s.status = HCRC_STATE;\n      }\n    }\n    else {\n      s.status = HCRC_STATE;\n    }\n  }\n  if (s.status === HCRC_STATE) {\n    if (s.gzhead.hcrc) {\n      if (s.pending + 2 > s.pending_buf_size) {\n        flush_pending(strm);\n      }\n      if (s.pending + 2 <= s.pending_buf_size) {\n        put_byte(s, strm.adler & 0xff);\n        put_byte(s, (strm.adler >> 8) & 0xff);\n        strm.adler = 0; //crc32(0L, Z_NULL, 0);\n        s.status = BUSY_STATE;\n      }\n    }\n    else {\n      s.status = BUSY_STATE;\n    }\n  }\n//#endif\n\n  /* Flush as much pending output as possible */\n  if (s.pending !== 0) {\n    flush_pending(strm);\n    if (strm.avail_out === 0) {\n      /* Since avail_out is 0, deflate will be called again with\n       * more output space, but possibly with both pending and\n       * avail_in equal to zero. There won't be anything to do,\n       * but this is not an error situation so make sure we\n       * return OK instead of BUF_ERROR at next call of deflate:\n       */\n      s.last_flush = -1;\n      return Z_OK;\n    }\n\n    /* Make sure there is something to do and avoid duplicate consecutive\n     * flushes. For repeated and useless calls with Z_FINISH, we keep\n     * returning Z_STREAM_END instead of Z_BUF_ERROR.\n     */\n  } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n    flush !== Z_FINISH) {\n    return err(strm, Z_BUF_ERROR);\n  }\n\n  /* User must not provide more input after the first FINISH: */\n  if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n    return err(strm, Z_BUF_ERROR);\n  }\n\n  /* Start a new block or continue the current one.\n   */\n  if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n    (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n    var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n      (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n        configuration_table[s.level].func(s, flush));\n\n    if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n      s.status = FINISH_STATE;\n    }\n    if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n      if (strm.avail_out === 0) {\n        s.last_flush = -1;\n        /* avoid BUF_ERROR next call, see above */\n      }\n      return Z_OK;\n      /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n       * of deflate should use the same flush parameter to make sure\n       * that the flush is complete. So we don't have to output an\n       * empty block here, this will be done at next call. This also\n       * ensures that for a very small output buffer, we emit at most\n       * one empty block.\n       */\n    }\n    if (bstate === BS_BLOCK_DONE) {\n      if (flush === Z_PARTIAL_FLUSH) {\n        trees._tr_align(s);\n      }\n      else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n        trees._tr_stored_block(s, 0, 0, false);\n        /* For a full flush, this empty block will be recognized\n         * as a special marker by inflate_sync().\n         */\n        if (flush === Z_FULL_FLUSH) {\n          /*** CLEAR_HASH(s); ***/             /* forget history */\n          zero(s.head); // Fill with NIL (= 0);\n\n          if (s.lookahead === 0) {\n            s.strstart = 0;\n            s.block_start = 0;\n            s.insert = 0;\n          }\n        }\n      }\n      flush_pending(strm);\n      if (strm.avail_out === 0) {\n        s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n        return Z_OK;\n      }\n    }\n  }\n  //Assert(strm->avail_out > 0, \"bug2\");\n  //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n  if (flush !== Z_FINISH) { return Z_OK; }\n  if (s.wrap <= 0) { return Z_STREAM_END; }\n\n  /* Write the trailer */\n  if (s.wrap === 2) {\n    put_byte(s, strm.adler & 0xff);\n    put_byte(s, (strm.adler >> 8) & 0xff);\n    put_byte(s, (strm.adler >> 16) & 0xff);\n    put_byte(s, (strm.adler >> 24) & 0xff);\n    put_byte(s, strm.total_in & 0xff);\n    put_byte(s, (strm.total_in >> 8) & 0xff);\n    put_byte(s, (strm.total_in >> 16) & 0xff);\n    put_byte(s, (strm.total_in >> 24) & 0xff);\n  }\n  else\n  {\n    putShortMSB(s, strm.adler >>> 16);\n    putShortMSB(s, strm.adler & 0xffff);\n  }\n\n  flush_pending(strm);\n  /* If avail_out is zero, the application will call deflate again\n   * to flush the rest.\n   */\n  if (s.wrap > 0) { s.wrap = -s.wrap; }\n  /* write the trailer only once! */\n  return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n}\n\nfunction deflateEnd(strm) {\n  var status;\n\n  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  status = strm.state.status;\n  if (status !== INIT_STATE &&\n    status !== EXTRA_STATE &&\n    status !== NAME_STATE &&\n    status !== COMMENT_STATE &&\n    status !== HCRC_STATE &&\n    status !== BUSY_STATE &&\n    status !== FINISH_STATE\n  ) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n  strm.state = null;\n\n  return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n}\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nfunction deflateSetDictionary(strm, dictionary) {\n  var dictLength = dictionary.length;\n\n  var s;\n  var str, n;\n  var wrap;\n  var avail;\n  var next;\n  var input;\n  var tmpDict;\n\n  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  s = strm.state;\n  wrap = s.wrap;\n\n  if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n    return Z_STREAM_ERROR;\n  }\n\n  /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n  if (wrap === 1) {\n    /* adler32(strm->adler, dictionary, dictLength); */\n    strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n  }\n\n  s.wrap = 0;   /* avoid computing Adler-32 in read_buf */\n\n  /* if dictionary would fill window, just replace the history */\n  if (dictLength >= s.w_size) {\n    if (wrap === 0) {            /* already empty otherwise */\n      /*** CLEAR_HASH(s); ***/\n      zero(s.head); // Fill with NIL (= 0);\n      s.strstart = 0;\n      s.block_start = 0;\n      s.insert = 0;\n    }\n    /* use the tail */\n    // dictionary = dictionary.slice(dictLength - s.w_size);\n    tmpDict = new utils.Buf8(s.w_size);\n    utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);\n    dictionary = tmpDict;\n    dictLength = s.w_size;\n  }\n  /* insert dictionary into window and hash */\n  avail = strm.avail_in;\n  next = strm.next_in;\n  input = strm.input;\n  strm.avail_in = dictLength;\n  strm.next_in = 0;\n  strm.input = dictionary;\n  fill_window(s);\n  while (s.lookahead >= MIN_MATCH) {\n    str = s.strstart;\n    n = s.lookahead - (MIN_MATCH - 1);\n    do {\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n      s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n      s.head[s.ins_h] = str;\n      str++;\n    } while (--n);\n    s.strstart = str;\n    s.lookahead = MIN_MATCH - 1;\n    fill_window(s);\n  }\n  s.strstart += s.lookahead;\n  s.block_start = s.strstart;\n  s.insert = s.lookahead;\n  s.lookahead = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  strm.next_in = next;\n  strm.input = input;\n  strm.avail_in = avail;\n  s.wrap = wrap;\n  return Z_OK;\n}\n\n\nexports.deflateInit = deflateInit;\nexports.deflateInit2 = deflateInit2;\nexports.deflateReset = deflateReset;\nexports.deflateResetKeep = deflateResetKeep;\nexports.deflateSetHeader = deflateSetHeader;\nexports.deflate = deflate;\nexports.deflateEnd = deflateEnd;\nexports.deflateSetDictionary = deflateSetDictionary;\nexports.deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nexports.deflateBound = deflateBound;\nexports.deflateCopy = deflateCopy;\nexports.deflateParams = deflateParams;\nexports.deflatePending = deflatePending;\nexports.deflatePrime = deflatePrime;\nexports.deflateTune = deflateTune;\n*/\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nvar BAD = 30;       /* got a data error -- remain here until reset */\nvar TYPE = 12;      /* i: waiting for type bits, including last-flag bit */\n\n/*\n   Decode literal, length, and distance codes and write out the resulting\n   literal and match bytes until either not enough input or output is\n   available, an end-of-block is encountered, or a data error is encountered.\n   When large enough input and output buffers are supplied to inflate(), for\n   example, a 16K input buffer and a 64K output buffer, more than 95% of the\n   inflate execution time is spent in this routine.\n\n   Entry assumptions:\n\n        state.mode === LEN\n        strm.avail_in >= 6\n        strm.avail_out >= 258\n        start >= strm.avail_out\n        state.bits < 8\n\n   On return, state.mode is one of:\n\n        LEN -- ran out of enough output space or enough available input\n        TYPE -- reached end of block code, inflate() to interpret next block\n        BAD -- error in block data\n\n   Notes:\n\n    - The maximum input bits used by a length/distance pair is 15 bits for the\n      length code, 5 bits for the length extra, 15 bits for the distance code,\n      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.\n      Therefore if strm.avail_in >= 6, then there is enough input to avoid\n      checking for available input while decoding.\n\n    - The maximum bytes that a single length/distance pair can output is 258\n      bytes, which is the maximum length that can be coded.  inflate_fast()\n      requires strm.avail_out >= 258 for each loop to avoid checking for\n      output space.\n */\nmodule.exports = function inflate_fast(strm, start) {\n  var state;\n  var _in;                    /* local strm.input */\n  var last;                   /* have enough input while in < last */\n  var _out;                   /* local strm.output */\n  var beg;                    /* inflate()'s initial strm.output */\n  var end;                    /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n  var dmax;                   /* maximum distance from zlib header */\n//#endif\n  var wsize;                  /* window size or zero if not using window */\n  var whave;                  /* valid bytes in the window */\n  var wnext;                  /* window write index */\n  // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n  var s_window;               /* allocated sliding window, if wsize != 0 */\n  var hold;                   /* local strm.hold */\n  var bits;                   /* local strm.bits */\n  var lcode;                  /* local strm.lencode */\n  var dcode;                  /* local strm.distcode */\n  var lmask;                  /* mask for first level of length codes */\n  var dmask;                  /* mask for first level of distance codes */\n  var here;                   /* retrieved table entry */\n  var op;                     /* code bits, operation, extra bits, or */\n                              /*  window position, window bytes to copy */\n  var len;                    /* match length, unused bytes */\n  var dist;                   /* match distance */\n  var from;                   /* where to copy match from */\n  var from_source;\n\n\n  var input, output; // JS specific, because we have no pointers\n\n  /* copy state to local variables */\n  state = strm.state;\n  //here = state.here;\n  _in = strm.next_in;\n  input = strm.input;\n  last = _in + (strm.avail_in - 5);\n  _out = strm.next_out;\n  output = strm.output;\n  beg = _out - (start - strm.avail_out);\n  end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n  dmax = state.dmax;\n//#endif\n  wsize = state.wsize;\n  whave = state.whave;\n  wnext = state.wnext;\n  s_window = state.window;\n  hold = state.hold;\n  bits = state.bits;\n  lcode = state.lencode;\n  dcode = state.distcode;\n  lmask = (1 << state.lenbits) - 1;\n  dmask = (1 << state.distbits) - 1;\n\n\n  /* decode literals and length/distances until end-of-block or not enough\n     input data or output space */\n\n  top:\n  do {\n    if (bits < 15) {\n      hold += input[_in++] << bits;\n      bits += 8;\n      hold += input[_in++] << bits;\n      bits += 8;\n    }\n\n    here = lcode[hold & lmask];\n\n    dolen:\n    for (;;) { // Goto emulation\n      op = here >>> 24/*here.bits*/;\n      hold >>>= op;\n      bits -= op;\n      op = (here >>> 16) & 0xff/*here.op*/;\n      if (op === 0) {                          /* literal */\n        //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n        //        \"inflate:         literal '%c'\\n\" :\n        //        \"inflate:         literal 0x%02x\\n\", here.val));\n        output[_out++] = here & 0xffff/*here.val*/;\n      }\n      else if (op & 16) {                     /* length base */\n        len = here & 0xffff/*here.val*/;\n        op &= 15;                           /* number of extra bits */\n        if (op) {\n          if (bits < op) {\n            hold += input[_in++] << bits;\n            bits += 8;\n          }\n          len += hold & ((1 << op) - 1);\n          hold >>>= op;\n          bits -= op;\n        }\n        //Tracevv((stderr, \"inflate:         length %u\\n\", len));\n        if (bits < 15) {\n          hold += input[_in++] << bits;\n          bits += 8;\n          hold += input[_in++] << bits;\n          bits += 8;\n        }\n        here = dcode[hold & dmask];\n\n        dodist:\n        for (;;) { // goto emulation\n          op = here >>> 24/*here.bits*/;\n          hold >>>= op;\n          bits -= op;\n          op = (here >>> 16) & 0xff/*here.op*/;\n\n          if (op & 16) {                      /* distance base */\n            dist = here & 0xffff/*here.val*/;\n            op &= 15;                       /* number of extra bits */\n            if (bits < op) {\n              hold += input[_in++] << bits;\n              bits += 8;\n              if (bits < op) {\n                hold += input[_in++] << bits;\n                bits += 8;\n              }\n            }\n            dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n            if (dist > dmax) {\n              strm.msg = 'invalid distance too far back';\n              state.mode = BAD;\n              break top;\n            }\n//#endif\n            hold >>>= op;\n            bits -= op;\n            //Tracevv((stderr, \"inflate:         distance %u\\n\", dist));\n            op = _out - beg;                /* max distance in output */\n            if (dist > op) {                /* see if copy from window */\n              op = dist - op;               /* distance back in window */\n              if (op > whave) {\n                if (state.sane) {\n                  strm.msg = 'invalid distance too far back';\n                  state.mode = BAD;\n                  break top;\n                }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n//                if (len <= op - whave) {\n//                  do {\n//                    output[_out++] = 0;\n//                  } while (--len);\n//                  continue top;\n//                }\n//                len -= op - whave;\n//                do {\n//                  output[_out++] = 0;\n//                } while (--op > whave);\n//                if (op === 0) {\n//                  from = _out - dist;\n//                  do {\n//                    output[_out++] = output[from++];\n//                  } while (--len);\n//                  continue top;\n//                }\n//#endif\n              }\n              from = 0; // window index\n              from_source = s_window;\n              if (wnext === 0) {           /* very common case */\n                from += wsize - op;\n                if (op < len) {         /* some from window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = _out - dist;  /* rest from output */\n                  from_source = output;\n                }\n              }\n              else if (wnext < op) {      /* wrap around window */\n                from += wsize + wnext - op;\n                op -= wnext;\n                if (op < len) {         /* some from end of window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = 0;\n                  if (wnext < len) {  /* some from start of window */\n                    op = wnext;\n                    len -= op;\n                    do {\n                      output[_out++] = s_window[from++];\n                    } while (--op);\n                    from = _out - dist;      /* rest from output */\n                    from_source = output;\n                  }\n                }\n              }\n              else {                      /* contiguous in window */\n                from += wnext - op;\n                if (op < len) {         /* some from window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = _out - dist;  /* rest from output */\n                  from_source = output;\n                }\n              }\n              while (len > 2) {\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                len -= 3;\n              }\n              if (len) {\n                output[_out++] = from_source[from++];\n                if (len > 1) {\n                  output[_out++] = from_source[from++];\n                }\n              }\n            }\n            else {\n              from = _out - dist;          /* copy direct from output */\n              do {                        /* minimum length is three */\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                len -= 3;\n              } while (len > 2);\n              if (len) {\n                output[_out++] = output[from++];\n                if (len > 1) {\n                  output[_out++] = output[from++];\n                }\n              }\n            }\n          }\n          else if ((op & 64) === 0) {          /* 2nd level distance code */\n            here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n            continue dodist;\n          }\n          else {\n            strm.msg = 'invalid distance code';\n            state.mode = BAD;\n            break top;\n          }\n\n          break; // need to emulate goto via \"continue\"\n        }\n      }\n      else if ((op & 64) === 0) {              /* 2nd level length code */\n        here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n        continue dolen;\n      }\n      else if (op & 32) {                     /* end-of-block */\n        //Tracevv((stderr, \"inflate:         end of block\\n\"));\n        state.mode = TYPE;\n        break top;\n      }\n      else {\n        strm.msg = 'invalid literal/length code';\n        state.mode = BAD;\n        break top;\n      }\n\n      break; // need to emulate goto via \"continue\"\n    }\n  } while (_in < last && _out < end);\n\n  /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n  len = bits >> 3;\n  _in -= len;\n  bits -= len << 3;\n  hold &= (1 << bits) - 1;\n\n  /* update state and return */\n  strm.next_in = _in;\n  strm.next_out = _out;\n  strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n  strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n  state.hold = hold;\n  state.bits = bits;\n  return;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils         = require('../utils/common');\nvar adler32       = require('./adler32');\nvar crc32         = require('./crc32');\nvar inflate_fast  = require('./inffast');\nvar inflate_table = require('./inftrees');\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\n//var Z_NO_FLUSH      = 0;\n//var Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH    = 2;\n//var Z_FULL_FLUSH    = 3;\nvar Z_FINISH        = 4;\nvar Z_BLOCK         = 5;\nvar Z_TREES         = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\nvar Z_NEED_DICT     = 2;\n//var Z_ERRNO         = -1;\nvar Z_STREAM_ERROR  = -2;\nvar Z_DATA_ERROR    = -3;\nvar Z_MEM_ERROR     = -4;\nvar Z_BUF_ERROR     = -5;\n//var Z_VERSION_ERROR = -6;\n\n/* The deflate compression method */\nvar Z_DEFLATED  = 8;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nvar    HEAD = 1;       /* i: waiting for magic header */\nvar    FLAGS = 2;      /* i: waiting for method and flags (gzip) */\nvar    TIME = 3;       /* i: waiting for modification time (gzip) */\nvar    OS = 4;         /* i: waiting for extra flags and operating system (gzip) */\nvar    EXLEN = 5;      /* i: waiting for extra length (gzip) */\nvar    EXTRA = 6;      /* i: waiting for extra bytes (gzip) */\nvar    NAME = 7;       /* i: waiting for end of file name (gzip) */\nvar    COMMENT = 8;    /* i: waiting for end of comment (gzip) */\nvar    HCRC = 9;       /* i: waiting for header crc (gzip) */\nvar    DICTID = 10;    /* i: waiting for dictionary check value */\nvar    DICT = 11;      /* waiting for inflateSetDictionary() call */\nvar        TYPE = 12;      /* i: waiting for type bits, including last-flag bit */\nvar        TYPEDO = 13;    /* i: same, but skip check to exit inflate on new block */\nvar        STORED = 14;    /* i: waiting for stored size (length and complement) */\nvar        COPY_ = 15;     /* i/o: same as COPY below, but only first time in */\nvar        COPY = 16;      /* i/o: waiting for input or output to copy stored block */\nvar        TABLE = 17;     /* i: waiting for dynamic block table lengths */\nvar        LENLENS = 18;   /* i: waiting for code length code lengths */\nvar        CODELENS = 19;  /* i: waiting for length/lit and distance code lengths */\nvar            LEN_ = 20;      /* i: same as LEN below, but only first time in */\nvar            LEN = 21;       /* i: waiting for length/lit/eob code */\nvar            LENEXT = 22;    /* i: waiting for length extra bits */\nvar            DIST = 23;      /* i: waiting for distance code */\nvar            DISTEXT = 24;   /* i: waiting for distance extra bits */\nvar            MATCH = 25;     /* o: waiting for output space to copy string */\nvar            LIT = 26;       /* o: waiting for output space to write literal */\nvar    CHECK = 27;     /* i: waiting for 32-bit check value */\nvar    LENGTH = 28;    /* i: waiting for 32-bit length (gzip) */\nvar    DONE = 29;      /* finished check, done -- remain here until reset */\nvar    BAD = 30;       /* got a data error -- remain here until reset */\nvar    MEM = 31;       /* got an inflate() memory error -- remain here until reset */\nvar    SYNC = 32;      /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH =  (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_WBITS = MAX_WBITS;\n\n\nfunction zswap32(q) {\n  return  (((q >>> 24) & 0xff) +\n          ((q >>> 8) & 0xff00) +\n          ((q & 0xff00) << 8) +\n          ((q & 0xff) << 24));\n}\n\n\nfunction InflateState() {\n  this.mode = 0;             /* current inflate mode */\n  this.last = false;          /* true if processing last block */\n  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */\n  this.havedict = false;      /* true if dictionary provided */\n  this.flags = 0;             /* gzip header method and flags (0 if zlib) */\n  this.dmax = 0;              /* zlib header max distance (INFLATE_STRICT) */\n  this.check = 0;             /* protected copy of check value */\n  this.total = 0;             /* protected copy of output count */\n  // TODO: may be {}\n  this.head = null;           /* where to save gzip header information */\n\n  /* sliding window */\n  this.wbits = 0;             /* log base 2 of requested window size */\n  this.wsize = 0;             /* window size or zero if not using window */\n  this.whave = 0;             /* valid bytes in the window */\n  this.wnext = 0;             /* window write index */\n  this.window = null;         /* allocated sliding window, if needed */\n\n  /* bit accumulator */\n  this.hold = 0;              /* input bit accumulator */\n  this.bits = 0;              /* number of bits in \"in\" */\n\n  /* for string and stored block copying */\n  this.length = 0;            /* literal or length of data to copy */\n  this.offset = 0;            /* distance back to copy string from */\n\n  /* for table and code decoding */\n  this.extra = 0;             /* extra bits needed */\n\n  /* fixed and dynamic code tables */\n  this.lencode = null;          /* starting table for length/literal codes */\n  this.distcode = null;         /* starting table for distance codes */\n  this.lenbits = 0;           /* index bits for lencode */\n  this.distbits = 0;          /* index bits for distcode */\n\n  /* dynamic table building */\n  this.ncode = 0;             /* number of code length code lengths */\n  this.nlen = 0;              /* number of length code lengths */\n  this.ndist = 0;             /* number of distance code lengths */\n  this.have = 0;              /* number of code lengths in lens[] */\n  this.next = null;              /* next available space in codes[] */\n\n  this.lens = new utils.Buf16(320); /* temporary storage for code lengths */\n  this.work = new utils.Buf16(288); /* work area for code table building */\n\n  /*\n   because we don't have pointers in js, we use lencode and distcode directly\n   as buffers so we don't need codes\n  */\n  //this.codes = new utils.Buf32(ENOUGH);       /* space for code tables */\n  this.lendyn = null;              /* dynamic table for length/literal codes (JS specific) */\n  this.distdyn = null;             /* dynamic table for distance codes (JS specific) */\n  this.sane = 0;                   /* if false, allow invalid distance too far */\n  this.back = 0;                   /* bits back of last unprocessed length/lit */\n  this.was = 0;                    /* initial length of match */\n}\n\nfunction inflateResetKeep(strm) {\n  var state;\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  strm.total_in = strm.total_out = state.total = 0;\n  strm.msg = ''; /*Z_NULL*/\n  if (state.wrap) {       /* to support ill-conceived Java test suite */\n    strm.adler = state.wrap & 1;\n  }\n  state.mode = HEAD;\n  state.last = 0;\n  state.havedict = 0;\n  state.dmax = 32768;\n  state.head = null/*Z_NULL*/;\n  state.hold = 0;\n  state.bits = 0;\n  //state.lencode = state.distcode = state.next = state.codes;\n  state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);\n  state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);\n\n  state.sane = 1;\n  state.back = -1;\n  //Tracev((stderr, \"inflate: reset\\n\"));\n  return Z_OK;\n}\n\nfunction inflateReset(strm) {\n  var state;\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  state.wsize = 0;\n  state.whave = 0;\n  state.wnext = 0;\n  return inflateResetKeep(strm);\n\n}\n\nfunction inflateReset2(strm, windowBits) {\n  var wrap;\n  var state;\n\n  /* get the state */\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n\n  /* extract wrap request from windowBits parameter */\n  if (windowBits < 0) {\n    wrap = 0;\n    windowBits = -windowBits;\n  }\n  else {\n    wrap = (windowBits >> 4) + 1;\n    if (windowBits < 48) {\n      windowBits &= 15;\n    }\n  }\n\n  /* set number of window bits, free window if different */\n  if (windowBits && (windowBits < 8 || windowBits > 15)) {\n    return Z_STREAM_ERROR;\n  }\n  if (state.window !== null && state.wbits !== windowBits) {\n    state.window = null;\n  }\n\n  /* update state and reset the rest of it */\n  state.wrap = wrap;\n  state.wbits = windowBits;\n  return inflateReset(strm);\n}\n\nfunction inflateInit2(strm, windowBits) {\n  var ret;\n  var state;\n\n  if (!strm) { return Z_STREAM_ERROR; }\n  //strm.msg = Z_NULL;                 /* in case we return an error */\n\n  state = new InflateState();\n\n  //if (state === Z_NULL) return Z_MEM_ERROR;\n  //Tracev((stderr, \"inflate: allocated\\n\"));\n  strm.state = state;\n  state.window = null/*Z_NULL*/;\n  ret = inflateReset2(strm, windowBits);\n  if (ret !== Z_OK) {\n    strm.state = null/*Z_NULL*/;\n  }\n  return ret;\n}\n\nfunction inflateInit(strm) {\n  return inflateInit2(strm, DEF_WBITS);\n}\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding.  Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter.  This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time.  However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nvar virgin = true;\n\nvar lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\nfunction fixedtables(state) {\n  /* build fixed huffman tables if first call (may not be thread safe) */\n  if (virgin) {\n    var sym;\n\n    lenfix = new utils.Buf32(512);\n    distfix = new utils.Buf32(32);\n\n    /* literal/length table */\n    sym = 0;\n    while (sym < 144) { state.lens[sym++] = 8; }\n    while (sym < 256) { state.lens[sym++] = 9; }\n    while (sym < 280) { state.lens[sym++] = 7; }\n    while (sym < 288) { state.lens[sym++] = 8; }\n\n    inflate_table(LENS,  state.lens, 0, 288, lenfix,   0, state.work, { bits: 9 });\n\n    /* distance table */\n    sym = 0;\n    while (sym < 32) { state.lens[sym++] = 5; }\n\n    inflate_table(DISTS, state.lens, 0, 32,   distfix, 0, state.work, { bits: 5 });\n\n    /* do this just once */\n    virgin = false;\n  }\n\n  state.lencode = lenfix;\n  state.lenbits = 9;\n  state.distcode = distfix;\n  state.distbits = 5;\n}\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning.  If window does not exist yet, create it.  This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nfunction updatewindow(strm, src, end, copy) {\n  var dist;\n  var state = strm.state;\n\n  /* if it hasn't been done already, allocate space for the window */\n  if (state.window === null) {\n    state.wsize = 1 << state.wbits;\n    state.wnext = 0;\n    state.whave = 0;\n\n    state.window = new utils.Buf8(state.wsize);\n  }\n\n  /* copy state->wsize or less output bytes into the circular window */\n  if (copy >= state.wsize) {\n    utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);\n    state.wnext = 0;\n    state.whave = state.wsize;\n  }\n  else {\n    dist = state.wsize - state.wnext;\n    if (dist > copy) {\n      dist = copy;\n    }\n    //zmemcpy(state->window + state->wnext, end - copy, dist);\n    utils.arraySet(state.window, src, end - copy, dist, state.wnext);\n    copy -= dist;\n    if (copy) {\n      //zmemcpy(state->window, end - copy, copy);\n      utils.arraySet(state.window, src, end - copy, copy, 0);\n      state.wnext = copy;\n      state.whave = state.wsize;\n    }\n    else {\n      state.wnext += dist;\n      if (state.wnext === state.wsize) { state.wnext = 0; }\n      if (state.whave < state.wsize) { state.whave += dist; }\n    }\n  }\n  return 0;\n}\n\nfunction inflate(strm, flush) {\n  var state;\n  var input, output;          // input/output buffers\n  var next;                   /* next input INDEX */\n  var put;                    /* next output INDEX */\n  var have, left;             /* available input and output */\n  var hold;                   /* bit buffer */\n  var bits;                   /* bits in bit buffer */\n  var _in, _out;              /* save starting available input and output */\n  var copy;                   /* number of stored or match bytes to copy */\n  var from;                   /* where to copy match bytes from */\n  var from_source;\n  var here = 0;               /* current decoding table entry */\n  var here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n  //var last;                   /* parent table entry */\n  var last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n  var len;                    /* length to copy for repeats, bits to drop */\n  var ret;                    /* return code */\n  var hbuf = new utils.Buf8(4);    /* buffer for gzip header crc calculation */\n  var opts;\n\n  var n; // temporary var for NEED_BITS\n\n  var order = /* permutation of code lengths */\n    [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n\n  if (!strm || !strm.state || !strm.output ||\n      (!strm.input && strm.avail_in !== 0)) {\n    return Z_STREAM_ERROR;\n  }\n\n  state = strm.state;\n  if (state.mode === TYPE) { state.mode = TYPEDO; }    /* skip check */\n\n\n  //--- LOAD() ---\n  put = strm.next_out;\n  output = strm.output;\n  left = strm.avail_out;\n  next = strm.next_in;\n  input = strm.input;\n  have = strm.avail_in;\n  hold = state.hold;\n  bits = state.bits;\n  //---\n\n  _in = have;\n  _out = left;\n  ret = Z_OK;\n\n  inf_leave: // goto emulation\n  for (;;) {\n    switch (state.mode) {\n      case HEAD:\n        if (state.wrap === 0) {\n          state.mode = TYPEDO;\n          break;\n        }\n        //=== NEEDBITS(16);\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if ((state.wrap & 2) && hold === 0x8b1f) {  /* gzip header */\n          state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          state.mode = FLAGS;\n          break;\n        }\n        state.flags = 0;           /* expect zlib header */\n        if (state.head) {\n          state.head.done = false;\n        }\n        if (!(state.wrap & 1) ||   /* check if zlib header allowed */\n          (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n          strm.msg = 'incorrect header check';\n          state.mode = BAD;\n          break;\n        }\n        if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n          strm.msg = 'unknown compression method';\n          state.mode = BAD;\n          break;\n        }\n        //--- DROPBITS(4) ---//\n        hold >>>= 4;\n        bits -= 4;\n        //---//\n        len = (hold & 0x0f)/*BITS(4)*/ + 8;\n        if (state.wbits === 0) {\n          state.wbits = len;\n        }\n        else if (len > state.wbits) {\n          strm.msg = 'invalid window size';\n          state.mode = BAD;\n          break;\n        }\n        state.dmax = 1 << len;\n        //Tracev((stderr, \"inflate:   zlib header ok\\n\"));\n        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n        state.mode = hold & 0x200 ? DICTID : TYPE;\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        break;\n      case FLAGS:\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.flags = hold;\n        if ((state.flags & 0xff) !== Z_DEFLATED) {\n          strm.msg = 'unknown compression method';\n          state.mode = BAD;\n          break;\n        }\n        if (state.flags & 0xe000) {\n          strm.msg = 'unknown header flags set';\n          state.mode = BAD;\n          break;\n        }\n        if (state.head) {\n          state.head.text = ((hold >> 8) & 1);\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = TIME;\n        /* falls through */\n      case TIME:\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if (state.head) {\n          state.head.time = hold;\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC4(state.check, hold)\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          hbuf[2] = (hold >>> 16) & 0xff;\n          hbuf[3] = (hold >>> 24) & 0xff;\n          state.check = crc32(state.check, hbuf, 4, 0);\n          //===\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = OS;\n        /* falls through */\n      case OS:\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if (state.head) {\n          state.head.xflags = (hold & 0xff);\n          state.head.os = (hold >> 8);\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = EXLEN;\n        /* falls through */\n      case EXLEN:\n        if (state.flags & 0x0400) {\n          //=== NEEDBITS(16); */\n          while (bits < 16) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.length = hold;\n          if (state.head) {\n            state.head.extra_len = hold;\n          }\n          if (state.flags & 0x0200) {\n            //=== CRC2(state.check, hold);\n            hbuf[0] = hold & 0xff;\n            hbuf[1] = (hold >>> 8) & 0xff;\n            state.check = crc32(state.check, hbuf, 2, 0);\n            //===//\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n        }\n        else if (state.head) {\n          state.head.extra = null/*Z_NULL*/;\n        }\n        state.mode = EXTRA;\n        /* falls through */\n      case EXTRA:\n        if (state.flags & 0x0400) {\n          copy = state.length;\n          if (copy > have) { copy = have; }\n          if (copy) {\n            if (state.head) {\n              len = state.head.extra_len - state.length;\n              if (!state.head.extra) {\n                // Use untyped array for more convenient processing later\n                state.head.extra = new Array(state.head.extra_len);\n              }\n              utils.arraySet(\n                state.head.extra,\n                input,\n                next,\n                // extra field is limited to 65536 bytes\n                // - no need for additional size check\n                copy,\n                /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n                len\n              );\n              //zmemcpy(state.head.extra + len, next,\n              //        len + copy > state.head.extra_max ?\n              //        state.head.extra_max - len : copy);\n            }\n            if (state.flags & 0x0200) {\n              state.check = crc32(state.check, input, copy, next);\n            }\n            have -= copy;\n            next += copy;\n            state.length -= copy;\n          }\n          if (state.length) { break inf_leave; }\n        }\n        state.length = 0;\n        state.mode = NAME;\n        /* falls through */\n      case NAME:\n        if (state.flags & 0x0800) {\n          if (have === 0) { break inf_leave; }\n          copy = 0;\n          do {\n            // TODO: 2 or 1 bytes?\n            len = input[next + copy++];\n            /* use constant limit because in js we should not preallocate memory */\n            if (state.head && len &&\n                (state.length < 65536 /*state.head.name_max*/)) {\n              state.head.name += String.fromCharCode(len);\n            }\n          } while (len && copy < have);\n\n          if (state.flags & 0x0200) {\n            state.check = crc32(state.check, input, copy, next);\n          }\n          have -= copy;\n          next += copy;\n          if (len) { break inf_leave; }\n        }\n        else if (state.head) {\n          state.head.name = null;\n        }\n        state.length = 0;\n        state.mode = COMMENT;\n        /* falls through */\n      case COMMENT:\n        if (state.flags & 0x1000) {\n          if (have === 0) { break inf_leave; }\n          copy = 0;\n          do {\n            len = input[next + copy++];\n            /* use constant limit because in js we should not preallocate memory */\n            if (state.head && len &&\n                (state.length < 65536 /*state.head.comm_max*/)) {\n              state.head.comment += String.fromCharCode(len);\n            }\n          } while (len && copy < have);\n          if (state.flags & 0x0200) {\n            state.check = crc32(state.check, input, copy, next);\n          }\n          have -= copy;\n          next += copy;\n          if (len) { break inf_leave; }\n        }\n        else if (state.head) {\n          state.head.comment = null;\n        }\n        state.mode = HCRC;\n        /* falls through */\n      case HCRC:\n        if (state.flags & 0x0200) {\n          //=== NEEDBITS(16); */\n          while (bits < 16) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          if (hold !== (state.check & 0xffff)) {\n            strm.msg = 'header crc mismatch';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n        }\n        if (state.head) {\n          state.head.hcrc = ((state.flags >> 9) & 1);\n          state.head.done = true;\n        }\n        strm.adler = state.check = 0;\n        state.mode = TYPE;\n        break;\n      case DICTID:\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        strm.adler = state.check = zswap32(hold);\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = DICT;\n        /* falls through */\n      case DICT:\n        if (state.havedict === 0) {\n          //--- RESTORE() ---\n          strm.next_out = put;\n          strm.avail_out = left;\n          strm.next_in = next;\n          strm.avail_in = have;\n          state.hold = hold;\n          state.bits = bits;\n          //---\n          return Z_NEED_DICT;\n        }\n        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n        state.mode = TYPE;\n        /* falls through */\n      case TYPE:\n        if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case TYPEDO:\n        if (state.last) {\n          //--- BYTEBITS() ---//\n          hold >>>= bits & 7;\n          bits -= bits & 7;\n          //---//\n          state.mode = CHECK;\n          break;\n        }\n        //=== NEEDBITS(3); */\n        while (bits < 3) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.last = (hold & 0x01)/*BITS(1)*/;\n        //--- DROPBITS(1) ---//\n        hold >>>= 1;\n        bits -= 1;\n        //---//\n\n        switch ((hold & 0x03)/*BITS(2)*/) {\n          case 0:                             /* stored block */\n            //Tracev((stderr, \"inflate:     stored block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = STORED;\n            break;\n          case 1:                             /* fixed block */\n            fixedtables(state);\n            //Tracev((stderr, \"inflate:     fixed codes block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = LEN_;             /* decode codes */\n            if (flush === Z_TREES) {\n              //--- DROPBITS(2) ---//\n              hold >>>= 2;\n              bits -= 2;\n              //---//\n              break inf_leave;\n            }\n            break;\n          case 2:                             /* dynamic block */\n            //Tracev((stderr, \"inflate:     dynamic codes block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = TABLE;\n            break;\n          case 3:\n            strm.msg = 'invalid block type';\n            state.mode = BAD;\n        }\n        //--- DROPBITS(2) ---//\n        hold >>>= 2;\n        bits -= 2;\n        //---//\n        break;\n      case STORED:\n        //--- BYTEBITS() ---// /* go to byte boundary */\n        hold >>>= bits & 7;\n        bits -= bits & 7;\n        //---//\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n          strm.msg = 'invalid stored block lengths';\n          state.mode = BAD;\n          break;\n        }\n        state.length = hold & 0xffff;\n        //Tracev((stderr, \"inflate:       stored length %u\\n\",\n        //        state.length));\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = COPY_;\n        if (flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case COPY_:\n        state.mode = COPY;\n        /* falls through */\n      case COPY:\n        copy = state.length;\n        if (copy) {\n          if (copy > have) { copy = have; }\n          if (copy > left) { copy = left; }\n          if (copy === 0) { break inf_leave; }\n          //--- zmemcpy(put, next, copy); ---\n          utils.arraySet(output, input, next, copy, put);\n          //---//\n          have -= copy;\n          next += copy;\n          left -= copy;\n          put += copy;\n          state.length -= copy;\n          break;\n        }\n        //Tracev((stderr, \"inflate:       stored end\\n\"));\n        state.mode = TYPE;\n        break;\n      case TABLE:\n        //=== NEEDBITS(14); */\n        while (bits < 14) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n        //--- DROPBITS(5) ---//\n        hold >>>= 5;\n        bits -= 5;\n        //---//\n        state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n        //--- DROPBITS(5) ---//\n        hold >>>= 5;\n        bits -= 5;\n        //---//\n        state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n        //--- DROPBITS(4) ---//\n        hold >>>= 4;\n        bits -= 4;\n        //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n        if (state.nlen > 286 || state.ndist > 30) {\n          strm.msg = 'too many length or distance symbols';\n          state.mode = BAD;\n          break;\n        }\n//#endif\n        //Tracev((stderr, \"inflate:       table sizes ok\\n\"));\n        state.have = 0;\n        state.mode = LENLENS;\n        /* falls through */\n      case LENLENS:\n        while (state.have < state.ncode) {\n          //=== NEEDBITS(3);\n          while (bits < 3) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n          //--- DROPBITS(3) ---//\n          hold >>>= 3;\n          bits -= 3;\n          //---//\n        }\n        while (state.have < 19) {\n          state.lens[order[state.have++]] = 0;\n        }\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        //state.next = state.codes;\n        //state.lencode = state.next;\n        // Switch to use dynamic table\n        state.lencode = state.lendyn;\n        state.lenbits = 7;\n\n        opts = { bits: state.lenbits };\n        ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n        state.lenbits = opts.bits;\n\n        if (ret) {\n          strm.msg = 'invalid code lengths set';\n          state.mode = BAD;\n          break;\n        }\n        //Tracev((stderr, \"inflate:       code lengths ok\\n\"));\n        state.have = 0;\n        state.mode = CODELENS;\n        /* falls through */\n      case CODELENS:\n        while (state.have < state.nlen + state.ndist) {\n          for (;;) {\n            here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          if (here_val < 16) {\n            //--- DROPBITS(here.bits) ---//\n            hold >>>= here_bits;\n            bits -= here_bits;\n            //---//\n            state.lens[state.have++] = here_val;\n          }\n          else {\n            if (here_val === 16) {\n              //=== NEEDBITS(here.bits + 2);\n              n = here_bits + 2;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              if (state.have === 0) {\n                strm.msg = 'invalid bit length repeat';\n                state.mode = BAD;\n                break;\n              }\n              len = state.lens[state.have - 1];\n              copy = 3 + (hold & 0x03);//BITS(2);\n              //--- DROPBITS(2) ---//\n              hold >>>= 2;\n              bits -= 2;\n              //---//\n            }\n            else if (here_val === 17) {\n              //=== NEEDBITS(here.bits + 3);\n              n = here_bits + 3;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              len = 0;\n              copy = 3 + (hold & 0x07);//BITS(3);\n              //--- DROPBITS(3) ---//\n              hold >>>= 3;\n              bits -= 3;\n              //---//\n            }\n            else {\n              //=== NEEDBITS(here.bits + 7);\n              n = here_bits + 7;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              len = 0;\n              copy = 11 + (hold & 0x7f);//BITS(7);\n              //--- DROPBITS(7) ---//\n              hold >>>= 7;\n              bits -= 7;\n              //---//\n            }\n            if (state.have + copy > state.nlen + state.ndist) {\n              strm.msg = 'invalid bit length repeat';\n              state.mode = BAD;\n              break;\n            }\n            while (copy--) {\n              state.lens[state.have++] = len;\n            }\n          }\n        }\n\n        /* handle error breaks in while */\n        if (state.mode === BAD) { break; }\n\n        /* check for end-of-block code (better have one) */\n        if (state.lens[256] === 0) {\n          strm.msg = 'invalid code -- missing end-of-block';\n          state.mode = BAD;\n          break;\n        }\n\n        /* build code tables -- note: do not change the lenbits or distbits\n           values here (9 and 6) without reading the comments in inftrees.h\n           concerning the ENOUGH constants, which depend on those values */\n        state.lenbits = 9;\n\n        opts = { bits: state.lenbits };\n        ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        // state.next_index = opts.table_index;\n        state.lenbits = opts.bits;\n        // state.lencode = state.next;\n\n        if (ret) {\n          strm.msg = 'invalid literal/lengths set';\n          state.mode = BAD;\n          break;\n        }\n\n        state.distbits = 6;\n        //state.distcode.copy(state.codes);\n        // Switch to use dynamic table\n        state.distcode = state.distdyn;\n        opts = { bits: state.distbits };\n        ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        // state.next_index = opts.table_index;\n        state.distbits = opts.bits;\n        // state.distcode = state.next;\n\n        if (ret) {\n          strm.msg = 'invalid distances set';\n          state.mode = BAD;\n          break;\n        }\n        //Tracev((stderr, 'inflate:       codes ok\\n'));\n        state.mode = LEN_;\n        if (flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case LEN_:\n        state.mode = LEN;\n        /* falls through */\n      case LEN:\n        if (have >= 6 && left >= 258) {\n          //--- RESTORE() ---\n          strm.next_out = put;\n          strm.avail_out = left;\n          strm.next_in = next;\n          strm.avail_in = have;\n          state.hold = hold;\n          state.bits = bits;\n          //---\n          inflate_fast(strm, _out);\n          //--- LOAD() ---\n          put = strm.next_out;\n          output = strm.output;\n          left = strm.avail_out;\n          next = strm.next_in;\n          input = strm.input;\n          have = strm.avail_in;\n          hold = state.hold;\n          bits = state.bits;\n          //---\n\n          if (state.mode === TYPE) {\n            state.back = -1;\n          }\n          break;\n        }\n        state.back = 0;\n        for (;;) {\n          here = state.lencode[hold & ((1 << state.lenbits) - 1)];  /*BITS(state.lenbits)*/\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if (here_bits <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        if (here_op && (here_op & 0xf0) === 0) {\n          last_bits = here_bits;\n          last_op = here_op;\n          last_val = here_val;\n          for (;;) {\n            here = state.lencode[last_val +\n                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((last_bits + here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          //--- DROPBITS(last.bits) ---//\n          hold >>>= last_bits;\n          bits -= last_bits;\n          //---//\n          state.back += last_bits;\n        }\n        //--- DROPBITS(here.bits) ---//\n        hold >>>= here_bits;\n        bits -= here_bits;\n        //---//\n        state.back += here_bits;\n        state.length = here_val;\n        if (here_op === 0) {\n          //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n          //        \"inflate:         literal '%c'\\n\" :\n          //        \"inflate:         literal 0x%02x\\n\", here.val));\n          state.mode = LIT;\n          break;\n        }\n        if (here_op & 32) {\n          //Tracevv((stderr, \"inflate:         end of block\\n\"));\n          state.back = -1;\n          state.mode = TYPE;\n          break;\n        }\n        if (here_op & 64) {\n          strm.msg = 'invalid literal/length code';\n          state.mode = BAD;\n          break;\n        }\n        state.extra = here_op & 15;\n        state.mode = LENEXT;\n        /* falls through */\n      case LENEXT:\n        if (state.extra) {\n          //=== NEEDBITS(state.extra);\n          n = state.extra;\n          while (bits < n) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n          //--- DROPBITS(state.extra) ---//\n          hold >>>= state.extra;\n          bits -= state.extra;\n          //---//\n          state.back += state.extra;\n        }\n        //Tracevv((stderr, \"inflate:         length %u\\n\", state.length));\n        state.was = state.length;\n        state.mode = DIST;\n        /* falls through */\n      case DIST:\n        for (;;) {\n          here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if ((here_bits) <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        if ((here_op & 0xf0) === 0) {\n          last_bits = here_bits;\n          last_op = here_op;\n          last_val = here_val;\n          for (;;) {\n            here = state.distcode[last_val +\n                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((last_bits + here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          //--- DROPBITS(last.bits) ---//\n          hold >>>= last_bits;\n          bits -= last_bits;\n          //---//\n          state.back += last_bits;\n        }\n        //--- DROPBITS(here.bits) ---//\n        hold >>>= here_bits;\n        bits -= here_bits;\n        //---//\n        state.back += here_bits;\n        if (here_op & 64) {\n          strm.msg = 'invalid distance code';\n          state.mode = BAD;\n          break;\n        }\n        state.offset = here_val;\n        state.extra = (here_op) & 15;\n        state.mode = DISTEXT;\n        /* falls through */\n      case DISTEXT:\n        if (state.extra) {\n          //=== NEEDBITS(state.extra);\n          n = state.extra;\n          while (bits < n) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n          //--- DROPBITS(state.extra) ---//\n          hold >>>= state.extra;\n          bits -= state.extra;\n          //---//\n          state.back += state.extra;\n        }\n//#ifdef INFLATE_STRICT\n        if (state.offset > state.dmax) {\n          strm.msg = 'invalid distance too far back';\n          state.mode = BAD;\n          break;\n        }\n//#endif\n        //Tracevv((stderr, \"inflate:         distance %u\\n\", state.offset));\n        state.mode = MATCH;\n        /* falls through */\n      case MATCH:\n        if (left === 0) { break inf_leave; }\n        copy = _out - left;\n        if (state.offset > copy) {         /* copy from window */\n          copy = state.offset - copy;\n          if (copy > state.whave) {\n            if (state.sane) {\n              strm.msg = 'invalid distance too far back';\n              state.mode = BAD;\n              break;\n            }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n//          Trace((stderr, \"inflate.c too far\\n\"));\n//          copy -= state.whave;\n//          if (copy > state.length) { copy = state.length; }\n//          if (copy > left) { copy = left; }\n//          left -= copy;\n//          state.length -= copy;\n//          do {\n//            output[put++] = 0;\n//          } while (--copy);\n//          if (state.length === 0) { state.mode = LEN; }\n//          break;\n//#endif\n          }\n          if (copy > state.wnext) {\n            copy -= state.wnext;\n            from = state.wsize - copy;\n          }\n          else {\n            from = state.wnext - copy;\n          }\n          if (copy > state.length) { copy = state.length; }\n          from_source = state.window;\n        }\n        else {                              /* copy from output */\n          from_source = output;\n          from = put - state.offset;\n          copy = state.length;\n        }\n        if (copy > left) { copy = left; }\n        left -= copy;\n        state.length -= copy;\n        do {\n          output[put++] = from_source[from++];\n        } while (--copy);\n        if (state.length === 0) { state.mode = LEN; }\n        break;\n      case LIT:\n        if (left === 0) { break inf_leave; }\n        output[put++] = state.length;\n        left--;\n        state.mode = LEN;\n        break;\n      case CHECK:\n        if (state.wrap) {\n          //=== NEEDBITS(32);\n          while (bits < 32) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            // Use '|' instead of '+' to make sure that result is signed\n            hold |= input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          _out -= left;\n          strm.total_out += _out;\n          state.total += _out;\n          if (_out) {\n            strm.adler = state.check =\n                /*UPDATE(state.check, put - _out, _out);*/\n                (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n          }\n          _out = left;\n          // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n          if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n            strm.msg = 'incorrect data check';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          //Tracev((stderr, \"inflate:   check matches trailer\\n\"));\n        }\n        state.mode = LENGTH;\n        /* falls through */\n      case LENGTH:\n        if (state.wrap && state.flags) {\n          //=== NEEDBITS(32);\n          while (bits < 32) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          if (hold !== (state.total & 0xffffffff)) {\n            strm.msg = 'incorrect length check';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          //Tracev((stderr, \"inflate:   length matches trailer\\n\"));\n        }\n        state.mode = DONE;\n        /* falls through */\n      case DONE:\n        ret = Z_STREAM_END;\n        break inf_leave;\n      case BAD:\n        ret = Z_DATA_ERROR;\n        break inf_leave;\n      case MEM:\n        return Z_MEM_ERROR;\n      case SYNC:\n        /* falls through */\n      default:\n        return Z_STREAM_ERROR;\n    }\n  }\n\n  // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n  /*\n     Return from inflate(), updating the total counts and the check value.\n     If there was no progress during the inflate() call, return a buffer\n     error.  Call updatewindow() to create and/or update the window state.\n     Note: a memory error from inflate() is non-recoverable.\n   */\n\n  //--- RESTORE() ---\n  strm.next_out = put;\n  strm.avail_out = left;\n  strm.next_in = next;\n  strm.avail_in = have;\n  state.hold = hold;\n  state.bits = bits;\n  //---\n\n  if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n                      (state.mode < CHECK || flush !== Z_FINISH))) {\n    if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n      state.mode = MEM;\n      return Z_MEM_ERROR;\n    }\n  }\n  _in -= strm.avail_in;\n  _out -= strm.avail_out;\n  strm.total_in += _in;\n  strm.total_out += _out;\n  state.total += _out;\n  if (state.wrap && _out) {\n    strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n      (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n  }\n  strm.data_type = state.bits + (state.last ? 64 : 0) +\n                    (state.mode === TYPE ? 128 : 0) +\n                    (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n  if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n    ret = Z_BUF_ERROR;\n  }\n  return ret;\n}\n\nfunction inflateEnd(strm) {\n\n  if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  var state = strm.state;\n  if (state.window) {\n    state.window = null;\n  }\n  strm.state = null;\n  return Z_OK;\n}\n\nfunction inflateGetHeader(strm, head) {\n  var state;\n\n  /* check state */\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n  /* save header structure */\n  state.head = head;\n  head.done = false;\n  return Z_OK;\n}\n\nfunction inflateSetDictionary(strm, dictionary) {\n  var dictLength = dictionary.length;\n\n  var state;\n  var dictid;\n  var ret;\n\n  /* check state */\n  if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }\n  state = strm.state;\n\n  if (state.wrap !== 0 && state.mode !== DICT) {\n    return Z_STREAM_ERROR;\n  }\n\n  /* check for correct dictionary identifier */\n  if (state.mode === DICT) {\n    dictid = 1; /* adler32(0, null, 0)*/\n    /* dictid = adler32(dictid, dictionary, dictLength); */\n    dictid = adler32(dictid, dictionary, dictLength, 0);\n    if (dictid !== state.check) {\n      return Z_DATA_ERROR;\n    }\n  }\n  /* copy dictionary to window using updatewindow(), which will amend the\n   existing dictionary if appropriate */\n  ret = updatewindow(strm, dictionary, dictLength, dictLength);\n  if (ret) {\n    state.mode = MEM;\n    return Z_MEM_ERROR;\n  }\n  state.havedict = 1;\n  // Tracev((stderr, \"inflate:   dictionary set\\n\"));\n  return Z_OK;\n}\n\nexports.inflateReset = inflateReset;\nexports.inflateReset2 = inflateReset2;\nexports.inflateResetKeep = inflateResetKeep;\nexports.inflateInit = inflateInit;\nexports.inflateInit2 = inflateInit2;\nexports.inflate = inflate;\nexports.inflateEnd = inflateEnd;\nexports.inflateGetHeader = inflateGetHeader;\nexports.inflateSetDictionary = inflateSetDictionary;\nexports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nexports.inflateCopy = inflateCopy;\nexports.inflateGetDictionary = inflateGetDictionary;\nexports.inflateMark = inflateMark;\nexports.inflatePrime = inflatePrime;\nexports.inflateSync = inflateSync;\nexports.inflateSyncPoint = inflateSyncPoint;\nexports.inflateUndermine = inflateUndermine;\n*/\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = require('../utils/common');\n\nvar MAXBITS = 15;\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\nvar lbase = [ /* Length codes 257..285 base */\n  3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n  35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n];\n\nvar lext = [ /* Length codes 257..285 extra */\n  16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n  19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n];\n\nvar dbase = [ /* Distance codes 0..29 base */\n  1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n  257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n  8193, 12289, 16385, 24577, 0, 0\n];\n\nvar dext = [ /* Distance codes 0..29 extra */\n  16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n  23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n  28, 28, 29, 29, 64, 64\n];\n\nmodule.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)\n{\n  var bits = opts.bits;\n      //here = opts.here; /* table entry for duplication */\n\n  var len = 0;               /* a code's length in bits */\n  var sym = 0;               /* index of code symbols */\n  var min = 0, max = 0;          /* minimum and maximum code lengths */\n  var root = 0;              /* number of index bits for root table */\n  var curr = 0;              /* number of index bits for current table */\n  var drop = 0;              /* code bits to drop for sub-table */\n  var left = 0;                   /* number of prefix codes available */\n  var used = 0;              /* code entries in table used */\n  var huff = 0;              /* Huffman code */\n  var incr;              /* for incrementing code, index */\n  var fill;              /* index for replicating entries */\n  var low;               /* low bits for current root entry */\n  var mask;              /* mask for low root bits */\n  var next;             /* next available space in table */\n  var base = null;     /* base value table to use */\n  var base_index = 0;\n//  var shoextra;    /* extra bits table to use */\n  var end;                    /* use base and extra for symbol > end */\n  var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];    /* number of codes of each length */\n  var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];     /* offsets in table for each length */\n  var extra = null;\n  var extra_index = 0;\n\n  var here_bits, here_op, here_val;\n\n  /*\n   Process a set of code lengths to create a canonical Huffman code.  The\n   code lengths are lens[0..codes-1].  Each length corresponds to the\n   symbols 0..codes-1.  The Huffman code is generated by first sorting the\n   symbols by length from short to long, and retaining the symbol order\n   for codes with equal lengths.  Then the code starts with all zero bits\n   for the first code of the shortest length, and the codes are integer\n   increments for the same length, and zeros are appended as the length\n   increases.  For the deflate format, these bits are stored backwards\n   from their more natural integer increment ordering, and so when the\n   decoding tables are built in the large loop below, the integer codes\n   are incremented backwards.\n\n   This routine assumes, but does not check, that all of the entries in\n   lens[] are in the range 0..MAXBITS.  The caller must assure this.\n   1..MAXBITS is interpreted as that code length.  zero means that that\n   symbol does not occur in this code.\n\n   The codes are sorted by computing a count of codes for each length,\n   creating from that a table of starting indices for each length in the\n   sorted table, and then entering the symbols in order in the sorted\n   table.  The sorted table is work[], with that space being provided by\n   the caller.\n\n   The length counts are used for other purposes as well, i.e. finding\n   the minimum and maximum length codes, determining if there are any\n   codes at all, checking for a valid set of lengths, and looking ahead\n   at length counts to determine sub-table sizes when building the\n   decoding tables.\n   */\n\n  /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n  for (len = 0; len <= MAXBITS; len++) {\n    count[len] = 0;\n  }\n  for (sym = 0; sym < codes; sym++) {\n    count[lens[lens_index + sym]]++;\n  }\n\n  /* bound code lengths, force root to be within code lengths */\n  root = bits;\n  for (max = MAXBITS; max >= 1; max--) {\n    if (count[max] !== 0) { break; }\n  }\n  if (root > max) {\n    root = max;\n  }\n  if (max === 0) {                     /* no symbols to code at all */\n    //table.op[opts.table_index] = 64;  //here.op = (var char)64;    /* invalid code marker */\n    //table.bits[opts.table_index] = 1;   //here.bits = (var char)1;\n    //table.val[opts.table_index++] = 0;   //here.val = (var short)0;\n    table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n    //table.op[opts.table_index] = 64;\n    //table.bits[opts.table_index] = 1;\n    //table.val[opts.table_index++] = 0;\n    table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n    opts.bits = 1;\n    return 0;     /* no symbols, but wait for decoding to report error */\n  }\n  for (min = 1; min < max; min++) {\n    if (count[min] !== 0) { break; }\n  }\n  if (root < min) {\n    root = min;\n  }\n\n  /* check for an over-subscribed or incomplete set of lengths */\n  left = 1;\n  for (len = 1; len <= MAXBITS; len++) {\n    left <<= 1;\n    left -= count[len];\n    if (left < 0) {\n      return -1;\n    }        /* over-subscribed */\n  }\n  if (left > 0 && (type === CODES || max !== 1)) {\n    return -1;                      /* incomplete set */\n  }\n\n  /* generate offsets into symbol table for each length for sorting */\n  offs[1] = 0;\n  for (len = 1; len < MAXBITS; len++) {\n    offs[len + 1] = offs[len] + count[len];\n  }\n\n  /* sort symbols by length, by symbol order within each length */\n  for (sym = 0; sym < codes; sym++) {\n    if (lens[lens_index + sym] !== 0) {\n      work[offs[lens[lens_index + sym]]++] = sym;\n    }\n  }\n\n  /*\n   Create and fill in decoding tables.  In this loop, the table being\n   filled is at next and has curr index bits.  The code being used is huff\n   with length len.  That code is converted to an index by dropping drop\n   bits off of the bottom.  For codes where len is less than drop + curr,\n   those top drop + curr - len bits are incremented through all values to\n   fill the table with replicated entries.\n\n   root is the number of index bits for the root table.  When len exceeds\n   root, sub-tables are created pointed to by the root entry with an index\n   of the low root bits of huff.  This is saved in low to check for when a\n   new sub-table should be started.  drop is zero when the root table is\n   being filled, and drop is root when sub-tables are being filled.\n\n   When a new sub-table is needed, it is necessary to look ahead in the\n   code lengths to determine what size sub-table is needed.  The length\n   counts are used for this, and so count[] is decremented as codes are\n   entered in the tables.\n\n   used keeps track of how many table entries have been allocated from the\n   provided *table space.  It is checked for LENS and DIST tables against\n   the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n   the initial root table size constants.  See the comments in inftrees.h\n   for more information.\n\n   sym increments through all symbols, and the loop terminates when\n   all codes of length max, i.e. all codes, have been processed.  This\n   routine permits incomplete codes, so another loop after this one fills\n   in the rest of the decoding tables with invalid code markers.\n   */\n\n  /* set up for code type */\n  // poor man optimization - use if-else instead of switch,\n  // to avoid deopts in old v8\n  if (type === CODES) {\n    base = extra = work;    /* dummy value--not used */\n    end = 19;\n\n  } else if (type === LENS) {\n    base = lbase;\n    base_index -= 257;\n    extra = lext;\n    extra_index -= 257;\n    end = 256;\n\n  } else {                    /* DISTS */\n    base = dbase;\n    extra = dext;\n    end = -1;\n  }\n\n  /* initialize opts for loop */\n  huff = 0;                   /* starting code */\n  sym = 0;                    /* starting code symbol */\n  len = min;                  /* starting code length */\n  next = table_index;              /* current table to fill in */\n  curr = root;                /* current table index bits */\n  drop = 0;                   /* current bits to drop from code for index */\n  low = -1;                   /* trigger new sub-table when len > root */\n  used = 1 << root;          /* use root table entries */\n  mask = used - 1;            /* mask for comparing low */\n\n  /* check available table space */\n  if ((type === LENS && used > ENOUGH_LENS) ||\n    (type === DISTS && used > ENOUGH_DISTS)) {\n    return 1;\n  }\n\n  /* process all codes and make table entries */\n  for (;;) {\n    /* create table entry */\n    here_bits = len - drop;\n    if (work[sym] < end) {\n      here_op = 0;\n      here_val = work[sym];\n    }\n    else if (work[sym] > end) {\n      here_op = extra[extra_index + work[sym]];\n      here_val = base[base_index + work[sym]];\n    }\n    else {\n      here_op = 32 + 64;         /* end of block */\n      here_val = 0;\n    }\n\n    /* replicate for those indices with low len bits equal to huff */\n    incr = 1 << (len - drop);\n    fill = 1 << curr;\n    min = fill;                 /* save offset to next table */\n    do {\n      fill -= incr;\n      table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n    } while (fill !== 0);\n\n    /* backwards increment the len-bit code huff */\n    incr = 1 << (len - 1);\n    while (huff & incr) {\n      incr >>= 1;\n    }\n    if (incr !== 0) {\n      huff &= incr - 1;\n      huff += incr;\n    } else {\n      huff = 0;\n    }\n\n    /* go to next symbol, update count, len */\n    sym++;\n    if (--count[len] === 0) {\n      if (len === max) { break; }\n      len = lens[lens_index + work[sym]];\n    }\n\n    /* create new sub-table if needed */\n    if (len > root && (huff & mask) !== low) {\n      /* if first time, transition to sub-tables */\n      if (drop === 0) {\n        drop = root;\n      }\n\n      /* increment past last table */\n      next += min;            /* here min is 1 << curr */\n\n      /* determine length of next table */\n      curr = len - drop;\n      left = 1 << curr;\n      while (curr + drop < max) {\n        left -= count[curr + drop];\n        if (left <= 0) { break; }\n        curr++;\n        left <<= 1;\n      }\n\n      /* check for enough space */\n      used += 1 << curr;\n      if ((type === LENS && used > ENOUGH_LENS) ||\n        (type === DISTS && used > ENOUGH_DISTS)) {\n        return 1;\n      }\n\n      /* point entry in root table to sub-table */\n      low = huff & mask;\n      /*table.op[low] = curr;\n      table.bits[low] = root;\n      table.val[low] = next - opts.table_index;*/\n      table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n    }\n  }\n\n  /* fill in remaining table entry if code is incomplete (guaranteed to have\n   at most one remaining entry, since if the code is incomplete, the\n   maximum code length that was allowed to get this far is one bit) */\n  if (huff !== 0) {\n    //table.op[next + huff] = 64;            /* invalid code marker */\n    //table.bits[next + huff] = len - drop;\n    //table.val[next + huff] = 0;\n    table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n  }\n\n  /* set return parameters */\n  //opts.table_index += used;\n  opts.bits = root;\n  return 0;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n  2:      'need dictionary',     /* Z_NEED_DICT       2  */\n  1:      'stream end',          /* Z_STREAM_END      1  */\n  0:      '',                    /* Z_OK              0  */\n  '-1':   'file error',          /* Z_ERRNO         (-1) */\n  '-2':   'stream error',        /* Z_STREAM_ERROR  (-2) */\n  '-3':   'data error',          /* Z_DATA_ERROR    (-3) */\n  '-4':   'insufficient memory', /* Z_MEM_ERROR     (-4) */\n  '-5':   'buffer error',        /* Z_BUF_ERROR     (-5) */\n  '-6':   'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\nvar utils = require('../utils/common');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//var Z_FILTERED          = 1;\n//var Z_HUFFMAN_ONLY      = 2;\n//var Z_RLE               = 3;\nvar Z_FIXED               = 4;\n//var Z_DEFAULT_STRATEGY  = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nvar Z_BINARY              = 0;\nvar Z_TEXT                = 1;\n//var Z_ASCII             = 1; // = Z_TEXT\nvar Z_UNKNOWN             = 2;\n\n/*============================================================================*/\n\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nvar STORED_BLOCK = 0;\nvar STATIC_TREES = 1;\nvar DYN_TREES    = 2;\n/* The three kinds of block type */\n\nvar MIN_MATCH    = 3;\nvar MAX_MATCH    = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nvar LENGTH_CODES  = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nvar LITERALS      = 256;\n/* number of literal bytes 0..255 */\n\nvar L_CODES       = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nvar D_CODES       = 30;\n/* number of distance codes */\n\nvar BL_CODES      = 19;\n/* number of codes used to transfer the bit lengths */\n\nvar HEAP_SIZE     = 2 * L_CODES + 1;\n/* maximum heap size */\n\nvar MAX_BITS      = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar Buf_size      = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nvar MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nvar END_BLOCK   = 256;\n/* end of block literal code */\n\nvar REP_3_6     = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nvar REPZ_3_10   = 17;\n/* repeat a zero length 3-10 times  (3 bits of repeat count) */\n\nvar REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times  (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nvar extra_lbits =   /* extra bits for each length code */\n  [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];\n\nvar extra_dbits =   /* extra bits for each distance code */\n  [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];\n\nvar extra_blbits =  /* extra bits for each bit length code */\n  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];\n\nvar bl_order =\n  [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nvar DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nvar static_ltree  = new Array((L_CODES + 2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nvar static_dtree  = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nvar _dist_code    = new Array(DIST_CODE_LEN);\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nvar _length_code  = new Array(MAX_MATCH - MIN_MATCH + 1);\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nvar base_length   = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nvar base_dist     = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n  this.static_tree  = static_tree;  /* static tree or NULL */\n  this.extra_bits   = extra_bits;   /* extra bits for each code or NULL */\n  this.extra_base   = extra_base;   /* base index for extra_bits */\n  this.elems        = elems;        /* max number of elements in the tree */\n  this.max_length   = max_length;   /* max bit length for the codes */\n\n  // show if `static_tree` has data or dummy - needed for monomorphic objects\n  this.has_stree    = static_tree && static_tree.length;\n}\n\n\nvar static_l_desc;\nvar static_d_desc;\nvar static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n  this.dyn_tree = dyn_tree;     /* the dynamic tree */\n  this.max_code = 0;            /* largest code with non zero frequency */\n  this.stat_desc = stat_desc;   /* the corresponding static tree */\n}\n\n\n\nfunction d_code(dist) {\n  return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n}\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nfunction put_short(s, w) {\n//    put_byte(s, (uch)((w) & 0xff));\n//    put_byte(s, (uch)((ush)(w) >> 8));\n  s.pending_buf[s.pending++] = (w) & 0xff;\n  s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n}\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nfunction send_bits(s, value, length) {\n  if (s.bi_valid > (Buf_size - length)) {\n    s.bi_buf |= (value << s.bi_valid) & 0xffff;\n    put_short(s, s.bi_buf);\n    s.bi_buf = value >> (Buf_size - s.bi_valid);\n    s.bi_valid += length - Buf_size;\n  } else {\n    s.bi_buf |= (value << s.bi_valid) & 0xffff;\n    s.bi_valid += length;\n  }\n}\n\n\nfunction send_code(s, c, tree) {\n  send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n}\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nfunction bi_reverse(code, len) {\n  var res = 0;\n  do {\n    res |= code & 1;\n    code >>>= 1;\n    res <<= 1;\n  } while (--len > 0);\n  return res >>> 1;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nfunction bi_flush(s) {\n  if (s.bi_valid === 16) {\n    put_short(s, s.bi_buf);\n    s.bi_buf = 0;\n    s.bi_valid = 0;\n\n  } else if (s.bi_valid >= 8) {\n    s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n    s.bi_buf >>= 8;\n    s.bi_valid -= 8;\n  }\n}\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n *    above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n *     array bl_count contains the frequencies for each bit length.\n *     The length opt_len is updated; static_len is also updated if stree is\n *     not null.\n */\nfunction gen_bitlen(s, desc)\n//    deflate_state *s;\n//    tree_desc *desc;    /* the tree descriptor */\n{\n  var tree            = desc.dyn_tree;\n  var max_code        = desc.max_code;\n  var stree           = desc.stat_desc.static_tree;\n  var has_stree       = desc.stat_desc.has_stree;\n  var extra           = desc.stat_desc.extra_bits;\n  var base            = desc.stat_desc.extra_base;\n  var max_length      = desc.stat_desc.max_length;\n  var h;              /* heap index */\n  var n, m;           /* iterate over the tree elements */\n  var bits;           /* bit length */\n  var xbits;          /* extra bits */\n  var f;              /* frequency */\n  var overflow = 0;   /* number of elements with bit length too large */\n\n  for (bits = 0; bits <= MAX_BITS; bits++) {\n    s.bl_count[bits] = 0;\n  }\n\n  /* In a first pass, compute the optimal bit lengths (which may\n   * overflow in the case of the bit length tree).\n   */\n  tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n  for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n    n = s.heap[h];\n    bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n    if (bits > max_length) {\n      bits = max_length;\n      overflow++;\n    }\n    tree[n * 2 + 1]/*.Len*/ = bits;\n    /* We overwrite tree[n].Dad which is no longer needed */\n\n    if (n > max_code) { continue; } /* not a leaf node */\n\n    s.bl_count[bits]++;\n    xbits = 0;\n    if (n >= base) {\n      xbits = extra[n - base];\n    }\n    f = tree[n * 2]/*.Freq*/;\n    s.opt_len += f * (bits + xbits);\n    if (has_stree) {\n      s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n    }\n  }\n  if (overflow === 0) { return; }\n\n  // Trace((stderr,\"\\nbit length overflow\\n\"));\n  /* This happens for example on obj2 and pic of the Calgary corpus */\n\n  /* Find the first bit length which could increase: */\n  do {\n    bits = max_length - 1;\n    while (s.bl_count[bits] === 0) { bits--; }\n    s.bl_count[bits]--;      /* move one leaf down the tree */\n    s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n    s.bl_count[max_length]--;\n    /* The brother of the overflow item also moves one step up,\n     * but this does not affect bl_count[max_length]\n     */\n    overflow -= 2;\n  } while (overflow > 0);\n\n  /* Now recompute all bit lengths, scanning in increasing frequency.\n   * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n   * lengths instead of fixing only the wrong ones. This idea is taken\n   * from 'ar' written by Haruhiko Okumura.)\n   */\n  for (bits = max_length; bits !== 0; bits--) {\n    n = s.bl_count[bits];\n    while (n !== 0) {\n      m = s.heap[--h];\n      if (m > max_code) { continue; }\n      if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n        // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n        s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n        tree[m * 2 + 1]/*.Len*/ = bits;\n      }\n      n--;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n *     zero code length.\n */\nfunction gen_codes(tree, max_code, bl_count)\n//    ct_data *tree;             /* the tree to decorate */\n//    int max_code;              /* largest code with non zero frequency */\n//    ushf *bl_count;            /* number of codes at each bit length */\n{\n  var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */\n  var code = 0;              /* running code value */\n  var bits;                  /* bit index */\n  var n;                     /* code index */\n\n  /* The distribution counts are first used to generate the code values\n   * without bit reversal.\n   */\n  for (bits = 1; bits <= MAX_BITS; bits++) {\n    next_code[bits] = code = (code + bl_count[bits - 1]) << 1;\n  }\n  /* Check that the bit counts in bl_count are consistent. The last code\n   * must be all ones.\n   */\n  //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n  //        \"inconsistent bit counts\");\n  //Tracev((stderr,\"\\ngen_codes: max_code %d \", max_code));\n\n  for (n = 0;  n <= max_code; n++) {\n    var len = tree[n * 2 + 1]/*.Len*/;\n    if (len === 0) { continue; }\n    /* Now reverse the bits */\n    tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);\n\n    //Tracecv(tree != static_ltree, (stderr,\"\\nn %3d %c l %2d c %4x (%x) \",\n    //     n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));\n  }\n}\n\n\n/* ===========================================================================\n * Initialize the various 'constant' tables.\n */\nfunction tr_static_init() {\n  var n;        /* iterates over tree elements */\n  var bits;     /* bit counter */\n  var length;   /* length value */\n  var code;     /* code value */\n  var dist;     /* distance index */\n  var bl_count = new Array(MAX_BITS + 1);\n  /* number of codes at each bit length for an optimal tree */\n\n  // do check in _tr_init()\n  //if (static_init_done) return;\n\n  /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n  static_l_desc.static_tree = static_ltree;\n  static_l_desc.extra_bits = extra_lbits;\n  static_d_desc.static_tree = static_dtree;\n  static_d_desc.extra_bits = extra_dbits;\n  static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n  /* Initialize the mapping length (0..255) -> length code (0..28) */\n  length = 0;\n  for (code = 0; code < LENGTH_CODES - 1; code++) {\n    base_length[code] = length;\n    for (n = 0; n < (1 << extra_lbits[code]); n++) {\n      _length_code[length++] = code;\n    }\n  }\n  //Assert (length == 256, \"tr_static_init: length != 256\");\n  /* Note that the length 255 (match length 258) can be represented\n   * in two different ways: code 284 + 5 bits or code 285, so we\n   * overwrite length_code[255] to use the best encoding:\n   */\n  _length_code[length - 1] = code;\n\n  /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n  dist = 0;\n  for (code = 0; code < 16; code++) {\n    base_dist[code] = dist;\n    for (n = 0; n < (1 << extra_dbits[code]); n++) {\n      _dist_code[dist++] = code;\n    }\n  }\n  //Assert (dist == 256, \"tr_static_init: dist != 256\");\n  dist >>= 7; /* from now on, all distances are divided by 128 */\n  for (; code < D_CODES; code++) {\n    base_dist[code] = dist << 7;\n    for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n      _dist_code[256 + dist++] = code;\n    }\n  }\n  //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n  /* Construct the codes of the static literal tree */\n  for (bits = 0; bits <= MAX_BITS; bits++) {\n    bl_count[bits] = 0;\n  }\n\n  n = 0;\n  while (n <= 143) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 8;\n    n++;\n    bl_count[8]++;\n  }\n  while (n <= 255) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 9;\n    n++;\n    bl_count[9]++;\n  }\n  while (n <= 279) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 7;\n    n++;\n    bl_count[7]++;\n  }\n  while (n <= 287) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 8;\n    n++;\n    bl_count[8]++;\n  }\n  /* Codes 286 and 287 do not exist, but we must include them in the\n   * tree construction to get a canonical Huffman tree (longest code\n   * all ones)\n   */\n  gen_codes(static_ltree, L_CODES + 1, bl_count);\n\n  /* The static distance tree is trivial: */\n  for (n = 0; n < D_CODES; n++) {\n    static_dtree[n * 2 + 1]/*.Len*/ = 5;\n    static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n  }\n\n  // Now data ready and we can init static trees\n  static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n  static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0,          D_CODES, MAX_BITS);\n  static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0,         BL_CODES, MAX_BL_BITS);\n\n  //static_init_done = true;\n}\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nfunction init_block(s) {\n  var n; /* iterates over tree elements */\n\n  /* Initialize the trees. */\n  for (n = 0; n < L_CODES;  n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n  for (n = 0; n < D_CODES;  n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n  for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n  s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n  s.opt_len = s.static_len = 0;\n  s.last_lit = s.matches = 0;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nfunction bi_windup(s)\n{\n  if (s.bi_valid > 8) {\n    put_short(s, s.bi_buf);\n  } else if (s.bi_valid > 0) {\n    //put_byte(s, (Byte)s->bi_buf);\n    s.pending_buf[s.pending++] = s.bi_buf;\n  }\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n}\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nfunction copy_block(s, buf, len, header)\n//DeflateState *s;\n//charf    *buf;    /* the input data */\n//unsigned len;     /* its length */\n//int      header;  /* true if block header must be written */\n{\n  bi_windup(s);        /* align on byte boundary */\n\n  if (header) {\n    put_short(s, len);\n    put_short(s, ~len);\n  }\n//  while (len--) {\n//    put_byte(s, *buf++);\n//  }\n  utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);\n  s.pending += len;\n}\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nfunction smaller(tree, n, m, depth) {\n  var _n2 = n * 2;\n  var _m2 = m * 2;\n  return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n         (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n}\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nfunction pqdownheap(s, tree, k)\n//    deflate_state *s;\n//    ct_data *tree;  /* the tree to restore */\n//    int k;               /* node to move down */\n{\n  var v = s.heap[k];\n  var j = k << 1;  /* left son of k */\n  while (j <= s.heap_len) {\n    /* Set j to the smallest of the two sons: */\n    if (j < s.heap_len &&\n      smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n      j++;\n    }\n    /* Exit if v is smaller than both sons */\n    if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n    /* Exchange v with the smallest son */\n    s.heap[k] = s.heap[j];\n    k = j;\n\n    /* And continue down the tree, setting j to the left son of k */\n    j <<= 1;\n  }\n  s.heap[k] = v;\n}\n\n\n// inlined manually\n// var SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nfunction compress_block(s, ltree, dtree)\n//    deflate_state *s;\n//    const ct_data *ltree; /* literal tree */\n//    const ct_data *dtree; /* distance tree */\n{\n  var dist;           /* distance of matched string */\n  var lc;             /* match length or unmatched char (if dist == 0) */\n  var lx = 0;         /* running index in l_buf */\n  var code;           /* the code to send */\n  var extra;          /* number of extra bits to send */\n\n  if (s.last_lit !== 0) {\n    do {\n      dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);\n      lc = s.pending_buf[s.l_buf + lx];\n      lx++;\n\n      if (dist === 0) {\n        send_code(s, lc, ltree); /* send a literal byte */\n        //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n      } else {\n        /* Here, lc is the match length - MIN_MATCH */\n        code = _length_code[lc];\n        send_code(s, code + LITERALS + 1, ltree); /* send the length code */\n        extra = extra_lbits[code];\n        if (extra !== 0) {\n          lc -= base_length[code];\n          send_bits(s, lc, extra);       /* send the extra length bits */\n        }\n        dist--; /* dist is now the match distance - 1 */\n        code = d_code(dist);\n        //Assert (code < D_CODES, \"bad d_code\");\n\n        send_code(s, code, dtree);       /* send the distance code */\n        extra = extra_dbits[code];\n        if (extra !== 0) {\n          dist -= base_dist[code];\n          send_bits(s, dist, extra);   /* send the extra distance bits */\n        }\n      } /* literal or match pair ? */\n\n      /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n      //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n      //       \"pendingBuf overflow\");\n\n    } while (lx < s.last_lit);\n  }\n\n  send_code(s, END_BLOCK, ltree);\n}\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n *     and corresponding code. The length opt_len is updated; static_len is\n *     also updated if stree is not null. The field max_code is set.\n */\nfunction build_tree(s, desc)\n//    deflate_state *s;\n//    tree_desc *desc; /* the tree descriptor */\n{\n  var tree     = desc.dyn_tree;\n  var stree    = desc.stat_desc.static_tree;\n  var has_stree = desc.stat_desc.has_stree;\n  var elems    = desc.stat_desc.elems;\n  var n, m;          /* iterate over heap elements */\n  var max_code = -1; /* largest code with non zero frequency */\n  var node;          /* new node being created */\n\n  /* Construct the initial heap, with least frequent element in\n   * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n   * heap[0] is not used.\n   */\n  s.heap_len = 0;\n  s.heap_max = HEAP_SIZE;\n\n  for (n = 0; n < elems; n++) {\n    if (tree[n * 2]/*.Freq*/ !== 0) {\n      s.heap[++s.heap_len] = max_code = n;\n      s.depth[n] = 0;\n\n    } else {\n      tree[n * 2 + 1]/*.Len*/ = 0;\n    }\n  }\n\n  /* The pkzip format requires that at least one distance code exists,\n   * and that at least one bit should be sent even if there is only one\n   * possible code. So to avoid special checks later on we force at least\n   * two codes of non zero frequency.\n   */\n  while (s.heap_len < 2) {\n    node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n    tree[node * 2]/*.Freq*/ = 1;\n    s.depth[node] = 0;\n    s.opt_len--;\n\n    if (has_stree) {\n      s.static_len -= stree[node * 2 + 1]/*.Len*/;\n    }\n    /* node is 0 or 1 so it does not have extra bits */\n  }\n  desc.max_code = max_code;\n\n  /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n   * establish sub-heaps of increasing lengths:\n   */\n  for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n  /* Construct the Huffman tree by repeatedly combining the least two\n   * frequent nodes.\n   */\n  node = elems;              /* next internal node of the tree */\n  do {\n    //pqremove(s, tree, n);  /* n = node of least frequency */\n    /*** pqremove ***/\n    n = s.heap[1/*SMALLEST*/];\n    s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n    pqdownheap(s, tree, 1/*SMALLEST*/);\n    /***/\n\n    m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n    s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n    s.heap[--s.heap_max] = m;\n\n    /* Create a new node father of n and m */\n    tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n    s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n    tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n    /* and insert the new node in the heap */\n    s.heap[1/*SMALLEST*/] = node++;\n    pqdownheap(s, tree, 1/*SMALLEST*/);\n\n  } while (s.heap_len >= 2);\n\n  s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n  /* At this point, the fields freq and dad are set. We can now\n   * generate the bit lengths.\n   */\n  gen_bitlen(s, desc);\n\n  /* The field len is now set, we can generate the bit codes */\n  gen_codes(tree, max_code, s.bl_count);\n}\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nfunction scan_tree(s, tree, max_code)\n//    deflate_state *s;\n//    ct_data *tree;   /* the tree to be scanned */\n//    int max_code;    /* and its largest code of non zero frequency */\n{\n  var n;                     /* iterates over all tree elements */\n  var prevlen = -1;          /* last emitted length */\n  var curlen;                /* length of current code */\n\n  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n  var count = 0;             /* repeat count of the current code */\n  var max_count = 7;         /* max repeat count */\n  var min_count = 4;         /* min repeat count */\n\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n  tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n\n    } else if (count < min_count) {\n      s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n    } else if (curlen !== 0) {\n\n      if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n      s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n    } else if (count <= 10) {\n      s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n    } else {\n      s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n    }\n\n    count = 0;\n    prevlen = curlen;\n\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nfunction send_tree(s, tree, max_code)\n//    deflate_state *s;\n//    ct_data *tree; /* the tree to be scanned */\n//    int max_code;       /* and its largest code of non zero frequency */\n{\n  var n;                     /* iterates over all tree elements */\n  var prevlen = -1;          /* last emitted length */\n  var curlen;                /* length of current code */\n\n  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n  var count = 0;             /* repeat count of the current code */\n  var max_count = 7;         /* max repeat count */\n  var min_count = 4;         /* min repeat count */\n\n  /* tree[max_code+1].Len = -1; */  /* guard already set */\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n\n    } else if (count < min_count) {\n      do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n    } else if (curlen !== 0) {\n      if (curlen !== prevlen) {\n        send_code(s, curlen, s.bl_tree);\n        count--;\n      }\n      //Assert(count >= 3 && count <= 6, \" 3_6?\");\n      send_code(s, REP_3_6, s.bl_tree);\n      send_bits(s, count - 3, 2);\n\n    } else if (count <= 10) {\n      send_code(s, REPZ_3_10, s.bl_tree);\n      send_bits(s, count - 3, 3);\n\n    } else {\n      send_code(s, REPZ_11_138, s.bl_tree);\n      send_bits(s, count - 11, 7);\n    }\n\n    count = 0;\n    prevlen = curlen;\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nfunction build_bl_tree(s) {\n  var max_blindex;  /* index of last bit length code of non zero freq */\n\n  /* Determine the bit length frequencies for literal and distance trees */\n  scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n  scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n  /* Build the bit length tree: */\n  build_tree(s, s.bl_desc);\n  /* opt_len now includes the length of the tree representations, except\n   * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n   */\n\n  /* Determine the number of bit length codes to send. The pkzip format\n   * requires that at least 4 bit length codes be sent. (appnote.txt says\n   * 3 but the actual value used is 4.)\n   */\n  for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n    if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n      break;\n    }\n  }\n  /* Update opt_len to include the bit length tree and counts */\n  s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n  //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n  //        s->opt_len, s->static_len));\n\n  return max_blindex;\n}\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nfunction send_all_trees(s, lcodes, dcodes, blcodes)\n//    deflate_state *s;\n//    int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n  var rank;                    /* index in bl_order */\n\n  //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n  //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n  //        \"too many codes\");\n  //Tracev((stderr, \"\\nbl counts: \"));\n  send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n  send_bits(s, dcodes - 1,   5);\n  send_bits(s, blcodes - 4,  4); /* not -3 as stated in appnote.txt */\n  for (rank = 0; rank < blcodes; rank++) {\n    //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n    send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n  }\n  //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n  send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n  //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n  send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n  //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n}\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n *    a) There are no non-portable control characters belonging to the\n *       \"black list\" (0..6, 14..25, 28..31).\n *    b) There is at least one printable character belonging to the\n *       \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n *   \"gray list\" that is ignored in this detection algorithm:\n *   (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nfunction detect_data_type(s) {\n  /* black_mask is the bit mask of black-listed bytes\n   * set bits 0..6, 14..25, and 28..31\n   * 0xf3ffc07f = binary 11110011111111111100000001111111\n   */\n  var black_mask = 0xf3ffc07f;\n  var n;\n\n  /* Check for non-textual (\"black-listed\") bytes. */\n  for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n    if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n      return Z_BINARY;\n    }\n  }\n\n  /* Check for textual (\"white-listed\") bytes. */\n  if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n      s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n    return Z_TEXT;\n  }\n  for (n = 32; n < LITERALS; n++) {\n    if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n      return Z_TEXT;\n    }\n  }\n\n  /* There are no \"black-listed\" or \"white-listed\" bytes:\n   * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n   */\n  return Z_BINARY;\n}\n\n\nvar static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nfunction _tr_init(s)\n{\n\n  if (!static_init_done) {\n    tr_static_init();\n    static_init_done = true;\n  }\n\n  s.l_desc  = new TreeDesc(s.dyn_ltree, static_l_desc);\n  s.d_desc  = new TreeDesc(s.dyn_dtree, static_d_desc);\n  s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n\n  /* Initialize the first block of the first file: */\n  init_block(s);\n}\n\n\n/* ===========================================================================\n * Send a stored block\n */\nfunction _tr_stored_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf;       /* input block */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3);    /* send block type */\n  copy_block(s, buf, stored_len, true); /* with header */\n}\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nfunction _tr_align(s) {\n  send_bits(s, STATIC_TREES << 1, 3);\n  send_code(s, END_BLOCK, static_ltree);\n  bi_flush(s);\n}\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nfunction _tr_flush_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf;       /* input block, or NULL if too old */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  var opt_lenb, static_lenb;  /* opt_len and static_len in bytes */\n  var max_blindex = 0;        /* index of last bit length code of non zero freq */\n\n  /* Build the Huffman trees unless a stored block is forced */\n  if (s.level > 0) {\n\n    /* Check if the file is binary or text */\n    if (s.strm.data_type === Z_UNKNOWN) {\n      s.strm.data_type = detect_data_type(s);\n    }\n\n    /* Construct the literal and distance trees */\n    build_tree(s, s.l_desc);\n    // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n    //        s->static_len));\n\n    build_tree(s, s.d_desc);\n    // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n    //        s->static_len));\n    /* At this point, opt_len and static_len are the total bit lengths of\n     * the compressed block data, excluding the tree representations.\n     */\n\n    /* Build the bit length tree for the above two trees, and get the index\n     * in bl_order of the last bit length code to send.\n     */\n    max_blindex = build_bl_tree(s);\n\n    /* Determine the best encoding. Compute the block lengths in bytes. */\n    opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n    static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n    // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n    //        opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n    //        s->last_lit));\n\n    if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n  } else {\n    // Assert(buf != (char*)0, \"lost buf\");\n    opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n  }\n\n  if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n    /* 4: two words for the lengths */\n\n    /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n     * Otherwise we can't have processed more than WSIZE input bytes since\n     * the last block flush, because compression would have been\n     * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n     * transform a block into a stored block.\n     */\n    _tr_stored_block(s, buf, stored_len, last);\n\n  } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n    send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n    compress_block(s, static_ltree, static_dtree);\n\n  } else {\n    send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n    send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n    compress_block(s, s.dyn_ltree, s.dyn_dtree);\n  }\n  // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n  /* The above check is made mod 2^32, for files larger than 512 MB\n   * and uLong implemented on 32 bits.\n   */\n  init_block(s);\n\n  if (last) {\n    bi_windup(s);\n  }\n  // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n  //       s->compressed_len-7*last));\n}\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nfunction _tr_tally(s, dist, lc)\n//    deflate_state *s;\n//    unsigned dist;  /* distance of matched string */\n//    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n  //var out_length, in_length, dcode;\n\n  s.pending_buf[s.d_buf + s.last_lit * 2]     = (dist >>> 8) & 0xff;\n  s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n  s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n  s.last_lit++;\n\n  if (dist === 0) {\n    /* lc is the unmatched char */\n    s.dyn_ltree[lc * 2]/*.Freq*/++;\n  } else {\n    s.matches++;\n    /* Here, lc is the match length - MIN_MATCH */\n    dist--;             /* dist = match distance - 1 */\n    //Assert((ush)dist < (ush)MAX_DIST(s) &&\n    //       (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n    //       (ush)d_code(dist) < (ush)D_CODES,  \"_tr_tally: bad match\");\n\n    s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;\n    s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n  }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n//  /* Try to guess if it is profitable to stop the current block here */\n//  if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n//    /* Compute an upper bound for the compressed length */\n//    out_length = s.last_lit*8;\n//    in_length = s.strstart - s.block_start;\n//\n//    for (dcode = 0; dcode < D_CODES; dcode++) {\n//      out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n//    }\n//    out_length >>>= 3;\n//    //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n//    //       s->last_lit, in_length, out_length,\n//    //       100L - out_length*100L/in_length));\n//    if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n//      return true;\n//    }\n//  }\n//#endif\n\n  return (s.last_lit === s.lit_bufsize - 1);\n  /* We avoid equality with lit_bufsize because of wraparound at 64K\n   * on 16 bit machines and because stored blocks are restricted to\n   * 64K-1 bytes.\n   */\n}\n\nexports._tr_init  = _tr_init;\nexports._tr_stored_block = _tr_stored_block;\nexports._tr_flush_block  = _tr_flush_block;\nexports._tr_tally = _tr_tally;\nexports._tr_align = _tr_align;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n  /* next input byte */\n  this.input = null; // JS specific, because we have no pointers\n  this.next_in = 0;\n  /* number of bytes available at input */\n  this.avail_in = 0;\n  /* total number of input bytes read so far */\n  this.total_in = 0;\n  /* next output byte should be put there */\n  this.output = null; // JS specific, because we have no pointers\n  this.next_out = 0;\n  /* remaining free space at output */\n  this.avail_out = 0;\n  /* total number of bytes output so far */\n  this.total_out = 0;\n  /* last error message, NULL if no error */\n  this.msg = ''/*Z_NULL*/;\n  /* not visible by applications */\n  this.state = null;\n  /* best guess about the data type: binary or text */\n  this.data_type = 2/*Z_UNKNOWN*/;\n  /* adler32 value of the uncompressed data */\n  this.adler = 0;\n}\n\nmodule.exports = ZStream;\n","'use strict';\n\n/** @type {import('.')} */\nmodule.exports = [\n\t'Float32Array',\n\t'Float64Array',\n\t'Int8Array',\n\t'Int16Array',\n\t'Int32Array',\n\t'Uint8Array',\n\t'Uint8ClampedArray',\n\t'Uint16Array',\n\t'Uint32Array',\n\t'BigInt64Array',\n\t'BigUint64Array'\n];\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","'use strict';\n\nvar setFunctionName = require('set-function-name');\nvar $TypeError = require('es-errors/type');\n\nvar $Object = Object;\n\nmodule.exports = setFunctionName(function flags() {\n\tif (this == null || this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.hasIndices) {\n\t\tresult += 'd';\n\t}\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.unicodeSets) {\n\t\tresult += 'v';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n}, 'get flags', true);\n\n","'use strict';\n\nvar define = require('define-properties');\nvar callBind = require('call-bind');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar flagsBound = callBind(getPolyfill());\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nvar supportsDescriptors = require('define-properties').supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function getPolyfill() {\n\tif (supportsDescriptors && (/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (\n\t\t\tdescriptor\n\t\t\t&& typeof descriptor.get === 'function'\n\t\t\t&& typeof RegExp.prototype.dotAll === 'boolean'\n\t\t\t&& typeof RegExp.prototype.hasIndices === 'boolean'\n\t\t) {\n\t\t\t/* eslint getter-return: 0 */\n\t\t\tvar calls = '';\n\t\t\tvar o = {};\n\t\t\tObject.defineProperty(o, 'hasIndices', {\n\t\t\t\tget: function () {\n\t\t\t\t\tcalls += 'd';\n\t\t\t\t}\n\t\t\t});\n\t\t\tObject.defineProperty(o, 'sticky', {\n\t\t\t\tget: function () {\n\t\t\t\t\tcalls += 'y';\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (calls === 'dy') {\n\t\t\t\treturn descriptor.get;\n\t\t\t}\n\t\t}\n\t}\n\treturn implementation;\n};\n","'use strict';\n\nvar supportsDescriptors = require('define-properties').supportsDescriptors;\nvar getPolyfill = require('./polyfill');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n",";(function (sax) { // wrapper for non-node envs\n  sax.parser = function (strict, opt) { return new SAXParser(strict, opt) }\n  sax.SAXParser = SAXParser\n  sax.SAXStream = SAXStream\n  sax.createStream = createStream\n\n  // When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns.\n  // When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)),\n  // since that's the earliest that a buffer overrun could occur.  This way, checks are\n  // as rare as required, but as often as necessary to ensure never crossing this bound.\n  // Furthermore, buffers are only tested at most once per write(), so passing a very\n  // large string into write() might have undesirable effects, but this is manageable by\n  // the caller, so it is assumed to be safe.  Thus, a call to write() may, in the extreme\n  // edge case, result in creating at most one complete copy of the string passed in.\n  // Set to Infinity to have unlimited buffers.\n  sax.MAX_BUFFER_LENGTH = 64 * 1024\n\n  var buffers = [\n    'comment', 'sgmlDecl', 'textNode', 'tagName', 'doctype',\n    'procInstName', 'procInstBody', 'entity', 'attribName',\n    'attribValue', 'cdata', 'script'\n  ]\n\n  sax.EVENTS = [\n    'text',\n    'processinginstruction',\n    'sgmldeclaration',\n    'doctype',\n    'comment',\n    'opentagstart',\n    'attribute',\n    'opentag',\n    'closetag',\n    'opencdata',\n    'cdata',\n    'closecdata',\n    'error',\n    'end',\n    'ready',\n    'script',\n    'opennamespace',\n    'closenamespace'\n  ]\n\n  function SAXParser (strict, opt) {\n    if (!(this instanceof SAXParser)) {\n      return new SAXParser(strict, opt)\n    }\n\n    var parser = this\n    clearBuffers(parser)\n    parser.q = parser.c = ''\n    parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH\n    parser.opt = opt || {}\n    parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags\n    parser.looseCase = parser.opt.lowercase ? 'toLowerCase' : 'toUpperCase'\n    parser.tags = []\n    parser.closed = parser.closedRoot = parser.sawRoot = false\n    parser.tag = parser.error = null\n    parser.strict = !!strict\n    parser.noscript = !!(strict || parser.opt.noscript)\n    parser.state = S.BEGIN\n    parser.strictEntities = parser.opt.strictEntities\n    parser.ENTITIES = parser.strictEntities ? Object.create(sax.XML_ENTITIES) : Object.create(sax.ENTITIES)\n    parser.attribList = []\n\n    // namespaces form a prototype chain.\n    // it always points at the current tag,\n    // which protos to its parent tag.\n    if (parser.opt.xmlns) {\n      parser.ns = Object.create(rootNS)\n    }\n\n    // mostly just for error reporting\n    parser.trackPosition = parser.opt.position !== false\n    if (parser.trackPosition) {\n      parser.position = parser.line = parser.column = 0\n    }\n    emit(parser, 'onready')\n  }\n\n  if (!Object.create) {\n    Object.create = function (o) {\n      function F () {}\n      F.prototype = o\n      var newf = new F()\n      return newf\n    }\n  }\n\n  if (!Object.keys) {\n    Object.keys = function (o) {\n      var a = []\n      for (var i in o) if (o.hasOwnProperty(i)) a.push(i)\n      return a\n    }\n  }\n\n  function checkBufferLength (parser) {\n    var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10)\n    var maxActual = 0\n    for (var i = 0, l = buffers.length; i < l; i++) {\n      var len = parser[buffers[i]].length\n      if (len > maxAllowed) {\n        // Text/cdata nodes can get big, and since they're buffered,\n        // we can get here under normal conditions.\n        // Avoid issues by emitting the text node now,\n        // so at least it won't get any bigger.\n        switch (buffers[i]) {\n          case 'textNode':\n            closeText(parser)\n            break\n\n          case 'cdata':\n            emitNode(parser, 'oncdata', parser.cdata)\n            parser.cdata = ''\n            break\n\n          case 'script':\n            emitNode(parser, 'onscript', parser.script)\n            parser.script = ''\n            break\n\n          default:\n            error(parser, 'Max buffer length exceeded: ' + buffers[i])\n        }\n      }\n      maxActual = Math.max(maxActual, len)\n    }\n    // schedule the next check for the earliest possible buffer overrun.\n    var m = sax.MAX_BUFFER_LENGTH - maxActual\n    parser.bufferCheckPosition = m + parser.position\n  }\n\n  function clearBuffers (parser) {\n    for (var i = 0, l = buffers.length; i < l; i++) {\n      parser[buffers[i]] = ''\n    }\n  }\n\n  function flushBuffers (parser) {\n    closeText(parser)\n    if (parser.cdata !== '') {\n      emitNode(parser, 'oncdata', parser.cdata)\n      parser.cdata = ''\n    }\n    if (parser.script !== '') {\n      emitNode(parser, 'onscript', parser.script)\n      parser.script = ''\n    }\n  }\n\n  SAXParser.prototype = {\n    end: function () { end(this) },\n    write: write,\n    resume: function () { this.error = null; return this },\n    close: function () { return this.write(null) },\n    flush: function () { flushBuffers(this) }\n  }\n\n  var Stream\n  try {\n    Stream = require('stream').Stream\n  } catch (ex) {\n    Stream = function () {}\n  }\n  if (!Stream) Stream = function () {}\n\n  var streamWraps = sax.EVENTS.filter(function (ev) {\n    return ev !== 'error' && ev !== 'end'\n  })\n\n  function createStream (strict, opt) {\n    return new SAXStream(strict, opt)\n  }\n\n  function SAXStream (strict, opt) {\n    if (!(this instanceof SAXStream)) {\n      return new SAXStream(strict, opt)\n    }\n\n    Stream.apply(this)\n\n    this._parser = new SAXParser(strict, opt)\n    this.writable = true\n    this.readable = true\n\n    var me = this\n\n    this._parser.onend = function () {\n      me.emit('end')\n    }\n\n    this._parser.onerror = function (er) {\n      me.emit('error', er)\n\n      // if didn't throw, then means error was handled.\n      // go ahead and clear error, so we can write again.\n      me._parser.error = null\n    }\n\n    this._decoder = null\n\n    streamWraps.forEach(function (ev) {\n      Object.defineProperty(me, 'on' + ev, {\n        get: function () {\n          return me._parser['on' + ev]\n        },\n        set: function (h) {\n          if (!h) {\n            me.removeAllListeners(ev)\n            me._parser['on' + ev] = h\n            return h\n          }\n          me.on(ev, h)\n        },\n        enumerable: true,\n        configurable: false\n      })\n    })\n  }\n\n  SAXStream.prototype = Object.create(Stream.prototype, {\n    constructor: {\n      value: SAXStream\n    }\n  })\n\n  SAXStream.prototype.write = function (data) {\n    if (typeof Buffer === 'function' &&\n      typeof Buffer.isBuffer === 'function' &&\n      Buffer.isBuffer(data)) {\n      if (!this._decoder) {\n        var SD = require('string_decoder').StringDecoder\n        this._decoder = new SD('utf8')\n      }\n      data = this._decoder.write(data)\n    }\n\n    this._parser.write(data.toString())\n    this.emit('data', data)\n    return true\n  }\n\n  SAXStream.prototype.end = function (chunk) {\n    if (chunk && chunk.length) {\n      this.write(chunk)\n    }\n    this._parser.end()\n    return true\n  }\n\n  SAXStream.prototype.on = function (ev, handler) {\n    var me = this\n    if (!me._parser['on' + ev] && streamWraps.indexOf(ev) !== -1) {\n      me._parser['on' + ev] = function () {\n        var args = arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments)\n        args.splice(0, 0, ev)\n        me.emit.apply(me, args)\n      }\n    }\n\n    return Stream.prototype.on.call(me, ev, handler)\n  }\n\n  // this really needs to be replaced with character classes.\n  // XML allows all manner of ridiculous numbers and digits.\n  var CDATA = '[CDATA['\n  var DOCTYPE = 'DOCTYPE'\n  var XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace'\n  var XMLNS_NAMESPACE = 'http://www.w3.org/2000/xmlns/'\n  var rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE }\n\n  // http://www.w3.org/TR/REC-xml/#NT-NameStartChar\n  // This implementation works on strings, a single character at a time\n  // as such, it cannot ever support astral-plane characters (10000-EFFFF)\n  // without a significant breaking change to either this  parser, or the\n  // JavaScript language.  Implementation of an emoji-capable xml parser\n  // is left as an exercise for the reader.\n  var nameStart = /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/\n\n  var nameBody = /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/\n\n  var entityStart = /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/\n  var entityBody = /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/\n\n  function isWhitespace (c) {\n    return c === ' ' || c === '\\n' || c === '\\r' || c === '\\t'\n  }\n\n  function isQuote (c) {\n    return c === '\"' || c === '\\''\n  }\n\n  function isAttribEnd (c) {\n    return c === '>' || isWhitespace(c)\n  }\n\n  function isMatch (regex, c) {\n    return regex.test(c)\n  }\n\n  function notMatch (regex, c) {\n    return !isMatch(regex, c)\n  }\n\n  var S = 0\n  sax.STATE = {\n    BEGIN: S++, // leading byte order mark or whitespace\n    BEGIN_WHITESPACE: S++, // leading whitespace\n    TEXT: S++, // general stuff\n    TEXT_ENTITY: S++, // &amp and such.\n    OPEN_WAKA: S++, // <\n    SGML_DECL: S++, // <!BLARG\n    SGML_DECL_QUOTED: S++, // <!BLARG foo \"bar\n    DOCTYPE: S++, // <!DOCTYPE\n    DOCTYPE_QUOTED: S++, // <!DOCTYPE \"//blah\n    DOCTYPE_DTD: S++, // <!DOCTYPE \"//blah\" [ ...\n    DOCTYPE_DTD_QUOTED: S++, // <!DOCTYPE \"//blah\" [ \"foo\n    COMMENT_STARTING: S++, // <!-\n    COMMENT: S++, // <!--\n    COMMENT_ENDING: S++, // <!-- blah -\n    COMMENT_ENDED: S++, // <!-- blah --\n    CDATA: S++, // <![CDATA[ something\n    CDATA_ENDING: S++, // ]\n    CDATA_ENDING_2: S++, // ]]\n    PROC_INST: S++, // <?hi\n    PROC_INST_BODY: S++, // <?hi there\n    PROC_INST_ENDING: S++, // <?hi \"there\" ?\n    OPEN_TAG: S++, // <strong\n    OPEN_TAG_SLASH: S++, // <strong /\n    ATTRIB: S++, // <a\n    ATTRIB_NAME: S++, // <a foo\n    ATTRIB_NAME_SAW_WHITE: S++, // <a foo _\n    ATTRIB_VALUE: S++, // <a foo=\n    ATTRIB_VALUE_QUOTED: S++, // <a foo=\"bar\n    ATTRIB_VALUE_CLOSED: S++, // <a foo=\"bar\"\n    ATTRIB_VALUE_UNQUOTED: S++, // <a foo=bar\n    ATTRIB_VALUE_ENTITY_Q: S++, // <foo bar=\"&quot;\"\n    ATTRIB_VALUE_ENTITY_U: S++, // <foo bar=&quot\n    CLOSE_TAG: S++, // </a\n    CLOSE_TAG_SAW_WHITE: S++, // </a   >\n    SCRIPT: S++, // <script> ...\n    SCRIPT_ENDING: S++ // <script> ... <\n  }\n\n  sax.XML_ENTITIES = {\n    'amp': '&',\n    'gt': '>',\n    'lt': '<',\n    'quot': '\"',\n    'apos': \"'\"\n  }\n\n  sax.ENTITIES = {\n    'amp': '&',\n    'gt': '>',\n    'lt': '<',\n    'quot': '\"',\n    'apos': \"'\",\n    'AElig': 198,\n    'Aacute': 193,\n    'Acirc': 194,\n    'Agrave': 192,\n    'Aring': 197,\n    'Atilde': 195,\n    'Auml': 196,\n    'Ccedil': 199,\n    'ETH': 208,\n    'Eacute': 201,\n    'Ecirc': 202,\n    'Egrave': 200,\n    'Euml': 203,\n    'Iacute': 205,\n    'Icirc': 206,\n    'Igrave': 204,\n    'Iuml': 207,\n    'Ntilde': 209,\n    'Oacute': 211,\n    'Ocirc': 212,\n    'Ograve': 210,\n    'Oslash': 216,\n    'Otilde': 213,\n    'Ouml': 214,\n    'THORN': 222,\n    'Uacute': 218,\n    'Ucirc': 219,\n    'Ugrave': 217,\n    'Uuml': 220,\n    'Yacute': 221,\n    'aacute': 225,\n    'acirc': 226,\n    'aelig': 230,\n    'agrave': 224,\n    'aring': 229,\n    'atilde': 227,\n    'auml': 228,\n    'ccedil': 231,\n    'eacute': 233,\n    'ecirc': 234,\n    'egrave': 232,\n    'eth': 240,\n    'euml': 235,\n    'iacute': 237,\n    'icirc': 238,\n    'igrave': 236,\n    'iuml': 239,\n    'ntilde': 241,\n    'oacute': 243,\n    'ocirc': 244,\n    'ograve': 242,\n    'oslash': 248,\n    'otilde': 245,\n    'ouml': 246,\n    'szlig': 223,\n    'thorn': 254,\n    'uacute': 250,\n    'ucirc': 251,\n    'ugrave': 249,\n    'uuml': 252,\n    'yacute': 253,\n    'yuml': 255,\n    'copy': 169,\n    'reg': 174,\n    'nbsp': 160,\n    'iexcl': 161,\n    'cent': 162,\n    'pound': 163,\n    'curren': 164,\n    'yen': 165,\n    'brvbar': 166,\n    'sect': 167,\n    'uml': 168,\n    'ordf': 170,\n    'laquo': 171,\n    'not': 172,\n    'shy': 173,\n    'macr': 175,\n    'deg': 176,\n    'plusmn': 177,\n    'sup1': 185,\n    'sup2': 178,\n    'sup3': 179,\n    'acute': 180,\n    'micro': 181,\n    'para': 182,\n    'middot': 183,\n    'cedil': 184,\n    'ordm': 186,\n    'raquo': 187,\n    'frac14': 188,\n    'frac12': 189,\n    'frac34': 190,\n    'iquest': 191,\n    'times': 215,\n    'divide': 247,\n    'OElig': 338,\n    'oelig': 339,\n    'Scaron': 352,\n    'scaron': 353,\n    'Yuml': 376,\n    'fnof': 402,\n    'circ': 710,\n    'tilde': 732,\n    'Alpha': 913,\n    'Beta': 914,\n    'Gamma': 915,\n    'Delta': 916,\n    'Epsilon': 917,\n    'Zeta': 918,\n    'Eta': 919,\n    'Theta': 920,\n    'Iota': 921,\n    'Kappa': 922,\n    'Lambda': 923,\n    'Mu': 924,\n    'Nu': 925,\n    'Xi': 926,\n    'Omicron': 927,\n    'Pi': 928,\n    'Rho': 929,\n    'Sigma': 931,\n    'Tau': 932,\n    'Upsilon': 933,\n    'Phi': 934,\n    'Chi': 935,\n    'Psi': 936,\n    'Omega': 937,\n    'alpha': 945,\n    'beta': 946,\n    'gamma': 947,\n    'delta': 948,\n    'epsilon': 949,\n    'zeta': 950,\n    'eta': 951,\n    'theta': 952,\n    'iota': 953,\n    'kappa': 954,\n    'lambda': 955,\n    'mu': 956,\n    'nu': 957,\n    'xi': 958,\n    'omicron': 959,\n    'pi': 960,\n    'rho': 961,\n    'sigmaf': 962,\n    'sigma': 963,\n    'tau': 964,\n    'upsilon': 965,\n    'phi': 966,\n    'chi': 967,\n    'psi': 968,\n    'omega': 969,\n    'thetasym': 977,\n    'upsih': 978,\n    'piv': 982,\n    'ensp': 8194,\n    'emsp': 8195,\n    'thinsp': 8201,\n    'zwnj': 8204,\n    'zwj': 8205,\n    'lrm': 8206,\n    'rlm': 8207,\n    'ndash': 8211,\n    'mdash': 8212,\n    'lsquo': 8216,\n    'rsquo': 8217,\n    'sbquo': 8218,\n    'ldquo': 8220,\n    'rdquo': 8221,\n    'bdquo': 8222,\n    'dagger': 8224,\n    'Dagger': 8225,\n    'bull': 8226,\n    'hellip': 8230,\n    'permil': 8240,\n    'prime': 8242,\n    'Prime': 8243,\n    'lsaquo': 8249,\n    'rsaquo': 8250,\n    'oline': 8254,\n    'frasl': 8260,\n    'euro': 8364,\n    'image': 8465,\n    'weierp': 8472,\n    'real': 8476,\n    'trade': 8482,\n    'alefsym': 8501,\n    'larr': 8592,\n    'uarr': 8593,\n    'rarr': 8594,\n    'darr': 8595,\n    'harr': 8596,\n    'crarr': 8629,\n    'lArr': 8656,\n    'uArr': 8657,\n    'rArr': 8658,\n    'dArr': 8659,\n    'hArr': 8660,\n    'forall': 8704,\n    'part': 8706,\n    'exist': 8707,\n    'empty': 8709,\n    'nabla': 8711,\n    'isin': 8712,\n    'notin': 8713,\n    'ni': 8715,\n    'prod': 8719,\n    'sum': 8721,\n    'minus': 8722,\n    'lowast': 8727,\n    'radic': 8730,\n    'prop': 8733,\n    'infin': 8734,\n    'ang': 8736,\n    'and': 8743,\n    'or': 8744,\n    'cap': 8745,\n    'cup': 8746,\n    'int': 8747,\n    'there4': 8756,\n    'sim': 8764,\n    'cong': 8773,\n    'asymp': 8776,\n    'ne': 8800,\n    'equiv': 8801,\n    'le': 8804,\n    'ge': 8805,\n    'sub': 8834,\n    'sup': 8835,\n    'nsub': 8836,\n    'sube': 8838,\n    'supe': 8839,\n    'oplus': 8853,\n    'otimes': 8855,\n    'perp': 8869,\n    'sdot': 8901,\n    'lceil': 8968,\n    'rceil': 8969,\n    'lfloor': 8970,\n    'rfloor': 8971,\n    'lang': 9001,\n    'rang': 9002,\n    'loz': 9674,\n    'spades': 9824,\n    'clubs': 9827,\n    'hearts': 9829,\n    'diams': 9830\n  }\n\n  Object.keys(sax.ENTITIES).forEach(function (key) {\n    var e = sax.ENTITIES[key]\n    var s = typeof e === 'number' ? String.fromCharCode(e) : e\n    sax.ENTITIES[key] = s\n  })\n\n  for (var s in sax.STATE) {\n    sax.STATE[sax.STATE[s]] = s\n  }\n\n  // shorthand\n  S = sax.STATE\n\n  function emit (parser, event, data) {\n    parser[event] && parser[event](data)\n  }\n\n  function emitNode (parser, nodeType, data) {\n    if (parser.textNode) closeText(parser)\n    emit(parser, nodeType, data)\n  }\n\n  function closeText (parser) {\n    parser.textNode = textopts(parser.opt, parser.textNode)\n    if (parser.textNode) emit(parser, 'ontext', parser.textNode)\n    parser.textNode = ''\n  }\n\n  function textopts (opt, text) {\n    if (opt.trim) text = text.trim()\n    if (opt.normalize) text = text.replace(/\\s+/g, ' ')\n    return text\n  }\n\n  function error (parser, er) {\n    closeText(parser)\n    if (parser.trackPosition) {\n      er += '\\nLine: ' + parser.line +\n        '\\nColumn: ' + parser.column +\n        '\\nChar: ' + parser.c\n    }\n    er = new Error(er)\n    parser.error = er\n    emit(parser, 'onerror', er)\n    return parser\n  }\n\n  function end (parser) {\n    if (parser.sawRoot && !parser.closedRoot) strictFail(parser, 'Unclosed root tag')\n    if ((parser.state !== S.BEGIN) &&\n      (parser.state !== S.BEGIN_WHITESPACE) &&\n      (parser.state !== S.TEXT)) {\n      error(parser, 'Unexpected end')\n    }\n    closeText(parser)\n    parser.c = ''\n    parser.closed = true\n    emit(parser, 'onend')\n    SAXParser.call(parser, parser.strict, parser.opt)\n    return parser\n  }\n\n  function strictFail (parser, message) {\n    if (typeof parser !== 'object' || !(parser instanceof SAXParser)) {\n      throw new Error('bad call to strictFail')\n    }\n    if (parser.strict) {\n      error(parser, message)\n    }\n  }\n\n  function newTag (parser) {\n    if (!parser.strict) parser.tagName = parser.tagName[parser.looseCase]()\n    var parent = parser.tags[parser.tags.length - 1] || parser\n    var tag = parser.tag = { name: parser.tagName, attributes: {} }\n\n    // will be overridden if tag contails an xmlns=\"foo\" or xmlns:foo=\"bar\"\n    if (parser.opt.xmlns) {\n      tag.ns = parent.ns\n    }\n    parser.attribList.length = 0\n    emitNode(parser, 'onopentagstart', tag)\n  }\n\n  function qname (name, attribute) {\n    var i = name.indexOf(':')\n    var qualName = i < 0 ? [ '', name ] : name.split(':')\n    var prefix = qualName[0]\n    var local = qualName[1]\n\n    // <x \"xmlns\"=\"http://foo\">\n    if (attribute && name === 'xmlns') {\n      prefix = 'xmlns'\n      local = ''\n    }\n\n    return { prefix: prefix, local: local }\n  }\n\n  function attrib (parser) {\n    if (!parser.strict) {\n      parser.attribName = parser.attribName[parser.looseCase]()\n    }\n\n    if (parser.attribList.indexOf(parser.attribName) !== -1 ||\n      parser.tag.attributes.hasOwnProperty(parser.attribName)) {\n      parser.attribName = parser.attribValue = ''\n      return\n    }\n\n    if (parser.opt.xmlns) {\n      var qn = qname(parser.attribName, true)\n      var prefix = qn.prefix\n      var local = qn.local\n\n      if (prefix === 'xmlns') {\n        // namespace binding attribute. push the binding into scope\n        if (local === 'xml' && parser.attribValue !== XML_NAMESPACE) {\n          strictFail(parser,\n            'xml: prefix must be bound to ' + XML_NAMESPACE + '\\n' +\n            'Actual: ' + parser.attribValue)\n        } else if (local === 'xmlns' && parser.attribValue !== XMLNS_NAMESPACE) {\n          strictFail(parser,\n            'xmlns: prefix must be bound to ' + XMLNS_NAMESPACE + '\\n' +\n            'Actual: ' + parser.attribValue)\n        } else {\n          var tag = parser.tag\n          var parent = parser.tags[parser.tags.length - 1] || parser\n          if (tag.ns === parent.ns) {\n            tag.ns = Object.create(parent.ns)\n          }\n          tag.ns[local] = parser.attribValue\n        }\n      }\n\n      // defer onattribute events until all attributes have been seen\n      // so any new bindings can take effect. preserve attribute order\n      // so deferred events can be emitted in document order\n      parser.attribList.push([parser.attribName, parser.attribValue])\n    } else {\n      // in non-xmlns mode, we can emit the event right away\n      parser.tag.attributes[parser.attribName] = parser.attribValue\n      emitNode(parser, 'onattribute', {\n        name: parser.attribName,\n        value: parser.attribValue\n      })\n    }\n\n    parser.attribName = parser.attribValue = ''\n  }\n\n  function openTag (parser, selfClosing) {\n    if (parser.opt.xmlns) {\n      // emit namespace binding events\n      var tag = parser.tag\n\n      // add namespace info to tag\n      var qn = qname(parser.tagName)\n      tag.prefix = qn.prefix\n      tag.local = qn.local\n      tag.uri = tag.ns[qn.prefix] || ''\n\n      if (tag.prefix && !tag.uri) {\n        strictFail(parser, 'Unbound namespace prefix: ' +\n          JSON.stringify(parser.tagName))\n        tag.uri = qn.prefix\n      }\n\n      var parent = parser.tags[parser.tags.length - 1] || parser\n      if (tag.ns && parent.ns !== tag.ns) {\n        Object.keys(tag.ns).forEach(function (p) {\n          emitNode(parser, 'onopennamespace', {\n            prefix: p,\n            uri: tag.ns[p]\n          })\n        })\n      }\n\n      // handle deferred onattribute events\n      // Note: do not apply default ns to attributes:\n      //   http://www.w3.org/TR/REC-xml-names/#defaulting\n      for (var i = 0, l = parser.attribList.length; i < l; i++) {\n        var nv = parser.attribList[i]\n        var name = nv[0]\n        var value = nv[1]\n        var qualName = qname(name, true)\n        var prefix = qualName.prefix\n        var local = qualName.local\n        var uri = prefix === '' ? '' : (tag.ns[prefix] || '')\n        var a = {\n          name: name,\n          value: value,\n          prefix: prefix,\n          local: local,\n          uri: uri\n        }\n\n        // if there's any attributes with an undefined namespace,\n        // then fail on them now.\n        if (prefix && prefix !== 'xmlns' && !uri) {\n          strictFail(parser, 'Unbound namespace prefix: ' +\n            JSON.stringify(prefix))\n          a.uri = prefix\n        }\n        parser.tag.attributes[name] = a\n        emitNode(parser, 'onattribute', a)\n      }\n      parser.attribList.length = 0\n    }\n\n    parser.tag.isSelfClosing = !!selfClosing\n\n    // process the tag\n    parser.sawRoot = true\n    parser.tags.push(parser.tag)\n    emitNode(parser, 'onopentag', parser.tag)\n    if (!selfClosing) {\n      // special case for <script> in non-strict mode.\n      if (!parser.noscript && parser.tagName.toLowerCase() === 'script') {\n        parser.state = S.SCRIPT\n      } else {\n        parser.state = S.TEXT\n      }\n      parser.tag = null\n      parser.tagName = ''\n    }\n    parser.attribName = parser.attribValue = ''\n    parser.attribList.length = 0\n  }\n\n  function closeTag (parser) {\n    if (!parser.tagName) {\n      strictFail(parser, 'Weird empty close tag.')\n      parser.textNode += '</>'\n      parser.state = S.TEXT\n      return\n    }\n\n    if (parser.script) {\n      if (parser.tagName !== 'script') {\n        parser.script += '</' + parser.tagName + '>'\n        parser.tagName = ''\n        parser.state = S.SCRIPT\n        return\n      }\n      emitNode(parser, 'onscript', parser.script)\n      parser.script = ''\n    }\n\n    // first make sure that the closing tag actually exists.\n    // <a><b></c></b></a> will close everything, otherwise.\n    var t = parser.tags.length\n    var tagName = parser.tagName\n    if (!parser.strict) {\n      tagName = tagName[parser.looseCase]()\n    }\n    var closeTo = tagName\n    while (t--) {\n      var close = parser.tags[t]\n      if (close.name !== closeTo) {\n        // fail the first time in strict mode\n        strictFail(parser, 'Unexpected close tag')\n      } else {\n        break\n      }\n    }\n\n    // didn't find it.  we already failed for strict, so just abort.\n    if (t < 0) {\n      strictFail(parser, 'Unmatched closing tag: ' + parser.tagName)\n      parser.textNode += '</' + parser.tagName + '>'\n      parser.state = S.TEXT\n      return\n    }\n    parser.tagName = tagName\n    var s = parser.tags.length\n    while (s-- > t) {\n      var tag = parser.tag = parser.tags.pop()\n      parser.tagName = parser.tag.name\n      emitNode(parser, 'onclosetag', parser.tagName)\n\n      var x = {}\n      for (var i in tag.ns) {\n        x[i] = tag.ns[i]\n      }\n\n      var parent = parser.tags[parser.tags.length - 1] || parser\n      if (parser.opt.xmlns && tag.ns !== parent.ns) {\n        // remove namespace bindings introduced by tag\n        Object.keys(tag.ns).forEach(function (p) {\n          var n = tag.ns[p]\n          emitNode(parser, 'onclosenamespace', { prefix: p, uri: n })\n        })\n      }\n    }\n    if (t === 0) parser.closedRoot = true\n    parser.tagName = parser.attribValue = parser.attribName = ''\n    parser.attribList.length = 0\n    parser.state = S.TEXT\n  }\n\n  function parseEntity (parser) {\n    var entity = parser.entity\n    var entityLC = entity.toLowerCase()\n    var num\n    var numStr = ''\n\n    if (parser.ENTITIES[entity]) {\n      return parser.ENTITIES[entity]\n    }\n    if (parser.ENTITIES[entityLC]) {\n      return parser.ENTITIES[entityLC]\n    }\n    entity = entityLC\n    if (entity.charAt(0) === '#') {\n      if (entity.charAt(1) === 'x') {\n        entity = entity.slice(2)\n        num = parseInt(entity, 16)\n        numStr = num.toString(16)\n      } else {\n        entity = entity.slice(1)\n        num = parseInt(entity, 10)\n        numStr = num.toString(10)\n      }\n    }\n    entity = entity.replace(/^0+/, '')\n    if (isNaN(num) || numStr.toLowerCase() !== entity) {\n      strictFail(parser, 'Invalid character entity')\n      return '&' + parser.entity + ';'\n    }\n\n    return String.fromCodePoint(num)\n  }\n\n  function beginWhiteSpace (parser, c) {\n    if (c === '<') {\n      parser.state = S.OPEN_WAKA\n      parser.startTagPosition = parser.position\n    } else if (!isWhitespace(c)) {\n      // have to process this as a text node.\n      // weird, but happens.\n      strictFail(parser, 'Non-whitespace before first tag.')\n      parser.textNode = c\n      parser.state = S.TEXT\n    }\n  }\n\n  function charAt (chunk, i) {\n    var result = ''\n    if (i < chunk.length) {\n      result = chunk.charAt(i)\n    }\n    return result\n  }\n\n  function write (chunk) {\n    var parser = this\n    if (this.error) {\n      throw this.error\n    }\n    if (parser.closed) {\n      return error(parser,\n        'Cannot write after close. Assign an onready handler.')\n    }\n    if (chunk === null) {\n      return end(parser)\n    }\n    if (typeof chunk === 'object') {\n      chunk = chunk.toString()\n    }\n    var i = 0\n    var c = ''\n    while (true) {\n      c = charAt(chunk, i++)\n      parser.c = c\n\n      if (!c) {\n        break\n      }\n\n      if (parser.trackPosition) {\n        parser.position++\n        if (c === '\\n') {\n          parser.line++\n          parser.column = 0\n        } else {\n          parser.column++\n        }\n      }\n\n      switch (parser.state) {\n        case S.BEGIN:\n          parser.state = S.BEGIN_WHITESPACE\n          if (c === '\\uFEFF') {\n            continue\n          }\n          beginWhiteSpace(parser, c)\n          continue\n\n        case S.BEGIN_WHITESPACE:\n          beginWhiteSpace(parser, c)\n          continue\n\n        case S.TEXT:\n          if (parser.sawRoot && !parser.closedRoot) {\n            var starti = i - 1\n            while (c && c !== '<' && c !== '&') {\n              c = charAt(chunk, i++)\n              if (c && parser.trackPosition) {\n                parser.position++\n                if (c === '\\n') {\n                  parser.line++\n                  parser.column = 0\n                } else {\n                  parser.column++\n                }\n              }\n            }\n            parser.textNode += chunk.substring(starti, i - 1)\n          }\n          if (c === '<' && !(parser.sawRoot && parser.closedRoot && !parser.strict)) {\n            parser.state = S.OPEN_WAKA\n            parser.startTagPosition = parser.position\n          } else {\n            if (!isWhitespace(c) && (!parser.sawRoot || parser.closedRoot)) {\n              strictFail(parser, 'Text data outside of root node.')\n            }\n            if (c === '&') {\n              parser.state = S.TEXT_ENTITY\n            } else {\n              parser.textNode += c\n            }\n          }\n          continue\n\n        case S.SCRIPT:\n          // only non-strict\n          if (c === '<') {\n            parser.state = S.SCRIPT_ENDING\n          } else {\n            parser.script += c\n          }\n          continue\n\n        case S.SCRIPT_ENDING:\n          if (c === '/') {\n            parser.state = S.CLOSE_TAG\n          } else {\n            parser.script += '<' + c\n            parser.state = S.SCRIPT\n          }\n          continue\n\n        case S.OPEN_WAKA:\n          // either a /, ?, !, or text is coming next.\n          if (c === '!') {\n            parser.state = S.SGML_DECL\n            parser.sgmlDecl = ''\n          } else if (isWhitespace(c)) {\n            // wait for it...\n          } else if (isMatch(nameStart, c)) {\n            parser.state = S.OPEN_TAG\n            parser.tagName = c\n          } else if (c === '/') {\n            parser.state = S.CLOSE_TAG\n            parser.tagName = ''\n          } else if (c === '?') {\n            parser.state = S.PROC_INST\n            parser.procInstName = parser.procInstBody = ''\n          } else {\n            strictFail(parser, 'Unencoded <')\n            // if there was some whitespace, then add that in.\n            if (parser.startTagPosition + 1 < parser.position) {\n              var pad = parser.position - parser.startTagPosition\n              c = new Array(pad).join(' ') + c\n            }\n            parser.textNode += '<' + c\n            parser.state = S.TEXT\n          }\n          continue\n\n        case S.SGML_DECL:\n          if ((parser.sgmlDecl + c).toUpperCase() === CDATA) {\n            emitNode(parser, 'onopencdata')\n            parser.state = S.CDATA\n            parser.sgmlDecl = ''\n            parser.cdata = ''\n          } else if (parser.sgmlDecl + c === '--') {\n            parser.state = S.COMMENT\n            parser.comment = ''\n            parser.sgmlDecl = ''\n          } else if ((parser.sgmlDecl + c).toUpperCase() === DOCTYPE) {\n            parser.state = S.DOCTYPE\n            if (parser.doctype || parser.sawRoot) {\n              strictFail(parser,\n                'Inappropriately located doctype declaration')\n            }\n            parser.doctype = ''\n            parser.sgmlDecl = ''\n          } else if (c === '>') {\n            emitNode(parser, 'onsgmldeclaration', parser.sgmlDecl)\n            parser.sgmlDecl = ''\n            parser.state = S.TEXT\n          } else if (isQuote(c)) {\n            parser.state = S.SGML_DECL_QUOTED\n            parser.sgmlDecl += c\n          } else {\n            parser.sgmlDecl += c\n          }\n          continue\n\n        case S.SGML_DECL_QUOTED:\n          if (c === parser.q) {\n            parser.state = S.SGML_DECL\n            parser.q = ''\n          }\n          parser.sgmlDecl += c\n          continue\n\n        case S.DOCTYPE:\n          if (c === '>') {\n            parser.state = S.TEXT\n            emitNode(parser, 'ondoctype', parser.doctype)\n            parser.doctype = true // just remember that we saw it.\n          } else {\n            parser.doctype += c\n            if (c === '[') {\n              parser.state = S.DOCTYPE_DTD\n            } else if (isQuote(c)) {\n              parser.state = S.DOCTYPE_QUOTED\n              parser.q = c\n            }\n          }\n          continue\n\n        case S.DOCTYPE_QUOTED:\n          parser.doctype += c\n          if (c === parser.q) {\n            parser.q = ''\n            parser.state = S.DOCTYPE\n          }\n          continue\n\n        case S.DOCTYPE_DTD:\n          parser.doctype += c\n          if (c === ']') {\n            parser.state = S.DOCTYPE\n          } else if (isQuote(c)) {\n            parser.state = S.DOCTYPE_DTD_QUOTED\n            parser.q = c\n          }\n          continue\n\n        case S.DOCTYPE_DTD_QUOTED:\n          parser.doctype += c\n          if (c === parser.q) {\n            parser.state = S.DOCTYPE_DTD\n            parser.q = ''\n          }\n          continue\n\n        case S.COMMENT:\n          if (c === '-') {\n            parser.state = S.COMMENT_ENDING\n          } else {\n            parser.comment += c\n          }\n          continue\n\n        case S.COMMENT_ENDING:\n          if (c === '-') {\n            parser.state = S.COMMENT_ENDED\n            parser.comment = textopts(parser.opt, parser.comment)\n            if (parser.comment) {\n              emitNode(parser, 'oncomment', parser.comment)\n            }\n            parser.comment = ''\n          } else {\n            parser.comment += '-' + c\n            parser.state = S.COMMENT\n          }\n          continue\n\n        case S.COMMENT_ENDED:\n          if (c !== '>') {\n            strictFail(parser, 'Malformed comment')\n            // allow <!-- blah -- bloo --> in non-strict mode,\n            // which is a comment of \" blah -- bloo \"\n            parser.comment += '--' + c\n            parser.state = S.COMMENT\n          } else {\n            parser.state = S.TEXT\n          }\n          continue\n\n        case S.CDATA:\n          if (c === ']') {\n            parser.state = S.CDATA_ENDING\n          } else {\n            parser.cdata += c\n          }\n          continue\n\n        case S.CDATA_ENDING:\n          if (c === ']') {\n            parser.state = S.CDATA_ENDING_2\n          } else {\n            parser.cdata += ']' + c\n            parser.state = S.CDATA\n          }\n          continue\n\n        case S.CDATA_ENDING_2:\n          if (c === '>') {\n            if (parser.cdata) {\n              emitNode(parser, 'oncdata', parser.cdata)\n            }\n            emitNode(parser, 'onclosecdata')\n            parser.cdata = ''\n            parser.state = S.TEXT\n          } else if (c === ']') {\n            parser.cdata += ']'\n          } else {\n            parser.cdata += ']]' + c\n            parser.state = S.CDATA\n          }\n          continue\n\n        case S.PROC_INST:\n          if (c === '?') {\n            parser.state = S.PROC_INST_ENDING\n          } else if (isWhitespace(c)) {\n            parser.state = S.PROC_INST_BODY\n          } else {\n            parser.procInstName += c\n          }\n          continue\n\n        case S.PROC_INST_BODY:\n          if (!parser.procInstBody && isWhitespace(c)) {\n            continue\n          } else if (c === '?') {\n            parser.state = S.PROC_INST_ENDING\n          } else {\n            parser.procInstBody += c\n          }\n          continue\n\n        case S.PROC_INST_ENDING:\n          if (c === '>') {\n            emitNode(parser, 'onprocessinginstruction', {\n              name: parser.procInstName,\n              body: parser.procInstBody\n            })\n            parser.procInstName = parser.procInstBody = ''\n            parser.state = S.TEXT\n          } else {\n            parser.procInstBody += '?' + c\n            parser.state = S.PROC_INST_BODY\n          }\n          continue\n\n        case S.OPEN_TAG:\n          if (isMatch(nameBody, c)) {\n            parser.tagName += c\n          } else {\n            newTag(parser)\n            if (c === '>') {\n              openTag(parser)\n            } else if (c === '/') {\n              parser.state = S.OPEN_TAG_SLASH\n            } else {\n              if (!isWhitespace(c)) {\n                strictFail(parser, 'Invalid character in tag name')\n              }\n              parser.state = S.ATTRIB\n            }\n          }\n          continue\n\n        case S.OPEN_TAG_SLASH:\n          if (c === '>') {\n            openTag(parser, true)\n            closeTag(parser)\n          } else {\n            strictFail(parser, 'Forward-slash in opening tag not followed by >')\n            parser.state = S.ATTRIB\n          }\n          continue\n\n        case S.ATTRIB:\n          // haven't read the attribute name yet.\n          if (isWhitespace(c)) {\n            continue\n          } else if (c === '>') {\n            openTag(parser)\n          } else if (c === '/') {\n            parser.state = S.OPEN_TAG_SLASH\n          } else if (isMatch(nameStart, c)) {\n            parser.attribName = c\n            parser.attribValue = ''\n            parser.state = S.ATTRIB_NAME\n          } else {\n            strictFail(parser, 'Invalid attribute name')\n          }\n          continue\n\n        case S.ATTRIB_NAME:\n          if (c === '=') {\n            parser.state = S.ATTRIB_VALUE\n          } else if (c === '>') {\n            strictFail(parser, 'Attribute without value')\n            parser.attribValue = parser.attribName\n            attrib(parser)\n            openTag(parser)\n          } else if (isWhitespace(c)) {\n            parser.state = S.ATTRIB_NAME_SAW_WHITE\n          } else if (isMatch(nameBody, c)) {\n            parser.attribName += c\n          } else {\n            strictFail(parser, 'Invalid attribute name')\n          }\n          continue\n\n        case S.ATTRIB_NAME_SAW_WHITE:\n          if (c === '=') {\n            parser.state = S.ATTRIB_VALUE\n          } else if (isWhitespace(c)) {\n            continue\n          } else {\n            strictFail(parser, 'Attribute without value')\n            parser.tag.attributes[parser.attribName] = ''\n            parser.attribValue = ''\n            emitNode(parser, 'onattribute', {\n              name: parser.attribName,\n              value: ''\n            })\n            parser.attribName = ''\n            if (c === '>') {\n              openTag(parser)\n            } else if (isMatch(nameStart, c)) {\n              parser.attribName = c\n              parser.state = S.ATTRIB_NAME\n            } else {\n              strictFail(parser, 'Invalid attribute name')\n              parser.state = S.ATTRIB\n            }\n          }\n          continue\n\n        case S.ATTRIB_VALUE:\n          if (isWhitespace(c)) {\n            continue\n          } else if (isQuote(c)) {\n            parser.q = c\n            parser.state = S.ATTRIB_VALUE_QUOTED\n          } else {\n            strictFail(parser, 'Unquoted attribute value')\n            parser.state = S.ATTRIB_VALUE_UNQUOTED\n            parser.attribValue = c\n          }\n          continue\n\n        case S.ATTRIB_VALUE_QUOTED:\n          if (c !== parser.q) {\n            if (c === '&') {\n              parser.state = S.ATTRIB_VALUE_ENTITY_Q\n            } else {\n              parser.attribValue += c\n            }\n            continue\n          }\n          attrib(parser)\n          parser.q = ''\n          parser.state = S.ATTRIB_VALUE_CLOSED\n          continue\n\n        case S.ATTRIB_VALUE_CLOSED:\n          if (isWhitespace(c)) {\n            parser.state = S.ATTRIB\n          } else if (c === '>') {\n            openTag(parser)\n          } else if (c === '/') {\n            parser.state = S.OPEN_TAG_SLASH\n          } else if (isMatch(nameStart, c)) {\n            strictFail(parser, 'No whitespace between attributes')\n            parser.attribName = c\n            parser.attribValue = ''\n            parser.state = S.ATTRIB_NAME\n          } else {\n            strictFail(parser, 'Invalid attribute name')\n          }\n          continue\n\n        case S.ATTRIB_VALUE_UNQUOTED:\n          if (!isAttribEnd(c)) {\n            if (c === '&') {\n              parser.state = S.ATTRIB_VALUE_ENTITY_U\n            } else {\n              parser.attribValue += c\n            }\n            continue\n          }\n          attrib(parser)\n          if (c === '>') {\n            openTag(parser)\n          } else {\n            parser.state = S.ATTRIB\n          }\n          continue\n\n        case S.CLOSE_TAG:\n          if (!parser.tagName) {\n            if (isWhitespace(c)) {\n              continue\n            } else if (notMatch(nameStart, c)) {\n              if (parser.script) {\n                parser.script += '</' + c\n                parser.state = S.SCRIPT\n              } else {\n                strictFail(parser, 'Invalid tagname in closing tag.')\n              }\n            } else {\n              parser.tagName = c\n            }\n          } else if (c === '>') {\n            closeTag(parser)\n          } else if (isMatch(nameBody, c)) {\n            parser.tagName += c\n          } else if (parser.script) {\n            parser.script += '</' + parser.tagName\n            parser.tagName = ''\n            parser.state = S.SCRIPT\n          } else {\n            if (!isWhitespace(c)) {\n              strictFail(parser, 'Invalid tagname in closing tag')\n            }\n            parser.state = S.CLOSE_TAG_SAW_WHITE\n          }\n          continue\n\n        case S.CLOSE_TAG_SAW_WHITE:\n          if (isWhitespace(c)) {\n            continue\n          }\n          if (c === '>') {\n            closeTag(parser)\n          } else {\n            strictFail(parser, 'Invalid characters in closing tag')\n          }\n          continue\n\n        case S.TEXT_ENTITY:\n        case S.ATTRIB_VALUE_ENTITY_Q:\n        case S.ATTRIB_VALUE_ENTITY_U:\n          var returnState\n          var buffer\n          switch (parser.state) {\n            case S.TEXT_ENTITY:\n              returnState = S.TEXT\n              buffer = 'textNode'\n              break\n\n            case S.ATTRIB_VALUE_ENTITY_Q:\n              returnState = S.ATTRIB_VALUE_QUOTED\n              buffer = 'attribValue'\n              break\n\n            case S.ATTRIB_VALUE_ENTITY_U:\n              returnState = S.ATTRIB_VALUE_UNQUOTED\n              buffer = 'attribValue'\n              break\n          }\n\n          if (c === ';') {\n            if (parser.opt.unparsedEntities) {\n              var parsedEntity = parseEntity(parser)\n              parser.entity = ''\n              parser.state = returnState\n              parser.write(parsedEntity)\n            } else {\n              parser[buffer] += parseEntity(parser)\n              parser.entity = ''\n              parser.state = returnState\n            }\n          } else if (isMatch(parser.entity.length ? entityBody : entityStart, c)) {\n            parser.entity += c\n          } else {\n            strictFail(parser, 'Invalid character in entity name')\n            parser[buffer] += '&' + parser.entity + c\n            parser.entity = ''\n            parser.state = returnState\n          }\n\n          continue\n\n        default: /* istanbul ignore next */ {\n          throw new Error(parser, 'Unknown state: ' + parser.state)\n        }\n      }\n    } // while\n\n    if (parser.position >= parser.bufferCheckPosition) {\n      checkBufferLength(parser)\n    }\n    return parser\n  }\n\n  /*! http://mths.be/fromcodepoint v0.1.0 by @mathias */\n  /* istanbul ignore next */\n  if (!String.fromCodePoint) {\n    (function () {\n      var stringFromCharCode = String.fromCharCode\n      var floor = Math.floor\n      var fromCodePoint = function () {\n        var MAX_SIZE = 0x4000\n        var codeUnits = []\n        var highSurrogate\n        var lowSurrogate\n        var index = -1\n        var length = arguments.length\n        if (!length) {\n          return ''\n        }\n        var result = ''\n        while (++index < length) {\n          var codePoint = Number(arguments[index])\n          if (\n            !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`\n            codePoint < 0 || // not a valid Unicode code point\n            codePoint > 0x10FFFF || // not a valid Unicode code point\n            floor(codePoint) !== codePoint // not an integer\n          ) {\n            throw RangeError('Invalid code point: ' + codePoint)\n          }\n          if (codePoint <= 0xFFFF) { // BMP code point\n            codeUnits.push(codePoint)\n          } else { // Astral code point; split in surrogate halves\n            // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n            codePoint -= 0x10000\n            highSurrogate = (codePoint >> 10) + 0xD800\n            lowSurrogate = (codePoint % 0x400) + 0xDC00\n            codeUnits.push(highSurrogate, lowSurrogate)\n          }\n          if (index + 1 === length || codeUnits.length > MAX_SIZE) {\n            result += stringFromCharCode.apply(null, codeUnits)\n            codeUnits.length = 0\n          }\n        }\n        return result\n      }\n      /* istanbul ignore next */\n      if (Object.defineProperty) {\n        Object.defineProperty(String, 'fromCodePoint', {\n          value: fromCodePoint,\n          configurable: true,\n          writable: true\n        })\n      } else {\n        String.fromCodePoint = fromCodePoint\n      }\n    }())\n  }\n})(typeof exports === 'undefined' ? this.sax = {} : exports)\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar define = require('define-data-property');\nvar hasDescriptors = require('has-property-descriptors')();\nvar gOPD = require('gopd');\n\nvar $TypeError = require('es-errors/type');\nvar $floor = GetIntrinsic('%Math.floor%');\n\n/** @typedef {(...args: unknown[]) => unknown} Func */\n\n/** @type {<T extends Func = Func>(fn: T, length: number, loose?: boolean) => T} */\nmodule.exports = function setFunctionLength(fn, length) {\n\tif (typeof fn !== 'function') {\n\t\tthrow new $TypeError('`fn` is not a function');\n\t}\n\tif (typeof length !== 'number' || length < 0 || length > 0xFFFFFFFF || $floor(length) !== length) {\n\t\tthrow new $TypeError('`length` must be a positive 32-bit integer');\n\t}\n\n\tvar loose = arguments.length > 2 && !!arguments[2];\n\n\tvar functionLengthIsConfigurable = true;\n\tvar functionLengthIsWritable = true;\n\tif ('length' in fn && gOPD) {\n\t\tvar desc = gOPD(fn, 'length');\n\t\tif (desc && !desc.configurable) {\n\t\t\tfunctionLengthIsConfigurable = false;\n\t\t}\n\t\tif (desc && !desc.writable) {\n\t\t\tfunctionLengthIsWritable = false;\n\t\t}\n\t}\n\n\tif (functionLengthIsConfigurable || functionLengthIsWritable || !loose) {\n\t\tif (hasDescriptors) {\n\t\t\tdefine(/** @type {Parameters<define>[0]} */ (fn), 'length', length, true, true);\n\t\t} else {\n\t\t\tdefine(/** @type {Parameters<define>[0]} */ (fn), 'length', length);\n\t\t}\n\t}\n\treturn fn;\n};\n","'use strict';\n\nvar define = require('define-data-property');\nvar hasDescriptors = require('has-property-descriptors')();\nvar functionsHaveConfigurableNames = require('functions-have-names').functionsHaveConfigurableNames();\n\nvar $TypeError = require('es-errors/type');\n\n/** @type {import('.')} */\nmodule.exports = function setFunctionName(fn, name) {\n\tif (typeof fn !== 'function') {\n\t\tthrow new $TypeError('`fn` is not a function');\n\t}\n\tvar loose = arguments.length > 2 && !!arguments[2];\n\tif (!loose || functionsHaveConfigurableNames) {\n\t\tif (hasDescriptors) {\n\t\t\tdefine(/** @type {Parameters<define>[0]} */ (fn), 'name', name, true, true);\n\t\t} else {\n\t\t\tdefine(/** @type {Parameters<define>[0]} */ (fn), 'name', name);\n\t\t}\n\t}\n\treturn fn;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/lib/_stream_readable.js');\nStream.Writable = require('readable-stream/lib/_stream_writable.js');\nStream.Duplex = require('readable-stream/lib/_stream_duplex.js');\nStream.Transform = require('readable-stream/lib/_stream_transform.js');\nStream.PassThrough = require('readable-stream/lib/_stream_passthrough.js');\nStream.finished = require('readable-stream/lib/internal/streams/end-of-stream.js')\nStream.pipeline = require('readable-stream/lib/internal/streams/pipeline.js')\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams.  Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n  EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n  var source = this;\n\n  function ondata(chunk) {\n    if (dest.writable) {\n      if (false === dest.write(chunk) && source.pause) {\n        source.pause();\n      }\n    }\n  }\n\n  source.on('data', ondata);\n\n  function ondrain() {\n    if (source.readable && source.resume) {\n      source.resume();\n    }\n  }\n\n  dest.on('drain', ondrain);\n\n  // If the 'end' option is not supplied, dest.end() will be called when\n  // source gets the 'end' or 'close' events.  Only dest.end() once.\n  if (!dest._isStdio && (!options || options.end !== false)) {\n    source.on('end', onend);\n    source.on('close', onclose);\n  }\n\n  var didOnEnd = false;\n  function onend() {\n    if (didOnEnd) return;\n    didOnEnd = true;\n\n    dest.end();\n  }\n\n\n  function onclose() {\n    if (didOnEnd) return;\n    didOnEnd = true;\n\n    if (typeof dest.destroy === 'function') dest.destroy();\n  }\n\n  // don't leave dangling pipes when there are errors.\n  function onerror(er) {\n    cleanup();\n    if (EE.listenerCount(this, 'error') === 0) {\n      throw er; // Unhandled stream error in pipe.\n    }\n  }\n\n  source.on('error', onerror);\n  dest.on('error', onerror);\n\n  // remove all the event listeners that were added.\n  function cleanup() {\n    source.removeListener('data', ondata);\n    dest.removeListener('drain', ondrain);\n\n    source.removeListener('end', onend);\n    source.removeListener('close', onclose);\n\n    source.removeListener('error', onerror);\n    dest.removeListener('error', onerror);\n\n    source.removeListener('end', cleanup);\n    source.removeListener('close', cleanup);\n\n    dest.removeListener('close', cleanup);\n  }\n\n  source.on('end', cleanup);\n  source.on('close', cleanup);\n\n  dest.on('close', cleanup);\n\n  dest.emit('pipe', source);\n\n  // Allow for unix-like usage: A.pipe(B).pipe(C)\n  return dest;\n};\n","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n  if (!Base) {\n    Base = Error;\n  }\n\n  function getMessage(arg1, arg2, arg3) {\n    if (typeof message === 'string') {\n      return message;\n    } else {\n      return message(arg1, arg2, arg3);\n    }\n  }\n\n  var NodeError =\n  /*#__PURE__*/\n  function (_Base) {\n    _inheritsLoose(NodeError, _Base);\n\n    function NodeError(arg1, arg2, arg3) {\n      return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n    }\n\n    return NodeError;\n  }(Base);\n\n  NodeError.prototype.name = Base.name;\n  NodeError.prototype.code = code;\n  codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n  if (Array.isArray(expected)) {\n    var len = expected.length;\n    expected = expected.map(function (i) {\n      return String(i);\n    });\n\n    if (len > 2) {\n      return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n    } else if (len === 2) {\n      return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n    } else {\n      return \"of \".concat(thing, \" \").concat(expected[0]);\n    }\n  } else {\n    return \"of \".concat(thing, \" \").concat(String(expected));\n  }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n  return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n  if (this_len === undefined || this_len > str.length) {\n    this_len = str.length;\n  }\n\n  return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n  if (typeof start !== 'number') {\n    start = 0;\n  }\n\n  if (start + search.length > str.length) {\n    return false;\n  } else {\n    return str.indexOf(search, start) !== -1;\n  }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n  return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n  // determiner: 'must be' or 'must not be'\n  var determiner;\n\n  if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n    determiner = 'must not be';\n    expected = expected.replace(/^not /, '');\n  } else {\n    determiner = 'must be';\n  }\n\n  var msg;\n\n  if (endsWith(name, ' argument')) {\n    // For cases like 'first argument'\n    msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  } else {\n    var type = includes(name, '.') ? 'property' : 'argument';\n    msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  }\n\n  msg += \". Received type \".concat(typeof actual);\n  return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n  return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n  return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n  return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) keys.push(key);\n  return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\nrequire('inherits')(Duplex, Readable);\n{\n  // Allow the keys array to be GC'ed.\n  var keys = objectKeys(Writable.prototype);\n  for (var v = 0; v < keys.length; v++) {\n    var method = keys[v];\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n  }\n}\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options);\n  Readable.call(this, options);\n  Writable.call(this, options);\n  this.allowHalfOpen = true;\n  if (options) {\n    if (options.readable === false) this.readable = false;\n    if (options.writable === false) this.writable = false;\n    if (options.allowHalfOpen === false) {\n      this.allowHalfOpen = false;\n      this.once('end', onend);\n    }\n  }\n}\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n  // If the writable side ended, then we're ok.\n  if (this._writableState.ended) return;\n\n  // no more data can be written.\n  // But allow more writes to happen in this tick.\n  process.nextTick(onEndNT, this);\n}\nfunction onEndNT(self) {\n  self.end();\n}\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\nvar Transform = require('./_stream_transform');\nrequire('inherits')(PassThrough, Transform);\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options);\n  Transform.call(this, options);\n}\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug;\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function debug() {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/buffer_list');\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n  getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n  ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n  ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;\n\n// Lazy loaded to improve the startup performance.\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\nrequire('inherits')(Readable, Stream);\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n  // This is a hack to make sure that our error handler is attached before any\n  // userland ones.  NEVER DO THIS. This is here only because this code needs\n  // to continue to work with older versions of Node.js that do not include\n  // the prependListener() method. The goal is to eventually remove this hack.\n  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\nfunction ReadableState(options, stream, isDuplex) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n  // object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n  // the point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n  this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex);\n\n  // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift()\n  this.buffer = new BufferList();\n  this.length = 0;\n  this.pipes = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false;\n\n  // a flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n  this.sync = true;\n\n  // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false;\n  this.paused = true;\n\n  // Should close be emitted on destroy. Defaults to true.\n  this.emitClose = options.emitClose !== false;\n\n  // Should .destroy() be called after 'end' (and potentially 'finish')\n  this.autoDestroy = !!options.autoDestroy;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // the number of writers that are awaiting a drain event in .pipe()s\n  this.awaitDrain = 0;\n\n  // if true, a maybeReadMore has been scheduled\n  this.readingMore = false;\n  this.decoder = null;\n  this.encoding = null;\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\nfunction Readable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n  if (!(this instanceof Readable)) return new Readable(options);\n\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the ReadableState constructor, at least with V8 6.5\n  var isDuplex = this instanceof Duplex;\n  this._readableState = new ReadableState(options, this, isDuplex);\n\n  // legacy\n  this.readable = true;\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n  Stream.call(this);\n}\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._readableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n  }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n  cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n  var state = this._readableState;\n  var skipChunkCheck;\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  debug('readableAddChunk', chunk);\n  var state = stream._readableState;\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n    if (er) {\n      errorOrDestroy(stream, er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n      if (addToFront) {\n        if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n      } else if (state.ended) {\n        errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n      } else if (state.destroyed) {\n        return false;\n      } else {\n        state.reading = false;\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n      maybeReadMore(stream, state);\n    }\n  }\n\n  // We can push more data if we are below the highWaterMark.\n  // Also, if we have no data yet, we can stand some more bytes.\n  // This is to work around cases where hwm=0, such as the repl.\n  return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync) {\n    state.awaitDrain = 0;\n    stream.emit('data', chunk);\n  } else {\n    // update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length;\n    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n    if (state.needReadable) emitReadable(stream);\n  }\n  maybeReadMore(stream, state);\n}\nfunction chunkInvalid(state, chunk) {\n  var er;\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n  }\n  return er;\n}\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n  var decoder = new StringDecoder(enc);\n  this._readableState.decoder = decoder;\n  // If setEncoding(null), decoder.encoding equals utf8\n  this._readableState.encoding = this._readableState.decoder.encoding;\n\n  // Iterate over current buffer to convert already stored Buffers:\n  var p = this._readableState.buffer.head;\n  var content = '';\n  while (p !== null) {\n    content += decoder.write(p.data);\n    p = p.next;\n  }\n  this._readableState.buffer.clear();\n  if (content !== '') this._readableState.buffer.push(content);\n  this._readableState.length = content.length;\n  return this;\n};\n\n// Don't raise the hwm > 1GB\nvar MAX_HWM = 0x40000000;\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n    n = MAX_HWM;\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts\n    n--;\n    n |= n >>> 1;\n    n |= n >>> 2;\n    n |= n >>> 4;\n    n |= n >>> 8;\n    n |= n >>> 16;\n    n++;\n  }\n  return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || state.length === 0 && state.ended) return 0;\n  if (state.objectMode) return 1;\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n  }\n  // If we're asking for more than the current hwm, then raise the hwm.\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n  if (n <= state.length) return n;\n  // Don't have enough\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n  return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n  debug('read', n);\n  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n  if (n !== 0) state.emittedReadable = false;\n\n  // if we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n  if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n    return null;\n  }\n  n = howMuchToRead(n, state);\n\n  // if we've ended, and we're now clear, then finish it up.\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this);\n    return null;\n  }\n\n  // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n\n  // if we need a readable event, then we need to do some reading.\n  var doRead = state.needReadable;\n  debug('need readable', doRead);\n\n  // if we currently have less than the highWaterMark, then also read some\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true;\n    debug('length less than watermark', doRead);\n  }\n\n  // however, if we've ended, then there's no point, and if we're already\n  // reading, then it's unnecessary.\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true;\n    // if the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.needReadable = true;\n    // call internal read method\n    this._read(state.highWaterMark);\n    state.sync = false;\n    // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n    if (!state.reading) n = howMuchToRead(nOrig, state);\n  }\n  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n  if (ret === null) {\n    state.needReadable = state.length <= state.highWaterMark;\n    n = 0;\n  } else {\n    state.length -= n;\n    state.awaitDrain = 0;\n  }\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true;\n\n    // If we tried to read() past the EOF, then emit end on the next tick.\n    if (nOrig !== n && state.ended) endReadable(this);\n  }\n  if (ret !== null) this.emit('data', ret);\n  return ret;\n};\nfunction onEofChunk(stream, state) {\n  debug('onEofChunk');\n  if (state.ended) return;\n  if (state.decoder) {\n    var chunk = state.decoder.end();\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk);\n      state.length += state.objectMode ? 1 : chunk.length;\n    }\n  }\n  state.ended = true;\n  if (state.sync) {\n    // if we are sync, wait until next tick to emit the data.\n    // Otherwise we risk emitting data in the flow()\n    // the readable code triggers during a read() call\n    emitReadable(stream);\n  } else {\n    // emit 'readable' now to make sure it gets picked up.\n    state.needReadable = false;\n    if (!state.emittedReadable) {\n      state.emittedReadable = true;\n      emitReadable_(stream);\n    }\n  }\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n  var state = stream._readableState;\n  debug('emitReadable', state.needReadable, state.emittedReadable);\n  state.needReadable = false;\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing);\n    state.emittedReadable = true;\n    process.nextTick(emitReadable_, stream);\n  }\n}\nfunction emitReadable_(stream) {\n  var state = stream._readableState;\n  debug('emitReadable_', state.destroyed, state.length, state.ended);\n  if (!state.destroyed && (state.length || state.ended)) {\n    stream.emit('readable');\n    state.emittedReadable = false;\n  }\n\n  // The stream needs another readable event if\n  // 1. It is not flowing, as the flow mechanism will take\n  //    care of it.\n  // 2. It is not ended.\n  // 3. It is below the highWaterMark, so we can schedule\n  //    another readable later.\n  state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n  flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore) {\n    state.readingMore = true;\n    process.nextTick(maybeReadMore_, stream, state);\n  }\n}\nfunction maybeReadMore_(stream, state) {\n  // Attempt to read more data if we should.\n  //\n  // The conditions for reading more data are (one of):\n  // - Not enough data buffered (state.length < state.highWaterMark). The loop\n  //   is responsible for filling the buffer with enough data if such data\n  //   is available. If highWaterMark is 0 and we are not in the flowing mode\n  //   we should _not_ attempt to buffer any extra data. We'll get more data\n  //   when the stream consumer calls read() instead.\n  // - No data in the buffer, and the stream is in flowing mode. In this mode\n  //   the loop below is responsible for ensuring read() is called. Failing to\n  //   call read here would abort the flow and there's no other mechanism for\n  //   continuing the flow if the stream consumer has just subscribed to the\n  //   'data' event.\n  //\n  // In addition to the above conditions to keep reading data, the following\n  // conditions prevent the data from being read:\n  // - The stream has ended (state.ended).\n  // - There is already a pending 'read' operation (state.reading). This is a\n  //   case where the the stream has called the implementation defined _read()\n  //   method, but they are processing the call asynchronously and have _not_\n  //   called push() with new data. In this case we skip performing more\n  //   read()s. The execution ends in this method again after the _read() ends\n  //   up calling push() with more data.\n  while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n    var len = state.length;\n    debug('maybeReadMore read 0');\n    stream.read(0);\n    if (len === state.length)\n      // didn't get any data, stop spinning.\n      break;\n  }\n  state.readingMore = false;\n}\n\n// abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n  errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n  dest.on('unpipe', onunpipe);\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe');\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true;\n        cleanup();\n      }\n    }\n  }\n  function onend() {\n    debug('onend');\n    dest.end();\n  }\n\n  // when the dest drains, it reduces the awaitDrain counter\n  // on the source.  This would be more elegant with a .once()\n  // handler in flow(), but adding and removing repeatedly is\n  // too slow.\n  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n  var cleanedUp = false;\n  function cleanup() {\n    debug('cleanup');\n    // cleanup event handlers once the pipe is broken\n    dest.removeListener('close', onclose);\n    dest.removeListener('finish', onfinish);\n    dest.removeListener('drain', ondrain);\n    dest.removeListener('error', onerror);\n    dest.removeListener('unpipe', onunpipe);\n    src.removeListener('end', onend);\n    src.removeListener('end', unpipe);\n    src.removeListener('data', ondata);\n    cleanedUp = true;\n\n    // if the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  }\n  src.on('data', ondata);\n  function ondata(chunk) {\n    debug('ondata');\n    var ret = dest.write(chunk);\n    debug('dest.write', ret);\n    if (ret === false) {\n      // If the user unpiped during `dest.write()`, it is possible\n      // to get stuck in a permanently paused state if that write\n      // also returned false.\n      // => Check whether `dest` is still a piping destination.\n      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', state.awaitDrain);\n        state.awaitDrain++;\n      }\n      src.pause();\n    }\n  }\n\n  // if the dest has an error, then stop piping into it.\n  // however, don't suppress the throwing behavior for this.\n  function onerror(er) {\n    debug('onerror', er);\n    unpipe();\n    dest.removeListener('error', onerror);\n    if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n  }\n\n  // Make sure our error handler is attached before userland ones.\n  prependListener(dest, 'error', onerror);\n\n  // Both close and finish should trigger unpipe, but only once.\n  function onclose() {\n    dest.removeListener('finish', onfinish);\n    unpipe();\n  }\n  dest.once('close', onclose);\n  function onfinish() {\n    debug('onfinish');\n    dest.removeListener('close', onclose);\n    unpipe();\n  }\n  dest.once('finish', onfinish);\n  function unpipe() {\n    debug('unpipe');\n    src.unpipe(dest);\n  }\n\n  // tell the dest that it's being piped to\n  dest.emit('pipe', src);\n\n  // start the flow if it hasn't been started already.\n  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n  return dest;\n};\nfunction pipeOnDrain(src) {\n  return function pipeOnDrainFunctionResult() {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = {\n    hasUnpiped: false\n  };\n\n  // if we're not piping anywhere, then do nothing.\n  if (state.pipesCount === 0) return this;\n\n  // just one destination.  most common case.\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n    if (!dest) dest = state.pipes;\n\n    // got a match.\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this, unpipeInfo);\n    return this;\n  }\n\n  // slow case. multiple pipe destinations.\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, {\n      hasUnpiped: false\n    });\n    return this;\n  }\n\n  // try to find the right one.\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\n  dest.emit('unpipe', this, unpipeInfo);\n  return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n  var res = Stream.prototype.on.call(this, ev, fn);\n  var state = this._readableState;\n  if (ev === 'data') {\n    // update readableListening so that resume() may be a no-op\n    // a few lines down. This is needed to support once('readable').\n    state.readableListening = this.listenerCount('readable') > 0;\n\n    // Try start flowing on next tick if stream isn't explicitly paused\n    if (state.flowing !== false) this.resume();\n  } else if (ev === 'readable') {\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true;\n      state.flowing = false;\n      state.emittedReadable = false;\n      debug('on readable', state.length, state.reading);\n      if (state.length) {\n        emitReadable(this);\n      } else if (!state.reading) {\n        process.nextTick(nReadingNextTick, this);\n      }\n    }\n  }\n  return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\nReadable.prototype.removeListener = function (ev, fn) {\n  var res = Stream.prototype.removeListener.call(this, ev, fn);\n  if (ev === 'readable') {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this);\n  }\n  return res;\n};\nReadable.prototype.removeAllListeners = function (ev) {\n  var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n  if (ev === 'readable' || ev === undefined) {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this);\n  }\n  return res;\n};\nfunction updateReadableListening(self) {\n  var state = self._readableState;\n  state.readableListening = self.listenerCount('readable') > 0;\n  if (state.resumeScheduled && !state.paused) {\n    // flowing needs to be set to true now, otherwise\n    // the upcoming resume will not flow.\n    state.flowing = true;\n\n    // crude way to check if we should resume\n  } else if (self.listenerCount('data') > 0) {\n    self.resume();\n  }\n}\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0');\n  self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n  var state = this._readableState;\n  if (!state.flowing) {\n    debug('resume');\n    // we flow only if there is no one listening\n    // for readable, but we still have to call\n    // resume()\n    state.flowing = !state.readableListening;\n    resume(this, state);\n  }\n  state.paused = false;\n  return this;\n};\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true;\n    process.nextTick(resume_, stream, state);\n  }\n}\nfunction resume_(stream, state) {\n  debug('resume', state.reading);\n  if (!state.reading) {\n    stream.read(0);\n  }\n  state.resumeScheduled = false;\n  stream.emit('resume');\n  flow(stream);\n  if (state.flowing && !state.reading) stream.read(0);\n}\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing);\n  if (this._readableState.flowing !== false) {\n    debug('pause');\n    this._readableState.flowing = false;\n    this.emit('pause');\n  }\n  this._readableState.paused = true;\n  return this;\n};\nfunction flow(stream) {\n  var state = stream._readableState;\n  debug('flow', state.flowing);\n  while (state.flowing && stream.read() !== null);\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n  var _this = this;\n  var state = this._readableState;\n  var paused = false;\n  stream.on('end', function () {\n    debug('wrapped end');\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) _this.push(chunk);\n    }\n    _this.push(null);\n  });\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk);\n\n    // don't skip over falsy values in objectMode\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n    var ret = _this.push(chunk);\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  });\n\n  // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function methodWrap(method) {\n        return function methodWrapReturnFunction() {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  }\n\n  // proxy certain important events.\n  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n  }\n\n  // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n  this._read = function (n) {\n    debug('wrapped _read', n);\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n  return this;\n};\nif (typeof Symbol === 'function') {\n  Readable.prototype[Symbol.asyncIterator] = function () {\n    if (createReadableStreamAsyncIterator === undefined) {\n      createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n    }\n    return createReadableStreamAsyncIterator(this);\n  };\n}\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.highWaterMark;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState && this._readableState.buffer;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.flowing;\n  },\n  set: function set(state) {\n    if (this._readableState) {\n      this._readableState.flowing = state;\n    }\n  }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.length;\n  }\n});\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n  // nothing buffered\n  if (state.length === 0) return null;\n  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n    state.buffer.clear();\n  } else {\n    // read part of list\n    ret = state.buffer.consume(n, state.decoder);\n  }\n  return ret;\n}\nfunction endReadable(stream) {\n  var state = stream._readableState;\n  debug('endReadable', state.endEmitted);\n  if (!state.endEmitted) {\n    state.ended = true;\n    process.nextTick(endReadableNT, state, stream);\n  }\n}\nfunction endReadableNT(state, stream) {\n  debug('endReadableNT', state.endEmitted, state.length);\n\n  // Check that we didn't get one last unshift.\n  if (!state.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n    if (state.autoDestroy) {\n      // In case of duplex streams we need a way to detect\n      // if the writable side is ready for autoDestroy as well\n      var wState = stream._writableState;\n      if (!wState || wState.autoDestroy && wState.finished) {\n        stream.destroy();\n      }\n    }\n  }\n}\nif (typeof Symbol === 'function') {\n  Readable.from = function (iterable, opts) {\n    if (from === undefined) {\n      from = require('./internal/streams/from');\n    }\n    return from(Readable, iterable, opts);\n  };\n}\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n  return -1;\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\nvar _require$codes = require('../errors').codes,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n  ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n  ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\nvar Duplex = require('./_stream_duplex');\nrequire('inherits')(Transform, Duplex);\nfunction afterTransform(er, data) {\n  var ts = this._transformState;\n  ts.transforming = false;\n  var cb = ts.writecb;\n  if (cb === null) {\n    return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n  }\n  ts.writechunk = null;\n  ts.writecb = null;\n  if (data != null)\n    // single equals check for both `null` and `undefined`\n    this.push(data);\n  cb(er);\n  var rs = this._readableState;\n  rs.reading = false;\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    this._read(rs.highWaterMark);\n  }\n}\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n  Duplex.call(this, options);\n  this._transformState = {\n    afterTransform: afterTransform.bind(this),\n    needTransform: false,\n    transforming: false,\n    writecb: null,\n    writechunk: null,\n    writeencoding: null\n  };\n\n  // start out asking for a readable event once data is transformed.\n  this._readableState.needReadable = true;\n\n  // we have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n  this._readableState.sync = false;\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform;\n    if (typeof options.flush === 'function') this._flush = options.flush;\n  }\n\n  // When the writable side finishes, then flush out anything remaining.\n  this.on('prefinish', prefinish);\n}\nfunction prefinish() {\n  var _this = this;\n  if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n    this._flush(function (er, data) {\n      done(_this, er, data);\n    });\n  } else {\n    done(this, null, null);\n  }\n}\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n  if (ts.writechunk !== null && !ts.transforming) {\n    ts.transforming = true;\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\nTransform.prototype._destroy = function (err, cb) {\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n  });\n};\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n  if (data != null)\n    // single equals check for both `null` and `undefined`\n    stream.push(data);\n\n  // TODO(BridgeAR): Write a test for these two error cases\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n  if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n  if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n  return stream.push(null);\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n  var _this = this;\n  this.next = null;\n  this.entry = null;\n  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar internalUtil = {\n  deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n  getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n  ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n  ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n  ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n  ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n  ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n  ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nrequire('inherits')(Writable, Stream);\nfunction nop() {}\nfunction WritableState(options, stream, isDuplex) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream,\n  // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n  // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n  // the point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write()\n  this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex);\n\n  // if _final has been called\n  this.finalCalled = false;\n\n  // drain event flag.\n  this.needDrain = false;\n  // at the start of calling end()\n  this.ending = false;\n  // when end() has been called, and returned\n  this.ended = false;\n  // when 'finish' is emitted\n  this.finished = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n  var noDecode = options.decodeStrings === false;\n  this.decodeStrings = !noDecode;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n  this.length = 0;\n\n  // a flag to see when we're in the middle of a write.\n  this.writing = false;\n\n  // when true all writes will be buffered until .uncork() call\n  this.corked = 0;\n\n  // a flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n  this.sync = true;\n\n  // a flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n  this.bufferProcessing = false;\n\n  // the callback that's passed to _write(chunk,cb)\n  this.onwrite = function (er) {\n    onwrite(stream, er);\n  };\n\n  // the callback that the user supplies to write(chunk,encoding,cb)\n  this.writecb = null;\n\n  // the amount that is being written when _write is called.\n  this.writelen = 0;\n  this.bufferedRequest = null;\n  this.lastBufferedRequest = null;\n\n  // number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted\n  this.pendingcb = 0;\n\n  // emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams\n  this.prefinished = false;\n\n  // True if the error was already emitted and should not be thrown again\n  this.errorEmitted = false;\n\n  // Should close be emitted on destroy. Defaults to true.\n  this.emitClose = options.emitClose !== false;\n\n  // Should .destroy() be called after 'finish' (and potentially 'end')\n  this.autoDestroy = !!options.autoDestroy;\n\n  // count buffered requests\n  this.bufferedRequestCount = 0;\n\n  // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n  return out;\n};\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function writableStateBufferGetter() {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function value(object) {\n      if (realHasInstance.call(this, object)) return true;\n      if (this !== Writable) return false;\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function realHasInstance(object) {\n    return object instanceof this;\n  };\n}\nfunction Writable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the WritableState constructor, at least with V8 6.5\n  var isDuplex = this instanceof Duplex;\n  if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n  this._writableState = new WritableState(options, this, isDuplex);\n\n  // legacy.\n  this.writable = true;\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write;\n    if (typeof options.writev === 'function') this._writev = options.writev;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n    if (typeof options.final === 'function') this._final = options.final;\n  }\n  Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n  errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\nfunction writeAfterEnd(stream, cb) {\n  var er = new ERR_STREAM_WRITE_AFTER_END();\n  // TODO: defer error events consistently everywhere, not just the cb\n  errorOrDestroy(stream, er);\n  process.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n  var er;\n  if (chunk === null) {\n    er = new ERR_STREAM_NULL_VALUES();\n  } else if (typeof chunk !== 'string' && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n  }\n  if (er) {\n    errorOrDestroy(stream, er);\n    process.nextTick(cb, er);\n    return false;\n  }\n  return true;\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n  var isBuf = !state.objectMode && _isUint8Array(chunk);\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n  if (typeof cb !== 'function') cb = nop;\n  if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n  return ret;\n};\nWritable.prototype.cork = function () {\n  this._writableState.corked++;\n};\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n  if (state.corked) {\n    state.corked--;\n    if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = Buffer.from(chunk, encoding);\n  }\n  return chunk;\n}\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\n  var len = state.objectMode ? 1 : chunk.length;\n  state.length += len;\n  var ret = state.length < state.highWaterMark;\n  // we must ensure that previous needDrain will not be reset to false.\n  if (!ret) state.needDrain = true;\n  if (state.writing || state.corked) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n  return ret;\n}\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len;\n  state.writecb = cb;\n  state.writing = true;\n  state.sync = true;\n  if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    process.nextTick(cb, er);\n    // this can emit finish, and it will always happen\n    // after error\n    process.nextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er);\n    // this can emit finish, but finish must\n    // always follow error\n    finishMaybe(stream, state);\n  }\n}\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n  if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n  onwriteStateUpdate(state);\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state) || stream.destroyed;\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n    if (sync) {\n      process.nextTick(afterWrite, stream, state, finished, cb);\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n    var count = 0;\n    var allBuffers = true;\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n    buffer.allBuffers = allBuffers;\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n    // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n    state.bufferedRequestCount = 0;\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      state.bufferedRequestCount--;\n      // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n      if (state.writing) {\n        break;\n      }\n    }\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\nWritable.prototype._writev = null;\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  if (typeof chunk === 'function') {\n    cb = chunk;\n    chunk = null;\n    encoding = null;\n  } else if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n  // .end() fully uncorks\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  }\n\n  // ignore unnecessary end() calls.\n  if (!state.ending) endWritable(this, state, cb);\n  return this;\n};\nObject.defineProperty(Writable.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n});\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n    if (err) {\n      errorOrDestroy(stream, err);\n    }\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function' && !state.destroyed) {\n      state.pendingcb++;\n      state.finalCalled = true;\n      process.nextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n  if (need) {\n    prefinish(stream, state);\n    if (state.pendingcb === 0) {\n      state.finished = true;\n      stream.emit('finish');\n      if (state.autoDestroy) {\n        // In case of duplex streams we need a way to detect\n        // if the readable side is ready for autoDestroy as well\n        var rState = stream._readableState;\n        if (!rState || rState.autoDestroy && rState.endEmitted) {\n          stream.destroy();\n        }\n      }\n    }\n  }\n  return need;\n}\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n  if (cb) {\n    if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n  }\n  state.ended = true;\n  stream.writable = false;\n}\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  }\n\n  // reuse the free corkReq.\n  state.corkedRequestsFree.next = corkReq;\n}\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._writableState === undefined) {\n      return false;\n    }\n    return this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._writableState.destroyed = value;\n  }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n  cb(err);\n};","'use strict';\n\nvar _Object$setPrototypeO;\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar finished = require('./end-of-stream');\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\nfunction createIterResult(value, done) {\n  return {\n    value: value,\n    done: done\n  };\n}\nfunction readAndResolve(iter) {\n  var resolve = iter[kLastResolve];\n  if (resolve !== null) {\n    var data = iter[kStream].read();\n    // we defer if data is null\n    // we can be expecting either 'end' or\n    // 'error'\n    if (data !== null) {\n      iter[kLastPromise] = null;\n      iter[kLastResolve] = null;\n      iter[kLastReject] = null;\n      resolve(createIterResult(data, false));\n    }\n  }\n}\nfunction onReadable(iter) {\n  // we wait for the next tick, because it might\n  // emit an error with process.nextTick\n  process.nextTick(readAndResolve, iter);\n}\nfunction wrapForNext(lastPromise, iter) {\n  return function (resolve, reject) {\n    lastPromise.then(function () {\n      if (iter[kEnded]) {\n        resolve(createIterResult(undefined, true));\n        return;\n      }\n      iter[kHandlePromise](resolve, reject);\n    }, reject);\n  };\n}\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n  get stream() {\n    return this[kStream];\n  },\n  next: function next() {\n    var _this = this;\n    // if we have detected an error in the meanwhile\n    // reject straight away\n    var error = this[kError];\n    if (error !== null) {\n      return Promise.reject(error);\n    }\n    if (this[kEnded]) {\n      return Promise.resolve(createIterResult(undefined, true));\n    }\n    if (this[kStream].destroyed) {\n      // We need to defer via nextTick because if .destroy(err) is\n      // called, the error will be emitted via nextTick, and\n      // we cannot guarantee that there is no error lingering around\n      // waiting to be emitted.\n      return new Promise(function (resolve, reject) {\n        process.nextTick(function () {\n          if (_this[kError]) {\n            reject(_this[kError]);\n          } else {\n            resolve(createIterResult(undefined, true));\n          }\n        });\n      });\n    }\n\n    // if we have multiple next() calls\n    // we will wait for the previous Promise to finish\n    // this logic is optimized to support for await loops,\n    // where next() is only called once at a time\n    var lastPromise = this[kLastPromise];\n    var promise;\n    if (lastPromise) {\n      promise = new Promise(wrapForNext(lastPromise, this));\n    } else {\n      // fast path needed to support multiple this.push()\n      // without triggering the next() queue\n      var data = this[kStream].read();\n      if (data !== null) {\n        return Promise.resolve(createIterResult(data, false));\n      }\n      promise = new Promise(this[kHandlePromise]);\n    }\n    this[kLastPromise] = promise;\n    return promise;\n  }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n  return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n  var _this2 = this;\n  // destroy(err, cb) is a private API\n  // we can guarantee we have that here, because we control the\n  // Readable class this is attached to\n  return new Promise(function (resolve, reject) {\n    _this2[kStream].destroy(null, function (err) {\n      if (err) {\n        reject(err);\n        return;\n      }\n      resolve(createIterResult(undefined, true));\n    });\n  });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n  var _Object$create;\n  var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n    value: stream,\n    writable: true\n  }), _defineProperty(_Object$create, kLastResolve, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kLastReject, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kError, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kEnded, {\n    value: stream._readableState.endEmitted,\n    writable: true\n  }), _defineProperty(_Object$create, kHandlePromise, {\n    value: function value(resolve, reject) {\n      var data = iterator[kStream].read();\n      if (data) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        resolve(createIterResult(data, false));\n      } else {\n        iterator[kLastResolve] = resolve;\n        iterator[kLastReject] = reject;\n      }\n    },\n    writable: true\n  }), _Object$create));\n  iterator[kLastPromise] = null;\n  finished(stream, function (err) {\n    if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n      var reject = iterator[kLastReject];\n      // reject if we are waiting for data in the Promise\n      // returned by next() and store the error\n      if (reject !== null) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        reject(err);\n      }\n      iterator[kError] = err;\n      return;\n    }\n    var resolve = iterator[kLastResolve];\n    if (resolve !== null) {\n      iterator[kLastPromise] = null;\n      iterator[kLastResolve] = null;\n      iterator[kLastReject] = null;\n      resolve(createIterResult(undefined, true));\n    }\n    iterator[kEnded] = true;\n  });\n  stream.on('readable', onReadable.bind(null, iterator));\n  return iterator;\n};\nmodule.exports = createReadableStreamAsyncIterator;","'use strict';\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n  var _this = this;\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err) {\n      if (!this._writableState) {\n        process.nextTick(emitErrorNT, this, err);\n      } else if (!this._writableState.errorEmitted) {\n        this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorNT, this, err);\n      }\n    }\n    return this;\n  }\n\n  // we set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  }\n\n  // if this is a duplex stream mark the writable part as destroyed as well\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      if (!_this._writableState) {\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else if (!_this._writableState.errorEmitted) {\n        _this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else {\n        process.nextTick(emitCloseNT, _this);\n      }\n    } else if (cb) {\n      process.nextTick(emitCloseNT, _this);\n      cb(err);\n    } else {\n      process.nextTick(emitCloseNT, _this);\n    }\n  });\n  return this;\n}\nfunction emitErrorAndCloseNT(self, err) {\n  emitErrorNT(self, err);\n  emitCloseNT(self);\n}\nfunction emitCloseNT(self) {\n  if (self._writableState && !self._writableState.emitClose) return;\n  if (self._readableState && !self._readableState.emitClose) return;\n  self.emit('close');\n}\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finalCalled = false;\n    this._writableState.prefinished = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\nfunction errorOrDestroy(stream, err) {\n  // We have tests that rely on errors being emitted\n  // in the same tick, so changing this is semver major.\n  // For now when you opt-in to autoDestroy we allow\n  // the error to be emitted nextTick. In a future\n  // semver major update we should change the default to this.\n\n  var rState = stream._readableState;\n  var wState = stream._writableState;\n  if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy,\n  errorOrDestroy: errorOrDestroy\n};","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    callback.apply(this, args);\n  };\n}\nfunction noop() {}\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction eos(stream, opts, callback) {\n  if (typeof opts === 'function') return eos(stream, null, opts);\n  if (!opts) opts = {};\n  callback = once(callback || noop);\n  var readable = opts.readable || opts.readable !== false && stream.readable;\n  var writable = opts.writable || opts.writable !== false && stream.writable;\n  var onlegacyfinish = function onlegacyfinish() {\n    if (!stream.writable) onfinish();\n  };\n  var writableEnded = stream._writableState && stream._writableState.finished;\n  var onfinish = function onfinish() {\n    writable = false;\n    writableEnded = true;\n    if (!readable) callback.call(stream);\n  };\n  var readableEnded = stream._readableState && stream._readableState.endEmitted;\n  var onend = function onend() {\n    readable = false;\n    readableEnded = true;\n    if (!writable) callback.call(stream);\n  };\n  var onerror = function onerror(err) {\n    callback.call(stream, err);\n  };\n  var onclose = function onclose() {\n    var err;\n    if (readable && !readableEnded) {\n      if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n    if (writable && !writableEnded) {\n      if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n  };\n  var onrequest = function onrequest() {\n    stream.req.on('finish', onfinish);\n  };\n  if (isRequest(stream)) {\n    stream.on('complete', onfinish);\n    stream.on('abort', onclose);\n    if (stream.req) onrequest();else stream.on('request', onrequest);\n  } else if (writable && !stream._writableState) {\n    // legacy streams\n    stream.on('end', onlegacyfinish);\n    stream.on('close', onlegacyfinish);\n  }\n  stream.on('end', onend);\n  stream.on('finish', onfinish);\n  if (opts.error !== false) stream.on('error', onerror);\n  stream.on('close', onclose);\n  return function () {\n    stream.removeListener('complete', onfinish);\n    stream.removeListener('abort', onclose);\n    stream.removeListener('request', onrequest);\n    if (stream.req) stream.req.removeListener('finish', onfinish);\n    stream.removeListener('end', onlegacyfinish);\n    stream.removeListener('close', onlegacyfinish);\n    stream.removeListener('finish', onfinish);\n    stream.removeListener('end', onend);\n    stream.removeListener('error', onerror);\n    stream.removeListener('close', onclose);\n  };\n}\nmodule.exports = eos;","module.exports = function () {\n  throw new Error('Readable.from is not available in the browser')\n};\n","// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar eos;\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n    callback.apply(void 0, arguments);\n  };\n}\nvar _require$codes = require('../../../errors').codes,\n  ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n  ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\nfunction noop(err) {\n  // Rethrow the error if it exists to avoid swallowing it\n  if (err) throw err;\n}\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction destroyer(stream, reading, writing, callback) {\n  callback = once(callback);\n  var closed = false;\n  stream.on('close', function () {\n    closed = true;\n  });\n  if (eos === undefined) eos = require('./end-of-stream');\n  eos(stream, {\n    readable: reading,\n    writable: writing\n  }, function (err) {\n    if (err) return callback(err);\n    closed = true;\n    callback();\n  });\n  var destroyed = false;\n  return function (err) {\n    if (closed) return;\n    if (destroyed) return;\n    destroyed = true;\n\n    // request.destroy just do .end - .abort is what we want\n    if (isRequest(stream)) return stream.abort();\n    if (typeof stream.destroy === 'function') return stream.destroy();\n    callback(err || new ERR_STREAM_DESTROYED('pipe'));\n  };\n}\nfunction call(fn) {\n  fn();\n}\nfunction pipe(from, to) {\n  return from.pipe(to);\n}\nfunction popCallback(streams) {\n  if (!streams.length) return noop;\n  if (typeof streams[streams.length - 1] !== 'function') return noop;\n  return streams.pop();\n}\nfunction pipeline() {\n  for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n    streams[_key] = arguments[_key];\n  }\n  var callback = popCallback(streams);\n  if (Array.isArray(streams[0])) streams = streams[0];\n  if (streams.length < 2) {\n    throw new ERR_MISSING_ARGS('streams');\n  }\n  var error;\n  var destroys = streams.map(function (stream, i) {\n    var reading = i < streams.length - 1;\n    var writing = i > 0;\n    return destroyer(stream, reading, writing, function (err) {\n      if (!error) error = err;\n      if (err) destroys.forEach(call);\n      if (reading) return;\n      destroys.forEach(call);\n      callback(error);\n    });\n  });\n  return streams.reduce(pipe);\n}\nmodule.exports = pipeline;","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n  return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n  var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n  if (hwm != null) {\n    if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n      var name = isDuplex ? duplexKey : 'highWaterMark';\n      throw new ERR_INVALID_OPT_VALUE(name, hwm);\n    }\n    return Math.floor(hwm);\n  }\n\n  // Default value\n  return state.objectMode ? 16 : 16 * 1024;\n}\nmodule.exports = {\n  getHighWaterMark: getHighWaterMark\n};","module.exports = require('events').EventEmitter;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n  encoding = '' + encoding;\n  switch (encoding && encoding.toLowerCase()) {\n    case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n      return true;\n    default:\n      return false;\n  }\n};\n\nfunction _normalizeEncoding(enc) {\n  if (!enc) return 'utf8';\n  var retried;\n  while (true) {\n    switch (enc) {\n      case 'utf8':\n      case 'utf-8':\n        return 'utf8';\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return 'utf16le';\n      case 'latin1':\n      case 'binary':\n        return 'latin1';\n      case 'base64':\n      case 'ascii':\n      case 'hex':\n        return enc;\n      default:\n        if (retried) return; // undefined\n        enc = ('' + enc).toLowerCase();\n        retried = true;\n    }\n  }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n  var nenc = _normalizeEncoding(enc);\n  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n  return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n  this.encoding = normalizeEncoding(encoding);\n  var nb;\n  switch (this.encoding) {\n    case 'utf16le':\n      this.text = utf16Text;\n      this.end = utf16End;\n      nb = 4;\n      break;\n    case 'utf8':\n      this.fillLast = utf8FillLast;\n      nb = 4;\n      break;\n    case 'base64':\n      this.text = base64Text;\n      this.end = base64End;\n      nb = 3;\n      break;\n    default:\n      this.write = simpleWrite;\n      this.end = simpleEnd;\n      return;\n  }\n  this.lastNeed = 0;\n  this.lastTotal = 0;\n  this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n  if (buf.length === 0) return '';\n  var r;\n  var i;\n  if (this.lastNeed) {\n    r = this.fillLast(buf);\n    if (r === undefined) return '';\n    i = this.lastNeed;\n    this.lastNeed = 0;\n  } else {\n    i = 0;\n  }\n  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n  return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n  this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n  return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n  var j = buf.length - 1;\n  if (j < i) return 0;\n  var nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 1;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 2;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) {\n      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n    }\n    return nb;\n  }\n  return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n  if ((buf[0] & 0xC0) !== 0x80) {\n    self.lastNeed = 0;\n    return '\\ufffd';\n  }\n  if (self.lastNeed > 1 && buf.length > 1) {\n    if ((buf[1] & 0xC0) !== 0x80) {\n      self.lastNeed = 1;\n      return '\\ufffd';\n    }\n    if (self.lastNeed > 2 && buf.length > 2) {\n      if ((buf[2] & 0xC0) !== 0x80) {\n        self.lastNeed = 2;\n        return '\\ufffd';\n      }\n    }\n  }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n  var p = this.lastTotal - this.lastNeed;\n  var r = utf8CheckExtraBytes(this, buf, p);\n  if (r !== undefined) return r;\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, p, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, p, 0, buf.length);\n  this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n  var total = utf8CheckIncomplete(this, buf, i);\n  if (!this.lastNeed) return buf.toString('utf8', i);\n  this.lastTotal = total;\n  var end = buf.length - (total - this.lastNeed);\n  buf.copy(this.lastChar, 0, end);\n  return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + '\\ufffd';\n  return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n  if ((buf.length - i) % 2 === 0) {\n    var r = buf.toString('utf16le', i);\n    if (r) {\n      var c = r.charCodeAt(r.length - 1);\n      if (c >= 0xD800 && c <= 0xDBFF) {\n        this.lastNeed = 2;\n        this.lastTotal = 4;\n        this.lastChar[0] = buf[buf.length - 2];\n        this.lastChar[1] = buf[buf.length - 1];\n        return r.slice(0, -1);\n      }\n    }\n    return r;\n  }\n  this.lastNeed = 1;\n  this.lastTotal = 2;\n  this.lastChar[0] = buf[buf.length - 1];\n  return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) {\n    var end = this.lastTotal - this.lastNeed;\n    return r + this.lastChar.toString('utf16le', 0, end);\n  }\n  return r;\n}\n\nfunction base64Text(buf, i) {\n  var n = (buf.length - i) % 3;\n  if (n === 0) return buf.toString('base64', i);\n  this.lastNeed = 3 - n;\n  this.lastTotal = 3;\n  if (n === 1) {\n    this.lastChar[0] = buf[buf.length - 1];\n  } else {\n    this.lastChar[0] = buf[buf.length - 2];\n    this.lastChar[1] = buf[buf.length - 1];\n  }\n  return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n  return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n  return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n  return buf && buf.length ? this.write(buf) : '';\n}","var TINF_OK = 0;\nvar TINF_DATA_ERROR = -3;\n\nfunction Tree() {\n  this.table = new Uint16Array(16);   /* table of code length counts */\n  this.trans = new Uint16Array(288);  /* code -> symbol translation table */\n}\n\nfunction Data(source, dest) {\n  this.source = source;\n  this.sourceIndex = 0;\n  this.tag = 0;\n  this.bitcount = 0;\n  \n  this.dest = dest;\n  this.destLen = 0;\n  \n  this.ltree = new Tree();  /* dynamic length/symbol tree */\n  this.dtree = new Tree();  /* dynamic distance tree */\n}\n\n/* --------------------------------------------------- *\n * -- uninitialized global data (static structures) -- *\n * --------------------------------------------------- */\n\nvar sltree = new Tree();\nvar sdtree = new Tree();\n\n/* extra bits and base tables for length codes */\nvar length_bits = new Uint8Array(30);\nvar length_base = new Uint16Array(30);\n\n/* extra bits and base tables for distance codes */\nvar dist_bits = new Uint8Array(30);\nvar dist_base = new Uint16Array(30);\n\n/* special ordering of code length codes */\nvar clcidx = new Uint8Array([\n  16, 17, 18, 0, 8, 7, 9, 6,\n  10, 5, 11, 4, 12, 3, 13, 2,\n  14, 1, 15\n]);\n\n/* used by tinf_decode_trees, avoids allocations every call */\nvar code_tree = new Tree();\nvar lengths = new Uint8Array(288 + 32);\n\n/* ----------------------- *\n * -- utility functions -- *\n * ----------------------- */\n\n/* build extra bits and base tables */\nfunction tinf_build_bits_base(bits, base, delta, first) {\n  var i, sum;\n\n  /* build bits table */\n  for (i = 0; i < delta; ++i) bits[i] = 0;\n  for (i = 0; i < 30 - delta; ++i) bits[i + delta] = i / delta | 0;\n\n  /* build base table */\n  for (sum = first, i = 0; i < 30; ++i) {\n    base[i] = sum;\n    sum += 1 << bits[i];\n  }\n}\n\n/* build the fixed huffman trees */\nfunction tinf_build_fixed_trees(lt, dt) {\n  var i;\n\n  /* build fixed length tree */\n  for (i = 0; i < 7; ++i) lt.table[i] = 0;\n\n  lt.table[7] = 24;\n  lt.table[8] = 152;\n  lt.table[9] = 112;\n\n  for (i = 0; i < 24; ++i) lt.trans[i] = 256 + i;\n  for (i = 0; i < 144; ++i) lt.trans[24 + i] = i;\n  for (i = 0; i < 8; ++i) lt.trans[24 + 144 + i] = 280 + i;\n  for (i = 0; i < 112; ++i) lt.trans[24 + 144 + 8 + i] = 144 + i;\n\n  /* build fixed distance tree */\n  for (i = 0; i < 5; ++i) dt.table[i] = 0;\n\n  dt.table[5] = 32;\n\n  for (i = 0; i < 32; ++i) dt.trans[i] = i;\n}\n\n/* given an array of code lengths, build a tree */\nvar offs = new Uint16Array(16);\n\nfunction tinf_build_tree(t, lengths, off, num) {\n  var i, sum;\n\n  /* clear code length count table */\n  for (i = 0; i < 16; ++i) t.table[i] = 0;\n\n  /* scan symbol lengths, and sum code length counts */\n  for (i = 0; i < num; ++i) t.table[lengths[off + i]]++;\n\n  t.table[0] = 0;\n\n  /* compute offset table for distribution sort */\n  for (sum = 0, i = 0; i < 16; ++i) {\n    offs[i] = sum;\n    sum += t.table[i];\n  }\n\n  /* create code->symbol translation table (symbols sorted by code) */\n  for (i = 0; i < num; ++i) {\n    if (lengths[off + i]) t.trans[offs[lengths[off + i]]++] = i;\n  }\n}\n\n/* ---------------------- *\n * -- decode functions -- *\n * ---------------------- */\n\n/* get one bit from source stream */\nfunction tinf_getbit(d) {\n  /* check if tag is empty */\n  if (!d.bitcount--) {\n    /* load next tag */\n    d.tag = d.source[d.sourceIndex++];\n    d.bitcount = 7;\n  }\n\n  /* shift bit out of tag */\n  var bit = d.tag & 1;\n  d.tag >>>= 1;\n\n  return bit;\n}\n\n/* read a num bit value from a stream and add base */\nfunction tinf_read_bits(d, num, base) {\n  if (!num)\n    return base;\n\n  while (d.bitcount < 24) {\n    d.tag |= d.source[d.sourceIndex++] << d.bitcount;\n    d.bitcount += 8;\n  }\n\n  var val = d.tag & (0xffff >>> (16 - num));\n  d.tag >>>= num;\n  d.bitcount -= num;\n  return val + base;\n}\n\n/* given a data stream and a tree, decode a symbol */\nfunction tinf_decode_symbol(d, t) {\n  while (d.bitcount < 24) {\n    d.tag |= d.source[d.sourceIndex++] << d.bitcount;\n    d.bitcount += 8;\n  }\n  \n  var sum = 0, cur = 0, len = 0;\n  var tag = d.tag;\n\n  /* get more bits while code value is above sum */\n  do {\n    cur = 2 * cur + (tag & 1);\n    tag >>>= 1;\n    ++len;\n\n    sum += t.table[len];\n    cur -= t.table[len];\n  } while (cur >= 0);\n  \n  d.tag = tag;\n  d.bitcount -= len;\n\n  return t.trans[sum + cur];\n}\n\n/* given a data stream, decode dynamic trees from it */\nfunction tinf_decode_trees(d, lt, dt) {\n  var hlit, hdist, hclen;\n  var i, num, length;\n\n  /* get 5 bits HLIT (257-286) */\n  hlit = tinf_read_bits(d, 5, 257);\n\n  /* get 5 bits HDIST (1-32) */\n  hdist = tinf_read_bits(d, 5, 1);\n\n  /* get 4 bits HCLEN (4-19) */\n  hclen = tinf_read_bits(d, 4, 4);\n\n  for (i = 0; i < 19; ++i) lengths[i] = 0;\n\n  /* read code lengths for code length alphabet */\n  for (i = 0; i < hclen; ++i) {\n    /* get 3 bits code length (0-7) */\n    var clen = tinf_read_bits(d, 3, 0);\n    lengths[clcidx[i]] = clen;\n  }\n\n  /* build code length tree */\n  tinf_build_tree(code_tree, lengths, 0, 19);\n\n  /* decode code lengths for the dynamic trees */\n  for (num = 0; num < hlit + hdist;) {\n    var sym = tinf_decode_symbol(d, code_tree);\n\n    switch (sym) {\n      case 16:\n        /* copy previous code length 3-6 times (read 2 bits) */\n        var prev = lengths[num - 1];\n        for (length = tinf_read_bits(d, 2, 3); length; --length) {\n          lengths[num++] = prev;\n        }\n        break;\n      case 17:\n        /* repeat code length 0 for 3-10 times (read 3 bits) */\n        for (length = tinf_read_bits(d, 3, 3); length; --length) {\n          lengths[num++] = 0;\n        }\n        break;\n      case 18:\n        /* repeat code length 0 for 11-138 times (read 7 bits) */\n        for (length = tinf_read_bits(d, 7, 11); length; --length) {\n          lengths[num++] = 0;\n        }\n        break;\n      default:\n        /* values 0-15 represent the actual code lengths */\n        lengths[num++] = sym;\n        break;\n    }\n  }\n\n  /* build dynamic trees */\n  tinf_build_tree(lt, lengths, 0, hlit);\n  tinf_build_tree(dt, lengths, hlit, hdist);\n}\n\n/* ----------------------------- *\n * -- block inflate functions -- *\n * ----------------------------- */\n\n/* given a stream and two trees, inflate a block of data */\nfunction tinf_inflate_block_data(d, lt, dt) {\n  while (1) {\n    var sym = tinf_decode_symbol(d, lt);\n\n    /* check for end of block */\n    if (sym === 256) {\n      return TINF_OK;\n    }\n\n    if (sym < 256) {\n      d.dest[d.destLen++] = sym;\n    } else {\n      var length, dist, offs;\n      var i;\n\n      sym -= 257;\n\n      /* possibly get more bits from length code */\n      length = tinf_read_bits(d, length_bits[sym], length_base[sym]);\n\n      dist = tinf_decode_symbol(d, dt);\n\n      /* possibly get more bits from distance code */\n      offs = d.destLen - tinf_read_bits(d, dist_bits[dist], dist_base[dist]);\n\n      /* copy match */\n      for (i = offs; i < offs + length; ++i) {\n        d.dest[d.destLen++] = d.dest[i];\n      }\n    }\n  }\n}\n\n/* inflate an uncompressed block of data */\nfunction tinf_inflate_uncompressed_block(d) {\n  var length, invlength;\n  var i;\n  \n  /* unread from bitbuffer */\n  while (d.bitcount > 8) {\n    d.sourceIndex--;\n    d.bitcount -= 8;\n  }\n\n  /* get length */\n  length = d.source[d.sourceIndex + 1];\n  length = 256 * length + d.source[d.sourceIndex];\n\n  /* get one's complement of length */\n  invlength = d.source[d.sourceIndex + 3];\n  invlength = 256 * invlength + d.source[d.sourceIndex + 2];\n\n  /* check length */\n  if (length !== (~invlength & 0x0000ffff))\n    return TINF_DATA_ERROR;\n\n  d.sourceIndex += 4;\n\n  /* copy block */\n  for (i = length; i; --i)\n    d.dest[d.destLen++] = d.source[d.sourceIndex++];\n\n  /* make sure we start next block on a byte boundary */\n  d.bitcount = 0;\n\n  return TINF_OK;\n}\n\n/* inflate stream from source to dest */\nfunction tinf_uncompress(source, dest) {\n  var d = new Data(source, dest);\n  var bfinal, btype, res;\n\n  do {\n    /* read final block flag */\n    bfinal = tinf_getbit(d);\n\n    /* read block type (2 bits) */\n    btype = tinf_read_bits(d, 2, 0);\n\n    /* decompress block */\n    switch (btype) {\n      case 0:\n        /* decompress uncompressed block */\n        res = tinf_inflate_uncompressed_block(d);\n        break;\n      case 1:\n        /* decompress block with fixed huffman trees */\n        res = tinf_inflate_block_data(d, sltree, sdtree);\n        break;\n      case 2:\n        /* decompress block with dynamic huffman trees */\n        tinf_decode_trees(d, d.ltree, d.dtree);\n        res = tinf_inflate_block_data(d, d.ltree, d.dtree);\n        break;\n      default:\n        res = TINF_DATA_ERROR;\n    }\n\n    if (res !== TINF_OK)\n      throw new Error('Data error');\n\n  } while (!bfinal);\n\n  if (d.destLen < d.dest.length) {\n    if (typeof d.dest.slice === 'function')\n      return d.dest.slice(0, d.destLen);\n    else\n      return d.dest.subarray(0, d.destLen);\n  }\n  \n  return d.dest;\n}\n\n/* -------------------- *\n * -- initialization -- *\n * -------------------- */\n\n/* build fixed huffman trees */\ntinf_build_fixed_trees(sltree, sdtree);\n\n/* build extra bits and base tables */\ntinf_build_bits_base(length_bits, length_base, 4, 3);\ntinf_build_bits_base(dist_bits, dist_base, 2, 1);\n\n/* fix a special case */\nlength_bits[28] = 0;\nlength_base[28] = 258;\n\nmodule.exports = tinf_uncompress;\n","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n  if (config('noDeprecation')) {\n    return fn;\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (config('throwDeprecation')) {\n        throw new Error(msg);\n      } else if (config('traceDeprecation')) {\n        console.trace(msg);\n      } else {\n        console.warn(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n  // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n  try {\n    if (!global.localStorage) return false;\n  } catch (_) {\n    return false;\n  }\n  var val = global.localStorage[name];\n  if (null == val) return false;\n  return String(val).toLowerCase() === 'true';\n}\n","module.exports = function isBuffer(arg) {\n  return arg && typeof arg === 'object'\n    && typeof arg.copy === 'function'\n    && typeof arg.fill === 'function'\n    && typeof arg.readUInt8 === 'function';\n}","// Currently in sync with Node.js lib/internal/util/types.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n\n'use strict';\n\nvar isArgumentsObject = require('is-arguments');\nvar isGeneratorFunction = require('is-generator-function');\nvar whichTypedArray = require('which-typed-array');\nvar isTypedArray = require('is-typed-array');\n\nfunction uncurryThis(f) {\n  return f.call.bind(f);\n}\n\nvar BigIntSupported = typeof BigInt !== 'undefined';\nvar SymbolSupported = typeof Symbol !== 'undefined';\n\nvar ObjectToString = uncurryThis(Object.prototype.toString);\n\nvar numberValue = uncurryThis(Number.prototype.valueOf);\nvar stringValue = uncurryThis(String.prototype.valueOf);\nvar booleanValue = uncurryThis(Boolean.prototype.valueOf);\n\nif (BigIntSupported) {\n  var bigIntValue = uncurryThis(BigInt.prototype.valueOf);\n}\n\nif (SymbolSupported) {\n  var symbolValue = uncurryThis(Symbol.prototype.valueOf);\n}\n\nfunction checkBoxedPrimitive(value, prototypeValueOf) {\n  if (typeof value !== 'object') {\n    return false;\n  }\n  try {\n    prototypeValueOf(value);\n    return true;\n  } catch(e) {\n    return false;\n  }\n}\n\nexports.isArgumentsObject = isArgumentsObject;\nexports.isGeneratorFunction = isGeneratorFunction;\nexports.isTypedArray = isTypedArray;\n\n// Taken from here and modified for better browser support\n// https://github.com/sindresorhus/p-is-promise/blob/cda35a513bda03f977ad5cde3a079d237e82d7ef/index.js\nfunction isPromise(input) {\n\treturn (\n\t\t(\n\t\t\ttypeof Promise !== 'undefined' &&\n\t\t\tinput instanceof Promise\n\t\t) ||\n\t\t(\n\t\t\tinput !== null &&\n\t\t\ttypeof input === 'object' &&\n\t\t\ttypeof input.then === 'function' &&\n\t\t\ttypeof input.catch === 'function'\n\t\t)\n\t);\n}\nexports.isPromise = isPromise;\n\nfunction isArrayBufferView(value) {\n  if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n    return ArrayBuffer.isView(value);\n  }\n\n  return (\n    isTypedArray(value) ||\n    isDataView(value)\n  );\n}\nexports.isArrayBufferView = isArrayBufferView;\n\n\nfunction isUint8Array(value) {\n  return whichTypedArray(value) === 'Uint8Array';\n}\nexports.isUint8Array = isUint8Array;\n\nfunction isUint8ClampedArray(value) {\n  return whichTypedArray(value) === 'Uint8ClampedArray';\n}\nexports.isUint8ClampedArray = isUint8ClampedArray;\n\nfunction isUint16Array(value) {\n  return whichTypedArray(value) === 'Uint16Array';\n}\nexports.isUint16Array = isUint16Array;\n\nfunction isUint32Array(value) {\n  return whichTypedArray(value) === 'Uint32Array';\n}\nexports.isUint32Array = isUint32Array;\n\nfunction isInt8Array(value) {\n  return whichTypedArray(value) === 'Int8Array';\n}\nexports.isInt8Array = isInt8Array;\n\nfunction isInt16Array(value) {\n  return whichTypedArray(value) === 'Int16Array';\n}\nexports.isInt16Array = isInt16Array;\n\nfunction isInt32Array(value) {\n  return whichTypedArray(value) === 'Int32Array';\n}\nexports.isInt32Array = isInt32Array;\n\nfunction isFloat32Array(value) {\n  return whichTypedArray(value) === 'Float32Array';\n}\nexports.isFloat32Array = isFloat32Array;\n\nfunction isFloat64Array(value) {\n  return whichTypedArray(value) === 'Float64Array';\n}\nexports.isFloat64Array = isFloat64Array;\n\nfunction isBigInt64Array(value) {\n  return whichTypedArray(value) === 'BigInt64Array';\n}\nexports.isBigInt64Array = isBigInt64Array;\n\nfunction isBigUint64Array(value) {\n  return whichTypedArray(value) === 'BigUint64Array';\n}\nexports.isBigUint64Array = isBigUint64Array;\n\nfunction isMapToString(value) {\n  return ObjectToString(value) === '[object Map]';\n}\nisMapToString.working = (\n  typeof Map !== 'undefined' &&\n  isMapToString(new Map())\n);\n\nfunction isMap(value) {\n  if (typeof Map === 'undefined') {\n    return false;\n  }\n\n  return isMapToString.working\n    ? isMapToString(value)\n    : value instanceof Map;\n}\nexports.isMap = isMap;\n\nfunction isSetToString(value) {\n  return ObjectToString(value) === '[object Set]';\n}\nisSetToString.working = (\n  typeof Set !== 'undefined' &&\n  isSetToString(new Set())\n);\nfunction isSet(value) {\n  if (typeof Set === 'undefined') {\n    return false;\n  }\n\n  return isSetToString.working\n    ? isSetToString(value)\n    : value instanceof Set;\n}\nexports.isSet = isSet;\n\nfunction isWeakMapToString(value) {\n  return ObjectToString(value) === '[object WeakMap]';\n}\nisWeakMapToString.working = (\n  typeof WeakMap !== 'undefined' &&\n  isWeakMapToString(new WeakMap())\n);\nfunction isWeakMap(value) {\n  if (typeof WeakMap === 'undefined') {\n    return false;\n  }\n\n  return isWeakMapToString.working\n    ? isWeakMapToString(value)\n    : value instanceof WeakMap;\n}\nexports.isWeakMap = isWeakMap;\n\nfunction isWeakSetToString(value) {\n  return ObjectToString(value) === '[object WeakSet]';\n}\nisWeakSetToString.working = (\n  typeof WeakSet !== 'undefined' &&\n  isWeakSetToString(new WeakSet())\n);\nfunction isWeakSet(value) {\n  return isWeakSetToString(value);\n}\nexports.isWeakSet = isWeakSet;\n\nfunction isArrayBufferToString(value) {\n  return ObjectToString(value) === '[object ArrayBuffer]';\n}\nisArrayBufferToString.working = (\n  typeof ArrayBuffer !== 'undefined' &&\n  isArrayBufferToString(new ArrayBuffer())\n);\nfunction isArrayBuffer(value) {\n  if (typeof ArrayBuffer === 'undefined') {\n    return false;\n  }\n\n  return isArrayBufferToString.working\n    ? isArrayBufferToString(value)\n    : value instanceof ArrayBuffer;\n}\nexports.isArrayBuffer = isArrayBuffer;\n\nfunction isDataViewToString(value) {\n  return ObjectToString(value) === '[object DataView]';\n}\nisDataViewToString.working = (\n  typeof ArrayBuffer !== 'undefined' &&\n  typeof DataView !== 'undefined' &&\n  isDataViewToString(new DataView(new ArrayBuffer(1), 0, 1))\n);\nfunction isDataView(value) {\n  if (typeof DataView === 'undefined') {\n    return false;\n  }\n\n  return isDataViewToString.working\n    ? isDataViewToString(value)\n    : value instanceof DataView;\n}\nexports.isDataView = isDataView;\n\n// Store a copy of SharedArrayBuffer in case it's deleted elsewhere\nvar SharedArrayBufferCopy = typeof SharedArrayBuffer !== 'undefined' ? SharedArrayBuffer : undefined;\nfunction isSharedArrayBufferToString(value) {\n  return ObjectToString(value) === '[object SharedArrayBuffer]';\n}\nfunction isSharedArrayBuffer(value) {\n  if (typeof SharedArrayBufferCopy === 'undefined') {\n    return false;\n  }\n\n  if (typeof isSharedArrayBufferToString.working === 'undefined') {\n    isSharedArrayBufferToString.working = isSharedArrayBufferToString(new SharedArrayBufferCopy());\n  }\n\n  return isSharedArrayBufferToString.working\n    ? isSharedArrayBufferToString(value)\n    : value instanceof SharedArrayBufferCopy;\n}\nexports.isSharedArrayBuffer = isSharedArrayBuffer;\n\nfunction isAsyncFunction(value) {\n  return ObjectToString(value) === '[object AsyncFunction]';\n}\nexports.isAsyncFunction = isAsyncFunction;\n\nfunction isMapIterator(value) {\n  return ObjectToString(value) === '[object Map Iterator]';\n}\nexports.isMapIterator = isMapIterator;\n\nfunction isSetIterator(value) {\n  return ObjectToString(value) === '[object Set Iterator]';\n}\nexports.isSetIterator = isSetIterator;\n\nfunction isGeneratorObject(value) {\n  return ObjectToString(value) === '[object Generator]';\n}\nexports.isGeneratorObject = isGeneratorObject;\n\nfunction isWebAssemblyCompiledModule(value) {\n  return ObjectToString(value) === '[object WebAssembly.Module]';\n}\nexports.isWebAssemblyCompiledModule = isWebAssemblyCompiledModule;\n\nfunction isNumberObject(value) {\n  return checkBoxedPrimitive(value, numberValue);\n}\nexports.isNumberObject = isNumberObject;\n\nfunction isStringObject(value) {\n  return checkBoxedPrimitive(value, stringValue);\n}\nexports.isStringObject = isStringObject;\n\nfunction isBooleanObject(value) {\n  return checkBoxedPrimitive(value, booleanValue);\n}\nexports.isBooleanObject = isBooleanObject;\n\nfunction isBigIntObject(value) {\n  return BigIntSupported && checkBoxedPrimitive(value, bigIntValue);\n}\nexports.isBigIntObject = isBigIntObject;\n\nfunction isSymbolObject(value) {\n  return SymbolSupported && checkBoxedPrimitive(value, symbolValue);\n}\nexports.isSymbolObject = isSymbolObject;\n\nfunction isBoxedPrimitive(value) {\n  return (\n    isNumberObject(value) ||\n    isStringObject(value) ||\n    isBooleanObject(value) ||\n    isBigIntObject(value) ||\n    isSymbolObject(value)\n  );\n}\nexports.isBoxedPrimitive = isBoxedPrimitive;\n\nfunction isAnyArrayBuffer(value) {\n  return typeof Uint8Array !== 'undefined' && (\n    isArrayBuffer(value) ||\n    isSharedArrayBuffer(value)\n  );\n}\nexports.isAnyArrayBuffer = isAnyArrayBuffer;\n\n['isProxy', 'isExternal', 'isModuleNamespaceObject'].forEach(function(method) {\n  Object.defineProperty(exports, method, {\n    enumerable: false,\n    value: function() {\n      throw new Error(method + ' is not supported in userland');\n    }\n  });\n});\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n  function getOwnPropertyDescriptors(obj) {\n    var keys = Object.keys(obj);\n    var descriptors = {};\n    for (var i = 0; i < keys.length; i++) {\n      descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n    }\n    return descriptors;\n  };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n  if (!isString(f)) {\n    var objects = [];\n    for (var i = 0; i < arguments.length; i++) {\n      objects.push(inspect(arguments[i]));\n    }\n    return objects.join(' ');\n  }\n\n  var i = 1;\n  var args = arguments;\n  var len = args.length;\n  var str = String(f).replace(formatRegExp, function(x) {\n    if (x === '%%') return '%';\n    if (i >= len) return x;\n    switch (x) {\n      case '%s': return String(args[i++]);\n      case '%d': return Number(args[i++]);\n      case '%j':\n        try {\n          return JSON.stringify(args[i++]);\n        } catch (_) {\n          return '[Circular]';\n        }\n      default:\n        return x;\n    }\n  });\n  for (var x = args[i]; i < len; x = args[++i]) {\n    if (isNull(x) || !isObject(x)) {\n      str += ' ' + x;\n    } else {\n      str += ' ' + inspect(x);\n    }\n  }\n  return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n  if (typeof process !== 'undefined' && process.noDeprecation === true) {\n    return fn;\n  }\n\n  // Allow for deprecating things in the process of starting up.\n  if (typeof process === 'undefined') {\n    return function() {\n      return exports.deprecate(fn, msg).apply(this, arguments);\n    };\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (process.throwDeprecation) {\n        throw new Error(msg);\n      } else if (process.traceDeprecation) {\n        console.trace(msg);\n      } else {\n        console.error(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnvRegex = /^$/;\n\nif (process.env.NODE_DEBUG) {\n  var debugEnv = process.env.NODE_DEBUG;\n  debugEnv = debugEnv.replace(/[|\\\\{}()[\\]^$+?.]/g, '\\\\$&')\n    .replace(/\\*/g, '.*')\n    .replace(/,/g, '$|^')\n    .toUpperCase();\n  debugEnvRegex = new RegExp('^' + debugEnv + '$', 'i');\n}\nexports.debuglog = function(set) {\n  set = set.toUpperCase();\n  if (!debugs[set]) {\n    if (debugEnvRegex.test(set)) {\n      var pid = process.pid;\n      debugs[set] = function() {\n        var msg = exports.format.apply(exports, arguments);\n        console.error('%s %d: %s', set, pid, msg);\n      };\n    } else {\n      debugs[set] = function() {};\n    }\n  }\n  return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n  // default options\n  var ctx = {\n    seen: [],\n    stylize: stylizeNoColor\n  };\n  // legacy...\n  if (arguments.length >= 3) ctx.depth = arguments[2];\n  if (arguments.length >= 4) ctx.colors = arguments[3];\n  if (isBoolean(opts)) {\n    // legacy...\n    ctx.showHidden = opts;\n  } else if (opts) {\n    // got an \"options\" object\n    exports._extend(ctx, opts);\n  }\n  // set default options\n  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n  if (isUndefined(ctx.depth)) ctx.depth = 2;\n  if (isUndefined(ctx.colors)) ctx.colors = false;\n  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n  if (ctx.colors) ctx.stylize = stylizeWithColor;\n  return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n  'bold' : [1, 22],\n  'italic' : [3, 23],\n  'underline' : [4, 24],\n  'inverse' : [7, 27],\n  'white' : [37, 39],\n  'grey' : [90, 39],\n  'black' : [30, 39],\n  'blue' : [34, 39],\n  'cyan' : [36, 39],\n  'green' : [32, 39],\n  'magenta' : [35, 39],\n  'red' : [31, 39],\n  'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n  'special': 'cyan',\n  'number': 'yellow',\n  'boolean': 'yellow',\n  'undefined': 'grey',\n  'null': 'bold',\n  'string': 'green',\n  'date': 'magenta',\n  // \"name\": intentionally not styling\n  'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n  var style = inspect.styles[styleType];\n\n  if (style) {\n    return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n           '\\u001b[' + inspect.colors[style][1] + 'm';\n  } else {\n    return str;\n  }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n  return str;\n}\n\n\nfunction arrayToHash(array) {\n  var hash = {};\n\n  array.forEach(function(val, idx) {\n    hash[val] = true;\n  });\n\n  return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n  // Provide a hook for user-specified inspect functions.\n  // Check that value is an object with an inspect function on it\n  if (ctx.customInspect &&\n      value &&\n      isFunction(value.inspect) &&\n      // Filter out the util module, it's inspect function is special\n      value.inspect !== exports.inspect &&\n      // Also filter out any prototype objects using the circular check.\n      !(value.constructor && value.constructor.prototype === value)) {\n    var ret = value.inspect(recurseTimes, ctx);\n    if (!isString(ret)) {\n      ret = formatValue(ctx, ret, recurseTimes);\n    }\n    return ret;\n  }\n\n  // Primitive types cannot have properties\n  var primitive = formatPrimitive(ctx, value);\n  if (primitive) {\n    return primitive;\n  }\n\n  // Look up the keys of the object.\n  var keys = Object.keys(value);\n  var visibleKeys = arrayToHash(keys);\n\n  if (ctx.showHidden) {\n    keys = Object.getOwnPropertyNames(value);\n  }\n\n  // IE doesn't make error fields non-enumerable\n  // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n  if (isError(value)\n      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n    return formatError(value);\n  }\n\n  // Some type of object without properties can be shortcutted.\n  if (keys.length === 0) {\n    if (isFunction(value)) {\n      var name = value.name ? ': ' + value.name : '';\n      return ctx.stylize('[Function' + name + ']', 'special');\n    }\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    }\n    if (isDate(value)) {\n      return ctx.stylize(Date.prototype.toString.call(value), 'date');\n    }\n    if (isError(value)) {\n      return formatError(value);\n    }\n  }\n\n  var base = '', array = false, braces = ['{', '}'];\n\n  // Make Array say that they are Array\n  if (isArray(value)) {\n    array = true;\n    braces = ['[', ']'];\n  }\n\n  // Make functions say that they are functions\n  if (isFunction(value)) {\n    var n = value.name ? ': ' + value.name : '';\n    base = ' [Function' + n + ']';\n  }\n\n  // Make RegExps say that they are RegExps\n  if (isRegExp(value)) {\n    base = ' ' + RegExp.prototype.toString.call(value);\n  }\n\n  // Make dates with properties first say the date\n  if (isDate(value)) {\n    base = ' ' + Date.prototype.toUTCString.call(value);\n  }\n\n  // Make error with message first say the error\n  if (isError(value)) {\n    base = ' ' + formatError(value);\n  }\n\n  if (keys.length === 0 && (!array || value.length == 0)) {\n    return braces[0] + base + braces[1];\n  }\n\n  if (recurseTimes < 0) {\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    } else {\n      return ctx.stylize('[Object]', 'special');\n    }\n  }\n\n  ctx.seen.push(value);\n\n  var output;\n  if (array) {\n    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n  } else {\n    output = keys.map(function(key) {\n      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n    });\n  }\n\n  ctx.seen.pop();\n\n  return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n  if (isUndefined(value))\n    return ctx.stylize('undefined', 'undefined');\n  if (isString(value)) {\n    var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n                                             .replace(/'/g, \"\\\\'\")\n                                             .replace(/\\\\\"/g, '\"') + '\\'';\n    return ctx.stylize(simple, 'string');\n  }\n  if (isNumber(value))\n    return ctx.stylize('' + value, 'number');\n  if (isBoolean(value))\n    return ctx.stylize('' + value, 'boolean');\n  // For some reason typeof null is \"object\", so special case here.\n  if (isNull(value))\n    return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n  return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n  var output = [];\n  for (var i = 0, l = value.length; i < l; ++i) {\n    if (hasOwnProperty(value, String(i))) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          String(i), true));\n    } else {\n      output.push('');\n    }\n  }\n  keys.forEach(function(key) {\n    if (!key.match(/^\\d+$/)) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          key, true));\n    }\n  });\n  return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n  var name, str, desc;\n  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n  if (desc.get) {\n    if (desc.set) {\n      str = ctx.stylize('[Getter/Setter]', 'special');\n    } else {\n      str = ctx.stylize('[Getter]', 'special');\n    }\n  } else {\n    if (desc.set) {\n      str = ctx.stylize('[Setter]', 'special');\n    }\n  }\n  if (!hasOwnProperty(visibleKeys, key)) {\n    name = '[' + key + ']';\n  }\n  if (!str) {\n    if (ctx.seen.indexOf(desc.value) < 0) {\n      if (isNull(recurseTimes)) {\n        str = formatValue(ctx, desc.value, null);\n      } else {\n        str = formatValue(ctx, desc.value, recurseTimes - 1);\n      }\n      if (str.indexOf('\\n') > -1) {\n        if (array) {\n          str = str.split('\\n').map(function(line) {\n            return '  ' + line;\n          }).join('\\n').slice(2);\n        } else {\n          str = '\\n' + str.split('\\n').map(function(line) {\n            return '   ' + line;\n          }).join('\\n');\n        }\n      }\n    } else {\n      str = ctx.stylize('[Circular]', 'special');\n    }\n  }\n  if (isUndefined(name)) {\n    if (array && key.match(/^\\d+$/)) {\n      return str;\n    }\n    name = JSON.stringify('' + key);\n    if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n      name = name.slice(1, -1);\n      name = ctx.stylize(name, 'name');\n    } else {\n      name = name.replace(/'/g, \"\\\\'\")\n                 .replace(/\\\\\"/g, '\"')\n                 .replace(/(^\"|\"$)/g, \"'\");\n      name = ctx.stylize(name, 'string');\n    }\n  }\n\n  return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n  var numLinesEst = 0;\n  var length = output.reduce(function(prev, cur) {\n    numLinesEst++;\n    if (cur.indexOf('\\n') >= 0) numLinesEst++;\n    return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n  }, 0);\n\n  if (length > 60) {\n    return braces[0] +\n           (base === '' ? '' : base + '\\n ') +\n           ' ' +\n           output.join(',\\n  ') +\n           ' ' +\n           braces[1];\n  }\n\n  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nexports.types = require('./support/types');\n\nfunction isArray(ar) {\n  return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\nexports.types.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\nexports.types.isDate = isDate;\n\nfunction isError(e) {\n  return isObject(e) &&\n      (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\nexports.types.isNativeError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n  return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n              'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n  var d = new Date();\n  var time = [pad(d.getHours()),\n              pad(d.getMinutes()),\n              pad(d.getSeconds())].join(':');\n  return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n  console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n *     prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n  // Don't do anything if add isn't an object\n  if (!add || !isObject(add)) return origin;\n\n  var keys = Object.keys(add);\n  var i = keys.length;\n  while (i--) {\n    origin[keys[i]] = add[keys[i]];\n  }\n  return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n  if (typeof original !== 'function')\n    throw new TypeError('The \"original\" argument must be of type Function');\n\n  if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n    var fn = original[kCustomPromisifiedSymbol];\n    if (typeof fn !== 'function') {\n      throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n    }\n    Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n      value: fn, enumerable: false, writable: false, configurable: true\n    });\n    return fn;\n  }\n\n  function fn() {\n    var promiseResolve, promiseReject;\n    var promise = new Promise(function (resolve, reject) {\n      promiseResolve = resolve;\n      promiseReject = reject;\n    });\n\n    var args = [];\n    for (var i = 0; i < arguments.length; i++) {\n      args.push(arguments[i]);\n    }\n    args.push(function (err, value) {\n      if (err) {\n        promiseReject(err);\n      } else {\n        promiseResolve(value);\n      }\n    });\n\n    try {\n      original.apply(this, args);\n    } catch (err) {\n      promiseReject(err);\n    }\n\n    return promise;\n  }\n\n  Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n  if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n    value: fn, enumerable: false, writable: false, configurable: true\n  });\n  return Object.defineProperties(\n    fn,\n    getOwnPropertyDescriptors(original)\n  );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n  // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n  // Because `null` is a special error value in callbacks which means \"no error\n  // occurred\", we error-wrap so the callback consumer can distinguish between\n  // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n  if (!reason) {\n    var newReason = new Error('Promise was rejected with a falsy value');\n    newReason.reason = reason;\n    reason = newReason;\n  }\n  return cb(reason);\n}\n\nfunction callbackify(original) {\n  if (typeof original !== 'function') {\n    throw new TypeError('The \"original\" argument must be of type Function');\n  }\n\n  // We DO NOT return the promise as it gives the user a false sense that\n  // the promise is actually somehow related to the callback's execution\n  // and that the callback throwing will reject the promise.\n  function callbackified() {\n    var args = [];\n    for (var i = 0; i < arguments.length; i++) {\n      args.push(arguments[i]);\n    }\n\n    var maybeCb = args.pop();\n    if (typeof maybeCb !== 'function') {\n      throw new TypeError('The last argument must be of type Function');\n    }\n    var self = this;\n    var cb = function() {\n      return maybeCb.apply(self, arguments);\n    };\n    // In true node style we process the callback on `nextTick` with all the\n    // implications (stack, `uncaughtException`, `async_hooks`)\n    original.apply(this, args)\n      .then(function(ret) { process.nextTick(cb.bind(null, null, ret)) },\n            function(rej) { process.nextTick(callbackifyOnRejected.bind(null, rej, cb)) });\n  }\n\n  Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n  Object.defineProperties(callbackified,\n                          getOwnPropertyDescriptors(original));\n  return callbackified;\n}\nexports.callbackify = callbackify;\n","'use strict';\n\nvar forEach = require('for-each');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBind = require('call-bind');\nvar callBound = require('call-bind/callBound');\nvar gOPD = require('gopd');\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $slice = callBound('String.prototype.slice');\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\n\nvar $indexOf = callBound('Array.prototype.indexOf', true) || /** @type {(array: readonly unknown[], value: unknown) => keyof array} */ function indexOf(array, value) {\n\tfor (var i = 0; i < array.length; i += 1) {\n\t\tif (array[i] === value) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\n\n/** @typedef {Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array} TypedArray */\n/** @typedef {'Int8Array' | 'Uint8Array' | 'Uint8ClampedArray' | 'Int16Array' | 'Uint16Array' | 'Int32Array' | 'Uint32Array' | 'Float32Array' | 'Float64Array' | 'BigInt64Array' | 'BigUint64Array'} TypedArrayName */\n/** @type {{ [k in `\\$${TypedArrayName}`]?: (receiver: TypedArray) => string | typeof Uint8Array.prototype.slice.call | typeof Uint8Array.prototype.set.call } & { __proto__: null }} */\nvar cache = { __proto__: null };\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tif (Symbol.toStringTag in arr) {\n\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\t// @ts-expect-error TS won't narrow inside a closure\n\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\tif (!descriptor) {\n\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\t// @ts-expect-error TS won't narrow inside a closure\n\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t}\n\t\t\t// @ts-expect-error TODO: fix\n\t\t\tcache['$' + typedArray] = callBind(descriptor.get);\n\t\t}\n\t});\n} else {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tvar fn = arr.slice || arr.set;\n\t\tif (fn) {\n\t\t\t// @ts-expect-error TODO: fix\n\t\t\tcache['$' + typedArray] = callBind(fn);\n\t\t}\n\t});\n}\n\n/** @type {import('.')} */\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\t/** @type {ReturnType<tryAllTypedArrays>} */ var found = false;\n\tforEach(\n\t\t// eslint-disable-next-line no-extra-parens\n\t\t/** @type {Record<`\\$${TypedArrayName}`, typeof cache>} */ /** @type {any} */ (cache),\n\t\t/** @type {(getter: typeof cache, name: `\\$${TypedArrayName}`) => void} */ function (getter, typedArray) {\n\t\t\tif (!found) {\n\t\t\t\ttry {\n\t\t\t\t// @ts-expect-error TODO: fix\n\t\t\t\t\tif ('$' + getter(value) === typedArray) {\n\t\t\t\t\t\tfound = $slice(typedArray, 1);\n\t\t\t\t\t}\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t}\n\t);\n\treturn found;\n};\n\n/** @type {import('.')} */\nvar trySlices = function tryAllSlices(value) {\n\t/** @type {ReturnType<tryAllSlices>} */ var found = false;\n\tforEach(\n\t\t// eslint-disable-next-line no-extra-parens\n\t\t/** @type {any} */ (cache),\n\t\t/** @type {(getter: typeof cache, name: `\\$${TypedArrayName}`) => void} */ function (getter, name) {\n\t\t\tif (!found) {\n\t\t\t\ttry {\n\t\t\t\t// @ts-expect-error TODO: fix\n\t\t\t\t\tgetter(value);\n\t\t\t\t\tfound = $slice(name, 1);\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t}\n\t);\n\treturn found;\n};\n\n/** @type {import('.')} */\nmodule.exports = function whichTypedArray(value) {\n\tif (!value || typeof value !== 'object') { return false; }\n\tif (!hasToStringTag) {\n\t\tvar tag = $slice($toString(value), 8, -1);\n\t\tif ($indexOf(typedArrays, tag) > -1) {\n\t\t\treturn tag;\n\t\t}\n\t\tif (tag !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\t// node < 0.6 hits here on real Typed Arrays\n\t\treturn trySlices(value);\n\t}\n\tif (!gOPD) { return null; } // unknown engine\n\treturn tryTypedArrays(value);\n};\n","// This file is just added for convenience so this repository can be\n// directly checked out into a project's deps folder\nmodule.exports = require('./lib/xmldoc');\n","(function () {\n  var sax;\n\n  if (\n    typeof module !== \"undefined\" &&\n    module.exports &&\n    !global.xmldocAssumeBrowser\n  ) {\n    // We're being used in a Node-like environment\n    sax = require(\"sax\");\n  } else {\n    // assume it's attached to the Window object in a browser\n    sax = this.sax;\n\n    if (!sax) {\n      // no sax for you!\n      throw new Error(\n        \"Expected sax to be defined. Make sure you're including sax.js before this file.\",\n      );\n    }\n  }\n\n  /**\n   * XmlElement is our basic building block. Everything is an XmlElement; even XmlDocument\n   * behaves like an XmlElement by inheriting its attributes and functions.\n   */\n  function XmlElement(tag, parser) {\n    // If you didn't hand us a parser (common case) see if we can grab one\n    // from the current execution stack.\n    if (!parser) {\n      var delegate = delegates[delegates.length - 1];\n\n      if (delegate.parser) {\n        parser = delegate.parser;\n      }\n    }\n\n    this.name = tag.name;\n    this.attr = tag.attributes;\n    this.val = \"\";\n    this.children = [];\n    this.firstChild = null;\n    this.lastChild = null;\n\n    // Assign parse information\n    this.line = parser ? parser.line : null;\n    this.column = parser ? parser.column : null;\n    this.position = parser ? parser.position : null;\n    this.startTagPosition = parser ? parser.startTagPosition : null;\n  }\n\n  // Private methods\n\n  XmlElement.prototype._addChild = function (child) {\n    // add to our children array\n    this.children.push(child);\n\n    // update first/last pointers\n    if (!this.firstChild) this.firstChild = child;\n    this.lastChild = child;\n  };\n\n  // SaxParser handlers\n\n  XmlElement.prototype._opentag = function (tag) {\n    var child = new XmlElement(tag);\n\n    this._addChild(child);\n\n    delegates.unshift(child);\n  };\n\n  XmlElement.prototype._closetag = function () {\n    delegates.shift();\n  };\n\n  XmlElement.prototype._text = function (text) {\n    if (typeof this.children === \"undefined\") return;\n\n    this.val += text;\n\n    this._addChild(new XmlTextNode(text));\n  };\n\n  XmlElement.prototype._cdata = function (cdata) {\n    this.val += cdata;\n\n    this._addChild(new XmlCDataNode(cdata));\n  };\n\n  XmlElement.prototype._comment = function (comment) {\n    if (typeof this.children === \"undefined\") return;\n\n    this._addChild(new XmlCommentNode(comment));\n  };\n\n  XmlElement.prototype._error = function (err) {\n    throw err;\n  };\n\n  // Useful functions\n\n  XmlElement.prototype.eachChild = function (iterator, context) {\n    for (var i = 0, l = this.children.length; i < l; i++)\n      if (this.children[i].type === \"element\")\n        if (\n          iterator.call(context, this.children[i], i, this.children) === false\n        )\n          return;\n  };\n\n  XmlElement.prototype.childNamed = function (name) {\n    for (var i = 0, l = this.children.length; i < l; i++) {\n      var child = this.children[i];\n      if (child.name === name) return child;\n    }\n    return undefined;\n  };\n\n  XmlElement.prototype.childrenNamed = function (name) {\n    var matches = [];\n\n    for (var i = 0, l = this.children.length; i < l; i++)\n      if (this.children[i].name === name) matches.push(this.children[i]);\n\n    return matches;\n  };\n\n  XmlElement.prototype.childWithAttribute = function (name, value) {\n    for (var i = 0, l = this.children.length; i < l; i++) {\n      var child = this.children[i];\n      if (\n        child.type === \"element\" &&\n        ((value && child.attr[name] === value) || (!value && child.attr[name]))\n      )\n        return child;\n    }\n    return undefined;\n  };\n\n  XmlElement.prototype.descendantsNamed = function (name) {\n    var matches = [];\n\n    for (var i = 0, l = this.children.length; i < l; i++) {\n      var child = this.children[i];\n      if (child.type === \"element\") {\n        if (child.name === name) matches.push(child);\n        matches = matches.concat(child.descendantsNamed(name));\n      }\n    }\n\n    return matches;\n  };\n\n  XmlElement.prototype.descendantWithPath = function (path) {\n    var descendant = this;\n    var components = path.split(\".\");\n\n    for (var i = 0, l = components.length; i < l; i++)\n      if (descendant && descendant.type === \"element\")\n        descendant = descendant.childNamed(components[i]);\n      else return undefined;\n\n    return descendant;\n  };\n\n  XmlElement.prototype.valueWithPath = function (path) {\n    var components = path.split(\"@\");\n    var descendant = this.descendantWithPath(components[0]);\n    if (descendant)\n      return components.length > 1\n        ? descendant.attr[components[1]]\n        : descendant.val;\n    else return undefined;\n  };\n\n  // String formatting (for debugging)\n\n  XmlElement.prototype.toString = function (options) {\n    return this.toStringWithIndent(\"\", options);\n  };\n\n  XmlElement.prototype.toStringWithIndent = function (indent, options) {\n    var s = indent + \"<\" + this.name;\n    var linebreak = options && options.compressed ? \"\" : \"\\n\";\n    var preserveWhitespace = options && options.preserveWhitespace;\n\n    for (var name in this.attr)\n      if (Object.prototype.hasOwnProperty.call(this.attr, name))\n        s += \" \" + name + '=\"' + escapeXML(this.attr[name]) + '\"';\n\n    if (this.children.length === 1 && this.children[0].type !== \"element\") {\n      s += \">\" + this.children[0].toString(options) + \"</\" + this.name + \">\";\n    } else if (this.children.length) {\n      s += \">\" + linebreak;\n\n      var childIndent = indent + (options && options.compressed ? \"\" : \"  \");\n\n      for (var i = 0, l = this.children.length; i < l; i++) {\n        s +=\n          this.children[i].toStringWithIndent(childIndent, options) + linebreak;\n      }\n\n      s += indent + \"</\" + this.name + \">\";\n    } else if (options && options.html) {\n      var whiteList = [\n        \"area\",\n        \"base\",\n        \"br\",\n        \"col\",\n        \"embed\",\n        \"frame\",\n        \"hr\",\n        \"img\",\n        \"input\",\n        \"keygen\",\n        \"link\",\n        \"menuitem\",\n        \"meta\",\n        \"param\",\n        \"source\",\n        \"track\",\n        \"wbr\",\n      ];\n      if (whiteList.indexOf(this.name) !== -1) s += \"/>\";\n      else s += \"></\" + this.name + \">\";\n    } else {\n      s += \"/>\";\n    }\n\n    return s;\n  };\n\n  // Alternative XML nodes\n\n  function XmlTextNode(text) {\n    this.text = text;\n  }\n\n  XmlTextNode.prototype.toString = function (options) {\n    return formatText(escapeXML(this.text), options);\n  };\n\n  XmlTextNode.prototype.toStringWithIndent = function (indent, options) {\n    return indent + this.toString(options);\n  };\n\n  function XmlCDataNode(cdata) {\n    this.cdata = cdata;\n  }\n\n  XmlCDataNode.prototype.toString = function (options) {\n    return \"<![CDATA[\" + formatText(this.cdata, options) + \"]]>\";\n  };\n\n  XmlCDataNode.prototype.toStringWithIndent = function (indent, options) {\n    return indent + this.toString(options);\n  };\n\n  function XmlCommentNode(comment) {\n    this.comment = comment;\n  }\n\n  XmlCommentNode.prototype.toString = function (options) {\n    return \"<!--\" + formatText(escapeXML(this.comment), options) + \"-->\";\n  };\n\n  XmlCommentNode.prototype.toStringWithIndent = function (indent, options) {\n    return indent + this.toString(options);\n  };\n\n  // Node type tag\n\n  XmlElement.prototype.type = \"element\";\n  XmlTextNode.prototype.type = \"text\";\n  XmlCDataNode.prototype.type = \"cdata\";\n  XmlCommentNode.prototype.type = \"comment\";\n\n  /**\n   * XmlDocument is the class we expose to the user; it uses the sax parser to create a hierarchy\n   * of XmlElements.\n   */\n  function XmlDocument(xml) {\n    xml && (xml = xml.toString().trim());\n\n    if (!xml) throw new Error(\"No XML to parse!\");\n\n    // Stores doctype (if defined)\n    this.doctype = \"\";\n\n    // Expose the parser to the other delegates while the parser is running\n    this.parser = sax.parser(true); // strict\n    addParserEvents(this.parser);\n\n    // We'll use the file-scoped \"delegates\" var to remember what elements we're currently\n    // parsing; they will push and pop off the stack as we get deeper into the XML hierarchy.\n    // It's safe to use a global because JS is single-threaded.\n    delegates = [this];\n\n    try {\n      this.parser.write(xml);\n    } finally {\n      // Remove the parser as it is no longer needed and should not be exposed to clients\n      delete this.parser;\n    }\n  }\n\n  // make XmlDocument inherit XmlElement's methods\n  extend(XmlDocument.prototype, XmlElement.prototype);\n\n  XmlDocument.prototype._opentag = function (tag) {\n    if (typeof this.children === \"undefined\")\n      // the first tag we encounter should be the root - we'll \"become\" the root XmlElement\n      XmlElement.call(this, tag);\n    // all other tags will be the root element's children\n    else XmlElement.prototype._opentag.apply(this, arguments);\n  };\n\n  XmlDocument.prototype._doctype = function (doctype) {\n    this.doctype += doctype;\n  };\n\n  // file-scoped global stack of delegates\n  var delegates = null;\n\n  /*\n   * Helper functions\n   */\n\n  function addParserEvents(parser) {\n    parser.onopentag = parser_opentag;\n    parser.onclosetag = parser_closetag;\n    parser.ontext = parser_text;\n    parser.oncdata = parser_cdata;\n    parser.oncomment = parser_comment;\n    parser.ondoctype = parser_doctype;\n    parser.onerror = parser_error;\n  }\n\n  // create these closures and cache them by keeping them file-scoped\n  function parser_opentag() {\n    delegates[0] && delegates[0]._opentag.apply(delegates[0], arguments);\n  }\n  function parser_closetag() {\n    delegates[0] && delegates[0]._closetag.apply(delegates[0], arguments);\n  }\n  function parser_text() {\n    delegates[0] && delegates[0]._text.apply(delegates[0], arguments);\n  }\n  function parser_cdata() {\n    delegates[0] && delegates[0]._cdata.apply(delegates[0], arguments);\n  }\n  function parser_comment() {\n    delegates[0] && delegates[0]._comment.apply(delegates[0], arguments);\n  }\n  function parser_doctype() {\n    delegates[0] && delegates[0]._doctype.apply(delegates[0], arguments);\n  }\n  function parser_error() {\n    delegates[0] && delegates[0]._error.apply(delegates[0], arguments);\n  }\n\n  // a relatively standard extend method\n  function extend(destination, source) {\n    for (var prop in source)\n      if (source.hasOwnProperty(prop)) destination[prop] = source[prop];\n  }\n\n  // escapes XML entities like \"<\", \"&\", etc.\n  function escapeXML(value) {\n    return value\n      .toString()\n      .replace(/&/g, \"&amp;\")\n      .replace(/</g, \"&lt;\")\n      .replace(/>/g, \"&gt;\")\n      .replace(/'/g, \"&apos;\")\n      .replace(/\"/g, \"&quot;\");\n  }\n\n  // formats some text for debugging given a few options\n  function formatText(text, options) {\n    var finalText = text;\n\n    if (options && options.trimmed && text.length > 25) {\n      finalText = finalText.substring(0, 25).trim() + \"…\";\n    }\n\n    if (!(options && options.preserveWhitespace)) {\n      finalText = finalText.trim();\n    }\n\n    return finalText;\n  }\n\n  // Are we being used in a Node-like environment?\n  if (\n    typeof module !== \"undefined\" &&\n    module.exports &&\n    !global.xmldocAssumeBrowser\n  ) {\n    module.exports.XmlDocument = XmlDocument;\n    module.exports.XmlElement = XmlElement;\n    module.exports.XmlTextNode = XmlTextNode;\n    module.exports.XmlCDataNode = XmlCDataNode;\n    module.exports.XmlCommentNode = XmlCommentNode;\n  } else {\n    this.XmlDocument = XmlDocument;\n    this.XmlElement = XmlElement;\n    this.XmlTextNode = XmlTextNode;\n    this.XmlCDataNode = XmlCDataNode;\n    this.XmlCommentNode = XmlCommentNode;\n  }\n})();\n","'use strict';\r\n\r\n// Internet Explorer polyfills\r\nif (typeof window !== 'undefined' && !window.Promise) {\r\n\trequire('core-js/features/promise');\r\n}\r\nrequire('core-js/es/object/values');\r\n\r\nvar fetchUrl = function (url, headers) {\r\n\treturn new Promise(function (resolve, reject) {\r\n\t\tvar xhr = new XMLHttpRequest();\r\n\t\txhr.open('GET', url, true);\r\n\t\tfor (var headerName in headers) {\r\n\t\t\txhr.setRequestHeader(headerName, headers[headerName]);\r\n\t\t}\r\n\t\txhr.responseType = 'arraybuffer';\r\n\r\n\t\txhr.onreadystatechange = function () {\r\n\t\t\tif (xhr.readyState !== 4) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar ok = xhr.status >= 200 && xhr.status < 300;\r\n\t\t\tif (!ok) {\r\n\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\treject(new TypeError('Failed to fetch (url: \"' + url + '\")'));\r\n\t\t\t\t}, 0);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\txhr.onload = function () {\r\n\t\t\tvar ok = xhr.status >= 200 && xhr.status < 300;\r\n\t\t\tif (ok) {\r\n\t\t\t\tresolve(xhr.response);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\txhr.onerror = function () {\r\n\t\t\tsetTimeout(function () {\r\n\t\t\t\treject(new TypeError('Network request failed (url: \"' + url + '\")'));\r\n\t\t\t}, 0);\r\n\t\t};\r\n\r\n\t\txhr.ontimeout = function () {\r\n\t\t\tsetTimeout(function () {\r\n\t\t\t\treject(new TypeError('Network request failed (url: \"' + url + '\")'));\r\n\t\t\t}, 0);\r\n\t\t};\r\n\r\n\t\txhr.send();\r\n\t});\r\n};\r\n\r\nfunction URLBrowserResolver(fs) {\r\n\tthis.fs = fs;\r\n\tthis.resolving = {};\r\n}\r\n\r\nURLBrowserResolver.prototype.resolve = function (url, headers) {\r\n\tif (!this.resolving[url]) {\r\n\t\tvar _this = this;\r\n\t\tthis.resolving[url] = new Promise(function (resolve, reject) {\r\n\t\t\tif (url.toLowerCase().indexOf('https://') === 0 || url.toLowerCase().indexOf('http://') === 0) {\r\n\t\t\t\tif (_this.fs.existsSync(url)) {\r\n\t\t\t\t\t// url was downloaded earlier\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tfetchUrl(url, headers).then(function (buffer) {\r\n\t\t\t\t\t\t_this.fs.writeFileSync(url, buffer);\r\n\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t}, function (result) {\r\n\t\t\t\t\t\treject(result);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t// cannot be resolved\r\n\t\t\t\tresolve();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\treturn this.resolving[url];\r\n}\r\n\r\nURLBrowserResolver.prototype.resolved = function () {\r\n\tvar _this = this;\r\n\treturn new Promise(function (resolve, reject) {\r\n\t\tPromise.all(Object.values(_this.resolving)).then(function () {\r\n\t\t\tresolve();\r\n\t\t}, function (result) {\r\n\t\t\treject(result);\r\n\t\t});\r\n\t});\r\n}\r\n\r\nmodule.exports = URLBrowserResolver;\r\n","'use strict';\r\n\r\nvar isFunction = require('../helpers').isFunction;\r\nvar isUndefined = require('../helpers').isUndefined;\r\nvar isNull = require('../helpers').isNull;\r\nvar FileSaver = require('file-saver');\r\nvar saveAs = FileSaver.saveAs;\r\n\r\nvar defaultClientFonts = {\r\n\tRoboto: {\r\n\t\tnormal: 'Roboto-Regular.ttf',\r\n\t\tbold: 'Roboto-Medium.ttf',\r\n\t\titalics: 'Roboto-Italic.ttf',\r\n\t\tbolditalics: 'Roboto-MediumItalic.ttf'\r\n\t}\r\n};\r\n\r\nfunction Document(docDefinition, tableLayouts, fonts, vfs) {\r\n\tthis.docDefinition = docDefinition;\r\n\tthis.tableLayouts = tableLayouts || null;\r\n\tthis.fonts = fonts || defaultClientFonts;\r\n\tthis.vfs = vfs;\r\n}\r\n\r\nfunction canCreatePdf() {\r\n\t// Ensure the browser provides the level of support needed\r\n\ttry {\r\n\t\tvar arr = new Uint8Array(1)\r\n\t\tvar proto = { foo: function () { return 42 } }\r\n\t\tObject.setPrototypeOf(proto, Uint8Array.prototype)\r\n\t\tObject.setPrototypeOf(arr, proto)\r\n\t\treturn arr.foo() === 42\r\n\t} catch (e) {\r\n\t\treturn false\r\n\t}\r\n}\r\n\r\nDocument.prototype._createDoc = function (options, cb) {\r\n\tvar getExtendedUrl = function (url) {\r\n\t\tif (typeof url === 'object') {\r\n\t\t\treturn { url: url.url, headers: url.headers };\r\n\t\t}\r\n\r\n\t\treturn { url: url, headers: {} };\r\n\t};\r\n\r\n\toptions = options || {};\r\n\tif (this.tableLayouts) {\r\n\t\toptions.tableLayouts = this.tableLayouts;\r\n\t}\r\n\r\n\tvar PdfPrinter = require('../printer');\r\n\r\n\tvar printer = new PdfPrinter(this.fonts);\r\n\trequire('fs').bindFS(this.vfs); // bind virtual file system to file system\r\n\r\n\tif (!isFunction(cb)) {\r\n\t\tvar doc = printer.createPdfKitDocument(this.docDefinition, options);\r\n\r\n\t\treturn doc;\r\n\t}\r\n\r\n\tvar URLBrowserResolver = require('./URLBrowserResolver');\r\n\tvar urlResolver = new URLBrowserResolver(require('fs'));\r\n\r\n\tfor (var font in this.fonts) {\r\n\t\tif (this.fonts.hasOwnProperty(font)) {\r\n\t\t\tif (this.fonts[font].normal) {\r\n\t\t\t\tif (Array.isArray(this.fonts[font].normal)) { // TrueType Collection\r\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].normal[0]);\r\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\r\n\t\t\t\t\tthis.fonts[font].normal[0] = url.url;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].normal);\r\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\r\n\t\t\t\t\tthis.fonts[font].normal = url.url;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (this.fonts[font].bold) {\r\n\t\t\t\tif (Array.isArray(this.fonts[font].bold)) { // TrueType Collection\r\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].bold[0]);\r\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\r\n\t\t\t\t\tthis.fonts[font].bold[0] = url.url;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].bold);\r\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\r\n\t\t\t\t\tthis.fonts[font].bold = url.url;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (this.fonts[font].italics) {\r\n\t\t\t\tif (Array.isArray(this.fonts[font].italics)) { // TrueType Collection\r\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].italics[0]);\r\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\r\n\t\t\t\t\tthis.fonts[font].italics[0] = url.url;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].italics);\r\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\r\n\t\t\t\t\tthis.fonts[font].italics = url.url;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (this.fonts[font].bolditalics) {\r\n\t\t\t\tif (Array.isArray(this.fonts[font].bolditalics)) { // TrueType Collection\r\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].bolditalics[0]);\r\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\r\n\t\t\t\t\tthis.fonts[font].bolditalics[0] = url.url;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].bolditalics);\r\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\r\n\t\t\t\t\tthis.fonts[font].bolditalics = url.url;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (this.docDefinition.images) {\r\n\t\tfor (var image in this.docDefinition.images) {\r\n\t\t\tif (this.docDefinition.images.hasOwnProperty(image)) {\r\n\t\t\t\tvar url = getExtendedUrl(this.docDefinition.images[image]);\r\n\t\t\t\turlResolver.resolve(url.url, url.headers);\r\n\t\t\t\tthis.docDefinition.images[image] = url.url;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tvar _this = this;\r\n\r\n\turlResolver.resolved().then(function () {\r\n\t\tvar doc = printer.createPdfKitDocument(_this.docDefinition, options);\r\n\r\n\t\tcb(doc);\r\n\t}, function (result) {\r\n\t\tthrow result;\r\n\t});\r\n};\r\n\r\nDocument.prototype._flushDoc = function (doc, callback) {\r\n\tvar chunks = [];\r\n\tvar result;\r\n\r\n\tdoc.on('readable', function () {\r\n\t\tvar chunk;\r\n\t\twhile ((chunk = doc.read(9007199254740991)) !== null) {\r\n\t\t\tchunks.push(chunk);\r\n\t\t}\r\n\t});\r\n\tdoc.on('end', function () {\r\n\t\tresult = Buffer.concat(chunks);\r\n\t\tcallback(result, doc._pdfMakePages);\r\n\t});\r\n\tdoc.end();\r\n};\r\n\r\nDocument.prototype._getPages = function (options, cb) {\r\n\tif (!cb) {\r\n\t\tthrow '_getPages is an async method and needs a callback argument';\r\n\t}\r\n\tvar _this = this;\r\n\r\n\tthis._createDoc(options, function (doc) {\r\n\t\t_this._flushDoc(doc, function (ignoreBuffer, pages) {\r\n\t\t\tcb(pages);\r\n\t\t});\r\n\t});\r\n};\r\n\r\nDocument.prototype._bufferToBlob = function (buffer) {\r\n\tvar blob;\r\n\ttry {\r\n\t\tblob = new Blob([buffer], { type: 'application/pdf' });\r\n\t} catch (e) {\r\n\t\t// Old browser which can't handle it without making it an byte array (ie10)\r\n\t\tif (e.name === 'InvalidStateError') {\r\n\t\t\tvar byteArray = new Uint8Array(buffer);\r\n\t\t\tblob = new Blob([byteArray.buffer], { type: 'application/pdf' });\r\n\t\t}\r\n\t}\r\n\r\n\tif (!blob) {\r\n\t\tthrow 'Could not generate blob';\r\n\t}\r\n\r\n\treturn blob;\r\n};\r\n\r\nDocument.prototype._openWindow = function () {\r\n\t// we have to open the window immediately and store the reference\r\n\t// otherwise popup blockers will stop us\r\n\tvar win = window.open('', '_blank');\r\n\tif (win === null) {\r\n\t\tthrow 'Open PDF in new window blocked by browser';\r\n\t}\r\n\r\n\treturn win;\r\n};\r\n\r\nDocument.prototype._openPdf = function (options, win) {\r\n\tif (!win) {\r\n\t\twin = this._openWindow();\r\n\t}\r\n\ttry {\r\n\t\tthis.getBlob(function (result) {\r\n\t\t\tvar urlCreator = window.URL || window.webkitURL;\r\n\t\t\tvar pdfUrl = urlCreator.createObjectURL(result);\r\n\t\t\twin.location.href = pdfUrl;\r\n\r\n\t\t\t/* temporarily disabled\r\n\t\t\tif (win !== window) {\r\n\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\tif (isNull(win.window)) { // is closed by AdBlock\r\n\t\t\t\t\t\twindow.location.href = pdfUrl; // open in actual window\r\n\t\t\t\t\t}\r\n\t\t\t\t}, 500);\r\n\t\t\t}\r\n\t\t\t*/\r\n\t\t}, options);\r\n\t} catch (e) {\r\n\t\twin.close();\r\n\t\tthrow e;\r\n\t}\r\n};\r\n\r\nDocument.prototype.open = function (options, win) {\r\n\toptions = options || {};\r\n\toptions.autoPrint = false;\r\n\twin = win || null;\r\n\r\n\tthis._openPdf(options, win);\r\n};\r\n\r\n\r\nDocument.prototype.print = function (options, win) {\r\n\toptions = options || {};\r\n\toptions.autoPrint = true;\r\n\twin = win || null;\r\n\r\n\tthis._openPdf(options, win);\r\n};\r\n\r\n/**\r\n * download(defaultFileName = 'file.pdf', cb = null, options = {})\r\n * or\r\n * download(cb, options = {})\r\n */\r\nDocument.prototype.download = function (defaultFileName, cb, options) {\r\n\tif (isFunction(defaultFileName)) {\r\n\t\tif (!isUndefined(cb)) {\r\n\t\t\toptions = cb;\r\n\t\t}\r\n\t\tcb = defaultFileName;\r\n\t\tdefaultFileName = null;\r\n\t}\r\n\r\n\tdefaultFileName = defaultFileName || 'file.pdf';\r\n\tthis.getBlob(function (result) {\r\n\t\tsaveAs(result, defaultFileName);\r\n\r\n\t\tif (isFunction(cb)) {\r\n\t\t\tcb();\r\n\t\t}\r\n\t}, options);\r\n};\r\n\r\nDocument.prototype.getBase64 = function (cb, options) {\r\n\tif (!cb) {\r\n\t\tthrow 'getBase64 is an async method and needs a callback argument';\r\n\t}\r\n\tthis.getBuffer(function (buffer) {\r\n\t\tcb(buffer.toString('base64'));\r\n\t}, options);\r\n};\r\n\r\nDocument.prototype.getDataUrl = function (cb, options) {\r\n\tif (!cb) {\r\n\t\tthrow 'getDataUrl is an async method and needs a callback argument';\r\n\t}\r\n\tthis.getBuffer(function (buffer) {\r\n\t\tcb('data:application/pdf;base64,' + buffer.toString('base64'));\r\n\t}, options);\r\n};\r\n\r\nDocument.prototype.getBlob = function (cb, options) {\r\n\tif (!cb) {\r\n\t\tthrow 'getBlob is an async method and needs a callback argument';\r\n\t}\r\n\tvar that = this;\r\n\tthis.getBuffer(function (result) {\r\n\t\tvar blob = that._bufferToBlob(result);\r\n\t\tcb(blob);\r\n\t}, options);\r\n};\r\n\r\nDocument.prototype.getBuffer = function (cb, options) {\r\n\tif (!cb) {\r\n\t\tthrow 'getBuffer is an async method and needs a callback argument';\r\n\t}\r\n\r\n\tvar _this = this;\r\n\r\n\tthis._createDoc(options, function (doc) {\r\n\t\t_this._flushDoc(doc, function (buffer) {\r\n\t\t\tcb(buffer);\r\n\t\t});\r\n\t});\r\n};\r\n\r\nDocument.prototype.getStream = function (options, cb) {\r\n\tif (!isFunction(cb)) {\r\n\t\tvar doc = this._createDoc(options);\r\n\t\treturn doc;\r\n\t}\r\n\r\n\tthis._createDoc(options, function (doc) {\r\n\t\tcb(doc);\r\n\t});\r\n};\r\n\r\nmodule.exports = {\r\n\tcreatePdf: function (docDefinition, tableLayouts, fonts, vfs) {\r\n\t\tif (!canCreatePdf()) {\r\n\t\t\tthrow 'Your browser does not provide the level of support needed';\r\n\t\t}\r\n\t\treturn new Document(\r\n\t\t\tdocDefinition,\r\n\t\t\ttableLayouts || global.pdfMake.tableLayouts,\r\n\t\t\tfonts || global.pdfMake.fonts,\r\n\t\t\tvfs || global.pdfMake.vfs\r\n\t\t);\r\n\t}\r\n};\r\n","'use strict';\r\n\r\nfunction VirtualFileSystem() {\r\n\tthis.fileSystem = {};\r\n\tthis.dataSystem = {};\r\n}\r\n\r\nVirtualFileSystem.prototype.existsSync = function (filename) {\r\n\tfilename = fixFilename(filename);\r\n\treturn typeof this.fileSystem[filename] !== 'undefined'\r\n\t\t|| typeof this.dataSystem[filename] !== 'undefined';\r\n}\r\n\r\nVirtualFileSystem.prototype.readFileSync = function (filename, options) {\r\n\tfilename = fixFilename(filename);\r\n\r\n\tvar dataContent = this.dataSystem[filename];\r\n\tif (typeof dataContent === 'string' && options === 'utf8') {\r\n\t\treturn dataContent;\r\n\t}\r\n\r\n\tif (dataContent) {\r\n\t\treturn new Buffer(dataContent, typeof dataContent === 'string' ? 'base64' : undefined);\r\n\t}\r\n\r\n\tvar content = this.fileSystem[filename];\r\n\tif (content) {\r\n\t\treturn content;\r\n\t}\r\n\r\n\tthrow 'File \\'' + filename + '\\' not found in virtual file system';\r\n};\r\n\r\nVirtualFileSystem.prototype.writeFileSync = function (filename, content) {\r\n\tthis.fileSystem[fixFilename(filename)] = content;\r\n};\r\n\r\nVirtualFileSystem.prototype.bindFS = function (data) {\r\n\tthis.dataSystem = data || {};\r\n};\r\n\r\n\r\nfunction fixFilename(filename) {\r\n\tif (filename.indexOf(__dirname) === 0) {\r\n\t\tfilename = filename.substring(__dirname.length);\r\n\t}\r\n\r\n\tif (filename.indexOf('/') === 0) {\r\n\t\tfilename = filename.substring(1);\r\n\t}\r\n\r\n\treturn filename;\r\n}\r\n\r\nmodule.exports = new VirtualFileSystem();\r\n","'use strict';\r\n\r\nvar isString = require('./helpers').isString;\r\n\r\nfunction buildColumnWidths(columns, availableWidth) {\r\n\tvar autoColumns = [],\r\n\t\tautoMin = 0, autoMax = 0,\r\n\t\tstarColumns = [],\r\n\t\tstarMaxMin = 0,\r\n\t\tstarMaxMax = 0,\r\n\t\tfixedColumns = [],\r\n\t\tinitial_availableWidth = availableWidth;\r\n\r\n\tcolumns.forEach(function (column) {\r\n\t\tif (isAutoColumn(column)) {\r\n\t\t\tautoColumns.push(column);\r\n\t\t\tautoMin += column._minWidth;\r\n\t\t\tautoMax += column._maxWidth;\r\n\t\t} else if (isStarColumn(column)) {\r\n\t\t\tstarColumns.push(column);\r\n\t\t\tstarMaxMin = Math.max(starMaxMin, column._minWidth);\r\n\t\t\tstarMaxMax = Math.max(starMaxMax, column._maxWidth);\r\n\t\t} else {\r\n\t\t\tfixedColumns.push(column);\r\n\t\t}\r\n\t});\r\n\r\n\tfixedColumns.forEach(function (col) {\r\n\t\t// width specified as %\r\n\t\tif (isString(col.width) && /\\d+%/.test(col.width)) {\r\n\t\t\tcol.width = parseFloat(col.width) * initial_availableWidth / 100;\r\n\t\t}\r\n\t\tif (col.width < (col._minWidth) && col.elasticWidth) {\r\n\t\t\tcol._calcWidth = col._minWidth;\r\n\t\t} else {\r\n\t\t\tcol._calcWidth = col.width;\r\n\t\t}\r\n\r\n\t\tavailableWidth -= col._calcWidth;\r\n\t});\r\n\r\n\t// http://www.freesoft.org/CIE/RFC/1942/18.htm\r\n\t// http://www.w3.org/TR/CSS2/tables.html#width-layout\r\n\t// http://dev.w3.org/csswg/css3-tables-algorithms/Overview.src.htm\r\n\tvar minW = autoMin + starMaxMin * starColumns.length;\r\n\tvar maxW = autoMax + starMaxMax * starColumns.length;\r\n\tif (minW >= availableWidth) {\r\n\t\t// case 1 - there's no way to fit all columns within available width\r\n\t\t// that's actually pretty bad situation with PDF as we have no horizontal scroll\r\n\t\t// no easy workaround (unless we decide, in the future, to split single words)\r\n\t\t// currently we simply use minWidths for all columns\r\n\t\tautoColumns.forEach(function (col) {\r\n\t\t\tcol._calcWidth = col._minWidth;\r\n\t\t});\r\n\r\n\t\tstarColumns.forEach(function (col) {\r\n\t\t\tcol._calcWidth = starMaxMin; // starMaxMin already contains padding\r\n\t\t});\r\n\t} else {\r\n\t\tif (maxW < availableWidth) {\r\n\t\t\t// case 2 - we can fit rest of the table within available space\r\n\t\t\tautoColumns.forEach(function (col) {\r\n\t\t\t\tcol._calcWidth = col._maxWidth;\r\n\t\t\t\tavailableWidth -= col._calcWidth;\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\t// maxW is too large, but minW fits within available width\r\n\t\t\tvar W = availableWidth - minW;\r\n\t\t\tvar D = maxW - minW;\r\n\r\n\t\t\tautoColumns.forEach(function (col) {\r\n\t\t\t\tvar d = col._maxWidth - col._minWidth;\r\n\t\t\t\tcol._calcWidth = col._minWidth + d * W / D;\r\n\t\t\t\tavailableWidth -= col._calcWidth;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (starColumns.length > 0) {\r\n\t\t\tvar starSize = availableWidth / starColumns.length;\r\n\r\n\t\t\tstarColumns.forEach(function (col) {\r\n\t\t\t\tcol._calcWidth = starSize;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction isAutoColumn(column) {\r\n\treturn column.width === 'auto';\r\n}\r\n\r\nfunction isStarColumn(column) {\r\n\treturn column.width === null || column.width === undefined || column.width === '*' || column.width === 'star';\r\n}\r\n\r\n//TODO: refactor and reuse in measureTable\r\nfunction measureMinMax(columns) {\r\n\tvar result = { min: 0, max: 0 };\r\n\r\n\tvar maxStar = { min: 0, max: 0 };\r\n\tvar starCount = 0;\r\n\r\n\tfor (var i = 0, l = columns.length; i < l; i++) {\r\n\t\tvar c = columns[i];\r\n\r\n\t\tif (isStarColumn(c)) {\r\n\t\t\tmaxStar.min = Math.max(maxStar.min, c._minWidth);\r\n\t\t\tmaxStar.max = Math.max(maxStar.max, c._maxWidth);\r\n\t\t\tstarCount++;\r\n\t\t} else if (isAutoColumn(c)) {\r\n\t\t\tresult.min += c._minWidth;\r\n\t\t\tresult.max += c._maxWidth;\r\n\t\t} else {\r\n\t\t\tresult.min += ((c.width !== undefined && c.width) || c._minWidth);\r\n\t\t\tresult.max += ((c.width !== undefined && c.width) || c._maxWidth);\r\n\t\t}\r\n\t}\r\n\r\n\tif (starCount) {\r\n\t\tresult.min += starCount * maxStar.min;\r\n\t\tresult.max += starCount * maxStar.max;\r\n\t}\r\n\r\n\treturn result;\r\n}\r\n\r\n/**\r\n * Calculates column widths\r\n * @private\r\n */\r\nmodule.exports = {\r\n\tbuildColumnWidths: buildColumnWidths,\r\n\tmeasureMinMax: measureMinMax,\r\n\tisAutoColumn: isAutoColumn,\r\n\tisStarColumn: isStarColumn\r\n};\r\n","/*eslint no-unused-vars: [\"error\", {\"args\": \"none\"}]*/\r\n\r\n'use strict';\r\n\r\nvar TextTools = require('./textTools');\r\nvar StyleContextStack = require('./styleContextStack');\r\nvar ColumnCalculator = require('./columnCalculator');\r\nvar isString = require('./helpers').isString;\r\nvar isNumber = require('./helpers').isNumber;\r\nvar isObject = require('./helpers').isObject;\r\nvar isArray = require('./helpers').isArray;\r\nvar fontStringify = require('./helpers').fontStringify;\r\nvar getNodeId = require('./helpers').getNodeId;\r\nvar pack = require('./helpers').pack;\r\nvar qrEncoder = require('./qrEnc.js');\r\n\r\n/**\r\n * @private\r\n */\r\nfunction DocMeasure(fontProvider, styleDictionary, defaultStyle, imageMeasure, svgMeasure, tableLayouts, images) {\r\n\tthis.textTools = new TextTools(fontProvider);\r\n\tthis.styleStack = new StyleContextStack(styleDictionary, defaultStyle);\r\n\tthis.imageMeasure = imageMeasure;\r\n\tthis.svgMeasure = svgMeasure;\r\n\tthis.tableLayouts = tableLayouts;\r\n\tthis.images = images;\r\n\tthis.autoImageIndex = 1;\r\n}\r\n\r\n/**\r\n * Measures all nodes and sets min/max-width properties required for the second\r\n * layout-pass.\r\n * @param  {Object} docStructure document-definition-object\r\n * @return {Object}              document-measurement-object\r\n */\r\nDocMeasure.prototype.measureDocument = function (docStructure) {\r\n\treturn this.measureNode(docStructure);\r\n};\r\n\r\nDocMeasure.prototype.measureNode = function (node) {\r\n\r\n\tvar self = this;\r\n\r\n\treturn this.styleStack.auto(node, function () {\r\n\t\t// TODO: refactor + rethink whether this is the proper way to handle margins\r\n\t\tnode._margin = getNodeMargin(node);\r\n\r\n\t\tif (node.columns) {\r\n\t\t\treturn extendMargins(self.measureColumns(node));\r\n\t\t} else if (node.stack) {\r\n\t\t\treturn extendMargins(self.measureVerticalContainer(node));\r\n\t\t} else if (node.ul) {\r\n\t\t\treturn extendMargins(self.measureUnorderedList(node));\r\n\t\t} else if (node.ol) {\r\n\t\t\treturn extendMargins(self.measureOrderedList(node));\r\n\t\t} else if (node.table) {\r\n\t\t\treturn extendMargins(self.measureTable(node));\r\n\t\t} else if (node.text !== undefined) {\r\n\t\t\treturn extendMargins(self.measureLeaf(node));\r\n\t\t} else if (node.toc) {\r\n\t\t\treturn extendMargins(self.measureToc(node));\r\n\t\t} else if (node.image) {\r\n\t\t\treturn extendMargins(self.measureImage(node));\r\n\t\t} else if (node.svg) {\r\n\t\t\treturn extendMargins(self.measureSVG(node));\r\n\t\t} else if (node.canvas) {\r\n\t\t\treturn extendMargins(self.measureCanvas(node));\r\n\t\t} else if (node.qr) {\r\n\t\t\treturn extendMargins(self.measureQr(node));\r\n\t\t} else {\r\n\t\t\tthrow 'Unrecognized document structure: ' + JSON.stringify(node, fontStringify);\r\n\t\t}\r\n\t});\r\n\r\n\tfunction extendMargins(node) {\r\n\t\tvar margin = node._margin;\r\n\r\n\t\tif (margin) {\r\n\t\t\tnode._minWidth += margin[0] + margin[2];\r\n\t\t\tnode._maxWidth += margin[0] + margin[2];\r\n\t\t}\r\n\r\n\t\treturn node;\r\n\t}\r\n\r\n\tfunction getNodeMargin() {\r\n\r\n\t\tfunction processSingleMargins(node, currentMargin) {\r\n\t\t\tif (node.marginLeft || node.marginTop || node.marginRight || node.marginBottom) {\r\n\t\t\t\treturn [\r\n\t\t\t\t\tnode.marginLeft || currentMargin[0] || 0,\r\n\t\t\t\t\tnode.marginTop || currentMargin[1] || 0,\r\n\t\t\t\t\tnode.marginRight || currentMargin[2] || 0,\r\n\t\t\t\t\tnode.marginBottom || currentMargin[3] || 0\r\n\t\t\t\t];\r\n\t\t\t}\r\n\t\t\treturn currentMargin;\r\n\t\t}\r\n\r\n\t\tfunction flattenStyleArray(styleArray) {\r\n\t\t\tvar flattenedStyles = {};\r\n\t\t\tfor (var i = styleArray.length - 1; i >= 0; i--) {\r\n\t\t\t\tvar styleName = styleArray[i];\r\n\t\t\t\tvar style = self.styleStack.styleDictionary[styleName];\r\n\t\t\t\tfor (var key in style) {\r\n\t\t\t\t\tif (style.hasOwnProperty(key)) {\r\n\t\t\t\t\t\tflattenedStyles[key] = style[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn flattenedStyles;\r\n\t\t}\r\n\r\n\t\tfunction convertMargin(margin) {\r\n\t\t\tif (isNumber(margin)) {\r\n\t\t\t\tmargin = [margin, margin, margin, margin];\r\n\t\t\t} else if (isArray(margin)) {\r\n\t\t\t\tif (margin.length === 2) {\r\n\t\t\t\t\tmargin = [margin[0], margin[1], margin[0], margin[1]];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn margin;\r\n\t\t}\r\n\r\n\t\tvar margin = [undefined, undefined, undefined, undefined];\r\n\r\n\t\tif (node.style) {\r\n\t\t\tvar styleArray = isArray(node.style) ? node.style : [node.style];\r\n\t\t\tvar flattenedStyleArray = flattenStyleArray(styleArray);\r\n\r\n\t\t\tif (flattenedStyleArray) {\r\n\t\t\t\tmargin = processSingleMargins(flattenedStyleArray, margin);\r\n\t\t\t}\r\n\r\n\t\t\tif (flattenedStyleArray.margin) {\r\n\t\t\t\tmargin = convertMargin(flattenedStyleArray.margin);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tmargin = processSingleMargins(node, margin);\r\n\r\n\t\tif (node.margin) {\r\n\t\t\tmargin = convertMargin(node.margin);\r\n\t\t}\r\n\r\n\t\tif (margin[0] === undefined && margin[1] === undefined && margin[2] === undefined && margin[3] === undefined) {\r\n\t\t\treturn null;\r\n\t\t} else {\r\n\t\t\treturn margin;\r\n\t\t}\r\n\t}\r\n};\r\n\r\nDocMeasure.prototype.convertIfBase64Image = function (node) {\r\n\tif (/^data:image\\/(jpeg|jpg|png);base64,/.test(node.image)) {\r\n\t\tvar label = '$$pdfmake$$' + this.autoImageIndex++;\r\n\t\tthis.images[label] = node.image;\r\n\t\tnode.image = label;\r\n\t}\r\n};\r\n\r\nDocMeasure.prototype.measureImageWithDimensions = function (node, dimensions) {\r\n\tif (node.fit) {\r\n\t\tvar factor = (dimensions.width / dimensions.height > node.fit[0] / node.fit[1]) ? node.fit[0] / dimensions.width : node.fit[1] / dimensions.height;\r\n\t\tnode._width = node._minWidth = node._maxWidth = dimensions.width * factor;\r\n\t\tnode._height = dimensions.height * factor;\r\n\t} else if (node.cover) {\r\n\t\tnode._width = node._minWidth = node._maxWidth = node.cover.width;\r\n\t\tnode._height = node._minHeight = node._maxHeight = node.cover.height;\r\n\t} else {\r\n\t\tnode._width = node._minWidth = node._maxWidth = node.width || dimensions.width;\r\n\t\tnode._height = node.height || (dimensions.height * node._width / dimensions.width);\r\n\r\n\t\tif (isNumber(node.maxWidth) && node.maxWidth < node._width) {\r\n\t\t\tnode._width = node._minWidth = node._maxWidth = node.maxWidth;\r\n\t\t\tnode._height = node._width * dimensions.height / dimensions.width;\r\n\t\t}\r\n\r\n\t\tif (isNumber(node.maxHeight) && node.maxHeight < node._height) {\r\n\t\t\tnode._height = node.maxHeight;\r\n\t\t\tnode._width = node._minWidth = node._maxWidth = node._height * dimensions.width / dimensions.height;\r\n\t\t}\r\n\r\n\t\tif (isNumber(node.minWidth) && node.minWidth > node._width) {\r\n\t\t\tnode._width = node._minWidth = node._maxWidth = node.minWidth;\r\n\t\t\tnode._height = node._width * dimensions.height / dimensions.width;\r\n\t\t}\r\n\r\n\t\tif (isNumber(node.minHeight) && node.minHeight > node._height) {\r\n\t\t\tnode._height = node.minHeight;\r\n\t\t\tnode._width = node._minWidth = node._maxWidth = node._height * dimensions.width / dimensions.height;\r\n\t\t}\r\n\t}\r\n\r\n\tnode._alignment = this.styleStack.getProperty('alignment');\r\n};\r\n\r\nDocMeasure.prototype.measureImage = function (node) {\r\n\tif (this.images) {\r\n\t\tthis.convertIfBase64Image(node);\r\n\t}\r\n\r\n\tvar dimensions = this.imageMeasure.measureImage(node.image);\r\n\r\n\tthis.measureImageWithDimensions(node, dimensions);\r\n\r\n\treturn node;\r\n};\r\n\r\nDocMeasure.prototype.measureSVG = function (node) {\r\n\r\n\tvar dimensions = this.svgMeasure.measureSVG(node.svg);\r\n\r\n\tthis.measureImageWithDimensions(node, dimensions);\r\n\r\n\tnode.font = this.styleStack.getProperty('font');\r\n\r\n\t// scale SVG based on final dimension\r\n\tnode.svg = this.svgMeasure.writeDimensions(node.svg, {\r\n\t\twidth: node._width,\r\n\t\theight: node._height\r\n\t});\r\n\r\n\treturn node;\r\n};\r\n\r\nDocMeasure.prototype.measureLeaf = function (node) {\r\n\r\n\tif (node._textRef && node._textRef._textNodeRef.text) {\r\n\t\tnode.text = node._textRef._textNodeRef.text;\r\n\t}\r\n\r\n\t// Make sure style properties of the node itself are considered when building inlines.\r\n\t// We could also just pass [node] to buildInlines, but that fails for bullet points.\r\n\tvar styleStack = this.styleStack.clone();\r\n\tstyleStack.push(node);\r\n\r\n\tvar data = this.textTools.buildInlines(node.text, styleStack);\r\n\r\n\tnode._inlines = data.items;\r\n\tnode._minWidth = data.minWidth;\r\n\tnode._maxWidth = data.maxWidth;\r\n\r\n\treturn node;\r\n};\r\n\r\nDocMeasure.prototype.measureToc = function (node) {\r\n\tif (node.toc.title) {\r\n\t\tnode.toc.title = this.measureNode(node.toc.title);\r\n\t}\r\n\r\n\tif (node.toc._items.length > 0) {\r\n\t\tvar body = [];\r\n\t\tvar textStyle = node.toc.textStyle || {};\r\n\t\tvar numberStyle = node.toc.numberStyle || textStyle;\r\n\t\tvar textMargin = node.toc.textMargin || [0, 0, 0, 0];\r\n\t\tfor (var i = 0, l = node.toc._items.length; i < l; i++) {\r\n\t\t\tvar item = node.toc._items[i];\r\n\t\t\tvar lineStyle = item._textNodeRef.tocStyle || textStyle;\r\n\t\t\tvar lineMargin = item._textNodeRef.tocMargin || textMargin;\r\n\t\t\tvar lineNumberStyle = item._textNodeRef.tocNumberStyle || numberStyle;\r\n\t\t\tvar destination = getNodeId(item._nodeRef);\r\n\t\t\tbody.push([\r\n\t\t\t\t{ text: item._textNodeRef.text, linkToDestination: destination, alignment: 'left', style: lineStyle, margin: lineMargin },\r\n\t\t\t\t{ text: '00000', linkToDestination: destination, alignment: 'right', _tocItemRef: item._nodeRef, style: lineNumberStyle, margin: [0, lineMargin[1], 0, lineMargin[3]] }\r\n\t\t\t]);\r\n\t\t}\r\n\r\n\r\n\t\tnode.toc._table = {\r\n\t\t\ttable: {\r\n\t\t\t\tdontBreakRows: true,\r\n\t\t\t\twidths: ['*', 'auto'],\r\n\t\t\t\tbody: body\r\n\t\t\t},\r\n\t\t\tlayout: 'noBorders'\r\n\t\t};\r\n\r\n\t\tnode.toc._table = this.measureNode(node.toc._table);\r\n\t}\r\n\r\n\treturn node;\r\n};\r\n\r\nDocMeasure.prototype.measureVerticalContainer = function (node) {\r\n\tvar items = node.stack;\r\n\r\n\tnode._minWidth = 0;\r\n\tnode._maxWidth = 0;\r\n\r\n\tfor (var i = 0, l = items.length; i < l; i++) {\r\n\t\titems[i] = this.measureNode(items[i]);\r\n\r\n\t\tnode._minWidth = Math.max(node._minWidth, items[i]._minWidth);\r\n\t\tnode._maxWidth = Math.max(node._maxWidth, items[i]._maxWidth);\r\n\t}\r\n\r\n\treturn node;\r\n};\r\n\r\nDocMeasure.prototype.gapSizeForList = function () {\r\n\treturn this.textTools.sizeOfString('9. ', this.styleStack);\r\n};\r\n\r\nDocMeasure.prototype.buildUnorderedMarker = function (styleStack, gapSize, type) {\r\n\tfunction buildDisc(gapSize, color) {\r\n\t\t// TODO: ascender-based calculations\r\n\t\tvar radius = gapSize.fontSize / 6;\r\n\t\treturn {\r\n\t\t\tcanvas: [{\r\n\t\t\t\tx: radius,\r\n\t\t\t\ty: (gapSize.height / gapSize.lineHeight) + gapSize.descender - gapSize.fontSize / 3,\r\n\t\t\t\tr1: radius,\r\n\t\t\t\tr2: radius,\r\n\t\t\t\ttype: 'ellipse',\r\n\t\t\t\tcolor: color\r\n\t\t\t}]\r\n\t\t};\r\n\t}\r\n\r\n\tfunction buildSquare(gapSize, color) {\r\n\t\t// TODO: ascender-based calculations\r\n\t\tvar size = gapSize.fontSize / 3;\r\n\t\treturn {\r\n\t\t\tcanvas: [{\r\n\t\t\t\tx: 0,\r\n\t\t\t\ty: (gapSize.height / gapSize.lineHeight) + gapSize.descender - (gapSize.fontSize / 3) - (size / 2),\r\n\t\t\t\th: size,\r\n\t\t\t\tw: size,\r\n\t\t\t\ttype: 'rect',\r\n\t\t\t\tcolor: color\r\n\t\t\t}]\r\n\t\t};\r\n\t}\r\n\r\n\tfunction buildCircle(gapSize, color) {\r\n\t\t// TODO: ascender-based calculations\r\n\t\tvar radius = gapSize.fontSize / 6;\r\n\t\treturn {\r\n\t\t\tcanvas: [{\r\n\t\t\t\tx: radius,\r\n\t\t\t\ty: (gapSize.height / gapSize.lineHeight) + gapSize.descender - gapSize.fontSize / 3,\r\n\t\t\t\tr1: radius,\r\n\t\t\t\tr2: radius,\r\n\t\t\t\ttype: 'ellipse',\r\n\t\t\t\tlineColor: color\r\n\t\t\t}]\r\n\t\t};\r\n\t}\r\n\r\n\tvar marker;\r\n\tvar color = styleStack.getProperty('markerColor') || styleStack.getProperty('color') || 'black';\r\n\r\n\tswitch (type) {\r\n\t\tcase 'circle':\r\n\t\t\tmarker = buildCircle(gapSize, color);\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'square':\r\n\t\t\tmarker = buildSquare(gapSize, color);\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'none':\r\n\t\t\tmarker = {};\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'disc':\r\n\t\tdefault:\r\n\t\t\tmarker = buildDisc(gapSize, color);\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\tmarker._minWidth = marker._maxWidth = gapSize.width;\r\n\tmarker._minHeight = marker._maxHeight = gapSize.height;\r\n\r\n\treturn marker;\r\n};\r\n\r\nDocMeasure.prototype.buildOrderedMarker = function (counter, styleStack, type, separator) {\r\n\tfunction prepareAlpha(counter) {\r\n\t\tfunction toAlpha(num) {\r\n\t\t\treturn (num >= 26 ? toAlpha((num / 26 >> 0) - 1) : '') + 'abcdefghijklmnopqrstuvwxyz'[num % 26 >> 0];\r\n\t\t}\r\n\r\n\t\tif (counter < 1) {\r\n\t\t\treturn counter.toString();\r\n\t\t}\r\n\r\n\t\treturn toAlpha(counter - 1);\r\n\t}\r\n\r\n\tfunction prepareRoman(counter) {\r\n\t\tif (counter < 1 || counter > 4999) {\r\n\t\t\treturn counter.toString();\r\n\t\t}\r\n\t\tvar num = counter;\r\n\t\tvar lookup = { M: 1000, CM: 900, D: 500, CD: 400, C: 100, XC: 90, L: 50, XL: 40, X: 10, IX: 9, V: 5, IV: 4, I: 1 }, roman = '', i;\r\n\t\tfor (i in lookup) {\r\n\t\t\twhile (num >= lookup[i]) {\r\n\t\t\t\troman += i;\r\n\t\t\t\tnum -= lookup[i];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn roman;\r\n\t}\r\n\r\n\tfunction prepareDecimal(counter) {\r\n\t\treturn counter.toString();\r\n\t}\r\n\r\n\tvar counterText;\r\n\tswitch (type) {\r\n\t\tcase 'none':\r\n\t\t\tcounterText = null;\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'upper-alpha':\r\n\t\t\tcounterText = prepareAlpha(counter).toUpperCase();\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'lower-alpha':\r\n\t\t\tcounterText = prepareAlpha(counter);\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'upper-roman':\r\n\t\t\tcounterText = prepareRoman(counter);\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'lower-roman':\r\n\t\t\tcounterText = prepareRoman(counter).toLowerCase();\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'decimal':\r\n\t\tdefault:\r\n\t\t\tcounterText = prepareDecimal(counter);\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\tif (counterText === null) {\r\n\t\treturn {};\r\n\t}\r\n\r\n\tif (separator) {\r\n\t\tif (isArray(separator)) {\r\n\t\t\tif (separator[0]) {\r\n\t\t\t\tcounterText = separator[0] + counterText;\r\n\t\t\t}\r\n\r\n\t\t\tif (separator[1]) {\r\n\t\t\t\tcounterText += separator[1];\r\n\t\t\t}\r\n\t\t\tcounterText += ' ';\r\n\t\t} else {\r\n\t\t\tcounterText += separator + ' ';\r\n\t\t}\r\n\t}\r\n\r\n\tvar textArray = { text: counterText };\r\n\tvar markerColor = styleStack.getProperty('markerColor');\r\n\tif (markerColor) {\r\n\t\ttextArray.color = markerColor;\r\n\t}\r\n\r\n\treturn { _inlines: this.textTools.buildInlines(textArray, styleStack).items };\r\n};\r\n\r\nDocMeasure.prototype.measureUnorderedList = function (node) {\r\n\tvar style = this.styleStack.clone();\r\n\tvar items = node.ul;\r\n\tnode.type = node.type || 'disc';\r\n\tnode._gapSize = this.gapSizeForList();\r\n\tnode._minWidth = 0;\r\n\tnode._maxWidth = 0;\r\n\r\n\tfor (var i = 0, l = items.length; i < l; i++) {\r\n\t\tvar item = items[i] = this.measureNode(items[i]);\r\n\r\n\t\tif (!item.ol && !item.ul) {\r\n\t\t\titem.listMarker = this.buildUnorderedMarker(style, node._gapSize, item.listType || node.type);\r\n\t\t}\r\n\r\n\t\tnode._minWidth = Math.max(node._minWidth, items[i]._minWidth + node._gapSize.width);\r\n\t\tnode._maxWidth = Math.max(node._maxWidth, items[i]._maxWidth + node._gapSize.width);\r\n\t}\r\n\r\n\treturn node;\r\n};\r\n\r\nDocMeasure.prototype.measureOrderedList = function (node) {\r\n\tvar style = this.styleStack.clone();\r\n\tvar items = node.ol;\r\n\tnode.type = node.type || 'decimal';\r\n\tnode.separator = node.separator || '.';\r\n\tnode.reversed = node.reversed || false;\r\n\tif (!isNumber(node.start)) {\r\n\t\tnode.start = node.reversed ? items.length : 1;\r\n\t}\r\n\tnode._gapSize = this.gapSizeForList();\r\n\tnode._minWidth = 0;\r\n\tnode._maxWidth = 0;\r\n\r\n\tvar counter = node.start;\r\n\tfor (var i = 0, l = items.length; i < l; i++) {\r\n\t\tvar item = items[i] = this.measureNode(items[i]);\r\n\r\n\t\tif (!item.ol && !item.ul) {\r\n\t\t\tvar counterValue = isNumber(item.counter) ? item.counter : counter;\r\n\t\t\titem.listMarker = this.buildOrderedMarker(counterValue, style, item.listType || node.type, node.separator);\r\n\t\t\tif (item.listMarker._inlines) {\r\n\t\t\t\tnode._gapSize.width = Math.max(node._gapSize.width, item.listMarker._inlines[0].width);\r\n\t\t\t}\r\n\t\t}  // TODO: else - nested lists numbering\r\n\r\n\t\tnode._minWidth = Math.max(node._minWidth, items[i]._minWidth);\r\n\t\tnode._maxWidth = Math.max(node._maxWidth, items[i]._maxWidth);\r\n\r\n\t\tif (node.reversed) {\r\n\t\t\tcounter--;\r\n\t\t} else {\r\n\t\t\tcounter++;\r\n\t\t}\r\n\t}\r\n\r\n\tnode._minWidth += node._gapSize.width;\r\n\tnode._maxWidth += node._gapSize.width;\r\n\r\n\tfor (var i = 0, l = items.length; i < l; i++) {\r\n\t\tvar item = items[i];\r\n\t\tif (!item.ol && !item.ul) {\r\n\t\t\titem.listMarker._minWidth = item.listMarker._maxWidth = node._gapSize.width;\r\n\t\t}\r\n\t}\r\n\r\n\treturn node;\r\n};\r\n\r\nDocMeasure.prototype.measureColumns = function (node) {\r\n\tvar columns = node.columns;\r\n\tnode._gap = this.styleStack.getProperty('columnGap') || 0;\r\n\r\n\tfor (var i = 0, l = columns.length; i < l; i++) {\r\n\t\tcolumns[i] = this.measureNode(columns[i]);\r\n\t}\r\n\r\n\tvar measures = ColumnCalculator.measureMinMax(columns);\r\n\r\n\tvar numGaps = (columns.length > 0) ? (columns.length - 1) : 0;\r\n\tnode._minWidth = measures.min + node._gap * numGaps;\r\n\tnode._maxWidth = measures.max + node._gap * numGaps;\r\n\r\n\treturn node;\r\n};\r\n\r\nDocMeasure.prototype.measureTable = function (node) {\r\n\textendTableWidths(node);\r\n\tnode._layout = getLayout(this.tableLayouts);\r\n\tnode._offsets = getOffsets(node._layout);\r\n\r\n\tvar colSpans = [];\r\n\tvar col, row, cols, rows;\r\n\r\n\tfor (col = 0, cols = node.table.body[0].length; col < cols; col++) {\r\n\t\tvar c = node.table.widths[col];\r\n\t\tc._minWidth = 0;\r\n\t\tc._maxWidth = 0;\r\n\r\n\t\tfor (row = 0, rows = node.table.body.length; row < rows; row++) {\r\n\t\t\tvar rowData = node.table.body[row];\r\n\t\t\tvar data = rowData[col];\r\n\t\t\tif (data === undefined) {\r\n\t\t\t\tconsole.error('Malformed table row ', rowData, 'in node ', node);\r\n\t\t\t\tthrow 'Malformed table row, a cell is undefined.';\r\n\t\t\t}\r\n\t\t\tif (data === null) { // transform to object\r\n\t\t\t\tdata = '';\r\n\t\t\t}\r\n\r\n\t\t\tif (!data._span) {\r\n\t\t\t\tdata = rowData[col] = this.styleStack.auto(data, measureCb(this, data));\r\n\r\n\t\t\t\tif (data.colSpan && data.colSpan > 1) {\r\n\t\t\t\t\tmarkSpans(rowData, col, data.colSpan);\r\n\t\t\t\t\tcolSpans.push({ col: col, span: data.colSpan, minWidth: data._minWidth, maxWidth: data._maxWidth });\r\n\t\t\t\t} else {\r\n\t\t\t\t\tc._minWidth = Math.max(c._minWidth, data._minWidth);\r\n\t\t\t\t\tc._maxWidth = Math.max(c._maxWidth, data._maxWidth);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (data.rowSpan && data.rowSpan > 1) {\r\n\t\t\t\tmarkVSpans(node.table, row, col, data.rowSpan);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\textendWidthsForColSpans();\r\n\r\n\tvar measures = ColumnCalculator.measureMinMax(node.table.widths);\r\n\r\n\tnode._minWidth = measures.min + node._offsets.total;\r\n\tnode._maxWidth = measures.max + node._offsets.total;\r\n\r\n\treturn node;\r\n\r\n\tfunction measureCb(_this, data) {\r\n\t\treturn function () {\r\n\t\t\tif (isObject(data)) {\r\n\t\t\t\tdata.fillColor = _this.styleStack.getProperty('fillColor');\r\n\t\t\t\tdata.fillOpacity = _this.styleStack.getProperty('fillOpacity');\r\n\t\t\t}\r\n\t\t\treturn _this.measureNode(data);\r\n\t\t};\r\n\t}\r\n\r\n\tfunction getLayout(tableLayouts) {\r\n\t\tvar layout = node.layout;\r\n\r\n\t\tif (isString(layout)) {\r\n\t\t\tlayout = tableLayouts[layout];\r\n\t\t}\r\n\r\n\t\tvar defaultLayout = {\r\n\t\t\thLineWidth: function (i, node) {\r\n\t\t\t\treturn 1;\r\n\t\t\t},\r\n\t\t\tvLineWidth: function (i, node) {\r\n\t\t\t\treturn 1;\r\n\t\t\t},\r\n\t\t\thLineColor: function (i, node) {\r\n\t\t\t\treturn 'black';\r\n\t\t\t},\r\n\t\t\tvLineColor: function (i, node) {\r\n\t\t\t\treturn 'black';\r\n\t\t\t},\r\n\t\t\thLineStyle: function (i, node) {\r\n\t\t\t\treturn null;\r\n\t\t\t},\r\n\t\t\tvLineStyle: function (i, node) {\r\n\t\t\t\treturn null;\r\n\t\t\t},\r\n\t\t\tpaddingLeft: function (i, node) {\r\n\t\t\t\treturn 4;\r\n\t\t\t},\r\n\t\t\tpaddingRight: function (i, node) {\r\n\t\t\t\treturn 4;\r\n\t\t\t},\r\n\t\t\tpaddingTop: function (i, node) {\r\n\t\t\t\treturn 2;\r\n\t\t\t},\r\n\t\t\tpaddingBottom: function (i, node) {\r\n\t\t\t\treturn 2;\r\n\t\t\t},\r\n\t\t\tfillColor: function (i, node) {\r\n\t\t\t\treturn null;\r\n\t\t\t},\r\n\t\t\tfillOpacity: function (i, node) {\r\n\t\t\t\treturn 1;\r\n\t\t\t},\r\n\t\t\tdefaultBorder: true\r\n\t\t};\r\n\r\n\t\treturn pack(defaultLayout, layout);\r\n\t}\r\n\r\n\tfunction getOffsets(layout) {\r\n\t\tvar offsets = [];\r\n\t\tvar totalOffset = 0;\r\n\t\tvar prevRightPadding = 0;\r\n\r\n\t\tfor (var i = 0, l = node.table.widths.length; i < l; i++) {\r\n\t\t\tvar lOffset = prevRightPadding + layout.vLineWidth(i, node) + layout.paddingLeft(i, node);\r\n\t\t\toffsets.push(lOffset);\r\n\t\t\ttotalOffset += lOffset;\r\n\t\t\tprevRightPadding = layout.paddingRight(i, node);\r\n\t\t}\r\n\r\n\t\ttotalOffset += prevRightPadding + layout.vLineWidth(node.table.widths.length, node);\r\n\r\n\t\treturn {\r\n\t\t\ttotal: totalOffset,\r\n\t\t\toffsets: offsets\r\n\t\t};\r\n\t}\r\n\r\n\tfunction extendWidthsForColSpans() {\r\n\t\tvar q, j;\r\n\r\n\t\tfor (var i = 0, l = colSpans.length; i < l; i++) {\r\n\t\t\tvar span = colSpans[i];\r\n\r\n\t\t\tvar currentMinMax = getMinMax(span.col, span.span, node._offsets);\r\n\t\t\tvar minDifference = span.minWidth - currentMinMax.minWidth;\r\n\t\t\tvar maxDifference = span.maxWidth - currentMinMax.maxWidth;\r\n\r\n\t\t\tif (minDifference > 0) {\r\n\t\t\t\tq = minDifference / span.span;\r\n\r\n\t\t\t\tfor (j = 0; j < span.span; j++) {\r\n\t\t\t\t\tnode.table.widths[span.col + j]._minWidth += q;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (maxDifference > 0) {\r\n\t\t\t\tq = maxDifference / span.span;\r\n\r\n\t\t\t\tfor (j = 0; j < span.span; j++) {\r\n\t\t\t\t\tnode.table.widths[span.col + j]._maxWidth += q;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getMinMax(col, span, offsets) {\r\n\t\tvar result = { minWidth: 0, maxWidth: 0 };\r\n\r\n\t\tfor (var i = 0; i < span; i++) {\r\n\t\t\tresult.minWidth += node.table.widths[col + i]._minWidth + (i ? offsets.offsets[col + i] : 0);\r\n\t\t\tresult.maxWidth += node.table.widths[col + i]._maxWidth + (i ? offsets.offsets[col + i] : 0);\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tfunction markSpans(rowData, col, span) {\r\n\t\tfor (var i = 1; i < span; i++) {\r\n\t\t\trowData[col + i] = {\r\n\t\t\t\t_span: true,\r\n\t\t\t\t_minWidth: 0,\r\n\t\t\t\t_maxWidth: 0,\r\n\t\t\t\trowSpan: rowData[col].rowSpan\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\tfunction markVSpans(table, row, col, span) {\r\n\t\tfor (var i = 1; i < span; i++) {\r\n\t\t\ttable.body[row + i][col] = {\r\n\t\t\t\t_span: true,\r\n\t\t\t\t_minWidth: 0,\r\n\t\t\t\t_maxWidth: 0,\r\n\t\t\t\tfillColor: table.body[row][col].fillColor,\r\n\t\t\t\tfillOpacity: table.body[row][col].fillOpacity\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\tfunction extendTableWidths(node) {\r\n\t\tif (!node.table.widths) {\r\n\t\t\tnode.table.widths = 'auto';\r\n\t\t}\r\n\r\n\t\tif (isString(node.table.widths)) {\r\n\t\t\tnode.table.widths = [node.table.widths];\r\n\r\n\t\t\twhile (node.table.widths.length < node.table.body[0].length) {\r\n\t\t\t\tnode.table.widths.push(node.table.widths[node.table.widths.length - 1]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (var i = 0, l = node.table.widths.length; i < l; i++) {\r\n\t\t\tvar w = node.table.widths[i];\r\n\t\t\tif (isNumber(w) || isString(w)) {\r\n\t\t\t\tnode.table.widths[i] = { width: w };\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\nDocMeasure.prototype.measureCanvas = function (node) {\r\n\tvar w = 0, h = 0;\r\n\r\n\tfor (var i = 0, l = node.canvas.length; i < l; i++) {\r\n\t\tvar vector = node.canvas[i];\r\n\r\n\t\tswitch (vector.type) {\r\n\t\t\tcase 'ellipse':\r\n\t\t\t\tw = Math.max(w, vector.x + vector.r1);\r\n\t\t\t\th = Math.max(h, vector.y + vector.r2);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'rect':\r\n\t\t\t\tw = Math.max(w, vector.x + vector.w);\r\n\t\t\t\th = Math.max(h, vector.y + vector.h);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'line':\r\n\t\t\t\tw = Math.max(w, vector.x1, vector.x2);\r\n\t\t\t\th = Math.max(h, vector.y1, vector.y2);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'polyline':\r\n\t\t\t\tfor (var i2 = 0, l2 = vector.points.length; i2 < l2; i2++) {\r\n\t\t\t\t\tw = Math.max(w, vector.points[i2].x);\r\n\t\t\t\t\th = Math.max(h, vector.points[i2].y);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tnode._minWidth = node._maxWidth = w;\r\n\tnode._minHeight = node._maxHeight = h;\r\n\tnode._alignment = this.styleStack.getProperty('alignment');\r\n\r\n\treturn node;\r\n};\r\n\r\nDocMeasure.prototype.measureQr = function (node) {\r\n\tnode = qrEncoder.measure(node);\r\n\tnode._alignment = this.styleStack.getProperty('alignment');\r\n\treturn node;\r\n};\r\n\r\nmodule.exports = DocMeasure;\r\n","'use strict';\r\n\r\nvar isString = require('./helpers').isString;\r\nvar isNumber = require('./helpers').isNumber;\r\nvar isBoolean = require('./helpers').isBoolean;\r\nvar isArray = require('./helpers').isArray;\r\nvar isUndefined = require('./helpers').isUndefined;\r\nvar fontStringify = require('./helpers').fontStringify;\r\n\r\nfunction DocPreprocessor() {\r\n\r\n}\r\n\r\nDocPreprocessor.prototype.preprocessDocument = function (docStructure) {\r\n\tthis.parentNode = null;\r\n\tthis.tocs = [];\r\n\tthis.nodeReferences = [];\r\n\treturn this.preprocessNode(docStructure);\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessNode = function (node) {\r\n\t// expand shortcuts and casting values\r\n\tif (isArray(node)) {\r\n\t\tnode = { stack: node };\r\n\t} else if (isString(node)) {\r\n\t\tnode = { text: node };\r\n\t} else if (isNumber(node) || isBoolean(node)) {\r\n\t\tnode = { text: node.toString() };\r\n\t} else if (node === undefined || node === null) {\r\n\t\tnode = { text: '' };\r\n\t} else if (Object.keys(node).length === 0) { // empty object\r\n\t\tnode = { text: '' };\r\n\t} else if ('text' in node && (node.text === undefined || node.text === null)) {\r\n\t\tnode.text = '';\r\n\t}\r\n\r\n\tif (node.columns) {\r\n\t\treturn this.preprocessColumns(node);\r\n\t} else if (node.stack) {\r\n\t\treturn this.preprocessVerticalContainer(node);\r\n\t} else if (node.ul) {\r\n\t\treturn this.preprocessList(node);\r\n\t} else if (node.ol) {\r\n\t\treturn this.preprocessList(node);\r\n\t} else if (node.table) {\r\n\t\treturn this.preprocessTable(node);\r\n\t} else if (node.text !== undefined) {\r\n\t\treturn this.preprocessText(node);\r\n\t} else if (node.toc) {\r\n\t\treturn this.preprocessToc(node);\r\n\t} else if (node.image) {\r\n\t\treturn this.preprocessImage(node);\r\n\t} else if (node.svg) {\r\n\t\treturn this.preprocessSVG(node);\r\n\t} else if (node.canvas) {\r\n\t\treturn this.preprocessCanvas(node);\r\n\t} else if (node.qr) {\r\n\t\treturn this.preprocessQr(node);\r\n\t} else if (node.pageReference || node.textReference) {\r\n\t\treturn this.preprocessText(node);\r\n\t} else {\r\n\t\tthrow 'Unrecognized document structure: ' + JSON.stringify(node, fontStringify);\r\n\t}\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessColumns = function (node) {\r\n\tvar columns = node.columns;\r\n\r\n\tfor (var i = 0, l = columns.length; i < l; i++) {\r\n\t\tcolumns[i] = this.preprocessNode(columns[i]);\r\n\t}\r\n\r\n\treturn node;\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessVerticalContainer = function (node) {\r\n\tvar items = node.stack;\r\n\r\n\tfor (var i = 0, l = items.length; i < l; i++) {\r\n\t\titems[i] = this.preprocessNode(items[i]);\r\n\t}\r\n\r\n\treturn node;\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessList = function (node) {\r\n\tvar items = node.ul || node.ol;\r\n\r\n\tfor (var i = 0, l = items.length; i < l; i++) {\r\n\t\titems[i] = this.preprocessNode(items[i]);\r\n\t}\r\n\r\n\treturn node;\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessTable = function (node) {\r\n\tvar col, row, cols, rows;\r\n\r\n\tfor (col = 0, cols = node.table.body[0].length; col < cols; col++) {\r\n\t\tfor (row = 0, rows = node.table.body.length; row < rows; row++) {\r\n\t\t\tvar rowData = node.table.body[row];\r\n\t\t\tvar data = rowData[col];\r\n\t\t\tif (data !== undefined) {\r\n\t\t\t\tif (data === null) { // transform to object\r\n\t\t\t\t\tdata = '';\r\n\t\t\t\t}\r\n\t\t\t\tif (!data._span) {\r\n\t\t\t\t\trowData[col] = this.preprocessNode(data);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn node;\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessText = function (node) {\r\n\tif (node.tocItem) {\r\n\t\tif (!isArray(node.tocItem)) {\r\n\t\t\tnode.tocItem = [node.tocItem];\r\n\t\t}\r\n\r\n\t\tfor (var i = 0, l = node.tocItem.length; i < l; i++) {\r\n\t\t\tif (!isString(node.tocItem[i])) {\r\n\t\t\t\tnode.tocItem[i] = '_default_';\r\n\t\t\t}\r\n\r\n\t\t\tvar tocItemId = node.tocItem[i];\r\n\r\n\t\t\tif (!this.tocs[tocItemId]) {\r\n\t\t\t\tthis.tocs[tocItemId] = { toc: { _items: [], _pseudo: true } };\r\n\t\t\t}\r\n\r\n\t\t\tif (!node.id) {\r\n\t\t\t\tnode.id = 'toc-' + tocItemId + '-' + this.tocs[tocItemId].toc._items.length;\r\n\t\t\t}\r\n\r\n\t\t\tvar tocItemRef = {\r\n\t\t\t\t_nodeRef: this._getNodeForNodeRef(node),\r\n\t\t\t\t_textNodeRef: node\r\n\t\t\t};\r\n\t\t\tthis.tocs[tocItemId].toc._items.push(tocItemRef);\r\n\t\t}\r\n\t}\r\n\r\n\tif (node.id) {\r\n\t\tif (this.nodeReferences[node.id]) {\r\n\t\t\tif (!this.nodeReferences[node.id]._pseudo) {\r\n\t\t\t\tthrow \"Node id '\" + node.id + \"' already exists\";\r\n\t\t\t}\r\n\r\n\t\t\tthis.nodeReferences[node.id]._nodeRef = this._getNodeForNodeRef(node);\r\n\t\t\tthis.nodeReferences[node.id]._textNodeRef = node;\r\n\t\t\tthis.nodeReferences[node.id]._pseudo = false;\r\n\t\t} else {\r\n\t\t\tthis.nodeReferences[node.id] = {\r\n\t\t\t\t_nodeRef: this._getNodeForNodeRef(node),\r\n\t\t\t\t_textNodeRef: node\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\tif (node.pageReference) {\r\n\t\tif (!this.nodeReferences[node.pageReference]) {\r\n\t\t\tthis.nodeReferences[node.pageReference] = {\r\n\t\t\t\t_nodeRef: {},\r\n\t\t\t\t_textNodeRef: {},\r\n\t\t\t\t_pseudo: true\r\n\t\t\t};\r\n\t\t}\r\n\t\tnode.text = '00000';\r\n\t\tnode.linkToDestination = node.pageReference;\r\n\t\tnode._pageRef = this.nodeReferences[node.pageReference];\r\n\t}\r\n\r\n\tif (node.textReference) {\r\n\t\tif (!this.nodeReferences[node.textReference]) {\r\n\t\t\tthis.nodeReferences[node.textReference] = { _nodeRef: {}, _pseudo: true };\r\n\t\t}\r\n\r\n\t\tnode.text = '';\r\n\t\tnode.linkToDestination = node.textReference;\r\n\t\tnode._textRef = this.nodeReferences[node.textReference];\r\n\t}\r\n\r\n\tif (node.text && node.text.text) {\r\n\t\tnode.text = [this.preprocessNode(node.text)];\r\n\t} else if (isArray(node.text)) {\r\n\t\tvar isSetParentNode = false;\r\n\t\tif (this.parentNode === null) {\r\n\t\t\tthis.parentNode = node;\r\n\t\t\tisSetParentNode = true;\r\n\t\t}\r\n\r\n\t\tfor (var i = 0, l = node.text.length; i < l; i++) {\r\n\t\t\tnode.text[i] = this.preprocessNode(node.text[i]);\r\n\t\t}\r\n\r\n\t\tif (isSetParentNode) {\r\n\t\t\tthis.parentNode = null;\r\n\t\t}\r\n\t}\r\n\r\n\treturn node;\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessToc = function (node) {\r\n\tif (!node.toc.id) {\r\n\t\tnode.toc.id = '_default_';\r\n\t}\r\n\r\n\tnode.toc.title = node.toc.title ? this.preprocessNode(node.toc.title) : null;\r\n\tnode.toc._items = [];\r\n\r\n\tif (this.tocs[node.toc.id]) {\r\n\t\tif (!this.tocs[node.toc.id].toc._pseudo) {\r\n\t\t\tthrow \"TOC '\" + node.toc.id + \"' already exists\";\r\n\t\t}\r\n\r\n\t\tnode.toc._items = this.tocs[node.toc.id].toc._items;\r\n\t}\r\n\r\n\tthis.tocs[node.toc.id] = node;\r\n\r\n\treturn node;\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessImage = function (node) {\r\n\tif (!isUndefined(node.image.type) && !isUndefined(node.image.data) && (node.image.type === 'Buffer') && isArray(node.image.data)) {\r\n\t\tnode.image = Buffer.from(node.image.data);\r\n\t}\r\n\treturn node;\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessSVG = function (node) {\r\n\treturn node;\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessCanvas = function (node) {\r\n\treturn node;\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessQr = function (node) {\r\n\treturn node;\r\n};\r\n\r\nDocPreprocessor.prototype._getNodeForNodeRef = function (node) {\r\n\tif (this.parentNode) {\r\n\t\treturn this.parentNode;\r\n\t}\r\n\r\n\treturn node;\r\n}\r\n\r\nmodule.exports = DocPreprocessor;\r\n","'use strict';\r\n\r\nvar TraversalTracker = require('./traversalTracker');\r\nvar isString = require('./helpers').isString;\r\n\r\n/**\r\n * Creates an instance of DocumentContext - a store for current x, y positions and available width/height.\r\n * It facilitates column divisions and vertical sync\r\n */\r\nfunction DocumentContext(pageSize, pageMargins) {\r\n\tthis.pages = [];\r\n\r\n\tthis.pageMargins = pageMargins;\r\n\r\n\tthis.x = pageMargins.left;\r\n\tthis.availableWidth = pageSize.width - pageMargins.left - pageMargins.right;\r\n\tthis.availableHeight = 0;\r\n\tthis.page = -1;\r\n\r\n\tthis.snapshots = [];\r\n\r\n\tthis.endingCell = null;\r\n\r\n\tthis.tracker = new TraversalTracker();\r\n\r\n\tthis.backgroundLength = [];\r\n\r\n\tthis.addPage(pageSize);\r\n}\r\n\r\nDocumentContext.prototype.beginColumnGroup = function () {\r\n\tthis.snapshots.push({\r\n\t\tx: this.x,\r\n\t\ty: this.y,\r\n\t\tavailableHeight: this.availableHeight,\r\n\t\tavailableWidth: this.availableWidth,\r\n\t\tpage: this.page,\r\n\t\tbottomMost: {\r\n\t\t\tx: this.x,\r\n\t\t\ty: this.y,\r\n\t\t\tavailableHeight: this.availableHeight,\r\n\t\t\tavailableWidth: this.availableWidth,\r\n\t\t\tpage: this.page\r\n\t\t},\r\n\t\tendingCell: this.endingCell,\r\n\t\tlastColumnWidth: this.lastColumnWidth\r\n\t});\r\n\r\n\tthis.lastColumnWidth = 0;\r\n};\r\n\r\nDocumentContext.prototype.beginColumn = function (width, offset, endingCell) {\r\n\tvar saved = this.snapshots[this.snapshots.length - 1];\r\n\r\n\tthis.calculateBottomMost(saved);\r\n\r\n\tthis.endingCell = endingCell;\r\n\tthis.page = saved.page;\r\n\tthis.x = this.x + this.lastColumnWidth + (offset || 0);\r\n\tthis.y = saved.y;\r\n\tthis.availableWidth = width;\t//saved.availableWidth - offset;\r\n\tthis.availableHeight = saved.availableHeight;\r\n\r\n\tthis.lastColumnWidth = width;\r\n};\r\n\r\nDocumentContext.prototype.calculateBottomMost = function (destContext) {\r\n\tif (this.endingCell) {\r\n\t\tthis.saveContextInEndingCell(this.endingCell);\r\n\t\tthis.endingCell = null;\r\n\t} else {\r\n\t\tdestContext.bottomMost = bottomMostContext(this, destContext.bottomMost);\r\n\t}\r\n};\r\n\r\nDocumentContext.prototype.markEnding = function (endingCell) {\r\n\tthis.page = endingCell._columnEndingContext.page;\r\n\tthis.x = endingCell._columnEndingContext.x;\r\n\tthis.y = endingCell._columnEndingContext.y;\r\n\tthis.availableWidth = endingCell._columnEndingContext.availableWidth;\r\n\tthis.availableHeight = endingCell._columnEndingContext.availableHeight;\r\n\tthis.lastColumnWidth = endingCell._columnEndingContext.lastColumnWidth;\r\n};\r\n\r\nDocumentContext.prototype.saveContextInEndingCell = function (endingCell) {\r\n\tendingCell._columnEndingContext = {\r\n\t\tpage: this.page,\r\n\t\tx: this.x,\r\n\t\ty: this.y,\r\n\t\tavailableHeight: this.availableHeight,\r\n\t\tavailableWidth: this.availableWidth,\r\n\t\tlastColumnWidth: this.lastColumnWidth\r\n\t};\r\n};\r\n\r\nDocumentContext.prototype.completeColumnGroup = function (height) {\r\n\tvar saved = this.snapshots.pop();\r\n\r\n\tthis.calculateBottomMost(saved);\r\n\r\n\tthis.endingCell = null;\r\n\tthis.x = saved.x;\r\n\r\n\tvar y = saved.bottomMost.y;\r\n\tif (height) {\r\n\t\tif (saved.page === saved.bottomMost.page) {\r\n\t\t\tif ((saved.y + height) > y) {\r\n\t\t\t\ty = saved.y + height;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\ty += height;\r\n\t\t}\r\n\t}\r\n\r\n\tthis.y = y;\r\n\tthis.page = saved.bottomMost.page;\r\n\tthis.availableWidth = saved.availableWidth;\r\n\tthis.availableHeight = saved.bottomMost.availableHeight;\r\n\tif (height) {\r\n\t\tthis.availableHeight -= (y - saved.bottomMost.y);\r\n\t}\r\n\tthis.lastColumnWidth = saved.lastColumnWidth;\r\n};\r\n\r\nDocumentContext.prototype.addMargin = function (left, right) {\r\n\tthis.x += left;\r\n\tthis.availableWidth -= left + (right || 0);\r\n};\r\n\r\nDocumentContext.prototype.moveDown = function (offset) {\r\n\tthis.y += offset;\r\n\tthis.availableHeight -= offset;\r\n\r\n\treturn this.availableHeight > 0;\r\n};\r\n\r\nDocumentContext.prototype.initializePage = function () {\r\n\tthis.y = this.pageMargins.top;\r\n\tthis.availableHeight = this.getCurrentPage().pageSize.height - this.pageMargins.top - this.pageMargins.bottom;\r\n\tthis.pageSnapshot().availableWidth = this.getCurrentPage().pageSize.width - this.pageMargins.left - this.pageMargins.right;\r\n};\r\n\r\nDocumentContext.prototype.pageSnapshot = function () {\r\n\tif (this.snapshots[0]) {\r\n\t\treturn this.snapshots[0];\r\n\t} else {\r\n\t\treturn this;\r\n\t}\r\n};\r\n\r\nDocumentContext.prototype.moveTo = function (x, y) {\r\n\tif (x !== undefined && x !== null) {\r\n\t\tthis.x = x;\r\n\t\tthis.availableWidth = this.getCurrentPage().pageSize.width - this.x - this.pageMargins.right;\r\n\t}\r\n\tif (y !== undefined && y !== null) {\r\n\t\tthis.y = y;\r\n\t\tthis.availableHeight = this.getCurrentPage().pageSize.height - this.y - this.pageMargins.bottom;\r\n\t}\r\n};\r\n\r\nDocumentContext.prototype.moveToRelative = function (x, y) {\r\n\tif (x !== undefined && x !== null) {\r\n\t\tthis.x = this.x + x;\r\n\t}\r\n\tif (y !== undefined && y !== null) {\r\n\t\tthis.y = this.y + y;\r\n\t}\r\n};\r\n\r\nDocumentContext.prototype.beginDetachedBlock = function () {\r\n\tthis.snapshots.push({\r\n\t\tx: this.x,\r\n\t\ty: this.y,\r\n\t\tavailableHeight: this.availableHeight,\r\n\t\tavailableWidth: this.availableWidth,\r\n\t\tpage: this.page,\r\n\t\tendingCell: this.endingCell,\r\n\t\tlastColumnWidth: this.lastColumnWidth\r\n\t});\r\n};\r\n\r\nDocumentContext.prototype.endDetachedBlock = function () {\r\n\tvar saved = this.snapshots.pop();\r\n\r\n\tthis.x = saved.x;\r\n\tthis.y = saved.y;\r\n\tthis.availableWidth = saved.availableWidth;\r\n\tthis.availableHeight = saved.availableHeight;\r\n\tthis.page = saved.page;\r\n\tthis.endingCell = saved.endingCell;\r\n\tthis.lastColumnWidth = saved.lastColumnWidth;\r\n};\r\n\r\nfunction pageOrientation(pageOrientationString, currentPageOrientation) {\r\n\tif (pageOrientationString === undefined) {\r\n\t\treturn currentPageOrientation;\r\n\t} else if (isString(pageOrientationString) && (pageOrientationString.toLowerCase() === 'landscape')) {\r\n\t\treturn 'landscape';\r\n\t} else {\r\n\t\treturn 'portrait';\r\n\t}\r\n}\r\n\r\nvar getPageSize = function (currentPage, newPageOrientation) {\r\n\r\n\tnewPageOrientation = pageOrientation(newPageOrientation, currentPage.pageSize.orientation);\r\n\r\n\tif (newPageOrientation !== currentPage.pageSize.orientation) {\r\n\t\treturn {\r\n\t\t\torientation: newPageOrientation,\r\n\t\t\twidth: currentPage.pageSize.height,\r\n\t\t\theight: currentPage.pageSize.width\r\n\t\t};\r\n\t} else {\r\n\t\treturn {\r\n\t\t\torientation: currentPage.pageSize.orientation,\r\n\t\t\twidth: currentPage.pageSize.width,\r\n\t\t\theight: currentPage.pageSize.height\r\n\t\t};\r\n\t}\r\n\r\n};\r\n\r\n\r\nDocumentContext.prototype.moveToNextPage = function (pageOrientation) {\r\n\tvar nextPageIndex = this.page + 1;\r\n\r\n\tvar prevPage = this.page;\r\n\tvar prevY = this.y;\r\n\r\n\tvar createNewPage = nextPageIndex >= this.pages.length;\r\n\tif (createNewPage) {\r\n\t\tvar currentAvailableWidth = this.availableWidth;\r\n\t\tvar currentPageOrientation = this.getCurrentPage().pageSize.orientation;\r\n\r\n\t\tvar pageSize = getPageSize(this.getCurrentPage(), pageOrientation);\r\n\t\tthis.addPage(pageSize);\r\n\r\n\t\tif (currentPageOrientation === pageSize.orientation) {\r\n\t\t\tthis.availableWidth = currentAvailableWidth;\r\n\t\t}\r\n\t} else {\r\n\t\tthis.page = nextPageIndex;\r\n\t\tthis.initializePage();\r\n\t}\r\n\r\n\treturn {\r\n\t\tnewPageCreated: createNewPage,\r\n\t\tprevPage: prevPage,\r\n\t\tprevY: prevY,\r\n\t\ty: this.y\r\n\t};\r\n};\r\n\r\n\r\nDocumentContext.prototype.addPage = function (pageSize) {\r\n\tvar page = { items: [], pageSize: pageSize };\r\n\tthis.pages.push(page);\r\n\tthis.backgroundLength.push(0);\r\n\tthis.page = this.pages.length - 1;\r\n\tthis.initializePage();\r\n\r\n\tthis.tracker.emit('pageAdded');\r\n\r\n\treturn page;\r\n};\r\n\r\nDocumentContext.prototype.getCurrentPage = function () {\r\n\tif (this.page < 0 || this.page >= this.pages.length) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn this.pages[this.page];\r\n};\r\n\r\nDocumentContext.prototype.getCurrentPosition = function () {\r\n\tvar pageSize = this.getCurrentPage().pageSize;\r\n\tvar innerHeight = pageSize.height - this.pageMargins.top - this.pageMargins.bottom;\r\n\tvar innerWidth = pageSize.width - this.pageMargins.left - this.pageMargins.right;\r\n\r\n\treturn {\r\n\t\tpageNumber: this.page + 1,\r\n\t\tpageOrientation: pageSize.orientation,\r\n\t\tpageInnerHeight: innerHeight,\r\n\t\tpageInnerWidth: innerWidth,\r\n\t\tleft: this.x,\r\n\t\ttop: this.y,\r\n\t\tverticalRatio: ((this.y - this.pageMargins.top) / innerHeight),\r\n\t\thorizontalRatio: ((this.x - this.pageMargins.left) / innerWidth)\r\n\t};\r\n};\r\n\r\nfunction bottomMostContext(c1, c2) {\r\n\tvar r;\r\n\r\n\tif (c1.page > c2.page) {\r\n\t\tr = c1;\r\n\t} else if (c2.page > c1.page) {\r\n\t\tr = c2;\r\n\t} else {\r\n\t\tr = (c1.y > c2.y) ? c1 : c2;\r\n\t}\r\n\r\n\treturn {\r\n\t\tpage: r.page,\r\n\t\tx: r.x,\r\n\t\ty: r.y,\r\n\t\tavailableHeight: r.availableHeight,\r\n\t\tavailableWidth: r.availableWidth\r\n\t};\r\n}\r\n\r\nmodule.exports = DocumentContext;\r\n","'use strict';\r\n\r\nvar Line = require('./line');\r\nvar isNumber = require('./helpers').isNumber;\r\nvar pack = require('./helpers').pack;\r\nvar offsetVector = require('./helpers').offsetVector;\r\nvar DocumentContext = require('./documentContext');\r\n\r\n/**\r\n * Creates an instance of ElementWriter - a line/vector writer, which adds\r\n * elements to current page and sets their positions based on the context\r\n */\r\nfunction ElementWriter(context, tracker) {\r\n\tthis.context = context;\r\n\tthis.contextStack = [];\r\n\tthis.tracker = tracker;\r\n}\r\n\r\nfunction addPageItem(page, item, index) {\r\n\tif (index === null || index === undefined || index < 0 || index > page.items.length) {\r\n\t\tpage.items.push(item);\r\n\t} else {\r\n\t\tpage.items.splice(index, 0, item);\r\n\t}\r\n}\r\n\r\nElementWriter.prototype.addLine = function (line, dontUpdateContextPosition, index) {\r\n\tvar height = line.getHeight();\r\n\tvar context = this.context;\r\n\tvar page = context.getCurrentPage(),\r\n\t\tposition = this.getCurrentPositionOnPage();\r\n\r\n\tif (context.availableHeight < height || !page) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tline.x = context.x + (line.x || 0);\r\n\tline.y = context.y + (line.y || 0);\r\n\r\n\tthis.alignLine(line);\r\n\r\n\taddPageItem(page, {\r\n\t\ttype: 'line',\r\n\t\titem: line\r\n\t}, index);\r\n\tthis.tracker.emit('lineAdded', line);\r\n\r\n\tif (!dontUpdateContextPosition) {\r\n\t\tcontext.moveDown(height);\r\n\t}\r\n\r\n\treturn position;\r\n};\r\n\r\nElementWriter.prototype.alignLine = function (line) {\r\n\tvar width = this.context.availableWidth;\r\n\tvar lineWidth = line.getWidth();\r\n\r\n\tvar alignment = line.inlines && line.inlines.length > 0 && line.inlines[0].alignment;\r\n\r\n\tvar offset = 0;\r\n\tswitch (alignment) {\r\n\t\tcase 'right':\r\n\t\t\toffset = width - lineWidth;\r\n\t\t\tbreak;\r\n\t\tcase 'center':\r\n\t\t\toffset = (width - lineWidth) / 2;\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\tif (offset) {\r\n\t\tline.x = (line.x || 0) + offset;\r\n\t}\r\n\r\n\tif (alignment === 'justify' &&\r\n\t\t!line.newLineForced &&\r\n\t\t!line.lastLineInParagraph &&\r\n\t\tline.inlines.length > 1) {\r\n\t\tvar additionalSpacing = (width - lineWidth) / (line.inlines.length - 1);\r\n\r\n\t\tfor (var i = 1, l = line.inlines.length; i < l; i++) {\r\n\t\t\toffset = i * additionalSpacing;\r\n\r\n\t\t\tline.inlines[i].x += offset;\r\n\t\t\tline.inlines[i].justifyShift = additionalSpacing;\r\n\t\t}\r\n\t}\r\n};\r\n\r\nElementWriter.prototype.addImage = function (image, index, type) {\r\n\tvar context = this.context;\r\n\tvar page = context.getCurrentPage(),\r\n\t\tposition = this.getCurrentPositionOnPage();\r\n\r\n\tif (!page || (image.absolutePosition === undefined && context.availableHeight < image._height && page.items.length > 0)) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tif (image._x === undefined) {\r\n\t\timage._x = image.x || 0;\r\n\t}\r\n\r\n\timage.x = context.x + image._x;\r\n\timage.y = context.y;\r\n\r\n\tthis.alignImage(image);\r\n\r\n\taddPageItem(page, {\r\n\t\ttype: type || 'image',\r\n\t\titem: image\r\n\t}, index);\r\n\r\n\tcontext.moveDown(image._height);\r\n\r\n\treturn position;\r\n};\r\n\r\nElementWriter.prototype.addSVG = function (image, index) {\r\n\treturn this.addImage(image, index, 'svg')\r\n};\r\n\r\nElementWriter.prototype.addQr = function (qr, index) {\r\n\tvar context = this.context;\r\n\tvar page = context.getCurrentPage(),\r\n\t\tposition = this.getCurrentPositionOnPage();\r\n\r\n\tif (!page || (qr.absolutePosition === undefined && context.availableHeight < qr._height)) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tif (qr._x === undefined) {\r\n\t\tqr._x = qr.x || 0;\r\n\t}\r\n\r\n\tqr.x = context.x + qr._x;\r\n\tqr.y = context.y;\r\n\r\n\tthis.alignImage(qr);\r\n\r\n\tfor (var i = 0, l = qr._canvas.length; i < l; i++) {\r\n\t\tvar vector = qr._canvas[i];\r\n\t\tvector.x += qr.x;\r\n\t\tvector.y += qr.y;\r\n\t\tthis.addVector(vector, true, true, index);\r\n\t}\r\n\r\n\tcontext.moveDown(qr._height);\r\n\r\n\treturn position;\r\n};\r\n\r\nElementWriter.prototype.alignImage = function (image) {\r\n\tvar width = this.context.availableWidth;\r\n\tvar imageWidth = image._minWidth;\r\n\tvar offset = 0;\r\n\tswitch (image._alignment) {\r\n\t\tcase 'right':\r\n\t\t\toffset = width - imageWidth;\r\n\t\t\tbreak;\r\n\t\tcase 'center':\r\n\t\t\toffset = (width - imageWidth) / 2;\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\tif (offset) {\r\n\t\timage.x = (image.x || 0) + offset;\r\n\t}\r\n};\r\n\r\nElementWriter.prototype.alignCanvas = function (node) {\r\n\tvar width = this.context.availableWidth;\r\n\tvar canvasWidth = node._minWidth;\r\n\tvar offset = 0;\r\n\tswitch (node._alignment) {\r\n\t\tcase 'right':\r\n\t\t\toffset = width - canvasWidth;\r\n\t\t\tbreak;\r\n\t\tcase 'center':\r\n\t\t\toffset = (width - canvasWidth) / 2;\r\n\t\t\tbreak;\r\n\t}\r\n\tif (offset) {\r\n\t\tnode.canvas.forEach(function (vector) {\r\n\t\t\toffsetVector(vector, offset, 0);\r\n\t\t});\r\n\t}\r\n};\r\n\r\nElementWriter.prototype.addVector = function (vector, ignoreContextX, ignoreContextY, index) {\r\n\tvar context = this.context;\r\n\tvar page = context.getCurrentPage(),\r\n\t\tposition = this.getCurrentPositionOnPage();\r\n\r\n\tif (page) {\r\n\t\toffsetVector(vector, ignoreContextX ? 0 : context.x, ignoreContextY ? 0 : context.y);\r\n\t\taddPageItem(page, {\r\n\t\t\ttype: 'vector',\r\n\t\t\titem: vector\r\n\t\t}, index);\r\n\t\treturn position;\r\n\t}\r\n};\r\n\r\nElementWriter.prototype.beginClip = function (width, height) {\r\n\tvar ctx = this.context;\r\n\tvar page = ctx.getCurrentPage();\r\n\tpage.items.push({\r\n\t\ttype: 'beginClip',\r\n\t\titem: { x: ctx.x, y: ctx.y, width: width, height: height }\r\n\t});\r\n\treturn true;\r\n};\r\n\r\nElementWriter.prototype.endClip = function () {\r\n\tvar ctx = this.context;\r\n\tvar page = ctx.getCurrentPage();\r\n\tpage.items.push({\r\n\t\ttype: 'endClip'\r\n\t});\r\n\treturn true;\r\n};\r\n\r\nfunction cloneLine(line) {\r\n\tvar result = new Line(line.maxWidth);\r\n\r\n\tfor (var key in line) {\r\n\t\tif (line.hasOwnProperty(key)) {\r\n\t\t\tresult[key] = line[key];\r\n\t\t}\r\n\t}\r\n\r\n\treturn result;\r\n}\r\n\r\nElementWriter.prototype.addFragment = function (block, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition) {\r\n\tvar ctx = this.context;\r\n\tvar page = ctx.getCurrentPage();\r\n\r\n\tif (!useBlockXOffset && block.height > ctx.availableHeight) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tblock.items.forEach(function (item) {\r\n\t\tswitch (item.type) {\r\n\t\t\tcase 'line':\r\n\t\t\t\tvar l = cloneLine(item.item);\r\n\r\n\t\t\t\tif (l._node) {\r\n\t\t\t\t\tl._node.positions[0].pageNumber = ctx.page + 1;\r\n\t\t\t\t}\r\n\t\t\t\tl.x = (l.x || 0) + (useBlockXOffset ? (block.xOffset || 0) : ctx.x);\r\n\t\t\t\tl.y = (l.y || 0) + (useBlockYOffset ? (block.yOffset || 0) : ctx.y);\r\n\r\n\t\t\t\tpage.items.push({\r\n\t\t\t\t\ttype: 'line',\r\n\t\t\t\t\titem: l\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'vector':\r\n\t\t\t\tvar v = pack(item.item);\r\n\r\n\t\t\t\toffsetVector(v, useBlockXOffset ? (block.xOffset || 0) : ctx.x, useBlockYOffset ? (block.yOffset || 0) : ctx.y);\r\n\t\t\t\tpage.items.push({\r\n\t\t\t\t\ttype: 'vector',\r\n\t\t\t\t\titem: v\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'image':\r\n\t\t\tcase 'svg':\r\n\t\t\t\tvar img = pack(item.item);\r\n\r\n\t\t\t\timg.x = (img.x || 0) + (useBlockXOffset ? (block.xOffset || 0) : ctx.x);\r\n\t\t\t\timg.y = (img.y || 0) + (useBlockYOffset ? (block.yOffset || 0) : ctx.y);\r\n\r\n\t\t\t\tpage.items.push({\r\n\t\t\t\t\ttype: item.type,\r\n\t\t\t\t\titem: img\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif (!dontUpdateContextPosition) {\r\n\t\tctx.moveDown(block.height);\r\n\t}\r\n\r\n\treturn true;\r\n};\r\n\r\n/**\r\n * Pushes the provided context onto the stack or creates a new one\r\n *\r\n * pushContext(context) - pushes the provided context and makes it current\r\n * pushContext(width, height) - creates and pushes a new context with the specified width and height\r\n * pushContext() - creates a new context for unbreakable blocks (with current availableWidth and full-page-height)\r\n */\r\nElementWriter.prototype.pushContext = function (contextOrWidth, height) {\r\n\tif (contextOrWidth === undefined) {\r\n\t\theight = this.context.getCurrentPage().height - this.context.pageMargins.top - this.context.pageMargins.bottom;\r\n\t\tcontextOrWidth = this.context.availableWidth;\r\n\t}\r\n\r\n\tif (isNumber(contextOrWidth)) {\r\n\t\tcontextOrWidth = new DocumentContext({ width: contextOrWidth, height: height }, { left: 0, right: 0, top: 0, bottom: 0 });\r\n\t}\r\n\r\n\tthis.contextStack.push(this.context);\r\n\tthis.context = contextOrWidth;\r\n};\r\n\r\nElementWriter.prototype.popContext = function () {\r\n\tthis.context = this.contextStack.pop();\r\n};\r\n\r\nElementWriter.prototype.getCurrentPositionOnPage = function () {\r\n\treturn (this.contextStack[0] || this.context).getCurrentPosition();\r\n};\r\n\r\n\r\nmodule.exports = ElementWriter;\r\n","'use strict';\r\n\r\nvar isArray = require('./helpers').isArray;\r\n\r\nfunction typeName(bold, italics) {\r\n\tvar type = 'normal';\r\n\tif (bold && italics) {\r\n\t\ttype = 'bolditalics';\r\n\t} else if (bold) {\r\n\t\ttype = 'bold';\r\n\t} else if (italics) {\r\n\t\ttype = 'italics';\r\n\t}\r\n\treturn type;\r\n}\r\n\r\nfunction FontProvider(fontDescriptors, pdfKitDoc) {\r\n\tthis.fonts = {};\r\n\tthis.pdfKitDoc = pdfKitDoc;\r\n\tthis.fontCache = {};\r\n\r\n\tfor (var font in fontDescriptors) {\r\n\t\tif (fontDescriptors.hasOwnProperty(font)) {\r\n\t\t\tvar fontDef = fontDescriptors[font];\r\n\r\n\t\t\tthis.fonts[font] = {\r\n\t\t\t\tnormal: fontDef.normal,\r\n\t\t\t\tbold: fontDef.bold,\r\n\t\t\t\titalics: fontDef.italics,\r\n\t\t\t\tbolditalics: fontDef.bolditalics\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n}\r\n\r\nFontProvider.prototype.getFontType = function (bold, italics) {\r\n\treturn typeName(bold, italics);\r\n}\r\n\r\nFontProvider.prototype.getFontFile = function (familyName, bold, italics) {\r\n\tvar type = this.getFontType(bold, italics);\r\n\tif (!this.fonts[familyName] || !this.fonts[familyName][type]) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn this.fonts[familyName][type];\r\n}\r\n\r\nFontProvider.prototype.provideFont = function (familyName, bold, italics) {\r\n\tvar type = this.getFontType(bold, italics);\r\n\tif (this.getFontFile(familyName, bold, italics) === null) {\r\n\t\tthrow new Error('Font \\'' + familyName + '\\' in style \\'' + type + '\\' is not defined in the font section of the document definition.');\r\n\t}\r\n\r\n\tthis.fontCache[familyName] = this.fontCache[familyName] || {};\r\n\r\n\tif (!this.fontCache[familyName][type]) {\r\n\t\tvar def = this.fonts[familyName][type];\r\n\t\tif (!isArray(def)) {\r\n\t\t\tdef = [def];\r\n\t\t}\r\n\t\tthis.fontCache[familyName][type] = this.pdfKitDoc.font.apply(this.pdfKitDoc, def)._font;\r\n\t}\r\n\r\n\treturn this.fontCache[familyName][type];\r\n};\r\n\r\nmodule.exports = FontProvider;\r\n","'use strict';\r\n\r\nfunction isString(variable) {\r\n\treturn typeof variable === 'string' || variable instanceof String;\r\n}\r\n\r\nfunction isNumber(variable) {\r\n\treturn typeof variable === 'number' || variable instanceof Number;\r\n}\r\n\r\nfunction isBoolean(variable) {\r\n\treturn typeof variable === 'boolean';\r\n}\r\n\r\nfunction isArray(variable) {\r\n\treturn Array.isArray(variable);\r\n}\r\n\r\nfunction isFunction(variable) {\r\n\treturn typeof variable === 'function';\r\n}\r\n\r\nfunction isObject(variable) {\r\n\treturn variable !== null && typeof variable === 'object';\r\n}\r\n\r\nfunction isNull(variable) {\r\n\treturn variable === null;\r\n}\r\n\r\nfunction isUndefined(variable) {\r\n\treturn variable === undefined;\r\n}\r\n\r\nfunction pack() {\r\n\tvar result = {};\r\n\r\n\tfor (var i = 0, l = arguments.length; i < l; i++) {\r\n\t\tvar obj = arguments[i];\r\n\r\n\t\tif (obj) {\r\n\t\t\tfor (var key in obj) {\r\n\t\t\t\tif (obj.hasOwnProperty(key)) {\r\n\t\t\t\t\tresult[key] = obj[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn result;\r\n}\r\n\r\nfunction offsetVector(vector, x, y) {\r\n\tswitch (vector.type) {\r\n\t\tcase 'ellipse':\r\n\t\tcase 'rect':\r\n\t\t\tvector.x += x;\r\n\t\t\tvector.y += y;\r\n\t\t\tbreak;\r\n\t\tcase 'line':\r\n\t\t\tvector.x1 += x;\r\n\t\t\tvector.x2 += x;\r\n\t\t\tvector.y1 += y;\r\n\t\t\tvector.y2 += y;\r\n\t\t\tbreak;\r\n\t\tcase 'polyline':\r\n\t\t\tfor (var i = 0, l = vector.points.length; i < l; i++) {\r\n\t\t\t\tvector.points[i].x += x;\r\n\t\t\t\tvector.points[i].y += y;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t}\r\n}\r\n\r\nfunction fontStringify(key, val) {\r\n\tif (key === 'font') {\r\n\t\treturn 'font';\r\n\t}\r\n\treturn val;\r\n}\r\n\r\nfunction getNodeId(node) {\r\n\tif (node.id) {\r\n\t\treturn node.id;\r\n\t}\r\n\r\n\tif (isArray(node.text)) {\r\n\t\tfor (var i = 0, l = node.text.length; i < l; i++) {\r\n\t\t\tvar n = node.text[i];\r\n\t\t\tvar nodeId = getNodeId(n);\r\n\t\t\tif (nodeId) {\r\n\t\t\t\treturn nodeId;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn null;\r\n}\r\n\r\nfunction isPattern(color) {\r\n\treturn isArray(color) && color.length === 2;\r\n}\r\n\r\n// converts from a [<pattern name>, <color>] as used by pdfmake\r\n// into [<pattern object>, <color>] as used by pdfkit\r\n// (the pattern has to be registered in the doc definition of course)\r\nfunction getPattern(color, patterns) {\r\n\treturn [patterns[color[0]], color[1]];\r\n}\r\n\r\nmodule.exports = {\r\n\tisString: isString,\r\n\tisNumber: isNumber,\r\n\tisBoolean: isBoolean,\r\n\tisArray: isArray,\r\n\tisFunction: isFunction,\r\n\tisObject: isObject,\r\n\tisNull: isNull,\r\n\tisUndefined: isUndefined,\r\n\tpack: pack,\r\n\tfontStringify: fontStringify,\r\n\toffsetVector: offsetVector,\r\n\tgetNodeId: getNodeId,\r\n\tisPattern: isPattern,\r\n\tgetPattern: getPattern\r\n};\r\n","'use strict';\r\n\r\nvar fs = require('fs');\r\n\r\nfunction ImageMeasure(pdfKitDoc, imageDictionary) {\r\n\tthis.pdfKitDoc = pdfKitDoc;\r\n\tthis.imageDictionary = imageDictionary || {};\r\n}\r\n\r\nImageMeasure.prototype.measureImage = function (src) {\r\n\tvar image;\r\n\tvar that = this;\r\n\r\n\tif (!this.pdfKitDoc._imageRegistry[src]) {\r\n\t\ttry {\r\n\t\t\timage = this.pdfKitDoc.openImage(realImageSrc(src));\r\n\t\t\tif (!image) {\r\n\t\t\t\tthrow 'No image';\r\n\t\t\t}\r\n\t\t} catch (error) {\r\n\t\t\tthrow 'Invalid image: ' + error.toString() + '\\nImages dictionary should contain dataURL entries (or local file paths in node.js)';\r\n\t\t}\r\n\t\timage.embed(this.pdfKitDoc);\r\n\t\tthis.pdfKitDoc._imageRegistry[src] = image;\r\n\t} else {\r\n\t\timage = this.pdfKitDoc._imageRegistry[src];\r\n\t}\r\n\r\n\treturn { width: image.width, height: image.height };\r\n\r\n\tfunction realImageSrc(src) {\r\n\t\tvar img = that.imageDictionary[src];\r\n\r\n\t\tif (!img) {\r\n\t\t\treturn src;\r\n\t\t}\r\n\r\n\t\tif (fs.existsSync(img)) {\r\n\t\t\treturn fs.readFileSync(img);\r\n\t\t}\r\n\r\n\t\tvar index = img.indexOf('base64,');\r\n\t\tif (index < 0) {\r\n\t\t\treturn that.imageDictionary[src];\r\n\t\t}\r\n\r\n\t\treturn Buffer.from(img.substring(index + 7), 'base64');\r\n\t}\r\n};\r\n\r\nmodule.exports = ImageMeasure;\r\n","'use strict';\r\n\r\nvar TraversalTracker = require('./traversalTracker');\r\nvar DocPreprocessor = require('./docPreprocessor');\r\nvar DocMeasure = require('./docMeasure');\r\nvar DocumentContext = require('./documentContext');\r\nvar PageElementWriter = require('./pageElementWriter');\r\nvar ColumnCalculator = require('./columnCalculator');\r\nvar TableProcessor = require('./tableProcessor');\r\nvar Line = require('./line');\r\nvar isString = require('./helpers').isString;\r\nvar isArray = require('./helpers').isArray;\r\nvar isUndefined = require('./helpers').isUndefined;\r\nvar isNull = require('./helpers').isNull;\r\nvar pack = require('./helpers').pack;\r\nvar offsetVector = require('./helpers').offsetVector;\r\nvar fontStringify = require('./helpers').fontStringify;\r\nvar getNodeId = require('./helpers').getNodeId;\r\nvar isFunction = require('./helpers').isFunction;\r\nvar TextTools = require('./textTools');\r\nvar StyleContextStack = require('./styleContextStack');\r\nvar isNumber = require('./helpers').isNumber;\r\n\r\nfunction addAll(target, otherArray) {\r\n\totherArray.forEach(function (item) {\r\n\t\ttarget.push(item);\r\n\t});\r\n}\r\n\r\n/**\r\n * Creates an instance of LayoutBuilder - layout engine which turns document-definition-object\r\n * into a set of pages, lines, inlines and vectors ready to be rendered into a PDF\r\n *\r\n * @param {Object} pageSize - an object defining page width and height\r\n * @param {Object} pageMargins - an object defining top, left, right and bottom margins\r\n */\r\nfunction LayoutBuilder(pageSize, pageMargins, imageMeasure, svgMeasure) {\r\n\tthis.pageSize = pageSize;\r\n\tthis.pageMargins = pageMargins;\r\n\tthis.tracker = new TraversalTracker();\r\n\tthis.imageMeasure = imageMeasure;\r\n\tthis.svgMeasure = svgMeasure;\r\n\tthis.tableLayouts = {};\r\n}\r\n\r\nLayoutBuilder.prototype.registerTableLayouts = function (tableLayouts) {\r\n\tthis.tableLayouts = pack(this.tableLayouts, tableLayouts);\r\n};\r\n\r\n/**\r\n * Executes layout engine on document-definition-object and creates an array of pages\r\n * containing positioned Blocks, Lines and inlines\r\n *\r\n * @param {Object} docStructure document-definition-object\r\n * @param {Object} fontProvider font provider\r\n * @param {Object} styleDictionary dictionary with style definitions\r\n * @param {Object} defaultStyle default style definition\r\n * @return {Array} an array of pages\r\n */\r\nLayoutBuilder.prototype.layoutDocument = function (docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark, pageBreakBeforeFct) {\r\n\r\n\tfunction addPageBreaksIfNecessary(linearNodeList, pages) {\r\n\r\n\t\tif (!isFunction(pageBreakBeforeFct)) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tlinearNodeList = linearNodeList.filter(function (node) {\r\n\t\t\treturn node.positions.length > 0;\r\n\t\t});\r\n\r\n\t\tlinearNodeList.forEach(function (node) {\r\n\t\t\tvar nodeInfo = {};\r\n\t\t\t[\r\n\t\t\t\t'id', 'text', 'ul', 'ol', 'table', 'image', 'qr', 'canvas', 'svg', 'columns',\r\n\t\t\t\t'headlineLevel', 'style', 'pageBreak', 'pageOrientation',\r\n\t\t\t\t'width', 'height'\r\n\t\t\t].forEach(function (key) {\r\n\t\t\t\tif (node[key] !== undefined) {\r\n\t\t\t\t\tnodeInfo[key] = node[key];\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tnodeInfo.startPosition = node.positions[0];\r\n\t\t\tnodeInfo.pageNumbers = Array.from(new Set(node.positions.map(function (node) { return node.pageNumber; })));\r\n\t\t\tnodeInfo.pages = pages.length;\r\n\t\t\tnodeInfo.stack = isArray(node.stack);\r\n\r\n\t\t\tnode.nodeInfo = nodeInfo;\r\n\t\t});\r\n\r\n\t\tfor (var index = 0; index < linearNodeList.length; index++) {\r\n\t\t\tvar node = linearNodeList[index];\r\n\t\t\tif (node.pageBreak !== 'before' && !node.pageBreakCalculated) {\r\n\t\t\t\tnode.pageBreakCalculated = true;\r\n\t\t\t\tvar pageNumber = node.nodeInfo.pageNumbers[0];\r\n\t\t\t\tvar followingNodesOnPage = [];\r\n\t\t\t\tvar nodesOnNextPage = [];\r\n\t\t\t\tvar previousNodesOnPage = [];\r\n\t\t\t\tif (pageBreakBeforeFct.length > 1) {\r\n\t\t\t\t\tfor (var ii = index + 1, l = linearNodeList.length; ii < l; ii++) {\r\n\t\t\t\t\t\tif (linearNodeList[ii].nodeInfo.pageNumbers.indexOf(pageNumber) > -1) {\r\n\t\t\t\t\t\t\tfollowingNodesOnPage.push(linearNodeList[ii].nodeInfo);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (pageBreakBeforeFct.length > 2 && linearNodeList[ii].nodeInfo.pageNumbers.indexOf(pageNumber + 1) > -1) {\r\n\t\t\t\t\t\t\tnodesOnNextPage.push(linearNodeList[ii].nodeInfo);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (pageBreakBeforeFct.length > 3) {\r\n\t\t\t\t\tfor (var ii = 0; ii < index; ii++) {\r\n\t\t\t\t\t\tif (linearNodeList[ii].nodeInfo.pageNumbers.indexOf(pageNumber) > -1) {\r\n\t\t\t\t\t\t\tpreviousNodesOnPage.push(linearNodeList[ii].nodeInfo);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (pageBreakBeforeFct(node.nodeInfo, followingNodesOnPage, nodesOnNextPage, previousNodesOnPage)) {\r\n\t\t\t\t\tnode.pageBreak = 'before';\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tthis.docPreprocessor = new DocPreprocessor();\r\n\tthis.docMeasure = new DocMeasure(fontProvider, styleDictionary, defaultStyle, this.imageMeasure, this.svgMeasure, this.tableLayouts, images);\r\n\r\n\r\n\tfunction resetXYs(result) {\r\n\t\tresult.linearNodeList.forEach(function (node) {\r\n\t\t\tnode.resetXY();\r\n\t\t});\r\n\t}\r\n\r\n\tvar result = this.tryLayoutDocument(docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark);\r\n\twhile (addPageBreaksIfNecessary(result.linearNodeList, result.pages)) {\r\n\t\tresetXYs(result);\r\n\t\tresult = this.tryLayoutDocument(docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark);\r\n\t}\r\n\r\n\treturn result.pages;\r\n};\r\n\r\nLayoutBuilder.prototype.tryLayoutDocument = function (docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark, pageBreakBeforeFct) {\r\n\r\n\tthis.linearNodeList = [];\r\n\tdocStructure = this.docPreprocessor.preprocessDocument(docStructure);\r\n\tdocStructure = this.docMeasure.measureDocument(docStructure);\r\n\r\n\tthis.writer = new PageElementWriter(\r\n\t\tnew DocumentContext(this.pageSize, this.pageMargins), this.tracker);\r\n\r\n\tvar _this = this;\r\n\tthis.writer.context().tracker.startTracking('pageAdded', function () {\r\n\t\t_this.addBackground(background);\r\n\t});\r\n\r\n\tthis.addBackground(background);\r\n\tthis.processNode(docStructure);\r\n\tthis.addHeadersAndFooters(header, footer);\r\n\tif (watermark != null) {\r\n\t\tthis.addWatermark(watermark, fontProvider, defaultStyle);\r\n\t}\r\n\r\n\treturn { pages: this.writer.context().pages, linearNodeList: this.linearNodeList };\r\n};\r\n\r\n\r\nLayoutBuilder.prototype.addBackground = function (background) {\r\n\tvar backgroundGetter = isFunction(background) ? background : function () {\r\n\t\treturn background;\r\n\t};\r\n\r\n\tvar context = this.writer.context();\r\n\tvar pageSize = context.getCurrentPage().pageSize;\r\n\r\n\tvar pageBackground = backgroundGetter(context.page + 1, pageSize);\r\n\r\n\tif (pageBackground) {\r\n\t\tthis.writer.beginUnbreakableBlock(pageSize.width, pageSize.height);\r\n\t\tpageBackground = this.docPreprocessor.preprocessDocument(pageBackground);\r\n\t\tthis.processNode(this.docMeasure.measureDocument(pageBackground));\r\n\t\tthis.writer.commitUnbreakableBlock(0, 0);\r\n\t\tcontext.backgroundLength[context.page] += pageBackground.positions.length;\r\n\t}\r\n};\r\n\r\nLayoutBuilder.prototype.addStaticRepeatable = function (headerOrFooter, sizeFunction) {\r\n\tthis.addDynamicRepeatable(function () {\r\n\t\treturn JSON.parse(JSON.stringify(headerOrFooter)); // copy to new object\r\n\t}, sizeFunction);\r\n};\r\n\r\nLayoutBuilder.prototype.addDynamicRepeatable = function (nodeGetter, sizeFunction) {\r\n\tvar pages = this.writer.context().pages;\r\n\r\n\tfor (var pageIndex = 0, l = pages.length; pageIndex < l; pageIndex++) {\r\n\t\tthis.writer.context().page = pageIndex;\r\n\r\n\t\tvar node = nodeGetter(pageIndex + 1, l, this.writer.context().pages[pageIndex].pageSize);\r\n\r\n\t\tif (node) {\r\n\t\t\tvar sizes = sizeFunction(this.writer.context().getCurrentPage().pageSize, this.pageMargins);\r\n\t\t\tthis.writer.beginUnbreakableBlock(sizes.width, sizes.height);\r\n\t\t\tnode = this.docPreprocessor.preprocessDocument(node);\r\n\t\t\tthis.processNode(this.docMeasure.measureDocument(node));\r\n\t\t\tthis.writer.commitUnbreakableBlock(sizes.x, sizes.y);\r\n\t\t}\r\n\t}\r\n};\r\n\r\nLayoutBuilder.prototype.addHeadersAndFooters = function (header, footer) {\r\n\tvar headerSizeFct = function (pageSize, pageMargins) {\r\n\t\treturn {\r\n\t\t\tx: 0,\r\n\t\t\ty: 0,\r\n\t\t\twidth: pageSize.width,\r\n\t\t\theight: pageMargins.top\r\n\t\t};\r\n\t};\r\n\r\n\tvar footerSizeFct = function (pageSize, pageMargins) {\r\n\t\treturn {\r\n\t\t\tx: 0,\r\n\t\t\ty: pageSize.height - pageMargins.bottom,\r\n\t\t\twidth: pageSize.width,\r\n\t\t\theight: pageMargins.bottom\r\n\t\t};\r\n\t};\r\n\r\n\tif (isFunction(header)) {\r\n\t\tthis.addDynamicRepeatable(header, headerSizeFct);\r\n\t} else if (header) {\r\n\t\tthis.addStaticRepeatable(header, headerSizeFct);\r\n\t}\r\n\r\n\tif (isFunction(footer)) {\r\n\t\tthis.addDynamicRepeatable(footer, footerSizeFct);\r\n\t} else if (footer) {\r\n\t\tthis.addStaticRepeatable(footer, footerSizeFct);\r\n\t}\r\n};\r\n\r\nLayoutBuilder.prototype.addWatermark = function (watermark, fontProvider, defaultStyle) {\r\n\tif (isString(watermark)) {\r\n\t\twatermark = { 'text': watermark };\r\n\t}\r\n\r\n\tif (!watermark.text) { // empty watermark text\r\n\t\treturn;\r\n\t}\r\n\r\n\twatermark.font = watermark.font || defaultStyle.font || 'Roboto';\r\n\twatermark.fontSize = watermark.fontSize || 'auto';\r\n\twatermark.color = watermark.color || 'black';\r\n\twatermark.opacity = isNumber(watermark.opacity) ? watermark.opacity : 0.6;\r\n\twatermark.bold = watermark.bold || false;\r\n\twatermark.italics = watermark.italics || false;\r\n\twatermark.angle = !isUndefined(watermark.angle) && !isNull(watermark.angle) ? watermark.angle : null;\r\n\r\n\tif (watermark.angle === null) {\r\n\t\twatermark.angle = Math.atan2(this.pageSize.height, this.pageSize.width) * -180 / Math.PI;\r\n\t}\r\n\r\n\tif (watermark.fontSize === 'auto') {\r\n\t\twatermark.fontSize = getWatermarkFontSize(this.pageSize, watermark, fontProvider);\r\n\t}\r\n\r\n\tvar watermarkObject = {\r\n\t\ttext: watermark.text,\r\n\t\tfont: fontProvider.provideFont(watermark.font, watermark.bold, watermark.italics),\r\n\t\tfontSize: watermark.fontSize,\r\n\t\tcolor: watermark.color,\r\n\t\topacity: watermark.opacity,\r\n\t\tangle: watermark.angle\r\n\t};\r\n\r\n\twatermarkObject._size = getWatermarkSize(watermark, fontProvider);\r\n\r\n\tvar pages = this.writer.context().pages;\r\n\tfor (var i = 0, l = pages.length; i < l; i++) {\r\n\t\tpages[i].watermark = watermarkObject;\r\n\t}\r\n\r\n\tfunction getWatermarkSize(watermark, fontProvider) {\r\n\t\tvar textTools = new TextTools(fontProvider);\r\n\t\tvar styleContextStack = new StyleContextStack(null, { font: watermark.font, bold: watermark.bold, italics: watermark.italics });\r\n\r\n\t\tstyleContextStack.push({\r\n\t\t\tfontSize: watermark.fontSize\r\n\t\t});\r\n\r\n\t\tvar size = textTools.sizeOfString(watermark.text, styleContextStack);\r\n\t\tvar rotatedSize = textTools.sizeOfRotatedText(watermark.text, watermark.angle, styleContextStack);\r\n\r\n\t\treturn { size: size, rotatedSize: rotatedSize };\r\n\t}\r\n\r\n\tfunction getWatermarkFontSize(pageSize, watermark, fontProvider) {\r\n\t\tvar textTools = new TextTools(fontProvider);\r\n\t\tvar styleContextStack = new StyleContextStack(null, { font: watermark.font, bold: watermark.bold, italics: watermark.italics });\r\n\t\tvar rotatedSize;\r\n\r\n\t\t/**\r\n\t\t * Binary search the best font size.\r\n\t\t * Initial bounds [0, 1000]\r\n\t\t * Break when range < 1\r\n\t\t */\r\n\t\tvar a = 0;\r\n\t\tvar b = 1000;\r\n\t\tvar c = (a + b) / 2;\r\n\t\twhile (Math.abs(a - b) > 1) {\r\n\t\t\tstyleContextStack.push({\r\n\t\t\t\tfontSize: c\r\n\t\t\t});\r\n\t\t\trotatedSize = textTools.sizeOfRotatedText(watermark.text, watermark.angle, styleContextStack);\r\n\t\t\tif (rotatedSize.width > pageSize.width) {\r\n\t\t\t\tb = c;\r\n\t\t\t\tc = (a + b) / 2;\r\n\t\t\t} else if (rotatedSize.width < pageSize.width) {\r\n\t\t\t\tif (rotatedSize.height > pageSize.height) {\r\n\t\t\t\t\tb = c;\r\n\t\t\t\t\tc = (a + b) / 2;\r\n\t\t\t\t} else {\r\n\t\t\t\t\ta = c;\r\n\t\t\t\t\tc = (a + b) / 2;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tstyleContextStack.pop();\r\n\t\t}\r\n\t\t/*\r\n\t\t End binary search\r\n\t\t */\r\n\t\treturn c;\r\n\t}\r\n};\r\n\r\nfunction decorateNode(node) {\r\n\tvar x = node.x, y = node.y;\r\n\tnode.positions = [];\r\n\r\n\tif (isArray(node.canvas)) {\r\n\t\tnode.canvas.forEach(function (vector) {\r\n\t\t\tvar x = vector.x, y = vector.y, x1 = vector.x1, y1 = vector.y1, x2 = vector.x2, y2 = vector.y2;\r\n\t\t\tvector.resetXY = function () {\r\n\t\t\t\tvector.x = x;\r\n\t\t\t\tvector.y = y;\r\n\t\t\t\tvector.x1 = x1;\r\n\t\t\t\tvector.y1 = y1;\r\n\t\t\t\tvector.x2 = x2;\r\n\t\t\t\tvector.y2 = y2;\r\n\t\t\t};\r\n\t\t});\r\n\t}\r\n\r\n\tnode.resetXY = function () {\r\n\t\tnode.x = x;\r\n\t\tnode.y = y;\r\n\t\tif (isArray(node.canvas)) {\r\n\t\t\tnode.canvas.forEach(function (vector) {\r\n\t\t\t\tvector.resetXY();\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n}\r\n\r\nLayoutBuilder.prototype.processNode = function (node) {\r\n\tvar self = this;\r\n\r\n\tthis.linearNodeList.push(node);\r\n\tdecorateNode(node);\r\n\r\n\tapplyMargins(function () {\r\n\t\tvar unbreakable = node.unbreakable;\r\n\t\tif (unbreakable) {\r\n\t\t\tself.writer.beginUnbreakableBlock();\r\n\t\t}\r\n\r\n\t\tvar absPosition = node.absolutePosition;\r\n\t\tif (absPosition) {\r\n\t\t\tself.writer.context().beginDetachedBlock();\r\n\t\t\tself.writer.context().moveTo(absPosition.x || 0, absPosition.y || 0);\r\n\t\t}\r\n\r\n\t\tvar relPosition = node.relativePosition;\r\n\t\tif (relPosition) {\r\n\t\t\tself.writer.context().beginDetachedBlock();\r\n\t\t\tself.writer.context().moveToRelative(relPosition.x || 0, relPosition.y || 0);\r\n\t\t}\r\n\r\n\t\tif (node.stack) {\r\n\t\t\tself.processVerticalContainer(node);\r\n\t\t} else if (node.columns) {\r\n\t\t\tself.processColumns(node);\r\n\t\t} else if (node.ul) {\r\n\t\t\tself.processList(false, node);\r\n\t\t} else if (node.ol) {\r\n\t\t\tself.processList(true, node);\r\n\t\t} else if (node.table) {\r\n\t\t\tself.processTable(node);\r\n\t\t} else if (node.text !== undefined) {\r\n\t\t\tself.processLeaf(node);\r\n\t\t} else if (node.toc) {\r\n\t\t\tself.processToc(node);\r\n\t\t} else if (node.image) {\r\n\t\t\tself.processImage(node);\r\n\t\t} else if (node.svg) {\r\n\t\t\tself.processSVG(node);\r\n\t\t} else if (node.canvas) {\r\n\t\t\tself.processCanvas(node);\r\n\t\t} else if (node.qr) {\r\n\t\t\tself.processQr(node);\r\n\t\t} else if (!node._span) {\r\n\t\t\tthrow 'Unrecognized document structure: ' + JSON.stringify(node, fontStringify);\r\n\t\t}\r\n\r\n\t\tif (absPosition || relPosition) {\r\n\t\t\tself.writer.context().endDetachedBlock();\r\n\t\t}\r\n\r\n\t\tif (unbreakable) {\r\n\t\t\tself.writer.commitUnbreakableBlock();\r\n\t\t}\r\n\t});\r\n\r\n\tfunction applyMargins(callback) {\r\n\t\tvar margin = node._margin;\r\n\r\n\t\tif (node.pageBreak === 'before') {\r\n\t\t\tself.writer.moveToNextPage(node.pageOrientation);\r\n\t\t} else if (node.pageBreak === 'beforeOdd') {\r\n\t\t\tself.writer.moveToNextPage(node.pageOrientation);\r\n\t\t\tif ((self.writer.context().page + 1) % 2 === 1) {\r\n\t\t\t\tself.writer.moveToNextPage(node.pageOrientation);\r\n\t\t\t}\r\n\t\t} else if (node.pageBreak === 'beforeEven') {\r\n\t\t\tself.writer.moveToNextPage(node.pageOrientation);\r\n\t\t\tif ((self.writer.context().page + 1) % 2 === 0) {\r\n\t\t\t\tself.writer.moveToNextPage(node.pageOrientation);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (margin) {\r\n\t\t\tself.writer.context().moveDown(margin[1]);\r\n\t\t\tself.writer.context().addMargin(margin[0], margin[2]);\r\n\t\t}\r\n\r\n\t\tcallback();\r\n\r\n\t\tif (margin) {\r\n\t\t\tself.writer.context().addMargin(-margin[0], -margin[2]);\r\n\t\t\tself.writer.context().moveDown(margin[3]);\r\n\t\t}\r\n\r\n\t\tif (node.pageBreak === 'after') {\r\n\t\t\tself.writer.moveToNextPage(node.pageOrientation);\r\n\t\t} else if (node.pageBreak === 'afterOdd') {\r\n\t\t\tself.writer.moveToNextPage(node.pageOrientation);\r\n\t\t\tif ((self.writer.context().page + 1) % 2 === 1) {\r\n\t\t\t\tself.writer.moveToNextPage(node.pageOrientation);\r\n\t\t\t}\r\n\t\t} else if (node.pageBreak === 'afterEven') {\r\n\t\t\tself.writer.moveToNextPage(node.pageOrientation);\r\n\t\t\tif ((self.writer.context().page + 1) % 2 === 0) {\r\n\t\t\t\tself.writer.moveToNextPage(node.pageOrientation);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\n// vertical container\r\nLayoutBuilder.prototype.processVerticalContainer = function (node) {\r\n\tvar self = this;\r\n\tnode.stack.forEach(function (item) {\r\n\t\tself.processNode(item);\r\n\t\taddAll(node.positions, item.positions);\r\n\r\n\t\t//TODO: paragraph gap\r\n\t});\r\n};\r\n\r\n// columns\r\nLayoutBuilder.prototype.processColumns = function (columnNode) {\r\n\tvar columns = columnNode.columns;\r\n\tvar availableWidth = this.writer.context().availableWidth;\r\n\tvar gaps = gapArray(columnNode._gap);\r\n\r\n\tif (gaps) {\r\n\t\tavailableWidth -= (gaps.length - 1) * columnNode._gap;\r\n\t}\r\n\r\n\tColumnCalculator.buildColumnWidths(columns, availableWidth);\r\n\tvar result = this.processRow(columns, columns, gaps);\r\n\taddAll(columnNode.positions, result.positions);\r\n\r\n\r\n\tfunction gapArray(gap) {\r\n\t\tif (!gap) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tvar gaps = [];\r\n\t\tgaps.push(0);\r\n\r\n\t\tfor (var i = columns.length - 1; i > 0; i--) {\r\n\t\t\tgaps.push(gap);\r\n\t\t}\r\n\r\n\t\treturn gaps;\r\n\t}\r\n};\r\n\r\nLayoutBuilder.prototype.processRow = function (columns, widths, gaps, tableBody, tableRow, height) {\r\n\tvar self = this;\r\n\tvar pageBreaks = [], positions = [];\r\n\r\n\tthis.tracker.auto('pageChanged', storePageBreakData, function () {\r\n\t\twidths = widths || columns;\r\n\r\n\t\tself.writer.context().beginColumnGroup();\r\n\r\n\t\tfor (var i = 0, l = columns.length; i < l; i++) {\r\n\t\t\tvar column = columns[i];\r\n\t\t\tvar width = widths[i]._calcWidth;\r\n\t\t\tvar leftOffset = colLeftOffset(i);\r\n\r\n\t\t\tif (column.colSpan && column.colSpan > 1) {\r\n\t\t\t\tfor (var j = 1; j < column.colSpan; j++) {\r\n\t\t\t\t\twidth += widths[++i]._calcWidth + gaps[i];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tself.writer.context().beginColumn(width, leftOffset, getEndingCell(column, i));\r\n\t\t\tif (!column._span) {\r\n\t\t\t\tself.processNode(column);\r\n\t\t\t\taddAll(positions, column.positions);\r\n\t\t\t} else if (column._columnEndingContext) {\r\n\t\t\t\t// row-span ending\r\n\t\t\t\tself.writer.context().markEnding(column);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tself.writer.context().completeColumnGroup(height);\r\n\t});\r\n\r\n\treturn { pageBreaks: pageBreaks, positions: positions };\r\n\r\n\tfunction storePageBreakData(data) {\r\n\t\tvar pageDesc;\r\n\r\n\t\tfor (var i = 0, l = pageBreaks.length; i < l; i++) {\r\n\t\t\tvar desc = pageBreaks[i];\r\n\t\t\tif (desc.prevPage === data.prevPage) {\r\n\t\t\t\tpageDesc = desc;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!pageDesc) {\r\n\t\t\tpageDesc = data;\r\n\t\t\tpageBreaks.push(pageDesc);\r\n\t\t}\r\n\t\tpageDesc.prevY = Math.max(pageDesc.prevY, data.prevY);\r\n\t\tpageDesc.y = Math.min(pageDesc.y, data.y);\r\n\t}\r\n\r\n\tfunction colLeftOffset(i) {\r\n\t\tif (gaps && gaps.length > i) {\r\n\t\t\treturn gaps[i];\r\n\t\t}\r\n\t\treturn 0;\r\n\t}\r\n\r\n\tfunction getEndingCell(column, columnIndex) {\r\n\t\tif (column.rowSpan && column.rowSpan > 1) {\r\n\t\t\tvar endingRow = tableRow + column.rowSpan - 1;\r\n\t\t\tif (endingRow >= tableBody.length) {\r\n\t\t\t\tthrow 'Row span for column ' + columnIndex + ' (with indexes starting from 0) exceeded row count';\r\n\t\t\t}\r\n\t\t\treturn tableBody[endingRow][columnIndex];\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n};\r\n\r\n// lists\r\nLayoutBuilder.prototype.processList = function (orderedList, node) {\r\n\tvar self = this,\r\n\t\titems = orderedList ? node.ol : node.ul,\r\n\t\tgapSize = node._gapSize;\r\n\r\n\tthis.writer.context().addMargin(gapSize.width);\r\n\r\n\tvar nextMarker;\r\n\tthis.tracker.auto('lineAdded', addMarkerToFirstLeaf, function () {\r\n\t\titems.forEach(function (item) {\r\n\t\t\tnextMarker = item.listMarker;\r\n\t\t\tself.processNode(item);\r\n\t\t\taddAll(node.positions, item.positions);\r\n\t\t});\r\n\t});\r\n\r\n\tthis.writer.context().addMargin(-gapSize.width);\r\n\r\n\tfunction addMarkerToFirstLeaf(line) {\r\n\t\t// I'm not very happy with the way list processing is implemented\r\n\t\t// (both code and algorithm should be rethinked)\r\n\t\tif (nextMarker) {\r\n\t\t\tvar marker = nextMarker;\r\n\t\t\tnextMarker = null;\r\n\r\n\t\t\tif (marker.canvas) {\r\n\t\t\t\tvar vector = marker.canvas[0];\r\n\r\n\t\t\t\toffsetVector(vector, -marker._minWidth, 0);\r\n\t\t\t\tself.writer.addVector(vector);\r\n\t\t\t} else if (marker._inlines) {\r\n\t\t\t\tvar markerLine = new Line(self.pageSize.width);\r\n\t\t\t\tmarkerLine.addInline(marker._inlines[0]);\r\n\t\t\t\tmarkerLine.x = -marker._minWidth;\r\n\t\t\t\tmarkerLine.y = line.getAscenderHeight() - markerLine.getAscenderHeight();\r\n\t\t\t\tself.writer.addLine(markerLine, true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\n// tables\r\nLayoutBuilder.prototype.processTable = function (tableNode) {\r\n\tvar processor = new TableProcessor(tableNode);\r\n\r\n\tprocessor.beginTable(this.writer);\r\n\r\n\tvar rowHeights = tableNode.table.heights;\r\n\tfor (var i = 0, l = tableNode.table.body.length; i < l; i++) {\r\n\t\tprocessor.beginRow(i, this.writer);\r\n\r\n\t\tvar height;\r\n\t\tif (isFunction(rowHeights)) {\r\n\t\t\theight = rowHeights(i);\r\n\t\t} else if (isArray(rowHeights)) {\r\n\t\t\theight = rowHeights[i];\r\n\t\t} else {\r\n\t\t\theight = rowHeights;\r\n\t\t}\r\n\r\n\t\tif (height === 'auto') {\r\n\t\t\theight = undefined;\r\n\t\t}\r\n\r\n\t\tvar result = this.processRow(tableNode.table.body[i], tableNode.table.widths, tableNode._offsets.offsets, tableNode.table.body, i, height);\r\n\t\taddAll(tableNode.positions, result.positions);\r\n\r\n\t\tprocessor.endRow(i, this.writer, result.pageBreaks);\r\n\t}\r\n\r\n\tprocessor.endTable(this.writer);\r\n};\r\n\r\n// leafs (texts)\r\nLayoutBuilder.prototype.processLeaf = function (node) {\r\n\tvar line = this.buildNextLine(node);\r\n\tif (line && (node.tocItem || node.id)) {\r\n\t\tline._node = node;\r\n\t}\r\n\tvar currentHeight = (line) ? line.getHeight() : 0;\r\n\tvar maxHeight = node.maxHeight || -1;\r\n\r\n\tif (line) {\r\n\t\tvar nodeId = getNodeId(node);\r\n\t\tif (nodeId) {\r\n\t\t\tline.id = nodeId;\r\n\t\t}\r\n\t}\r\n\r\n\tif (node._tocItemRef) {\r\n\t\tline._pageNodeRef = node._tocItemRef;\r\n\t}\r\n\r\n\tif (node._pageRef) {\r\n\t\tline._pageNodeRef = node._pageRef._nodeRef;\r\n\t}\r\n\r\n\tif (line && line.inlines && isArray(line.inlines)) {\r\n\t\tfor (var i = 0, l = line.inlines.length; i < l; i++) {\r\n\t\t\tif (line.inlines[i]._tocItemRef) {\r\n\t\t\t\tline.inlines[i]._pageNodeRef = line.inlines[i]._tocItemRef;\r\n\t\t\t}\r\n\r\n\t\t\tif (line.inlines[i]._pageRef) {\r\n\t\t\t\tline.inlines[i]._pageNodeRef = line.inlines[i]._pageRef._nodeRef;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\twhile (line && (maxHeight === -1 || currentHeight < maxHeight)) {\r\n\t\tvar positions = this.writer.addLine(line);\r\n\t\tnode.positions.push(positions);\r\n\t\tline = this.buildNextLine(node);\r\n\t\tif (line) {\r\n\t\t\tcurrentHeight += line.getHeight();\r\n\t\t}\r\n\t}\r\n};\r\n\r\nLayoutBuilder.prototype.processToc = function (node) {\r\n\tif (node.toc.title) {\r\n\t\tthis.processNode(node.toc.title);\r\n\t}\r\n\tif (node.toc._table) {\r\n\t\tthis.processNode(node.toc._table);\r\n\t}\r\n};\r\n\r\nLayoutBuilder.prototype.buildNextLine = function (textNode) {\r\n\r\n\tfunction cloneInline(inline) {\r\n\t\tvar newInline = inline.constructor();\r\n\t\tfor (var key in inline) {\r\n\t\t\tnewInline[key] = inline[key];\r\n\t\t}\r\n\t\treturn newInline;\r\n\t}\r\n\r\n\tif (!textNode._inlines || textNode._inlines.length === 0) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tvar line = new Line(this.writer.context().availableWidth);\r\n\tvar textTools = new TextTools(null);\r\n\r\n\tvar isForceContinue = false;\r\n\twhile (textNode._inlines && textNode._inlines.length > 0 &&\r\n\t\t(line.hasEnoughSpaceForInline(textNode._inlines[0], textNode._inlines.slice(1)) || isForceContinue)) {\r\n\t\tvar isHardWrap = false;\r\n\t\tvar inline = textNode._inlines.shift();\r\n\t\tisForceContinue = false;\r\n\r\n\t\tif (!inline.noWrap && inline.text.length > 1 && inline.width > line.getAvailableWidth()) {\r\n\t\t\tvar widthPerChar = inline.width / inline.text.length;\r\n\t\t\tvar maxChars = Math.floor(line.getAvailableWidth() / widthPerChar);\r\n\t\t\tif (maxChars < 1) {\r\n\t\t\t\tmaxChars = 1;\r\n\t\t\t}\r\n\t\t\tif (maxChars < inline.text.length) {\r\n\t\t\t\tvar newInline = cloneInline(inline);\r\n\r\n\t\t\t\tnewInline.text = inline.text.substr(maxChars);\r\n\t\t\t\tinline.text = inline.text.substr(0, maxChars);\r\n\r\n\t\t\t\tnewInline.width = textTools.widthOfString(newInline.text, newInline.font, newInline.fontSize, newInline.characterSpacing, newInline.fontFeatures);\r\n\t\t\t\tinline.width = textTools.widthOfString(inline.text, inline.font, inline.fontSize, inline.characterSpacing, inline.fontFeatures);\r\n\r\n\t\t\t\ttextNode._inlines.unshift(newInline);\r\n\t\t\t\tisHardWrap = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tline.addInline(inline);\r\n\r\n\t\tisForceContinue = inline.noNewLine && !isHardWrap;\r\n\t}\r\n\r\n\tline.lastLineInParagraph = textNode._inlines.length === 0;\r\n\r\n\treturn line;\r\n};\r\n\r\n// images\r\nLayoutBuilder.prototype.processImage = function (node) {\r\n\tvar position = this.writer.addImage(node);\r\n\tnode.positions.push(position);\r\n};\r\n\r\nLayoutBuilder.prototype.processSVG = function (node) {\r\n\tvar position = this.writer.addSVG(node);\r\n\tnode.positions.push(position);\r\n};\r\n\r\nLayoutBuilder.prototype.processCanvas = function (node) {\r\n\tvar height = node._minHeight;\r\n\r\n\tif (node.absolutePosition === undefined && this.writer.context().availableHeight < height) {\r\n\t\t// TODO: support for canvas larger than a page\r\n\t\t// TODO: support for other overflow methods\r\n\r\n\t\tthis.writer.moveToNextPage();\r\n\t}\r\n\r\n\tthis.writer.alignCanvas(node);\r\n\r\n\tnode.canvas.forEach(function (vector) {\r\n\t\tvar position = this.writer.addVector(vector);\r\n\t\tnode.positions.push(position);\r\n\t}, this);\r\n\r\n\tthis.writer.context().moveDown(height);\r\n};\r\n\r\nLayoutBuilder.prototype.processQr = function (node) {\r\n\tvar position = this.writer.addQr(node);\r\n\tnode.positions.push(position);\r\n};\r\n\r\nmodule.exports = LayoutBuilder;\r\n","'use strict';\r\n\r\n/**\r\n * Creates an instance of Line\r\n *\r\n * @constructor\r\n * @this {Line}\r\n * @param {Number} Maximum width this line can have\r\n */\r\nfunction Line(maxWidth) {\r\n\tthis.maxWidth = maxWidth;\r\n\tthis.leadingCut = 0;\r\n\tthis.trailingCut = 0;\r\n\tthis.inlineWidths = 0;\r\n\tthis.inlines = [];\r\n}\r\n\r\nLine.prototype.getAscenderHeight = function () {\r\n\tvar y = 0;\r\n\r\n\tthis.inlines.forEach(function (inline) {\r\n\t\ty = Math.max(y, inline.font.ascender / 1000 * inline.fontSize);\r\n\t});\r\n\treturn y;\r\n};\r\n\r\nLine.prototype.hasEnoughSpaceForInline = function (inline, nextInlines) {\r\n\tnextInlines = nextInlines || [];\r\n\r\n\tif (this.inlines.length === 0) {\r\n\t\treturn true;\r\n\t}\r\n\tif (this.newLineForced) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tvar inlineWidth = inline.width;\r\n\tvar inlineTrailingCut = inline.trailingCut || 0;\r\n\tif (inline.noNewLine) {\r\n\t\tfor (var i = 0, l = nextInlines.length; i < l; i++) {\r\n\t\t\tvar nextInline = nextInlines[i];\r\n\t\t\tinlineWidth += nextInline.width;\r\n\t\t\tinlineTrailingCut += nextInline.trailingCut || 0;\r\n\t\t\tif (!nextInline.noNewLine) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn (this.inlineWidths + inlineWidth - this.leadingCut - inlineTrailingCut) <= this.maxWidth;\r\n};\r\n\r\nLine.prototype.addInline = function (inline) {\r\n\tif (this.inlines.length === 0) {\r\n\t\tthis.leadingCut = inline.leadingCut || 0;\r\n\t}\r\n\tthis.trailingCut = inline.trailingCut || 0;\r\n\r\n\tinline.x = this.inlineWidths - this.leadingCut;\r\n\r\n\tthis.inlines.push(inline);\r\n\tthis.inlineWidths += inline.width;\r\n\r\n\tif (inline.lineEnd) {\r\n\t\tthis.newLineForced = true;\r\n\t}\r\n};\r\n\r\nLine.prototype.getWidth = function () {\r\n\treturn this.inlineWidths - this.leadingCut - this.trailingCut;\r\n};\r\n\r\nLine.prototype.getAvailableWidth = function () {\r\n\treturn this.maxWidth - this.getWidth();\r\n};\r\n\r\n/**\r\n * Returns line height\r\n * @return {Number}\r\n */\r\nLine.prototype.getHeight = function () {\r\n\tvar max = 0;\r\n\r\n\tthis.inlines.forEach(function (item) {\r\n\t\tmax = Math.max(max, item.height || 0);\r\n\t});\r\n\r\n\treturn max;\r\n};\r\n\r\nmodule.exports = Line;\r\n","'use strict';\r\n\r\nvar isUndefined = require('./helpers').isUndefined;\r\nvar ElementWriter = require('./elementWriter');\r\n\r\n/**\r\n * Creates an instance of PageElementWriter - an extended ElementWriter\r\n * which can handle:\r\n * - page-breaks (it adds new pages when there's not enough space left),\r\n * - repeatable fragments (like table-headers, which are repeated everytime\r\n *                         a page-break occurs)\r\n * - transactions (used for unbreakable-blocks when we want to make sure\r\n *                 whole block will be rendered on the same page)\r\n */\r\nfunction PageElementWriter(context, tracker) {\r\n\tthis.transactionLevel = 0;\r\n\tthis.repeatables = [];\r\n\tthis.tracker = tracker;\r\n\tthis.writer = new ElementWriter(context, tracker);\r\n}\r\n\r\nfunction fitOnPage(self, addFct) {\r\n\tvar position = addFct(self);\r\n\tif (!position) {\r\n\t\tself.moveToNextPage();\r\n\t\tposition = addFct(self);\r\n\t}\r\n\treturn position;\r\n}\r\n\r\nPageElementWriter.prototype.addLine = function (line, dontUpdateContextPosition, index) {\r\n\treturn fitOnPage(this, function (self) {\r\n\t\treturn self.writer.addLine(line, dontUpdateContextPosition, index);\r\n\t});\r\n};\r\n\r\nPageElementWriter.prototype.addImage = function (image, index) {\r\n\treturn fitOnPage(this, function (self) {\r\n\t\treturn self.writer.addImage(image, index);\r\n\t});\r\n};\r\n\r\nPageElementWriter.prototype.addSVG = function (image, index) {\r\n\treturn fitOnPage(this, function (self) {\r\n\t\treturn self.writer.addSVG(image, index);\r\n\t});\r\n};\r\n\r\nPageElementWriter.prototype.addQr = function (qr, index) {\r\n\treturn fitOnPage(this, function (self) {\r\n\t\treturn self.writer.addQr(qr, index);\r\n\t});\r\n};\r\n\r\nPageElementWriter.prototype.addVector = function (vector, ignoreContextX, ignoreContextY, index) {\r\n\treturn this.writer.addVector(vector, ignoreContextX, ignoreContextY, index);\r\n};\r\n\r\nPageElementWriter.prototype.beginClip = function (width, height) {\r\n\treturn this.writer.beginClip(width, height);\r\n};\r\n\r\nPageElementWriter.prototype.endClip = function () {\r\n\treturn this.writer.endClip();\r\n};\r\n\r\nPageElementWriter.prototype.alignCanvas = function (node) {\r\n\tthis.writer.alignCanvas(node);\r\n};\r\n\r\nPageElementWriter.prototype.addFragment = function (fragment, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition) {\r\n\tif (!this.writer.addFragment(fragment, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition)) {\r\n\t\tthis.moveToNextPage();\r\n\t\tthis.writer.addFragment(fragment, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition);\r\n\t}\r\n};\r\n\r\nPageElementWriter.prototype.moveToNextPage = function (pageOrientation) {\r\n\r\n\tvar nextPage = this.writer.context.moveToNextPage(pageOrientation);\r\n\r\n\t// moveToNextPage is called multiple times for table, because is called for each column\r\n\t// and repeatables are inserted only in the first time. If columns are used, is needed\r\n\t// call for table in first column and then for table in the second column (is other repeatables).\r\n\tthis.repeatables.forEach(function (rep) {\r\n\t\tif (isUndefined(rep.insertedOnPages[this.writer.context.page])) {\r\n\t\t\trep.insertedOnPages[this.writer.context.page] = true;\r\n\t\t\tthis.writer.addFragment(rep, true);\r\n\t\t} else {\r\n\t\t\tthis.writer.context.moveDown(rep.height);\r\n\t\t}\r\n\t}, this);\r\n\r\n\tthis.writer.tracker.emit('pageChanged', {\r\n\t\tprevPage: nextPage.prevPage,\r\n\t\tprevY: nextPage.prevY,\r\n\t\ty: this.writer.context.y\r\n\t});\r\n};\r\n\r\nPageElementWriter.prototype.beginUnbreakableBlock = function (width, height) {\r\n\tif (this.transactionLevel++ === 0) {\r\n\t\tthis.originalX = this.writer.context.x;\r\n\t\tthis.writer.pushContext(width, height);\r\n\t}\r\n};\r\n\r\nPageElementWriter.prototype.commitUnbreakableBlock = function (forcedX, forcedY) {\r\n\tif (--this.transactionLevel === 0) {\r\n\t\tvar unbreakableContext = this.writer.context;\r\n\t\tthis.writer.popContext();\r\n\r\n\t\tvar nbPages = unbreakableContext.pages.length;\r\n\t\tif (nbPages > 0) {\r\n\t\t\t// no support for multi-page unbreakableBlocks\r\n\t\t\tvar fragment = unbreakableContext.pages[0];\r\n\t\t\tfragment.xOffset = forcedX;\r\n\t\t\tfragment.yOffset = forcedY;\r\n\r\n\t\t\t//TODO: vectors can influence height in some situations\r\n\t\t\tif (nbPages > 1) {\r\n\t\t\t\t// on out-of-context blocs (headers, footers, background) height should be the whole DocumentContext height\r\n\t\t\t\tif (forcedX !== undefined || forcedY !== undefined) {\r\n\t\t\t\t\tfragment.height = unbreakableContext.getCurrentPage().pageSize.height - unbreakableContext.pageMargins.top - unbreakableContext.pageMargins.bottom;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tfragment.height = this.writer.context.getCurrentPage().pageSize.height - this.writer.context.pageMargins.top - this.writer.context.pageMargins.bottom;\r\n\t\t\t\t\tfor (var i = 0, l = this.repeatables.length; i < l; i++) {\r\n\t\t\t\t\t\tfragment.height -= this.repeatables[i].height;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tfragment.height = unbreakableContext.y;\r\n\t\t\t}\r\n\r\n\t\t\tif (forcedX !== undefined || forcedY !== undefined) {\r\n\t\t\t\tthis.writer.addFragment(fragment, true, true, true);\r\n\t\t\t} else {\r\n\t\t\t\tthis.addFragment(fragment);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\nPageElementWriter.prototype.currentBlockToRepeatable = function () {\r\n\tvar unbreakableContext = this.writer.context;\r\n\tvar rep = { items: [] };\r\n\r\n\tunbreakableContext.pages[0].items.forEach(function (item) {\r\n\t\trep.items.push(item);\r\n\t});\r\n\r\n\trep.xOffset = this.originalX;\r\n\r\n\t//TODO: vectors can influence height in some situations\r\n\trep.height = unbreakableContext.y;\r\n\r\n\trep.insertedOnPages = [];\r\n\r\n\treturn rep;\r\n};\r\n\r\nPageElementWriter.prototype.pushToRepeatables = function (rep) {\r\n\tthis.repeatables.push(rep);\r\n};\r\n\r\nPageElementWriter.prototype.popFromRepeatables = function () {\r\n\tthis.repeatables.pop();\r\n};\r\n\r\nPageElementWriter.prototype.context = function () {\r\n\treturn this.writer.context;\r\n};\r\n\r\nmodule.exports = PageElementWriter;\r\n","'use strict';\r\n\r\nfunction _interopDefault(ex) {\r\n\treturn (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex;\r\n}\r\n\r\nvar PdfKit = _interopDefault(require('@foliojs-fork/pdfkit'));\r\n\r\nfunction getEngineInstance() {\r\n\treturn PdfKit;\r\n}\r\n\r\nfunction createPdfDocument(options) {\r\n\toptions = options || {};\r\n\treturn new PdfKit(options);\r\n}\r\n\r\nmodule.exports = {\r\n\tgetEngineInstance: getEngineInstance,\r\n\tcreatePdfDocument: createPdfDocument\r\n};\r\n","/*eslint no-unused-vars: [\"error\", {\"args\": \"none\"}]*/\r\n'use strict';\r\n\r\nvar PdfKitEngine = require('./pdfKitEngine');\r\nvar FontProvider = require('./fontProvider');\r\nvar LayoutBuilder = require('./layoutBuilder');\r\nvar sizes = require('./standardPageSizes');\r\nvar ImageMeasure = require('./imageMeasure');\r\nvar SVGMeasure = require('./svgMeasure');\r\nvar textDecorator = require('./textDecorator');\r\nvar TextTools = require('./textTools');\r\nvar isFunction = require('./helpers').isFunction;\r\nvar isString = require('./helpers').isString;\r\nvar isNumber = require('./helpers').isNumber;\r\nvar isBoolean = require('./helpers').isBoolean;\r\nvar isArray = require('./helpers').isArray;\r\nvar isUndefined = require('./helpers').isUndefined;\r\nvar isPattern = require('./helpers').isPattern;\r\nvar getPattern = require('./helpers').getPattern;\r\nvar SVGtoPDF = require('./3rd-party/svg-to-pdfkit');\r\n\r\nvar findFont = function (fonts, requiredFonts, defaultFont) {\r\n\tfor (var i = 0; i < requiredFonts.length; i++) {\r\n\t\tvar requiredFont = requiredFonts[i].toLowerCase();\r\n\r\n\t\tfor (var font in fonts) {\r\n\t\t\tif (font.toLowerCase() === requiredFont) {\r\n\t\t\t\treturn font;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn defaultFont;\r\n};\r\n\r\n////////////////////////////////////////\r\n// PdfPrinter\r\n\r\n/**\r\n * @class Creates an instance of a PdfPrinter which turns document definition into a pdf\r\n *\r\n * @param {Object} fontDescriptors font definition dictionary\r\n *\r\n * @example\r\n * var fontDescriptors = {\r\n *\tRoboto: {\r\n *\t\tnormal: 'fonts/Roboto-Regular.ttf',\r\n *\t\tbold: 'fonts/Roboto-Medium.ttf',\r\n *\t\titalics: 'fonts/Roboto-Italic.ttf',\r\n *\t\tbolditalics: 'fonts/Roboto-MediumItalic.ttf'\r\n *\t}\r\n * };\r\n *\r\n * var printer = new PdfPrinter(fontDescriptors);\r\n */\r\nfunction PdfPrinter(fontDescriptors) {\r\n\tthis.fontDescriptors = fontDescriptors;\r\n}\r\n\r\n/**\r\n * Executes layout engine for the specified document and renders it into a pdfkit document\r\n * ready to be saved.\r\n *\r\n * @param {Object} docDefinition document definition\r\n * @param {Object} docDefinition.content an array describing the pdf structure (for more information take a look at the examples in the /examples folder)\r\n * @param {Object} [docDefinition.defaultStyle] default (implicit) style definition\r\n * @param {Object} [docDefinition.styles] dictionary defining all styles which can be used in the document\r\n * @param {Object} [docDefinition.pageSize] page size (pdfkit units, A4 dimensions by default)\r\n * @param {Number} docDefinition.pageSize.width width\r\n * @param {Number} docDefinition.pageSize.height height\r\n * @param {Object} [docDefinition.pageMargins] page margins (pdfkit units)\r\n * @param {Number} docDefinition.maxPagesNumber maximum number of pages to render\r\n *\r\n * @example\r\n *\r\n * var docDefinition = {\r\n * \tinfo: {\r\n *\t\ttitle: 'awesome Document',\r\n *\t\tauthor: 'john doe',\r\n *\t\tsubject: 'subject of document',\r\n *\t\tkeywords: 'keywords for document',\r\n * \t},\r\n *\tcontent: [\r\n *\t\t'First paragraph',\r\n *\t\t'Second paragraph, this time a little bit longer',\r\n *\t\t{ text: 'Third paragraph, slightly bigger font size', fontSize: 20 },\r\n *\t\t{ text: 'Another paragraph using a named style', style: 'header' },\r\n *\t\t{ text: ['playing with ', 'inlines' ] },\r\n *\t\t{ text: ['and ', { text: 'restyling ', bold: true }, 'them'] },\r\n *\t],\r\n *\tstyles: {\r\n *\t\theader: { fontSize: 30, bold: true }\r\n *\t},\r\n *\tpatterns: {\r\n *\t\tstripe45d: {\r\n *\t\t\tboundingBox: [1, 1, 4, 4],\r\n *\t\t\txStep: 3,\r\n *\t\t\tyStep: 3,\r\n *\t\t\tpattern: '1 w 0 1 m 4 5 l s 2 0 m 5 3 l s'\r\n *\t\t}\r\n *\t}\r\n * };\r\n *\r\n * var pdfKitDoc = printer.createPdfKitDocument(docDefinition);\r\n *\r\n * pdfKitDoc.pipe(fs.createWriteStream('sample.pdf'));\r\n * pdfKitDoc.end();\r\n *\r\n * @return {Object} a pdfKit document object which can be saved or encode to data-url\r\n */\r\nPdfPrinter.prototype.createPdfKitDocument = function (docDefinition, options) {\r\n\toptions = options || {};\r\n\r\n\tdocDefinition.version = docDefinition.version || '1.3';\r\n\tdocDefinition.compress = isBoolean(docDefinition.compress) ? docDefinition.compress : true;\r\n\tdocDefinition.images = docDefinition.images || {};\r\n\tdocDefinition.pageMargins = ((docDefinition.pageMargins !== undefined) && (docDefinition.pageMargins !== null)) ? docDefinition.pageMargins : 40;\r\n\r\n\tvar pageSize = fixPageSize(docDefinition.pageSize, docDefinition.pageOrientation);\r\n\r\n\tvar pdfOptions = {\r\n\t\tsize: [pageSize.width, pageSize.height],\r\n\t\tpdfVersion: docDefinition.version,\r\n\t\tcompress: docDefinition.compress,\r\n\t\tuserPassword: docDefinition.userPassword,\r\n\t\townerPassword: docDefinition.ownerPassword,\r\n\t\tpermissions: docDefinition.permissions,\r\n        lang: docDefinition.language,\r\n\t\tfontLayoutCache: isBoolean(options.fontLayoutCache) ? options.fontLayoutCache : true,\r\n\t\tbufferPages: options.bufferPages || false,\r\n\t\tautoFirstPage: false,\r\n\t\tinfo: createMetadata(docDefinition),\r\n\t\tfont: null\r\n\t};\r\n\r\n\tthis.pdfKitDoc = PdfKitEngine.createPdfDocument(pdfOptions);\r\n\r\n\tthis.fontProvider = new FontProvider(this.fontDescriptors, this.pdfKitDoc);\r\n\r\n\tvar builder = new LayoutBuilder(pageSize, fixPageMargins(docDefinition.pageMargins), new ImageMeasure(this.pdfKitDoc, docDefinition.images), new SVGMeasure());\r\n\r\n\tregisterDefaultTableLayouts(builder);\r\n\tif (options.tableLayouts) {\r\n\t\tbuilder.registerTableLayouts(options.tableLayouts);\r\n\t}\r\n\r\n\tvar pages = builder.layoutDocument(docDefinition.content, this.fontProvider, docDefinition.styles || {}, docDefinition.defaultStyle || {\r\n\t\tfontSize: 12,\r\n\t\tfont: 'Roboto'\r\n\t}, docDefinition.background, docDefinition.header, docDefinition.footer, docDefinition.images, docDefinition.watermark, docDefinition.pageBreakBefore);\r\n\tvar maxNumberPages = docDefinition.maxPagesNumber || -1;\r\n\tif (isNumber(maxNumberPages) && maxNumberPages > -1) {\r\n\t\tpages = pages.slice(0, maxNumberPages);\r\n\t}\r\n\r\n\t// if pageSize.height is set to Infinity, calculate the actual height of the page that\r\n\t// was laid out using the height of each of the items in the page.\r\n\tif (pageSize.height === Infinity) {\r\n\t\tvar pageHeight = calculatePageHeight(pages, docDefinition.pageMargins);\r\n\t\tthis.pdfKitDoc.options.size = [pageSize.width, pageHeight];\r\n\t}\r\n\r\n\tvar patterns = createPatterns(docDefinition.patterns || {}, this.pdfKitDoc);\r\n\r\n\trenderPages(pages, this.fontProvider, this.pdfKitDoc, patterns, options.progressCallback);\r\n\r\n\tif (options.autoPrint) {\r\n\t\tvar printActionRef = this.pdfKitDoc.ref({\r\n\t\t\tType: 'Action',\r\n\t\t\tS: 'Named',\r\n\t\t\tN: 'Print'\r\n\t\t});\r\n\t\tthis.pdfKitDoc._root.data.OpenAction = printActionRef;\r\n\t\tprintActionRef.end();\r\n\t}\r\n\treturn this.pdfKitDoc;\r\n};\r\n\r\nfunction createMetadata(docDefinition) {\r\n\t// PDF standard has these properties reserved: Title, Author, Subject, Keywords,\r\n\t// Creator, Producer, CreationDate, ModDate, Trapped.\r\n\t// To keep the pdfmake api consistent, the info field are defined lowercase.\r\n\t// Custom properties don't contain a space.\r\n\tfunction standardizePropertyKey(key) {\r\n\t\tvar standardProperties = ['Title', 'Author', 'Subject', 'Keywords',\r\n\t\t\t'Creator', 'Producer', 'CreationDate', 'ModDate', 'Trapped'];\r\n\t\tvar standardizedKey = key.charAt(0).toUpperCase() + key.slice(1);\r\n\t\tif (standardProperties.indexOf(standardizedKey) !== -1) {\r\n\t\t\treturn standardizedKey;\r\n\t\t}\r\n\r\n\t\treturn key.replace(/\\s+/g, '');\r\n\t}\r\n\r\n\tvar info = {\r\n\t\tProducer: 'pdfmake',\r\n\t\tCreator: 'pdfmake'\r\n\t};\r\n\r\n\tif (docDefinition.info) {\r\n\t\tfor (var key in docDefinition.info) {\r\n\t\t\tvar value = docDefinition.info[key];\r\n\t\t\tif (value) {\r\n\t\t\t\tkey = standardizePropertyKey(key);\r\n\t\t\t\tinfo[key] = value;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn info;\r\n}\r\n\r\nfunction calculatePageHeight(pages, margins) {\r\n\tfunction getItemHeight(item) {\r\n\t\tif (isFunction(item.item.getHeight)) {\r\n\t\t\treturn item.item.getHeight();\r\n\t\t} else if (item.item._height) {\r\n\t\t\treturn item.item._height;\r\n\t\t} else if (item.type === 'vector') {\r\n\t\t\tif (typeof item.item.y1 !== 'undefined') {\r\n\t\t\t\treturn item.item.y1 > item.item.y2 ? item.item.y1 : item.item.y2;\r\n\t\t\t} else {\r\n\t\t\t\treturn item.item.h;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// TODO: add support for next item types\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getBottomPosition(item) {\r\n\t\tvar top = item.item.y || 0;\r\n\t\tvar height = getItemHeight(item);\r\n\t\treturn top + height;\r\n\t}\r\n\r\n\tvar fixedMargins = fixPageMargins(margins || 40);\r\n\tvar height = fixedMargins.top;\r\n\r\n\tpages.forEach(function (page) {\r\n\t\tpage.items.forEach(function (item) {\r\n\t\t\tvar bottomPosition = getBottomPosition(item);\r\n\t\t\tif (bottomPosition > height) {\r\n\t\t\t\theight = bottomPosition;\r\n\t\t\t}\r\n\t\t});\r\n\t});\r\n\r\n\theight += fixedMargins.bottom;\r\n\r\n\treturn height;\r\n}\r\n\r\nfunction fixPageSize(pageSize, pageOrientation) {\r\n\tfunction isNeedSwapPageSizes(pageOrientation) {\r\n\t\tif (isString(pageOrientation)) {\r\n\t\t\tpageOrientation = pageOrientation.toLowerCase();\r\n\t\t\treturn ((pageOrientation === 'portrait') && (size.width > size.height)) ||\r\n\t\t\t\t((pageOrientation === 'landscape') && (size.width < size.height));\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\t// if pageSize.height is set to auto, set the height to infinity so there are no page breaks.\r\n\tif (pageSize && pageSize.height === 'auto') {\r\n\t\tpageSize.height = Infinity;\r\n\t}\r\n\r\n\tvar size = pageSize2widthAndHeight(pageSize || 'A4');\r\n\tif (isNeedSwapPageSizes(pageOrientation)) { // swap page sizes\r\n\t\tsize = { width: size.height, height: size.width };\r\n\t}\r\n\tsize.orientation = size.width > size.height ? 'landscape' : 'portrait';\r\n\treturn size;\r\n}\r\n\r\nfunction fixPageMargins(margin) {\r\n\tif (isNumber(margin)) {\r\n\t\tmargin = { left: margin, right: margin, top: margin, bottom: margin };\r\n\t} else if (isArray(margin)) {\r\n\t\tif (margin.length === 2) {\r\n\t\t\tmargin = { left: margin[0], top: margin[1], right: margin[0], bottom: margin[1] };\r\n\t\t} else if (margin.length === 4) {\r\n\t\t\tmargin = { left: margin[0], top: margin[1], right: margin[2], bottom: margin[3] };\r\n\t\t} else {\r\n\t\t\tthrow 'Invalid pageMargins definition';\r\n\t\t}\r\n\t}\r\n\r\n\treturn margin;\r\n}\r\n\r\nfunction registerDefaultTableLayouts(layoutBuilder) {\r\n\tlayoutBuilder.registerTableLayouts({\r\n\t\tnoBorders: {\r\n\t\t\thLineWidth: function (i) {\r\n\t\t\t\treturn 0;\r\n\t\t\t},\r\n\t\t\tvLineWidth: function (i) {\r\n\t\t\t\treturn 0;\r\n\t\t\t},\r\n\t\t\tpaddingLeft: function (i) {\r\n\t\t\t\treturn i && 4 || 0;\r\n\t\t\t},\r\n\t\t\tpaddingRight: function (i, node) {\r\n\t\t\t\treturn (i < node.table.widths.length - 1) ? 4 : 0;\r\n\t\t\t}\r\n\t\t},\r\n\t\theaderLineOnly: {\r\n\t\t\thLineWidth: function (i, node) {\r\n\t\t\t\tif (i === 0 || i === node.table.body.length) {\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\t\t\t\treturn (i === node.table.headerRows) ? 2 : 0;\r\n\t\t\t},\r\n\t\t\tvLineWidth: function (i) {\r\n\t\t\t\treturn 0;\r\n\t\t\t},\r\n\t\t\tpaddingLeft: function (i) {\r\n\t\t\t\treturn i === 0 ? 0 : 8;\r\n\t\t\t},\r\n\t\t\tpaddingRight: function (i, node) {\r\n\t\t\t\treturn (i === node.table.widths.length - 1) ? 0 : 8;\r\n\t\t\t}\r\n\t\t},\r\n\t\tlightHorizontalLines: {\r\n\t\t\thLineWidth: function (i, node) {\r\n\t\t\t\tif (i === 0 || i === node.table.body.length) {\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\t\t\t\treturn (i === node.table.headerRows) ? 2 : 1;\r\n\t\t\t},\r\n\t\t\tvLineWidth: function (i) {\r\n\t\t\t\treturn 0;\r\n\t\t\t},\r\n\t\t\thLineColor: function (i) {\r\n\t\t\t\treturn i === 1 ? 'black' : '#aaa';\r\n\t\t\t},\r\n\t\t\tpaddingLeft: function (i) {\r\n\t\t\t\treturn i === 0 ? 0 : 8;\r\n\t\t\t},\r\n\t\t\tpaddingRight: function (i, node) {\r\n\t\t\t\treturn (i === node.table.widths.length - 1) ? 0 : 8;\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n}\r\n\r\nfunction pageSize2widthAndHeight(pageSize) {\r\n\tif (isString(pageSize)) {\r\n\t\tvar size = sizes[pageSize.toUpperCase()];\r\n\t\tif (!size) {\r\n\t\t\tthrow 'Page size ' + pageSize + ' not recognized';\r\n\t\t}\r\n\t\treturn { width: size[0], height: size[1] };\r\n\t}\r\n\r\n\treturn pageSize;\r\n}\r\n\r\nfunction updatePageOrientationInOptions(currentPage, pdfKitDoc) {\r\n\tvar previousPageOrientation = pdfKitDoc.options.size[0] > pdfKitDoc.options.size[1] ? 'landscape' : 'portrait';\r\n\r\n\tif (currentPage.pageSize.orientation !== previousPageOrientation) {\r\n\t\tvar width = pdfKitDoc.options.size[0];\r\n\t\tvar height = pdfKitDoc.options.size[1];\r\n\t\tpdfKitDoc.options.size = [height, width];\r\n\t}\r\n}\r\n\r\nfunction renderPages(pages, fontProvider, pdfKitDoc, patterns, progressCallback) {\r\n\tpdfKitDoc._pdfMakePages = pages;\r\n\tpdfKitDoc.addPage();\r\n\r\n\tvar totalItems = 0;\r\n\tif (progressCallback) {\r\n\t\tpages.forEach(function (page) {\r\n\t\t\ttotalItems += page.items.length;\r\n\t\t});\r\n\t}\r\n\r\n\tvar renderedItems = 0;\r\n\tprogressCallback = progressCallback || function () {\r\n\t};\r\n\r\n\tfor (var i = 0; i < pages.length; i++) {\r\n\t\tif (i > 0) {\r\n\t\t\tupdatePageOrientationInOptions(pages[i], pdfKitDoc);\r\n\t\t\tpdfKitDoc.addPage(pdfKitDoc.options);\r\n\t\t}\r\n\r\n\t\tvar page = pages[i];\r\n\t\tfor (var ii = 0, il = page.items.length; ii < il; ii++) {\r\n\t\t\tvar item = page.items[ii];\r\n\t\t\tswitch (item.type) {\r\n\t\t\t\tcase 'vector':\r\n\t\t\t\t\trenderVector(item.item, patterns, pdfKitDoc);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'line':\r\n\t\t\t\t\trenderLine(item.item, item.item.x, item.item.y, patterns, pdfKitDoc);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'image':\r\n\t\t\t\t\trenderImage(item.item, item.item.x, item.item.y, pdfKitDoc);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'svg':\r\n\t\t\t\t\trenderSVG(item.item, item.item.x, item.item.y, pdfKitDoc, fontProvider);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'beginClip':\r\n\t\t\t\t\tbeginClip(item.item, pdfKitDoc);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'endClip':\r\n\t\t\t\t\tendClip(pdfKitDoc);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\trenderedItems++;\r\n\t\t\tprogressCallback(renderedItems / totalItems);\r\n\t\t}\r\n\t\tif (page.watermark) {\r\n\t\t\trenderWatermark(page, pdfKitDoc);\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Shift the \"y\" height of the text baseline up or down (superscript or subscript,\r\n * respectively). The exact shift can / should be changed according to standard\r\n * conventions.\r\n *\r\n * @param {number} y\r\n * @param {any} inline\r\n */\r\nfunction offsetText(y, inline) {\r\n\tvar newY = y;\r\n\tif (inline.sup) {\r\n\t\tnewY -= inline.fontSize * 0.75;\r\n\t}\r\n\tif (inline.sub) {\r\n\t\tnewY += inline.fontSize * 0.35;\r\n\t}\r\n\treturn newY;\r\n}\r\n\r\nfunction renderLine(line, x, y, patterns, pdfKitDoc) {\r\n\tfunction preparePageNodeRefLine(_pageNodeRef, inline) {\r\n\t\tvar newWidth;\r\n\t\tvar diffWidth;\r\n\t\tvar textTools = new TextTools(null);\r\n\r\n\t\tif (isUndefined(_pageNodeRef.positions)) {\r\n\t\t\tthrow 'Page reference id not found';\r\n\t\t}\r\n\r\n\t\tvar pageNumber = _pageNodeRef.positions[0].pageNumber.toString();\r\n\r\n\t\tinline.text = pageNumber;\r\n\t\tnewWidth = textTools.widthOfString(inline.text, inline.font, inline.fontSize, inline.characterSpacing, inline.fontFeatures);\r\n\t\tdiffWidth = inline.width - newWidth;\r\n\t\tinline.width = newWidth;\r\n\r\n\t\tswitch (inline.alignment) {\r\n\t\t\tcase 'right':\r\n\t\t\t\tinline.x += diffWidth;\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'center':\r\n\t\t\t\tinline.x += diffWidth / 2;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tif (line._pageNodeRef) {\r\n\t\tpreparePageNodeRefLine(line._pageNodeRef, line.inlines[0]);\r\n\t}\r\n\r\n\tx = x || 0;\r\n\ty = y || 0;\r\n\r\n\tvar lineHeight = line.getHeight();\r\n\tvar ascenderHeight = line.getAscenderHeight();\r\n\tvar descent = lineHeight - ascenderHeight;\r\n\r\n\ttextDecorator.drawBackground(line, x, y, patterns, pdfKitDoc);\r\n\r\n\t//TODO: line.optimizeInlines();\r\n\tfor (var i = 0, l = line.inlines.length; i < l; i++) {\r\n\t\tvar inline = line.inlines[i];\r\n\t\tvar shiftToBaseline = lineHeight - ((inline.font.ascender / 1000) * inline.fontSize) - descent;\r\n\r\n\t\tif (inline._pageNodeRef) {\r\n\t\t\tpreparePageNodeRefLine(inline._pageNodeRef, inline);\r\n\t\t}\r\n\r\n\t\tvar options = {\r\n\t\t\tlineBreak: false,\r\n\t\t\ttextWidth: inline.width,\r\n\t\t\tcharacterSpacing: inline.characterSpacing,\r\n\t\t\twordCount: 1,\r\n\t\t\tlink: inline.link\r\n\t\t};\r\n\r\n\t\tif (inline.linkToDestination) {\r\n\t\t\toptions.goTo = inline.linkToDestination;\r\n\t\t}\r\n\r\n\t\tif (line.id && i === 0) {\r\n\t\t\toptions.destination = line.id;\r\n\t\t}\r\n\r\n\t\tif (inline.fontFeatures) {\r\n\t\t\toptions.features = inline.fontFeatures;\r\n\t\t}\r\n\r\n\t\tvar opacity = isNumber(inline.opacity) ? inline.opacity : 1;\r\n\t\tpdfKitDoc.opacity(opacity);\r\n\t\tpdfKitDoc.fill(inline.color || 'black');\r\n\r\n\t\tpdfKitDoc._font = inline.font;\r\n\t\tpdfKitDoc.fontSize(inline.fontSize);\r\n\r\n\t\tvar shiftedY = offsetText(y + shiftToBaseline, inline);\r\n\t\tpdfKitDoc.text(inline.text, x + inline.x, shiftedY, options);\r\n\r\n\t\tif (inline.linkToPage) {\r\n\t\t\tvar _ref = pdfKitDoc.ref({ Type: 'Action', S: 'GoTo', D: [inline.linkToPage, 0, 0] }).end();\r\n\t\t\tpdfKitDoc.annotate(x + inline.x, shiftedY, inline.width, inline.height, {\r\n\t\t\t\tSubtype: 'Link',\r\n\t\t\t\tDest: [inline.linkToPage - 1, 'XYZ', null, null, null]\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t}\r\n\t// Decorations won't draw correctly for superscript\r\n\ttextDecorator.drawDecorations(line, x, y, pdfKitDoc);\r\n}\r\n\r\nfunction renderWatermark(page, pdfKitDoc) {\r\n\tvar watermark = page.watermark;\r\n\r\n\tpdfKitDoc.fill(watermark.color);\r\n\tpdfKitDoc.opacity(watermark.opacity);\r\n\r\n\tpdfKitDoc.save();\r\n\r\n\tpdfKitDoc.rotate(watermark.angle, { origin: [pdfKitDoc.page.width / 2, pdfKitDoc.page.height / 2] });\r\n\r\n\tvar x = pdfKitDoc.page.width / 2 - watermark._size.size.width / 2;\r\n\tvar y = pdfKitDoc.page.height / 2 - watermark._size.size.height / 2;\r\n\r\n\tpdfKitDoc._font = watermark.font;\r\n\tpdfKitDoc.fontSize(watermark.fontSize);\r\n\tpdfKitDoc.text(watermark.text, x, y, { lineBreak: false });\r\n\r\n\tpdfKitDoc.restore();\r\n}\r\n\r\nfunction renderVector(vector, patterns, pdfKitDoc) {\r\n\t//TODO: pdf optimization (there's no need to write all properties everytime)\r\n\tpdfKitDoc.lineWidth(vector.lineWidth || 1);\r\n\tif (vector.dash) {\r\n\t\tpdfKitDoc.dash(vector.dash.length, { space: vector.dash.space || vector.dash.length, phase: vector.dash.phase || 0 });\r\n\t} else {\r\n\t\tpdfKitDoc.undash();\r\n\t}\r\n\tpdfKitDoc.lineJoin(vector.lineJoin || 'miter');\r\n\tpdfKitDoc.lineCap(vector.lineCap || 'butt');\r\n\r\n\t//TODO: clipping\r\n\r\n\tvar gradient = null;\r\n\r\n\tswitch (vector.type) {\r\n\t\tcase 'ellipse':\r\n\t\t\tpdfKitDoc.ellipse(vector.x, vector.y, vector.r1, vector.r2);\r\n\r\n\t\t\tif (vector.linearGradient) {\r\n\t\t\t\tgradient = pdfKitDoc.linearGradient(vector.x - vector.r1, vector.y, vector.x + vector.r1, vector.y);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase 'rect':\r\n\t\t\tif (vector.r) {\r\n\t\t\t\tpdfKitDoc.roundedRect(vector.x, vector.y, vector.w, vector.h, vector.r);\r\n\t\t\t} else {\r\n\t\t\t\tpdfKitDoc.rect(vector.x, vector.y, vector.w, vector.h);\r\n\t\t\t}\r\n\r\n\t\t\tif (vector.linearGradient) {\r\n\t\t\t\tgradient = pdfKitDoc.linearGradient(vector.x, vector.y, vector.x + vector.w, vector.y);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase 'line':\r\n\t\t\tpdfKitDoc.moveTo(vector.x1, vector.y1);\r\n\t\t\tpdfKitDoc.lineTo(vector.x2, vector.y2);\r\n\t\t\tbreak;\r\n\t\tcase 'polyline':\r\n\t\t\tif (vector.points.length === 0) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tpdfKitDoc.moveTo(vector.points[0].x, vector.points[0].y);\r\n\t\t\tfor (var i = 1, l = vector.points.length; i < l; i++) {\r\n\t\t\t\tpdfKitDoc.lineTo(vector.points[i].x, vector.points[i].y);\r\n\t\t\t}\r\n\r\n\t\t\tif (vector.points.length > 1) {\r\n\t\t\t\tvar p1 = vector.points[0];\r\n\t\t\t\tvar pn = vector.points[vector.points.length - 1];\r\n\r\n\t\t\t\tif (vector.closePath || p1.x === pn.x && p1.y === pn.y) {\r\n\t\t\t\t\tpdfKitDoc.closePath();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase 'path':\r\n\t\t\tpdfKitDoc.path(vector.d);\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\tif (vector.linearGradient && gradient) {\r\n\t\tvar step = 1 / (vector.linearGradient.length - 1);\r\n\r\n\t\tfor (var i = 0; i < vector.linearGradient.length; i++) {\r\n\t\t\tgradient.stop(i * step, vector.linearGradient[i]);\r\n\t\t}\r\n\r\n\t\tvector.color = gradient;\r\n\t}\r\n\r\n\tif (isPattern(vector.color)) {\r\n\t\tvector.color = getPattern(vector.color, patterns);\r\n\t}\r\n\r\n\tvar fillOpacity = isNumber(vector.fillOpacity) ? vector.fillOpacity : 1;\r\n\tvar strokeOpacity = isNumber(vector.strokeOpacity) ? vector.strokeOpacity : 1;\r\n\r\n\tif (vector.color && vector.lineColor) {\r\n\t\tpdfKitDoc.fillColor(vector.color, fillOpacity);\r\n\t\tpdfKitDoc.strokeColor(vector.lineColor, strokeOpacity);\r\n\t\tpdfKitDoc.fillAndStroke();\r\n\t} else if (vector.color) {\r\n\t\tpdfKitDoc.fillColor(vector.color, fillOpacity);\r\n\t\tpdfKitDoc.fill();\r\n\t} else {\r\n\t\tpdfKitDoc.strokeColor(vector.lineColor || 'black', strokeOpacity);\r\n\t\tpdfKitDoc.stroke();\r\n\t}\r\n}\r\n\r\nfunction renderImage(image, x, y, pdfKitDoc) {\r\n\tvar opacity = isNumber(image.opacity) ? image.opacity : 1;\r\n\tpdfKitDoc.opacity(opacity);\r\n\tif (image.cover) {\r\n\t\tvar align = image.cover.align || 'center';\r\n\t\tvar valign = image.cover.valign || 'center';\r\n\t\tvar width = image.cover.width ? image.cover.width : image.width;\r\n\t\tvar height = image.cover.height ? image.cover.height : image.height;\r\n\t\tpdfKitDoc.save();\r\n\t\tpdfKitDoc.rect(image.x, image.y, width, height).clip();\r\n\t\tpdfKitDoc.image(image.image, image.x, image.y, { cover: [width, height], align: align, valign: valign });\r\n\t\tpdfKitDoc.restore();\r\n\t} else {\r\n\t\tpdfKitDoc.image(image.image, image.x, image.y, { width: image._width, height: image._height });\r\n\t}\r\n\tif (image.link) {\r\n\t\tpdfKitDoc.link(image.x, image.y, image._width, image._height, image.link);\r\n\t}\r\n\tif (image.linkToPage) {\r\n\t\tpdfKitDoc.ref({ Type: 'Action', S: 'GoTo', D: [image.linkToPage, 0, 0] }).end();\r\n\t\tpdfKitDoc.annotate(image.x, image.y, image._width, image._height, { Subtype: 'Link', Dest: [image.linkToPage - 1, 'XYZ', null, null, null] });\r\n\t}\r\n\tif (image.linkToDestination) {\r\n\t\tpdfKitDoc.goTo(image.x, image.y, image._width, image._height, image.linkToDestination);\r\n\t}\r\n}\r\n\r\nfunction renderSVG(svg, x, y, pdfKitDoc, fontProvider) {\r\n\tvar options = Object.assign({ width: svg._width, height: svg._height, assumePt: true }, svg.options);\r\n\toptions.fontCallback = function (family, bold, italic) {\r\n\t\tvar fontsFamily = family.split(',').map(function (f) { return f.trim().replace(/('|\")/g, ''); });\r\n\t\tvar font = findFont(fontProvider.fonts, fontsFamily, svg.font || 'Roboto');\r\n\r\n\t\tvar fontFile = fontProvider.getFontFile(font, bold, italic);\r\n\t\tif (fontFile === null) {\r\n\t\t\tvar type = fontProvider.getFontType(bold, italic);\r\n\t\t\tthrow new Error('Font \\'' + font + '\\' in style \\'' + type + '\\' is not defined in the font section of the document definition.');\r\n\t\t}\r\n\r\n\t\treturn fontFile;\r\n\t};\r\n\r\n\tSVGtoPDF(pdfKitDoc, svg.svg, svg.x, svg.y, options);\r\n}\r\n\r\nfunction beginClip(rect, pdfKitDoc) {\r\n\tpdfKitDoc.save();\r\n\tpdfKitDoc.addContent('' + rect.x + ' ' + rect.y + ' ' + rect.width + ' ' + rect.height + ' re');\r\n\tpdfKitDoc.clip();\r\n}\r\n\r\nfunction endClip(pdfKitDoc) {\r\n\tpdfKitDoc.restore();\r\n}\r\n\r\nfunction createPatterns(patternDefinitions, pdfKitDoc) {\r\n\tvar patterns = {};\r\n\tObject.keys(patternDefinitions).forEach(function (p) {\r\n\t\tvar pattern = patternDefinitions[p];\r\n\t\tpatterns[p] = pdfKitDoc.pattern(pattern.boundingBox, pattern.xStep, pattern.yStep, pattern.pattern, pattern.colored);\r\n\t});\r\n\treturn patterns;\r\n}\r\n\r\nmodule.exports = PdfPrinter;\r\n","/*eslint no-unused-vars: [\"error\", {\"args\": \"none\"}]*/\r\n/*eslint no-redeclare: \"off\"*/\r\n\r\n'use strict';\r\n/* qr.js -- QR code generator in Javascript (revision 2011-01-19)\r\n * Written by Kang Seonghoon <public+qrjs@mearie.org>.\r\n *\r\n * This source code is in the public domain; if your jurisdiction does not\r\n * recognize the public domain the terms of Creative Commons CC0 license\r\n * apply. In the other words, you can always do what you want.\r\n */\r\n\r\n\r\n// per-version information (cf. JIS X 0510:2004 pp. 30--36, 71)\r\n//\r\n// [0]: the degree of generator polynomial by ECC levels\r\n// [1]: # of code blocks by ECC levels\r\n// [2]: left-top positions of alignment patterns\r\n//\r\n// the number in this table (in particular, [0]) does not exactly match with\r\n// the numbers in the specficiation. see augumenteccs below for the reason.\r\nvar VERSIONS = [\r\n\tnull,\r\n\t[[10, 7, 17, 13], [1, 1, 1, 1], []],\r\n\t[[16, 10, 28, 22], [1, 1, 1, 1], [4, 16]],\r\n\t[[26, 15, 22, 18], [1, 1, 2, 2], [4, 20]],\r\n\t[[18, 20, 16, 26], [2, 1, 4, 2], [4, 24]],\r\n\t[[24, 26, 22, 18], [2, 1, 4, 4], [4, 28]],\r\n\t[[16, 18, 28, 24], [4, 2, 4, 4], [4, 32]],\r\n\t[[18, 20, 26, 18], [4, 2, 5, 6], [4, 20, 36]],\r\n\t[[22, 24, 26, 22], [4, 2, 6, 6], [4, 22, 40]],\r\n\t[[22, 30, 24, 20], [5, 2, 8, 8], [4, 24, 44]],\r\n\t[[26, 18, 28, 24], [5, 4, 8, 8], [4, 26, 48]],\r\n\t[[30, 20, 24, 28], [5, 4, 11, 8], [4, 28, 52]],\r\n\t[[22, 24, 28, 26], [8, 4, 11, 10], [4, 30, 56]],\r\n\t[[22, 26, 22, 24], [9, 4, 16, 12], [4, 32, 60]],\r\n\t[[24, 30, 24, 20], [9, 4, 16, 16], [4, 24, 44, 64]],\r\n\t[[24, 22, 24, 30], [10, 6, 18, 12], [4, 24, 46, 68]],\r\n\t[[28, 24, 30, 24], [10, 6, 16, 17], [4, 24, 48, 72]],\r\n\t[[28, 28, 28, 28], [11, 6, 19, 16], [4, 28, 52, 76]],\r\n\t[[26, 30, 28, 28], [13, 6, 21, 18], [4, 28, 54, 80]],\r\n\t[[26, 28, 26, 26], [14, 7, 25, 21], [4, 28, 56, 84]],\r\n\t[[26, 28, 28, 30], [16, 8, 25, 20], [4, 32, 60, 88]],\r\n\t[[26, 28, 30, 28], [17, 8, 25, 23], [4, 26, 48, 70, 92]],\r\n\t[[28, 28, 24, 30], [17, 9, 34, 23], [4, 24, 48, 72, 96]],\r\n\t[[28, 30, 30, 30], [18, 9, 30, 25], [4, 28, 52, 76, 100]],\r\n\t[[28, 30, 30, 30], [20, 10, 32, 27], [4, 26, 52, 78, 104]],\r\n\t[[28, 26, 30, 30], [21, 12, 35, 29], [4, 30, 56, 82, 108]],\r\n\t[[28, 28, 30, 28], [23, 12, 37, 34], [4, 28, 56, 84, 112]],\r\n\t[[28, 30, 30, 30], [25, 12, 40, 34], [4, 32, 60, 88, 116]],\r\n\t[[28, 30, 30, 30], [26, 13, 42, 35], [4, 24, 48, 72, 96, 120]],\r\n\t[[28, 30, 30, 30], [28, 14, 45, 38], [4, 28, 52, 76, 100, 124]],\r\n\t[[28, 30, 30, 30], [29, 15, 48, 40], [4, 24, 50, 76, 102, 128]],\r\n\t[[28, 30, 30, 30], [31, 16, 51, 43], [4, 28, 54, 80, 106, 132]],\r\n\t[[28, 30, 30, 30], [33, 17, 54, 45], [4, 32, 58, 84, 110, 136]],\r\n\t[[28, 30, 30, 30], [35, 18, 57, 48], [4, 28, 56, 84, 112, 140]],\r\n\t[[28, 30, 30, 30], [37, 19, 60, 51], [4, 32, 60, 88, 116, 144]],\r\n\t[[28, 30, 30, 30], [38, 19, 63, 53], [4, 28, 52, 76, 100, 124, 148]],\r\n\t[[28, 30, 30, 30], [40, 20, 66, 56], [4, 22, 48, 74, 100, 126, 152]],\r\n\t[[28, 30, 30, 30], [43, 21, 70, 59], [4, 26, 52, 78, 104, 130, 156]],\r\n\t[[28, 30, 30, 30], [45, 22, 74, 62], [4, 30, 56, 82, 108, 134, 160]],\r\n\t[[28, 30, 30, 30], [47, 24, 77, 65], [4, 24, 52, 80, 108, 136, 164]],\r\n\t[[28, 30, 30, 30], [49, 25, 81, 68], [4, 28, 56, 84, 112, 140, 168]]];\r\n\r\n// mode constants (cf. Table 2 in JIS X 0510:2004 p. 16)\r\nvar MODE_TERMINATOR = 0;\r\nvar MODE_NUMERIC = 1, MODE_ALPHANUMERIC = 2, MODE_OCTET = 4, MODE_KANJI = 8;\r\n\r\n// validation regexps\r\nvar NUMERIC_REGEXP = /^\\d*$/;\r\nvar ALPHANUMERIC_REGEXP = /^[A-Za-z0-9 $%*+\\-./:]*$/;\r\nvar ALPHANUMERIC_OUT_REGEXP = /^[A-Z0-9 $%*+\\-./:]*$/;\r\n\r\n// ECC levels (cf. Table 22 in JIS X 0510:2004 p. 45)\r\nvar ECCLEVEL_L = 1, ECCLEVEL_M = 0, ECCLEVEL_Q = 3, ECCLEVEL_H = 2;\r\n\r\n// GF(2^8)-to-integer mapping with a reducing polynomial x^8+x^4+x^3+x^2+1\r\n// invariant: GF256_MAP[GF256_INVMAP[i]] == i for all i in [1,256)\r\nvar GF256_MAP = [], GF256_INVMAP = [-1];\r\nfor (var i = 0, v = 1; i < 255; ++i) {\r\n\tGF256_MAP.push(v);\r\n\tGF256_INVMAP[v] = i;\r\n\tv = (v * 2) ^ (v >= 128 ? 0x11d : 0);\r\n}\r\n\r\n// generator polynomials up to degree 30\r\n// (should match with polynomials in JIS X 0510:2004 Appendix A)\r\n//\r\n// generator polynomial of degree K is product of (x-\\alpha^0), (x-\\alpha^1),\r\n// ..., (x-\\alpha^(K-1)). by convention, we omit the K-th coefficient (always 1)\r\n// from the result; also other coefficients are written in terms of the exponent\r\n// to \\alpha to avoid the redundant calculation. (see also calculateecc below.)\r\nvar GF256_GENPOLY = [[]];\r\nfor (var i = 0; i < 30; ++i) {\r\n\tvar prevpoly = GF256_GENPOLY[i], poly = [];\r\n\tfor (var j = 0; j <= i; ++j) {\r\n\t\tvar a = (j < i ? GF256_MAP[prevpoly[j]] : 0);\r\n\t\tvar b = GF256_MAP[(i + (prevpoly[j - 1] || 0)) % 255];\r\n\t\tpoly.push(GF256_INVMAP[a ^ b]);\r\n\t}\r\n\tGF256_GENPOLY.push(poly);\r\n}\r\n\r\n// alphanumeric character mapping (cf. Table 5 in JIS X 0510:2004 p. 19)\r\nvar ALPHANUMERIC_MAP = {};\r\nfor (var i = 0; i < 45; ++i) {\r\n\tALPHANUMERIC_MAP['0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:'.charAt(i)] = i;\r\n}\r\n\r\n// mask functions in terms of row # and column #\r\n// (cf. Table 20 in JIS X 0510:2004 p. 42)\r\n/*jshint unused: false */\r\nvar MASKFUNCS = [\r\n\tfunction (i, j) {\r\n\t\treturn (i + j) % 2 === 0;\r\n\t},\r\n\tfunction (i, j) {\r\n\t\treturn i % 2 === 0;\r\n\t},\r\n\tfunction (i, j) {\r\n\t\treturn j % 3 === 0;\r\n\t},\r\n\tfunction (i, j) {\r\n\t\treturn (i + j) % 3 === 0;\r\n\t},\r\n\tfunction (i, j) {\r\n\t\treturn (((i / 2) | 0) + ((j / 3) | 0)) % 2 === 0;\r\n\t},\r\n\tfunction (i, j) {\r\n\t\treturn (i * j) % 2 + (i * j) % 3 === 0;\r\n\t},\r\n\tfunction (i, j) {\r\n\t\treturn ((i * j) % 2 + (i * j) % 3) % 2 === 0;\r\n\t},\r\n\tfunction (i, j) {\r\n\t\treturn ((i + j) % 2 + (i * j) % 3) % 2 === 0;\r\n\t}];\r\n\r\n// returns true when the version information has to be embeded.\r\nvar needsverinfo = function (ver) {\r\n\treturn ver > 6;\r\n};\r\n\r\n// returns the size of entire QR code for given version.\r\nvar getsizebyver = function (ver) {\r\n\treturn 4 * ver + 17;\r\n};\r\n\r\n// returns the number of bits available for code words in this version.\r\nvar nfullbits = function (ver) {\r\n\t/*\r\n\t * |<--------------- n --------------->|\r\n\t * |        |<----- n-17 ---->|        |\r\n\t * +-------+                ///+-------+ ----\r\n\t * |       |                ///|       |    ^\r\n\t * |  9x9  |       @@@@@    ///|  9x8  |    |\r\n\t * |       | # # # @5x5@ # # # |       |    |\r\n\t * +-------+       @@@@@       +-------+    |\r\n\t *       #                               ---|\r\n\t *                                        ^ |\r\n\t *       #                                |\r\n\t *     @@@@@       @@@@@       @@@@@      | n\r\n\t *     @5x5@       @5x5@       @5x5@   n-17\r\n\t *     @@@@@       @@@@@       @@@@@      | |\r\n\t *       #                                | |\r\n\t * //////                                 v |\r\n\t * //////#                               ---|\r\n\t * +-------+       @@@@@       @@@@@        |\r\n\t * |       |       @5x5@       @5x5@        |\r\n\t * |  8x9  |       @@@@@       @@@@@        |\r\n\t * |       |                                v\r\n\t * +-------+                             ----\r\n\t *\r\n\t * when the entire code has n^2 modules and there are m^2-3 alignment\r\n\t * patterns, we have:\r\n\t * - 225 (= 9x9 + 9x8 + 8x9) modules for finder patterns and\r\n\t *   format information;\r\n\t * - 2n-34 (= 2(n-17)) modules for timing patterns;\r\n\t * - 36 (= 3x6 + 6x3) modules for version information, if any;\r\n\t * - 25m^2-75 (= (m^2-3)(5x5)) modules for alignment patterns\r\n\t *   if any, but 10m-20 (= 2(m-2)x5) of them overlaps with\r\n\t *   timing patterns.\r\n\t */\r\n\tvar v = VERSIONS[ver];\r\n\tvar nbits = 16 * ver * ver + 128 * ver + 64; // finder, timing and format info.\r\n\tif (needsverinfo(ver))\r\n\t\tnbits -= 36; // version information\r\n\tif (v[2].length) { // alignment patterns\r\n\t\tnbits -= 25 * v[2].length * v[2].length - 10 * v[2].length - 55;\r\n\t}\r\n\treturn nbits;\r\n};\r\n\r\n// returns the number of bits available for data portions (i.e. excludes ECC\r\n// bits but includes mode and length bits) in this version and ECC level.\r\nvar ndatabits = function (ver, ecclevel) {\r\n\tvar nbits = nfullbits(ver) & ~7; // no sub-octet code words\r\n\tvar v = VERSIONS[ver];\r\n\tnbits -= 8 * v[0][ecclevel] * v[1][ecclevel]; // ecc bits\r\n\treturn nbits;\r\n};\r\n\r\n// returns the number of bits required for the length of data.\r\n// (cf. Table 3 in JIS X 0510:2004 p. 16)\r\nvar ndatalenbits = function (ver, mode) {\r\n\tswitch (mode) {\r\n\t\tcase MODE_NUMERIC:\r\n\t\t\treturn (ver < 10 ? 10 : ver < 27 ? 12 : 14);\r\n\t\tcase MODE_ALPHANUMERIC:\r\n\t\t\treturn (ver < 10 ? 9 : ver < 27 ? 11 : 13);\r\n\t\tcase MODE_OCTET:\r\n\t\t\treturn (ver < 10 ? 8 : 16);\r\n\t\tcase MODE_KANJI:\r\n\t\t\treturn (ver < 10 ? 8 : ver < 27 ? 10 : 12);\r\n\t}\r\n};\r\n\r\n// returns the maximum length of data possible in given configuration.\r\nvar getmaxdatalen = function (ver, mode, ecclevel) {\r\n\tvar nbits = ndatabits(ver, ecclevel) - 4 - ndatalenbits(ver, mode); // 4 for mode bits\r\n\tswitch (mode) {\r\n\t\tcase MODE_NUMERIC:\r\n\t\t\treturn ((nbits / 10) | 0) * 3 + (nbits % 10 < 4 ? 0 : nbits % 10 < 7 ? 1 : 2);\r\n\t\tcase MODE_ALPHANUMERIC:\r\n\t\t\treturn ((nbits / 11) | 0) * 2 + (nbits % 11 < 6 ? 0 : 1);\r\n\t\tcase MODE_OCTET:\r\n\t\t\treturn (nbits / 8) | 0;\r\n\t\tcase MODE_KANJI:\r\n\t\t\treturn (nbits / 13) | 0;\r\n\t}\r\n};\r\n\r\n// checks if the given data can be encoded in given mode, and returns\r\n// the converted data for the further processing if possible. otherwise\r\n// returns null.\r\n//\r\n// this function does not check the length of data; it is a duty of\r\n// encode function below (as it depends on the version and ECC level too).\r\nvar validatedata = function (mode, data) {\r\n\tswitch (mode) {\r\n\t\tcase MODE_NUMERIC:\r\n\t\t\tif (!data.match(NUMERIC_REGEXP))\r\n\t\t\t\treturn null;\r\n\t\t\treturn data;\r\n\r\n\t\tcase MODE_ALPHANUMERIC:\r\n\t\t\tif (!data.match(ALPHANUMERIC_REGEXP))\r\n\t\t\t\treturn null;\r\n\t\t\treturn data.toUpperCase();\r\n\r\n\t\tcase MODE_OCTET:\r\n\t\t\tif (typeof data === 'string') { // encode as utf-8 string\r\n\t\t\t\tvar newdata = [];\r\n\t\t\t\tfor (var i = 0; i < data.length; ++i) {\r\n\t\t\t\t\tvar ch = data.charCodeAt(i);\r\n\t\t\t\t\tif (ch < 0x80) {\r\n\t\t\t\t\t\tnewdata.push(ch);\r\n\t\t\t\t\t} else if (ch < 0x800) {\r\n\t\t\t\t\t\tnewdata.push(0xc0 | (ch >> 6),\r\n\t\t\t\t\t\t\t0x80 | (ch & 0x3f));\r\n\t\t\t\t\t} else if (ch < 0x10000) {\r\n\t\t\t\t\t\tnewdata.push(0xe0 | (ch >> 12),\r\n\t\t\t\t\t\t\t0x80 | ((ch >> 6) & 0x3f),\r\n\t\t\t\t\t\t\t0x80 | (ch & 0x3f));\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tnewdata.push(0xf0 | (ch >> 18),\r\n\t\t\t\t\t\t\t0x80 | ((ch >> 12) & 0x3f),\r\n\t\t\t\t\t\t\t0x80 | ((ch >> 6) & 0x3f),\r\n\t\t\t\t\t\t\t0x80 | (ch & 0x3f));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn newdata;\r\n\t\t\t} else {\r\n\t\t\t\treturn data;\r\n\t\t\t}\r\n\t}\r\n};\r\n\r\n// returns the code words (sans ECC bits) for given data and configurations.\r\n// requires data to be preprocessed by validatedata. no length check is\r\n// performed, and everything has to be checked before calling this function.\r\nvar encode = function (ver, mode, data, maxbuflen) {\r\n\tvar buf = [];\r\n\tvar bits = 0, remaining = 8;\r\n\tvar datalen = data.length;\r\n\r\n\t// this function is intentionally no-op when n=0.\r\n\tvar pack = function (x, n) {\r\n\t\tif (n >= remaining) {\r\n\t\t\tbuf.push(bits | (x >> (n -= remaining)));\r\n\t\t\twhile (n >= 8)\r\n\t\t\t\tbuf.push((x >> (n -= 8)) & 255);\r\n\t\t\tbits = 0;\r\n\t\t\tremaining = 8;\r\n\t\t}\r\n\t\tif (n > 0)\r\n\t\t\tbits |= (x & ((1 << n) - 1)) << (remaining -= n);\r\n\t};\r\n\r\n\tvar nlenbits = ndatalenbits(ver, mode);\r\n\tpack(mode, 4);\r\n\tpack(datalen, nlenbits);\r\n\r\n\tswitch (mode) {\r\n\t\tcase MODE_NUMERIC:\r\n\t\t\tfor (var i = 2; i < datalen; i += 3) {\r\n\t\t\t\tpack(parseInt(data.substring(i - 2, i + 1), 10), 10);\r\n\t\t\t}\r\n\t\t\tpack(parseInt(data.substring(i - 2), 10), [0, 4, 7][datalen % 3]);\r\n\t\t\tbreak;\r\n\r\n\t\tcase MODE_ALPHANUMERIC:\r\n\t\t\tfor (var i = 1; i < datalen; i += 2) {\r\n\t\t\t\tpack(ALPHANUMERIC_MAP[data.charAt(i - 1)] * 45 +\r\n\t\t\t\t\tALPHANUMERIC_MAP[data.charAt(i)], 11);\r\n\t\t\t}\r\n\t\t\tif (datalen % 2 == 1) {\r\n\t\t\t\tpack(ALPHANUMERIC_MAP[data.charAt(i - 1)], 6);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\tcase MODE_OCTET:\r\n\t\t\tfor (var i = 0; i < datalen; ++i) {\r\n\t\t\t\tpack(data[i], 8);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\t// final bits. it is possible that adding terminator causes the buffer\r\n\t// to overflow, but then the buffer truncated to the maximum size will\r\n\t// be valid as the truncated terminator mode bits and padding is\r\n\t// identical in appearance (cf. JIS X 0510:2004 sec 8.4.8).\r\n\tpack(MODE_TERMINATOR, 4);\r\n\tif (remaining < 8)\r\n\t\tbuf.push(bits);\r\n\r\n\t// the padding to fill up the remaining space. we should not add any\r\n\t// words when the overflow already occurred.\r\n\twhile (buf.length + 1 < maxbuflen)\r\n\t\tbuf.push(0xec, 0x11);\r\n\tif (buf.length < maxbuflen)\r\n\t\tbuf.push(0xec);\r\n\treturn buf;\r\n};\r\n\r\n// calculates ECC code words for given code words and generator polynomial.\r\n//\r\n// this is quite similar to CRC calculation as both Reed-Solomon and CRC use\r\n// the certain kind of cyclic codes, which is effectively the division of\r\n// zero-augumented polynomial by the generator polynomial. the only difference\r\n// is that Reed-Solomon uses GF(2^8), instead of CRC's GF(2), and Reed-Solomon\r\n// uses the different generator polynomial than CRC's.\r\nvar calculateecc = function (poly, genpoly) {\r\n\tvar modulus = poly.slice(0);\r\n\tvar polylen = poly.length, genpolylen = genpoly.length;\r\n\tfor (var i = 0; i < genpolylen; ++i)\r\n\t\tmodulus.push(0);\r\n\tfor (var i = 0; i < polylen; ) {\r\n\t\tvar quotient = GF256_INVMAP[modulus[i++]];\r\n\t\tif (quotient >= 0) {\r\n\t\t\tfor (var j = 0; j < genpolylen; ++j) {\r\n\t\t\t\tmodulus[i + j] ^= GF256_MAP[(quotient + genpoly[j]) % 255];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn modulus.slice(polylen);\r\n};\r\n\r\n// auguments ECC code words to given code words. the resulting words are\r\n// ready to be encoded in the matrix.\r\n//\r\n// the much of actual augumenting procedure follows JIS X 0510:2004 sec 8.7.\r\n// the code is simplified using the fact that the size of each code & ECC\r\n// blocks is almost same; for example, when we have 4 blocks and 46 data words\r\n// the number of code words in those blocks are 11, 11, 12, 12 respectively.\r\nvar augumenteccs = function (poly, nblocks, genpoly) {\r\n\tvar subsizes = [];\r\n\tvar subsize = (poly.length / nblocks) | 0, subsize0 = 0;\r\n\tvar pivot = nblocks - poly.length % nblocks;\r\n\tfor (var i = 0; i < pivot; ++i) {\r\n\t\tsubsizes.push(subsize0);\r\n\t\tsubsize0 += subsize;\r\n\t}\r\n\tfor (var i = pivot; i < nblocks; ++i) {\r\n\t\tsubsizes.push(subsize0);\r\n\t\tsubsize0 += subsize + 1;\r\n\t}\r\n\tsubsizes.push(subsize0);\r\n\r\n\tvar eccs = [];\r\n\tfor (var i = 0; i < nblocks; ++i) {\r\n\t\teccs.push(calculateecc(poly.slice(subsizes[i], subsizes[i + 1]), genpoly));\r\n\t}\r\n\r\n\tvar result = [];\r\n\tvar nitemsperblock = (poly.length / nblocks) | 0;\r\n\tfor (var i = 0; i < nitemsperblock; ++i) {\r\n\t\tfor (var j = 0; j < nblocks; ++j) {\r\n\t\t\tresult.push(poly[subsizes[j] + i]);\r\n\t\t}\r\n\t}\r\n\tfor (var j = pivot; j < nblocks; ++j) {\r\n\t\tresult.push(poly[subsizes[j + 1] - 1]);\r\n\t}\r\n\tfor (var i = 0; i < genpoly.length; ++i) {\r\n\t\tfor (var j = 0; j < nblocks; ++j) {\r\n\t\t\tresult.push(eccs[j][i]);\r\n\t\t}\r\n\t}\r\n\treturn result;\r\n};\r\n\r\n// auguments BCH(p+q,q) code to the polynomial over GF(2), given the proper\r\n// genpoly. the both input and output are in binary numbers, and unlike\r\n// calculateecc genpoly should include the 1 bit for the highest degree.\r\n//\r\n// actual polynomials used for this procedure are as follows:\r\n// - p=10, q=5, genpoly=x^10+x^8+x^5+x^4+x^2+x+1 (JIS X 0510:2004 Appendix C)\r\n// - p=18, q=6, genpoly=x^12+x^11+x^10+x^9+x^8+x^5+x^2+1 (ibid. Appendix D)\r\nvar augumentbch = function (poly, p, genpoly, q) {\r\n\tvar modulus = poly << q;\r\n\tfor (var i = p - 1; i >= 0; --i) {\r\n\t\tif ((modulus >> (q + i)) & 1)\r\n\t\t\tmodulus ^= genpoly << i;\r\n\t}\r\n\treturn (poly << q) | modulus;\r\n};\r\n\r\n// creates the base matrix for given version. it returns two matrices, one of\r\n// them is the actual one and the another represents the \"reserved\" portion\r\n// (e.g. finder and timing patterns) of the matrix.\r\n//\r\n// some entries in the matrix may be undefined, rather than 0 or 1. this is\r\n// intentional (no initialization needed!), and putdata below will fill\r\n// the remaining ones.\r\nvar makebasematrix = function (ver) {\r\n\tvar v = VERSIONS[ver], n = getsizebyver(ver);\r\n\tvar matrix = [], reserved = [];\r\n\tfor (var i = 0; i < n; ++i) {\r\n\t\tmatrix.push([]);\r\n\t\treserved.push([]);\r\n\t}\r\n\r\n\tvar blit = function (y, x, h, w, bits) {\r\n\t\tfor (var i = 0; i < h; ++i) {\r\n\t\t\tfor (var j = 0; j < w; ++j) {\r\n\t\t\t\tmatrix[y + i][x + j] = (bits[i] >> j) & 1;\r\n\t\t\t\treserved[y + i][x + j] = 1;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// finder patterns and a part of timing patterns\r\n\t// will also mark the format information area (not yet written) as reserved.\r\n\tblit(0, 0, 9, 9, [0x7f, 0x41, 0x5d, 0x5d, 0x5d, 0x41, 0x17f, 0x00, 0x40]);\r\n\tblit(n - 8, 0, 8, 9, [0x100, 0x7f, 0x41, 0x5d, 0x5d, 0x5d, 0x41, 0x7f]);\r\n\tblit(0, n - 8, 9, 8, [0xfe, 0x82, 0xba, 0xba, 0xba, 0x82, 0xfe, 0x00, 0x00]);\r\n\r\n\t// the rest of timing patterns\r\n\tfor (var i = 9; i < n - 8; ++i) {\r\n\t\tmatrix[6][i] = matrix[i][6] = ~i & 1;\r\n\t\treserved[6][i] = reserved[i][6] = 1;\r\n\t}\r\n\r\n\t// alignment patterns\r\n\tvar aligns = v[2], m = aligns.length;\r\n\tfor (var i = 0; i < m; ++i) {\r\n\t\tvar minj = (i === 0 || i === m - 1 ? 1 : 0), maxj = (i === 0 ? m - 1 : m);\r\n\t\tfor (var j = minj; j < maxj; ++j) {\r\n\t\t\tblit(aligns[i], aligns[j], 5, 5, [0x1f, 0x11, 0x15, 0x11, 0x1f]);\r\n\t\t}\r\n\t}\r\n\r\n\t// version information\r\n\tif (needsverinfo(ver)) {\r\n\t\tvar code = augumentbch(ver, 6, 0x1f25, 12);\r\n\t\tvar k = 0;\r\n\t\tfor (var i = 0; i < 6; ++i) {\r\n\t\t\tfor (var j = 0; j < 3; ++j) {\r\n\t\t\t\tmatrix[i][(n - 11) + j] = matrix[(n - 11) + j][i] = (code >> k++) & 1;\r\n\t\t\t\treserved[i][(n - 11) + j] = reserved[(n - 11) + j][i] = 1;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn {matrix: matrix, reserved: reserved};\r\n};\r\n\r\n// fills the data portion (i.e. unmarked in reserved) of the matrix with given\r\n// code words. the size of code words should be no more than available bits,\r\n// and remaining bits are padded to 0 (cf. JIS X 0510:2004 sec 8.7.3).\r\nvar putdata = function (matrix, reserved, buf) {\r\n\tvar n = matrix.length;\r\n\tvar k = 0, dir = -1;\r\n\tfor (var i = n - 1; i >= 0; i -= 2) {\r\n\t\tif (i == 6)\r\n\t\t\t--i; // skip the entire timing pattern column\r\n\t\tvar jj = (dir < 0 ? n - 1 : 0);\r\n\t\tfor (var j = 0; j < n; ++j) {\r\n\t\t\tfor (var ii = i; ii > i - 2; --ii) {\r\n\t\t\t\tif (!reserved[jj][ii]) {\r\n\t\t\t\t\t// may overflow, but (undefined >> x)\r\n\t\t\t\t\t// is 0 so it will auto-pad to zero.\r\n\t\t\t\t\tmatrix[jj][ii] = (buf[k >> 3] >> (~k & 7)) & 1;\r\n\t\t\t\t\t++k;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tjj += dir;\r\n\t\t}\r\n\t\tdir = -dir;\r\n\t}\r\n\treturn matrix;\r\n};\r\n\r\n// XOR-masks the data portion of the matrix. repeating the call with the same\r\n// arguments will revert the prior call (convenient in the matrix evaluation).\r\nvar maskdata = function (matrix, reserved, mask) {\r\n\tvar maskf = MASKFUNCS[mask];\r\n\tvar n = matrix.length;\r\n\tfor (var i = 0; i < n; ++i) {\r\n\t\tfor (var j = 0; j < n; ++j) {\r\n\t\t\tif (!reserved[i][j])\r\n\t\t\t\tmatrix[i][j] ^= maskf(i, j);\r\n\t\t}\r\n\t}\r\n\treturn matrix;\r\n};\r\n\r\n// puts the format information.\r\nvar putformatinfo = function (matrix, reserved, ecclevel, mask) {\r\n\tvar n = matrix.length;\r\n\tvar code = augumentbch((ecclevel << 3) | mask, 5, 0x537, 10) ^ 0x5412;\r\n\tfor (var i = 0; i < 15; ++i) {\r\n\t\tvar r = [0, 1, 2, 3, 4, 5, 7, 8, n - 7, n - 6, n - 5, n - 4, n - 3, n - 2, n - 1][i];\r\n\t\tvar c = [n - 1, n - 2, n - 3, n - 4, n - 5, n - 6, n - 7, n - 8, 7, 5, 4, 3, 2, 1, 0][i];\r\n\t\tmatrix[r][8] = matrix[8][c] = (code >> i) & 1;\r\n\t\t// we don't have to mark those bits reserved; always done\r\n\t\t// in makebasematrix above.\r\n\t}\r\n\treturn matrix;\r\n};\r\n\r\n// evaluates the resulting matrix and returns the score (lower is better).\r\n// (cf. JIS X 0510:2004 sec 8.8.2)\r\n//\r\n// the evaluation procedure tries to avoid the problematic patterns naturally\r\n// occuring from the original matrix. for example, it penaltizes the patterns\r\n// which just look like the finder pattern which will confuse the decoder.\r\n// we choose the mask which results in the lowest score among 8 possible ones.\r\n//\r\n// note: zxing seems to use the same procedure and in many cases its choice\r\n// agrees to ours, but sometimes it does not. practically it doesn't matter.\r\nvar evaluatematrix = function (matrix) {\r\n\t// N1+(k-5) points for each consecutive row of k same-colored modules,\r\n\t// where k >= 5. no overlapping row counts.\r\n\tvar PENALTY_CONSECUTIVE = 3;\r\n\t// N2 points for each 2x2 block of same-colored modules.\r\n\t// overlapping block does count.\r\n\tvar PENALTY_TWOBYTWO = 3;\r\n\t// N3 points for each pattern with >4W:1B:1W:3B:1W:1B or\r\n\t// 1B:1W:3B:1W:1B:>4W, or their multiples (e.g. highly unlikely,\r\n\t// but 13W:3B:3W:9B:3W:3B counts).\r\n\tvar PENALTY_FINDERLIKE = 40;\r\n\t// N4*k points for every (5*k)% deviation from 50% black density.\r\n\t// i.e. k=1 for 55~60% and 40~45%, k=2 for 60~65% and 35~40%, etc.\r\n\tvar PENALTY_DENSITY = 10;\r\n\r\n\tvar evaluategroup = function (groups) { // assumes [W,B,W,B,W,...,B,W]\r\n\t\tvar score = 0;\r\n\t\tfor (var i = 0; i < groups.length; ++i) {\r\n\t\t\tif (groups[i] >= 5)\r\n\t\t\t\tscore += PENALTY_CONSECUTIVE + (groups[i] - 5);\r\n\t\t}\r\n\t\tfor (var i = 5; i < groups.length; i += 2) {\r\n\t\t\tvar p = groups[i];\r\n\t\t\tif (groups[i - 1] == p && groups[i - 2] == 3 * p && groups[i - 3] == p &&\r\n\t\t\t\tgroups[i - 4] == p && (groups[i - 5] >= 4 * p || groups[i + 1] >= 4 * p)) {\r\n\t\t\t\t// this part differs from zxing...\r\n\t\t\t\tscore += PENALTY_FINDERLIKE;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn score;\r\n\t};\r\n\r\n\tvar n = matrix.length;\r\n\tvar score = 0, nblacks = 0;\r\n\tfor (var i = 0; i < n; ++i) {\r\n\t\tvar row = matrix[i];\r\n\t\tvar groups;\r\n\r\n\t\t// evaluate the current row\r\n\t\tgroups = [0]; // the first empty group of white\r\n\t\tfor (var j = 0; j < n; ) {\r\n\t\t\tvar k;\r\n\t\t\tfor (k = 0; j < n && row[j]; ++k)\r\n\t\t\t\t++j;\r\n\t\t\tgroups.push(k);\r\n\t\t\tfor (k = 0; j < n && !row[j]; ++k)\r\n\t\t\t\t++j;\r\n\t\t\tgroups.push(k);\r\n\t\t}\r\n\t\tscore += evaluategroup(groups);\r\n\r\n\t\t// evaluate the current column\r\n\t\tgroups = [0];\r\n\t\tfor (var j = 0; j < n; ) {\r\n\t\t\tvar k;\r\n\t\t\tfor (k = 0; j < n && matrix[j][i]; ++k)\r\n\t\t\t\t++j;\r\n\t\t\tgroups.push(k);\r\n\t\t\tfor (k = 0; j < n && !matrix[j][i]; ++k)\r\n\t\t\t\t++j;\r\n\t\t\tgroups.push(k);\r\n\t\t}\r\n\t\tscore += evaluategroup(groups);\r\n\r\n\t\t// check the 2x2 box and calculate the density\r\n\t\tvar nextrow = matrix[i + 1] || [];\r\n\t\tnblacks += row[0];\r\n\t\tfor (var j = 1; j < n; ++j) {\r\n\t\t\tvar p = row[j];\r\n\t\t\tnblacks += p;\r\n\t\t\t// at least comparison with next row should be strict...\r\n\t\t\tif (row[j - 1] == p && nextrow[j] === p && nextrow[j - 1] === p) {\r\n\t\t\t\tscore += PENALTY_TWOBYTWO;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tscore += PENALTY_DENSITY * ((Math.abs(nblacks / n / n - 0.5) / 0.05) | 0);\r\n\treturn score;\r\n};\r\n\r\n// returns the fully encoded QR code matrix which contains given data.\r\n// it also chooses the best mask automatically when mask is -1.\r\nvar generate = function (data, ver, mode, ecclevel, mask) {\r\n\tvar v = VERSIONS[ver];\r\n\tvar buf = encode(ver, mode, data, ndatabits(ver, ecclevel) >> 3);\r\n\tbuf = augumenteccs(buf, v[1][ecclevel], GF256_GENPOLY[v[0][ecclevel]]);\r\n\r\n\tvar result = makebasematrix(ver);\r\n\tvar matrix = result.matrix, reserved = result.reserved;\r\n\tputdata(matrix, reserved, buf);\r\n\r\n\tif (mask < 0) {\r\n\t\t// find the best mask\r\n\t\tmaskdata(matrix, reserved, 0);\r\n\t\tputformatinfo(matrix, reserved, ecclevel, 0);\r\n\t\tvar bestmask = 0, bestscore = evaluatematrix(matrix);\r\n\t\tmaskdata(matrix, reserved, 0);\r\n\t\tfor (mask = 1; mask < 8; ++mask) {\r\n\t\t\tmaskdata(matrix, reserved, mask);\r\n\t\t\tputformatinfo(matrix, reserved, ecclevel, mask);\r\n\t\t\tvar score = evaluatematrix(matrix);\r\n\t\t\tif (bestscore > score) {\r\n\t\t\t\tbestscore = score;\r\n\t\t\t\tbestmask = mask;\r\n\t\t\t}\r\n\t\t\tmaskdata(matrix, reserved, mask);\r\n\t\t}\r\n\t\tmask = bestmask;\r\n\t}\r\n\r\n\tmaskdata(matrix, reserved, mask);\r\n\tputformatinfo(matrix, reserved, ecclevel, mask);\r\n\treturn matrix;\r\n};\r\n\r\n// the public interface is trivial; the options available are as follows:\r\n//\r\n// - version: an integer in [1,40]. when omitted (or -1) the smallest possible\r\n//   version is chosen.\r\n// - mode: one of 'numeric', 'alphanumeric', 'octet'. when omitted the smallest\r\n//   possible mode is chosen.\r\n// - eccLevel: one of 'L', 'M', 'Q', 'H'. defaults to 'L'.\r\n// - mask: an integer in [0,7]. when omitted (or -1) the best mask is chosen.\r\n//\r\n\r\nfunction generateFrame(data, options) {\r\n\tvar MODES = {'numeric': MODE_NUMERIC, 'alphanumeric': MODE_ALPHANUMERIC,\r\n\t\t'octet': MODE_OCTET};\r\n\tvar ECCLEVELS = {'L': ECCLEVEL_L, 'M': ECCLEVEL_M, 'Q': ECCLEVEL_Q,\r\n\t\t'H': ECCLEVEL_H};\r\n\r\n\toptions = options || {};\r\n\tvar ver = options.version || -1;\r\n\tvar ecclevel = ECCLEVELS[(options.eccLevel || 'L').toUpperCase()];\r\n\tvar mode = options.mode ? MODES[options.mode.toLowerCase()] : -1;\r\n\tvar mask = 'mask' in options ? options.mask : -1;\r\n\r\n\tif (mode < 0) {\r\n\t\tif (typeof data === 'string') {\r\n\t\t\tif (data.match(NUMERIC_REGEXP)) {\r\n\t\t\t\tmode = MODE_NUMERIC;\r\n\t\t\t} else if (data.match(ALPHANUMERIC_OUT_REGEXP)) {\r\n\t\t\t\t// while encode supports case-insensitive encoding, we restrict the data to be uppercased when auto-selecting the mode.\r\n\t\t\t\tmode = MODE_ALPHANUMERIC;\r\n\t\t\t} else {\r\n\t\t\t\tmode = MODE_OCTET;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tmode = MODE_OCTET;\r\n\t\t}\r\n\t} else if (!(mode == MODE_NUMERIC || mode == MODE_ALPHANUMERIC ||\r\n\t\tmode == MODE_OCTET)) {\r\n\t\tthrow 'invalid or unsupported mode';\r\n\t}\r\n\r\n\tdata = validatedata(mode, data);\r\n\tif (data === null)\r\n\t\tthrow 'invalid data format';\r\n\r\n\tif (ecclevel < 0 || ecclevel > 3)\r\n\t\tthrow 'invalid ECC level';\r\n\r\n\tif (ver < 0) {\r\n\t\tfor (ver = 1; ver <= 40; ++ver) {\r\n\t\t\tif (data.length <= getmaxdatalen(ver, mode, ecclevel))\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\tif (ver > 40)\r\n\t\t\tthrow 'too large data for the Qr format';\r\n\t} else if (ver < 1 || ver > 40) {\r\n\t\tthrow 'invalid Qr version! should be between 1 and 40';\r\n\t}\r\n\r\n\tif (mask != -1 && (mask < 0 || mask > 8))\r\n\t\tthrow 'invalid mask';\r\n\t//console.log('version:', ver, 'mode:', mode, 'ECC:', ecclevel, 'mask:', mask )\r\n\treturn generate(data, ver, mode, ecclevel, mask);\r\n}\r\n\r\n\r\n// options\r\n// - modulesize: a number. this is a size of each modules in pixels, and\r\n//   defaults to 5px.\r\n// - margin: a number. this is a size of margin in *modules*, and defaults to\r\n//   4 (white modules). the specficiation mandates the margin no less than 4\r\n//   modules, so it is better not to alter this value unless you know what\r\n//   you're doing.\r\nfunction buildCanvas(data, options) {\r\n\r\n\tvar canvas = [];\r\n\tvar background = options.background || '#fff';\r\n\tvar foreground = options.foreground || '#000';\r\n\tvar padding = options.padding || 0;\r\n\t//var margin = options.margin || 4;\r\n\tvar matrix = generateFrame(data, options);\r\n\tvar n = matrix.length;\r\n\tvar modSize = Math.floor(options.fit ? options.fit / n : 5);\r\n\tvar size = (n * modSize) + (modSize * padding * 2);\r\n\tvar paddingXY = modSize * padding;\r\n\r\n\tcanvas.push({\r\n\t\ttype: 'rect',\r\n\t\tx: 0, y: 0, w: size, h: size, lineWidth: 0, color: background\r\n\t});\r\n\r\n\tfor (var i = 0; i < n; ++i) {\r\n\t\tfor (var j = 0; j < n; ++j) {\r\n\t\t\tif (matrix[i][j]) {\r\n\t\t\t\tcanvas.push({\r\n\t\t\t\t\ttype: 'rect',\r\n\t\t\t\t\tx: modSize * j + paddingXY,\r\n\t\t\t\t\ty: modSize * i + paddingXY,\r\n\t\t\t\t\tw: modSize,\r\n\t\t\t\t\th: modSize,\r\n\t\t\t\t\tlineWidth: 0,\r\n\t\t\t\t\tcolor: foreground\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\tcanvas: canvas,\r\n\t\tsize: size\r\n\t};\r\n\r\n}\r\n\r\nfunction measure(node) {\r\n\tvar cd = buildCanvas(node.qr, node);\r\n\tnode._canvas = cd.canvas;\r\n\tnode._width = node._height = node._minWidth = node._maxWidth = node._minHeight = node._maxHeight = cd.size;\r\n\treturn node;\r\n}\r\n\r\nmodule.exports = {\r\n\tmeasure: measure\r\n};","'use strict';\r\n\r\nmodule.exports = {\r\n\t'4A0': [4767.87, 6740.79],\r\n\t'2A0': [3370.39, 4767.87],\r\n\tA0: [2383.94, 3370.39],\r\n\tA1: [1683.78, 2383.94],\r\n\tA2: [1190.55, 1683.78],\r\n\tA3: [841.89, 1190.55],\r\n\tA4: [595.28, 841.89],\r\n\tA5: [419.53, 595.28],\r\n\tA6: [297.64, 419.53],\r\n\tA7: [209.76, 297.64],\r\n\tA8: [147.40, 209.76],\r\n\tA9: [104.88, 147.40],\r\n\tA10: [73.70, 104.88],\r\n\tB0: [2834.65, 4008.19],\r\n\tB1: [2004.09, 2834.65],\r\n\tB2: [1417.32, 2004.09],\r\n\tB3: [1000.63, 1417.32],\r\n\tB4: [708.66, 1000.63],\r\n\tB5: [498.90, 708.66],\r\n\tB6: [354.33, 498.90],\r\n\tB7: [249.45, 354.33],\r\n\tB8: [175.75, 249.45],\r\n\tB9: [124.72, 175.75],\r\n\tB10: [87.87, 124.72],\r\n\tC0: [2599.37, 3676.54],\r\n\tC1: [1836.85, 2599.37],\r\n\tC2: [1298.27, 1836.85],\r\n\tC3: [918.43, 1298.27],\r\n\tC4: [649.13, 918.43],\r\n\tC5: [459.21, 649.13],\r\n\tC6: [323.15, 459.21],\r\n\tC7: [229.61, 323.15],\r\n\tC8: [161.57, 229.61],\r\n\tC9: [113.39, 161.57],\r\n\tC10: [79.37, 113.39],\r\n\tRA0: [2437.80, 3458.27],\r\n\tRA1: [1729.13, 2437.80],\r\n\tRA2: [1218.90, 1729.13],\r\n\tRA3: [864.57, 1218.90],\r\n\tRA4: [609.45, 864.57],\r\n\tSRA0: [2551.18, 3628.35],\r\n\tSRA1: [1814.17, 2551.18],\r\n\tSRA2: [1275.59, 1814.17],\r\n\tSRA3: [907.09, 1275.59],\r\n\tSRA4: [637.80, 907.09],\r\n\tEXECUTIVE: [521.86, 756.00],\r\n\tFOLIO: [612.00, 936.00],\r\n\tLEGAL: [612.00, 1008.00],\r\n\tLETTER: [612.00, 792.00],\r\n\tTABLOID: [792.00, 1224.00]\r\n};\r\n","'use strict';\r\n\r\nvar isString = require('./helpers').isString;\r\nvar isArray = require('./helpers').isArray;\r\nvar isUndefined = require('./helpers').isUndefined;\r\nvar isNull = require('./helpers').isNull;\r\n\r\n/**\r\n * Creates an instance of StyleContextStack used for style inheritance and style overrides\r\n *\r\n * @constructor\r\n * @this {StyleContextStack}\r\n * @param {Object} named styles dictionary\r\n * @param {Object} optional default style definition\r\n */\r\nfunction StyleContextStack(styleDictionary, defaultStyle) {\r\n\tthis.defaultStyle = defaultStyle || {};\r\n\tthis.styleDictionary = styleDictionary;\r\n\tthis.styleOverrides = [];\r\n}\r\n\r\n/**\r\n * Creates cloned version of current stack\r\n * @return {StyleContextStack} current stack snapshot\r\n */\r\nStyleContextStack.prototype.clone = function () {\r\n\tvar stack = new StyleContextStack(this.styleDictionary, this.defaultStyle);\r\n\r\n\tthis.styleOverrides.forEach(function (item) {\r\n\t\tstack.styleOverrides.push(item);\r\n\t});\r\n\r\n\treturn stack;\r\n};\r\n\r\n/**\r\n * Pushes style-name or style-overrides-object onto the stack for future evaluation\r\n *\r\n * @param {String|Object} styleNameOrOverride style-name (referring to styleDictionary) or\r\n *                                            a new dictionary defining overriding properties\r\n */\r\nStyleContextStack.prototype.push = function (styleNameOrOverride) {\r\n\tthis.styleOverrides.push(styleNameOrOverride);\r\n};\r\n\r\n/**\r\n * Removes last style-name or style-overrides-object from the stack\r\n *\r\n * @param {Number} howMany - optional number of elements to be popped (if not specified,\r\n *                           one element will be removed from the stack)\r\n */\r\nStyleContextStack.prototype.pop = function (howMany) {\r\n\thowMany = howMany || 1;\r\n\r\n\twhile (howMany-- > 0) {\r\n\t\tthis.styleOverrides.pop();\r\n\t}\r\n};\r\n\r\n/**\r\n * Creates a set of named styles or/and a style-overrides-object based on the item,\r\n * pushes those elements onto the stack for future evaluation and returns the number\r\n * of elements pushed, so they can be easily poped then.\r\n *\r\n * @param {Object} item - an object with optional style property and/or style overrides\r\n * @return the number of items pushed onto the stack\r\n */\r\nStyleContextStack.prototype.autopush = function (item) {\r\n\tif (isString(item)) {\r\n\t\treturn 0;\r\n\t}\r\n\r\n\tvar styleNames = [];\r\n\r\n\tif (item.style) {\r\n\t\tif (isArray(item.style)) {\r\n\t\t\tstyleNames = item.style;\r\n\t\t} else {\r\n\t\t\tstyleNames = [item.style];\r\n\t\t}\r\n\t}\r\n\r\n\tfor (var i = 0, l = styleNames.length; i < l; i++) {\r\n\t\tthis.push(styleNames[i]);\r\n\t}\r\n\r\n\tvar styleProperties = [\r\n\t\t'font',\r\n\t\t'fontSize',\r\n\t\t'fontFeatures',\r\n\t\t'bold',\r\n\t\t'italics',\r\n\t\t'alignment',\r\n\t\t'color',\r\n\t\t'columnGap',\r\n\t\t'fillColor',\r\n\t\t'fillOpacity',\r\n\t\t'decoration',\r\n\t\t'decorationStyle',\r\n\t\t'decorationColor',\r\n\t\t'background',\r\n\t\t'lineHeight',\r\n\t\t'characterSpacing',\r\n\t\t'noWrap',\r\n\t\t'markerColor',\r\n\t\t'leadingIndent',\r\n\t\t'sup',\r\n\t\t'sub'\r\n\t\t//'tableCellPadding'\r\n\t\t// 'cellBorder',\r\n\t\t// 'headerCellBorder',\r\n\t\t// 'oddRowCellBorder',\r\n\t\t// 'evenRowCellBorder',\r\n\t\t// 'tableBorder'\r\n\t];\r\n\tvar styleOverrideObject = {};\r\n\tvar pushStyleOverrideObject = false;\r\n\r\n\tstyleProperties.forEach(function (key) {\r\n\t\tif (!isUndefined(item[key]) && !isNull(item[key])) {\r\n\t\t\tstyleOverrideObject[key] = item[key];\r\n\t\t\tpushStyleOverrideObject = true;\r\n\t\t}\r\n\t});\r\n\r\n\tif (pushStyleOverrideObject) {\r\n\t\tthis.push(styleOverrideObject);\r\n\t}\r\n\r\n\treturn styleNames.length + (pushStyleOverrideObject ? 1 : 0);\r\n};\r\n\r\n/**\r\n * Automatically pushes elements onto the stack, using autopush based on item,\r\n * executes callback and then pops elements back. Returns value returned by callback\r\n *\r\n * @param  {Object}   item - an object with optional style property and/or style overrides\r\n * @param  {Function} function to be called between autopush and pop\r\n * @return {Object} value returned by callback\r\n */\r\nStyleContextStack.prototype.auto = function (item, callback) {\r\n\tvar pushedItems = this.autopush(item);\r\n\tvar result = callback();\r\n\r\n\tif (pushedItems > 0) {\r\n\t\tthis.pop(pushedItems);\r\n\t}\r\n\r\n\treturn result;\r\n};\r\n\r\n/**\r\n * Evaluates stack and returns value of a named property\r\n *\r\n * @param {String} property - property name\r\n * @return property value or null if not found\r\n */\r\nStyleContextStack.prototype.getProperty = function (property) {\r\n\tif (this.styleOverrides) {\r\n\t\tfor (var i = this.styleOverrides.length - 1; i >= 0; i--) {\r\n\t\t\tvar item = this.styleOverrides[i];\r\n\r\n\t\t\tif (isString(item)) {\r\n\t\t\t\t// named-style-override\r\n\t\t\t\tvar style = this.styleDictionary[item];\r\n\t\t\t\tif (style && !isUndefined(style[property]) && !isNull(style[property])) {\r\n\t\t\t\t\treturn style[property];\r\n\t\t\t\t}\r\n\t\t\t} else if (!isUndefined(item[property]) && !isNull(item[property])) {\r\n\t\t\t\t// style-overrides-object\r\n\t\t\t\treturn item[property];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn this.defaultStyle && this.defaultStyle[property];\r\n};\r\n\r\nmodule.exports = StyleContextStack;\r\n","'use strict';\r\n\r\nvar xmldoc = require('xmldoc');\r\n\r\n/** Strip unit postfix, parse number, but return undefined instead of NaN for bad input */\r\nfunction stripUnits(textVal) {\r\n\tvar n = parseFloat(textVal);\r\n\tif (typeof n !== 'number' || isNaN(n)) {\r\n\t\treturn undefined;\r\n\t}\r\n\treturn n;\r\n}\r\n\r\n/** Make sure it's valid XML and the root tage is <svg/>, returns xmldoc DOM */\r\nfunction parseSVG(svgString) {\r\n\tvar doc;\r\n\r\n\ttry {\r\n\t\tdoc = new xmldoc.XmlDocument(svgString);\r\n\t} catch (err) {\r\n\t\tthrow new Error('SVGMeasure: ' + err);\r\n\t}\r\n\r\n\tif (doc.name !== \"svg\") {\r\n\t\tthrow new Error('SVGMeasure: expected <svg> document');\r\n\t}\r\n\r\n\treturn doc;\r\n}\r\n\r\nfunction SVGMeasure() {\r\n}\r\n\r\nSVGMeasure.prototype.measureSVG = function (svgString) {\r\n\r\n\tvar doc = parseSVG(svgString);\r\n\r\n\tvar docWidth = stripUnits(doc.attr.width);\r\n\tvar docHeight = stripUnits(doc.attr.height);\r\n\r\n\tif ((docWidth == undefined || docHeight == undefined) && typeof doc.attr.viewBox == 'string') {\r\n\t\tvar viewBoxParts = doc.attr.viewBox.split(/[,\\s]+/);\r\n\t\tif (viewBoxParts.length !== 4) {\r\n\t\t\tthrow new Error(\"Unexpected svg viewbox format, should have 4 entries but found: '\" + doc.attr.viewBox + \"'\");\r\n\t\t}\r\n\t\tif (docWidth == undefined) {\r\n\t\t\tdocWidth = stripUnits(viewBoxParts[2]);\r\n\t\t}\r\n\t\tif (docHeight == undefined) {\r\n\t\t\tdocHeight = stripUnits(viewBoxParts[3]);\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\twidth: docWidth,\r\n\t\theight: docHeight\r\n\t};\r\n};\r\n\r\nSVGMeasure.prototype.writeDimensions = function (svgString, dimensions) {\r\n\r\n\tvar doc = parseSVG(svgString);\r\n\r\n\tdoc.attr.width = \"\" + dimensions.width;\r\n\tdoc.attr.height = \"\" + dimensions.height;\r\n\r\n\treturn doc.toString();\r\n};\r\n\r\nmodule.exports = SVGMeasure;\r\n","'use strict';\r\n\r\nvar ColumnCalculator = require('./columnCalculator');\r\nvar isFunction = require('./helpers').isFunction;\r\nvar isNumber = require('./helpers').isNumber;\r\n\r\nfunction TableProcessor(tableNode) {\r\n\tthis.tableNode = tableNode;\r\n}\r\n\r\nTableProcessor.prototype.beginTable = function (writer) {\r\n\tvar tableNode;\r\n\tvar availableWidth;\r\n\tvar self = this;\r\n\r\n\ttableNode = this.tableNode;\r\n\tthis.offsets = tableNode._offsets;\r\n\tthis.layout = tableNode._layout;\r\n\r\n\tavailableWidth = writer.context().availableWidth - this.offsets.total;\r\n\tColumnCalculator.buildColumnWidths(tableNode.table.widths, availableWidth);\r\n\r\n\tthis.tableWidth = tableNode._offsets.total + getTableInnerContentWidth();\r\n\tthis.rowSpanData = prepareRowSpanData();\r\n\tthis.cleanUpRepeatables = false;\r\n\r\n\tthis.headerRows = tableNode.table.headerRows || 0;\r\n\tif (this.headerRows > tableNode.table.body.length) {\r\n\t\tthrow new Error(`Too few rows in the table. Property headerRows requires at least ${this.headerRows}, contains only ${tableNode.table.body.length}`);\r\n\t}\r\n\r\n\tthis.rowsWithoutPageBreak = this.headerRows + (tableNode.table.keepWithHeaderRows || 0);\r\n\tthis.dontBreakRows = tableNode.table.dontBreakRows || false;\r\n\r\n\tif (this.rowsWithoutPageBreak) {\r\n\t\twriter.beginUnbreakableBlock();\r\n\t}\r\n\r\n\t// update the border properties of all cells before drawing any lines\r\n\tprepareCellBorders(this.tableNode.table.body);\r\n\r\n\tthis.drawHorizontalLine(0, writer);\r\n\r\n\tfunction getTableInnerContentWidth() {\r\n\t\tvar width = 0;\r\n\r\n\t\ttableNode.table.widths.forEach(function (w) {\r\n\t\t\twidth += w._calcWidth;\r\n\t\t});\r\n\r\n\t\treturn width;\r\n\t}\r\n\r\n\tfunction prepareRowSpanData() {\r\n\t\tvar rsd = [];\r\n\t\tvar x = 0;\r\n\t\tvar lastWidth = 0;\r\n\r\n\t\trsd.push({ left: 0, rowSpan: 0 });\r\n\r\n\t\tfor (var i = 0, l = self.tableNode.table.body[0].length; i < l; i++) {\r\n\t\t\tvar paddings = self.layout.paddingLeft(i, self.tableNode) + self.layout.paddingRight(i, self.tableNode);\r\n\t\t\tvar lBorder = self.layout.vLineWidth(i, self.tableNode);\r\n\t\t\tlastWidth = paddings + lBorder + self.tableNode.table.widths[i]._calcWidth;\r\n\t\t\trsd[rsd.length - 1].width = lastWidth;\r\n\t\t\tx += lastWidth;\r\n\t\t\trsd.push({ left: x, rowSpan: 0, width: 0 });\r\n\t\t}\r\n\r\n\t\treturn rsd;\r\n\t}\r\n\r\n\t// Iterate through all cells. If the current cell is the start of a\r\n\t// rowSpan/colSpan, update the border property of the cells on its\r\n\t// bottom/right accordingly. This is needed since each iteration of the\r\n\t// line-drawing loops draws lines for a single cell, not for an entire\r\n\t// rowSpan/colSpan.\r\n\tfunction prepareCellBorders(body) {\r\n\t\tfor (var rowIndex = 0; rowIndex < body.length; rowIndex++) {\r\n\t\t\tvar row = body[rowIndex];\r\n\r\n\t\t\tfor (var colIndex = 0; colIndex < row.length; colIndex++) {\r\n\t\t\t\tvar cell = row[colIndex];\r\n\r\n\t\t\t\tif (cell.border) {\r\n\t\t\t\t\tvar rowSpan = cell.rowSpan || 1;\r\n\t\t\t\t\tvar colSpan = cell.colSpan || 1;\r\n\r\n\t\t\t\t\tfor (var rowOffset = 0; rowOffset < rowSpan; rowOffset++) {\r\n\t\t\t\t\t\t// set left border\r\n\t\t\t\t\t\tif (cell.border[0] !== undefined && rowOffset > 0) {\r\n\t\t\t\t\t\t\tsetBorder(rowIndex + rowOffset, colIndex, 0, cell.border[0]);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// set right border\r\n\t\t\t\t\t\tif (cell.border[2] !== undefined) {\r\n\t\t\t\t\t\t\tsetBorder(rowIndex + rowOffset, colIndex + colSpan - 1, 2, cell.border[2]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfor (var colOffset = 0; colOffset < colSpan; colOffset++) {\r\n\t\t\t\t\t\t// set top border\r\n\t\t\t\t\t\tif (cell.border[1] !== undefined && colOffset > 0) {\r\n\t\t\t\t\t\t\tsetBorder(rowIndex, colIndex + colOffset, 1, cell.border[1]);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// set bottom border\r\n\t\t\t\t\t\tif (cell.border[3] !== undefined) {\r\n\t\t\t\t\t\t\tsetBorder(rowIndex + rowSpan - 1, colIndex + colOffset, 3, cell.border[3]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// helper function to set the border for a given cell\r\n\t\tfunction setBorder(rowIndex, colIndex, borderIndex, borderValue) {\r\n\t\t\tvar cell = body[rowIndex][colIndex];\r\n\t\t\tcell.border = cell.border || {};\r\n\t\t\tcell.border[borderIndex] = borderValue;\r\n\t\t}\r\n\t}\r\n};\r\n\r\nTableProcessor.prototype.onRowBreak = function (rowIndex, writer) {\r\n\tvar self = this;\r\n\treturn function () {\r\n\t\tvar offset = self.rowPaddingTop + (!self.headerRows ? self.topLineWidth : 0);\r\n\t\twriter.context().availableHeight -= self.reservedAtBottom;\r\n\t\twriter.context().moveDown(offset);\r\n\t};\r\n};\r\n\r\nTableProcessor.prototype.beginRow = function (rowIndex, writer) {\r\n\tthis.topLineWidth = this.layout.hLineWidth(rowIndex, this.tableNode);\r\n\tthis.rowPaddingTop = this.layout.paddingTop(rowIndex, this.tableNode);\r\n\tthis.bottomLineWidth = this.layout.hLineWidth(rowIndex + 1, this.tableNode);\r\n\tthis.rowPaddingBottom = this.layout.paddingBottom(rowIndex, this.tableNode);\r\n\r\n\tthis.rowCallback = this.onRowBreak(rowIndex, writer);\r\n\twriter.tracker.startTracking('pageChanged', this.rowCallback);\r\n\tif (this.dontBreakRows) {\r\n\t\twriter.beginUnbreakableBlock();\r\n\t}\r\n\tthis.rowTopY = writer.context().y;\r\n\tthis.reservedAtBottom = this.bottomLineWidth + this.rowPaddingBottom;\r\n\r\n\twriter.context().availableHeight -= this.reservedAtBottom;\r\n\r\n\twriter.context().moveDown(this.rowPaddingTop);\r\n};\r\n\r\nTableProcessor.prototype.drawHorizontalLine = function (lineIndex, writer, overrideY) {\r\n\tvar lineWidth = this.layout.hLineWidth(lineIndex, this.tableNode);\r\n\tif (lineWidth) {\r\n\t\tvar style = this.layout.hLineStyle(lineIndex, this.tableNode);\r\n\t\tvar dash;\r\n\t\tif (style && style.dash) {\r\n\t\t\tdash = style.dash;\r\n\t\t}\r\n\r\n\t\tvar offset = lineWidth / 2;\r\n\t\tvar currentLine = null;\r\n\t\tvar body = this.tableNode.table.body;\r\n\t\tvar cellAbove;\r\n\t\tvar currentCell;\r\n\t\tvar rowCellAbove;\r\n\r\n\t\tfor (var i = 0, l = this.rowSpanData.length; i < l; i++) {\r\n\t\t\tvar data = this.rowSpanData[i];\r\n\t\t\tvar shouldDrawLine = !data.rowSpan;\r\n\t\t\tvar borderColor = null;\r\n\r\n\t\t\t// draw only if the current cell requires a top border or the cell in the\r\n\t\t\t// row above requires a bottom border\r\n\t\t\tif (shouldDrawLine && i < l - 1) {\r\n\t\t\t\tvar topBorder = false, bottomBorder = false, rowBottomBorder = false;\r\n\r\n\t\t\t\t// the cell in the row above\r\n\t\t\t\tif (lineIndex > 0) {\r\n\t\t\t\t\tcellAbove = body[lineIndex - 1][i];\r\n\t\t\t\t\tbottomBorder = cellAbove.border ? cellAbove.border[3] : this.layout.defaultBorder;\r\n\t\t\t\t\tif (bottomBorder && cellAbove.borderColor) {\r\n\t\t\t\t\t\tborderColor = cellAbove.borderColor[3];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// the current cell\r\n\t\t\t\tif (lineIndex < body.length) {\r\n\t\t\t\t\tcurrentCell = body[lineIndex][i];\r\n\t\t\t\t\ttopBorder = currentCell.border ? currentCell.border[1] : this.layout.defaultBorder;\r\n\t\t\t\t\tif (topBorder && borderColor == null && currentCell.borderColor) {\r\n\t\t\t\t\t\tborderColor = currentCell.borderColor[1];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tshouldDrawLine = topBorder || bottomBorder;\r\n\t\t\t}\r\n\r\n\t\t\tif (cellAbove && cellAbove._rowSpanCurrentOffset) {\r\n\t\t\t\trowCellAbove = body[lineIndex - 1 - cellAbove._rowSpanCurrentOffset][i];\r\n\t\t\t\trowBottomBorder = rowCellAbove && rowCellAbove.border ? rowCellAbove.border[3] : this.layout.defaultBorder;\r\n\t\t\t\tif (rowBottomBorder && rowCellAbove && rowCellAbove.borderColor) {\r\n\t\t\t\t\tborderColor = rowCellAbove.borderColor[3];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (borderColor == null) {\r\n\t\t\t\tborderColor = isFunction(this.layout.hLineColor) ? this.layout.hLineColor(lineIndex, this.tableNode, i) : this.layout.hLineColor;\r\n\t\t\t}\r\n\r\n\t\t\tif (!currentLine && shouldDrawLine) {\r\n\t\t\t\tcurrentLine = { left: data.left, width: 0 };\r\n\t\t\t}\r\n\r\n\t\t\tif (shouldDrawLine) {\r\n\t\t\t\tvar colSpanIndex = 0;\r\n\t\t\t\tif (rowCellAbove && rowCellAbove.colSpan && rowBottomBorder) {\r\n\t\t\t\t\twhile (rowCellAbove.colSpan > colSpanIndex) {\r\n\t\t\t\t\t\tcurrentLine.width += (this.rowSpanData[i + colSpanIndex++].width || 0);\r\n\t\t\t\t\t}\r\n\t\t\t\t\ti += colSpanIndex - 1;\r\n\t\t\t\t} else if (cellAbove && cellAbove.colSpan && bottomBorder) {\r\n\t\t\t\t\twhile (cellAbove.colSpan > colSpanIndex) {\r\n\t\t\t\t\t\tcurrentLine.width += (this.rowSpanData[i + colSpanIndex++].width || 0);\r\n\t\t\t\t\t}\r\n\t\t\t\t\ti += colSpanIndex - 1;\r\n\t\t\t\t} else if (currentCell && currentCell.colSpan && topBorder) {\r\n\t\t\t\t\twhile (currentCell.colSpan > colSpanIndex) {\r\n\t\t\t\t\t\tcurrentLine.width += (this.rowSpanData[i + colSpanIndex++].width || 0);\r\n\t\t\t\t\t}\r\n\t\t\t\t\ti += colSpanIndex - 1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tcurrentLine.width += (this.rowSpanData[i].width || 0);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar y = (overrideY || 0) + offset;\r\n\r\n\r\n\t\t\tif (shouldDrawLine) {\r\n\t\t\t\tif (currentLine && currentLine.width) {\r\n\t\t\t\t\twriter.addVector({\r\n\t\t\t\t\t\ttype: 'line',\r\n\t\t\t\t\t\tx1: currentLine.left,\r\n\t\t\t\t\t\tx2: currentLine.left + currentLine.width,\r\n\t\t\t\t\t\ty1: y,\r\n\t\t\t\t\t\ty2: y,\r\n\t\t\t\t\t\tlineWidth: lineWidth,\r\n\t\t\t\t\t\tdash: dash,\r\n\t\t\t\t\t\tlineColor: borderColor\r\n\t\t\t\t\t}, false, overrideY);\r\n\t\t\t\t\tcurrentLine = null;\r\n\t\t\t\t\tborderColor = null;\r\n\t\t\t\t\tcellAbove = null;\r\n\t\t\t\t\tcurrentCell = null;\r\n\t\t\t\t\trowCellAbove = null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\twriter.context().moveDown(lineWidth);\r\n\t}\r\n};\r\n\r\nTableProcessor.prototype.drawVerticalLine = function (x, y0, y1, vLineColIndex, writer, vLineRowIndex, beforeVLineColIndex) {\r\n\tvar width = this.layout.vLineWidth(vLineColIndex, this.tableNode);\r\n\tif (width === 0) {\r\n\t\treturn;\r\n\t}\r\n\tvar style = this.layout.vLineStyle(vLineColIndex, this.tableNode);\r\n\tvar dash;\r\n\tif (style && style.dash) {\r\n\t\tdash = style.dash;\r\n\t}\r\n\r\n\tvar body = this.tableNode.table.body;\r\n\tvar cellBefore;\r\n\tvar currentCell;\r\n\tvar borderColor;\r\n\r\n\t// the cell in the col before\r\n\tif (vLineColIndex > 0) {\r\n\t\tcellBefore = body[vLineRowIndex][beforeVLineColIndex];\r\n\t\tif (cellBefore && cellBefore.borderColor) {\r\n\t\t\tif (cellBefore.border ? cellBefore.border[2] : this.layout.defaultBorder) {\r\n\t\t\t\tborderColor = cellBefore.borderColor[2];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// the current cell\r\n\tif (borderColor == null && vLineColIndex < body.length) {\r\n\t\tcurrentCell = body[vLineRowIndex][vLineColIndex];\r\n\t\tif (currentCell && currentCell.borderColor) {\r\n\t\t\tif (currentCell.border ? currentCell.border[0] : this.layout.defaultBorder) {\r\n\t\t\t\tborderColor = currentCell.borderColor[0];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (borderColor == null && cellBefore && cellBefore._rowSpanCurrentOffset) {\r\n\t\tvar rowCellBeforeAbove = body[vLineRowIndex - cellBefore._rowSpanCurrentOffset][beforeVLineColIndex];\r\n\t\tif (rowCellBeforeAbove.borderColor) {\r\n\t\t\tif (rowCellBeforeAbove.border ? rowCellBeforeAbove.border[2] : this.layout.defaultBorder) {\r\n\t\t\t\tborderColor = rowCellBeforeAbove.borderColor[2];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (borderColor == null && currentCell && currentCell._rowSpanCurrentOffset) {\r\n\t\tvar rowCurrentCellAbove = body[vLineRowIndex - currentCell._rowSpanCurrentOffset][vLineColIndex];\r\n\t\tif (rowCurrentCellAbove.borderColor) {\r\n\t\t\tif (rowCurrentCellAbove.border ? rowCurrentCellAbove.border[2] : this.layout.defaultBorder) {\r\n\t\t\t\tborderColor = rowCurrentCellAbove.borderColor[2];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (borderColor == null) {\r\n\t\tborderColor = isFunction(this.layout.vLineColor) ? this.layout.vLineColor(vLineColIndex, this.tableNode, vLineRowIndex) : this.layout.vLineColor;\r\n\t}\r\n\twriter.addVector({\r\n\t\ttype: 'line',\r\n\t\tx1: x + width / 2,\r\n\t\tx2: x + width / 2,\r\n\t\ty1: y0,\r\n\t\ty2: y1,\r\n\t\tlineWidth: width,\r\n\t\tdash: dash,\r\n\t\tlineColor: borderColor\r\n\t}, false, true);\r\n\tcellBefore = null;\r\n\tcurrentCell = null;\r\n\tborderColor = null;\r\n};\r\n\r\nTableProcessor.prototype.endTable = function (writer) {\r\n\tif (this.cleanUpRepeatables) {\r\n\t\twriter.popFromRepeatables();\r\n\t}\r\n};\r\n\r\nTableProcessor.prototype.endRow = function (rowIndex, writer, pageBreaks) {\r\n\tvar l, i;\r\n\tvar self = this;\r\n\twriter.tracker.stopTracking('pageChanged', this.rowCallback);\r\n\twriter.context().moveDown(this.layout.paddingBottom(rowIndex, this.tableNode));\r\n\twriter.context().availableHeight += this.reservedAtBottom;\r\n\r\n\tvar endingPage = writer.context().page;\r\n\tvar endingY = writer.context().y;\r\n\r\n\tvar xs = getLineXs();\r\n\r\n\tvar ys = [];\r\n\r\n\tvar hasBreaks = pageBreaks && pageBreaks.length > 0;\r\n\tvar body = this.tableNode.table.body;\r\n\r\n\tys.push({\r\n\t\ty0: this.rowTopY,\r\n\t\tpage: hasBreaks ? pageBreaks[0].prevPage : endingPage\r\n\t});\r\n\r\n\tif (hasBreaks) {\r\n\t\tfor (i = 0, l = pageBreaks.length; i < l; i++) {\r\n\t\t\tvar pageBreak = pageBreaks[i];\r\n\t\t\tys[ys.length - 1].y1 = pageBreak.prevY;\r\n\r\n\t\t\tys.push({ y0: pageBreak.y, page: pageBreak.prevPage + 1 });\r\n\t\t}\r\n\t}\r\n\r\n\tys[ys.length - 1].y1 = endingY;\r\n\r\n\tvar skipOrphanePadding = (ys[0].y1 - ys[0].y0 === this.rowPaddingTop);\r\n\tfor (var yi = (skipOrphanePadding ? 1 : 0), yl = ys.length; yi < yl; yi++) {\r\n\t\tvar willBreak = yi < ys.length - 1;\r\n\t\tvar rowBreakWithoutHeader = (yi > 0 && !this.headerRows);\r\n\t\tvar hzLineOffset = rowBreakWithoutHeader ? 0 : this.topLineWidth;\r\n\t\tvar y1 = ys[yi].y0;\r\n\t\tvar y2 = ys[yi].y1;\r\n\r\n\t\tif (willBreak) {\r\n\t\t\ty2 = y2 + this.rowPaddingBottom;\r\n\t\t}\r\n\r\n\t\tif (writer.context().page != ys[yi].page) {\r\n\t\t\twriter.context().page = ys[yi].page;\r\n\r\n\t\t\t//TODO: buggy, availableHeight should be updated on every pageChanged event\r\n\t\t\t// TableProcessor should be pageChanged listener, instead of processRow\r\n\t\t\tthis.reservedAtBottom = 0;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, l = xs.length; i < l; i++) {\r\n\t\t\tvar leftCellBorder = false;\r\n\t\t\tvar rightCellBorder = false;\r\n\t\t\tvar colIndex = xs[i].index;\r\n\r\n\t\t\t// current cell\r\n\t\t\tif (colIndex < body[rowIndex].length) {\r\n\t\t\t\tvar cell = body[rowIndex][colIndex];\r\n\t\t\t\tleftCellBorder = cell.border ? cell.border[0] : this.layout.defaultBorder;\r\n\t\t\t\trightCellBorder = cell.border ? cell.border[2] : this.layout.defaultBorder;\r\n\t\t\t}\r\n\r\n\t\t\t// before cell\r\n\t\t\tif (colIndex > 0 && !leftCellBorder) {\r\n\t\t\t\tvar cell = body[rowIndex][colIndex - 1];\r\n\t\t\t\tleftCellBorder = cell.border ? cell.border[2] : this.layout.defaultBorder;\r\n\t\t\t}\r\n\r\n\t\t\t// after cell\r\n\t\t\tif (colIndex + 1 < body[rowIndex].length && !rightCellBorder) {\r\n\t\t\t\tvar cell = body[rowIndex][colIndex + 1];\r\n\t\t\t\trightCellBorder = cell.border ? cell.border[0] : this.layout.defaultBorder;\r\n\t\t\t}\r\n\r\n\t\t\tif (leftCellBorder) {\r\n\t\t\t\tthis.drawVerticalLine(xs[i].x, y1 - hzLineOffset, y2 + this.bottomLineWidth, xs[i].index, writer, rowIndex, xs[i - 1] ? xs[i - 1].index : null);\r\n\t\t\t}\r\n\r\n\t\t\tif (i < l - 1) {\r\n\t\t\t\tvar fillColor = body[rowIndex][colIndex].fillColor;\r\n\t\t\t\tvar fillOpacity = body[rowIndex][colIndex].fillOpacity;\r\n\t\t\t\tif (!fillColor) {\r\n\t\t\t\t\tfillColor = isFunction(this.layout.fillColor) ? this.layout.fillColor(rowIndex, this.tableNode, colIndex) : this.layout.fillColor;\r\n\t\t\t\t}\r\n\t\t\t\tif (!isNumber(fillOpacity)) {\r\n\t\t\t\t\tfillOpacity = isFunction(this.layout.fillOpacity) ? this.layout.fillOpacity(rowIndex, this.tableNode, colIndex) : this.layout.fillOpacity;\r\n\t\t\t\t}\r\n\t\t\t\tvar overlayPattern = body[rowIndex][colIndex].overlayPattern;\r\n\t\t\t\tvar overlayOpacity = body[rowIndex][colIndex].overlayOpacity;\r\n\t\t\t\tif (fillColor || overlayPattern) {\r\n\t\t\t\t\tvar widthLeftBorder = leftCellBorder ? this.layout.vLineWidth(colIndex, this.tableNode) : 0;\r\n\t\t\t\t\tvar widthRightBorder;\r\n\t\t\t\t\tif ((colIndex === 0 || colIndex + 1 == body[rowIndex].length) && !rightCellBorder) {\r\n\t\t\t\t\t\twidthRightBorder = this.layout.vLineWidth(colIndex + 1, this.tableNode);\r\n\t\t\t\t\t} else if (rightCellBorder) {\r\n\t\t\t\t\t\twidthRightBorder = this.layout.vLineWidth(colIndex + 1, this.tableNode) / 2;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\twidthRightBorder = 0;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar x1f = this.dontBreakRows ? xs[i].x + widthLeftBorder : xs[i].x + (widthLeftBorder / 2);\r\n\t\t\t\t\tvar y1f = this.dontBreakRows ? y1 : y1 - (hzLineOffset / 2);\r\n\t\t\t\t\tvar x2f = xs[i + 1].x + widthRightBorder;\r\n\t\t\t\t\tvar y2f = this.dontBreakRows ? y2 + this.bottomLineWidth : y2 + (this.bottomLineWidth / 2);\r\n\t\t\t\t\tvar bgWidth = x2f - x1f;\r\n\t\t\t\t\tvar bgHeight = y2f - y1f;\r\n\t\t\t\t\tif (fillColor) {\r\n\t\t\t\t\t\twriter.addVector({\r\n\t\t\t\t\t\t\ttype: 'rect',\r\n\t\t\t\t\t\t\tx: x1f,\r\n\t\t\t\t\t\t\ty: y1f,\r\n\t\t\t\t\t\t\tw: bgWidth,\r\n\t\t\t\t\t\t\th: bgHeight,\r\n\t\t\t\t\t\t\tlineWidth: 0,\r\n\t\t\t\t\t\t\tcolor: fillColor,\r\n\t\t\t\t\t\t\tfillOpacity: fillOpacity\r\n\t\t\t\t\t\t}, false, true, writer.context().backgroundLength[writer.context().page]);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (overlayPattern) {\r\n\t\t\t\t\t\twriter.addVector({\r\n\t\t\t\t\t\t\ttype: 'rect',\r\n\t\t\t\t\t\t\tx: x1f,\r\n\t\t\t\t\t\t\ty: y1f,\r\n\t\t\t\t\t\t\tw: bgWidth,\r\n\t\t\t\t\t\t\th: bgHeight,\r\n\t\t\t\t\t\t\tlineWidth: 0,\r\n\t\t\t\t\t\t\tcolor: overlayPattern,\r\n\t\t\t\t\t\t\tfillOpacity: overlayOpacity\r\n\t\t\t\t\t\t}, false, true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (willBreak && this.layout.hLineWhenBroken !== false) {\r\n\t\t\tthis.drawHorizontalLine(rowIndex + 1, writer, y2);\r\n\t\t}\r\n\t\tif (rowBreakWithoutHeader && this.layout.hLineWhenBroken !== false) {\r\n\t\t\tthis.drawHorizontalLine(rowIndex, writer, y1);\r\n\t\t}\r\n\t}\r\n\r\n\twriter.context().page = endingPage;\r\n\twriter.context().y = endingY;\r\n\r\n\tvar row = this.tableNode.table.body[rowIndex];\r\n\tfor (i = 0, l = row.length; i < l; i++) {\r\n\t\tif (row[i].rowSpan) {\r\n\t\t\tthis.rowSpanData[i].rowSpan = row[i].rowSpan;\r\n\r\n\t\t\t// fix colSpans\r\n\t\t\tif (row[i].colSpan && row[i].colSpan > 1) {\r\n\t\t\t\tfor (var j = 1; j < row[i].rowSpan; j++) {\r\n\t\t\t\t\tthis.tableNode.table.body[rowIndex + j][i]._colSpan = row[i].colSpan;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// fix rowSpans\r\n\t\t\tif (row[i].rowSpan && row[i].rowSpan > 1) {\r\n\t\t\t\tfor (var j = 1; j < row[i].rowSpan; j++) {\r\n\t\t\t\t\tthis.tableNode.table.body[rowIndex + j][i]._rowSpanCurrentOffset = j;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.rowSpanData[i].rowSpan > 0) {\r\n\t\t\tthis.rowSpanData[i].rowSpan--;\r\n\t\t}\r\n\t}\r\n\r\n\tthis.drawHorizontalLine(rowIndex + 1, writer);\r\n\r\n\tif (this.headerRows && rowIndex === this.headerRows - 1) {\r\n\t\tthis.headerRepeatable = writer.currentBlockToRepeatable();\r\n\t}\r\n\r\n\tif (this.dontBreakRows) {\r\n\t\twriter.tracker.auto('pageChanged',\r\n\t\t\tfunction () {\r\n\t\t\t\tif (!self.headerRows && self.layout.hLineWhenBroken !== false) {\r\n\t\t\t\t\tself.drawHorizontalLine(rowIndex, writer);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tfunction () {\r\n\t\t\t\twriter.commitUnbreakableBlock();\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tif (this.headerRepeatable && (rowIndex === (this.rowsWithoutPageBreak - 1) || rowIndex === this.tableNode.table.body.length - 1)) {\r\n\t\twriter.commitUnbreakableBlock();\r\n\t\twriter.pushToRepeatables(this.headerRepeatable);\r\n\t\tthis.cleanUpRepeatables = true;\r\n\t\tthis.headerRepeatable = null;\r\n\t}\r\n\r\n\tfunction getLineXs() {\r\n\t\tvar result = [];\r\n\t\tvar cols = 0;\r\n\r\n\t\tfor (var i = 0, l = self.tableNode.table.body[rowIndex].length; i < l; i++) {\r\n\t\t\tif (!cols) {\r\n\t\t\t\tresult.push({ x: self.rowSpanData[i].left, index: i });\r\n\r\n\t\t\t\tvar item = self.tableNode.table.body[rowIndex][i];\r\n\t\t\t\tcols = (item._colSpan || item.colSpan || 0);\r\n\t\t\t}\r\n\t\t\tif (cols > 0) {\r\n\t\t\t\tcols--;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tresult.push({ x: self.rowSpanData[self.rowSpanData.length - 1].left, index: self.rowSpanData.length - 1 });\r\n\r\n\t\treturn result;\r\n\t}\r\n};\r\n\r\nmodule.exports = TableProcessor;\r\n","'use strict';\r\n\r\nvar isArray = require('./helpers').isArray;\r\nvar isPattern = require('./helpers').isPattern;\r\nvar getPattern = require('./helpers').getPattern;\r\n\r\nfunction groupDecorations(line) {\r\n\tvar groups = [], currentGroup = null;\r\n\tfor (var i = 0, l = line.inlines.length; i < l; i++) {\r\n\t\tvar inline = line.inlines[i];\r\n\t\tvar decoration = inline.decoration;\r\n\t\tif (!decoration) {\r\n\t\t\tcurrentGroup = null;\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tif (!isArray(decoration)) {\r\n\t\t\tdecoration = [decoration];\r\n\t\t}\r\n\t\tvar color = inline.decorationColor || inline.color || 'black';\r\n\t\tvar style = inline.decorationStyle || 'solid';\r\n\t\tfor (var ii = 0, ll = decoration.length; ii < ll; ii++) {\r\n\t\t\tvar decorationItem = decoration[ii];\r\n\t\t\tif (!currentGroup || decorationItem !== currentGroup.decoration ||\r\n\t\t\t\tstyle !== currentGroup.decorationStyle || color !== currentGroup.decorationColor) {\r\n\r\n\t\t\t\tcurrentGroup = {\r\n\t\t\t\t\tline: line,\r\n\t\t\t\t\tdecoration: decorationItem,\r\n\t\t\t\t\tdecorationColor: color,\r\n\t\t\t\t\tdecorationStyle: style,\r\n\t\t\t\t\tinlines: [inline]\r\n\t\t\t\t};\r\n\t\t\t\tgroups.push(currentGroup);\r\n\t\t\t} else {\r\n\t\t\t\tcurrentGroup.inlines.push(inline);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn groups;\r\n}\r\n\r\nfunction drawDecoration(group, x, y, pdfKitDoc) {\r\n\tfunction maxInline() {\r\n\t\tvar max = 0;\r\n\t\tfor (var i = 0, l = group.inlines.length; i < l; i++) {\r\n\t\t\tvar inline = group.inlines[i];\r\n\t\t\tmax = inline.fontSize > max ? i : max;\r\n\t\t}\r\n\t\treturn group.inlines[max];\r\n\t}\r\n\tfunction width() {\r\n\t\tvar sum = 0;\r\n\t\tfor (var i = 0, l = group.inlines.length; i < l; i++) {\r\n\t\t\tvar justifyShift = (group.inlines[i].justifyShift || 0);\r\n\t\t\tsum += group.inlines[i].width + justifyShift;\r\n\t\t}\r\n\t\treturn sum;\r\n\t}\r\n\tvar firstInline = group.inlines[0],\r\n\t\tbiggerInline = maxInline(),\r\n\t\ttotalWidth = width(),\r\n\t\tlineAscent = group.line.getAscenderHeight(),\r\n\t\tascent = biggerInline.font.ascender / 1000 * biggerInline.fontSize,\r\n\t\theight = biggerInline.height,\r\n\t\tdescent = height - ascent;\r\n\r\n\tvar lw = 0.5 + Math.floor(Math.max(biggerInline.fontSize - 8, 0) / 2) * 0.12;\r\n\r\n\tswitch (group.decoration) {\r\n\t\tcase 'underline':\r\n\t\t\ty += lineAscent + descent * 0.45;\r\n\t\t\tbreak;\r\n\t\tcase 'overline':\r\n\t\t\ty += lineAscent - (ascent * 0.85);\r\n\t\t\tbreak;\r\n\t\tcase 'lineThrough':\r\n\t\t\ty += lineAscent - (ascent * 0.25);\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tthrow 'Unknown decoration : ' + group.decoration;\r\n\t}\r\n\tpdfKitDoc.save();\r\n\r\n\tif (group.decorationStyle === 'double') {\r\n\t\tvar gap = Math.max(0.5, lw * 2);\r\n\t\tpdfKitDoc.fillColor(group.decorationColor)\r\n\t\t\t.rect(x + firstInline.x, y - lw / 2, totalWidth, lw / 2).fill()\r\n\t\t\t.rect(x + firstInline.x, y + gap - lw / 2, totalWidth, lw / 2).fill();\r\n\t} else if (group.decorationStyle === 'dashed') {\r\n\t\tvar nbDashes = Math.ceil(totalWidth / (3.96 + 2.84));\r\n\t\tvar rdx = x + firstInline.x;\r\n\t\tpdfKitDoc.rect(rdx, y, totalWidth, lw).clip();\r\n\t\tpdfKitDoc.fillColor(group.decorationColor);\r\n\t\tfor (var i = 0; i < nbDashes; i++) {\r\n\t\t\tpdfKitDoc.rect(rdx, y - lw / 2, 3.96, lw).fill();\r\n\t\t\trdx += 3.96 + 2.84;\r\n\t\t}\r\n\t} else if (group.decorationStyle === 'dotted') {\r\n\t\tvar nbDots = Math.ceil(totalWidth / (lw * 3));\r\n\t\tvar rx = x + firstInline.x;\r\n\t\tpdfKitDoc.rect(rx, y, totalWidth, lw).clip();\r\n\t\tpdfKitDoc.fillColor(group.decorationColor);\r\n\t\tfor (var ii = 0; ii < nbDots; ii++) {\r\n\t\t\tpdfKitDoc.rect(rx, y - lw / 2, lw, lw).fill();\r\n\t\t\trx += (lw * 3);\r\n\t\t}\r\n\t} else if (group.decorationStyle === 'wavy') {\r\n\t\tvar sh = 0.7, sv = 1;\r\n\t\tvar nbWaves = Math.ceil(totalWidth / (sh * 2)) + 1;\r\n\t\tvar rwx = x + firstInline.x - 1;\r\n\t\tpdfKitDoc.rect(x + firstInline.x, y - sv, totalWidth, y + sv).clip();\r\n\t\tpdfKitDoc.lineWidth(0.24);\r\n\t\tpdfKitDoc.moveTo(rwx, y);\r\n\t\tfor (var iii = 0; iii < nbWaves; iii++) {\r\n\t\t\tpdfKitDoc.bezierCurveTo(rwx + sh, y - sv, rwx + sh * 2, y - sv, rwx + sh * 3, y)\r\n\t\t\t\t.bezierCurveTo(rwx + sh * 4, y + sv, rwx + sh * 5, y + sv, rwx + sh * 6, y);\r\n\t\t\trwx += sh * 6;\r\n\t\t}\r\n\t\tpdfKitDoc.stroke(group.decorationColor);\r\n\t} else {\r\n\t\tpdfKitDoc.fillColor(group.decorationColor)\r\n\t\t\t.rect(x + firstInline.x, y - lw / 2, totalWidth, lw)\r\n\t\t\t.fill();\r\n\t}\r\n\tpdfKitDoc.restore();\r\n}\r\n\r\nfunction drawDecorations(line, x, y, pdfKitDoc) {\r\n\tvar groups = groupDecorations(line);\r\n\tfor (var i = 0, l = groups.length; i < l; i++) {\r\n\t\tdrawDecoration(groups[i], x, y, pdfKitDoc);\r\n\t}\r\n}\r\n\r\nfunction drawBackground(line, x, y, patterns, pdfKitDoc) {\r\n\tvar height = line.getHeight();\r\n\tfor (var i = 0, l = line.inlines.length; i < l; i++) {\r\n\t\tvar inline = line.inlines[i];\r\n\t\tif (!inline.background) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tvar color = inline.background;\r\n\t\tif (isPattern(inline.background)) {\r\n\t\t\tcolor = getPattern(inline.background, patterns);\r\n\t\t}\r\n\t\tvar justifyShift = (inline.justifyShift || 0);\r\n\t\tpdfKitDoc.fillColor(color)\r\n\t\t\t.rect(x + inline.x - justifyShift, y, inline.width + justifyShift, height)\r\n\t\t\t.fill();\r\n\t}\r\n}\r\n\r\nmodule.exports = {\r\n\tdrawBackground: drawBackground,\r\n\tdrawDecorations: drawDecorations\r\n};\r\n","'use strict';\r\n\r\nvar isString = require('./helpers').isString;\r\nvar isNumber = require('./helpers').isNumber;\r\nvar isObject = require('./helpers').isObject;\r\nvar isArray = require('./helpers').isArray;\r\nvar isUndefined = require('./helpers').isUndefined;\r\nvar LineBreaker = require('@foliojs-fork/linebreak');\r\n\r\nvar LEADING = /^(\\s)+/g;\r\nvar TRAILING = /(\\s)+$/g;\r\n\r\n/**\r\n * Creates an instance of TextTools - text measurement utility\r\n *\r\n * @constructor\r\n * @param {FontProvider} fontProvider\r\n */\r\nfunction TextTools(fontProvider) {\r\n\tthis.fontProvider = fontProvider;\r\n}\r\n\r\n/**\r\n * Converts an array of strings (or inline-definition-objects) into a collection\r\n * of inlines and calculated minWidth/maxWidth.\r\n * and their min/max widths\r\n * @param  {Object} textArray - an array of inline-definition-objects (or strings)\r\n * @param  {Object} styleContextStack current style stack\r\n * @return {Object}                   collection of inlines, minWidth, maxWidth\r\n */\r\nTextTools.prototype.buildInlines = function (textArray, styleContextStack) {\r\n\tvar measured = measure(this.fontProvider, textArray, styleContextStack);\r\n\r\n\tvar minWidth = 0,\r\n\t\tmaxWidth = 0,\r\n\t\tcurrentLineWidth;\r\n\r\n\tmeasured.forEach(function (inline) {\r\n\t\tminWidth = Math.max(minWidth, inline.width - inline.leadingCut - inline.trailingCut);\r\n\r\n\t\tif (!currentLineWidth) {\r\n\t\t\tcurrentLineWidth = { width: 0, leadingCut: inline.leadingCut, trailingCut: 0 };\r\n\t\t}\r\n\r\n\t\tcurrentLineWidth.width += inline.width;\r\n\t\tcurrentLineWidth.trailingCut = inline.trailingCut;\r\n\r\n\t\tmaxWidth = Math.max(maxWidth, getTrimmedWidth(currentLineWidth));\r\n\r\n\t\tif (inline.lineEnd) {\r\n\t\t\tcurrentLineWidth = null;\r\n\t\t}\r\n\t});\r\n\r\n\tif (getStyleProperty({}, styleContextStack, 'noWrap', false)) {\r\n\t\tminWidth = maxWidth;\r\n\t}\r\n\r\n\treturn {\r\n\t\titems: measured,\r\n\t\tminWidth: minWidth,\r\n\t\tmaxWidth: maxWidth\r\n\t};\r\n\r\n\tfunction getTrimmedWidth(item) {\r\n\t\treturn Math.max(0, item.width - item.leadingCut - item.trailingCut);\r\n\t}\r\n};\r\n\r\n/**\r\n * Returns size of the specified string (without breaking it) using the current style\r\n * @param  {String} text              text to be measured\r\n * @param  {Object} styleContextStack current style stack\r\n * @return {Object}                   size of the specified string\r\n */\r\nTextTools.prototype.sizeOfString = function (text, styleContextStack) {\r\n\ttext = text ? text.toString().replace(/\\t/g, '    ') : '';\r\n\r\n\t//TODO: refactor - extract from measure\r\n\tvar fontName = getStyleProperty({}, styleContextStack, 'font', 'Roboto');\r\n\tvar fontSize = getStyleProperty({}, styleContextStack, 'fontSize', 12);\r\n\tvar fontFeatures = getStyleProperty({}, styleContextStack, 'fontFeatures', null);\r\n\tvar bold = getStyleProperty({}, styleContextStack, 'bold', false);\r\n\tvar italics = getStyleProperty({}, styleContextStack, 'italics', false);\r\n\tvar lineHeight = getStyleProperty({}, styleContextStack, 'lineHeight', 1);\r\n\tvar characterSpacing = getStyleProperty({}, styleContextStack, 'characterSpacing', 0);\r\n\r\n\tvar font = this.fontProvider.provideFont(fontName, bold, italics);\r\n\r\n\treturn {\r\n\t\twidth: widthOfString(text, font, fontSize, characterSpacing, fontFeatures),\r\n\t\theight: font.lineHeight(fontSize) * lineHeight,\r\n\t\tfontSize: fontSize,\r\n\t\tlineHeight: lineHeight,\r\n\t\tascender: font.ascender / 1000 * fontSize,\r\n\t\tdescender: font.descender / 1000 * fontSize\r\n\t};\r\n};\r\n\r\n/**\r\n * Returns size of the specified rotated string (without breaking it) using the current style\r\n *\r\n * @param  {string} text text to be measured\r\n * @param  {number} angle\r\n * @param  {object} styleContextStack current style stack\r\n * @returns {object} size of the specified string\r\n */\r\nTextTools.prototype.sizeOfRotatedText = function (text, angle, styleContextStack) {\r\n\tvar angleRad = angle * Math.PI / -180;\r\n\tvar size = this.sizeOfString(text, styleContextStack);\r\n\treturn {\r\n\t\twidth: Math.abs(size.height * Math.sin(angleRad)) + Math.abs(size.width * Math.cos(angleRad)),\r\n\t\theight: Math.abs(size.width * Math.sin(angleRad)) + Math.abs(size.height * Math.cos(angleRad))\r\n\t};\r\n}\r\n\r\nTextTools.prototype.widthOfString = function (text, font, fontSize, characterSpacing, fontFeatures) {\r\n\treturn widthOfString(text, font, fontSize, characterSpacing, fontFeatures);\r\n};\r\n\r\nfunction splitWords(text, noWrap) {\r\n\tvar results = [];\r\n\ttext = text.replace(/\\t/g, '    ');\r\n\r\n\tif (noWrap) {\r\n\t\tresults.push({ text: text });\r\n\t\treturn results;\r\n\t}\r\n\r\n\tvar breaker = new LineBreaker(text);\r\n\tvar last = 0;\r\n\tvar bk;\r\n\r\n\twhile (bk = breaker.nextBreak()) {\r\n\t\tvar word = text.slice(last, bk.position);\r\n\r\n\t\tif (bk.required || word.match(/\\r?\\n$|\\r$/)) { // new line\r\n\t\t\tword = word.replace(/\\r?\\n$|\\r$/, '');\r\n\t\t\tresults.push({ text: word, lineEnd: true });\r\n\t\t} else {\r\n\t\t\tresults.push({ text: word });\r\n\t\t}\r\n\r\n\t\tlast = bk.position;\r\n\t}\r\n\r\n\treturn results;\r\n}\r\n\r\nfunction copyStyle(source, destination) {\r\n\tdestination = destination || {};\r\n\tsource = source || {}; //TODO: default style\r\n\r\n\tfor (var key in source) {\r\n\t\tif (key != 'text' && source.hasOwnProperty(key)) {\r\n\t\t\tdestination[key] = source[key];\r\n\t\t}\r\n\t}\r\n\r\n\treturn destination;\r\n}\r\n\r\nfunction normalizeTextArray(array, styleContextStack) {\r\n\tfunction flatten(array) {\r\n\t\treturn array.reduce(function (prev, cur) {\r\n\t\t\tvar current = isArray(cur.text) ? flatten(cur.text) : cur;\r\n\t\t\tvar more = [].concat(current).some(Array.isArray);\r\n\t\t\treturn prev.concat(more ? flatten(current) : current);\r\n\t\t}, []);\r\n\t}\r\n\r\n\tfunction getOneWord(index, words, noWrap) {\r\n\t\tif (isUndefined(words[index])) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (words[index].lineEnd) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tvar word = words[index].text;\r\n\r\n\t\tif (noWrap) {\r\n\t\t\tvar tmpWords = splitWords(normalizeString(word), false);\r\n\t\t\tif (isUndefined(tmpWords[tmpWords.length - 1])) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tword = tmpWords[tmpWords.length - 1].text;\r\n\t\t}\r\n\r\n\t\treturn word;\r\n\t}\r\n\r\n\tvar results = [];\r\n\r\n\tif (!isArray(array)) {\r\n\t\tarray = [array];\r\n\t}\r\n\r\n\tarray = flatten(array);\r\n\r\n\tvar lastWord = null;\r\n\tfor (var i = 0, l = array.length; i < l; i++) {\r\n\t\tvar item = array[i];\r\n\t\tvar style = null;\r\n\t\tvar words;\r\n\r\n\t\tvar noWrap = getStyleProperty(item || {}, styleContextStack, 'noWrap', false);\r\n\t\tif (isObject(item)) {\r\n\t\t\tif (item._textRef && item._textRef._textNodeRef.text) {\r\n\t\t\t\titem.text = item._textRef._textNodeRef.text;\r\n\t\t\t}\r\n\t\t\twords = splitWords(normalizeString(item.text), noWrap);\r\n\t\t\tstyle = copyStyle(item);\r\n\t\t} else {\r\n\t\t\twords = splitWords(normalizeString(item), noWrap);\r\n\t\t}\r\n\r\n\t\tif (lastWord && words.length) {\r\n\t\t\tvar firstWord = getOneWord(0, words, noWrap);\r\n\r\n\t\t\tvar wrapWords = splitWords(normalizeString(lastWord + firstWord), false);\r\n\t\t\tif (wrapWords.length === 1) {\r\n\t\t\t\tresults[results.length - 1].noNewLine = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (var i2 = 0, l2 = words.length; i2 < l2; i2++) {\r\n\t\t\tvar result = {\r\n\t\t\t\ttext: words[i2].text\r\n\t\t\t};\r\n\r\n\t\t\tif (words[i2].lineEnd) {\r\n\t\t\t\tresult.lineEnd = true;\r\n\t\t\t}\r\n\r\n\t\t\tcopyStyle(style, result);\r\n\r\n\t\t\tresults.push(result);\r\n\t\t}\r\n\r\n\t\tlastWord = null;\r\n\t\tif (i + 1 < l) {\r\n\t\t\tlastWord = getOneWord(words.length - 1, words, noWrap);\r\n\t\t}\r\n\t}\r\n\r\n\treturn results;\r\n}\r\n\r\nfunction normalizeString(value) {\r\n\tif (value === undefined || value === null) {\r\n\t\treturn '';\r\n\t} else if (isNumber(value)) {\r\n\t\treturn value.toString();\r\n\t} else if (isString(value)) {\r\n\t\treturn value;\r\n\t} else {\r\n\t\treturn value.toString();\r\n\t}\r\n}\r\n\r\nfunction getStyleProperty(item, styleContextStack, property, defaultValue) {\r\n\tvar value;\r\n\r\n\tif (item[property] !== undefined && item[property] !== null) {\r\n\t\t// item defines this property\r\n\t\treturn item[property];\r\n\t}\r\n\r\n\tif (!styleContextStack) {\r\n\t\treturn defaultValue;\r\n\t}\r\n\r\n\tstyleContextStack.auto(item, function () {\r\n\t\tvalue = styleContextStack.getProperty(property);\r\n\t});\r\n\r\n\tif (value !== null && value !== undefined) {\r\n\t\treturn value;\r\n\t} else {\r\n\t\treturn defaultValue;\r\n\t}\r\n}\r\n\r\nfunction measure(fontProvider, textArray, styleContextStack) {\r\n\tvar normalized = normalizeTextArray(textArray, styleContextStack);\r\n\r\n\tif (normalized.length) {\r\n\t\tvar leadingIndent = getStyleProperty(normalized[0], styleContextStack, 'leadingIndent', 0);\r\n\r\n\t\tif (leadingIndent) {\r\n\t\t\tnormalized[0].leadingCut = -leadingIndent;\r\n\t\t\tnormalized[0].leadingIndent = leadingIndent;\r\n\t\t}\r\n\t}\r\n\r\n\tnormalized.forEach(function (item) {\r\n\t\tvar fontName = getStyleProperty(item, styleContextStack, 'font', 'Roboto');\r\n\t\tvar fontSize = getStyleProperty(item, styleContextStack, 'fontSize', 12);\r\n\t\tvar fontFeatures = getStyleProperty(item, styleContextStack, 'fontFeatures', null);\r\n\t\tvar bold = getStyleProperty(item, styleContextStack, 'bold', false);\r\n\t\tvar italics = getStyleProperty(item, styleContextStack, 'italics', false);\r\n\t\tvar color = getStyleProperty(item, styleContextStack, 'color', 'black');\r\n\t\tvar decoration = getStyleProperty(item, styleContextStack, 'decoration', null);\r\n\t\tvar decorationColor = getStyleProperty(item, styleContextStack, 'decorationColor', null);\r\n\t\tvar decorationStyle = getStyleProperty(item, styleContextStack, 'decorationStyle', null);\r\n\t\tvar background = getStyleProperty(item, styleContextStack, 'background', null);\r\n\t\tvar lineHeight = getStyleProperty(item, styleContextStack, 'lineHeight', 1);\r\n\t\tvar characterSpacing = getStyleProperty(item, styleContextStack, 'characterSpacing', 0);\r\n\t\tvar link = getStyleProperty(item, styleContextStack, 'link', null);\r\n\t\tvar linkToPage = getStyleProperty(item, styleContextStack, 'linkToPage', null);\r\n\t\tvar linkToDestination = getStyleProperty(item, styleContextStack, 'linkToDestination', null);\r\n\t\tvar noWrap = getStyleProperty(item, styleContextStack, 'noWrap', null);\r\n\t\tvar preserveLeadingSpaces = getStyleProperty(item, styleContextStack, 'preserveLeadingSpaces', false);\r\n\t\tvar preserveTrailingSpaces = getStyleProperty(item, styleContextStack, 'preserveTrailingSpaces', false);\r\n\t\tvar opacity = getStyleProperty(item, styleContextStack, 'opacity', 1);\r\n\t\tvar sup = getStyleProperty(item, styleContextStack, 'sup', false);\r\n\t\tvar sub = getStyleProperty(item, styleContextStack, 'sub', false);\r\n\r\n\t\tif ((sup || sub) && item.fontSize === undefined) {\r\n\t\t\t// font size reduction taken from here: https://en.wikipedia.org/wiki/Subscript_and_superscript#Desktop_publishing\r\n\t\t\tfontSize *= 0.58\r\n\t\t}\r\n\r\n\t\tvar font = fontProvider.provideFont(fontName, bold, italics);\r\n\r\n\t\titem.width = widthOfString(item.text, font, fontSize, characterSpacing, fontFeatures);\r\n\t\titem.height = font.lineHeight(fontSize) * lineHeight;\r\n\r\n\t\tif (!item.leadingCut) {\r\n\t\t\titem.leadingCut = 0;\r\n\t\t}\r\n\r\n\t\tvar leadingSpaces;\r\n\t\tif (!preserveLeadingSpaces && (leadingSpaces = item.text.match(LEADING))) {\r\n\t\t\titem.leadingCut += widthOfString(leadingSpaces[0], font, fontSize, characterSpacing, fontFeatures);\r\n\t\t}\r\n\r\n\t\tvar trailingSpaces;\r\n\t\tif (!preserveTrailingSpaces && (trailingSpaces = item.text.match(TRAILING))) {\r\n\t\t\titem.trailingCut = widthOfString(trailingSpaces[0], font, fontSize, characterSpacing, fontFeatures);\r\n\t\t} else {\r\n\t\t\titem.trailingCut = 0;\r\n\t\t}\r\n\r\n\t\titem.alignment = getStyleProperty(item, styleContextStack, 'alignment', 'left');\r\n\t\titem.font = font;\r\n\t\titem.fontSize = fontSize;\r\n\t\titem.fontFeatures = fontFeatures;\r\n\t\titem.characterSpacing = characterSpacing;\r\n\t\titem.color = color;\r\n\t\titem.decoration = decoration;\r\n\t\titem.decorationColor = decorationColor;\r\n\t\titem.decorationStyle = decorationStyle;\r\n\t\titem.background = background;\r\n\t\titem.link = link;\r\n\t\titem.linkToPage = linkToPage;\r\n\t\titem.linkToDestination = linkToDestination;\r\n\t\titem.noWrap = noWrap;\r\n\t\titem.opacity = opacity;\r\n\t\titem.sup = sup;\r\n\t\titem.sub = sub;\r\n\t});\r\n\r\n\treturn normalized;\r\n}\r\n\r\nfunction widthOfString(text, font, fontSize, characterSpacing, fontFeatures) {\r\n\treturn font.widthOfString(text, fontSize, fontFeatures) + ((characterSpacing || 0) * (text.length - 1));\r\n}\r\n\r\nmodule.exports = TextTools;\r\n","'use strict';\r\n\r\nfunction TraversalTracker() {\r\n\tthis.events = {};\r\n}\r\n\r\nTraversalTracker.prototype.startTracking = function (event, callback) {\r\n\tvar callbacks = this.events[event] || (this.events[event] = []);\r\n\r\n\tif (callbacks.indexOf(callback) < 0) {\r\n\t\tcallbacks.push(callback);\r\n\t}\r\n};\r\n\r\nTraversalTracker.prototype.stopTracking = function (event, callback) {\r\n\tvar callbacks = this.events[event];\r\n\r\n\tif (!callbacks) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar index = callbacks.indexOf(callback);\r\n\tif (index >= 0) {\r\n\t\tcallbacks.splice(index, 1);\r\n\t}\r\n};\r\n\r\nTraversalTracker.prototype.emit = function (event) {\r\n\tvar args = Array.prototype.slice.call(arguments, 1);\r\n\tvar callbacks = this.events[event];\r\n\r\n\tif (!callbacks) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tcallbacks.forEach(function (callback) {\r\n\t\tcallback.apply(this, args);\r\n\t});\r\n};\r\n\r\nTraversalTracker.prototype.auto = function (event, callback, innerFunction) {\r\n\tthis.startTracking(event, callback);\r\n\tinnerFunction();\r\n\tthis.stopTracking(event, callback);\r\n};\r\n\r\nmodule.exports = TraversalTracker;\r\n","/*\n* FileSaver.js\n* A saveAs() FileSaver implementation.\n*\n* By Eli Grey, http://eligrey.com\n*\n* License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT)\n* source  : http://purl.eligrey.com/github/FileSaver.js\n*/\n\n// The one and only way of getting global scope in all environments\n// https://stackoverflow.com/q/3277182/1008999\nvar _global = typeof window === 'object' && window.window === window\n  ? window : typeof self === 'object' && self.self === self\n  ? self : typeof global === 'object' && global.global === global\n  ? global\n  : this\n\nfunction bom (blob, opts) {\n  if (typeof opts === 'undefined') opts = { autoBom: false }\n  else if (typeof opts !== 'object') {\n    console.warn('Deprecated: Expected third argument to be a object')\n    opts = { autoBom: !opts }\n  }\n\n  // prepend BOM for UTF-8 XML and text/* types (including HTML)\n  // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n  if (opts.autoBom && /^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) {\n    return new Blob([String.fromCharCode(0xFEFF), blob], { type: blob.type })\n  }\n  return blob\n}\n\nfunction download (url, name, opts) {\n  var xhr = new XMLHttpRequest()\n  xhr.open('GET', url)\n  xhr.responseType = 'blob'\n  xhr.onload = function () {\n    saveAs(xhr.response, name, opts)\n  }\n  xhr.onerror = function () {\n    console.error('could not download file')\n  }\n  xhr.send()\n}\n\nfunction corsEnabled (url) {\n  var xhr = new XMLHttpRequest()\n  // use sync to avoid popup blocker\n  xhr.open('HEAD', url, false)\n  try {\n    xhr.send()\n  } catch (e) {}\n  return xhr.status >= 200 && xhr.status <= 299\n}\n\n// `a.click()` doesn't work for all browsers (#465)\nfunction click (node) {\n  try {\n    node.dispatchEvent(new MouseEvent('click'))\n  } catch (e) {\n    var evt = document.createEvent('MouseEvents')\n    evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80,\n                          20, false, false, false, false, 0, null)\n    node.dispatchEvent(evt)\n  }\n}\n\n// Detect WebView inside a native macOS app by ruling out all browsers\n// We just need to check for 'Safari' because all other browsers (besides Firefox) include that too\n// https://www.whatismybrowser.com/guides/the-latest-user-agent/macos\nvar isMacOSWebView = _global.navigator && /Macintosh/.test(navigator.userAgent) && /AppleWebKit/.test(navigator.userAgent) && !/Safari/.test(navigator.userAgent)\n\nvar saveAs = _global.saveAs || (\n  // probably in some web worker\n  (typeof window !== 'object' || window !== _global)\n    ? function saveAs () { /* noop */ }\n\n  // Use download attribute first if possible (#193 Lumia mobile) unless this is a macOS WebView\n  : ('download' in HTMLAnchorElement.prototype && !isMacOSWebView)\n  ? function saveAs (blob, name, opts) {\n    var URL = _global.URL || _global.webkitURL\n    var a = document.createElement('a')\n    name = name || blob.name || 'download'\n\n    a.download = name\n    a.rel = 'noopener' // tabnabbing\n\n    // TODO: detect chrome extensions & packaged apps\n    // a.target = '_blank'\n\n    if (typeof blob === 'string') {\n      // Support regular links\n      a.href = blob\n      if (a.origin !== location.origin) {\n        corsEnabled(a.href)\n          ? download(blob, name, opts)\n          : click(a, a.target = '_blank')\n      } else {\n        click(a)\n      }\n    } else {\n      // Support blobs\n      a.href = URL.createObjectURL(blob)\n      setTimeout(function () { URL.revokeObjectURL(a.href) }, 4E4) // 40s\n      setTimeout(function () { click(a) }, 0)\n    }\n  }\n\n  // Use msSaveOrOpenBlob as a second approach\n  : 'msSaveOrOpenBlob' in navigator\n  ? function saveAs (blob, name, opts) {\n    name = name || blob.name || 'download'\n\n    if (typeof blob === 'string') {\n      if (corsEnabled(blob)) {\n        download(blob, name, opts)\n      } else {\n        var a = document.createElement('a')\n        a.href = blob\n        a.target = '_blank'\n        setTimeout(function () { click(a) })\n      }\n    } else {\n      navigator.msSaveOrOpenBlob(bom(blob, opts), name)\n    }\n  }\n\n  // Fallback to using FileReader and a popup\n  : function saveAs (blob, name, opts, popup) {\n    // Open a popup immediately do go around popup blocker\n    // Mostly only available on user interaction and the fileReader is async so...\n    popup = popup || open('', '_blank')\n    if (popup) {\n      popup.document.title =\n      popup.document.body.innerText = 'downloading...'\n    }\n\n    if (typeof blob === 'string') return download(blob, name, opts)\n\n    var force = blob.type === 'application/octet-stream'\n    var isSafari = /constructor/i.test(_global.HTMLElement) || _global.safari\n    var isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent)\n\n    if ((isChromeIOS || (force && isSafari) || isMacOSWebView) && typeof FileReader !== 'undefined') {\n      // Safari doesn't allow downloading of blob URLs\n      var reader = new FileReader()\n      reader.onloadend = function () {\n        var url = reader.result\n        url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, 'data:attachment/file;')\n        if (popup) popup.location.href = url\n        else location = url\n        popup = null // reverse-tabnabbing #460\n      }\n      reader.readAsDataURL(blob)\n    } else {\n      var URL = _global.URL || _global.webkitURL\n      var url = URL.createObjectURL(blob)\n      if (popup) popup.location = url\n      else location.href = url\n      popup = null // reverse-tabnabbing #460\n      setTimeout(function () { URL.revokeObjectURL(url) }, 4E4) // 40s\n    }\n  }\n)\n\n_global.saveAs = saveAs.saveAs = saveAs\n\nif (typeof module !== 'undefined') {\n  module.exports = saveAs;\n}\n","'use strict';\n\nrequire(\"core-js/modules/es.symbol.js\");\nrequire(\"core-js/modules/es.symbol.description.js\");\nrequire(\"core-js/modules/es.symbol.iterator.js\");\nrequire(\"core-js/modules/es.symbol.to-primitive.js\");\nrequire(\"core-js/modules/es.date.to-primitive.js\");\nrequire(\"core-js/modules/es.array.concat.js\");\nrequire(\"core-js/modules/es.array.fill.js\");\nrequire(\"core-js/modules/es.array.from.js\");\nrequire(\"core-js/modules/es.array.iterator.js\");\nrequire(\"core-js/modules/es.array.join.js\");\nrequire(\"core-js/modules/es.array.map.js\");\nrequire(\"core-js/modules/es.array.slice.js\");\nrequire(\"core-js/modules/es.array.sort.js\");\nrequire(\"core-js/modules/es.array.splice.js\");\nrequire(\"core-js/modules/es.function.name.js\");\nrequire(\"core-js/modules/es.map.js\");\nrequire(\"core-js/modules/es.number.constructor.js\");\nrequire(\"core-js/modules/es.number.epsilon.js\");\nrequire(\"core-js/modules/es.object.assign.js\");\nrequire(\"core-js/modules/es.object.freeze.js\");\nrequire(\"core-js/modules/es.object.get-own-property-descriptor.js\");\nrequire(\"core-js/modules/es.object.keys.js\");\nrequire(\"core-js/modules/es.object.to-string.js\");\nrequire(\"core-js/modules/es.promise.js\");\nrequire(\"core-js/modules/es.regexp.exec.js\");\nrequire(\"core-js/modules/es.regexp.flags.js\");\nrequire(\"core-js/modules/es.regexp.to-string.js\");\nrequire(\"core-js/modules/es.set.js\");\nrequire(\"core-js/modules/es.string.from-code-point.js\");\nrequire(\"core-js/modules/es.string.iterator.js\");\nrequire(\"core-js/modules/es.string.match.js\");\nrequire(\"core-js/modules/es.string.repeat.js\");\nrequire(\"core-js/modules/es.string.trim.js\");\nrequire(\"core-js/modules/es.typed-array.int16-array.js\");\nrequire(\"core-js/modules/es.typed-array.uint16-array.js\");\nrequire(\"core-js/modules/es.typed-array.copy-within.js\");\nrequire(\"core-js/modules/es.typed-array.every.js\");\nrequire(\"core-js/modules/es.typed-array.fill.js\");\nrequire(\"core-js/modules/es.typed-array.filter.js\");\nrequire(\"core-js/modules/es.typed-array.find.js\");\nrequire(\"core-js/modules/es.typed-array.find-index.js\");\nrequire(\"core-js/modules/es.typed-array.for-each.js\");\nrequire(\"core-js/modules/es.typed-array.includes.js\");\nrequire(\"core-js/modules/es.typed-array.index-of.js\");\nrequire(\"core-js/modules/es.typed-array.iterator.js\");\nrequire(\"core-js/modules/es.typed-array.join.js\");\nrequire(\"core-js/modules/es.typed-array.last-index-of.js\");\nrequire(\"core-js/modules/es.typed-array.map.js\");\nrequire(\"core-js/modules/es.typed-array.reduce.js\");\nrequire(\"core-js/modules/es.typed-array.reduce-right.js\");\nrequire(\"core-js/modules/es.typed-array.reverse.js\");\nrequire(\"core-js/modules/es.typed-array.set.js\");\nrequire(\"core-js/modules/es.typed-array.slice.js\");\nrequire(\"core-js/modules/es.typed-array.some.js\");\nrequire(\"core-js/modules/es.typed-array.sort.js\");\nrequire(\"core-js/modules/es.typed-array.subarray.js\");\nrequire(\"core-js/modules/es.typed-array.to-locale-string.js\");\nrequire(\"core-js/modules/es.typed-array.to-string.js\");\nrequire(\"core-js/modules/web.dom-collections.for-each.js\");\nrequire(\"core-js/modules/web.dom-collections.iterator.js\");\nvar _;\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : String(i); }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _interopDefault(ex) {\n  return ex && typeof ex === 'object' && 'default' in ex ? ex['default'] : ex;\n}\nvar r = _interopDefault(require('@foliojs-fork/restructure'));\nvar utils = require('@foliojs-fork/restructure/src/utils');\nvar isEqual = _interopDefault(require('deep-equal'));\nvar unicode = _interopDefault(require('unicode-properties'));\nvar UnicodeTrie = _interopDefault(require('unicode-trie'));\nvar StateMachine = _interopDefault(require('dfa'));\nvar cloneDeep = _interopDefault(require('clone'));\nvar inflate = _interopDefault(require('tiny-inflate'));\nvar brotli = _interopDefault(require('brotli/decompress'));\nvar fs = require('fs');\nvar fontkit = {};\nfontkit.logErrors = false;\nvar formats = [];\nfontkit.registerFormat = function (format) {\n  formats.push(format);\n};\nfontkit.openSync = function (filename, postscriptName) {\n  var buffer = fs.readFileSync(filename);\n  return fontkit.create(buffer, postscriptName);\n};\nfontkit.open = function (filename, postscriptName, callback) {\n  if (typeof postscriptName === 'function') {\n    callback = postscriptName;\n    postscriptName = null;\n  }\n  fs.readFile(filename, function (err, buffer) {\n    if (err) {\n      return callback(err);\n    }\n    try {\n      var font = fontkit.create(buffer, postscriptName);\n    } catch (e) {\n      return callback(e);\n    }\n    return callback(null, font);\n  });\n  return;\n};\nfontkit.create = function (buffer, postscriptName) {\n  for (var i = 0; i < formats.length; i++) {\n    var format = formats[i];\n    if (format.probe(buffer)) {\n      var font = new format(new r.DecodeStream(buffer));\n      if (postscriptName) {\n        return font.getFont(postscriptName);\n      }\n      return font;\n    }\n  }\n  throw new Error('Unknown font format');\n};\nfontkit.defaultLanguage = 'en';\nfontkit.setDefaultLanguage = function (lang) {\n  if (lang === void 0) {\n    lang = 'en';\n  }\n  fontkit.defaultLanguage = lang;\n};\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n  return obj;\n}\nfunction _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n  var desc = {};\n  Object.keys(descriptor).forEach(function (key) {\n    desc[key] = descriptor[key];\n  });\n  desc.enumerable = !!desc.enumerable;\n  desc.configurable = !!desc.configurable;\n  if ('value' in desc || desc.initializer) {\n    desc.writable = true;\n  }\n  desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n    return decorator(target, property, desc) || desc;\n  }, desc);\n  if (context && desc.initializer !== void 0) {\n    desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n    desc.initializer = undefined;\n  }\n  if (desc.initializer === void 0) {\n    Object.defineProperty(target, property, desc);\n    desc = null;\n  }\n  return desc;\n}\n\n/**\r\n * This decorator caches the results of a getter or method such that\r\n * the results are lazily computed once, and then cached.\r\n * @private\r\n */\nfunction cache(target, key, descriptor) {\n  if (descriptor.get) {\n    var get = descriptor.get;\n    descriptor.get = function () {\n      var value = get.call(this);\n      Object.defineProperty(this, key, {\n        value: value\n      });\n      return value;\n    };\n  } else if (typeof descriptor.value === 'function') {\n    var fn = descriptor.value;\n    return {\n      get: function get() {\n        var cache = new Map();\n        function memoized() {\n          for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n            args[_key] = arguments[_key];\n          }\n          var key = args.length > 0 ? args[0] : 'value';\n          if (cache.has(key)) {\n            return cache.get(key);\n          }\n          var result = fn.apply(this, args);\n          cache.set(key, result);\n          return result;\n        }\n        Object.defineProperty(this, key, {\n          value: memoized\n        });\n        return memoized;\n      }\n    };\n  }\n}\nvar SubHeader = new r.Struct({\n  firstCode: r.uint16,\n  entryCount: r.uint16,\n  idDelta: r.int16,\n  idRangeOffset: r.uint16\n});\nvar CmapGroup = new r.Struct({\n  startCharCode: r.uint32,\n  endCharCode: r.uint32,\n  glyphID: r.uint32\n});\nvar UnicodeValueRange = new r.Struct({\n  startUnicodeValue: r.uint24,\n  additionalCount: r.uint8\n});\nvar UVSMapping = new r.Struct({\n  unicodeValue: r.uint24,\n  glyphID: r.uint16\n});\nvar DefaultUVS = new r.Array(UnicodeValueRange, r.uint32);\nvar NonDefaultUVS = new r.Array(UVSMapping, r.uint32);\nvar VarSelectorRecord = new r.Struct({\n  varSelector: r.uint24,\n  defaultUVS: new r.Pointer(r.uint32, DefaultUVS, {\n    type: 'parent'\n  }),\n  nonDefaultUVS: new r.Pointer(r.uint32, NonDefaultUVS, {\n    type: 'parent'\n  })\n});\nvar CmapSubtable = new r.VersionedStruct(r.uint16, {\n  0: {\n    // Byte encoding\n    length: r.uint16,\n    // Total table length in bytes (set to 262 for format 0)\n    language: r.uint16,\n    // Language code for this encoding subtable, or zero if language-independent\n    codeMap: new r.LazyArray(r.uint8, 256)\n  },\n  2: {\n    // High-byte mapping (CJK)\n    length: r.uint16,\n    language: r.uint16,\n    subHeaderKeys: new r.Array(r.uint16, 256),\n    subHeaderCount: function subHeaderCount(t) {\n      return Math.max.apply(Math, t.subHeaderKeys);\n    },\n    subHeaders: new r.LazyArray(SubHeader, 'subHeaderCount'),\n    glyphIndexArray: new r.LazyArray(r.uint16, 'subHeaderCount')\n  },\n  4: {\n    // Segment mapping to delta values\n    length: r.uint16,\n    // Total table length in bytes\n    language: r.uint16,\n    // Language code\n    segCountX2: r.uint16,\n    segCount: function segCount(t) {\n      return t.segCountX2 >> 1;\n    },\n    searchRange: r.uint16,\n    entrySelector: r.uint16,\n    rangeShift: r.uint16,\n    endCode: new r.LazyArray(r.uint16, 'segCount'),\n    reservedPad: new r.Reserved(r.uint16),\n    // This value should be zero\n    startCode: new r.LazyArray(r.uint16, 'segCount'),\n    idDelta: new r.LazyArray(r.int16, 'segCount'),\n    idRangeOffset: new r.LazyArray(r.uint16, 'segCount'),\n    glyphIndexArray: new r.LazyArray(r.uint16, function (t) {\n      return (t.length - t._currentOffset) / 2;\n    })\n  },\n  6: {\n    // Trimmed table\n    length: r.uint16,\n    language: r.uint16,\n    firstCode: r.uint16,\n    entryCount: r.uint16,\n    glyphIndices: new r.LazyArray(r.uint16, 'entryCount')\n  },\n  8: {\n    // mixed 16-bit and 32-bit coverage\n    reserved: new r.Reserved(r.uint16),\n    length: r.uint32,\n    language: r.uint16,\n    is32: new r.LazyArray(r.uint8, 8192),\n    nGroups: r.uint32,\n    groups: new r.LazyArray(CmapGroup, 'nGroups')\n  },\n  10: {\n    // Trimmed Array\n    reserved: new r.Reserved(r.uint16),\n    length: r.uint32,\n    language: r.uint32,\n    firstCode: r.uint32,\n    entryCount: r.uint32,\n    glyphIndices: new r.LazyArray(r.uint16, 'numChars')\n  },\n  12: {\n    // Segmented coverage\n    reserved: new r.Reserved(r.uint16),\n    length: r.uint32,\n    language: r.uint32,\n    nGroups: r.uint32,\n    groups: new r.LazyArray(CmapGroup, 'nGroups')\n  },\n  13: {\n    // Many-to-one range mappings (same as 12 except for group.startGlyphID)\n    reserved: new r.Reserved(r.uint16),\n    length: r.uint32,\n    language: r.uint32,\n    nGroups: r.uint32,\n    groups: new r.LazyArray(CmapGroup, 'nGroups')\n  },\n  14: {\n    // Unicode Variation Sequences\n    length: r.uint32,\n    numRecords: r.uint32,\n    varSelectors: new r.LazyArray(VarSelectorRecord, 'numRecords')\n  }\n});\nvar CmapEntry = new r.Struct({\n  platformID: r.uint16,\n  // Platform identifier\n  encodingID: r.uint16,\n  // Platform-specific encoding identifier\n  table: new r.Pointer(r.uint32, CmapSubtable, {\n    type: 'parent',\n    lazy: true\n  })\n}); // character to glyph mapping\n\nvar cmap = new r.Struct({\n  version: r.uint16,\n  numSubtables: r.uint16,\n  tables: new r.Array(CmapEntry, 'numSubtables')\n});\nvar head = new r.Struct({\n  version: r.int32,\n  // 0x00010000 (version 1.0)\n  revision: r.int32,\n  // set by font manufacturer\n  checkSumAdjustment: r.uint32,\n  magicNumber: r.uint32,\n  // set to 0x5F0F3CF5\n  flags: r.uint16,\n  unitsPerEm: r.uint16,\n  // range from 64 to 16384\n  created: new r.Array(r.int32, 2),\n  modified: new r.Array(r.int32, 2),\n  xMin: r.int16,\n  // for all glyph bounding boxes\n  yMin: r.int16,\n  // for all glyph bounding boxes\n  xMax: r.int16,\n  // for all glyph bounding boxes\n  yMax: r.int16,\n  // for all glyph bounding boxes\n  macStyle: new r.Bitfield(r.uint16, ['bold', 'italic', 'underline', 'outline', 'shadow', 'condensed', 'extended']),\n  lowestRecPPEM: r.uint16,\n  // smallest readable size in pixels\n  fontDirectionHint: r.int16,\n  indexToLocFormat: r.int16,\n  // 0 for short offsets, 1 for long\n  glyphDataFormat: r.int16 // 0 for current format\n});\nvar hhea = new r.Struct({\n  version: r.int32,\n  ascent: r.int16,\n  // Distance from baseline of highest ascender\n  descent: r.int16,\n  // Distance from baseline of lowest descender\n  lineGap: r.int16,\n  // Typographic line gap\n  advanceWidthMax: r.uint16,\n  // Maximum advance width value in 'hmtx' table\n  minLeftSideBearing: r.int16,\n  // Maximum advance width value in 'hmtx' table\n  minRightSideBearing: r.int16,\n  // Minimum right sidebearing value\n  xMaxExtent: r.int16,\n  caretSlopeRise: r.int16,\n  // Used to calculate the slope of the cursor (rise/run); 1 for vertical\n  caretSlopeRun: r.int16,\n  // 0 for vertical\n  caretOffset: r.int16,\n  // Set to 0 for non-slanted fonts\n  reserved: new r.Reserved(r.int16, 4),\n  metricDataFormat: r.int16,\n  // 0 for current format\n  numberOfMetrics: r.uint16 // Number of advance widths in 'hmtx' table\n});\nvar HmtxEntry = new r.Struct({\n  advance: r.uint16,\n  bearing: r.int16\n});\nvar hmtx = new r.Struct({\n  metrics: new r.LazyArray(HmtxEntry, function (t) {\n    return t.parent.hhea.numberOfMetrics;\n  }),\n  bearings: new r.LazyArray(r.int16, function (t) {\n    return t.parent.maxp.numGlyphs - t.parent.hhea.numberOfMetrics;\n  })\n});\nvar maxp = new r.Struct({\n  version: r.int32,\n  numGlyphs: r.uint16,\n  // The number of glyphs in the font\n  maxPoints: r.uint16,\n  // Maximum points in a non-composite glyph\n  maxContours: r.uint16,\n  // Maximum contours in a non-composite glyph\n  maxComponentPoints: r.uint16,\n  // Maximum points in a composite glyph\n  maxComponentContours: r.uint16,\n  // Maximum contours in a composite glyph\n  maxZones: r.uint16,\n  // 1 if instructions do not use the twilight zone, 2 otherwise\n  maxTwilightPoints: r.uint16,\n  // Maximum points used in Z0\n  maxStorage: r.uint16,\n  // Number of Storage Area locations\n  maxFunctionDefs: r.uint16,\n  // Number of FDEFs\n  maxInstructionDefs: r.uint16,\n  // Number of IDEFs\n  maxStackElements: r.uint16,\n  // Maximum stack depth\n  maxSizeOfInstructions: r.uint16,\n  // Maximum byte count for glyph instructions\n  maxComponentElements: r.uint16,\n  // Maximum number of components referenced at “top level” for any composite glyph\n  maxComponentDepth: r.uint16 // Maximum levels of recursion; 1 for simple components\n});\n\n/**\r\n * Gets an encoding name from platform, encoding, and language ids.\r\n * Returned encoding names can be used in iconv-lite to decode text.\r\n */\nfunction getEncoding(platformID, encodingID, languageID) {\n  if (languageID === void 0) {\n    languageID = 0;\n  }\n  if (platformID === 1 && MAC_LANGUAGE_ENCODINGS[languageID]) {\n    return MAC_LANGUAGE_ENCODINGS[languageID];\n  }\n  return ENCODINGS[platformID][encodingID];\n} // Map of platform ids to encoding ids.\n\nvar ENCODINGS = [\n// unicode\n['utf16be', 'utf16be', 'utf16be', 'utf16be', 'utf16be', 'utf16be'],\n// macintosh\n// Mappings available at http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/\n// 0\tRoman                 17\tMalayalam\n// 1\tJapanese\t            18\tSinhalese\n// 2\tTraditional Chinese\t  19\tBurmese\n// 3\tKorean\t              20\tKhmer\n// 4\tArabic\t              21\tThai\n// 5\tHebrew\t              22\tLaotian\n// 6\tGreek\t                23\tGeorgian\n// 7\tRussian\t              24\tArmenian\n// 8\tRSymbol\t              25\tSimplified Chinese\n// 9\tDevanagari\t          26\tTibetan\n// 10\tGurmukhi\t            27\tMongolian\n// 11\tGujarati\t            28\tGeez\n// 12\tOriya\t                29\tSlavic\n// 13\tBengali\t              30\tVietnamese\n// 14\tTamil\t                31\tSindhi\n// 15\tTelugu\t              32\t(Uninterpreted)\n// 16\tKannada\n['macroman', 'shift-jis', 'big5', 'euc-kr', 'iso-8859-6', 'iso-8859-8', 'macgreek', 'maccyrillic', 'symbol', 'Devanagari', 'Gurmukhi', 'Gujarati', 'Oriya', 'Bengali', 'Tamil', 'Telugu', 'Kannada', 'Malayalam', 'Sinhalese', 'Burmese', 'Khmer', 'macthai', 'Laotian', 'Georgian', 'Armenian', 'gb-2312-80', 'Tibetan', 'Mongolian', 'Geez', 'maccenteuro', 'Vietnamese', 'Sindhi'],\n// ISO (deprecated)\n['ascii'],\n// windows\n// Docs here: http://msdn.microsoft.com/en-us/library/system.text.encoding(v=vs.110).aspx\n['symbol', 'utf16be', 'shift-jis', 'gb18030', 'big5', 'wansung', 'johab', null, null, null, 'utf16be']]; // Overrides for Mac scripts by language id.\n// See http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt\n\nvar MAC_LANGUAGE_ENCODINGS = {\n  15: 'maciceland',\n  17: 'macturkish',\n  18: 'maccroatian',\n  24: 'maccenteuro',\n  25: 'maccenteuro',\n  26: 'maccenteuro',\n  27: 'maccenteuro',\n  28: 'maccenteuro',\n  30: 'maciceland',\n  37: 'macromania',\n  38: 'maccenteuro',\n  39: 'maccenteuro',\n  40: 'maccenteuro',\n  143: 'macinuit',\n  // Unsupported by iconv-lite\n  146: 'macgaelic' // Unsupported by iconv-lite\n}; // Map of platform ids to BCP-47 language codes.\n\nvar LANGUAGES = [\n// unicode\n[], {\n  // macintosh\n  0: 'en',\n  30: 'fo',\n  60: 'ks',\n  90: 'rw',\n  1: 'fr',\n  31: 'fa',\n  61: 'ku',\n  91: 'rn',\n  2: 'de',\n  32: 'ru',\n  62: 'sd',\n  92: 'ny',\n  3: 'it',\n  33: 'zh',\n  63: 'bo',\n  93: 'mg',\n  4: 'nl',\n  34: 'nl-BE',\n  64: 'ne',\n  94: 'eo',\n  5: 'sv',\n  35: 'ga',\n  65: 'sa',\n  128: 'cy',\n  6: 'es',\n  36: 'sq',\n  66: 'mr',\n  129: 'eu',\n  7: 'da',\n  37: 'ro',\n  67: 'bn',\n  130: 'ca',\n  8: 'pt',\n  38: 'cz',\n  68: 'as',\n  131: 'la',\n  9: 'no',\n  39: 'sk',\n  69: 'gu',\n  132: 'qu',\n  10: 'he',\n  40: 'si',\n  70: 'pa',\n  133: 'gn',\n  11: 'ja',\n  41: 'yi',\n  71: 'or',\n  134: 'ay',\n  12: 'ar',\n  42: 'sr',\n  72: 'ml',\n  135: 'tt',\n  13: 'fi',\n  43: 'mk',\n  73: 'kn',\n  136: 'ug',\n  14: 'el',\n  44: 'bg',\n  74: 'ta',\n  137: 'dz',\n  15: 'is',\n  45: 'uk',\n  75: 'te',\n  138: 'jv',\n  16: 'mt',\n  46: 'be',\n  76: 'si',\n  139: 'su',\n  17: 'tr',\n  47: 'uz',\n  77: 'my',\n  140: 'gl',\n  18: 'hr',\n  48: 'kk',\n  78: 'km',\n  141: 'af',\n  19: 'zh-Hant',\n  49: 'az-Cyrl',\n  79: 'lo',\n  142: 'br',\n  20: 'ur',\n  50: 'az-Arab',\n  80: 'vi',\n  143: 'iu',\n  21: 'hi',\n  51: 'hy',\n  81: 'id',\n  144: 'gd',\n  22: 'th',\n  52: 'ka',\n  82: 'tl',\n  145: 'gv',\n  23: 'ko',\n  53: 'mo',\n  83: 'ms',\n  146: 'ga',\n  24: 'lt',\n  54: 'ky',\n  84: 'ms-Arab',\n  147: 'to',\n  25: 'pl',\n  55: 'tg',\n  85: 'am',\n  148: 'el-polyton',\n  26: 'hu',\n  56: 'tk',\n  86: 'ti',\n  149: 'kl',\n  27: 'es',\n  57: 'mn-CN',\n  87: 'om',\n  150: 'az',\n  28: 'lv',\n  58: 'mn',\n  88: 'so',\n  151: 'nn',\n  29: 'se',\n  59: 'ps',\n  89: 'sw'\n},\n// ISO (deprecated)\n[], {\n  // windows                                        \n  0x0436: 'af',\n  0x4009: 'en-IN',\n  0x0487: 'rw',\n  0x0432: 'tn',\n  0x041C: 'sq',\n  0x1809: 'en-IE',\n  0x0441: 'sw',\n  0x045B: 'si',\n  0x0484: 'gsw',\n  0x2009: 'en-JM',\n  0x0457: 'kok',\n  0x041B: 'sk',\n  0x045E: 'am',\n  0x4409: 'en-MY',\n  0x0412: 'ko',\n  0x0424: 'sl',\n  0x1401: 'ar-DZ',\n  0x1409: 'en-NZ',\n  0x0440: 'ky',\n  0x2C0A: 'es-AR',\n  0x3C01: 'ar-BH',\n  0x3409: 'en-PH',\n  0x0454: 'lo',\n  0x400A: 'es-BO',\n  0x0C01: 'ar',\n  0x4809: 'en-SG',\n  0x0426: 'lv',\n  0x340A: 'es-CL',\n  0x0801: 'ar-IQ',\n  0x1C09: 'en-ZA',\n  0x0427: 'lt',\n  0x240A: 'es-CO',\n  0x2C01: 'ar-JO',\n  0x2C09: 'en-TT',\n  0x082E: 'dsb',\n  0x140A: 'es-CR',\n  0x3401: 'ar-KW',\n  0x0809: 'en-GB',\n  0x046E: 'lb',\n  0x1C0A: 'es-DO',\n  0x3001: 'ar-LB',\n  0x0409: 'en',\n  0x042F: 'mk',\n  0x300A: 'es-EC',\n  0x1001: 'ar-LY',\n  0x3009: 'en-ZW',\n  0x083E: 'ms-BN',\n  0x440A: 'es-SV',\n  0x1801: 'ary',\n  0x0425: 'et',\n  0x043E: 'ms',\n  0x100A: 'es-GT',\n  0x2001: 'ar-OM',\n  0x0438: 'fo',\n  0x044C: 'ml',\n  0x480A: 'es-HN',\n  0x4001: 'ar-QA',\n  0x0464: 'fil',\n  0x043A: 'mt',\n  0x080A: 'es-MX',\n  0x0401: 'ar-SA',\n  0x040B: 'fi',\n  0x0481: 'mi',\n  0x4C0A: 'es-NI',\n  0x2801: 'ar-SY',\n  0x080C: 'fr-BE',\n  0x047A: 'arn',\n  0x180A: 'es-PA',\n  0x1C01: 'aeb',\n  0x0C0C: 'fr-CA',\n  0x044E: 'mr',\n  0x3C0A: 'es-PY',\n  0x3801: 'ar-AE',\n  0x040C: 'fr',\n  0x047C: 'moh',\n  0x280A: 'es-PE',\n  0x2401: 'ar-YE',\n  0x140C: 'fr-LU',\n  0x0450: 'mn',\n  0x500A: 'es-PR',\n  0x042B: 'hy',\n  0x180C: 'fr-MC',\n  0x0850: 'mn-CN',\n  0x0C0A: 'es',\n  0x044D: 'as',\n  0x100C: 'fr-CH',\n  0x0461: 'ne',\n  0x040A: 'es',\n  0x082C: 'az-Cyrl',\n  0x0462: 'fy',\n  0x0414: 'nb',\n  0x540A: 'es-US',\n  0x042C: 'az',\n  0x0456: 'gl',\n  0x0814: 'nn',\n  0x380A: 'es-UY',\n  0x046D: 'ba',\n  0x0437: 'ka',\n  0x0482: 'oc',\n  0x200A: 'es-VE',\n  0x042D: 'eu',\n  0x0C07: 'de-AT',\n  0x0448: 'or',\n  0x081D: 'sv-FI',\n  0x0423: 'be',\n  0x0407: 'de',\n  0x0463: 'ps',\n  0x041D: 'sv',\n  0x0845: 'bn',\n  0x1407: 'de-LI',\n  0x0415: 'pl',\n  0x045A: 'syr',\n  0x0445: 'bn-IN',\n  0x1007: 'de-LU',\n  0x0416: 'pt',\n  0x0428: 'tg',\n  0x201A: 'bs-Cyrl',\n  0x0807: 'de-CH',\n  0x0816: 'pt-PT',\n  0x085F: 'tzm',\n  0x141A: 'bs',\n  0x0408: 'el',\n  0x0446: 'pa',\n  0x0449: 'ta',\n  0x047E: 'br',\n  0x046F: 'kl',\n  0x046B: 'qu-BO',\n  0x0444: 'tt',\n  0x0402: 'bg',\n  0x0447: 'gu',\n  0x086B: 'qu-EC',\n  0x044A: 'te',\n  0x0403: 'ca',\n  0x0468: 'ha',\n  0x0C6B: 'qu',\n  0x041E: 'th',\n  0x0C04: 'zh-HK',\n  0x040D: 'he',\n  0x0418: 'ro',\n  0x0451: 'bo',\n  0x1404: 'zh-MO',\n  0x0439: 'hi',\n  0x0417: 'rm',\n  0x041F: 'tr',\n  0x0804: 'zh',\n  0x040E: 'hu',\n  0x0419: 'ru',\n  0x0442: 'tk',\n  0x1004: 'zh-SG',\n  0x040F: 'is',\n  0x243B: 'smn',\n  0x0480: 'ug',\n  0x0404: 'zh-TW',\n  0x0470: 'ig',\n  0x103B: 'smj-NO',\n  0x0422: 'uk',\n  0x0483: 'co',\n  0x0421: 'id',\n  0x143B: 'smj',\n  0x042E: 'hsb',\n  0x041A: 'hr',\n  0x045D: 'iu',\n  0x0C3B: 'se-FI',\n  0x0420: 'ur',\n  0x101A: 'hr-BA',\n  0x085D: 'iu-Latn',\n  0x043B: 'se',\n  0x0843: 'uz-Cyrl',\n  0x0405: 'cs',\n  0x083C: 'ga',\n  0x083B: 'se-SE',\n  0x0443: 'uz',\n  0x0406: 'da',\n  0x0434: 'xh',\n  0x203B: 'sms',\n  0x042A: 'vi',\n  0x048C: 'prs',\n  0x0435: 'zu',\n  0x183B: 'sma-NO',\n  0x0452: 'cy',\n  0x0465: 'dv',\n  0x0410: 'it',\n  0x1C3B: 'sms',\n  0x0488: 'wo',\n  0x0813: 'nl-BE',\n  0x0810: 'it-CH',\n  0x044F: 'sa',\n  0x0485: 'sah',\n  0x0413: 'nl',\n  0x0411: 'ja',\n  0x1C1A: 'sr-Cyrl-BA',\n  0x0478: 'ii',\n  0x0C09: 'en-AU',\n  0x044B: 'kn',\n  0x0C1A: 'sr',\n  0x046A: 'yo',\n  0x2809: 'en-BZ',\n  0x043F: 'kk',\n  0x181A: 'sr-Latn-BA',\n  0x1009: 'en-CA',\n  0x0453: 'km',\n  0x081A: 'sr-Latn',\n  0x2409: 'en-029',\n  0x0486: 'quc',\n  0x046C: 'nso'\n}];\nvar NameRecord = new r.Struct({\n  platformID: r.uint16,\n  encodingID: r.uint16,\n  languageID: r.uint16,\n  nameID: r.uint16,\n  length: r.uint16,\n  string: new r.Pointer(r.uint16, new r.String('length', function (t) {\n    return getEncoding(t.platformID, t.encodingID, t.languageID);\n  }), {\n    type: 'parent',\n    relativeTo: function relativeTo(ctx) {\n      return ctx.parent.stringOffset;\n    },\n    allowNull: false\n  })\n});\nvar LangTagRecord = new r.Struct({\n  length: r.uint16,\n  tag: new r.Pointer(r.uint16, new r.String('length', 'utf16be'), {\n    type: 'parent',\n    relativeTo: function relativeTo(ctx) {\n      return ctx.stringOffset;\n    }\n  })\n});\nvar NameTable = new r.VersionedStruct(r.uint16, {\n  0: {\n    count: r.uint16,\n    stringOffset: r.uint16,\n    records: new r.Array(NameRecord, 'count')\n  },\n  1: {\n    count: r.uint16,\n    stringOffset: r.uint16,\n    records: new r.Array(NameRecord, 'count'),\n    langTagCount: r.uint16,\n    langTags: new r.Array(LangTagRecord, 'langTagCount')\n  }\n});\nvar NAMES = ['copyright', 'fontFamily', 'fontSubfamily', 'uniqueSubfamily', 'fullName', 'version', 'postscriptName',\n// Note: A font may have only one PostScript name and that name must be ASCII.\n'trademark', 'manufacturer', 'designer', 'description', 'vendorURL', 'designerURL', 'license', 'licenseURL', null,\n// reserved\n'preferredFamily', 'preferredSubfamily', 'compatibleFull', 'sampleText', 'postscriptCIDFontName', 'wwsFamilyName', 'wwsSubfamilyName'];\nNameTable.process = function (stream) {\n  var records = {};\n  for (var _iterator = _createForOfIteratorHelperLoose(this.records), _step; !(_step = _iterator()).done;) {\n    var record = _step.value;\n    // find out what language this is for\n    var language = LANGUAGES[record.platformID][record.languageID];\n    if (language == null && this.langTags != null && record.languageID >= 0x8000) {\n      language = this.langTags[record.languageID - 0x8000].tag;\n    }\n    if (language == null) {\n      language = record.platformID + '-' + record.languageID;\n    } // if the nameID is >= 256, it is a font feature record (AAT)\n\n    var key = record.nameID >= 256 ? 'fontFeatures' : NAMES[record.nameID] || record.nameID;\n    if (records[key] == null) {\n      records[key] = {};\n    }\n    var obj = records[key];\n    if (record.nameID >= 256) {\n      obj = obj[record.nameID] || (obj[record.nameID] = {});\n    }\n    if (typeof record.string === 'string' || typeof obj[language] !== 'string') {\n      obj[language] = record.string;\n    }\n  }\n  this.records = records;\n};\nNameTable.preEncode = function () {\n  if (Array.isArray(this.records)) return;\n  this.version = 0;\n  var records = [];\n  for (var key in this.records) {\n    var val = this.records[key];\n    if (key === 'fontFeatures') continue;\n    records.push({\n      platformID: 3,\n      encodingID: 1,\n      languageID: 0x409,\n      nameID: NAMES.indexOf(key),\n      length: Buffer.byteLength(val.en, 'utf16le'),\n      string: val.en\n    });\n    if (key === 'postscriptName') {\n      records.push({\n        platformID: 1,\n        encodingID: 0,\n        languageID: 0,\n        nameID: NAMES.indexOf(key),\n        length: val.en.length,\n        string: val.en\n      });\n    }\n  }\n  this.records = records;\n  this.count = records.length;\n  this.stringOffset = NameTable.size(this, null, false);\n};\nvar OS2 = new r.VersionedStruct(r.uint16, {\n  header: {\n    xAvgCharWidth: r.int16,\n    // average weighted advance width of lower case letters and space\n    usWeightClass: r.uint16,\n    // visual weight of stroke in glyphs\n    usWidthClass: r.uint16,\n    // relative change from the normal aspect ratio (width to height ratio)\n    fsType: new r.Bitfield(r.uint16, [\n    // Indicates font embedding licensing rights\n    null, 'noEmbedding', 'viewOnly', 'editable', null, null, null, null, 'noSubsetting', 'bitmapOnly']),\n    ySubscriptXSize: r.int16,\n    // recommended horizontal size in pixels for subscripts\n    ySubscriptYSize: r.int16,\n    // recommended vertical size in pixels for subscripts\n    ySubscriptXOffset: r.int16,\n    // recommended horizontal offset for subscripts\n    ySubscriptYOffset: r.int16,\n    // recommended vertical offset form the baseline for subscripts\n    ySuperscriptXSize: r.int16,\n    // recommended horizontal size in pixels for superscripts\n    ySuperscriptYSize: r.int16,\n    // recommended vertical size in pixels for superscripts\n    ySuperscriptXOffset: r.int16,\n    // recommended horizontal offset for superscripts\n    ySuperscriptYOffset: r.int16,\n    // recommended vertical offset from the baseline for superscripts\n    yStrikeoutSize: r.int16,\n    // width of the strikeout stroke\n    yStrikeoutPosition: r.int16,\n    // position of the strikeout stroke relative to the baseline\n    sFamilyClass: r.int16,\n    // classification of font-family design\n    panose: new r.Array(r.uint8, 10),\n    // describe the visual characteristics of a given typeface\n    ulCharRange: new r.Array(r.uint32, 4),\n    vendorID: new r.String(4),\n    // four character identifier for the font vendor\n    fsSelection: new r.Bitfield(r.uint16, [\n    // bit field containing information about the font\n    'italic', 'underscore', 'negative', 'outlined', 'strikeout', 'bold', 'regular', 'useTypoMetrics', 'wws', 'oblique']),\n    usFirstCharIndex: r.uint16,\n    // The minimum Unicode index in this font\n    usLastCharIndex: r.uint16 // The maximum Unicode index in this font\n  },\n  // The Apple version of this table ends here, but the Microsoft one continues on...\n  0: {},\n  1: {\n    typoAscender: r.int16,\n    typoDescender: r.int16,\n    typoLineGap: r.int16,\n    winAscent: r.uint16,\n    winDescent: r.uint16,\n    codePageRange: new r.Array(r.uint32, 2)\n  },\n  2: {\n    // these should be common with version 1 somehow\n    typoAscender: r.int16,\n    typoDescender: r.int16,\n    typoLineGap: r.int16,\n    winAscent: r.uint16,\n    winDescent: r.uint16,\n    codePageRange: new r.Array(r.uint32, 2),\n    xHeight: r.int16,\n    capHeight: r.int16,\n    defaultChar: r.uint16,\n    breakChar: r.uint16,\n    maxContent: r.uint16\n  },\n  5: {\n    typoAscender: r.int16,\n    typoDescender: r.int16,\n    typoLineGap: r.int16,\n    winAscent: r.uint16,\n    winDescent: r.uint16,\n    codePageRange: new r.Array(r.uint32, 2),\n    xHeight: r.int16,\n    capHeight: r.int16,\n    defaultChar: r.uint16,\n    breakChar: r.uint16,\n    maxContent: r.uint16,\n    usLowerOpticalPointSize: r.uint16,\n    usUpperOpticalPointSize: r.uint16\n  }\n});\nvar versions = OS2.versions;\nversions[3] = versions[4] = versions[2];\nvar post = new r.VersionedStruct(r.fixed32, {\n  header: {\n    // these fields exist at the top of all versions\n    italicAngle: r.fixed32,\n    // Italic angle in counter-clockwise degrees from the vertical.\n    underlinePosition: r.int16,\n    // Suggested distance of the top of the underline from the baseline\n    underlineThickness: r.int16,\n    // Suggested values for the underline thickness\n    isFixedPitch: r.uint32,\n    // Whether the font is monospaced\n    minMemType42: r.uint32,\n    // Minimum memory usage when a TrueType font is downloaded as a Type 42 font\n    maxMemType42: r.uint32,\n    // Maximum memory usage when a TrueType font is downloaded as a Type 42 font\n    minMemType1: r.uint32,\n    // Minimum memory usage when a TrueType font is downloaded as a Type 1 font\n    maxMemType1: r.uint32 // Maximum memory usage when a TrueType font is downloaded as a Type 1 font\n  },\n  1: {},\n  // version 1 has no additional fields\n  2: {\n    numberOfGlyphs: r.uint16,\n    glyphNameIndex: new r.Array(r.uint16, 'numberOfGlyphs'),\n    names: new r.Array(new r.String(r.uint8))\n  },\n  2.5: {\n    numberOfGlyphs: r.uint16,\n    offsets: new r.Array(r.uint8, 'numberOfGlyphs')\n  },\n  3: {},\n  // version 3 has no additional fields\n  4: {\n    map: new r.Array(r.uint32, function (t) {\n      return t.parent.maxp.numGlyphs;\n    })\n  }\n});\nvar cvt = new r.Struct({\n  controlValues: new r.Array(r.int16)\n});\n\n// These instructions are known as the font program. The main use of this table\n// is for the definition of functions that are used in many different glyph programs.\n\nvar fpgm = new r.Struct({\n  instructions: new r.Array(r.uint8)\n});\nvar loca = new r.VersionedStruct('head.indexToLocFormat', {\n  0: {\n    offsets: new r.Array(r.uint16)\n  },\n  1: {\n    offsets: new r.Array(r.uint32)\n  }\n});\nloca.process = function () {\n  if (this.version === 0) {\n    for (var i = 0; i < this.offsets.length; i++) {\n      this.offsets[i] <<= 1;\n    }\n  }\n};\nloca.preEncode = function () {\n  if (this.version === 0) {\n    for (var i = 0; i < this.offsets.length; i++) {\n      this.offsets[i] >>>= 1;\n    }\n  }\n};\nvar prep = new r.Struct({\n  controlValueProgram: new r.Array(r.uint8)\n});\nvar glyf = new r.Array(new r.Buffer());\nvar CFFIndex = /*#__PURE__*/function () {\n  function CFFIndex(type) {\n    this.type = type;\n  }\n  var _proto = CFFIndex.prototype;\n  _proto.getCFFVersion = function getCFFVersion(ctx) {\n    while (ctx && !ctx.hdrSize) {\n      ctx = ctx.parent;\n    }\n    return ctx ? ctx.version : -1;\n  };\n  _proto.decode = function decode(stream, parent) {\n    var version = this.getCFFVersion(parent);\n    var count = version >= 2 ? stream.readUInt32BE() : stream.readUInt16BE();\n    if (count === 0) {\n      return [];\n    }\n    var offSize = stream.readUInt8();\n    var offsetType;\n    if (offSize === 1) {\n      offsetType = r.uint8;\n    } else if (offSize === 2) {\n      offsetType = r.uint16;\n    } else if (offSize === 3) {\n      offsetType = r.uint24;\n    } else if (offSize === 4) {\n      offsetType = r.uint32;\n    } else {\n      throw new Error(\"Bad offset size in CFFIndex: \".concat(offSize, \" \").concat(stream.pos));\n    }\n    var ret = [];\n    var startPos = stream.pos + (count + 1) * offSize - 1;\n    var start = offsetType.decode(stream);\n    for (var i = 0; i < count; i++) {\n      var end = offsetType.decode(stream);\n      if (this.type != null) {\n        var pos = stream.pos;\n        stream.pos = startPos + start;\n        parent.length = end - start;\n        ret.push(this.type.decode(stream, parent));\n        stream.pos = pos;\n      } else {\n        ret.push({\n          offset: startPos + start,\n          length: end - start\n        });\n      }\n      start = end;\n    }\n    stream.pos = startPos + start;\n    return ret;\n  };\n  _proto.size = function size(arr, parent) {\n    var size = 2;\n    if (arr.length === 0) {\n      return size;\n    }\n    var type = this.type || new r.Buffer(); // find maximum offset to detminine offset type\n\n    var offset = 1;\n    for (var i = 0; i < arr.length; i++) {\n      var item = arr[i];\n      offset += type.size(item, parent);\n    }\n    var offsetType;\n    if (offset <= 0xff) {\n      offsetType = r.uint8;\n    } else if (offset <= 0xffff) {\n      offsetType = r.uint16;\n    } else if (offset <= 0xffffff) {\n      offsetType = r.uint24;\n    } else if (offset <= 0xffffffff) {\n      offsetType = r.uint32;\n    } else {\n      throw new Error(\"Bad offset in CFFIndex\");\n    }\n    size += 1 + offsetType.size() * (arr.length + 1);\n    size += offset - 1;\n    return size;\n  };\n  _proto.encode = function encode(stream, arr, parent) {\n    stream.writeUInt16BE(arr.length);\n    if (arr.length === 0) {\n      return;\n    }\n    var type = this.type || new r.Buffer(); // find maximum offset to detminine offset type\n\n    var sizes = [];\n    var offset = 1;\n    for (var _iterator2 = _createForOfIteratorHelperLoose(arr), _step2; !(_step2 = _iterator2()).done;) {\n      var item = _step2.value;\n      var s = type.size(item, parent);\n      sizes.push(s);\n      offset += s;\n    }\n    var offsetType;\n    if (offset <= 0xff) {\n      offsetType = r.uint8;\n    } else if (offset <= 0xffff) {\n      offsetType = r.uint16;\n    } else if (offset <= 0xffffff) {\n      offsetType = r.uint24;\n    } else if (offset <= 0xffffffff) {\n      offsetType = r.uint32;\n    } else {\n      throw new Error(\"Bad offset in CFFIndex\");\n    } // write offset size\n\n    stream.writeUInt8(offsetType.size()); // write elements\n\n    offset = 1;\n    offsetType.encode(stream, offset);\n    for (var _i22 = 0, _sizes = sizes; _i22 < _sizes.length; _i22++) {\n      var size = _sizes[_i22];\n      offset += size;\n      offsetType.encode(stream, offset);\n    }\n    for (var _iterator3 = _createForOfIteratorHelperLoose(arr), _step3; !(_step3 = _iterator3()).done;) {\n      var _item = _step3.value;\n      type.encode(stream, _item, parent);\n    }\n    return;\n  };\n  return CFFIndex;\n}();\nvar FLOAT_EOF = 0xf;\nvar FLOAT_LOOKUP = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', 'E', 'E-', null, '-'];\nvar FLOAT_ENCODE_LOOKUP = {\n  '.': 10,\n  'E': 11,\n  'E-': 12,\n  '-': 14\n};\nvar CFFOperand = /*#__PURE__*/function () {\n  function CFFOperand() {}\n  CFFOperand.decode = function decode(stream, value) {\n    if (32 <= value && value <= 246) {\n      return value - 139;\n    }\n    if (247 <= value && value <= 250) {\n      return (value - 247) * 256 + stream.readUInt8() + 108;\n    }\n    if (251 <= value && value <= 254) {\n      return -(value - 251) * 256 - stream.readUInt8() - 108;\n    }\n    if (value === 28) {\n      return stream.readInt16BE();\n    }\n    if (value === 29) {\n      return stream.readInt32BE();\n    }\n    if (value === 30) {\n      var str = '';\n      while (true) {\n        var b = stream.readUInt8();\n        var n1 = b >> 4;\n        if (n1 === FLOAT_EOF) {\n          break;\n        }\n        str += FLOAT_LOOKUP[n1];\n        var n2 = b & 15;\n        if (n2 === FLOAT_EOF) {\n          break;\n        }\n        str += FLOAT_LOOKUP[n2];\n      }\n      return parseFloat(str);\n    }\n    return null;\n  };\n  CFFOperand.size = function size(value) {\n    // if the value needs to be forced to the largest size (32 bit)\n    // e.g. for unknown pointers, set to 32768\n    if (value.forceLarge) {\n      value = 32768;\n    }\n    if ((value | 0) !== value) {\n      // floating point\n      var str = '' + value;\n      return 1 + Math.ceil((str.length + 1) / 2);\n    } else if (-107 <= value && value <= 107) {\n      return 1;\n    } else if (108 <= value && value <= 1131 || -1131 <= value && value <= -108) {\n      return 2;\n    } else if (-32768 <= value && value <= 32767) {\n      return 3;\n    } else {\n      return 5;\n    }\n  };\n  CFFOperand.encode = function encode(stream, value) {\n    // if the value needs to be forced to the largest size (32 bit)\n    // e.g. for unknown pointers, save the old value and set to 32768\n    var val = Number(value);\n    if (value.forceLarge) {\n      stream.writeUInt8(29);\n      return stream.writeInt32BE(val);\n    } else if ((val | 0) !== val) {\n      // floating point\n      stream.writeUInt8(30);\n      var str = '' + val;\n      for (var i = 0; i < str.length; i += 2) {\n        var c1 = str[i];\n        var n1 = FLOAT_ENCODE_LOOKUP[c1] || +c1;\n        if (i === str.length - 1) {\n          var n2 = FLOAT_EOF;\n        } else {\n          var c2 = str[i + 1];\n          var n2 = FLOAT_ENCODE_LOOKUP[c2] || +c2;\n        }\n        stream.writeUInt8(n1 << 4 | n2 & 15);\n      }\n      if (n2 !== FLOAT_EOF) {\n        return stream.writeUInt8(FLOAT_EOF << 4);\n      }\n    } else if (-107 <= val && val <= 107) {\n      return stream.writeUInt8(val + 139);\n    } else if (108 <= val && val <= 1131) {\n      val -= 108;\n      stream.writeUInt8((val >> 8) + 247);\n      return stream.writeUInt8(val & 0xff);\n    } else if (-1131 <= val && val <= -108) {\n      val = -val - 108;\n      stream.writeUInt8((val >> 8) + 251);\n      return stream.writeUInt8(val & 0xff);\n    } else if (-32768 <= val && val <= 32767) {\n      stream.writeUInt8(28);\n      return stream.writeInt16BE(val);\n    } else {\n      stream.writeUInt8(29);\n      return stream.writeInt32BE(val);\n    }\n  };\n  return CFFOperand;\n}();\nvar CFFDict = /*#__PURE__*/function () {\n  function CFFDict(ops) {\n    if (ops === void 0) {\n      ops = [];\n    }\n    this.ops = ops;\n    this.fields = {};\n    for (var _iterator4 = _createForOfIteratorHelperLoose(ops), _step4; !(_step4 = _iterator4()).done;) {\n      var field = _step4.value;\n      var key = Array.isArray(field[0]) ? field[0][0] << 8 | field[0][1] : field[0];\n      this.fields[key] = field;\n    }\n  }\n  var _proto2 = CFFDict.prototype;\n  _proto2.decodeOperands = function decodeOperands(type, stream, ret, operands) {\n    var _this = this;\n    if (Array.isArray(type)) {\n      return operands.map(function (op, i) {\n        return _this.decodeOperands(type[i], stream, ret, [op]);\n      });\n    } else if (type.decode != null) {\n      return type.decode(stream, ret, operands);\n    } else {\n      switch (type) {\n        case 'number':\n        case 'offset':\n        case 'sid':\n          return operands[0];\n        case 'boolean':\n          return !!operands[0];\n        default:\n          return operands;\n      }\n    }\n  };\n  _proto2.encodeOperands = function encodeOperands(type, stream, ctx, operands) {\n    var _this2 = this;\n    if (Array.isArray(type)) {\n      return operands.map(function (op, i) {\n        return _this2.encodeOperands(type[i], stream, ctx, op)[0];\n      });\n    } else if (type.encode != null) {\n      return type.encode(stream, operands, ctx);\n    } else if (typeof operands === 'number') {\n      return [operands];\n    } else if (typeof operands === 'boolean') {\n      return [+operands];\n    } else if (Array.isArray(operands)) {\n      return operands;\n    } else {\n      return [operands];\n    }\n  };\n  _proto2.decode = function decode(stream, parent) {\n    var end = stream.pos + parent.length;\n    var ret = {};\n    var operands = []; // define hidden properties\n\n    Object.defineProperties(ret, {\n      parent: {\n        value: parent\n      },\n      _startOffset: {\n        value: stream.pos\n      }\n    }); // fill in defaults\n\n    for (var key in this.fields) {\n      var field = this.fields[key];\n      ret[field[1]] = field[3];\n    }\n    while (stream.pos < end) {\n      var b = stream.readUInt8();\n      if (b < 28) {\n        if (b === 12) {\n          b = b << 8 | stream.readUInt8();\n        }\n        var _field = this.fields[b];\n        if (!_field) {\n          throw new Error(\"Unknown operator \".concat(b));\n        }\n        var val = this.decodeOperands(_field[2], stream, ret, operands);\n        if (val != null) {\n          if (val instanceof utils.PropertyDescriptor) {\n            Object.defineProperty(ret, _field[1], val);\n          } else {\n            ret[_field[1]] = val;\n          }\n        }\n        operands = [];\n      } else {\n        operands.push(CFFOperand.decode(stream, b));\n      }\n    }\n    return ret;\n  };\n  _proto2.size = function size(dict, parent, includePointers) {\n    if (includePointers === void 0) {\n      includePointers = true;\n    }\n    var ctx = {\n      parent: parent,\n      val: dict,\n      pointerSize: 0,\n      startOffset: parent.startOffset || 0\n    };\n    var len = 0;\n    for (var k in this.fields) {\n      var field = this.fields[k];\n      var val = dict[field[1]];\n      if (val == null || isEqual(val, field[3])) {\n        continue;\n      }\n      var operands = this.encodeOperands(field[2], null, ctx, val);\n      for (var _iterator5 = _createForOfIteratorHelperLoose(operands), _step5; !(_step5 = _iterator5()).done;) {\n        var op = _step5.value;\n        len += CFFOperand.size(op);\n      }\n      var key = Array.isArray(field[0]) ? field[0] : [field[0]];\n      len += key.length;\n    }\n    if (includePointers) {\n      len += ctx.pointerSize;\n    }\n    return len;\n  };\n  _proto2.encode = function encode(stream, dict, parent) {\n    var ctx = {\n      pointers: [],\n      startOffset: stream.pos,\n      parent: parent,\n      val: dict,\n      pointerSize: 0\n    };\n    ctx.pointerOffset = stream.pos + this.size(dict, ctx, false);\n    for (var _iterator6 = _createForOfIteratorHelperLoose(this.ops), _step6; !(_step6 = _iterator6()).done;) {\n      var field = _step6.value;\n      var val = dict[field[1]];\n      if (val == null || isEqual(val, field[3])) {\n        continue;\n      }\n      var operands = this.encodeOperands(field[2], stream, ctx, val);\n      for (var _iterator7 = _createForOfIteratorHelperLoose(operands), _step7; !(_step7 = _iterator7()).done;) {\n        var op = _step7.value;\n        CFFOperand.encode(stream, op);\n      }\n      var key = Array.isArray(field[0]) ? field[0] : [field[0]];\n      for (var _iterator8 = _createForOfIteratorHelperLoose(key), _step8; !(_step8 = _iterator8()).done;) {\n        var _op = _step8.value;\n        stream.writeUInt8(_op);\n      }\n    }\n    var i = 0;\n    while (i < ctx.pointers.length) {\n      var ptr = ctx.pointers[i++];\n      ptr.type.encode(stream, ptr.val, ptr.parent);\n    }\n    return;\n  };\n  return CFFDict;\n}();\nvar CFFPointer = /*#__PURE__*/function (_r$Pointer) {\n  _inheritsLoose(CFFPointer, _r$Pointer);\n  function CFFPointer(type, options) {\n    if (options === void 0) {\n      options = {};\n    }\n    if (options.type == null) {\n      options.type = 'global';\n    }\n    return _r$Pointer.call(this, null, type, options) || this;\n  }\n  var _proto3 = CFFPointer.prototype;\n  _proto3.decode = function decode(stream, parent, operands) {\n    this.offsetType = {\n      decode: function decode() {\n        return operands[0];\n      }\n    };\n    return _r$Pointer.prototype.decode.call(this, stream, parent, operands);\n  };\n  _proto3.encode = function encode(stream, value, ctx) {\n    if (!stream) {\n      // compute the size (so ctx.pointerSize is correct)\n      this.offsetType = {\n        size: function size() {\n          return 0;\n        }\n      };\n      this.size(value, ctx);\n      return [new Ptr(0)];\n    }\n    var ptr = null;\n    this.offsetType = {\n      encode: function encode(stream, val) {\n        return ptr = val;\n      }\n    };\n    _r$Pointer.prototype.encode.call(this, stream, value, ctx);\n    return [new Ptr(ptr)];\n  };\n  return CFFPointer;\n}(r.Pointer);\nvar Ptr = /*#__PURE__*/function () {\n  function Ptr(val) {\n    this.val = val;\n    this.forceLarge = true;\n  }\n  var _proto4 = Ptr.prototype;\n  _proto4.valueOf = function valueOf() {\n    return this.val;\n  };\n  return Ptr;\n}();\nvar CFFBlendOp = /*#__PURE__*/function () {\n  function CFFBlendOp() {}\n  CFFBlendOp.decode = function decode(stream, parent, operands) {\n    var numBlends = operands.pop(); // TODO: actually blend. For now just consume the deltas\n    // since we don't use any of the values anyway.\n\n    while (operands.length > numBlends) {\n      operands.pop();\n    }\n  };\n  return CFFBlendOp;\n}();\nvar CFFPrivateDict = new CFFDict([\n// key       name                    type                                          default\n[6, 'BlueValues', 'delta', null], [7, 'OtherBlues', 'delta', null], [8, 'FamilyBlues', 'delta', null], [9, 'FamilyOtherBlues', 'delta', null], [[12, 9], 'BlueScale', 'number', 0.039625], [[12, 10], 'BlueShift', 'number', 7], [[12, 11], 'BlueFuzz', 'number', 1], [10, 'StdHW', 'number', null], [11, 'StdVW', 'number', null], [[12, 12], 'StemSnapH', 'delta', null], [[12, 13], 'StemSnapV', 'delta', null], [[12, 14], 'ForceBold', 'boolean', false], [[12, 17], 'LanguageGroup', 'number', 0], [[12, 18], 'ExpansionFactor', 'number', 0.06], [[12, 19], 'initialRandomSeed', 'number', 0], [20, 'defaultWidthX', 'number', 0], [21, 'nominalWidthX', 'number', 0], [22, 'vsindex', 'number', 0], [23, 'blend', CFFBlendOp, null], [19, 'Subrs', new CFFPointer(new CFFIndex(), {\n  type: 'local'\n}), null]]);\n\n// Automatically generated from Appendix A of the CFF specification; do\n// not edit. Length should be 391.\nvar standardStrings = [\".notdef\", \"space\", \"exclam\", \"quotedbl\", \"numbersign\", \"dollar\", \"percent\", \"ampersand\", \"quoteright\", \"parenleft\", \"parenright\", \"asterisk\", \"plus\", \"comma\", \"hyphen\", \"period\", \"slash\", \"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"colon\", \"semicolon\", \"less\", \"equal\", \"greater\", \"question\", \"at\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"bracketleft\", \"backslash\", \"bracketright\", \"asciicircum\", \"underscore\", \"quoteleft\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\", \"braceleft\", \"bar\", \"braceright\", \"asciitilde\", \"exclamdown\", \"cent\", \"sterling\", \"fraction\", \"yen\", \"florin\", \"section\", \"currency\", \"quotesingle\", \"quotedblleft\", \"guillemotleft\", \"guilsinglleft\", \"guilsinglright\", \"fi\", \"fl\", \"endash\", \"dagger\", \"daggerdbl\", \"periodcentered\", \"paragraph\", \"bullet\", \"quotesinglbase\", \"quotedblbase\", \"quotedblright\", \"guillemotright\", \"ellipsis\", \"perthousand\", \"questiondown\", \"grave\", \"acute\", \"circumflex\", \"tilde\", \"macron\", \"breve\", \"dotaccent\", \"dieresis\", \"ring\", \"cedilla\", \"hungarumlaut\", \"ogonek\", \"caron\", \"emdash\", \"AE\", \"ordfeminine\", \"Lslash\", \"Oslash\", \"OE\", \"ordmasculine\", \"ae\", \"dotlessi\", \"lslash\", \"oslash\", \"oe\", \"germandbls\", \"onesuperior\", \"logicalnot\", \"mu\", \"trademark\", \"Eth\", \"onehalf\", \"plusminus\", \"Thorn\", \"onequarter\", \"divide\", \"brokenbar\", \"degree\", \"thorn\", \"threequarters\", \"twosuperior\", \"registered\", \"minus\", \"eth\", \"multiply\", \"threesuperior\", \"copyright\", \"Aacute\", \"Acircumflex\", \"Adieresis\", \"Agrave\", \"Aring\", \"Atilde\", \"Ccedilla\", \"Eacute\", \"Ecircumflex\", \"Edieresis\", \"Egrave\", \"Iacute\", \"Icircumflex\", \"Idieresis\", \"Igrave\", \"Ntilde\", \"Oacute\", \"Ocircumflex\", \"Odieresis\", \"Ograve\", \"Otilde\", \"Scaron\", \"Uacute\", \"Ucircumflex\", \"Udieresis\", \"Ugrave\", \"Yacute\", \"Ydieresis\", \"Zcaron\", \"aacute\", \"acircumflex\", \"adieresis\", \"agrave\", \"aring\", \"atilde\", \"ccedilla\", \"eacute\", \"ecircumflex\", \"edieresis\", \"egrave\", \"iacute\", \"icircumflex\", \"idieresis\", \"igrave\", \"ntilde\", \"oacute\", \"ocircumflex\", \"odieresis\", \"ograve\", \"otilde\", \"scaron\", \"uacute\", \"ucircumflex\", \"udieresis\", \"ugrave\", \"yacute\", \"ydieresis\", \"zcaron\", \"exclamsmall\", \"Hungarumlautsmall\", \"dollaroldstyle\", \"dollarsuperior\", \"ampersandsmall\", \"Acutesmall\", \"parenleftsuperior\", \"parenrightsuperior\", \"twodotenleader\", \"onedotenleader\", \"zerooldstyle\", \"oneoldstyle\", \"twooldstyle\", \"threeoldstyle\", \"fouroldstyle\", \"fiveoldstyle\", \"sixoldstyle\", \"sevenoldstyle\", \"eightoldstyle\", \"nineoldstyle\", \"commasuperior\", \"threequartersemdash\", \"periodsuperior\", \"questionsmall\", \"asuperior\", \"bsuperior\", \"centsuperior\", \"dsuperior\", \"esuperior\", \"isuperior\", \"lsuperior\", \"msuperior\", \"nsuperior\", \"osuperior\", \"rsuperior\", \"ssuperior\", \"tsuperior\", \"ff\", \"ffi\", \"ffl\", \"parenleftinferior\", \"parenrightinferior\", \"Circumflexsmall\", \"hyphensuperior\", \"Gravesmall\", \"Asmall\", \"Bsmall\", \"Csmall\", \"Dsmall\", \"Esmall\", \"Fsmall\", \"Gsmall\", \"Hsmall\", \"Ismall\", \"Jsmall\", \"Ksmall\", \"Lsmall\", \"Msmall\", \"Nsmall\", \"Osmall\", \"Psmall\", \"Qsmall\", \"Rsmall\", \"Ssmall\", \"Tsmall\", \"Usmall\", \"Vsmall\", \"Wsmall\", \"Xsmall\", \"Ysmall\", \"Zsmall\", \"colonmonetary\", \"onefitted\", \"rupiah\", \"Tildesmall\", \"exclamdownsmall\", \"centoldstyle\", \"Lslashsmall\", \"Scaronsmall\", \"Zcaronsmall\", \"Dieresissmall\", \"Brevesmall\", \"Caronsmall\", \"Dotaccentsmall\", \"Macronsmall\", \"figuredash\", \"hypheninferior\", \"Ogoneksmall\", \"Ringsmall\", \"Cedillasmall\", \"questiondownsmall\", \"oneeighth\", \"threeeighths\", \"fiveeighths\", \"seveneighths\", \"onethird\", \"twothirds\", \"zerosuperior\", \"foursuperior\", \"fivesuperior\", \"sixsuperior\", \"sevensuperior\", \"eightsuperior\", \"ninesuperior\", \"zeroinferior\", \"oneinferior\", \"twoinferior\", \"threeinferior\", \"fourinferior\", \"fiveinferior\", \"sixinferior\", \"seveninferior\", \"eightinferior\", \"nineinferior\", \"centinferior\", \"dollarinferior\", \"periodinferior\", \"commainferior\", \"Agravesmall\", \"Aacutesmall\", \"Acircumflexsmall\", \"Atildesmall\", \"Adieresissmall\", \"Aringsmall\", \"AEsmall\", \"Ccedillasmall\", \"Egravesmall\", \"Eacutesmall\", \"Ecircumflexsmall\", \"Edieresissmall\", \"Igravesmall\", \"Iacutesmall\", \"Icircumflexsmall\", \"Idieresissmall\", \"Ethsmall\", \"Ntildesmall\", \"Ogravesmall\", \"Oacutesmall\", \"Ocircumflexsmall\", \"Otildesmall\", \"Odieresissmall\", \"OEsmall\", \"Oslashsmall\", \"Ugravesmall\", \"Uacutesmall\", \"Ucircumflexsmall\", \"Udieresissmall\", \"Yacutesmall\", \"Thornsmall\", \"Ydieresissmall\", \"001.000\", \"001.001\", \"001.002\", \"001.003\", \"Black\", \"Bold\", \"Book\", \"Light\", \"Medium\", \"Regular\", \"Roman\", \"Semibold\"];\nvar StandardEncoding = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'exclamdown', 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', 'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', '', 'endash', 'dagger', 'daggerdbl', 'periodcentered', '', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis', 'perthousand', '', 'questiondown', '', 'grave', 'acute', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'dieresis', '', 'ring', 'cedilla', '', 'hungarumlaut', 'ogonek', 'caron', 'emdash', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'AE', '', 'ordfeminine', '', '', '', '', 'Lslash', 'Oslash', 'OE', 'ordmasculine', '', '', '', '', '', 'ae', '', '', '', 'dotlessi', '', '', 'lslash', 'oslash', 'oe', 'germandbls'];\nvar ExpertEncoding = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'space', 'exclamsmall', 'Hungarumlautsmall', '', 'dollaroldstyle', 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'questionsmall', '', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', '', '', 'isuperior', '', '', 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', '', '', 'rsuperior', 'ssuperior', 'tsuperior', '', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', '', 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'exclamdownsmall', 'centoldstyle', 'Lslashsmall', '', '', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', 'Brevesmall', 'Caronsmall', '', 'Dotaccentsmall', '', '', 'Macronsmall', '', '', 'figuredash', 'hypheninferior', '', '', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', '', '', '', 'onequarter', 'onehalf', 'threequarters', 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', '', '', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall', 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall', 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', 'Ydieresissmall'];\nvar ISOAdobeCharset = ['.notdef', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', 'exclamdown', 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', 'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'endash', 'dagger', 'daggerdbl', 'periodcentered', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis', 'perthousand', 'questiondown', 'grave', 'acute', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'dieresis', 'ring', 'cedilla', 'hungarumlaut', 'ogonek', 'caron', 'emdash', 'AE', 'ordfeminine', 'Lslash', 'Oslash', 'OE', 'ordmasculine', 'ae', 'dotlessi', 'lslash', 'oslash', 'oe', 'germandbls', 'onesuperior', 'logicalnot', 'mu', 'trademark', 'Eth', 'onehalf', 'plusminus', 'Thorn', 'onequarter', 'divide', 'brokenbar', 'degree', 'thorn', 'threequarters', 'twosuperior', 'registered', 'minus', 'eth', 'multiply', 'threesuperior', 'copyright', 'Aacute', 'Acircumflex', 'Adieresis', 'Agrave', 'Aring', 'Atilde', 'Ccedilla', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Igrave', 'Ntilde', 'Oacute', 'Ocircumflex', 'Odieresis', 'Ograve', 'Otilde', 'Scaron', 'Uacute', 'Ucircumflex', 'Udieresis', 'Ugrave', 'Yacute', 'Ydieresis', 'Zcaron', 'aacute', 'acircumflex', 'adieresis', 'agrave', 'aring', 'atilde', 'ccedilla', 'eacute', 'ecircumflex', 'edieresis', 'egrave', 'iacute', 'icircumflex', 'idieresis', 'igrave', 'ntilde', 'oacute', 'ocircumflex', 'odieresis', 'ograve', 'otilde', 'scaron', 'uacute', 'ucircumflex', 'udieresis', 'ugrave', 'yacute', 'ydieresis', 'zcaron'];\nvar ExpertCharset = ['.notdef', 'space', 'exclamsmall', 'Hungarumlautsmall', 'dollaroldstyle', 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'questionsmall', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior', 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', 'exclamdownsmall', 'centoldstyle', 'Lslashsmall', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', 'Brevesmall', 'Caronsmall', 'Dotaccentsmall', 'Macronsmall', 'figuredash', 'hypheninferior', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', 'onequarter', 'onehalf', 'threequarters', 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall', 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall', 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', 'Ydieresissmall'];\nvar ExpertSubsetCharset = ['.notdef', 'space', 'dollaroldstyle', 'dollarsuperior', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior', 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', 'parenrightinferior', 'hyphensuperior', 'colonmonetary', 'onefitted', 'rupiah', 'centoldstyle', 'figuredash', 'hypheninferior', 'onequarter', 'onehalf', 'threequarters', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior'];\n\n// Scripts and Languages #\n//########################\n\nvar LangSysTable = new r.Struct({\n  reserved: new r.Reserved(r.uint16),\n  reqFeatureIndex: r.uint16,\n  featureCount: r.uint16,\n  featureIndexes: new r.Array(r.uint16, 'featureCount')\n});\nvar LangSysRecord = new r.Struct({\n  tag: new r.String(4),\n  langSys: new r.Pointer(r.uint16, LangSysTable, {\n    type: 'parent'\n  })\n});\nvar Script = new r.Struct({\n  defaultLangSys: new r.Pointer(r.uint16, LangSysTable),\n  count: r.uint16,\n  langSysRecords: new r.Array(LangSysRecord, 'count')\n});\nvar ScriptRecord = new r.Struct({\n  tag: new r.String(4),\n  script: new r.Pointer(r.uint16, Script, {\n    type: 'parent'\n  })\n});\nvar ScriptList = new r.Array(ScriptRecord, r.uint16); //#######################\n// Features and Lookups #\n//#######################\n\nvar Feature = new r.Struct({\n  featureParams: r.uint16,\n  // pointer\n  lookupCount: r.uint16,\n  lookupListIndexes: new r.Array(r.uint16, 'lookupCount')\n});\nvar FeatureRecord = new r.Struct({\n  tag: new r.String(4),\n  feature: new r.Pointer(r.uint16, Feature, {\n    type: 'parent'\n  })\n});\nvar FeatureList = new r.Array(FeatureRecord, r.uint16);\nvar LookupFlags = new r.Struct({\n  markAttachmentType: r.uint8,\n  flags: new r.Bitfield(r.uint8, ['rightToLeft', 'ignoreBaseGlyphs', 'ignoreLigatures', 'ignoreMarks', 'useMarkFilteringSet'])\n});\nfunction LookupList(SubTable) {\n  var Lookup = new r.Struct({\n    lookupType: r.uint16,\n    flags: LookupFlags,\n    subTableCount: r.uint16,\n    subTables: new r.Array(new r.Pointer(r.uint16, SubTable), 'subTableCount'),\n    markFilteringSet: new r.Optional(r.uint16, function (t) {\n      return t.flags.flags.useMarkFilteringSet;\n    })\n  });\n  return new r.LazyArray(new r.Pointer(r.uint16, Lookup), r.uint16);\n} //#################\n// Coverage Table #\n//#################\n\nvar RangeRecord = new r.Struct({\n  start: r.uint16,\n  end: r.uint16,\n  startCoverageIndex: r.uint16\n});\nvar Coverage = new r.VersionedStruct(r.uint16, {\n  1: {\n    glyphCount: r.uint16,\n    glyphs: new r.Array(r.uint16, 'glyphCount')\n  },\n  2: {\n    rangeCount: r.uint16,\n    rangeRecords: new r.Array(RangeRecord, 'rangeCount')\n  }\n}); //#########################\n// Class Definition Table #\n//#########################\n\nvar ClassRangeRecord = new r.Struct({\n  start: r.uint16,\n  end: r.uint16,\n  class: r.uint16\n});\nvar ClassDef = new r.VersionedStruct(r.uint16, {\n  1: {\n    // Class array\n    startGlyph: r.uint16,\n    glyphCount: r.uint16,\n    classValueArray: new r.Array(r.uint16, 'glyphCount')\n  },\n  2: {\n    // Class ranges\n    classRangeCount: r.uint16,\n    classRangeRecord: new r.Array(ClassRangeRecord, 'classRangeCount')\n  }\n}); //###############\n// Device Table #\n//###############\n\nvar Device = new r.Struct({\n  a: r.uint16,\n  // startSize for hinting Device, outerIndex for VariationIndex\n  b: r.uint16,\n  // endSize for Device, innerIndex for VariationIndex\n  deltaFormat: r.uint16\n}); //#############################################\n// Contextual Substitution/Positioning Tables #\n//#############################################\n\nvar LookupRecord = new r.Struct({\n  sequenceIndex: r.uint16,\n  lookupListIndex: r.uint16\n});\nvar Rule = new r.Struct({\n  glyphCount: r.uint16,\n  lookupCount: r.uint16,\n  input: new r.Array(r.uint16, function (t) {\n    return t.glyphCount - 1;\n  }),\n  lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n});\nvar RuleSet = new r.Array(new r.Pointer(r.uint16, Rule), r.uint16);\nvar ClassRule = new r.Struct({\n  glyphCount: r.uint16,\n  lookupCount: r.uint16,\n  classes: new r.Array(r.uint16, function (t) {\n    return t.glyphCount - 1;\n  }),\n  lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n});\nvar ClassSet = new r.Array(new r.Pointer(r.uint16, ClassRule), r.uint16);\nvar Context = new r.VersionedStruct(r.uint16, {\n  1: {\n    // Simple context\n    coverage: new r.Pointer(r.uint16, Coverage),\n    ruleSetCount: r.uint16,\n    ruleSets: new r.Array(new r.Pointer(r.uint16, RuleSet), 'ruleSetCount')\n  },\n  2: {\n    // Class-based context\n    coverage: new r.Pointer(r.uint16, Coverage),\n    classDef: new r.Pointer(r.uint16, ClassDef),\n    classSetCnt: r.uint16,\n    classSet: new r.Array(new r.Pointer(r.uint16, ClassSet), 'classSetCnt')\n  },\n  3: {\n    glyphCount: r.uint16,\n    lookupCount: r.uint16,\n    coverages: new r.Array(new r.Pointer(r.uint16, Coverage), 'glyphCount'),\n    lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n  }\n}); //######################################################\n// Chaining Contextual Substitution/Positioning Tables #\n//######################################################\n\nvar ChainRule = new r.Struct({\n  backtrackGlyphCount: r.uint16,\n  backtrack: new r.Array(r.uint16, 'backtrackGlyphCount'),\n  inputGlyphCount: r.uint16,\n  input: new r.Array(r.uint16, function (t) {\n    return t.inputGlyphCount - 1;\n  }),\n  lookaheadGlyphCount: r.uint16,\n  lookahead: new r.Array(r.uint16, 'lookaheadGlyphCount'),\n  lookupCount: r.uint16,\n  lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n});\nvar ChainRuleSet = new r.Array(new r.Pointer(r.uint16, ChainRule), r.uint16);\nvar ChainingContext = new r.VersionedStruct(r.uint16, {\n  1: {\n    // Simple context glyph substitution\n    coverage: new r.Pointer(r.uint16, Coverage),\n    chainCount: r.uint16,\n    chainRuleSets: new r.Array(new r.Pointer(r.uint16, ChainRuleSet), 'chainCount')\n  },\n  2: {\n    // Class-based chaining context\n    coverage: new r.Pointer(r.uint16, Coverage),\n    backtrackClassDef: new r.Pointer(r.uint16, ClassDef),\n    inputClassDef: new r.Pointer(r.uint16, ClassDef),\n    lookaheadClassDef: new r.Pointer(r.uint16, ClassDef),\n    chainCount: r.uint16,\n    chainClassSet: new r.Array(new r.Pointer(r.uint16, ChainRuleSet), 'chainCount')\n  },\n  3: {\n    // Coverage-based chaining context\n    backtrackGlyphCount: r.uint16,\n    backtrackCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'backtrackGlyphCount'),\n    inputGlyphCount: r.uint16,\n    inputCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'inputGlyphCount'),\n    lookaheadGlyphCount: r.uint16,\n    lookaheadCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'lookaheadGlyphCount'),\n    lookupCount: r.uint16,\n    lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n  }\n});\n\n/*******************\r\n * Variation Store *\r\n *******************/\n\nvar F2DOT14 = new r.Fixed(16, 'BE', 14);\nvar RegionAxisCoordinates = new r.Struct({\n  startCoord: F2DOT14,\n  peakCoord: F2DOT14,\n  endCoord: F2DOT14\n});\nvar VariationRegionList = new r.Struct({\n  axisCount: r.uint16,\n  regionCount: r.uint16,\n  variationRegions: new r.Array(new r.Array(RegionAxisCoordinates, 'axisCount'), 'regionCount')\n});\nvar DeltaSet = new r.Struct({\n  shortDeltas: new r.Array(r.int16, function (t) {\n    return t.parent.shortDeltaCount;\n  }),\n  regionDeltas: new r.Array(r.int8, function (t) {\n    return t.parent.regionIndexCount - t.parent.shortDeltaCount;\n  }),\n  deltas: function deltas(t) {\n    return t.shortDeltas.concat(t.regionDeltas);\n  }\n});\nvar ItemVariationData = new r.Struct({\n  itemCount: r.uint16,\n  shortDeltaCount: r.uint16,\n  regionIndexCount: r.uint16,\n  regionIndexes: new r.Array(r.uint16, 'regionIndexCount'),\n  deltaSets: new r.Array(DeltaSet, 'itemCount')\n});\nvar ItemVariationStore = new r.Struct({\n  format: r.uint16,\n  variationRegionList: new r.Pointer(r.uint32, VariationRegionList),\n  variationDataCount: r.uint16,\n  itemVariationData: new r.Array(new r.Pointer(r.uint32, ItemVariationData), 'variationDataCount')\n});\n/**********************\r\n * Feature Variations *\r\n **********************/\n\nvar ConditionTable = new r.VersionedStruct(r.uint16, {\n  1: (_ = {\n    axisIndex: r.uint16\n  }, _[\"axisIndex\"] = r.uint16, _.filterRangeMinValue = F2DOT14, _.filterRangeMaxValue = F2DOT14, _)\n});\nvar ConditionSet = new r.Struct({\n  conditionCount: r.uint16,\n  conditionTable: new r.Array(new r.Pointer(r.uint32, ConditionTable), 'conditionCount')\n});\nvar FeatureTableSubstitutionRecord = new r.Struct({\n  featureIndex: r.uint16,\n  alternateFeatureTable: new r.Pointer(r.uint32, Feature, {\n    type: 'parent'\n  })\n});\nvar FeatureTableSubstitution = new r.Struct({\n  version: r.fixed32,\n  substitutionCount: r.uint16,\n  substitutions: new r.Array(FeatureTableSubstitutionRecord, 'substitutionCount')\n});\nvar FeatureVariationRecord = new r.Struct({\n  conditionSet: new r.Pointer(r.uint32, ConditionSet, {\n    type: 'parent'\n  }),\n  featureTableSubstitution: new r.Pointer(r.uint32, FeatureTableSubstitution, {\n    type: 'parent'\n  })\n});\nvar FeatureVariations = new r.Struct({\n  majorVersion: r.uint16,\n  minorVersion: r.uint16,\n  featureVariationRecordCount: r.uint32,\n  featureVariationRecords: new r.Array(FeatureVariationRecord, 'featureVariationRecordCount')\n});\n\n// otherwise delegates to the provided type.\nvar PredefinedOp = /*#__PURE__*/function () {\n  function PredefinedOp(predefinedOps, type) {\n    this.predefinedOps = predefinedOps;\n    this.type = type;\n  }\n  var _proto5 = PredefinedOp.prototype;\n  _proto5.decode = function decode(stream, parent, operands) {\n    if (this.predefinedOps[operands[0]]) {\n      return this.predefinedOps[operands[0]];\n    }\n    return this.type.decode(stream, parent, operands);\n  };\n  _proto5.size = function size(value, ctx) {\n    return this.type.size(value, ctx);\n  };\n  _proto5.encode = function encode(stream, value, ctx) {\n    var index = this.predefinedOps.indexOf(value);\n    if (index !== -1) {\n      return index;\n    }\n    return this.type.encode(stream, value, ctx);\n  };\n  return PredefinedOp;\n}();\nvar CFFEncodingVersion = /*#__PURE__*/function (_r$Number) {\n  _inheritsLoose(CFFEncodingVersion, _r$Number);\n  function CFFEncodingVersion() {\n    return _r$Number.call(this, 'UInt8') || this;\n  }\n  var _proto6 = CFFEncodingVersion.prototype;\n  _proto6.decode = function decode(stream) {\n    return r.uint8.decode(stream) & 0x7f;\n  };\n  return CFFEncodingVersion;\n}(r.Number);\nvar Range1 = new r.Struct({\n  first: r.uint16,\n  nLeft: r.uint8\n});\nvar Range2 = new r.Struct({\n  first: r.uint16,\n  nLeft: r.uint16\n});\nvar CFFCustomEncoding = new r.VersionedStruct(new CFFEncodingVersion(), {\n  0: {\n    nCodes: r.uint8,\n    codes: new r.Array(r.uint8, 'nCodes')\n  },\n  1: {\n    nRanges: r.uint8,\n    ranges: new r.Array(Range1, 'nRanges')\n  } // TODO: supplement?\n});\nvar CFFEncoding = new PredefinedOp([StandardEncoding, ExpertEncoding], new CFFPointer(CFFCustomEncoding, {\n  lazy: true\n})); // Decodes an array of ranges until the total\n// length is equal to the provided length.\nvar RangeArray = /*#__PURE__*/function (_r$Array) {\n  _inheritsLoose(RangeArray, _r$Array);\n  function RangeArray() {\n    return _r$Array.apply(this, arguments) || this;\n  }\n  var _proto7 = RangeArray.prototype;\n  _proto7.decode = function decode(stream, parent) {\n    var length = utils.resolveLength(this.length, stream, parent);\n    var count = 0;\n    var res = [];\n    while (count < length) {\n      var range = this.type.decode(stream, parent);\n      range.offset = count;\n      count += range.nLeft + 1;\n      res.push(range);\n    }\n    return res;\n  };\n  return RangeArray;\n}(r.Array);\nvar CFFCustomCharset = new r.VersionedStruct(r.uint8, {\n  0: {\n    glyphs: new r.Array(r.uint16, function (t) {\n      return t.parent.CharStrings.length - 1;\n    })\n  },\n  1: {\n    ranges: new RangeArray(Range1, function (t) {\n      return t.parent.CharStrings.length - 1;\n    })\n  },\n  2: {\n    ranges: new RangeArray(Range2, function (t) {\n      return t.parent.CharStrings.length - 1;\n    })\n  }\n});\nvar CFFCharset = new PredefinedOp([ISOAdobeCharset, ExpertCharset, ExpertSubsetCharset], new CFFPointer(CFFCustomCharset, {\n  lazy: true\n}));\nvar FDRange3 = new r.Struct({\n  first: r.uint16,\n  fd: r.uint8\n});\nvar FDRange4 = new r.Struct({\n  first: r.uint32,\n  fd: r.uint16\n});\nvar FDSelect = new r.VersionedStruct(r.uint8, {\n  0: {\n    fds: new r.Array(r.uint8, function (t) {\n      return t.parent.CharStrings.length;\n    })\n  },\n  3: {\n    nRanges: r.uint16,\n    ranges: new r.Array(FDRange3, 'nRanges'),\n    sentinel: r.uint16\n  },\n  4: {\n    nRanges: r.uint32,\n    ranges: new r.Array(FDRange4, 'nRanges'),\n    sentinel: r.uint32\n  }\n});\nvar ptr = new CFFPointer(CFFPrivateDict);\nvar CFFPrivateOp = /*#__PURE__*/function () {\n  function CFFPrivateOp() {}\n  var _proto8 = CFFPrivateOp.prototype;\n  _proto8.decode = function decode(stream, parent, operands) {\n    parent.length = operands[0];\n    return ptr.decode(stream, parent, [operands[1]]);\n  };\n  _proto8.size = function size(dict, ctx) {\n    return [CFFPrivateDict.size(dict, ctx, false), ptr.size(dict, ctx)[0]];\n  };\n  _proto8.encode = function encode(stream, dict, ctx) {\n    return [CFFPrivateDict.size(dict, ctx, false), ptr.encode(stream, dict, ctx)[0]];\n  };\n  return CFFPrivateOp;\n}();\nvar FontDict = new CFFDict([\n// key       name                   type(s)                                 default\n[18, 'Private', new CFFPrivateOp(), null], [[12, 38], 'FontName', 'sid', null], [[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]], [[12, 5], 'PaintType', 'number', 0]]);\nvar CFFTopDict = new CFFDict([\n// key       name                   type(s)                                 default\n[[12, 30], 'ROS', ['sid', 'sid', 'number'], null], [0, 'version', 'sid', null], [1, 'Notice', 'sid', null], [[12, 0], 'Copyright', 'sid', null], [2, 'FullName', 'sid', null], [3, 'FamilyName', 'sid', null], [4, 'Weight', 'sid', null], [[12, 1], 'isFixedPitch', 'boolean', false], [[12, 2], 'ItalicAngle', 'number', 0], [[12, 3], 'UnderlinePosition', 'number', -100], [[12, 4], 'UnderlineThickness', 'number', 50], [[12, 5], 'PaintType', 'number', 0], [[12, 6], 'CharstringType', 'number', 2], [[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]], [13, 'UniqueID', 'number', null], [5, 'FontBBox', 'array', [0, 0, 0, 0]], [[12, 8], 'StrokeWidth', 'number', 0], [14, 'XUID', 'array', null], [15, 'charset', CFFCharset, ISOAdobeCharset], [16, 'Encoding', CFFEncoding, StandardEncoding], [17, 'CharStrings', new CFFPointer(new CFFIndex()), null], [18, 'Private', new CFFPrivateOp(), null], [[12, 20], 'SyntheticBase', 'number', null], [[12, 21], 'PostScript', 'sid', null], [[12, 22], 'BaseFontName', 'sid', null], [[12, 23], 'BaseFontBlend', 'delta', null],\n// CID font specific\n[[12, 31], 'CIDFontVersion', 'number', 0], [[12, 32], 'CIDFontRevision', 'number', 0], [[12, 33], 'CIDFontType', 'number', 0], [[12, 34], 'CIDCount', 'number', 8720], [[12, 35], 'UIDBase', 'number', null], [[12, 37], 'FDSelect', new CFFPointer(FDSelect), null], [[12, 36], 'FDArray', new CFFPointer(new CFFIndex(FontDict)), null], [[12, 38], 'FontName', 'sid', null]]);\nvar VariationStore = new r.Struct({\n  length: r.uint16,\n  itemVariationStore: ItemVariationStore\n});\nvar CFF2TopDict = new CFFDict([[[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]], [17, 'CharStrings', new CFFPointer(new CFFIndex()), null], [[12, 37], 'FDSelect', new CFFPointer(FDSelect), null], [[12, 36], 'FDArray', new CFFPointer(new CFFIndex(FontDict)), null], [24, 'vstore', new CFFPointer(VariationStore), null], [25, 'maxstack', 'number', 193]]);\nvar CFFTop = new r.VersionedStruct(r.fixed16, {\n  1: {\n    hdrSize: r.uint8,\n    offSize: r.uint8,\n    nameIndex: new CFFIndex(new r.String('length')),\n    topDictIndex: new CFFIndex(CFFTopDict),\n    stringIndex: new CFFIndex(new r.String('length')),\n    globalSubrIndex: new CFFIndex()\n  },\n  2: {\n    hdrSize: r.uint8,\n    length: r.uint16,\n    topDict: CFF2TopDict,\n    globalSubrIndex: new CFFIndex()\n  }\n});\nvar CFFFont = /*#__PURE__*/function () {\n  function CFFFont(stream) {\n    this.stream = stream;\n    this.decode();\n  }\n  CFFFont.decode = function decode(stream) {\n    return new CFFFont(stream);\n  };\n  var _proto9 = CFFFont.prototype;\n  _proto9.decode = function decode() {\n    var start = this.stream.pos;\n    var top = CFFTop.decode(this.stream);\n    for (var key in top) {\n      var val = top[key];\n      this[key] = val;\n    }\n    if (this.version < 2) {\n      if (this.topDictIndex.length !== 1) {\n        throw new Error(\"Only a single font is allowed in CFF\");\n      }\n      this.topDict = this.topDictIndex[0];\n    }\n    this.isCIDFont = this.topDict.ROS != null;\n    return this;\n  };\n  _proto9.string = function string(sid) {\n    if (this.version >= 2) {\n      return null;\n    }\n    if (sid < standardStrings.length) {\n      return standardStrings[sid];\n    }\n    return this.stringIndex[sid - standardStrings.length];\n  };\n  _proto9.getCharString = function getCharString(glyph) {\n    this.stream.pos = this.topDict.CharStrings[glyph].offset;\n    return this.stream.readBuffer(this.topDict.CharStrings[glyph].length);\n  };\n  _proto9.getGlyphName = function getGlyphName(gid) {\n    // CFF2 glyph names are in the post table.\n    if (this.version >= 2) {\n      return null;\n    } // CID-keyed fonts don't have glyph names\n\n    if (this.isCIDFont) {\n      return null;\n    }\n    var charset = this.topDict.charset;\n    if (Array.isArray(charset)) {\n      return charset[gid];\n    }\n    if (gid === 0) {\n      return '.notdef';\n    }\n    gid -= 1;\n    switch (charset.version) {\n      case 0:\n        return this.string(charset.glyphs[gid]);\n      case 1:\n      case 2:\n        for (var i = 0; i < charset.ranges.length; i++) {\n          var range = charset.ranges[i];\n          if (range.offset <= gid && gid <= range.offset + range.nLeft) {\n            return this.string(range.first + (gid - range.offset));\n          }\n        }\n        break;\n    }\n    return null;\n  };\n  _proto9.fdForGlyph = function fdForGlyph(gid) {\n    if (!this.topDict.FDSelect) {\n      return null;\n    }\n    switch (this.topDict.FDSelect.version) {\n      case 0:\n        return this.topDict.FDSelect.fds[gid];\n      case 3:\n      case 4:\n        var ranges = this.topDict.FDSelect.ranges;\n        var low = 0;\n        var high = ranges.length - 1;\n        while (low <= high) {\n          var mid = low + high >> 1;\n          if (gid < ranges[mid].first) {\n            high = mid - 1;\n          } else if (mid < high && gid >= ranges[mid + 1].first) {\n            low = mid + 1;\n          } else {\n            return ranges[mid].fd;\n          }\n        }\n      default:\n        throw new Error(\"Unknown FDSelect version: \".concat(this.topDict.FDSelect.version));\n    }\n  };\n  _proto9.privateDictForGlyph = function privateDictForGlyph(gid) {\n    if (this.topDict.FDSelect) {\n      var fd = this.fdForGlyph(gid);\n      if (this.topDict.FDArray[fd]) {\n        return this.topDict.FDArray[fd].Private;\n      }\n      return null;\n    }\n    if (this.version < 2) {\n      return this.topDict.Private;\n    }\n    return this.topDict.FDArray[0].Private;\n  };\n  _createClass(CFFFont, [{\n    key: \"postscriptName\",\n    get: function get() {\n      if (this.version < 2) {\n        return this.nameIndex[0];\n      }\n      return null;\n    }\n  }, {\n    key: \"fullName\",\n    get: function get() {\n      return this.string(this.topDict.FullName);\n    }\n  }, {\n    key: \"familyName\",\n    get: function get() {\n      return this.string(this.topDict.FamilyName);\n    }\n  }]);\n  return CFFFont;\n}();\nvar VerticalOrigin = new r.Struct({\n  glyphIndex: r.uint16,\n  vertOriginY: r.int16\n});\nvar VORG = new r.Struct({\n  majorVersion: r.uint16,\n  minorVersion: r.uint16,\n  defaultVertOriginY: r.int16,\n  numVertOriginYMetrics: r.uint16,\n  metrics: new r.Array(VerticalOrigin, 'numVertOriginYMetrics')\n});\nvar BigMetrics = new r.Struct({\n  height: r.uint8,\n  width: r.uint8,\n  horiBearingX: r.int8,\n  horiBearingY: r.int8,\n  horiAdvance: r.uint8,\n  vertBearingX: r.int8,\n  vertBearingY: r.int8,\n  vertAdvance: r.uint8\n});\nvar SmallMetrics = new r.Struct({\n  height: r.uint8,\n  width: r.uint8,\n  bearingX: r.int8,\n  bearingY: r.int8,\n  advance: r.uint8\n});\nvar EBDTComponent = new r.Struct({\n  glyph: r.uint16,\n  xOffset: r.int8,\n  yOffset: r.int8\n});\nvar ByteAligned = function ByteAligned() {};\nvar BitAligned = function BitAligned() {};\nvar glyph = new r.VersionedStruct('version', {\n  1: {\n    metrics: SmallMetrics,\n    data: ByteAligned\n  },\n  2: {\n    metrics: SmallMetrics,\n    data: BitAligned\n  },\n  // format 3 is deprecated\n  // format 4 is not supported by Microsoft\n  5: {\n    data: BitAligned\n  },\n  6: {\n    metrics: BigMetrics,\n    data: ByteAligned\n  },\n  7: {\n    metrics: BigMetrics,\n    data: BitAligned\n  },\n  8: {\n    metrics: SmallMetrics,\n    pad: new r.Reserved(r.uint8),\n    numComponents: r.uint16,\n    components: new r.Array(EBDTComponent, 'numComponents')\n  },\n  9: {\n    metrics: BigMetrics,\n    pad: new r.Reserved(r.uint8),\n    numComponents: r.uint16,\n    components: new r.Array(EBDTComponent, 'numComponents')\n  },\n  17: {\n    metrics: SmallMetrics,\n    dataLen: r.uint32,\n    data: new r.Buffer('dataLen')\n  },\n  18: {\n    metrics: BigMetrics,\n    dataLen: r.uint32,\n    data: new r.Buffer('dataLen')\n  },\n  19: {\n    dataLen: r.uint32,\n    data: new r.Buffer('dataLen')\n  }\n});\nvar SBitLineMetrics = new r.Struct({\n  ascender: r.int8,\n  descender: r.int8,\n  widthMax: r.uint8,\n  caretSlopeNumerator: r.int8,\n  caretSlopeDenominator: r.int8,\n  caretOffset: r.int8,\n  minOriginSB: r.int8,\n  minAdvanceSB: r.int8,\n  maxBeforeBL: r.int8,\n  minAfterBL: r.int8,\n  pad: new r.Reserved(r.int8, 2)\n});\nvar CodeOffsetPair = new r.Struct({\n  glyphCode: r.uint16,\n  offset: r.uint16\n});\nvar IndexSubtable = new r.VersionedStruct(r.uint16, {\n  header: {\n    imageFormat: r.uint16,\n    imageDataOffset: r.uint32\n  },\n  1: {\n    offsetArray: new r.Array(r.uint32, function (t) {\n      return t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1;\n    })\n  },\n  2: {\n    imageSize: r.uint32,\n    bigMetrics: BigMetrics\n  },\n  3: {\n    offsetArray: new r.Array(r.uint16, function (t) {\n      return t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1;\n    })\n  },\n  4: {\n    numGlyphs: r.uint32,\n    glyphArray: new r.Array(CodeOffsetPair, function (t) {\n      return t.numGlyphs + 1;\n    })\n  },\n  5: {\n    imageSize: r.uint32,\n    bigMetrics: BigMetrics,\n    numGlyphs: r.uint32,\n    glyphCodeArray: new r.Array(r.uint16, 'numGlyphs')\n  }\n});\nvar IndexSubtableArray = new r.Struct({\n  firstGlyphIndex: r.uint16,\n  lastGlyphIndex: r.uint16,\n  subtable: new r.Pointer(r.uint32, IndexSubtable)\n});\nvar BitmapSizeTable = new r.Struct({\n  indexSubTableArray: new r.Pointer(r.uint32, new r.Array(IndexSubtableArray, 1), {\n    type: 'parent'\n  }),\n  indexTablesSize: r.uint32,\n  numberOfIndexSubTables: r.uint32,\n  colorRef: r.uint32,\n  hori: SBitLineMetrics,\n  vert: SBitLineMetrics,\n  startGlyphIndex: r.uint16,\n  endGlyphIndex: r.uint16,\n  ppemX: r.uint8,\n  ppemY: r.uint8,\n  bitDepth: r.uint8,\n  flags: new r.Bitfield(r.uint8, ['horizontal', 'vertical'])\n});\nvar EBLC = new r.Struct({\n  version: r.uint32,\n  // 0x00020000\n  numSizes: r.uint32,\n  sizes: new r.Array(BitmapSizeTable, 'numSizes')\n});\nvar ImageTable = new r.Struct({\n  ppem: r.uint16,\n  resolution: r.uint16,\n  imageOffsets: new r.Array(new r.Pointer(r.uint32, 'void'), function (t) {\n    return t.parent.parent.maxp.numGlyphs + 1;\n  })\n}); // This is the Apple sbix table, used by the \"Apple Color Emoji\" font.\n// It includes several image tables with images for each bitmap glyph\n// of several different sizes.\n\nvar sbix = new r.Struct({\n  version: r.uint16,\n  flags: new r.Bitfield(r.uint16, ['renderOutlines']),\n  numImgTables: r.uint32,\n  imageTables: new r.Array(new r.Pointer(r.uint32, ImageTable), 'numImgTables')\n});\nvar LayerRecord = new r.Struct({\n  gid: r.uint16,\n  // Glyph ID of layer glyph (must be in z-order from bottom to top).\n  paletteIndex: r.uint16 // Index value to use in the appropriate palette. This value must\n}); // be less than numPaletteEntries in the CPAL table, except for\n// the special case noted below. Each palette entry is 16 bits.\n// A palette index of 0xFFFF is a special case indicating that\n// the text foreground color should be used.\n\nvar BaseGlyphRecord = new r.Struct({\n  gid: r.uint16,\n  // Glyph ID of reference glyph. This glyph is for reference only\n  // and is not rendered for color.\n  firstLayerIndex: r.uint16,\n  // Index (from beginning of the Layer Records) to the layer record.\n  // There will be numLayers consecutive entries for this base glyph.\n  numLayers: r.uint16\n});\nvar COLR = new r.Struct({\n  version: r.uint16,\n  numBaseGlyphRecords: r.uint16,\n  baseGlyphRecord: new r.Pointer(r.uint32, new r.Array(BaseGlyphRecord, 'numBaseGlyphRecords')),\n  layerRecords: new r.Pointer(r.uint32, new r.Array(LayerRecord, 'numLayerRecords'), {\n    lazy: true\n  }),\n  numLayerRecords: r.uint16\n});\nvar ColorRecord = new r.Struct({\n  blue: r.uint8,\n  green: r.uint8,\n  red: r.uint8,\n  alpha: r.uint8\n});\nvar CPAL = new r.VersionedStruct(r.uint16, {\n  header: {\n    numPaletteEntries: r.uint16,\n    numPalettes: r.uint16,\n    numColorRecords: r.uint16,\n    colorRecords: new r.Pointer(r.uint32, new r.Array(ColorRecord, 'numColorRecords')),\n    colorRecordIndices: new r.Array(r.uint16, 'numPalettes')\n  },\n  0: {},\n  1: {\n    offsetPaletteTypeArray: new r.Pointer(r.uint32, new r.Array(r.uint32, 'numPalettes')),\n    offsetPaletteLabelArray: new r.Pointer(r.uint32, new r.Array(r.uint16, 'numPalettes')),\n    offsetPaletteEntryLabelArray: new r.Pointer(r.uint32, new r.Array(r.uint16, 'numPaletteEntries'))\n  }\n});\nvar BaseCoord = new r.VersionedStruct(r.uint16, {\n  1: {\n    // Design units only\n    coordinate: r.int16 // X or Y value, in design units\n  },\n  2: {\n    // Design units plus contour point\n    coordinate: r.int16,\n    // X or Y value, in design units\n    referenceGlyph: r.uint16,\n    // GlyphID of control glyph\n    baseCoordPoint: r.uint16 // Index of contour point on the referenceGlyph\n  },\n  3: {\n    // Design units plus Device table\n    coordinate: r.int16,\n    // X or Y value, in design units\n    deviceTable: new r.Pointer(r.uint16, Device) // Device table for X or Y value\n  }\n});\nvar BaseValues = new r.Struct({\n  defaultIndex: r.uint16,\n  // Index of default baseline for this script-same index in the BaseTagList\n  baseCoordCount: r.uint16,\n  baseCoords: new r.Array(new r.Pointer(r.uint16, BaseCoord), 'baseCoordCount')\n});\nvar FeatMinMaxRecord = new r.Struct({\n  tag: new r.String(4),\n  // 4-byte feature identification tag-must match FeatureTag in FeatureList\n  minCoord: new r.Pointer(r.uint16, BaseCoord, {\n    type: 'parent'\n  }),\n  // May be NULL\n  maxCoord: new r.Pointer(r.uint16, BaseCoord, {\n    type: 'parent'\n  }) // May be NULL\n});\nvar MinMax = new r.Struct({\n  minCoord: new r.Pointer(r.uint16, BaseCoord),\n  // May be NULL\n  maxCoord: new r.Pointer(r.uint16, BaseCoord),\n  // May be NULL\n  featMinMaxCount: r.uint16,\n  // May be 0\n  featMinMaxRecords: new r.Array(FeatMinMaxRecord, 'featMinMaxCount') // In alphabetical order\n});\nvar BaseLangSysRecord = new r.Struct({\n  tag: new r.String(4),\n  // 4-byte language system identification tag\n  minMax: new r.Pointer(r.uint16, MinMax, {\n    type: 'parent'\n  })\n});\nvar BaseScript = new r.Struct({\n  baseValues: new r.Pointer(r.uint16, BaseValues),\n  // May be NULL\n  defaultMinMax: new r.Pointer(r.uint16, MinMax),\n  // May be NULL\n  baseLangSysCount: r.uint16,\n  // May be 0\n  baseLangSysRecords: new r.Array(BaseLangSysRecord, 'baseLangSysCount') // in alphabetical order by BaseLangSysTag\n});\nvar BaseScriptRecord = new r.Struct({\n  tag: new r.String(4),\n  // 4-byte script identification tag\n  script: new r.Pointer(r.uint16, BaseScript, {\n    type: 'parent'\n  })\n});\nvar BaseScriptList = new r.Array(BaseScriptRecord, r.uint16); // Array of 4-byte baseline identification tags-must be in alphabetical order\n\nvar BaseTagList = new r.Array(new r.String(4), r.uint16);\nvar Axis = new r.Struct({\n  baseTagList: new r.Pointer(r.uint16, BaseTagList),\n  // May be NULL\n  baseScriptList: new r.Pointer(r.uint16, BaseScriptList)\n});\nvar BASE = new r.VersionedStruct(r.uint32, {\n  header: {\n    horizAxis: new r.Pointer(r.uint16, Axis),\n    // May be NULL\n    vertAxis: new r.Pointer(r.uint16, Axis) // May be NULL\n  },\n  0x00010000: {},\n  0x00010001: {\n    itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore)\n  }\n});\nvar AttachPoint = new r.Array(r.uint16, r.uint16);\nvar AttachList = new r.Struct({\n  coverage: new r.Pointer(r.uint16, Coverage),\n  glyphCount: r.uint16,\n  attachPoints: new r.Array(new r.Pointer(r.uint16, AttachPoint), 'glyphCount')\n});\nvar CaretValue = new r.VersionedStruct(r.uint16, {\n  1: {\n    // Design units only\n    coordinate: r.int16\n  },\n  2: {\n    // Contour point\n    caretValuePoint: r.uint16\n  },\n  3: {\n    // Design units plus Device table\n    coordinate: r.int16,\n    deviceTable: new r.Pointer(r.uint16, Device)\n  }\n});\nvar LigGlyph = new r.Array(new r.Pointer(r.uint16, CaretValue), r.uint16);\nvar LigCaretList = new r.Struct({\n  coverage: new r.Pointer(r.uint16, Coverage),\n  ligGlyphCount: r.uint16,\n  ligGlyphs: new r.Array(new r.Pointer(r.uint16, LigGlyph), 'ligGlyphCount')\n});\nvar MarkGlyphSetsDef = new r.Struct({\n  markSetTableFormat: r.uint16,\n  markSetCount: r.uint16,\n  coverage: new r.Array(new r.Pointer(r.uint32, Coverage), 'markSetCount')\n});\nvar GDEF = new r.VersionedStruct(r.uint32, {\n  header: {\n    glyphClassDef: new r.Pointer(r.uint16, ClassDef),\n    attachList: new r.Pointer(r.uint16, AttachList),\n    ligCaretList: new r.Pointer(r.uint16, LigCaretList),\n    markAttachClassDef: new r.Pointer(r.uint16, ClassDef)\n  },\n  0x00010000: {},\n  0x00010002: {\n    markGlyphSetsDef: new r.Pointer(r.uint16, MarkGlyphSetsDef)\n  },\n  0x00010003: {\n    markGlyphSetsDef: new r.Pointer(r.uint16, MarkGlyphSetsDef),\n    itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore)\n  }\n});\nvar ValueFormat = new r.Bitfield(r.uint16, ['xPlacement', 'yPlacement', 'xAdvance', 'yAdvance', 'xPlaDevice', 'yPlaDevice', 'xAdvDevice', 'yAdvDevice']);\nvar types = {\n  xPlacement: r.int16,\n  yPlacement: r.int16,\n  xAdvance: r.int16,\n  yAdvance: r.int16,\n  xPlaDevice: new r.Pointer(r.uint16, Device, {\n    type: 'global',\n    relativeTo: function relativeTo(ctx) {\n      return ctx.rel;\n    }\n  }),\n  yPlaDevice: new r.Pointer(r.uint16, Device, {\n    type: 'global',\n    relativeTo: function relativeTo(ctx) {\n      return ctx.rel;\n    }\n  }),\n  xAdvDevice: new r.Pointer(r.uint16, Device, {\n    type: 'global',\n    relativeTo: function relativeTo(ctx) {\n      return ctx.rel;\n    }\n  }),\n  yAdvDevice: new r.Pointer(r.uint16, Device, {\n    type: 'global',\n    relativeTo: function relativeTo(ctx) {\n      return ctx.rel;\n    }\n  })\n};\nvar ValueRecord = /*#__PURE__*/function () {\n  function ValueRecord(key) {\n    if (key === void 0) {\n      key = 'valueFormat';\n    }\n    this.key = key;\n  }\n  var _proto10 = ValueRecord.prototype;\n  _proto10.buildStruct = function buildStruct(parent) {\n    var struct = parent;\n    while (!struct[this.key] && struct.parent) {\n      struct = struct.parent;\n    }\n    if (!struct[this.key]) return;\n    var fields = {};\n    fields.rel = function () {\n      return struct._startOffset;\n    };\n    var format = struct[this.key];\n    for (var key in format) {\n      if (format[key]) {\n        fields[key] = types[key];\n      }\n    }\n    return new r.Struct(fields);\n  };\n  _proto10.size = function size(val, ctx) {\n    return this.buildStruct(ctx).size(val, ctx);\n  };\n  _proto10.decode = function decode(stream, parent) {\n    var res = this.buildStruct(parent).decode(stream, parent);\n    delete res.rel;\n    return res;\n  };\n  return ValueRecord;\n}();\nvar PairValueRecord = new r.Struct({\n  secondGlyph: r.uint16,\n  value1: new ValueRecord('valueFormat1'),\n  value2: new ValueRecord('valueFormat2')\n});\nvar PairSet = new r.Array(PairValueRecord, r.uint16);\nvar Class2Record = new r.Struct({\n  value1: new ValueRecord('valueFormat1'),\n  value2: new ValueRecord('valueFormat2')\n});\nvar Anchor = new r.VersionedStruct(r.uint16, {\n  1: {\n    // Design units only\n    xCoordinate: r.int16,\n    yCoordinate: r.int16\n  },\n  2: {\n    // Design units plus contour point\n    xCoordinate: r.int16,\n    yCoordinate: r.int16,\n    anchorPoint: r.uint16\n  },\n  3: {\n    // Design units plus Device tables\n    xCoordinate: r.int16,\n    yCoordinate: r.int16,\n    xDeviceTable: new r.Pointer(r.uint16, Device),\n    yDeviceTable: new r.Pointer(r.uint16, Device)\n  }\n});\nvar EntryExitRecord = new r.Struct({\n  entryAnchor: new r.Pointer(r.uint16, Anchor, {\n    type: 'parent'\n  }),\n  exitAnchor: new r.Pointer(r.uint16, Anchor, {\n    type: 'parent'\n  })\n});\nvar MarkRecord = new r.Struct({\n  class: r.uint16,\n  markAnchor: new r.Pointer(r.uint16, Anchor, {\n    type: 'parent'\n  })\n});\nvar MarkArray = new r.Array(MarkRecord, r.uint16);\nvar BaseRecord = new r.Array(new r.Pointer(r.uint16, Anchor), function (t) {\n  return t.parent.classCount;\n});\nvar BaseArray = new r.Array(BaseRecord, r.uint16);\nvar ComponentRecord = new r.Array(new r.Pointer(r.uint16, Anchor), function (t) {\n  return t.parent.parent.classCount;\n});\nvar LigatureAttach = new r.Array(ComponentRecord, r.uint16);\nvar LigatureArray = new r.Array(new r.Pointer(r.uint16, LigatureAttach), r.uint16);\nvar GPOSLookup = new r.VersionedStruct('lookupType', {\n  1: new r.VersionedStruct(r.uint16, {\n    // Single Adjustment\n    1: {\n      // Single positioning value\n      coverage: new r.Pointer(r.uint16, Coverage),\n      valueFormat: ValueFormat,\n      value: new ValueRecord()\n    },\n    2: {\n      coverage: new r.Pointer(r.uint16, Coverage),\n      valueFormat: ValueFormat,\n      valueCount: r.uint16,\n      values: new r.LazyArray(new ValueRecord(), 'valueCount')\n    }\n  }),\n  2: new r.VersionedStruct(r.uint16, {\n    // Pair Adjustment Positioning\n    1: {\n      // Adjustments for glyph pairs\n      coverage: new r.Pointer(r.uint16, Coverage),\n      valueFormat1: ValueFormat,\n      valueFormat2: ValueFormat,\n      pairSetCount: r.uint16,\n      pairSets: new r.LazyArray(new r.Pointer(r.uint16, PairSet), 'pairSetCount')\n    },\n    2: {\n      // Class pair adjustment\n      coverage: new r.Pointer(r.uint16, Coverage),\n      valueFormat1: ValueFormat,\n      valueFormat2: ValueFormat,\n      classDef1: new r.Pointer(r.uint16, ClassDef),\n      classDef2: new r.Pointer(r.uint16, ClassDef),\n      class1Count: r.uint16,\n      class2Count: r.uint16,\n      classRecords: new r.LazyArray(new r.LazyArray(Class2Record, 'class2Count'), 'class1Count')\n    }\n  }),\n  3: {\n    // Cursive Attachment Positioning\n    format: r.uint16,\n    coverage: new r.Pointer(r.uint16, Coverage),\n    entryExitCount: r.uint16,\n    entryExitRecords: new r.Array(EntryExitRecord, 'entryExitCount')\n  },\n  4: {\n    // MarkToBase Attachment Positioning\n    format: r.uint16,\n    markCoverage: new r.Pointer(r.uint16, Coverage),\n    baseCoverage: new r.Pointer(r.uint16, Coverage),\n    classCount: r.uint16,\n    markArray: new r.Pointer(r.uint16, MarkArray),\n    baseArray: new r.Pointer(r.uint16, BaseArray)\n  },\n  5: {\n    // MarkToLigature Attachment Positioning\n    format: r.uint16,\n    markCoverage: new r.Pointer(r.uint16, Coverage),\n    ligatureCoverage: new r.Pointer(r.uint16, Coverage),\n    classCount: r.uint16,\n    markArray: new r.Pointer(r.uint16, MarkArray),\n    ligatureArray: new r.Pointer(r.uint16, LigatureArray)\n  },\n  6: {\n    // MarkToMark Attachment Positioning\n    format: r.uint16,\n    mark1Coverage: new r.Pointer(r.uint16, Coverage),\n    mark2Coverage: new r.Pointer(r.uint16, Coverage),\n    classCount: r.uint16,\n    mark1Array: new r.Pointer(r.uint16, MarkArray),\n    mark2Array: new r.Pointer(r.uint16, BaseArray)\n  },\n  7: Context,\n  // Contextual positioning\n  8: ChainingContext,\n  // Chaining contextual positioning\n  9: {\n    // Extension Positioning\n    posFormat: r.uint16,\n    lookupType: r.uint16,\n    // cannot also be 9\n    extension: new r.Pointer(r.uint32, GPOSLookup)\n  }\n}); // Fix circular reference\n\nGPOSLookup.versions[9].extension.type = GPOSLookup;\nvar GPOS = new r.VersionedStruct(r.uint32, {\n  header: {\n    scriptList: new r.Pointer(r.uint16, ScriptList),\n    featureList: new r.Pointer(r.uint16, FeatureList),\n    lookupList: new r.Pointer(r.uint16, new LookupList(GPOSLookup))\n  },\n  0x00010000: {},\n  0x00010001: {\n    featureVariations: new r.Pointer(r.uint32, FeatureVariations)\n  }\n}); // export GPOSLookup for JSTF table\n\nvar Sequence = new r.Array(r.uint16, r.uint16);\nvar AlternateSet = Sequence;\nvar Ligature = new r.Struct({\n  glyph: r.uint16,\n  compCount: r.uint16,\n  components: new r.Array(r.uint16, function (t) {\n    return t.compCount - 1;\n  })\n});\nvar LigatureSet = new r.Array(new r.Pointer(r.uint16, Ligature), r.uint16);\nvar GSUBLookup = new r.VersionedStruct('lookupType', {\n  1: new r.VersionedStruct(r.uint16, {\n    // Single Substitution\n    1: {\n      coverage: new r.Pointer(r.uint16, Coverage),\n      deltaGlyphID: r.int16\n    },\n    2: {\n      coverage: new r.Pointer(r.uint16, Coverage),\n      glyphCount: r.uint16,\n      substitute: new r.LazyArray(r.uint16, 'glyphCount')\n    }\n  }),\n  2: {\n    // Multiple Substitution\n    substFormat: r.uint16,\n    coverage: new r.Pointer(r.uint16, Coverage),\n    count: r.uint16,\n    sequences: new r.LazyArray(new r.Pointer(r.uint16, Sequence), 'count')\n  },\n  3: {\n    // Alternate Substitution\n    substFormat: r.uint16,\n    coverage: new r.Pointer(r.uint16, Coverage),\n    count: r.uint16,\n    alternateSet: new r.LazyArray(new r.Pointer(r.uint16, AlternateSet), 'count')\n  },\n  4: {\n    // Ligature Substitution\n    substFormat: r.uint16,\n    coverage: new r.Pointer(r.uint16, Coverage),\n    count: r.uint16,\n    ligatureSets: new r.LazyArray(new r.Pointer(r.uint16, LigatureSet), 'count')\n  },\n  5: Context,\n  // Contextual Substitution\n  6: ChainingContext,\n  // Chaining Contextual Substitution\n  7: {\n    // Extension Substitution\n    substFormat: r.uint16,\n    lookupType: r.uint16,\n    // cannot also be 7\n    extension: new r.Pointer(r.uint32, GSUBLookup)\n  },\n  8: {\n    // Reverse Chaining Contextual Single Substitution\n    substFormat: r.uint16,\n    coverage: new r.Pointer(r.uint16, Coverage),\n    backtrackCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'backtrackGlyphCount'),\n    lookaheadGlyphCount: r.uint16,\n    lookaheadCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'lookaheadGlyphCount'),\n    glyphCount: r.uint16,\n    substitutes: new r.Array(r.uint16, 'glyphCount')\n  }\n}); // Fix circular reference\n\nGSUBLookup.versions[7].extension.type = GSUBLookup;\nvar GSUB = new r.VersionedStruct(r.uint32, {\n  header: {\n    scriptList: new r.Pointer(r.uint16, ScriptList),\n    featureList: new r.Pointer(r.uint16, FeatureList),\n    lookupList: new r.Pointer(r.uint16, new LookupList(GSUBLookup))\n  },\n  0x00010000: {},\n  0x00010001: {\n    featureVariations: new r.Pointer(r.uint32, FeatureVariations)\n  }\n});\nvar JstfGSUBModList = new r.Array(r.uint16, r.uint16);\nvar JstfPriority = new r.Struct({\n  shrinkageEnableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n  shrinkageDisableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n  shrinkageEnableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n  shrinkageDisableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n  shrinkageJstfMax: new r.Pointer(r.uint16, new LookupList(GPOSLookup)),\n  extensionEnableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n  extensionDisableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n  extensionEnableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n  extensionDisableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n  extensionJstfMax: new r.Pointer(r.uint16, new LookupList(GPOSLookup))\n});\nvar JstfLangSys = new r.Array(new r.Pointer(r.uint16, JstfPriority), r.uint16);\nvar JstfLangSysRecord = new r.Struct({\n  tag: new r.String(4),\n  jstfLangSys: new r.Pointer(r.uint16, JstfLangSys)\n});\nvar JstfScript = new r.Struct({\n  extenderGlyphs: new r.Pointer(r.uint16, new r.Array(r.uint16, r.uint16)),\n  // array of glyphs to extend line length\n  defaultLangSys: new r.Pointer(r.uint16, JstfLangSys),\n  langSysCount: r.uint16,\n  langSysRecords: new r.Array(JstfLangSysRecord, 'langSysCount')\n});\nvar JstfScriptRecord = new r.Struct({\n  tag: new r.String(4),\n  script: new r.Pointer(r.uint16, JstfScript, {\n    type: 'parent'\n  })\n});\nvar JSTF = new r.Struct({\n  version: r.uint32,\n  // should be 0x00010000\n  scriptCount: r.uint16,\n  scriptList: new r.Array(JstfScriptRecord, 'scriptCount')\n});\nvar VariableSizeNumber = /*#__PURE__*/function () {\n  function VariableSizeNumber(size) {\n    this._size = size;\n  }\n  var _proto11 = VariableSizeNumber.prototype;\n  _proto11.decode = function decode(stream, parent) {\n    switch (this.size(0, parent)) {\n      case 1:\n        return stream.readUInt8();\n      case 2:\n        return stream.readUInt16BE();\n      case 3:\n        return stream.readUInt24BE();\n      case 4:\n        return stream.readUInt32BE();\n    }\n  };\n  _proto11.size = function size(val, parent) {\n    return utils.resolveLength(this._size, null, parent);\n  };\n  return VariableSizeNumber;\n}();\nvar MapDataEntry = new r.Struct({\n  entry: new VariableSizeNumber(function (t) {\n    return ((t.parent.entryFormat & 0x0030) >> 4) + 1;\n  }),\n  outerIndex: function outerIndex(t) {\n    return t.entry >> (t.parent.entryFormat & 0x000F) + 1;\n  },\n  innerIndex: function innerIndex(t) {\n    return t.entry & (1 << (t.parent.entryFormat & 0x000F) + 1) - 1;\n  }\n});\nvar DeltaSetIndexMap = new r.Struct({\n  entryFormat: r.uint16,\n  mapCount: r.uint16,\n  mapData: new r.Array(MapDataEntry, 'mapCount')\n});\nvar HVAR = new r.Struct({\n  majorVersion: r.uint16,\n  minorVersion: r.uint16,\n  itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore),\n  advanceWidthMapping: new r.Pointer(r.uint32, DeltaSetIndexMap),\n  LSBMapping: new r.Pointer(r.uint32, DeltaSetIndexMap),\n  RSBMapping: new r.Pointer(r.uint32, DeltaSetIndexMap)\n});\nvar Signature = new r.Struct({\n  format: r.uint32,\n  length: r.uint32,\n  offset: r.uint32\n});\nvar SignatureBlock = new r.Struct({\n  reserved: new r.Reserved(r.uint16, 2),\n  cbSignature: r.uint32,\n  // Length (in bytes) of the PKCS#7 packet in pbSignature\n  signature: new r.Buffer('cbSignature')\n});\nvar DSIG = new r.Struct({\n  ulVersion: r.uint32,\n  // Version number of the DSIG table (0x00000001)\n  usNumSigs: r.uint16,\n  // Number of signatures in the table\n  usFlag: r.uint16,\n  // Permission flags\n  signatures: new r.Array(Signature, 'usNumSigs'),\n  signatureBlocks: new r.Array(SignatureBlock, 'usNumSigs')\n});\nvar GaspRange = new r.Struct({\n  rangeMaxPPEM: r.uint16,\n  // Upper limit of range, in ppem\n  rangeGaspBehavior: new r.Bitfield(r.uint16, [\n  // Flags describing desired rasterizer behavior\n  'grayscale', 'gridfit', 'symmetricSmoothing', 'symmetricGridfit' // only in version 1, for ClearType\n  ])\n});\nvar gasp = new r.Struct({\n  version: r.uint16,\n  // set to 0\n  numRanges: r.uint16,\n  gaspRanges: new r.Array(GaspRange, 'numRanges') // Sorted by ppem\n});\nvar DeviceRecord = new r.Struct({\n  pixelSize: r.uint8,\n  maximumWidth: r.uint8,\n  widths: new r.Array(r.uint8, function (t) {\n    return t.parent.parent.maxp.numGlyphs;\n  })\n}); // The Horizontal Device Metrics table stores integer advance widths scaled to particular pixel sizes\n\nvar hdmx = new r.Struct({\n  version: r.uint16,\n  numRecords: r.int16,\n  sizeDeviceRecord: r.int32,\n  records: new r.Array(DeviceRecord, 'numRecords')\n});\nvar KernPair = new r.Struct({\n  left: r.uint16,\n  right: r.uint16,\n  value: r.int16\n});\nvar ClassTable = new r.Struct({\n  firstGlyph: r.uint16,\n  nGlyphs: r.uint16,\n  offsets: new r.Array(r.uint16, 'nGlyphs'),\n  max: function max(t) {\n    return t.offsets.length && Math.max.apply(Math, t.offsets);\n  }\n});\nvar Kern2Array = new r.Struct({\n  off: function off(t) {\n    return t._startOffset - t.parent.parent._startOffset;\n  },\n  len: function len(t) {\n    return ((t.parent.leftTable.max - t.off) / t.parent.rowWidth + 1) * (t.parent.rowWidth / 2);\n  },\n  values: new r.LazyArray(r.int16, 'len')\n});\nvar KernSubtable = new r.VersionedStruct('format', {\n  0: {\n    nPairs: r.uint16,\n    searchRange: r.uint16,\n    entrySelector: r.uint16,\n    rangeShift: r.uint16,\n    pairs: new r.Array(KernPair, 'nPairs')\n  },\n  2: {\n    rowWidth: r.uint16,\n    leftTable: new r.Pointer(r.uint16, ClassTable, {\n      type: 'parent'\n    }),\n    rightTable: new r.Pointer(r.uint16, ClassTable, {\n      type: 'parent'\n    }),\n    array: new r.Pointer(r.uint16, Kern2Array, {\n      type: 'parent'\n    })\n  },\n  3: {\n    glyphCount: r.uint16,\n    kernValueCount: r.uint8,\n    leftClassCount: r.uint8,\n    rightClassCount: r.uint8,\n    flags: r.uint8,\n    kernValue: new r.Array(r.int16, 'kernValueCount'),\n    leftClass: new r.Array(r.uint8, 'glyphCount'),\n    rightClass: new r.Array(r.uint8, 'glyphCount'),\n    kernIndex: new r.Array(r.uint8, function (t) {\n      return t.leftClassCount * t.rightClassCount;\n    })\n  }\n});\nvar KernTable = new r.VersionedStruct('version', {\n  0: {\n    // Microsoft uses this format\n    subVersion: r.uint16,\n    // Microsoft has an extra sub-table version number\n    length: r.uint16,\n    // Length of the subtable, in bytes\n    format: r.uint8,\n    // Format of subtable\n    coverage: new r.Bitfield(r.uint8, ['horizontal',\n    // 1 if table has horizontal data, 0 if vertical\n    'minimum',\n    // If set to 1, the table has minimum values. If set to 0, the table has kerning values.\n    'crossStream',\n    // If set to 1, kerning is perpendicular to the flow of the text\n    'override' // If set to 1 the value in this table replaces the accumulated value\n    ]),\n    subtable: KernSubtable,\n    padding: new r.Reserved(r.uint8, function (t) {\n      return t.length - t._currentOffset;\n    })\n  },\n  1: {\n    // Apple uses this format\n    length: r.uint32,\n    coverage: new r.Bitfield(r.uint8, [null, null, null, null, null, 'variation',\n    // Set if table has variation kerning values\n    'crossStream',\n    // Set if table has cross-stream kerning values\n    'vertical' // Set if table has vertical kerning values\n    ]),\n    format: r.uint8,\n    tupleIndex: r.uint16,\n    subtable: KernSubtable,\n    padding: new r.Reserved(r.uint8, function (t) {\n      return t.length - t._currentOffset;\n    })\n  }\n});\nvar kern = new r.VersionedStruct(r.uint16, {\n  0: {\n    // Microsoft Version\n    nTables: r.uint16,\n    tables: new r.Array(KernTable, 'nTables')\n  },\n  1: {\n    // Apple Version\n    reserved: new r.Reserved(r.uint16),\n    // the other half of the version number\n    nTables: r.uint32,\n    tables: new r.Array(KernTable, 'nTables')\n  }\n});\n\n// Records the ppem for each glyph at which the scaling becomes linear again,\n// despite instructions effecting the advance width\n\nvar LTSH = new r.Struct({\n  version: r.uint16,\n  numGlyphs: r.uint16,\n  yPels: new r.Array(r.uint8, 'numGlyphs')\n});\n\n// NOTE: The PCLT table is strongly discouraged for OpenType fonts with TrueType outlines\n\nvar PCLT = new r.Struct({\n  version: r.uint16,\n  fontNumber: r.uint32,\n  pitch: r.uint16,\n  xHeight: r.uint16,\n  style: r.uint16,\n  typeFamily: r.uint16,\n  capHeight: r.uint16,\n  symbolSet: r.uint16,\n  typeface: new r.String(16),\n  characterComplement: new r.String(8),\n  fileName: new r.String(6),\n  strokeWeight: new r.String(1),\n  widthType: new r.String(1),\n  serifStyle: r.uint8,\n  reserved: new r.Reserved(r.uint8)\n});\n\n// sizes. This is needed in order to match font metrics on Windows.\n\nvar Ratio = new r.Struct({\n  bCharSet: r.uint8,\n  // Character set\n  xRatio: r.uint8,\n  // Value to use for x-Ratio\n  yStartRatio: r.uint8,\n  // Starting y-Ratio value\n  yEndRatio: r.uint8 // Ending y-Ratio value\n});\nvar vTable = new r.Struct({\n  yPelHeight: r.uint16,\n  // yPelHeight to which values apply\n  yMax: r.int16,\n  // Maximum value (in pels) for this yPelHeight\n  yMin: r.int16 // Minimum value (in pels) for this yPelHeight\n});\nvar VdmxGroup = new r.Struct({\n  recs: r.uint16,\n  // Number of height records in this group\n  startsz: r.uint8,\n  // Starting yPelHeight\n  endsz: r.uint8,\n  // Ending yPelHeight\n  entries: new r.Array(vTable, 'recs') // The VDMX records\n});\nvar VDMX = new r.Struct({\n  version: r.uint16,\n  // Version number (0 or 1)\n  numRecs: r.uint16,\n  // Number of VDMX groups present\n  numRatios: r.uint16,\n  // Number of aspect ratio groupings\n  ratioRanges: new r.Array(Ratio, 'numRatios'),\n  // Ratio ranges\n  offsets: new r.Array(r.uint16, 'numRatios'),\n  // Offset to the VDMX group for this ratio range\n  groups: new r.Array(VdmxGroup, 'numRecs') // The actual VDMX groupings\n});\nvar vhea = new r.Struct({\n  version: r.uint16,\n  // Version number of the Vertical Header Table\n  ascent: r.int16,\n  // The vertical typographic ascender for this font\n  descent: r.int16,\n  // The vertical typographic descender for this font\n  lineGap: r.int16,\n  // The vertical typographic line gap for this font\n  advanceHeightMax: r.int16,\n  // The maximum advance height measurement found in the font\n  minTopSideBearing: r.int16,\n  // The minimum top side bearing measurement found in the font\n  minBottomSideBearing: r.int16,\n  // The minimum bottom side bearing measurement found in the font\n  yMaxExtent: r.int16,\n  caretSlopeRise: r.int16,\n  // Caret slope (rise/run)\n  caretSlopeRun: r.int16,\n  caretOffset: r.int16,\n  // Set value equal to 0 for nonslanted fonts\n  reserved: new r.Reserved(r.int16, 4),\n  metricDataFormat: r.int16,\n  // Set to 0\n  numberOfMetrics: r.uint16 // Number of advance heights in the Vertical Metrics table\n});\nvar VmtxEntry = new r.Struct({\n  advance: r.uint16,\n  // The advance height of the glyph\n  bearing: r.int16 // The top sidebearing of the glyph\n}); // Vertical Metrics Table\n\nvar vmtx = new r.Struct({\n  metrics: new r.LazyArray(VmtxEntry, function (t) {\n    return t.parent.vhea.numberOfMetrics;\n  }),\n  bearings: new r.LazyArray(r.int16, function (t) {\n    return t.parent.maxp.numGlyphs - t.parent.vhea.numberOfMetrics;\n  })\n});\nvar shortFrac = new r.Fixed(16, 'BE', 14);\nvar Correspondence = new r.Struct({\n  fromCoord: shortFrac,\n  toCoord: shortFrac\n});\nvar Segment = new r.Struct({\n  pairCount: r.uint16,\n  correspondence: new r.Array(Correspondence, 'pairCount')\n});\nvar avar = new r.Struct({\n  version: r.fixed32,\n  axisCount: r.uint32,\n  segment: new r.Array(Segment, 'axisCount')\n});\nvar UnboundedArrayAccessor = /*#__PURE__*/function () {\n  function UnboundedArrayAccessor(type, stream, parent) {\n    this.type = type;\n    this.stream = stream;\n    this.parent = parent;\n    this.base = this.stream.pos;\n    this._items = [];\n  }\n  var _proto12 = UnboundedArrayAccessor.prototype;\n  _proto12.getItem = function getItem(index) {\n    if (this._items[index] == null) {\n      var pos = this.stream.pos;\n      this.stream.pos = this.base + this.type.size(null, this.parent) * index;\n      this._items[index] = this.type.decode(this.stream, this.parent);\n      this.stream.pos = pos;\n    }\n    return this._items[index];\n  };\n  _proto12.inspect = function inspect() {\n    return \"[UnboundedArray \".concat(this.type.constructor.name, \"]\");\n  };\n  return UnboundedArrayAccessor;\n}();\nvar UnboundedArray = /*#__PURE__*/function (_r$Array2) {\n  _inheritsLoose(UnboundedArray, _r$Array2);\n  function UnboundedArray(type) {\n    return _r$Array2.call(this, type, 0) || this;\n  }\n  var _proto13 = UnboundedArray.prototype;\n  _proto13.decode = function decode(stream, parent) {\n    return new UnboundedArrayAccessor(this.type, stream, parent);\n  };\n  return UnboundedArray;\n}(r.Array);\nvar LookupTable = function LookupTable(ValueType) {\n  if (ValueType === void 0) {\n    ValueType = r.uint16;\n  }\n  // Helper class that makes internal structures invisible to pointers\n  var Shadow = /*#__PURE__*/function () {\n    function Shadow(type) {\n      this.type = type;\n    }\n    var _proto14 = Shadow.prototype;\n    _proto14.decode = function decode(stream, ctx) {\n      ctx = ctx.parent.parent;\n      return this.type.decode(stream, ctx);\n    };\n    _proto14.size = function size(val, ctx) {\n      ctx = ctx.parent.parent;\n      return this.type.size(val, ctx);\n    };\n    _proto14.encode = function encode(stream, val, ctx) {\n      ctx = ctx.parent.parent;\n      return this.type.encode(stream, val, ctx);\n    };\n    return Shadow;\n  }();\n  ValueType = new Shadow(ValueType);\n  var BinarySearchHeader = new r.Struct({\n    unitSize: r.uint16,\n    nUnits: r.uint16,\n    searchRange: r.uint16,\n    entrySelector: r.uint16,\n    rangeShift: r.uint16\n  });\n  var LookupSegmentSingle = new r.Struct({\n    lastGlyph: r.uint16,\n    firstGlyph: r.uint16,\n    value: ValueType\n  });\n  var LookupSegmentArray = new r.Struct({\n    lastGlyph: r.uint16,\n    firstGlyph: r.uint16,\n    values: new r.Pointer(r.uint16, new r.Array(ValueType, function (t) {\n      return t.lastGlyph - t.firstGlyph + 1;\n    }), {\n      type: 'parent'\n    })\n  });\n  var LookupSingle = new r.Struct({\n    glyph: r.uint16,\n    value: ValueType\n  });\n  return new r.VersionedStruct(r.uint16, {\n    0: {\n      values: new UnboundedArray(ValueType) // length == number of glyphs maybe?\n    },\n    2: {\n      binarySearchHeader: BinarySearchHeader,\n      segments: new r.Array(LookupSegmentSingle, function (t) {\n        return t.binarySearchHeader.nUnits;\n      })\n    },\n    4: {\n      binarySearchHeader: BinarySearchHeader,\n      segments: new r.Array(LookupSegmentArray, function (t) {\n        return t.binarySearchHeader.nUnits;\n      })\n    },\n    6: {\n      binarySearchHeader: BinarySearchHeader,\n      segments: new r.Array(LookupSingle, function (t) {\n        return t.binarySearchHeader.nUnits;\n      })\n    },\n    8: {\n      firstGlyph: r.uint16,\n      count: r.uint16,\n      values: new r.Array(ValueType, 'count')\n    }\n  });\n};\nfunction StateTable(entryData, lookupType) {\n  if (entryData === void 0) {\n    entryData = {};\n  }\n  if (lookupType === void 0) {\n    lookupType = r.uint16;\n  }\n  var entry = Object.assign({\n    newState: r.uint16,\n    flags: r.uint16\n  }, entryData);\n  var Entry = new r.Struct(entry);\n  var StateArray = new UnboundedArray(new r.Array(r.uint16, function (t) {\n    return t.nClasses;\n  }));\n  var StateHeader = new r.Struct({\n    nClasses: r.uint32,\n    classTable: new r.Pointer(r.uint32, new LookupTable(lookupType)),\n    stateArray: new r.Pointer(r.uint32, StateArray),\n    entryTable: new r.Pointer(r.uint32, new UnboundedArray(Entry))\n  });\n  return StateHeader;\n} // This is the old version of the StateTable structure\n\nfunction StateTable1(entryData, lookupType) {\n  if (entryData === void 0) {\n    entryData = {};\n  }\n  if (lookupType === void 0) {\n    lookupType = r.uint16;\n  }\n  var ClassLookupTable = new r.Struct({\n    version: function version() {\n      return 8;\n    },\n    // simulate LookupTable\n    firstGlyph: r.uint16,\n    values: new r.Array(r.uint8, r.uint16)\n  });\n  var entry = Object.assign({\n    newStateOffset: r.uint16,\n    // convert offset to stateArray index\n    newState: function newState(t) {\n      return (t.newStateOffset - (t.parent.stateArray.base - t.parent._startOffset)) / t.parent.nClasses;\n    },\n    flags: r.uint16\n  }, entryData);\n  var Entry = new r.Struct(entry);\n  var StateArray = new UnboundedArray(new r.Array(r.uint8, function (t) {\n    return t.nClasses;\n  }));\n  var StateHeader1 = new r.Struct({\n    nClasses: r.uint16,\n    classTable: new r.Pointer(r.uint16, ClassLookupTable),\n    stateArray: new r.Pointer(r.uint16, StateArray),\n    entryTable: new r.Pointer(r.uint16, new UnboundedArray(Entry))\n  });\n  return StateHeader1;\n}\nvar BslnSubtable = new r.VersionedStruct('format', {\n  0: {\n    // Distance-based, no mapping\n    deltas: new r.Array(r.int16, 32)\n  },\n  1: {\n    // Distance-based, with mapping\n    deltas: new r.Array(r.int16, 32),\n    mappingData: new LookupTable(r.uint16)\n  },\n  2: {\n    // Control point-based, no mapping\n    standardGlyph: r.uint16,\n    controlPoints: new r.Array(r.uint16, 32)\n  },\n  3: {\n    // Control point-based, with mapping\n    standardGlyph: r.uint16,\n    controlPoints: new r.Array(r.uint16, 32),\n    mappingData: new LookupTable(r.uint16)\n  }\n});\nvar bsln = new r.Struct({\n  version: r.fixed32,\n  format: r.uint16,\n  defaultBaseline: r.uint16,\n  subtable: BslnSubtable\n});\nvar Setting = new r.Struct({\n  setting: r.uint16,\n  nameIndex: r.int16,\n  name: function name(t) {\n    return t.parent.parent.parent.name.records.fontFeatures[t.nameIndex];\n  }\n});\nvar FeatureName = new r.Struct({\n  feature: r.uint16,\n  nSettings: r.uint16,\n  settingTable: new r.Pointer(r.uint32, new r.Array(Setting, 'nSettings'), {\n    type: 'parent'\n  }),\n  featureFlags: new r.Bitfield(r.uint8, [null, null, null, null, null, null, 'hasDefault', 'exclusive']),\n  defaultSetting: r.uint8,\n  nameIndex: r.int16,\n  name: function name(t) {\n    return t.parent.parent.name.records.fontFeatures[t.nameIndex];\n  }\n});\nvar feat = new r.Struct({\n  version: r.fixed32,\n  featureNameCount: r.uint16,\n  reserved1: new r.Reserved(r.uint16),\n  reserved2: new r.Reserved(r.uint32),\n  featureNames: new r.Array(FeatureName, 'featureNameCount')\n});\nvar Axis$1 = new r.Struct({\n  axisTag: new r.String(4),\n  minValue: r.fixed32,\n  defaultValue: r.fixed32,\n  maxValue: r.fixed32,\n  flags: r.uint16,\n  nameID: r.uint16,\n  name: function name(t) {\n    return t.parent.parent.name.records.fontFeatures[t.nameID];\n  }\n});\nvar Instance = new r.Struct({\n  nameID: r.uint16,\n  name: function name(t) {\n    return t.parent.parent.name.records.fontFeatures[t.nameID];\n  },\n  flags: r.uint16,\n  coord: new r.Array(r.fixed32, function (t) {\n    return t.parent.axisCount;\n  }),\n  postscriptNameID: new r.Optional(r.uint16, function (t) {\n    return t.parent.instanceSize - t._currentOffset > 0;\n  })\n});\nvar fvar = new r.Struct({\n  version: r.fixed32,\n  offsetToData: r.uint16,\n  countSizePairs: r.uint16,\n  axisCount: r.uint16,\n  axisSize: r.uint16,\n  instanceCount: r.uint16,\n  instanceSize: r.uint16,\n  axis: new r.Array(Axis$1, 'axisCount'),\n  instance: new r.Array(Instance, 'instanceCount')\n});\nvar shortFrac$1 = new r.Fixed(16, 'BE', 14);\nvar Offset = /*#__PURE__*/function () {\n  function Offset() {}\n  Offset.decode = function decode(stream, parent) {\n    // In short format, offsets are multiplied by 2.\n    // This doesn't seem to be documented by Apple, but it\n    // is implemented this way in Freetype.\n    return parent.flags ? stream.readUInt32BE() : stream.readUInt16BE() * 2;\n  };\n  return Offset;\n}();\nvar gvar = new r.Struct({\n  version: r.uint16,\n  reserved: new r.Reserved(r.uint16),\n  axisCount: r.uint16,\n  globalCoordCount: r.uint16,\n  globalCoords: new r.Pointer(r.uint32, new r.Array(new r.Array(shortFrac$1, 'axisCount'), 'globalCoordCount')),\n  glyphCount: r.uint16,\n  flags: r.uint16,\n  offsetToData: r.uint32,\n  offsets: new r.Array(new r.Pointer(Offset, 'void', {\n    relativeTo: function relativeTo(ctx) {\n      return ctx.offsetToData;\n    },\n    allowNull: false\n  }), function (t) {\n    return t.glyphCount + 1;\n  })\n});\nvar ClassTable$1 = new r.Struct({\n  length: r.uint16,\n  coverage: r.uint16,\n  subFeatureFlags: r.uint32,\n  stateTable: new StateTable1()\n});\nvar WidthDeltaRecord = new r.Struct({\n  justClass: r.uint32,\n  beforeGrowLimit: r.fixed32,\n  beforeShrinkLimit: r.fixed32,\n  afterGrowLimit: r.fixed32,\n  afterShrinkLimit: r.fixed32,\n  growFlags: r.uint16,\n  shrinkFlags: r.uint16\n});\nvar WidthDeltaCluster = new r.Array(WidthDeltaRecord, r.uint32);\nvar ActionData = new r.VersionedStruct('actionType', {\n  0: {\n    // Decomposition action\n    lowerLimit: r.fixed32,\n    upperLimit: r.fixed32,\n    order: r.uint16,\n    glyphs: new r.Array(r.uint16, r.uint16)\n  },\n  1: {\n    // Unconditional add glyph action\n    addGlyph: r.uint16\n  },\n  2: {\n    // Conditional add glyph action\n    substThreshold: r.fixed32,\n    addGlyph: r.uint16,\n    substGlyph: r.uint16\n  },\n  3: {},\n  // Stretch glyph action (no data, not supported by CoreText)\n  4: {\n    // Ductile glyph action (not supported by CoreText)\n    variationAxis: r.uint32,\n    minimumLimit: r.fixed32,\n    noStretchValue: r.fixed32,\n    maximumLimit: r.fixed32\n  },\n  5: {\n    // Repeated add glyph action\n    flags: r.uint16,\n    glyph: r.uint16\n  }\n});\nvar Action = new r.Struct({\n  actionClass: r.uint16,\n  actionType: r.uint16,\n  actionLength: r.uint32,\n  actionData: ActionData,\n  padding: new r.Reserved(r.uint8, function (t) {\n    return t.actionLength - t._currentOffset;\n  })\n});\nvar PostcompensationAction = new r.Array(Action, r.uint32);\nvar PostCompensationTable = new r.Struct({\n  lookupTable: new LookupTable(new r.Pointer(r.uint16, PostcompensationAction))\n});\nvar JustificationTable = new r.Struct({\n  classTable: new r.Pointer(r.uint16, ClassTable$1, {\n    type: 'parent'\n  }),\n  wdcOffset: r.uint16,\n  postCompensationTable: new r.Pointer(r.uint16, PostCompensationTable, {\n    type: 'parent'\n  }),\n  widthDeltaClusters: new LookupTable(new r.Pointer(r.uint16, WidthDeltaCluster, {\n    type: 'parent',\n    relativeTo: function relativeTo(ctx) {\n      return ctx.wdcOffset;\n    }\n  }))\n});\nvar just = new r.Struct({\n  version: r.uint32,\n  format: r.uint16,\n  horizontal: new r.Pointer(r.uint16, JustificationTable),\n  vertical: new r.Pointer(r.uint16, JustificationTable)\n});\nvar LigatureData = {\n  action: r.uint16\n};\nvar ContextualData = {\n  markIndex: r.uint16,\n  currentIndex: r.uint16\n};\nvar InsertionData = {\n  currentInsertIndex: r.uint16,\n  markedInsertIndex: r.uint16\n};\nvar SubstitutionTable = new r.Struct({\n  items: new UnboundedArray(new r.Pointer(r.uint32, new LookupTable()))\n});\nvar SubtableData = new r.VersionedStruct('type', {\n  0: {\n    // Indic Rearrangement Subtable\n    stateTable: new StateTable()\n  },\n  1: {\n    // Contextual Glyph Substitution Subtable\n    stateTable: new StateTable(ContextualData),\n    substitutionTable: new r.Pointer(r.uint32, SubstitutionTable)\n  },\n  2: {\n    // Ligature subtable\n    stateTable: new StateTable(LigatureData),\n    ligatureActions: new r.Pointer(r.uint32, new UnboundedArray(r.uint32)),\n    components: new r.Pointer(r.uint32, new UnboundedArray(r.uint16)),\n    ligatureList: new r.Pointer(r.uint32, new UnboundedArray(r.uint16))\n  },\n  4: {\n    // Non-contextual Glyph Substitution Subtable\n    lookupTable: new LookupTable()\n  },\n  5: {\n    // Glyph Insertion Subtable\n    stateTable: new StateTable(InsertionData),\n    insertionActions: new r.Pointer(r.uint32, new UnboundedArray(r.uint16))\n  }\n});\nvar Subtable = new r.Struct({\n  length: r.uint32,\n  coverage: r.uint24,\n  type: r.uint8,\n  subFeatureFlags: r.uint32,\n  table: SubtableData,\n  padding: new r.Reserved(r.uint8, function (t) {\n    return t.length - t._currentOffset;\n  })\n});\nvar FeatureEntry = new r.Struct({\n  featureType: r.uint16,\n  featureSetting: r.uint16,\n  enableFlags: r.uint32,\n  disableFlags: r.uint32\n});\nvar MorxChain = new r.Struct({\n  defaultFlags: r.uint32,\n  chainLength: r.uint32,\n  nFeatureEntries: r.uint32,\n  nSubtables: r.uint32,\n  features: new r.Array(FeatureEntry, 'nFeatureEntries'),\n  subtables: new r.Array(Subtable, 'nSubtables')\n});\nvar morx = new r.Struct({\n  version: r.uint16,\n  unused: new r.Reserved(r.uint16),\n  nChains: r.uint32,\n  chains: new r.Array(MorxChain, 'nChains')\n});\nvar OpticalBounds = new r.Struct({\n  left: r.int16,\n  top: r.int16,\n  right: r.int16,\n  bottom: r.int16\n});\nvar opbd = new r.Struct({\n  version: r.fixed32,\n  format: r.uint16,\n  lookupTable: new LookupTable(OpticalBounds)\n});\nvar tables = {};\ntables.cmap = cmap;\ntables.head = head;\ntables.hhea = hhea;\ntables.hmtx = hmtx;\ntables.maxp = maxp;\ntables.name = NameTable;\ntables['OS/2'] = OS2;\ntables.post = post; // TrueType Outlines\ntables.fpgm = fpgm;\ntables.loca = loca;\ntables.prep = prep;\ntables['cvt '] = cvt;\ntables.glyf = glyf; // PostScript Outlines\ntables['CFF '] = CFFFont;\ntables['CFF2'] = CFFFont;\ntables.VORG = VORG; // Bitmap Glyphs\ntables.EBLC = EBLC;\ntables.CBLC = tables.EBLC;\ntables.sbix = sbix;\ntables.COLR = COLR;\ntables.CPAL = CPAL; // Advanced OpenType Tables\ntables.BASE = BASE;\ntables.GDEF = GDEF;\ntables.GPOS = GPOS;\ntables.GSUB = GSUB;\ntables.JSTF = JSTF; // OpenType variations tables\ntables.HVAR = HVAR; // Other OpenType Tables\ntables.DSIG = DSIG;\ntables.gasp = gasp;\ntables.hdmx = hdmx;\ntables.kern = kern;\ntables.LTSH = LTSH;\ntables.PCLT = PCLT;\ntables.VDMX = VDMX;\ntables.vhea = vhea;\ntables.vmtx = vmtx; // Apple Advanced Typography Tables\ntables.avar = avar;\ntables.bsln = bsln;\ntables.feat = feat;\ntables.fvar = fvar;\ntables.gvar = gvar;\ntables.just = just;\ntables.morx = morx;\ntables.opbd = opbd;\nvar TableEntry = new r.Struct({\n  tag: new r.String(4),\n  checkSum: r.uint32,\n  offset: new r.Pointer(r.uint32, 'void', {\n    type: 'global'\n  }),\n  length: r.uint32\n});\nvar Directory = new r.Struct({\n  tag: new r.String(4),\n  numTables: r.uint16,\n  searchRange: r.uint16,\n  entrySelector: r.uint16,\n  rangeShift: r.uint16,\n  tables: new r.Array(TableEntry, 'numTables')\n});\nDirectory.process = function () {\n  var tables = {};\n  for (var _iterator9 = _createForOfIteratorHelperLoose(this.tables), _step9; !(_step9 = _iterator9()).done;) {\n    var table = _step9.value;\n    tables[table.tag] = table;\n  }\n  this.tables = tables;\n};\nDirectory.preEncode = function (stream) {\n  var tables$1 = [];\n  for (var tag in this.tables) {\n    var table = this.tables[tag];\n    if (table) {\n      tables$1.push({\n        tag: tag,\n        checkSum: 0,\n        offset: new r.VoidPointer(tables[tag], table),\n        length: tables[tag].size(table)\n      });\n    }\n  }\n  this.tag = 'true';\n  this.numTables = tables$1.length;\n  this.tables = tables$1;\n  var maxExponentFor2 = Math.floor(Math.log(this.numTables) / Math.LN2);\n  var maxPowerOf2 = Math.pow(2, maxExponentFor2);\n  this.searchRange = maxPowerOf2 * 16;\n  this.entrySelector = Math.log(maxPowerOf2) / Math.LN2;\n  this.rangeShift = this.numTables * 16 - this.searchRange;\n};\nfunction binarySearch(arr, cmp) {\n  var min = 0;\n  var max = arr.length - 1;\n  while (min <= max) {\n    var mid = min + max >> 1;\n    var res = cmp(arr[mid]);\n    if (res < 0) {\n      max = mid - 1;\n    } else if (res > 0) {\n      min = mid + 1;\n    } else {\n      return mid;\n    }\n  }\n  return -1;\n}\nfunction range(index, end) {\n  var range = [];\n  while (index < end) {\n    range.push(index++);\n  }\n  return range;\n}\nvar _class;\ntry {\n  var iconv = require('iconv-lite');\n} catch (err) {}\nvar CmapProcessor = (_class = /*#__PURE__*/function () {\n  function CmapProcessor(cmapTable) {\n    // Attempt to find a Unicode cmap first\n    this.encoding = null;\n    this.cmap = this.findSubtable(cmapTable, [\n    // 32-bit subtables\n    [3, 10], [0, 6], [0, 4],\n    // 16-bit subtables\n    [3, 1], [0, 3], [0, 2], [0, 1], [0, 0]]); // If not unicode cmap was found, and iconv-lite is installed,\n    // take the first table with a supported encoding.\n\n    if (!this.cmap && iconv) {\n      for (var _iterator10 = _createForOfIteratorHelperLoose(cmapTable.tables), _step10; !(_step10 = _iterator10()).done;) {\n        var cmap = _step10.value;\n        var encoding = getEncoding(cmap.platformID, cmap.encodingID, cmap.table.language - 1);\n        if (iconv.encodingExists(encoding)) {\n          this.cmap = cmap.table;\n          this.encoding = encoding;\n        }\n      }\n    }\n    if (!this.cmap) {\n      throw new Error(\"Could not find a supported cmap table\");\n    }\n    this.uvs = this.findSubtable(cmapTable, [[0, 5]]);\n    if (this.uvs && this.uvs.version !== 14) {\n      this.uvs = null;\n    }\n  }\n  var _proto15 = CmapProcessor.prototype;\n  _proto15.findSubtable = function findSubtable(cmapTable, pairs) {\n    for (var _iterator11 = _createForOfIteratorHelperLoose(pairs), _step11; !(_step11 = _iterator11()).done;) {\n      var _step11$value = _step11.value,\n        platformID = _step11$value[0],\n        encodingID = _step11$value[1];\n      for (var _iterator12 = _createForOfIteratorHelperLoose(cmapTable.tables), _step12; !(_step12 = _iterator12()).done;) {\n        var cmap = _step12.value;\n        if (cmap.platformID === platformID && cmap.encodingID === encodingID) {\n          return cmap.table;\n        }\n      }\n    }\n    return null;\n  };\n  _proto15.lookup = function lookup(codepoint, variationSelector) {\n    // If there is no Unicode cmap in this font, we need to re-encode\n    // the codepoint in the encoding that the cmap supports.\n    if (this.encoding) {\n      var buf = iconv.encode(String.fromCodePoint(codepoint), this.encoding);\n      codepoint = 0;\n      for (var i = 0; i < buf.length; i++) {\n        codepoint = codepoint << 8 | buf[i];\n      } // Otherwise, try to get a Unicode variation selector for this codepoint if one is provided.\n    } else if (variationSelector) {\n      var gid = this.getVariationSelector(codepoint, variationSelector);\n      if (gid) {\n        return gid;\n      }\n    }\n    var cmap = this.cmap;\n    switch (cmap.version) {\n      case 0:\n        return cmap.codeMap.get(codepoint) || 0;\n      case 4:\n        {\n          var min = 0;\n          var max = cmap.segCount - 1;\n          while (min <= max) {\n            var mid = min + max >> 1;\n            if (codepoint < cmap.startCode.get(mid)) {\n              max = mid - 1;\n            } else if (codepoint > cmap.endCode.get(mid)) {\n              min = mid + 1;\n            } else {\n              var rangeOffset = cmap.idRangeOffset.get(mid);\n              var _gid = void 0;\n              if (rangeOffset === 0) {\n                _gid = codepoint + cmap.idDelta.get(mid);\n              } else {\n                var index = rangeOffset / 2 + (codepoint - cmap.startCode.get(mid)) - (cmap.segCount - mid);\n                _gid = cmap.glyphIndexArray.get(index) || 0;\n                if (_gid !== 0) {\n                  _gid += cmap.idDelta.get(mid);\n                }\n              }\n              return _gid & 0xffff;\n            }\n          }\n          return 0;\n        }\n      case 8:\n        throw new Error('TODO: cmap format 8');\n      case 6:\n      case 10:\n        return cmap.glyphIndices.get(codepoint - cmap.firstCode) || 0;\n      case 12:\n      case 13:\n        {\n          var _min = 0;\n          var _max = cmap.nGroups - 1;\n          while (_min <= _max) {\n            var _mid = _min + _max >> 1;\n            var group = cmap.groups.get(_mid);\n            if (codepoint < group.startCharCode) {\n              _max = _mid - 1;\n            } else if (codepoint > group.endCharCode) {\n              _min = _mid + 1;\n            } else {\n              if (cmap.version === 12) {\n                return group.glyphID + (codepoint - group.startCharCode);\n              } else {\n                return group.glyphID;\n              }\n            }\n          }\n          return 0;\n        }\n      case 14:\n        throw new Error('TODO: cmap format 14');\n      default:\n        throw new Error(\"Unknown cmap format \".concat(cmap.version));\n    }\n  };\n  _proto15.getVariationSelector = function getVariationSelector(codepoint, variationSelector) {\n    if (!this.uvs) {\n      return 0;\n    }\n    var selectors = this.uvs.varSelectors.toArray();\n    var i = binarySearch(selectors, function (x) {\n      return variationSelector - x.varSelector;\n    });\n    var sel = selectors[i];\n    if (i !== -1 && sel.defaultUVS) {\n      i = binarySearch(sel.defaultUVS, function (x) {\n        return codepoint < x.startUnicodeValue ? -1 : codepoint > x.startUnicodeValue + x.additionalCount ? +1 : 0;\n      });\n    }\n    if (i !== -1 && sel.nonDefaultUVS) {\n      i = binarySearch(sel.nonDefaultUVS, function (x) {\n        return codepoint - x.unicodeValue;\n      });\n      if (i !== -1) {\n        return sel.nonDefaultUVS[i].glyphID;\n      }\n    }\n    return 0;\n  };\n  _proto15.getCharacterSet = function getCharacterSet() {\n    var cmap = this.cmap;\n    switch (cmap.version) {\n      case 0:\n        return range(0, cmap.codeMap.length);\n      case 4:\n        {\n          var res = [];\n          var endCodes = cmap.endCode.toArray();\n          for (var i = 0; i < endCodes.length; i++) {\n            var tail = endCodes[i] + 1;\n            var start = cmap.startCode.get(i);\n            res.push.apply(res, range(start, tail));\n          }\n          return res;\n        }\n      case 8:\n        throw new Error('TODO: cmap format 8');\n      case 6:\n      case 10:\n        return range(cmap.firstCode, cmap.firstCode + cmap.glyphIndices.length);\n      case 12:\n      case 13:\n        {\n          var _res = [];\n          for (var _iterator13 = _createForOfIteratorHelperLoose(cmap.groups.toArray()), _step13; !(_step13 = _iterator13()).done;) {\n            var group = _step13.value;\n            _res.push.apply(_res, range(group.startCharCode, group.endCharCode + 1));\n          }\n          return _res;\n        }\n      case 14:\n        throw new Error('TODO: cmap format 14');\n      default:\n        throw new Error(\"Unknown cmap format \".concat(cmap.version));\n    }\n  };\n  _proto15.codePointsForGlyph = function codePointsForGlyph(gid) {\n    var cmap = this.cmap;\n    switch (cmap.version) {\n      case 0:\n        {\n          var res = [];\n          for (var i = 0; i < 256; i++) {\n            if (cmap.codeMap.get(i) === gid) {\n              res.push(i);\n            }\n          }\n          return res;\n        }\n      case 4:\n        {\n          var _res2 = [];\n          for (var _i = 0; _i < cmap.segCount; _i++) {\n            var end = cmap.endCode.get(_i);\n            var start = cmap.startCode.get(_i);\n            var rangeOffset = cmap.idRangeOffset.get(_i);\n            var delta = cmap.idDelta.get(_i);\n            for (var c = start; c <= end; c++) {\n              var g = 0;\n              if (rangeOffset === 0) {\n                g = c + delta;\n              } else {\n                var index = rangeOffset / 2 + (c - start) - (cmap.segCount - _i);\n                g = cmap.glyphIndexArray.get(index) || 0;\n                if (g !== 0) {\n                  g += delta;\n                }\n              }\n              if (g === gid) {\n                _res2.push(c);\n              }\n            }\n          }\n          return _res2;\n        }\n      case 12:\n        {\n          var _res3 = [];\n          for (var _iterator14 = _createForOfIteratorHelperLoose(cmap.groups.toArray()), _step14; !(_step14 = _iterator14()).done;) {\n            var group = _step14.value;\n            if (gid >= group.glyphID && gid <= group.glyphID + (group.endCharCode - group.startCharCode)) {\n              _res3.push(group.startCharCode + (gid - group.glyphID));\n            }\n          }\n          return _res3;\n        }\n      case 13:\n        {\n          var _res4 = [];\n          for (var _iterator15 = _createForOfIteratorHelperLoose(cmap.groups.toArray()), _step15; !(_step15 = _iterator15()).done;) {\n            var _group = _step15.value;\n            if (gid === _group.glyphID) {\n              _res4.push.apply(_res4, range(_group.startCharCode, _group.endCharCode + 1));\n            }\n          }\n          return _res4;\n        }\n      default:\n        throw new Error(\"Unknown cmap format \".concat(cmap.version));\n    }\n  };\n  return CmapProcessor;\n}(), (_applyDecoratedDescriptor(_class.prototype, \"getCharacterSet\", [cache], Object.getOwnPropertyDescriptor(_class.prototype, \"getCharacterSet\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"codePointsForGlyph\", [cache], Object.getOwnPropertyDescriptor(_class.prototype, \"codePointsForGlyph\"), _class.prototype)), _class);\nvar KernProcessor = /*#__PURE__*/function () {\n  function KernProcessor(font) {\n    this.kern = font.kern;\n  }\n  var _proto16 = KernProcessor.prototype;\n  _proto16.process = function process(glyphs, positions) {\n    for (var glyphIndex = 0; glyphIndex < glyphs.length - 1; glyphIndex++) {\n      var left = glyphs[glyphIndex].id;\n      var right = glyphs[glyphIndex + 1].id;\n      positions[glyphIndex].xAdvance += this.getKerning(left, right);\n    }\n  };\n  _proto16.getKerning = function getKerning(left, right) {\n    var res = 0;\n    for (var _iterator16 = _createForOfIteratorHelperLoose(this.kern.tables), _step16; !(_step16 = _iterator16()).done;) {\n      var table = _step16.value;\n      if (table.coverage.crossStream) {\n        continue;\n      }\n      switch (table.version) {\n        case 0:\n          if (!table.coverage.horizontal) {\n            continue;\n          }\n          break;\n        case 1:\n          if (table.coverage.vertical || table.coverage.variation) {\n            continue;\n          }\n          break;\n        default:\n          throw new Error(\"Unsupported kerning table version \".concat(table.version));\n      }\n      var val = 0;\n      var s = table.subtable;\n      switch (table.format) {\n        case 0:\n          var pairIdx = binarySearch(s.pairs, function (pair) {\n            return left - pair.left || right - pair.right;\n          });\n          if (pairIdx >= 0) {\n            val = s.pairs[pairIdx].value;\n          }\n          break;\n        case 2:\n          var leftOffset = 0,\n            rightOffset = 0;\n          if (left >= s.leftTable.firstGlyph && left < s.leftTable.firstGlyph + s.leftTable.nGlyphs) {\n            leftOffset = s.leftTable.offsets[left - s.leftTable.firstGlyph];\n          } else {\n            leftOffset = s.array.off;\n          }\n          if (right >= s.rightTable.firstGlyph && right < s.rightTable.firstGlyph + s.rightTable.nGlyphs) {\n            rightOffset = s.rightTable.offsets[right - s.rightTable.firstGlyph];\n          }\n          var index = (leftOffset + rightOffset - s.array.off) / 2;\n          val = s.array.values.get(index);\n          break;\n        case 3:\n          if (left >= s.glyphCount || right >= s.glyphCount) {\n            return 0;\n          }\n          val = s.kernValue[s.kernIndex[s.leftClass[left] * s.rightClassCount + s.rightClass[right]]];\n          break;\n        default:\n          throw new Error(\"Unsupported kerning sub-table format \".concat(table.format));\n      } // Microsoft supports the override flag, which resets the result\n      // Otherwise, the sum of the results from all subtables is returned\n\n      if (table.coverage.override) {\n        res = val;\n      } else {\n        res += val;\n      }\n    }\n    return res;\n  };\n  return KernProcessor;\n}();\n/**\r\n * This class is used when GPOS does not define 'mark' or 'mkmk' features\r\n * for positioning marks relative to base glyphs. It uses the unicode\r\n * combining class property to position marks.\r\n *\r\n * Based on code from Harfbuzz, thanks!\r\n * https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-fallback.cc\r\n */\nvar UnicodeLayoutEngine = /*#__PURE__*/function () {\n  function UnicodeLayoutEngine(font) {\n    this.font = font;\n  }\n  var _proto17 = UnicodeLayoutEngine.prototype;\n  _proto17.positionGlyphs = function positionGlyphs(glyphs, positions) {\n    // find each base + mark cluster, and position the marks relative to the base\n    var clusterStart = 0;\n    var clusterEnd = 0;\n    for (var index = 0; index < glyphs.length; index++) {\n      var glyph = glyphs[index];\n      if (glyph.isMark) {\n        // TODO: handle ligatures\n        clusterEnd = index;\n      } else {\n        if (clusterStart !== clusterEnd) {\n          this.positionCluster(glyphs, positions, clusterStart, clusterEnd);\n        }\n        clusterStart = clusterEnd = index;\n      }\n    }\n    if (clusterStart !== clusterEnd) {\n      this.positionCluster(glyphs, positions, clusterStart, clusterEnd);\n    }\n    return positions;\n  };\n  _proto17.positionCluster = function positionCluster(glyphs, positions, clusterStart, clusterEnd) {\n    var base = glyphs[clusterStart];\n    var baseBox = base.cbox.copy(); // adjust bounding box for ligature glyphs\n\n    if (base.codePoints.length > 1) {\n      // LTR. TODO: RTL support.\n      baseBox.minX += (base.codePoints.length - 1) * baseBox.width / base.codePoints.length;\n    }\n    var xOffset = -positions[clusterStart].xAdvance;\n    var yOffset = 0;\n    var yGap = this.font.unitsPerEm / 16; // position each of the mark glyphs relative to the base glyph\n\n    for (var index = clusterStart + 1; index <= clusterEnd; index++) {\n      var mark = glyphs[index];\n      var markBox = mark.cbox;\n      var position = positions[index];\n      var combiningClass = this.getCombiningClass(mark.codePoints[0]);\n      if (combiningClass !== 'Not_Reordered') {\n        position.xOffset = position.yOffset = 0; // x positioning\n\n        switch (combiningClass) {\n          case 'Double_Above':\n          case 'Double_Below':\n            // LTR. TODO: RTL support.\n            position.xOffset += baseBox.minX - markBox.width / 2 - markBox.minX;\n            break;\n          case 'Attached_Below_Left':\n          case 'Below_Left':\n          case 'Above_Left':\n            // left align\n            position.xOffset += baseBox.minX - markBox.minX;\n            break;\n          case 'Attached_Above_Right':\n          case 'Below_Right':\n          case 'Above_Right':\n            // right align\n            position.xOffset += baseBox.maxX - markBox.width - markBox.minX;\n            break;\n          default:\n            // Attached_Below, Attached_Above, Below, Above, other\n            // center align\n            position.xOffset += baseBox.minX + (baseBox.width - markBox.width) / 2 - markBox.minX;\n        } // y positioning\n\n        switch (combiningClass) {\n          case 'Double_Below':\n          case 'Below_Left':\n          case 'Below':\n          case 'Below_Right':\n          case 'Attached_Below_Left':\n          case 'Attached_Below':\n            // add a small gap between the glyphs if they are not attached\n            if (combiningClass === 'Attached_Below_Left' || combiningClass === 'Attached_Below') {\n              baseBox.minY += yGap;\n            }\n            position.yOffset = -baseBox.minY - markBox.maxY;\n            baseBox.minY += markBox.height;\n            break;\n          case 'Double_Above':\n          case 'Above_Left':\n          case 'Above':\n          case 'Above_Right':\n          case 'Attached_Above':\n          case 'Attached_Above_Right':\n            // add a small gap between the glyphs if they are not attached\n            if (combiningClass === 'Attached_Above' || combiningClass === 'Attached_Above_Right') {\n              baseBox.maxY += yGap;\n            }\n            position.yOffset = baseBox.maxY - markBox.minY;\n            baseBox.maxY += markBox.height;\n            break;\n        }\n        position.xAdvance = position.yAdvance = 0;\n        position.xOffset += xOffset;\n        position.yOffset += yOffset;\n      } else {\n        xOffset -= position.xAdvance;\n        yOffset -= position.yAdvance;\n      }\n    }\n    return;\n  };\n  _proto17.getCombiningClass = function getCombiningClass(codePoint) {\n    var combiningClass = unicode.getCombiningClass(codePoint); // Thai / Lao need some per-character work\n\n    if ((codePoint & ~0xff) === 0x0e00) {\n      if (combiningClass === 'Not_Reordered') {\n        switch (codePoint) {\n          case 0x0e31:\n          case 0x0e34:\n          case 0x0e35:\n          case 0x0e36:\n          case 0x0e37:\n          case 0x0e47:\n          case 0x0e4c:\n          case 0x0e3d:\n          case 0x0e4e:\n            return 'Above_Right';\n          case 0x0eb1:\n          case 0x0eb4:\n          case 0x0eb5:\n          case 0x0eb6:\n          case 0x0eb7:\n          case 0x0ebb:\n          case 0x0ecc:\n          case 0x0ecd:\n            return 'Above';\n          case 0x0ebc:\n            return 'Below';\n        }\n      } else if (codePoint === 0x0e3a) {\n        // virama\n        return 'Below_Right';\n      }\n    }\n    switch (combiningClass) {\n      // Hebrew\n      case 'CCC10': // sheva\n\n      case 'CCC11': // hataf segol\n\n      case 'CCC12': // hataf patah\n\n      case 'CCC13': // hataf qamats\n\n      case 'CCC14': // hiriq\n\n      case 'CCC15': // tsere\n\n      case 'CCC16': // segol\n\n      case 'CCC17': // patah\n\n      case 'CCC18': // qamats\n\n      case 'CCC20': // qubuts\n\n      case 'CCC22':\n        // meteg\n        return 'Below';\n      case 'CCC23':\n        // rafe\n        return 'Attached_Above';\n      case 'CCC24':\n        // shin dot\n        return 'Above_Right';\n      case 'CCC25': // sin dot\n\n      case 'CCC19':\n        // holam\n        return 'Above_Left';\n      case 'CCC26':\n        // point varika\n        return 'Above';\n      case 'CCC21':\n        // dagesh\n        break;\n      // Arabic and Syriac\n\n      case 'CCC27': // fathatan\n\n      case 'CCC28': // dammatan\n\n      case 'CCC30': // fatha\n\n      case 'CCC31': // damma\n\n      case 'CCC33': // shadda\n\n      case 'CCC34': // sukun\n\n      case 'CCC35': // superscript alef\n\n      case 'CCC36':\n        // superscript alaph\n        return 'Above';\n      case 'CCC29': // kasratan\n\n      case 'CCC32':\n        // kasra\n        return 'Below';\n      // Thai\n\n      case 'CCC103':\n        // sara u / sara uu\n        return 'Below_Right';\n      case 'CCC107':\n        // mai\n        return 'Above_Right';\n      // Lao\n\n      case 'CCC118':\n        // sign u / sign uu\n        return 'Below';\n      case 'CCC122':\n        // mai\n        return 'Above';\n      // Tibetan\n\n      case 'CCC129': // sign aa\n\n      case 'CCC132':\n        // sign u\n        return 'Below';\n      case 'CCC130':\n        // sign i\n        return 'Above';\n    }\n    return combiningClass;\n  };\n  return UnicodeLayoutEngine;\n}();\n/**\r\n * Represents a glyph bounding box\r\n */\nvar BBox = /*#__PURE__*/function () {\n  function BBox(minX, minY, maxX, maxY) {\n    if (minX === void 0) {\n      minX = Infinity;\n    }\n    if (minY === void 0) {\n      minY = Infinity;\n    }\n    if (maxX === void 0) {\n      maxX = -Infinity;\n    }\n    if (maxY === void 0) {\n      maxY = -Infinity;\n    }\n    /**\r\n     * The minimum X position in the bounding box\r\n     * @type {number}\r\n     */\n    this.minX = minX;\n    /**\r\n     * The minimum Y position in the bounding box\r\n     * @type {number}\r\n     */\n\n    this.minY = minY;\n    /**\r\n     * The maxmimum X position in the bounding box\r\n     * @type {number}\r\n     */\n\n    this.maxX = maxX;\n    /**\r\n     * The maxmimum Y position in the bounding box\r\n     * @type {number}\r\n     */\n\n    this.maxY = maxY;\n  }\n  /**\r\n   * The width of the bounding box\r\n   * @type {number}\r\n   */\n  var _proto18 = BBox.prototype;\n  _proto18.addPoint = function addPoint(x, y) {\n    if (Math.abs(x) !== Infinity) {\n      if (x < this.minX) {\n        this.minX = x;\n      }\n      if (x > this.maxX) {\n        this.maxX = x;\n      }\n    }\n    if (Math.abs(y) !== Infinity) {\n      if (y < this.minY) {\n        this.minY = y;\n      }\n      if (y > this.maxY) {\n        this.maxY = y;\n      }\n    }\n  };\n  _proto18.copy = function copy() {\n    return new BBox(this.minX, this.minY, this.maxX, this.maxY);\n  };\n  _createClass(BBox, [{\n    key: \"width\",\n    get: function get() {\n      return this.maxX - this.minX;\n    }\n    /**\r\n     * The height of the bounding box\r\n     * @type {number}\r\n     */\n  }, {\n    key: \"height\",\n    get: function get() {\n      return this.maxY - this.minY;\n    }\n  }]);\n  return BBox;\n}(); // Data from http://www.microsoft.com/typography/otspec/scripttags.htm\n// and http://www.unicode.org/Public/UNIDATA/PropertyValueAliases.txt.\nvar UNICODE_SCRIPTS = {\n  Caucasian_Albanian: 'aghb',\n  Arabic: 'arab',\n  Imperial_Aramaic: 'armi',\n  Armenian: 'armn',\n  Avestan: 'avst',\n  Balinese: 'bali',\n  Bamum: 'bamu',\n  Bassa_Vah: 'bass',\n  Batak: 'batk',\n  Bengali: ['bng2', 'beng'],\n  Bopomofo: 'bopo',\n  Brahmi: 'brah',\n  Braille: 'brai',\n  Buginese: 'bugi',\n  Buhid: 'buhd',\n  Chakma: 'cakm',\n  Canadian_Aboriginal: 'cans',\n  Carian: 'cari',\n  Cham: 'cham',\n  Cherokee: 'cher',\n  Coptic: 'copt',\n  Cypriot: 'cprt',\n  Cyrillic: 'cyrl',\n  Devanagari: ['dev2', 'deva'],\n  Deseret: 'dsrt',\n  Duployan: 'dupl',\n  Egyptian_Hieroglyphs: 'egyp',\n  Elbasan: 'elba',\n  Ethiopic: 'ethi',\n  Georgian: 'geor',\n  Glagolitic: 'glag',\n  Gothic: 'goth',\n  Grantha: 'gran',\n  Greek: 'grek',\n  Gujarati: ['gjr2', 'gujr'],\n  Gurmukhi: ['gur2', 'guru'],\n  Hangul: 'hang',\n  Han: 'hani',\n  Hanunoo: 'hano',\n  Hebrew: 'hebr',\n  Hiragana: 'hira',\n  Pahawh_Hmong: 'hmng',\n  Katakana_Or_Hiragana: 'hrkt',\n  Old_Italic: 'ital',\n  Javanese: 'java',\n  Kayah_Li: 'kali',\n  Katakana: 'kana',\n  Kharoshthi: 'khar',\n  Khmer: 'khmr',\n  Khojki: 'khoj',\n  Kannada: ['knd2', 'knda'],\n  Kaithi: 'kthi',\n  Tai_Tham: 'lana',\n  Lao: 'lao ',\n  Latin: 'latn',\n  Lepcha: 'lepc',\n  Limbu: 'limb',\n  Linear_A: 'lina',\n  Linear_B: 'linb',\n  Lisu: 'lisu',\n  Lycian: 'lyci',\n  Lydian: 'lydi',\n  Mahajani: 'mahj',\n  Mandaic: 'mand',\n  Manichaean: 'mani',\n  Mende_Kikakui: 'mend',\n  Meroitic_Cursive: 'merc',\n  Meroitic_Hieroglyphs: 'mero',\n  Malayalam: ['mlm2', 'mlym'],\n  Modi: 'modi',\n  Mongolian: 'mong',\n  Mro: 'mroo',\n  Meetei_Mayek: 'mtei',\n  Myanmar: ['mym2', 'mymr'],\n  Old_North_Arabian: 'narb',\n  Nabataean: 'nbat',\n  Nko: 'nko ',\n  Ogham: 'ogam',\n  Ol_Chiki: 'olck',\n  Old_Turkic: 'orkh',\n  Oriya: ['ory2', 'orya'],\n  Osmanya: 'osma',\n  Palmyrene: 'palm',\n  Pau_Cin_Hau: 'pauc',\n  Old_Permic: 'perm',\n  Phags_Pa: 'phag',\n  Inscriptional_Pahlavi: 'phli',\n  Psalter_Pahlavi: 'phlp',\n  Phoenician: 'phnx',\n  Miao: 'plrd',\n  Inscriptional_Parthian: 'prti',\n  Rejang: 'rjng',\n  Runic: 'runr',\n  Samaritan: 'samr',\n  Old_South_Arabian: 'sarb',\n  Saurashtra: 'saur',\n  Shavian: 'shaw',\n  Sharada: 'shrd',\n  Siddham: 'sidd',\n  Khudawadi: 'sind',\n  Sinhala: 'sinh',\n  Sora_Sompeng: 'sora',\n  Sundanese: 'sund',\n  Syloti_Nagri: 'sylo',\n  Syriac: 'syrc',\n  Tagbanwa: 'tagb',\n  Takri: 'takr',\n  Tai_Le: 'tale',\n  New_Tai_Lue: 'talu',\n  Tamil: ['tml2', 'taml'],\n  Tai_Viet: 'tavt',\n  Telugu: ['tel2', 'telu'],\n  Tifinagh: 'tfng',\n  Tagalog: 'tglg',\n  Thaana: 'thaa',\n  Thai: 'thai',\n  Tibetan: 'tibt',\n  Tirhuta: 'tirh',\n  Ugaritic: 'ugar',\n  Vai: 'vai ',\n  Warang_Citi: 'wara',\n  Old_Persian: 'xpeo',\n  Cuneiform: 'xsux',\n  Yi: 'yi  ',\n  Inherited: 'zinh',\n  Common: 'zyyy',\n  Unknown: 'zzzz'\n};\nvar OPENTYPE_SCRIPTS = {};\nfor (var script in UNICODE_SCRIPTS) {\n  var tag = UNICODE_SCRIPTS[script];\n  if (Array.isArray(tag)) {\n    for (var _iterator17 = _createForOfIteratorHelperLoose(tag), _step17; !(_step17 = _iterator17()).done;) {\n      var t = _step17.value;\n      OPENTYPE_SCRIPTS[t] = script;\n    }\n  } else {\n    OPENTYPE_SCRIPTS[tag] = script;\n  }\n}\nfunction fromOpenType(tag) {\n  return OPENTYPE_SCRIPTS[tag];\n}\nfunction forString(string) {\n  var len = string.length;\n  var idx = 0;\n  while (idx < len) {\n    var code = string.charCodeAt(idx++); // Check if this is a high surrogate\n\n    if (0xd800 <= code && code <= 0xdbff && idx < len) {\n      var next = string.charCodeAt(idx); // Check if this is a low surrogate\n\n      if (0xdc00 <= next && next <= 0xdfff) {\n        idx++;\n        code = ((code & 0x3FF) << 10) + (next & 0x3FF) + 0x10000;\n      }\n    }\n    var _script = unicode.getScript(code);\n    if (_script !== 'Common' && _script !== 'Inherited' && _script !== 'Unknown') {\n      return UNICODE_SCRIPTS[_script];\n    }\n  }\n  return UNICODE_SCRIPTS.Unknown;\n}\nfunction forCodePoints(codePoints) {\n  for (var i = 0; i < codePoints.length; i++) {\n    var codePoint = codePoints[i];\n    var _script2 = unicode.getScript(codePoint);\n    if (_script2 !== 'Common' && _script2 !== 'Inherited' && _script2 !== 'Unknown') {\n      return UNICODE_SCRIPTS[_script2];\n    }\n  }\n  return UNICODE_SCRIPTS.Unknown;\n} // The scripts in this map are written from right to left\n\nvar RTL = {\n  arab: true,\n  // Arabic\n  hebr: true,\n  // Hebrew\n  syrc: true,\n  // Syriac\n  thaa: true,\n  // Thaana\n  cprt: true,\n  // Cypriot Syllabary\n  khar: true,\n  // Kharosthi\n  phnx: true,\n  // Phoenician\n  'nko ': true,\n  // N'Ko\n  lydi: true,\n  // Lydian\n  avst: true,\n  // Avestan\n  armi: true,\n  // Imperial Aramaic\n  phli: true,\n  // Inscriptional Pahlavi\n  prti: true,\n  // Inscriptional Parthian\n  sarb: true,\n  // Old South Arabian\n  orkh: true,\n  // Old Turkic, Orkhon Runic\n  samr: true,\n  // Samaritan\n  mand: true,\n  // Mandaic, Mandaean\n  merc: true,\n  // Meroitic Cursive\n  mero: true,\n  // Meroitic Hieroglyphs\n  // Unicode 7.0 (not listed on http://www.microsoft.com/typography/otspec/scripttags.htm)\n  mani: true,\n  // Manichaean\n  mend: true,\n  // Mende Kikakui\n  nbat: true,\n  // Nabataean\n  narb: true,\n  // Old North Arabian\n  palm: true,\n  // Palmyrene\n  phlp: true // Psalter Pahlavi\n};\nfunction direction(script) {\n  if (RTL[script]) {\n    return 'rtl';\n  }\n  return 'ltr';\n}\n\n/**\r\n * Represents a run of Glyph and GlyphPosition objects.\r\n * Returned by the font layout method.\r\n */\nvar GlyphRun = /*#__PURE__*/function () {\n  function GlyphRun(glyphs, features, script, language, direction$1) {\n    /**\r\n     * An array of Glyph objects in the run\r\n     * @type {Glyph[]}\r\n     */\n    this.glyphs = glyphs;\n    /**\r\n     * An array of GlyphPosition objects for each glyph in the run\r\n     * @type {GlyphPosition[]}\r\n     */\n\n    this.positions = null;\n    /**\r\n     * The script that was requested for shaping. This was either passed in or detected automatically.\r\n     * @type {string}\r\n     */\n\n    this.script = script;\n    /**\r\n     * The language requested for shaping, as passed in. If `null`, the default language for the\r\n     * script was used.\r\n     * @type {string}\r\n     */\n\n    this.language = language || null;\n    /**\r\n     * The direction requested for shaping, as passed in (either ltr or rtl).\r\n     * If `null`, the default direction of the script is used.\r\n     * @type {string}\r\n     */\n\n    this.direction = direction$1 || direction(script);\n    /**\r\n     * The features requested during shaping. This is a combination of user\r\n     * specified features and features chosen by the shaper.\r\n     * @type {object}\r\n     */\n\n    this.features = {}; // Convert features to an object\n\n    if (Array.isArray(features)) {\n      for (var _iterator18 = _createForOfIteratorHelperLoose(features), _step18; !(_step18 = _iterator18()).done;) {\n        var tag = _step18.value;\n        this.features[tag] = true;\n      }\n    } else if (typeof features === 'object') {\n      this.features = features;\n    }\n  }\n  /**\r\n   * The total advance width of the run.\r\n   * @type {number}\r\n   */\n  _createClass(GlyphRun, [{\n    key: \"advanceWidth\",\n    get: function get() {\n      var width = 0;\n      for (var _iterator19 = _createForOfIteratorHelperLoose(this.positions), _step19; !(_step19 = _iterator19()).done;) {\n        var position = _step19.value;\n        width += position.xAdvance;\n      }\n      return width;\n    }\n    /**\r\n     * The total advance height of the run.\r\n     * @type {number}\r\n     */\n  }, {\n    key: \"advanceHeight\",\n    get: function get() {\n      var height = 0;\n      for (var _iterator20 = _createForOfIteratorHelperLoose(this.positions), _step20; !(_step20 = _iterator20()).done;) {\n        var position = _step20.value;\n        height += position.yAdvance;\n      }\n      return height;\n    }\n    /**\r\n     * The bounding box containing all glyphs in the run.\r\n     * @type {BBox}\r\n     */\n  }, {\n    key: \"bbox\",\n    get: function get() {\n      var bbox = new BBox();\n      var x = 0;\n      var y = 0;\n      for (var index = 0; index < this.glyphs.length; index++) {\n        var glyph = this.glyphs[index];\n        var p = this.positions[index];\n        var b = glyph.bbox;\n        bbox.addPoint(b.minX + x + p.xOffset, b.minY + y + p.yOffset);\n        bbox.addPoint(b.maxX + x + p.xOffset, b.maxY + y + p.yOffset);\n        x += p.xAdvance;\n        y += p.yAdvance;\n      }\n      return bbox;\n    }\n  }]);\n  return GlyphRun;\n}();\n/**\r\n * Represents positioning information for a glyph in a GlyphRun.\r\n */\nvar GlyphPosition = function GlyphPosition(xAdvance, yAdvance, xOffset, yOffset) {\n  if (xAdvance === void 0) {\n    xAdvance = 0;\n  }\n  if (yAdvance === void 0) {\n    yAdvance = 0;\n  }\n  if (xOffset === void 0) {\n    xOffset = 0;\n  }\n  if (yOffset === void 0) {\n    yOffset = 0;\n  }\n  /**\r\n   * The amount to move the virtual pen in the X direction after rendering this glyph.\r\n   * @type {number}\r\n   */\n  this.xAdvance = xAdvance;\n  /**\r\n   * The amount to move the virtual pen in the Y direction after rendering this glyph.\r\n   * @type {number}\r\n   */\n\n  this.yAdvance = yAdvance;\n  /**\r\n   * The offset from the pen position in the X direction at which to render this glyph.\r\n   * @type {number}\r\n   */\n\n  this.xOffset = xOffset;\n  /**\r\n   * The offset from the pen position in the Y direction at which to render this glyph.\r\n   * @type {number}\r\n   */\n\n  this.yOffset = yOffset;\n}; // see https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html\n// and /System/Library/Frameworks/CoreText.framework/Versions/A/Headers/SFNTLayoutTypes.h on a Mac\nvar features = {\n  allTypographicFeatures: {\n    code: 0,\n    exclusive: false,\n    allTypeFeatures: 0\n  },\n  ligatures: {\n    code: 1,\n    exclusive: false,\n    requiredLigatures: 0,\n    commonLigatures: 2,\n    rareLigatures: 4,\n    // logos: 6\n    rebusPictures: 8,\n    diphthongLigatures: 10,\n    squaredLigatures: 12,\n    abbrevSquaredLigatures: 14,\n    symbolLigatures: 16,\n    contextualLigatures: 18,\n    historicalLigatures: 20\n  },\n  cursiveConnection: {\n    code: 2,\n    exclusive: true,\n    unconnected: 0,\n    partiallyConnected: 1,\n    cursive: 2\n  },\n  letterCase: {\n    code: 3,\n    exclusive: true\n  },\n  // upperAndLowerCase: 0          # deprecated\n  // allCaps: 1                    # deprecated\n  // allLowerCase: 2               # deprecated\n  // smallCaps: 3                  # deprecated\n  // initialCaps: 4                # deprecated\n  // initialCapsAndSmallCaps: 5    # deprecated\n  verticalSubstitution: {\n    code: 4,\n    exclusive: false,\n    substituteVerticalForms: 0\n  },\n  linguisticRearrangement: {\n    code: 5,\n    exclusive: false,\n    linguisticRearrangement: 0\n  },\n  numberSpacing: {\n    code: 6,\n    exclusive: true,\n    monospacedNumbers: 0,\n    proportionalNumbers: 1,\n    thirdWidthNumbers: 2,\n    quarterWidthNumbers: 3\n  },\n  smartSwash: {\n    code: 8,\n    exclusive: false,\n    wordInitialSwashes: 0,\n    wordFinalSwashes: 2,\n    // lineInitialSwashes: 4\n    // lineFinalSwashes: 6\n    nonFinalSwashes: 8\n  },\n  diacritics: {\n    code: 9,\n    exclusive: true,\n    showDiacritics: 0,\n    hideDiacritics: 1,\n    decomposeDiacritics: 2\n  },\n  verticalPosition: {\n    code: 10,\n    exclusive: true,\n    normalPosition: 0,\n    superiors: 1,\n    inferiors: 2,\n    ordinals: 3,\n    scientificInferiors: 4\n  },\n  fractions: {\n    code: 11,\n    exclusive: true,\n    noFractions: 0,\n    verticalFractions: 1,\n    diagonalFractions: 2\n  },\n  overlappingCharacters: {\n    code: 13,\n    exclusive: false,\n    preventOverlap: 0\n  },\n  typographicExtras: {\n    code: 14,\n    exclusive: false,\n    // hyphensToEmDash: 0\n    // hyphenToEnDash: 2\n    slashedZero: 4\n  },\n  // formInterrobang: 6\n  // smartQuotes: 8\n  // periodsToEllipsis: 10\n  mathematicalExtras: {\n    code: 15,\n    exclusive: false,\n    // hyphenToMinus: 0\n    // asteristoMultiply: 2\n    // slashToDivide: 4\n    // inequalityLigatures: 6\n    // exponents: 8\n    mathematicalGreek: 10\n  },\n  ornamentSets: {\n    code: 16,\n    exclusive: true,\n    noOrnaments: 0,\n    dingbats: 1,\n    piCharacters: 2,\n    fleurons: 3,\n    decorativeBorders: 4,\n    internationalSymbols: 5,\n    mathSymbols: 6\n  },\n  characterAlternatives: {\n    code: 17,\n    exclusive: true,\n    noAlternates: 0\n  },\n  // user defined options\n  designComplexity: {\n    code: 18,\n    exclusive: true,\n    designLevel1: 0,\n    designLevel2: 1,\n    designLevel3: 2,\n    designLevel4: 3,\n    designLevel5: 4\n  },\n  styleOptions: {\n    code: 19,\n    exclusive: true,\n    noStyleOptions: 0,\n    displayText: 1,\n    engravedText: 2,\n    illuminatedCaps: 3,\n    titlingCaps: 4,\n    tallCaps: 5\n  },\n  characterShape: {\n    code: 20,\n    exclusive: true,\n    traditionalCharacters: 0,\n    simplifiedCharacters: 1,\n    JIS1978Characters: 2,\n    JIS1983Characters: 3,\n    JIS1990Characters: 4,\n    traditionalAltOne: 5,\n    traditionalAltTwo: 6,\n    traditionalAltThree: 7,\n    traditionalAltFour: 8,\n    traditionalAltFive: 9,\n    expertCharacters: 10,\n    JIS2004Characters: 11,\n    hojoCharacters: 12,\n    NLCCharacters: 13,\n    traditionalNamesCharacters: 14\n  },\n  numberCase: {\n    code: 21,\n    exclusive: true,\n    lowerCaseNumbers: 0,\n    upperCaseNumbers: 1\n  },\n  textSpacing: {\n    code: 22,\n    exclusive: true,\n    proportionalText: 0,\n    monospacedText: 1,\n    halfWidthText: 2,\n    thirdWidthText: 3,\n    quarterWidthText: 4,\n    altProportionalText: 5,\n    altHalfWidthText: 6\n  },\n  transliteration: {\n    code: 23,\n    exclusive: true,\n    noTransliteration: 0\n  },\n  // hanjaToHangul: 1\n  // hiraganaToKatakana: 2\n  // katakanaToHiragana: 3\n  // kanaToRomanization: 4\n  // romanizationToHiragana: 5\n  // romanizationToKatakana: 6\n  // hanjaToHangulAltOne: 7\n  // hanjaToHangulAltTwo: 8\n  // hanjaToHangulAltThree: 9\n  annotation: {\n    code: 24,\n    exclusive: true,\n    noAnnotation: 0,\n    boxAnnotation: 1,\n    roundedBoxAnnotation: 2,\n    circleAnnotation: 3,\n    invertedCircleAnnotation: 4,\n    parenthesisAnnotation: 5,\n    periodAnnotation: 6,\n    romanNumeralAnnotation: 7,\n    diamondAnnotation: 8,\n    invertedBoxAnnotation: 9,\n    invertedRoundedBoxAnnotation: 10\n  },\n  kanaSpacing: {\n    code: 25,\n    exclusive: true,\n    fullWidthKana: 0,\n    proportionalKana: 1\n  },\n  ideographicSpacing: {\n    code: 26,\n    exclusive: true,\n    fullWidthIdeographs: 0,\n    proportionalIdeographs: 1,\n    halfWidthIdeographs: 2\n  },\n  unicodeDecomposition: {\n    code: 27,\n    exclusive: false,\n    canonicalComposition: 0,\n    compatibilityComposition: 2,\n    transcodingComposition: 4\n  },\n  rubyKana: {\n    code: 28,\n    exclusive: false,\n    // noRubyKana: 0     # deprecated - use rubyKanaOff instead\n    // rubyKana: 1     # deprecated - use rubyKanaOn instead\n    rubyKana: 2\n  },\n  CJKSymbolAlternatives: {\n    code: 29,\n    exclusive: true,\n    noCJKSymbolAlternatives: 0,\n    CJKSymbolAltOne: 1,\n    CJKSymbolAltTwo: 2,\n    CJKSymbolAltThree: 3,\n    CJKSymbolAltFour: 4,\n    CJKSymbolAltFive: 5\n  },\n  ideographicAlternatives: {\n    code: 30,\n    exclusive: true,\n    noIdeographicAlternatives: 0,\n    ideographicAltOne: 1,\n    ideographicAltTwo: 2,\n    ideographicAltThree: 3,\n    ideographicAltFour: 4,\n    ideographicAltFive: 5\n  },\n  CJKVerticalRomanPlacement: {\n    code: 31,\n    exclusive: true,\n    CJKVerticalRomanCentered: 0,\n    CJKVerticalRomanHBaseline: 1\n  },\n  italicCJKRoman: {\n    code: 32,\n    exclusive: false,\n    // noCJKItalicRoman: 0     # deprecated - use CJKItalicRomanOff instead\n    // CJKItalicRoman: 1     # deprecated - use CJKItalicRomanOn instead\n    CJKItalicRoman: 2\n  },\n  caseSensitiveLayout: {\n    code: 33,\n    exclusive: false,\n    caseSensitiveLayout: 0,\n    caseSensitiveSpacing: 2\n  },\n  alternateKana: {\n    code: 34,\n    exclusive: false,\n    alternateHorizKana: 0,\n    alternateVertKana: 2\n  },\n  stylisticAlternatives: {\n    code: 35,\n    exclusive: false,\n    noStylisticAlternates: 0,\n    stylisticAltOne: 2,\n    stylisticAltTwo: 4,\n    stylisticAltThree: 6,\n    stylisticAltFour: 8,\n    stylisticAltFive: 10,\n    stylisticAltSix: 12,\n    stylisticAltSeven: 14,\n    stylisticAltEight: 16,\n    stylisticAltNine: 18,\n    stylisticAltTen: 20,\n    stylisticAltEleven: 22,\n    stylisticAltTwelve: 24,\n    stylisticAltThirteen: 26,\n    stylisticAltFourteen: 28,\n    stylisticAltFifteen: 30,\n    stylisticAltSixteen: 32,\n    stylisticAltSeventeen: 34,\n    stylisticAltEighteen: 36,\n    stylisticAltNineteen: 38,\n    stylisticAltTwenty: 40\n  },\n  contextualAlternates: {\n    code: 36,\n    exclusive: false,\n    contextualAlternates: 0,\n    swashAlternates: 2,\n    contextualSwashAlternates: 4\n  },\n  lowerCase: {\n    code: 37,\n    exclusive: true,\n    defaultLowerCase: 0,\n    lowerCaseSmallCaps: 1,\n    lowerCasePetiteCaps: 2\n  },\n  upperCase: {\n    code: 38,\n    exclusive: true,\n    defaultUpperCase: 0,\n    upperCaseSmallCaps: 1,\n    upperCasePetiteCaps: 2\n  },\n  languageTag: {\n    // indices into ltag table\n    code: 39,\n    exclusive: true\n  },\n  CJKRomanSpacing: {\n    code: 103,\n    exclusive: true,\n    halfWidthCJKRoman: 0,\n    proportionalCJKRoman: 1,\n    defaultCJKRoman: 2,\n    fullWidthCJKRoman: 3\n  }\n};\nvar feature = function feature(name, selector) {\n  return [features[name].code, features[name][selector]];\n};\nvar OTMapping = {\n  rlig: feature('ligatures', 'requiredLigatures'),\n  clig: feature('ligatures', 'contextualLigatures'),\n  dlig: feature('ligatures', 'rareLigatures'),\n  hlig: feature('ligatures', 'historicalLigatures'),\n  liga: feature('ligatures', 'commonLigatures'),\n  hist: feature('ligatures', 'historicalLigatures'),\n  // ??\n  smcp: feature('lowerCase', 'lowerCaseSmallCaps'),\n  pcap: feature('lowerCase', 'lowerCasePetiteCaps'),\n  frac: feature('fractions', 'diagonalFractions'),\n  dnom: feature('fractions', 'diagonalFractions'),\n  // ??\n  numr: feature('fractions', 'diagonalFractions'),\n  // ??\n  afrc: feature('fractions', 'verticalFractions'),\n  // aalt\n  // abvf, abvm, abvs, akhn, blwf, blwm, blws, cfar, cjct, cpsp, falt, isol, jalt, ljmo, mset?\n  // ltra, ltrm, nukt, pref, pres, pstf, psts, rand, rkrf, rphf, rtla, rtlm, size, tjmo, tnum?\n  // unic, vatu, vhal, vjmo, vpal, vrt2\n  // dist -> trak table?\n  // kern, vkrn -> kern table\n  // lfbd + opbd + rtbd -> opbd table?\n  // mark, mkmk -> acnt table?\n  // locl -> languageTag + ltag table\n  case: feature('caseSensitiveLayout', 'caseSensitiveLayout'),\n  // also caseSensitiveSpacing\n  ccmp: feature('unicodeDecomposition', 'canonicalComposition'),\n  // compatibilityComposition?\n  cpct: feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'),\n  // guess..., probably not given below\n  valt: feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'),\n  swsh: feature('contextualAlternates', 'swashAlternates'),\n  cswh: feature('contextualAlternates', 'contextualSwashAlternates'),\n  curs: feature('cursiveConnection', 'cursive'),\n  // ??\n  c2pc: feature('upperCase', 'upperCasePetiteCaps'),\n  c2sc: feature('upperCase', 'upperCaseSmallCaps'),\n  init: feature('smartSwash', 'wordInitialSwashes'),\n  // ??\n  fin2: feature('smartSwash', 'wordFinalSwashes'),\n  // ??\n  medi: feature('smartSwash', 'nonFinalSwashes'),\n  // ??\n  med2: feature('smartSwash', 'nonFinalSwashes'),\n  // ??\n  fin3: feature('smartSwash', 'wordFinalSwashes'),\n  // ??\n  fina: feature('smartSwash', 'wordFinalSwashes'),\n  // ??\n  pkna: feature('kanaSpacing', 'proportionalKana'),\n  half: feature('textSpacing', 'halfWidthText'),\n  // also HalfWidthCJKRoman, HalfWidthIdeographs?\n  halt: feature('textSpacing', 'altHalfWidthText'),\n  hkna: feature('alternateKana', 'alternateHorizKana'),\n  vkna: feature('alternateKana', 'alternateVertKana'),\n  // hngl: feature 'transliteration', 'hanjaToHangulSelector' # deprecated\n  ital: feature('italicCJKRoman', 'CJKItalicRoman'),\n  lnum: feature('numberCase', 'upperCaseNumbers'),\n  onum: feature('numberCase', 'lowerCaseNumbers'),\n  mgrk: feature('mathematicalExtras', 'mathematicalGreek'),\n  // nalt: not enough info. what type of annotation?\n  // ornm: ditto, which ornament style?\n  calt: feature('contextualAlternates', 'contextualAlternates'),\n  // or more?\n  vrt2: feature('verticalSubstitution', 'substituteVerticalForms'),\n  // oh... below?\n  vert: feature('verticalSubstitution', 'substituteVerticalForms'),\n  tnum: feature('numberSpacing', 'monospacedNumbers'),\n  pnum: feature('numberSpacing', 'proportionalNumbers'),\n  sups: feature('verticalPosition', 'superiors'),\n  subs: feature('verticalPosition', 'inferiors'),\n  ordn: feature('verticalPosition', 'ordinals'),\n  pwid: feature('textSpacing', 'proportionalText'),\n  hwid: feature('textSpacing', 'halfWidthText'),\n  qwid: feature('textSpacing', 'quarterWidthText'),\n  // also QuarterWidthNumbers?\n  twid: feature('textSpacing', 'thirdWidthText'),\n  // also ThirdWidthNumbers?\n  fwid: feature('textSpacing', 'proportionalText'),\n  //??\n  palt: feature('textSpacing', 'altProportionalText'),\n  trad: feature('characterShape', 'traditionalCharacters'),\n  smpl: feature('characterShape', 'simplifiedCharacters'),\n  jp78: feature('characterShape', 'JIS1978Characters'),\n  jp83: feature('characterShape', 'JIS1983Characters'),\n  jp90: feature('characterShape', 'JIS1990Characters'),\n  jp04: feature('characterShape', 'JIS2004Characters'),\n  expt: feature('characterShape', 'expertCharacters'),\n  hojo: feature('characterShape', 'hojoCharacters'),\n  nlck: feature('characterShape', 'NLCCharacters'),\n  tnam: feature('characterShape', 'traditionalNamesCharacters'),\n  ruby: feature('rubyKana', 'rubyKana'),\n  titl: feature('styleOptions', 'titlingCaps'),\n  zero: feature('typographicExtras', 'slashedZero'),\n  ss01: feature('stylisticAlternatives', 'stylisticAltOne'),\n  ss02: feature('stylisticAlternatives', 'stylisticAltTwo'),\n  ss03: feature('stylisticAlternatives', 'stylisticAltThree'),\n  ss04: feature('stylisticAlternatives', 'stylisticAltFour'),\n  ss05: feature('stylisticAlternatives', 'stylisticAltFive'),\n  ss06: feature('stylisticAlternatives', 'stylisticAltSix'),\n  ss07: feature('stylisticAlternatives', 'stylisticAltSeven'),\n  ss08: feature('stylisticAlternatives', 'stylisticAltEight'),\n  ss09: feature('stylisticAlternatives', 'stylisticAltNine'),\n  ss10: feature('stylisticAlternatives', 'stylisticAltTen'),\n  ss11: feature('stylisticAlternatives', 'stylisticAltEleven'),\n  ss12: feature('stylisticAlternatives', 'stylisticAltTwelve'),\n  ss13: feature('stylisticAlternatives', 'stylisticAltThirteen'),\n  ss14: feature('stylisticAlternatives', 'stylisticAltFourteen'),\n  ss15: feature('stylisticAlternatives', 'stylisticAltFifteen'),\n  ss16: feature('stylisticAlternatives', 'stylisticAltSixteen'),\n  ss17: feature('stylisticAlternatives', 'stylisticAltSeventeen'),\n  ss18: feature('stylisticAlternatives', 'stylisticAltEighteen'),\n  ss19: feature('stylisticAlternatives', 'stylisticAltNineteen'),\n  ss20: feature('stylisticAlternatives', 'stylisticAltTwenty')\n}; // salt: feature 'stylisticAlternatives', 'stylisticAltOne' # hmm, which one to choose\n// Add cv01-cv99 features\n\nfor (var i = 1; i <= 99; i++) {\n  OTMapping[\"cv\".concat(\"00\".concat(i).slice(-2))] = [features.characterAlternatives.code, i];\n} // create inverse mapping\n\nvar AATMapping = {};\nfor (var ot in OTMapping) {\n  var aat = OTMapping[ot];\n  if (AATMapping[aat[0]] == null) {\n    AATMapping[aat[0]] = {};\n  }\n  AATMapping[aat[0]][aat[1]] = ot;\n} // Maps an array of OpenType features to AAT features\n// in the form of {featureType:{featureSetting:true}}\n\nfunction mapOTToAAT(features) {\n  var res = {};\n  for (var k in features) {\n    var r = void 0;\n    if (r = OTMapping[k]) {\n      if (res[r[0]] == null) {\n        res[r[0]] = {};\n      }\n      res[r[0]][r[1]] = features[k];\n    }\n  }\n  return res;\n} // Maps strings in a [featureType, featureSetting]\n// to their equivalent number codes\n\nfunction mapFeatureStrings(f) {\n  var type = f[0],\n    setting = f[1];\n  if (isNaN(type)) {\n    var typeCode = features[type] && features[type].code;\n  } else {\n    var typeCode = type;\n  }\n  if (isNaN(setting)) {\n    var settingCode = features[type] && features[type][setting];\n  } else {\n    var settingCode = setting;\n  }\n  return [typeCode, settingCode];\n} // Maps AAT features to an array of OpenType features\n// Supports both arrays in the form of [[featureType, featureSetting]]\n// and objects in the form of {featureType:{featureSetting:true}}\n// featureTypes and featureSettings can be either strings or number codes\n\nfunction mapAATToOT(features) {\n  var res = {};\n  if (Array.isArray(features)) {\n    for (var k = 0; k < features.length; k++) {\n      var r = void 0;\n      var f = mapFeatureStrings(features[k]);\n      if (r = AATMapping[f[0]] && AATMapping[f[0]][f[1]]) {\n        res[r] = true;\n      }\n    }\n  } else if (typeof features === 'object') {\n    for (var type in features) {\n      var _feature = features[type];\n      for (var setting in _feature) {\n        var _r = void 0;\n        var _f = mapFeatureStrings([type, setting]);\n        if (_feature[setting] && (_r = AATMapping[_f[0]] && AATMapping[_f[0]][_f[1]])) {\n          res[_r] = true;\n        }\n      }\n    }\n  }\n  return Object.keys(res);\n}\nvar _class$1;\nvar AATLookupTable = (_class$1 = /*#__PURE__*/function () {\n  function AATLookupTable(table) {\n    this.table = table;\n  }\n  var _proto19 = AATLookupTable.prototype;\n  _proto19.lookup = function lookup(glyph) {\n    switch (this.table.version) {\n      case 0:\n        // simple array format\n        return this.table.values.getItem(glyph);\n      case 2: // segment format\n\n      case 4:\n        {\n          var min = 0;\n          var max = this.table.binarySearchHeader.nUnits - 1;\n          while (min <= max) {\n            var mid = min + max >> 1;\n            var seg = this.table.segments[mid]; // special end of search value\n\n            if (seg.firstGlyph === 0xffff) {\n              return null;\n            }\n            if (glyph < seg.firstGlyph) {\n              max = mid - 1;\n            } else if (glyph > seg.lastGlyph) {\n              min = mid + 1;\n            } else {\n              if (this.table.version === 2) {\n                return seg.value;\n              } else {\n                return seg.values[glyph - seg.firstGlyph];\n              }\n            }\n          }\n          return null;\n        }\n      case 6:\n        {\n          // lookup single\n          var _min = 0;\n          var _max = this.table.binarySearchHeader.nUnits - 1;\n          while (_min <= _max) {\n            var mid = _min + _max >> 1;\n            var seg = this.table.segments[mid]; // special end of search value\n\n            if (seg.glyph === 0xffff) {\n              return null;\n            }\n            if (glyph < seg.glyph) {\n              _max = mid - 1;\n            } else if (glyph > seg.glyph) {\n              _min = mid + 1;\n            } else {\n              return seg.value;\n            }\n          }\n          return null;\n        }\n      case 8:\n        // lookup trimmed\n        return this.table.values[glyph - this.table.firstGlyph];\n      default:\n        throw new Error(\"Unknown lookup table format: \".concat(this.table.version));\n    }\n  };\n  _proto19.glyphsForValue = function glyphsForValue(classValue) {\n    var res = [];\n    switch (this.table.version) {\n      case 2: // segment format\n\n      case 4:\n        {\n          for (var _iterator21 = _createForOfIteratorHelperLoose(this.table.segments), _step21; !(_step21 = _iterator21()).done;) {\n            var segment = _step21.value;\n            if (this.table.version === 2 && segment.value === classValue) {\n              res.push.apply(res, range(segment.firstGlyph, segment.lastGlyph + 1));\n            } else {\n              for (var index = 0; index < segment.values.length; index++) {\n                if (segment.values[index] === classValue) {\n                  res.push(segment.firstGlyph + index);\n                }\n              }\n            }\n          }\n          break;\n        }\n      case 6:\n        {\n          // lookup single\n          for (var _iterator22 = _createForOfIteratorHelperLoose(this.table.segments), _step22; !(_step22 = _iterator22()).done;) {\n            var _segment = _step22.value;\n            if (_segment.value === classValue) {\n              res.push(_segment.glyph);\n            }\n          }\n          break;\n        }\n      case 8:\n        {\n          // lookup trimmed\n          for (var i = 0; i < this.table.values.length; i++) {\n            if (this.table.values[i] === classValue) {\n              res.push(this.table.firstGlyph + i);\n            }\n          }\n          break;\n        }\n      default:\n        throw new Error(\"Unknown lookup table format: \".concat(this.table.version));\n    }\n    return res;\n  };\n  return AATLookupTable;\n}(), _applyDecoratedDescriptor(_class$1.prototype, \"glyphsForValue\", [cache], Object.getOwnPropertyDescriptor(_class$1.prototype, \"glyphsForValue\"), _class$1.prototype), _class$1);\nvar START_OF_TEXT_STATE = 0;\nvar END_OF_TEXT_CLASS = 0;\nvar OUT_OF_BOUNDS_CLASS = 1;\nvar DELETED_GLYPH_CLASS = 2;\nvar DONT_ADVANCE = 0x4000;\nvar AATStateMachine = /*#__PURE__*/function () {\n  function AATStateMachine(stateTable) {\n    this.stateTable = stateTable;\n    this.lookupTable = new AATLookupTable(stateTable.classTable);\n  }\n  var _proto20 = AATStateMachine.prototype;\n  _proto20.process = function process(glyphs, reverse, processEntry) {\n    var currentState = START_OF_TEXT_STATE; // START_OF_LINE_STATE is used for kashida glyph insertions sometimes I think?\n\n    var index = reverse ? glyphs.length - 1 : 0;\n    var dir = reverse ? -1 : 1;\n    while (dir === 1 && index <= glyphs.length || dir === -1 && index >= -1) {\n      var glyph = null;\n      var classCode = OUT_OF_BOUNDS_CLASS;\n      var shouldAdvance = true;\n      if (index === glyphs.length || index === -1) {\n        classCode = END_OF_TEXT_CLASS;\n      } else {\n        glyph = glyphs[index];\n        if (glyph.id === 0xffff) {\n          // deleted glyph\n          classCode = DELETED_GLYPH_CLASS;\n        } else {\n          classCode = this.lookupTable.lookup(glyph.id);\n          if (classCode == null) {\n            classCode = OUT_OF_BOUNDS_CLASS;\n          }\n        }\n      }\n      var row = this.stateTable.stateArray.getItem(currentState);\n      var entryIndex = row[classCode];\n      var entry = this.stateTable.entryTable.getItem(entryIndex);\n      if (classCode !== END_OF_TEXT_CLASS && classCode !== DELETED_GLYPH_CLASS) {\n        processEntry(glyph, entry, index);\n        shouldAdvance = !(entry.flags & DONT_ADVANCE);\n      }\n      currentState = entry.newState;\n      if (shouldAdvance) {\n        index += dir;\n      }\n    }\n    return glyphs;\n  }\n  /**\r\n   * Performs a depth-first traversal of the glyph strings\r\n   * represented by the state machine.\r\n   */;\n  _proto20.traverse = function traverse(opts, state, visited) {\n    if (state === void 0) {\n      state = 0;\n    }\n    if (visited === void 0) {\n      visited = new Set();\n    }\n    if (visited.has(state)) {\n      return;\n    }\n    visited.add(state);\n    var _this$stateTable = this.stateTable,\n      nClasses = _this$stateTable.nClasses,\n      stateArray = _this$stateTable.stateArray,\n      entryTable = _this$stateTable.entryTable;\n    var row = stateArray.getItem(state); // Skip predefined classes\n\n    for (var classCode = 4; classCode < nClasses; classCode++) {\n      var entryIndex = row[classCode];\n      var entry = entryTable.getItem(entryIndex); // Try all glyphs in the class\n\n      for (var _iterator23 = _createForOfIteratorHelperLoose(this.lookupTable.glyphsForValue(classCode)), _step23; !(_step23 = _iterator23()).done;) {\n        var glyph = _step23.value;\n        if (opts.enter) {\n          opts.enter(glyph, entry);\n        }\n        if (entry.newState !== 0) {\n          this.traverse(opts, entry.newState, visited);\n        }\n        if (opts.exit) {\n          opts.exit(glyph, entry);\n        }\n      }\n    }\n  };\n  return AATStateMachine;\n}();\nvar _class$2;\nvar MARK_FIRST = 0x8000;\nvar MARK_LAST = 0x2000;\nvar VERB = 0x000F; // contextual substitution and glyph insertion flag\n\nvar SET_MARK = 0x8000; // ligature entry flags\n\nvar SET_COMPONENT = 0x8000;\nvar PERFORM_ACTION = 0x2000; // ligature action masks\n\nvar LAST_MASK = 0x80000000;\nvar STORE_MASK = 0x40000000;\nvar OFFSET_MASK = 0x3FFFFFFF;\nvar REVERSE_DIRECTION = 0x400000;\nvar CURRENT_INSERT_BEFORE = 0x0800;\nvar MARKED_INSERT_BEFORE = 0x0400;\nvar CURRENT_INSERT_COUNT = 0x03E0;\nvar MARKED_INSERT_COUNT = 0x001F;\nvar AATMorxProcessor = (_class$2 = /*#__PURE__*/function () {\n  function AATMorxProcessor(font) {\n    this.processIndicRearragement = this.processIndicRearragement.bind(this);\n    this.processContextualSubstitution = this.processContextualSubstitution.bind(this);\n    this.processLigature = this.processLigature.bind(this);\n    this.processNoncontextualSubstitutions = this.processNoncontextualSubstitutions.bind(this);\n    this.processGlyphInsertion = this.processGlyphInsertion.bind(this);\n    this.font = font;\n    this.morx = font.morx;\n    this.inputCache = null;\n  } // Processes an array of glyphs and applies the specified features\n  // Features should be in the form of {featureType:{featureSetting:boolean}}\n  var _proto21 = AATMorxProcessor.prototype;\n  _proto21.process = function process(glyphs, features) {\n    if (features === void 0) {\n      features = {};\n    }\n    for (var _iterator24 = _createForOfIteratorHelperLoose(this.morx.chains), _step24; !(_step24 = _iterator24()).done;) {\n      var chain = _step24.value;\n      var flags = chain.defaultFlags; // enable/disable the requested features\n\n      for (var _iterator25 = _createForOfIteratorHelperLoose(chain.features), _step25; !(_step25 = _iterator25()).done;) {\n        var feature = _step25.value;\n        var f = void 0;\n        if (f = features[feature.featureType]) {\n          if (f[feature.featureSetting]) {\n            flags &= feature.disableFlags;\n            flags |= feature.enableFlags;\n          } else if (f[feature.featureSetting] === false) {\n            flags |= ~feature.disableFlags;\n            flags &= ~feature.enableFlags;\n          }\n        }\n      }\n      for (var _iterator26 = _createForOfIteratorHelperLoose(chain.subtables), _step26; !(_step26 = _iterator26()).done;) {\n        var subtable = _step26.value;\n        if (subtable.subFeatureFlags & flags) {\n          this.processSubtable(subtable, glyphs);\n        }\n      }\n    } // remove deleted glyphs\n\n    var index = glyphs.length - 1;\n    while (index >= 0) {\n      if (glyphs[index].id === 0xffff) {\n        glyphs.splice(index, 1);\n      }\n      index--;\n    }\n    return glyphs;\n  };\n  _proto21.processSubtable = function processSubtable(subtable, glyphs) {\n    this.subtable = subtable;\n    this.glyphs = glyphs;\n    if (this.subtable.type === 4) {\n      this.processNoncontextualSubstitutions(this.subtable, this.glyphs);\n      return;\n    }\n    this.ligatureStack = [];\n    this.markedGlyph = null;\n    this.firstGlyph = null;\n    this.lastGlyph = null;\n    this.markedIndex = null;\n    var stateMachine = this.getStateMachine(subtable);\n    var process = this.getProcessor();\n    var reverse = !!(this.subtable.coverage & REVERSE_DIRECTION);\n    return stateMachine.process(this.glyphs, reverse, process);\n  };\n  _proto21.getStateMachine = function getStateMachine(subtable) {\n    return new AATStateMachine(subtable.table.stateTable);\n  };\n  _proto21.getProcessor = function getProcessor() {\n    switch (this.subtable.type) {\n      case 0:\n        return this.processIndicRearragement;\n      case 1:\n        return this.processContextualSubstitution;\n      case 2:\n        return this.processLigature;\n      case 4:\n        return this.processNoncontextualSubstitutions;\n      case 5:\n        return this.processGlyphInsertion;\n      default:\n        throw new Error(\"Invalid morx subtable type: \".concat(this.subtable.type));\n    }\n  };\n  _proto21.processIndicRearragement = function processIndicRearragement(glyph, entry, index) {\n    if (entry.flags & MARK_FIRST) {\n      this.firstGlyph = index;\n    }\n    if (entry.flags & MARK_LAST) {\n      this.lastGlyph = index;\n    }\n    reorderGlyphs(this.glyphs, entry.flags & VERB, this.firstGlyph, this.lastGlyph);\n  };\n  _proto21.processContextualSubstitution = function processContextualSubstitution(glyph, entry, index) {\n    var subsitutions = this.subtable.table.substitutionTable.items;\n    if (entry.markIndex !== 0xffff) {\n      var lookup = subsitutions.getItem(entry.markIndex);\n      var lookupTable = new AATLookupTable(lookup);\n      glyph = this.glyphs[this.markedGlyph];\n      var gid = lookupTable.lookup(glyph.id);\n      if (gid) {\n        this.glyphs[this.markedGlyph] = this.font.getGlyph(gid, glyph.codePoints);\n      }\n    }\n    if (entry.currentIndex !== 0xffff) {\n      var _lookup = subsitutions.getItem(entry.currentIndex);\n      var _lookupTable = new AATLookupTable(_lookup);\n      glyph = this.glyphs[index];\n      var gid = _lookupTable.lookup(glyph.id);\n      if (gid) {\n        this.glyphs[index] = this.font.getGlyph(gid, glyph.codePoints);\n      }\n    }\n    if (entry.flags & SET_MARK) {\n      this.markedGlyph = index;\n    }\n  };\n  _proto21.processLigature = function processLigature(glyph, entry, index) {\n    if (entry.flags & SET_COMPONENT) {\n      this.ligatureStack.push(index);\n    }\n    if (entry.flags & PERFORM_ACTION) {\n      var _this$ligatureStack;\n      var actions = this.subtable.table.ligatureActions;\n      var components = this.subtable.table.components;\n      var ligatureList = this.subtable.table.ligatureList;\n      var actionIndex = entry.action;\n      var last = false;\n      var ligatureIndex = 0;\n      var codePoints = [];\n      var ligatureGlyphs = [];\n      while (!last) {\n        var _codePoints;\n        var componentGlyph = this.ligatureStack.pop();\n        (_codePoints = codePoints).unshift.apply(_codePoints, this.glyphs[componentGlyph].codePoints);\n        var action = actions.getItem(actionIndex++);\n        last = !!(action & LAST_MASK);\n        var store = !!(action & STORE_MASK);\n        var offset = (action & OFFSET_MASK) << 2 >> 2; // sign extend 30 to 32 bits\n\n        offset += this.glyphs[componentGlyph].id;\n        var component = components.getItem(offset);\n        ligatureIndex += component;\n        if (last || store) {\n          var ligatureEntry = ligatureList.getItem(ligatureIndex);\n          this.glyphs[componentGlyph] = this.font.getGlyph(ligatureEntry, codePoints);\n          ligatureGlyphs.push(componentGlyph);\n          ligatureIndex = 0;\n          codePoints = [];\n        } else {\n          this.glyphs[componentGlyph] = this.font.getGlyph(0xffff);\n        }\n      } // Put ligature glyph indexes back on the stack\n\n      (_this$ligatureStack = this.ligatureStack).push.apply(_this$ligatureStack, ligatureGlyphs);\n    }\n  };\n  _proto21.processNoncontextualSubstitutions = function processNoncontextualSubstitutions(subtable, glyphs, index) {\n    var lookupTable = new AATLookupTable(subtable.table.lookupTable);\n    for (index = 0; index < glyphs.length; index++) {\n      var glyph = glyphs[index];\n      if (glyph.id !== 0xffff) {\n        var gid = lookupTable.lookup(glyph.id);\n        if (gid) {\n          // 0 means do nothing\n          glyphs[index] = this.font.getGlyph(gid, glyph.codePoints);\n        }\n      }\n    }\n  };\n  _proto21._insertGlyphs = function _insertGlyphs(glyphIndex, insertionActionIndex, count, isBefore) {\n    var _this$glyphs;\n    var insertions = [];\n    while (count--) {\n      var gid = this.subtable.table.insertionActions.getItem(insertionActionIndex++);\n      insertions.push(this.font.getGlyph(gid));\n    }\n    if (!isBefore) {\n      glyphIndex++;\n    }\n    (_this$glyphs = this.glyphs).splice.apply(_this$glyphs, [glyphIndex, 0].concat(insertions));\n  };\n  _proto21.processGlyphInsertion = function processGlyphInsertion(glyph, entry, index) {\n    if (entry.flags & SET_MARK) {\n      this.markedIndex = index;\n    }\n    if (entry.markedInsertIndex !== 0xffff) {\n      var count = (entry.flags & MARKED_INSERT_COUNT) >>> 5;\n      var isBefore = !!(entry.flags & MARKED_INSERT_BEFORE);\n      this._insertGlyphs(this.markedIndex, entry.markedInsertIndex, count, isBefore);\n    }\n    if (entry.currentInsertIndex !== 0xffff) {\n      var _count = (entry.flags & CURRENT_INSERT_COUNT) >>> 5;\n      var _isBefore = !!(entry.flags & CURRENT_INSERT_BEFORE);\n      this._insertGlyphs(index, entry.currentInsertIndex, _count, _isBefore);\n    }\n  };\n  _proto21.getSupportedFeatures = function getSupportedFeatures() {\n    var features = [];\n    for (var _iterator27 = _createForOfIteratorHelperLoose(this.morx.chains), _step27; !(_step27 = _iterator27()).done;) {\n      var chain = _step27.value;\n      for (var _iterator28 = _createForOfIteratorHelperLoose(chain.features), _step28; !(_step28 = _iterator28()).done;) {\n        var feature = _step28.value;\n        features.push([feature.featureType, feature.featureSetting]);\n      }\n    }\n    return features;\n  };\n  _proto21.generateInputs = function generateInputs(gid) {\n    if (!this.inputCache) {\n      this.generateInputCache();\n    }\n    return this.inputCache[gid] || [];\n  };\n  _proto21.generateInputCache = function generateInputCache() {\n    this.inputCache = {};\n    for (var _iterator29 = _createForOfIteratorHelperLoose(this.morx.chains), _step29; !(_step29 = _iterator29()).done;) {\n      var chain = _step29.value;\n      var flags = chain.defaultFlags;\n      for (var _iterator30 = _createForOfIteratorHelperLoose(chain.subtables), _step30; !(_step30 = _iterator30()).done;) {\n        var subtable = _step30.value;\n        if (subtable.subFeatureFlags & flags) {\n          this.generateInputsForSubtable(subtable);\n        }\n      }\n    }\n  };\n  _proto21.generateInputsForSubtable = function generateInputsForSubtable(subtable) {\n    var _this3 = this;\n    // Currently, only supporting ligature subtables.\n    if (subtable.type !== 2) {\n      return;\n    }\n    var reverse = !!(subtable.coverage & REVERSE_DIRECTION);\n    if (reverse) {\n      throw new Error('Reverse subtable, not supported.');\n    }\n    this.subtable = subtable;\n    this.ligatureStack = [];\n    var stateMachine = this.getStateMachine(subtable);\n    var process = this.getProcessor();\n    var input = [];\n    var stack = [];\n    this.glyphs = [];\n    stateMachine.traverse({\n      enter: function enter(glyph, entry) {\n        var glyphs = _this3.glyphs;\n        stack.push({\n          glyphs: glyphs.slice(),\n          ligatureStack: _this3.ligatureStack.slice()\n        }); // Add glyph to input and glyphs to process.\n\n        var g = _this3.font.getGlyph(glyph);\n        input.push(g);\n        glyphs.push(input[input.length - 1]); // Process ligature substitution\n\n        process(glyphs[glyphs.length - 1], entry, glyphs.length - 1); // Add input to result if only one matching (non-deleted) glyph remains.\n\n        var count = 0;\n        var found = 0;\n        for (var i = 0; i < glyphs.length && count <= 1; i++) {\n          if (glyphs[i].id !== 0xffff) {\n            count++;\n            found = glyphs[i].id;\n          }\n        }\n        if (count === 1) {\n          var result = input.map(function (g) {\n            return g.id;\n          });\n          var _cache = _this3.inputCache[found];\n          if (_cache) {\n            _cache.push(result);\n          } else {\n            _this3.inputCache[found] = [result];\n          }\n        }\n      },\n      exit: function exit() {\n        var _stack$pop = stack.pop();\n        _this3.glyphs = _stack$pop.glyphs;\n        _this3.ligatureStack = _stack$pop.ligatureStack;\n        input.pop();\n      }\n    });\n  };\n  return AATMorxProcessor;\n}(), _applyDecoratedDescriptor(_class$2.prototype, \"getStateMachine\", [cache], Object.getOwnPropertyDescriptor(_class$2.prototype, \"getStateMachine\"), _class$2.prototype), _class$2);\n// reverse the glyphs inside those ranges if specified\n// ranges are in [offset, length] format\n\nfunction swap(glyphs, rangeA, rangeB, reverseA, reverseB) {\n  if (reverseA === void 0) {\n    reverseA = false;\n  }\n  if (reverseB === void 0) {\n    reverseB = false;\n  }\n  var end = glyphs.splice(rangeB[0] - (rangeB[1] - 1), rangeB[1]);\n  if (reverseB) {\n    end.reverse();\n  }\n  var start = glyphs.splice.apply(glyphs, [rangeA[0], rangeA[1]].concat(end));\n  if (reverseA) {\n    start.reverse();\n  }\n  glyphs.splice.apply(glyphs, [rangeB[0] - (rangeA[1] - 1), 0].concat(start));\n  return glyphs;\n}\nfunction reorderGlyphs(glyphs, verb, firstGlyph, lastGlyph) {\n  switch (verb) {\n    case 0:\n      // no change\n      return glyphs;\n    case 1:\n      // Ax => xA\n      return swap(glyphs, [firstGlyph, 1], [lastGlyph, 0]);\n    case 2:\n      // xD => Dx\n      return swap(glyphs, [firstGlyph, 0], [lastGlyph, 1]);\n    case 3:\n      // AxD => DxA\n      return swap(glyphs, [firstGlyph, 1], [lastGlyph, 1]);\n    case 4:\n      // ABx => xAB\n      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 0]);\n    case 5:\n      // ABx => xBA\n      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 0], true, false);\n    case 6:\n      // xCD => CDx\n      return swap(glyphs, [firstGlyph, 0], [lastGlyph, 2]);\n    case 7:\n      // xCD => DCx\n      return swap(glyphs, [firstGlyph, 0], [lastGlyph, 2], false, true);\n    case 8:\n      // AxCD => CDxA\n      return swap(glyphs, [firstGlyph, 1], [lastGlyph, 2]);\n    case 9:\n      // AxCD => DCxA\n      return swap(glyphs, [firstGlyph, 1], [lastGlyph, 2], false, true);\n    case 10:\n      // ABxD => DxAB\n      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 1]);\n    case 11:\n      // ABxD => DxBA\n      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 1], true, false);\n    case 12:\n      // ABxCD => CDxAB\n      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2]);\n    case 13:\n      // ABxCD => CDxBA\n      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], true, false);\n    case 14:\n      // ABxCD => DCxAB\n      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], false, true);\n    case 15:\n      // ABxCD => DCxBA\n      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], true, true);\n    default:\n      throw new Error(\"Unknown verb: \".concat(verb));\n  }\n}\nvar AATLayoutEngine = /*#__PURE__*/function () {\n  function AATLayoutEngine(font) {\n    this.font = font;\n    this.morxProcessor = new AATMorxProcessor(font);\n    this.fallbackPosition = false;\n  }\n  var _proto22 = AATLayoutEngine.prototype;\n  _proto22.substitute = function substitute(glyphRun) {\n    // AAT expects the glyphs to be in visual order prior to morx processing,\n    // so reverse the glyphs if the script is right-to-left.\n    if (glyphRun.direction === 'rtl') {\n      glyphRun.glyphs.reverse();\n    }\n    this.morxProcessor.process(glyphRun.glyphs, mapOTToAAT(glyphRun.features));\n  };\n  _proto22.getAvailableFeatures = function getAvailableFeatures(script, language) {\n    return mapAATToOT(this.morxProcessor.getSupportedFeatures());\n  };\n  _proto22.stringsForGlyph = function stringsForGlyph(gid) {\n    var glyphStrings = this.morxProcessor.generateInputs(gid);\n    var result = new Set();\n    for (var _iterator31 = _createForOfIteratorHelperLoose(glyphStrings), _step31; !(_step31 = _iterator31()).done;) {\n      var glyphs = _step31.value;\n      this._addStrings(glyphs, 0, result, '');\n    }\n    return result;\n  };\n  _proto22._addStrings = function _addStrings(glyphs, index, strings, string) {\n    var codePoints = this.font._cmapProcessor.codePointsForGlyph(glyphs[index]);\n    for (var _iterator32 = _createForOfIteratorHelperLoose(codePoints), _step32; !(_step32 = _iterator32()).done;) {\n      var codePoint = _step32.value;\n      var s = string + String.fromCodePoint(codePoint);\n      if (index < glyphs.length - 1) {\n        this._addStrings(glyphs, index + 1, strings, s);\n      } else {\n        strings.add(s);\n      }\n    }\n  };\n  return AATLayoutEngine;\n}();\n/**\r\n * ShapingPlans are used by the OpenType shapers to store which\r\n * features should by applied, and in what order to apply them.\r\n * The features are applied in groups called stages. A feature\r\n * can be applied globally to all glyphs, or locally to only\r\n * specific glyphs.\r\n *\r\n * @private\r\n */\nvar ShapingPlan = /*#__PURE__*/function () {\n  function ShapingPlan(font, script, direction) {\n    this.font = font;\n    this.script = script;\n    this.direction = direction;\n    this.stages = [];\n    this.globalFeatures = {};\n    this.allFeatures = {};\n  }\n  /**\r\n   * Adds the given features to the last stage.\r\n   * Ignores features that have already been applied.\r\n   */\n  var _proto23 = ShapingPlan.prototype;\n  _proto23._addFeatures = function _addFeatures(features, global) {\n    var stageIndex = this.stages.length - 1;\n    var stage = this.stages[stageIndex];\n    for (var _iterator33 = _createForOfIteratorHelperLoose(features), _step33; !(_step33 = _iterator33()).done;) {\n      var feature = _step33.value;\n      if (this.allFeatures[feature] == null) {\n        stage.push(feature);\n        this.allFeatures[feature] = stageIndex;\n        if (global) {\n          this.globalFeatures[feature] = true;\n        }\n      }\n    }\n  }\n  /**\r\n   * Add features to the last stage\r\n   */;\n  _proto23.add = function add(arg, global) {\n    if (global === void 0) {\n      global = true;\n    }\n    if (this.stages.length === 0) {\n      this.stages.push([]);\n    }\n    if (typeof arg === 'string') {\n      arg = [arg];\n    }\n    if (Array.isArray(arg)) {\n      this._addFeatures(arg, global);\n    } else if (typeof arg === 'object') {\n      this._addFeatures(arg.global || [], true);\n      this._addFeatures(arg.local || [], false);\n    } else {\n      throw new Error(\"Unsupported argument to ShapingPlan#add\");\n    }\n  }\n  /**\r\n   * Add a new stage\r\n   */;\n  _proto23.addStage = function addStage(arg, global) {\n    if (typeof arg === 'function') {\n      this.stages.push(arg, []);\n    } else {\n      this.stages.push([]);\n      this.add(arg, global);\n    }\n  };\n  _proto23.setFeatureOverrides = function setFeatureOverrides(features) {\n    if (Array.isArray(features)) {\n      this.add(features);\n    } else if (typeof features === 'object') {\n      for (var tag in features) {\n        if (features[tag]) {\n          this.add(tag);\n        } else if (this.allFeatures[tag] != null) {\n          var stage = this.stages[this.allFeatures[tag]];\n          stage.splice(stage.indexOf(tag), 1);\n          delete this.allFeatures[tag];\n          delete this.globalFeatures[tag];\n        }\n      }\n    }\n  }\n  /**\r\n   * Assigns the global features to the given glyphs\r\n   */;\n  _proto23.assignGlobalFeatures = function assignGlobalFeatures(glyphs) {\n    for (var _iterator34 = _createForOfIteratorHelperLoose(glyphs), _step34; !(_step34 = _iterator34()).done;) {\n      var glyph = _step34.value;\n      for (var feature in this.globalFeatures) {\n        glyph.features[feature] = true;\n      }\n    }\n  }\n  /**\r\n   * Executes the planned stages using the given OTProcessor\r\n   */;\n  _proto23.process = function process(processor, glyphs, positions) {\n    for (var _iterator35 = _createForOfIteratorHelperLoose(this.stages), _step35; !(_step35 = _iterator35()).done;) {\n      var stage = _step35.value;\n      if (typeof stage === 'function') {\n        if (!positions) {\n          stage(this.font, glyphs, this);\n        }\n      } else if (stage.length > 0) {\n        processor.applyFeatures(stage, glyphs, positions);\n      }\n    }\n  };\n  return ShapingPlan;\n}();\nvar VARIATION_FEATURES = ['rvrn'];\nvar COMMON_FEATURES = ['ccmp', 'locl', 'rlig', 'mark', 'mkmk'];\nvar FRACTIONAL_FEATURES = ['frac', 'numr', 'dnom'];\nvar HORIZONTAL_FEATURES = ['calt', 'clig', 'liga', 'rclt', 'curs', 'kern'];\nvar DIRECTIONAL_FEATURES = {\n  ltr: ['ltra', 'ltrm'],\n  rtl: ['rtla', 'rtlm']\n};\nvar DefaultShaper = /*#__PURE__*/function () {\n  function DefaultShaper() {}\n  DefaultShaper.plan = function plan(_plan, glyphs, features) {\n    // Plan the features we want to apply\n    this.planPreprocessing(_plan);\n    this.planFeatures(_plan);\n    this.planPostprocessing(_plan, features); // Assign the global features to all the glyphs\n\n    _plan.assignGlobalFeatures(glyphs); // Assign local features to glyphs\n\n    this.assignFeatures(_plan, glyphs);\n  };\n  DefaultShaper.planPreprocessing = function planPreprocessing(plan) {\n    plan.add({\n      global: [].concat(VARIATION_FEATURES, DIRECTIONAL_FEATURES[plan.direction]),\n      local: FRACTIONAL_FEATURES\n    });\n  };\n  DefaultShaper.planFeatures = function planFeatures(plan) {// Do nothing by default. Let subclasses override this.\n  };\n  DefaultShaper.planPostprocessing = function planPostprocessing(plan, userFeatures) {\n    plan.add([].concat(COMMON_FEATURES, HORIZONTAL_FEATURES));\n    plan.setFeatureOverrides(userFeatures);\n  };\n  DefaultShaper.assignFeatures = function assignFeatures(plan, glyphs) {\n    // Enable contextual fractions\n    for (var i = 0; i < glyphs.length; i++) {\n      var glyph = glyphs[i];\n      if (glyph.codePoints[0] === 0x2044) {\n        // fraction slash\n        var start = i;\n        var end = i + 1; // Apply numerator\n\n        while (start > 0 && unicode.isDigit(glyphs[start - 1].codePoints[0])) {\n          glyphs[start - 1].features.numr = true;\n          glyphs[start - 1].features.frac = true;\n          start--;\n        } // Apply denominator\n\n        while (end < glyphs.length && unicode.isDigit(glyphs[end].codePoints[0])) {\n          glyphs[end].features.dnom = true;\n          glyphs[end].features.frac = true;\n          end++;\n        } // Apply fraction slash\n\n        glyph.features.frac = true;\n        i = end - 1;\n      }\n    }\n  };\n  return DefaultShaper;\n}();\n_defineProperty(DefaultShaper, \"zeroMarkWidths\", 'AFTER_GPOS');\nvar trie = new UnicodeTrie(Buffer(\"APABAAAAAAAAOAAAAf0BAv7tmi1MxDAUx7vtvjhAgcDgkEgEAnmXEBIMCYaEcygEiqBQ4FAkCE4ikUgMiiBJSAgSiUQSDMn9L9eSl6bddddug9t7yS/trevre+3r27pcNxZiG+yCfdCVv/9LeQxOwRm4AJegD27ALbgD9+ABPJF+z+BN/h7yDj5k/VOWX6SdmU5+wLWknggxDxaS8u0qiiX4uiz9XamQ3wzDMAzDMAzDMAzDVI/h959V/v7BMAzDMAzDMLlyNTNiMSdewVxbiA44B4/guz1qW58VYlMI0WsJ0W+N6kXw0spvPtdwhtkwnGM6uLaV4Xyzg3v3PM9DPfQ/sOg4xPWjipy31P8LTqbU304c/cLCUmWJLNB2Uz2U1KTeRKNmKHVMfbJC+/0loTZRH/W5cvEvBJPMbREkWt3FD1NcqXZBSpuE2Ad0PBehPtNrPtIEdYP+hiRt/V1jIiE69X4NT/uVZI3PUHE9bm5M7ePGdZWy951v7Nn6j8v1WWKP3mt6ttnsigx6VN7Vc0VomSSGqW2mGNP1muZPl7LfjNUaKNFtDGVf2fvE9O7VlBS5j333c5p/eeoOqcs1R/hIqDWLJ7TTlksirVT1SI7l8k4Yp+g3jafGcrU1RM6l9th80XOpnlN97bDNY4i4s61B0Si/ipa0uHMl6zqEjlFfCZm/TM8KmzQDjmuTAQ==\",\"base64\"));\nvar FEATURES = ['isol', 'fina', 'fin2', 'fin3', 'medi', 'med2', 'init'];\nvar ShapingClasses = {\n  Non_Joining: 0,\n  Left_Joining: 1,\n  Right_Joining: 2,\n  Dual_Joining: 3,\n  Join_Causing: 3,\n  ALAPH: 4,\n  'DALATH RISH': 5,\n  Transparent: 6\n};\nvar ISOL = 'isol';\nvar FINA = 'fina';\nvar FIN2 = 'fin2';\nvar FIN3 = 'fin3';\nvar MEDI = 'medi';\nvar MED2 = 'med2';\nvar INIT = 'init';\nvar NONE = null; // Each entry is [prevAction, curAction, nextState]\n\nvar STATE_TABLE = [\n//   Non_Joining,        Left_Joining,       Right_Joining,     Dual_Joining,           ALAPH,            DALATH RISH\n// State 0: prev was U,  not willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [NONE, ISOL, 1], [NONE, ISOL, 2], [NONE, ISOL, 1], [NONE, ISOL, 6]],\n// State 1: prev was R or ISOL/ALAPH,  not willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [NONE, ISOL, 1], [NONE, ISOL, 2], [NONE, FIN2, 5], [NONE, ISOL, 6]],\n// State 2: prev was D/L in ISOL form,  willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [INIT, FINA, 1], [INIT, FINA, 3], [INIT, FINA, 4], [INIT, FINA, 6]],\n// State 3: prev was D in FINA form,  willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [MEDI, FINA, 1], [MEDI, FINA, 3], [MEDI, FINA, 4], [MEDI, FINA, 6]],\n// State 4: prev was FINA ALAPH,  not willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [MED2, ISOL, 1], [MED2, ISOL, 2], [MED2, FIN2, 5], [MED2, ISOL, 6]],\n// State 5: prev was FIN2/FIN3 ALAPH,  not willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [ISOL, ISOL, 1], [ISOL, ISOL, 2], [ISOL, FIN2, 5], [ISOL, ISOL, 6]],\n// State 6: prev was DALATH/RISH,  not willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [NONE, ISOL, 1], [NONE, ISOL, 2], [NONE, FIN3, 5], [NONE, ISOL, 6]]];\n/**\r\n * This is a shaper for Arabic, and other cursive scripts.\r\n * It uses data from ArabicShaping.txt in the Unicode database,\r\n * compiled to a UnicodeTrie by generate-data.coffee.\r\n *\r\n * The shaping state machine was ported from Harfbuzz.\r\n * https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-complex-arabic.cc\r\n */\nvar ArabicShaper = /*#__PURE__*/function (_DefaultShaper) {\n  _inheritsLoose(ArabicShaper, _DefaultShaper);\n  function ArabicShaper() {\n    return _DefaultShaper.apply(this, arguments) || this;\n  }\n  ArabicShaper.planFeatures = function planFeatures(plan) {\n    plan.add(['ccmp', 'locl']);\n    for (var i = 0; i < FEATURES.length; i++) {\n      var feature = FEATURES[i];\n      plan.addStage(feature, false);\n    }\n    plan.addStage('mset');\n  };\n  ArabicShaper.assignFeatures = function assignFeatures(plan, glyphs) {\n    _DefaultShaper.assignFeatures.call(this, plan, glyphs);\n    var prev = -1;\n    var state = 0;\n    var actions = []; // Apply the state machine to map glyphs to features\n\n    for (var i = 0; i < glyphs.length; i++) {\n      var curAction = void 0,\n        prevAction = void 0;\n      var glyph = glyphs[i];\n      var type = getShapingClass(glyph.codePoints[0]);\n      if (type === ShapingClasses.Transparent) {\n        actions[i] = NONE;\n        continue;\n      }\n      var _STATE_TABLE$state$ty = STATE_TABLE[state][type];\n      prevAction = _STATE_TABLE$state$ty[0];\n      curAction = _STATE_TABLE$state$ty[1];\n      state = _STATE_TABLE$state$ty[2];\n      if (prevAction !== NONE && prev !== -1) {\n        actions[prev] = prevAction;\n      }\n      actions[i] = curAction;\n      prev = i;\n    } // Apply the chosen features to their respective glyphs\n\n    for (var index = 0; index < glyphs.length; index++) {\n      var feature = void 0;\n      var glyph = glyphs[index];\n      if (feature = actions[index]) {\n        glyph.features[feature] = true;\n      }\n    }\n  };\n  return ArabicShaper;\n}(DefaultShaper);\nfunction getShapingClass(codePoint) {\n  var res = trie.get(codePoint);\n  if (res) {\n    return res - 1;\n  }\n  var category = unicode.getCategory(codePoint);\n  if (category === 'Mn' || category === 'Me' || category === 'Cf') {\n    return ShapingClasses.Transparent;\n  }\n  return ShapingClasses.Non_Joining;\n}\nvar GlyphIterator = /*#__PURE__*/function () {\n  function GlyphIterator(glyphs, options) {\n    this.glyphs = glyphs;\n    this.reset(options);\n  }\n  var _proto24 = GlyphIterator.prototype;\n  _proto24.reset = function reset(options, index) {\n    if (options === void 0) {\n      options = {};\n    }\n    if (index === void 0) {\n      index = 0;\n    }\n    this.options = options;\n    this.flags = options.flags || {};\n    this.markAttachmentType = options.markAttachmentType || 0;\n    this.index = index;\n  };\n  _proto24.shouldIgnore = function shouldIgnore(glyph) {\n    return this.flags.ignoreMarks && glyph.isMark || this.flags.ignoreBaseGlyphs && glyph.isBase || this.flags.ignoreLigatures && glyph.isLigature || this.markAttachmentType && glyph.isMark && glyph.markAttachmentType !== this.markAttachmentType;\n  };\n  _proto24.move = function move(dir) {\n    this.index += dir;\n    while (0 <= this.index && this.index < this.glyphs.length && this.shouldIgnore(this.glyphs[this.index])) {\n      this.index += dir;\n    }\n    if (0 > this.index || this.index >= this.glyphs.length) {\n      return null;\n    }\n    return this.glyphs[this.index];\n  };\n  _proto24.next = function next() {\n    return this.move(+1);\n  };\n  _proto24.prev = function prev() {\n    return this.move(-1);\n  };\n  _proto24.peek = function peek(count) {\n    if (count === void 0) {\n      count = 1;\n    }\n    var idx = this.index;\n    var res = this.increment(count);\n    this.index = idx;\n    return res;\n  };\n  _proto24.peekIndex = function peekIndex(count) {\n    if (count === void 0) {\n      count = 1;\n    }\n    var idx = this.index;\n    this.increment(count);\n    var res = this.index;\n    this.index = idx;\n    return res;\n  };\n  _proto24.increment = function increment(count) {\n    if (count === void 0) {\n      count = 1;\n    }\n    var dir = count < 0 ? -1 : 1;\n    count = Math.abs(count);\n    while (count--) {\n      this.move(dir);\n    }\n    return this.glyphs[this.index];\n  };\n  _createClass(GlyphIterator, [{\n    key: \"cur\",\n    get: function get() {\n      return this.glyphs[this.index] || null;\n    }\n  }]);\n  return GlyphIterator;\n}();\nvar DEFAULT_SCRIPTS = ['DFLT', 'dflt', 'latn'];\nvar OTProcessor = /*#__PURE__*/function () {\n  function OTProcessor(font, table) {\n    this.font = font;\n    this.table = table;\n    this.script = null;\n    this.scriptTag = null;\n    this.language = null;\n    this.languageTag = null;\n    this.features = {};\n    this.lookups = {}; // Setup variation substitutions\n\n    this.variationsIndex = font._variationProcessor ? this.findVariationsIndex(font._variationProcessor.normalizedCoords) : -1; // initialize to default script + language\n\n    this.selectScript(); // current context (set by applyFeatures)\n\n    this.glyphs = [];\n    this.positions = []; // only used by GPOS\n\n    this.ligatureID = 1;\n    this.currentFeature = null;\n  }\n  var _proto25 = OTProcessor.prototype;\n  _proto25.findScript = function findScript(script) {\n    if (this.table.scriptList == null) {\n      return null;\n    }\n    if (!Array.isArray(script)) {\n      script = [script];\n    }\n    for (var _iterator36 = _createForOfIteratorHelperLoose(script), _step36; !(_step36 = _iterator36()).done;) {\n      var s = _step36.value;\n      for (var _iterator37 = _createForOfIteratorHelperLoose(this.table.scriptList), _step37; !(_step37 = _iterator37()).done;) {\n        var entry = _step37.value;\n        if (entry.tag === s) {\n          return entry;\n        }\n      }\n    }\n    return null;\n  };\n  _proto25.selectScript = function selectScript(script, language, direction$1) {\n    var changed = false;\n    var entry;\n    if (!this.script || script !== this.scriptTag) {\n      entry = this.findScript(script);\n      if (!entry) {\n        entry = this.findScript(DEFAULT_SCRIPTS);\n      }\n      if (!entry) {\n        return this.scriptTag;\n      }\n      this.scriptTag = entry.tag;\n      this.script = entry.script;\n      this.language = null;\n      this.languageTag = null;\n      changed = true;\n    }\n    if (!direction$1 || direction$1 !== this.direction) {\n      this.direction = direction$1 || direction(script);\n    }\n    if (language && language.length < 4) {\n      language += ' '.repeat(4 - language.length);\n    }\n    if (!language || language !== this.languageTag) {\n      this.language = null;\n      for (var _iterator38 = _createForOfIteratorHelperLoose(this.script.langSysRecords), _step38; !(_step38 = _iterator38()).done;) {\n        var lang = _step38.value;\n        if (lang.tag === language) {\n          this.language = lang.langSys;\n          this.languageTag = lang.tag;\n          break;\n        }\n      }\n      if (!this.language) {\n        this.language = this.script.defaultLangSys;\n        this.languageTag = null;\n      }\n      changed = true;\n    } // Build a feature lookup table\n\n    if (changed) {\n      this.features = {};\n      if (this.language) {\n        for (var _iterator39 = _createForOfIteratorHelperLoose(this.language.featureIndexes), _step39; !(_step39 = _iterator39()).done;) {\n          var featureIndex = _step39.value;\n          var record = this.table.featureList[featureIndex];\n          var substituteFeature = this.substituteFeatureForVariations(featureIndex);\n          this.features[record.tag] = substituteFeature || record.feature;\n        }\n      }\n    }\n    return this.scriptTag;\n  };\n  _proto25.lookupsForFeatures = function lookupsForFeatures(userFeatures, exclude) {\n    if (userFeatures === void 0) {\n      userFeatures = [];\n    }\n    var lookups = [];\n    for (var _iterator40 = _createForOfIteratorHelperLoose(userFeatures), _step40; !(_step40 = _iterator40()).done;) {\n      var tag = _step40.value;\n      var feature = this.features[tag];\n      if (!feature) {\n        continue;\n      }\n      for (var _iterator41 = _createForOfIteratorHelperLoose(feature.lookupListIndexes), _step41; !(_step41 = _iterator41()).done;) {\n        var lookupIndex = _step41.value;\n        if (exclude && exclude.indexOf(lookupIndex) !== -1) {\n          continue;\n        }\n        lookups.push({\n          feature: tag,\n          index: lookupIndex,\n          lookup: this.table.lookupList.get(lookupIndex)\n        });\n      }\n    }\n    lookups.sort(function (a, b) {\n      return a.index - b.index;\n    });\n    return lookups;\n  };\n  _proto25.substituteFeatureForVariations = function substituteFeatureForVariations(featureIndex) {\n    if (this.variationsIndex === -1) {\n      return null;\n    }\n    var record = this.table.featureVariations.featureVariationRecords[this.variationsIndex];\n    var substitutions = record.featureTableSubstitution.substitutions;\n    for (var _iterator42 = _createForOfIteratorHelperLoose(substitutions), _step42; !(_step42 = _iterator42()).done;) {\n      var substitution = _step42.value;\n      if (substitution.featureIndex === featureIndex) {\n        return substitution.alternateFeatureTable;\n      }\n    }\n    return null;\n  };\n  _proto25.findVariationsIndex = function findVariationsIndex(coords) {\n    var variations = this.table.featureVariations;\n    if (!variations) {\n      return -1;\n    }\n    var records = variations.featureVariationRecords;\n    for (var i = 0; i < records.length; i++) {\n      var conditions = records[i].conditionSet.conditionTable;\n      if (this.variationConditionsMatch(conditions, coords)) {\n        return i;\n      }\n    }\n    return -1;\n  };\n  _proto25.variationConditionsMatch = function variationConditionsMatch(conditions, coords) {\n    return conditions.every(function (condition) {\n      var coord = condition.axisIndex < coords.length ? coords[condition.axisIndex] : 0;\n      return condition.filterRangeMinValue <= coord && coord <= condition.filterRangeMaxValue;\n    });\n  };\n  _proto25.applyFeatures = function applyFeatures(userFeatures, glyphs, advances) {\n    var lookups = this.lookupsForFeatures(userFeatures);\n    this.applyLookups(lookups, glyphs, advances);\n  };\n  _proto25.applyLookups = function applyLookups(lookups, glyphs, positions) {\n    this.glyphs = glyphs;\n    this.positions = positions;\n    this.glyphIterator = new GlyphIterator(glyphs);\n    for (var _iterator43 = _createForOfIteratorHelperLoose(lookups), _step43; !(_step43 = _iterator43()).done;) {\n      var _step43$value = _step43.value,\n        feature = _step43$value.feature,\n        lookup = _step43$value.lookup;\n      this.currentFeature = feature;\n      this.glyphIterator.reset(lookup.flags);\n      while (this.glyphIterator.index < glyphs.length) {\n        if (!(feature in this.glyphIterator.cur.features)) {\n          this.glyphIterator.next();\n          continue;\n        }\n        for (var _iterator44 = _createForOfIteratorHelperLoose(lookup.subTables), _step44; !(_step44 = _iterator44()).done;) {\n          var table = _step44.value;\n          var res = this.applyLookup(lookup.lookupType, table);\n          if (res) {\n            break;\n          }\n        }\n        this.glyphIterator.next();\n      }\n    }\n  };\n  _proto25.applyLookup = function applyLookup(lookup, table) {\n    throw new Error(\"applyLookup must be implemented by subclasses\");\n  };\n  _proto25.applyLookupList = function applyLookupList(lookupRecords) {\n    var options = this.glyphIterator.options;\n    var glyphIndex = this.glyphIterator.index;\n    for (var _iterator45 = _createForOfIteratorHelperLoose(lookupRecords), _step45; !(_step45 = _iterator45()).done;) {\n      var lookupRecord = _step45.value;\n      // Reset flags and find glyph index for this lookup record\n      this.glyphIterator.reset(options, glyphIndex);\n      this.glyphIterator.increment(lookupRecord.sequenceIndex); // Get the lookup and setup flags for subtables\n\n      var lookup = this.table.lookupList.get(lookupRecord.lookupListIndex);\n      this.glyphIterator.reset(lookup.flags, this.glyphIterator.index); // Apply lookup subtables until one matches\n\n      for (var _iterator46 = _createForOfIteratorHelperLoose(lookup.subTables), _step46; !(_step46 = _iterator46()).done;) {\n        var table = _step46.value;\n        if (this.applyLookup(lookup.lookupType, table)) {\n          break;\n        }\n      }\n    }\n    this.glyphIterator.reset(options, glyphIndex);\n    return true;\n  };\n  _proto25.coverageIndex = function coverageIndex(coverage, glyph) {\n    if (glyph == null) {\n      glyph = this.glyphIterator.cur.id;\n    }\n    switch (coverage.version) {\n      case 1:\n        return coverage.glyphs.indexOf(glyph);\n      case 2:\n        for (var _iterator47 = _createForOfIteratorHelperLoose(coverage.rangeRecords), _step47; !(_step47 = _iterator47()).done;) {\n          var range = _step47.value;\n          if (range.start <= glyph && glyph <= range.end) {\n            return range.startCoverageIndex + glyph - range.start;\n          }\n        }\n        break;\n    }\n    return -1;\n  };\n  _proto25.match = function match(sequenceIndex, sequence, fn, matched) {\n    var pos = this.glyphIterator.index;\n    var glyph = this.glyphIterator.increment(sequenceIndex);\n    var idx = 0;\n    while (idx < sequence.length && glyph && fn(sequence[idx], glyph)) {\n      if (matched) {\n        matched.push(this.glyphIterator.index);\n      }\n      idx++;\n      glyph = this.glyphIterator.next();\n    }\n    this.glyphIterator.index = pos;\n    if (idx < sequence.length) {\n      return false;\n    }\n    return matched || true;\n  };\n  _proto25.sequenceMatches = function sequenceMatches(sequenceIndex, sequence) {\n    return this.match(sequenceIndex, sequence, function (component, glyph) {\n      return component === glyph.id;\n    });\n  };\n  _proto25.sequenceMatchIndices = function sequenceMatchIndices(sequenceIndex, sequence) {\n    var _this4 = this;\n    return this.match(sequenceIndex, sequence, function (component, glyph) {\n      // If the current feature doesn't apply to this glyph,\n      if (!(_this4.currentFeature in glyph.features)) {\n        return false;\n      }\n      return component === glyph.id;\n    }, []);\n  };\n  _proto25.coverageSequenceMatches = function coverageSequenceMatches(sequenceIndex, sequence) {\n    var _this5 = this;\n    return this.match(sequenceIndex, sequence, function (coverage, glyph) {\n      return _this5.coverageIndex(coverage, glyph.id) >= 0;\n    });\n  };\n  _proto25.getClassID = function getClassID(glyph, classDef) {\n    switch (classDef.version) {\n      case 1:\n        // Class array\n        var i = glyph - classDef.startGlyph;\n        if (i >= 0 && i < classDef.classValueArray.length) {\n          return classDef.classValueArray[i];\n        }\n        break;\n      case 2:\n        for (var _iterator48 = _createForOfIteratorHelperLoose(classDef.classRangeRecord), _step48; !(_step48 = _iterator48()).done;) {\n          var range = _step48.value;\n          if (range.start <= glyph && glyph <= range.end) {\n            return range.class;\n          }\n        }\n        break;\n    }\n    return 0;\n  };\n  _proto25.classSequenceMatches = function classSequenceMatches(sequenceIndex, sequence, classDef) {\n    var _this6 = this;\n    return this.match(sequenceIndex, sequence, function (classID, glyph) {\n      return classID === _this6.getClassID(glyph.id, classDef);\n    });\n  };\n  _proto25.applyContext = function applyContext(table) {\n    switch (table.version) {\n      case 1:\n        var index = this.coverageIndex(table.coverage);\n        if (index === -1) {\n          return false;\n        }\n        var set = table.ruleSets[index];\n        for (var _iterator49 = _createForOfIteratorHelperLoose(set), _step49; !(_step49 = _iterator49()).done;) {\n          var rule = _step49.value;\n          if (this.sequenceMatches(1, rule.input)) {\n            return this.applyLookupList(rule.lookupRecords);\n          }\n        }\n        break;\n      case 2:\n        if (this.coverageIndex(table.coverage) === -1) {\n          return false;\n        }\n        index = this.getClassID(this.glyphIterator.cur.id, table.classDef);\n        if (index === -1) {\n          return false;\n        }\n        set = table.classSet[index];\n        for (var _iterator50 = _createForOfIteratorHelperLoose(set), _step50; !(_step50 = _iterator50()).done;) {\n          var _rule = _step50.value;\n          if (this.classSequenceMatches(1, _rule.classes, table.classDef)) {\n            return this.applyLookupList(_rule.lookupRecords);\n          }\n        }\n        break;\n      case 3:\n        if (this.coverageSequenceMatches(0, table.coverages)) {\n          return this.applyLookupList(table.lookupRecords);\n        }\n        break;\n    }\n    return false;\n  };\n  _proto25.applyChainingContext = function applyChainingContext(table) {\n    switch (table.version) {\n      case 1:\n        var index = this.coverageIndex(table.coverage);\n        if (index === -1) {\n          return false;\n        }\n        var set = table.chainRuleSets[index];\n        for (var _iterator51 = _createForOfIteratorHelperLoose(set), _step51; !(_step51 = _iterator51()).done;) {\n          var rule = _step51.value;\n          if (this.sequenceMatches(-rule.backtrack.length, rule.backtrack) && this.sequenceMatches(1, rule.input) && this.sequenceMatches(1 + rule.input.length, rule.lookahead)) {\n            return this.applyLookupList(rule.lookupRecords);\n          }\n        }\n        break;\n      case 2:\n        if (this.coverageIndex(table.coverage) === -1) {\n          return false;\n        }\n        index = this.getClassID(this.glyphIterator.cur.id, table.inputClassDef);\n        var rules = table.chainClassSet[index];\n        if (!rules) {\n          return false;\n        }\n        for (var _iterator52 = _createForOfIteratorHelperLoose(rules), _step52; !(_step52 = _iterator52()).done;) {\n          var _rule2 = _step52.value;\n          if (this.classSequenceMatches(-_rule2.backtrack.length, _rule2.backtrack, table.backtrackClassDef) && this.classSequenceMatches(1, _rule2.input, table.inputClassDef) && this.classSequenceMatches(1 + _rule2.input.length, _rule2.lookahead, table.lookaheadClassDef)) {\n            return this.applyLookupList(_rule2.lookupRecords);\n          }\n        }\n        break;\n      case 3:\n        if (this.coverageSequenceMatches(-table.backtrackGlyphCount, table.backtrackCoverage) && this.coverageSequenceMatches(0, table.inputCoverage) && this.coverageSequenceMatches(table.inputGlyphCount, table.lookaheadCoverage)) {\n          return this.applyLookupList(table.lookupRecords);\n        }\n        break;\n    }\n    return false;\n  };\n  return OTProcessor;\n}();\nvar GlyphInfo = /*#__PURE__*/function () {\n  function GlyphInfo(font, id, codePoints, features) {\n    if (codePoints === void 0) {\n      codePoints = [];\n    }\n    this._font = font;\n    this.codePoints = codePoints;\n    this.id = id;\n    this.features = {};\n    if (Array.isArray(features)) {\n      for (var i = 0; i < features.length; i++) {\n        var feature = features[i];\n        this.features[feature] = true;\n      }\n    } else if (typeof features === 'object') {\n      Object.assign(this.features, features);\n    }\n    this.ligatureID = null;\n    this.ligatureComponent = null;\n    this.isLigated = false;\n    this.cursiveAttachment = null;\n    this.markAttachment = null;\n    this.shaperInfo = null;\n    this.substituted = false;\n    this.isMultiplied = false;\n  }\n  var _proto26 = GlyphInfo.prototype;\n  _proto26.copy = function copy() {\n    return new GlyphInfo(this._font, this.id, this.codePoints, this.features);\n  };\n  _createClass(GlyphInfo, [{\n    key: \"id\",\n    get: function get() {\n      return this._id;\n    },\n    set: function set(id) {\n      this._id = id;\n      this.substituted = true;\n      var GDEF = this._font.GDEF;\n      if (GDEF && GDEF.glyphClassDef) {\n        // TODO: clean this up\n        var classID = OTProcessor.prototype.getClassID(id, GDEF.glyphClassDef);\n        this.isBase = classID === 1;\n        this.isLigature = classID === 2;\n        this.isMark = classID === 3;\n        this.markAttachmentType = GDEF.markAttachClassDef ? OTProcessor.prototype.getClassID(id, GDEF.markAttachClassDef) : 0;\n      } else {\n        this.isMark = this.codePoints.length > 0 && this.codePoints.every(unicode.isMark);\n        this.isBase = !this.isMark;\n        this.isLigature = this.codePoints.length > 1;\n        this.markAttachmentType = 0;\n      }\n    }\n  }]);\n  return GlyphInfo;\n}();\n/**\r\n * This is a shaper for the Hangul script, used by the Korean language.\r\n * It does the following:\r\n *   - decompose if unsupported by the font:\r\n *     <LV>   -> <L,V>\r\n *     <LVT>  -> <L,V,T>\r\n *     <LV,T> -> <L,V,T>\r\n *\r\n *   - compose if supported by the font:\r\n *     <L,V>   -> <LV>\r\n *     <L,V,T> -> <LVT>\r\n *     <LV,T>  -> <LVT>\r\n *\r\n *   - reorder tone marks (S is any valid syllable):\r\n *     <S, M> -> <M, S>\r\n *\r\n *   - apply ljmo, vjmo, and tjmo OpenType features to decomposed Jamo sequences.\r\n *\r\n * This logic is based on the following documents:\r\n *   - http://www.microsoft.com/typography/OpenTypeDev/hangul/intro.htm\r\n *   - http://ktug.org/~nomos/harfbuzz-hangul/hangulshaper.pdf\r\n */\nvar HangulShaper = /*#__PURE__*/function (_DefaultShaper2) {\n  _inheritsLoose(HangulShaper, _DefaultShaper2);\n  function HangulShaper() {\n    return _DefaultShaper2.apply(this, arguments) || this;\n  }\n  HangulShaper.planFeatures = function planFeatures(plan) {\n    plan.add(['ljmo', 'vjmo', 'tjmo'], false);\n  };\n  HangulShaper.assignFeatures = function assignFeatures(plan, glyphs) {\n    var state = 0;\n    var i = 0;\n    while (i < glyphs.length) {\n      var action = void 0;\n      var glyph = glyphs[i];\n      var code = glyph.codePoints[0];\n      var type = getType(code);\n      var _STATE_TABLE$1$state$ = STATE_TABLE$1[state][type];\n      action = _STATE_TABLE$1$state$[0];\n      state = _STATE_TABLE$1$state$[1];\n      switch (action) {\n        case DECOMPOSE:\n          // Decompose the composed syllable if it is not supported by the font.\n          if (!plan.font.hasGlyphForCodePoint(code)) {\n            i = decompose(glyphs, i, plan.font);\n          }\n          break;\n        case COMPOSE:\n          // Found a decomposed syllable. Try to compose if supported by the font.\n          i = compose(glyphs, i, plan.font);\n          break;\n        case TONE_MARK:\n          // Got a valid syllable, followed by a tone mark. Move the tone mark to the beginning of the syllable.\n          reorderToneMark(glyphs, i, plan.font);\n          break;\n        case INVALID:\n          // Tone mark has no valid syllable to attach to, so insert a dotted circle\n          i = insertDottedCircle(glyphs, i, plan.font);\n          break;\n      }\n      i++;\n    }\n  };\n  return HangulShaper;\n}(DefaultShaper);\n_defineProperty(HangulShaper, \"zeroMarkWidths\", 'NONE');\nvar HANGUL_BASE = 0xac00;\nvar HANGUL_END = 0xd7a4;\nvar HANGUL_COUNT = HANGUL_END - HANGUL_BASE + 1;\nvar L_BASE = 0x1100; // lead\n\nvar V_BASE = 0x1161; // vowel\n\nvar T_BASE = 0x11a7; // trail\n\nvar L_COUNT = 19;\nvar V_COUNT = 21;\nvar T_COUNT = 28;\nvar L_END = L_BASE + L_COUNT - 1;\nvar V_END = V_BASE + V_COUNT - 1;\nvar T_END = T_BASE + T_COUNT - 1;\nvar DOTTED_CIRCLE = 0x25cc;\nvar isL = function isL(code) {\n  return 0x1100 <= code && code <= 0x115f || 0xa960 <= code && code <= 0xa97c;\n};\nvar isV = function isV(code) {\n  return 0x1160 <= code && code <= 0x11a7 || 0xd7b0 <= code && code <= 0xd7c6;\n};\nvar isT = function isT(code) {\n  return 0x11a8 <= code && code <= 0x11ff || 0xd7cb <= code && code <= 0xd7fb;\n};\nvar isTone = function isTone(code) {\n  return 0x302e <= code && code <= 0x302f;\n};\nvar isLVT = function isLVT(code) {\n  return HANGUL_BASE <= code && code <= HANGUL_END;\n};\nvar isLV = function isLV(code) {\n  return code - HANGUL_BASE < HANGUL_COUNT && (code - HANGUL_BASE) % T_COUNT === 0;\n};\nvar isCombiningL = function isCombiningL(code) {\n  return L_BASE <= code && code <= L_END;\n};\nvar isCombiningV = function isCombiningV(code) {\n  return V_BASE <= code && code <= V_END;\n};\nvar isCombiningT = function isCombiningT(code) {\n  return 1 <= code && code <= T_END;\n}; // Character categories\n\nvar X = 0; // Other character\n\nvar L = 1; // Leading consonant\n\nvar V = 2; // Medial vowel\n\nvar T = 3; // Trailing consonant\n\nvar LV = 4; // Composed <LV> syllable\n\nvar LVT = 5; // Composed <LVT> syllable\n\nvar M = 6; // Tone mark\n// This function classifies a character using the above categories.\n\nfunction getType(code) {\n  if (isL(code)) {\n    return L;\n  }\n  if (isV(code)) {\n    return V;\n  }\n  if (isT(code)) {\n    return T;\n  }\n  if (isLV(code)) {\n    return LV;\n  }\n  if (isLVT(code)) {\n    return LVT;\n  }\n  if (isTone(code)) {\n    return M;\n  }\n  return X;\n} // State machine actions\n\nvar NO_ACTION = 0;\nvar DECOMPOSE = 1;\nvar COMPOSE = 2;\nvar TONE_MARK = 4;\nvar INVALID = 5; // Build a state machine that accepts valid syllables, and applies actions along the way.\n// The logic this is implementing is documented at the top of the file.\n\nvar STATE_TABLE$1 = [\n//       X                 L                 V                T                  LV                LVT               M\n// State 0: start state\n[[NO_ACTION, 0], [NO_ACTION, 1], [NO_ACTION, 0], [NO_ACTION, 0], [DECOMPOSE, 2], [DECOMPOSE, 3], [INVALID, 0]],\n// State 1: <L>\n[[NO_ACTION, 0], [NO_ACTION, 1], [COMPOSE, 2], [NO_ACTION, 0], [DECOMPOSE, 2], [DECOMPOSE, 3], [INVALID, 0]],\n// State 2: <L,V> or <LV>\n[[NO_ACTION, 0], [NO_ACTION, 1], [NO_ACTION, 0], [COMPOSE, 3], [DECOMPOSE, 2], [DECOMPOSE, 3], [TONE_MARK, 0]],\n// State 3: <L,V,T> or <LVT>\n[[NO_ACTION, 0], [NO_ACTION, 1], [NO_ACTION, 0], [NO_ACTION, 0], [DECOMPOSE, 2], [DECOMPOSE, 3], [TONE_MARK, 0]]];\nfunction getGlyph(font, code, features) {\n  return new GlyphInfo(font, font.glyphForCodePoint(code).id, [code], features);\n}\nfunction decompose(glyphs, i, font) {\n  var glyph = glyphs[i];\n  var code = glyph.codePoints[0];\n  var s = code - HANGUL_BASE;\n  var t = T_BASE + s % T_COUNT;\n  s = s / T_COUNT | 0;\n  var l = L_BASE + s / V_COUNT | 0;\n  var v = V_BASE + s % V_COUNT; // Don't decompose if all of the components are not available\n\n  if (!font.hasGlyphForCodePoint(l) || !font.hasGlyphForCodePoint(v) || t !== T_BASE && !font.hasGlyphForCodePoint(t)) {\n    return i;\n  } // Replace the current glyph with decomposed L, V, and T glyphs,\n  // and apply the proper OpenType features to each component.\n\n  var ljmo = getGlyph(font, l, glyph.features);\n  ljmo.features.ljmo = true;\n  var vjmo = getGlyph(font, v, glyph.features);\n  vjmo.features.vjmo = true;\n  var insert = [ljmo, vjmo];\n  if (t > T_BASE) {\n    var tjmo = getGlyph(font, t, glyph.features);\n    tjmo.features.tjmo = true;\n    insert.push(tjmo);\n  }\n  glyphs.splice.apply(glyphs, [i, 1].concat(insert));\n  return i + insert.length - 1;\n}\nfunction compose(glyphs, i, font) {\n  var glyph = glyphs[i];\n  var code = glyphs[i].codePoints[0];\n  var type = getType(code);\n  var prev = glyphs[i - 1].codePoints[0];\n  var prevType = getType(prev); // Figure out what type of syllable we're dealing with\n\n  var lv, ljmo, vjmo, tjmo;\n  if (prevType === LV && type === T) {\n    // <LV,T>\n    lv = prev;\n    tjmo = glyph;\n  } else {\n    if (type === V) {\n      // <L,V>\n      ljmo = glyphs[i - 1];\n      vjmo = glyph;\n    } else {\n      // <L,V,T>\n      ljmo = glyphs[i - 2];\n      vjmo = glyphs[i - 1];\n      tjmo = glyph;\n    }\n    var l = ljmo.codePoints[0];\n    var v = vjmo.codePoints[0]; // Make sure L and V are combining characters\n\n    if (isCombiningL(l) && isCombiningV(v)) {\n      lv = HANGUL_BASE + ((l - L_BASE) * V_COUNT + (v - V_BASE)) * T_COUNT;\n    }\n  }\n  var t = tjmo && tjmo.codePoints[0] || T_BASE;\n  if (lv != null && (t === T_BASE || isCombiningT(t))) {\n    var s = lv + (t - T_BASE); // Replace with a composed glyph if supported by the font,\n    // otherwise apply the proper OpenType features to each component.\n\n    if (font.hasGlyphForCodePoint(s)) {\n      var del = prevType === V ? 3 : 2;\n      glyphs.splice(i - del + 1, del, getGlyph(font, s, glyph.features));\n      return i - del + 1;\n    }\n  } // Didn't compose (either a non-combining component or unsupported by font).\n\n  if (ljmo) {\n    ljmo.features.ljmo = true;\n  }\n  if (vjmo) {\n    vjmo.features.vjmo = true;\n  }\n  if (tjmo) {\n    tjmo.features.tjmo = true;\n  }\n  if (prevType === LV) {\n    // Sequence was originally <L,V>, which got combined earlier.\n    // Either the T was non-combining, or the LVT glyph wasn't supported.\n    // Decompose the glyph again and apply OT features.\n    decompose(glyphs, i - 1, font);\n    return i + 1;\n  }\n  return i;\n}\nfunction getLength(code) {\n  switch (getType(code)) {\n    case LV:\n    case LVT:\n      return 1;\n    case V:\n      return 2;\n    case T:\n      return 3;\n  }\n}\nfunction reorderToneMark(glyphs, i, font) {\n  var glyph = glyphs[i];\n  var code = glyphs[i].codePoints[0]; // Move tone mark to the beginning of the previous syllable, unless it is zero width\n\n  if (font.glyphForCodePoint(code).advanceWidth === 0) {\n    return;\n  }\n  var prev = glyphs[i - 1].codePoints[0];\n  var len = getLength(prev);\n  glyphs.splice(i, 1);\n  return glyphs.splice(i - len, 0, glyph);\n}\nfunction insertDottedCircle(glyphs, i, font) {\n  var glyph = glyphs[i];\n  var code = glyphs[i].codePoints[0];\n  if (font.hasGlyphForCodePoint(DOTTED_CIRCLE)) {\n    var dottedCircle = getGlyph(font, DOTTED_CIRCLE, glyph.features); // If the tone mark is zero width, insert the dotted circle before, otherwise after\n\n    var idx = font.glyphForCodePoint(code).advanceWidth === 0 ? i : i + 1;\n    glyphs.splice(idx, 0, dottedCircle);\n    i++;\n  }\n  return i;\n}\nvar stateTable = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 2, 3, 4, 5, 6, 7, 8, 9, 0, 10, 11, 11, 12, 13, 14, 15, 16, 17], [0, 0, 0, 18, 19, 20, 21, 22, 23, 0, 24, 0, 0, 25, 26, 0, 0, 27, 0], [0, 0, 0, 28, 29, 30, 31, 32, 33, 0, 34, 0, 0, 35, 36, 0, 0, 37, 0], [0, 0, 0, 38, 5, 7, 7, 8, 9, 0, 10, 0, 0, 0, 13, 0, 0, 16, 0], [0, 39, 0, 0, 0, 40, 41, 0, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 0, 0, 0, 43, 44, 44, 8, 9, 0, 0, 0, 0, 12, 43, 0, 0, 0, 0], [0, 0, 0, 0, 43, 44, 44, 8, 9, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0], [0, 0, 0, 45, 46, 47, 48, 49, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 50, 0, 0, 51, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 53, 54, 55, 56, 57, 58, 0, 59, 0, 0, 60, 61, 0, 0, 62, 0], [0, 0, 0, 4, 5, 7, 7, 8, 9, 0, 10, 0, 0, 0, 13, 0, 0, 16, 0], [0, 63, 64, 0, 0, 40, 41, 0, 9, 0, 10, 0, 0, 0, 42, 0, 63, 0, 0], [0, 2, 3, 4, 5, 6, 7, 8, 9, 0, 10, 11, 11, 12, 13, 0, 2, 16, 0], [0, 0, 0, 18, 65, 20, 21, 22, 23, 0, 24, 0, 0, 25, 26, 0, 0, 27, 0], [0, 0, 0, 0, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 0, 0], [0, 0, 0, 69, 0, 70, 70, 0, 71, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 73, 19, 74, 74, 22, 23, 0, 24, 0, 0, 0, 26, 0, 0, 27, 0], [0, 75, 0, 0, 0, 76, 77, 0, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 0, 0, 0, 79, 80, 80, 22, 23, 0, 0, 0, 0, 25, 79, 0, 0, 0, 0], [0, 0, 0, 18, 19, 20, 74, 22, 23, 0, 24, 0, 0, 25, 26, 0, 0, 27, 0], [0, 0, 0, 81, 82, 83, 84, 85, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 86, 0, 0, 87, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 18, 19, 74, 74, 22, 23, 0, 24, 0, 0, 0, 26, 0, 0, 27, 0], [0, 89, 90, 0, 0, 76, 77, 0, 23, 0, 24, 0, 0, 0, 78, 0, 89, 0, 0], [0, 0, 0, 0, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 0, 0], [0, 0, 0, 94, 29, 95, 31, 32, 33, 0, 34, 0, 0, 0, 36, 0, 0, 37, 0], [0, 96, 0, 0, 0, 97, 98, 0, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 0, 0, 0, 100, 101, 101, 32, 33, 0, 0, 0, 0, 35, 100, 0, 0, 0, 0], [0, 0, 0, 0, 100, 101, 101, 32, 33, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0], [0, 0, 0, 102, 103, 104, 105, 106, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 107, 0, 0, 108, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 28, 29, 95, 31, 32, 33, 0, 34, 0, 0, 0, 36, 0, 0, 37, 0], [0, 110, 111, 0, 0, 97, 98, 0, 33, 0, 34, 0, 0, 0, 99, 0, 110, 0, 0], [0, 0, 0, 0, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 0, 0], [0, 0, 0, 0, 5, 7, 7, 8, 9, 0, 10, 0, 0, 0, 13, 0, 0, 16, 0], [0, 0, 0, 115, 116, 117, 118, 8, 9, 0, 10, 0, 0, 119, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 39, 0, 122, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 124, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 0], [0, 39, 0, 0, 0, 121, 125, 0, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 0, 0, 0, 0, 126, 126, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 46, 47, 48, 49, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 47, 47, 49, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 127, 127, 49, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 128, 127, 127, 49, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 129, 130, 131, 132, 133, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 135, 54, 56, 56, 57, 58, 0, 59, 0, 0, 0, 61, 0, 0, 62, 0], [0, 136, 0, 0, 0, 137, 138, 0, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 0, 0, 0, 140, 141, 141, 57, 58, 0, 0, 0, 0, 60, 140, 0, 0, 0, 0], [0, 0, 0, 0, 140, 141, 141, 57, 58, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0], [0, 0, 0, 142, 143, 144, 145, 146, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 147, 0, 0, 148, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 53, 54, 56, 56, 57, 58, 0, 59, 0, 0, 0, 61, 0, 0, 62, 0], [0, 150, 151, 0, 0, 137, 138, 0, 58, 0, 59, 0, 0, 0, 139, 0, 150, 0, 0], [0, 0, 0, 0, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 0, 0], [0, 0, 0, 155, 116, 156, 157, 8, 9, 0, 10, 0, 0, 158, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 75, 3, 4, 5, 159, 160, 8, 161, 0, 162, 0, 11, 12, 163, 0, 75, 16, 0], [0, 0, 0, 0, 0, 40, 164, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 165, 44, 44, 8, 9, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0], [0, 124, 64, 0, 0, 40, 164, 0, 9, 0, 10, 0, 0, 0, 42, 0, 124, 0, 0], [0, 0, 0, 0, 0, 70, 70, 0, 71, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 166, 0, 0, 167, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 19, 74, 74, 22, 23, 0, 24, 0, 0, 0, 26, 0, 0, 27, 0], [0, 0, 0, 0, 79, 80, 80, 22, 23, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0], [0, 0, 0, 169, 170, 171, 172, 22, 23, 0, 24, 0, 0, 173, 174, 0, 0, 27, 0], [0, 0, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 75, 0, 176, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 178, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0], [0, 75, 0, 0, 0, 175, 179, 0, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 0, 0, 0, 0, 180, 180, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 82, 83, 84, 85, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 83, 83, 85, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 181, 181, 85, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 182, 181, 181, 85, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 183, 184, 185, 186, 187, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 189, 170, 190, 191, 22, 23, 0, 24, 0, 0, 192, 174, 0, 0, 27, 0], [0, 0, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 76, 193, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 194, 80, 80, 22, 23, 0, 0, 0, 0, 0, 194, 0, 0, 0, 0], [0, 178, 90, 0, 0, 76, 193, 0, 23, 0, 24, 0, 0, 0, 78, 0, 178, 0, 0], [0, 0, 0, 0, 29, 95, 31, 32, 33, 0, 34, 0, 0, 0, 36, 0, 0, 37, 0], [0, 0, 0, 0, 100, 101, 101, 32, 33, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0], [0, 0, 0, 195, 196, 197, 198, 32, 33, 0, 34, 0, 0, 199, 200, 0, 0, 37, 0], [0, 0, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 96, 0, 202, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 204, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 0, 0], [0, 96, 0, 0, 0, 201, 205, 0, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 0, 0, 0, 0, 206, 206, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 103, 104, 105, 106, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 104, 104, 106, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 207, 207, 106, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 208, 207, 207, 106, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 209, 210, 211, 212, 213, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 215, 196, 216, 217, 32, 33, 0, 34, 0, 0, 218, 200, 0, 0, 37, 0], [0, 0, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 97, 219, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 220, 101, 101, 32, 33, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0], [0, 204, 111, 0, 0, 97, 219, 0, 33, 0, 34, 0, 0, 0, 99, 0, 204, 0, 0], [0, 0, 0, 221, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 223, 0, 0, 0, 40, 224, 0, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 0, 0, 0, 225, 44, 44, 8, 9, 0, 0, 0, 0, 119, 225, 0, 0, 0, 0], [0, 0, 0, 115, 116, 117, 222, 8, 9, 0, 10, 0, 0, 119, 120, 0, 0, 16, 0], [0, 0, 0, 115, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 226, 64, 0, 0, 40, 224, 0, 9, 0, 10, 0, 0, 0, 42, 0, 226, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 39, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 0, 0, 0, 0, 44, 44, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 227, 0, 228, 229, 0, 9, 0, 10, 0, 0, 230, 0, 0, 0, 0, 0], [0, 39, 0, 122, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 231, 231, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 130, 131, 132, 133, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 131, 131, 133, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 233, 233, 133, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 234, 233, 233, 133, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 235, 236, 237, 238, 239, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 54, 56, 56, 57, 58, 0, 59, 0, 0, 0, 61, 0, 0, 62, 0], [0, 0, 0, 240, 241, 242, 243, 57, 58, 0, 59, 0, 0, 244, 245, 0, 0, 62, 0], [0, 0, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 136, 0, 247, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 249, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0], [0, 136, 0, 0, 0, 246, 250, 0, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 0, 0, 0, 0, 251, 251, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 143, 144, 145, 146, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 144, 144, 146, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 252, 252, 146, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 253, 252, 252, 146, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 254, 255, 256, 257, 258, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 260, 241, 261, 262, 57, 58, 0, 59, 0, 0, 263, 245, 0, 0, 62, 0], [0, 0, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 137, 264, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 265, 141, 141, 57, 58, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0], [0, 249, 151, 0, 0, 137, 264, 0, 58, 0, 59, 0, 0, 0, 139, 0, 249, 0, 0], [0, 0, 0, 221, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 9, 0, 0, 0, 0, 158, 225, 0, 0, 0, 0], [0, 0, 0, 155, 116, 156, 222, 8, 9, 0, 10, 0, 0, 158, 120, 0, 0, 16, 0], [0, 0, 0, 155, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 43, 266, 266, 8, 161, 0, 24, 0, 0, 12, 267, 0, 0, 0, 0], [0, 75, 0, 176, 43, 268, 268, 269, 161, 0, 24, 0, 0, 0, 267, 0, 75, 0, 0], [0, 0, 0, 0, 0, 270, 0, 0, 271, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0], [0, 273, 274, 0, 0, 40, 41, 0, 9, 0, 10, 0, 0, 0, 42, 0, 273, 0, 0], [0, 0, 0, 40, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 121, 275, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 166, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 277, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 279, 0, 0, 0, 76, 280, 0, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 0, 0, 0, 281, 80, 80, 22, 23, 0, 0, 0, 0, 173, 281, 0, 0, 0, 0], [0, 0, 0, 169, 170, 171, 278, 22, 23, 0, 24, 0, 0, 173, 174, 0, 0, 27, 0], [0, 0, 0, 169, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 282, 90, 0, 0, 76, 280, 0, 23, 0, 24, 0, 0, 0, 78, 0, 282, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 75, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 0, 0, 0, 0, 80, 80, 22, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 283, 0, 284, 285, 0, 23, 0, 24, 0, 0, 286, 0, 0, 0, 0, 0], [0, 75, 0, 176, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 287, 287, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 184, 185, 186, 187, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 185, 185, 187, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 289, 289, 187, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 290, 289, 289, 187, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 291, 292, 293, 294, 295, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 277, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 0, 0, 0, 281, 80, 80, 22, 23, 0, 0, 0, 0, 192, 281, 0, 0, 0, 0], [0, 0, 0, 189, 170, 190, 278, 22, 23, 0, 24, 0, 0, 192, 174, 0, 0, 27, 0], [0, 0, 0, 189, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 0, 0, 76, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 175, 296, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 297, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 299, 0, 0, 0, 97, 300, 0, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 0, 0, 0, 301, 101, 101, 32, 33, 0, 0, 0, 0, 199, 301, 0, 0, 0, 0], [0, 0, 0, 195, 196, 197, 298, 32, 33, 0, 34, 0, 0, 199, 200, 0, 0, 37, 0], [0, 0, 0, 195, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 302, 111, 0, 0, 97, 300, 0, 33, 0, 34, 0, 0, 0, 99, 0, 302, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 96, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 0, 0, 0, 0, 101, 101, 32, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 303, 0, 304, 305, 0, 33, 0, 34, 0, 0, 306, 0, 0, 0, 0, 0], [0, 96, 0, 202, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 307, 307, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 210, 211, 212, 213, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 211, 211, 213, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 309, 309, 213, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 310, 309, 309, 213, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 311, 312, 313, 314, 315, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 297, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 0, 0, 0, 301, 101, 101, 32, 33, 0, 0, 0, 0, 218, 301, 0, 0, 0, 0], [0, 0, 0, 215, 196, 216, 298, 32, 33, 0, 34, 0, 0, 218, 200, 0, 0, 37, 0], [0, 0, 0, 215, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 0, 0, 97, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 201, 316, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 9, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0], [0, 0, 0, 317, 318, 319, 320, 8, 9, 0, 10, 0, 0, 321, 322, 0, 0, 16, 0], [0, 223, 0, 323, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 223, 0, 0, 0, 121, 324, 0, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 0, 0, 325, 318, 326, 327, 8, 9, 0, 10, 0, 0, 328, 322, 0, 0, 16, 0], [0, 0, 0, 64, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0], [0, 0, 0, 227, 0, 228, 121, 0, 9, 0, 10, 0, 0, 230, 0, 0, 0, 0, 0], [0, 0, 0, 227, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0], [0, 0, 0, 0, 0, 329, 329, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 236, 237, 238, 239, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 237, 237, 239, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 331, 331, 239, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 332, 331, 331, 239, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 333, 40, 121, 334, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 335, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 337, 0, 0, 0, 137, 338, 0, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 0, 0, 0, 339, 141, 141, 57, 58, 0, 0, 0, 0, 244, 339, 0, 0, 0, 0], [0, 0, 0, 240, 241, 242, 336, 57, 58, 0, 59, 0, 0, 244, 245, 0, 0, 62, 0], [0, 0, 0, 240, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 340, 151, 0, 0, 137, 338, 0, 58, 0, 59, 0, 0, 0, 139, 0, 340, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 136, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 0, 0, 0, 0, 141, 141, 57, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 341, 0, 342, 343, 0, 58, 0, 59, 0, 0, 344, 0, 0, 0, 0, 0], [0, 136, 0, 247, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 345, 345, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 255, 256, 257, 258, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 256, 256, 258, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 347, 347, 258, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 348, 347, 347, 258, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 349, 350, 351, 352, 353, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 335, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 0, 0, 0, 339, 141, 141, 57, 58, 0, 0, 0, 0, 263, 339, 0, 0, 0, 0], [0, 0, 0, 260, 241, 261, 336, 57, 58, 0, 59, 0, 0, 263, 245, 0, 0, 62, 0], [0, 0, 0, 260, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 0, 0, 137, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 246, 354, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 126, 126, 8, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 355, 90, 0, 0, 121, 125, 0, 9, 0, 10, 0, 0, 0, 42, 0, 355, 0, 0], [0, 0, 0, 0, 0, 356, 356, 269, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 357, 358, 359, 360, 361, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 364, 116, 365, 366, 8, 161, 0, 162, 0, 0, 367, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 368, 368, 0, 161, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 40, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 0, 0, 0, 281, 80, 80, 22, 23, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0], [0, 0, 0, 369, 370, 371, 372, 22, 23, 0, 24, 0, 0, 373, 374, 0, 0, 27, 0], [0, 279, 0, 375, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 279, 0, 0, 0, 175, 376, 0, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 0, 0, 377, 370, 378, 379, 22, 23, 0, 24, 0, 0, 380, 374, 0, 0, 27, 0], [0, 0, 0, 90, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0], [0, 0, 0, 283, 0, 284, 175, 0, 23, 0, 24, 0, 0, 286, 0, 0, 0, 0, 0], [0, 0, 0, 283, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0], [0, 0, 0, 0, 0, 381, 381, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 292, 293, 294, 295, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 293, 293, 295, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 383, 383, 295, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 384, 383, 383, 295, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 385, 76, 175, 386, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 76, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 0, 0, 0, 301, 101, 101, 32, 33, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0], [0, 0, 0, 387, 388, 389, 390, 32, 33, 0, 34, 0, 0, 391, 392, 0, 0, 37, 0], [0, 299, 0, 393, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 299, 0, 0, 0, 201, 394, 0, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 0, 0, 395, 388, 396, 397, 32, 33, 0, 34, 0, 0, 398, 392, 0, 0, 37, 0], [0, 0, 0, 111, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0], [0, 0, 0, 303, 0, 304, 201, 0, 33, 0, 34, 0, 0, 306, 0, 0, 0, 0, 0], [0, 0, 0, 303, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0], [0, 0, 0, 0, 0, 399, 399, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 312, 313, 314, 315, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 313, 313, 315, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 401, 401, 315, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 402, 401, 401, 315, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 403, 97, 201, 404, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 97, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 405, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 407, 0, 0, 0, 40, 408, 0, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 0, 0, 0, 409, 44, 44, 8, 9, 0, 0, 0, 0, 321, 409, 0, 0, 0, 0], [0, 0, 0, 317, 318, 319, 406, 8, 9, 0, 10, 0, 0, 321, 322, 0, 0, 16, 0], [0, 0, 0, 317, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 410, 64, 0, 0, 40, 408, 0, 9, 0, 10, 0, 0, 0, 42, 0, 410, 0, 0], [0, 223, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 223, 0, 323, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 0, 0, 405, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 0, 0, 0, 409, 44, 44, 8, 9, 0, 0, 0, 0, 328, 409, 0, 0, 0, 0], [0, 0, 0, 325, 318, 326, 406, 8, 9, 0, 10, 0, 0, 328, 322, 0, 0, 16, 0], [0, 0, 0, 325, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 0], [0, 0, 0, 0, 0, 411, 411, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 40, 121, 334, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 413, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 0, 0, 0, 339, 141, 141, 57, 58, 0, 0, 0, 0, 0, 339, 0, 0, 0, 0], [0, 0, 0, 414, 415, 416, 417, 57, 58, 0, 59, 0, 0, 418, 419, 0, 0, 62, 0], [0, 337, 0, 420, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 337, 0, 0, 0, 246, 421, 0, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 0, 0, 422, 415, 423, 424, 57, 58, 0, 59, 0, 0, 425, 419, 0, 0, 62, 0], [0, 0, 0, 151, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0], [0, 0, 0, 341, 0, 342, 246, 0, 58, 0, 59, 0, 0, 344, 0, 0, 0, 0, 0], [0, 0, 0, 341, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0], [0, 0, 0, 0, 0, 426, 426, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 350, 351, 352, 353, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 351, 351, 353, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 428, 428, 353, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 429, 428, 428, 353, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 430, 137, 246, 431, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 137, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 432, 116, 433, 434, 8, 161, 0, 162, 0, 0, 435, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 180, 180, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 358, 359, 360, 361, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 359, 359, 361, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 436, 436, 361, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 437, 436, 436, 361, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 438, 439, 440, 441, 442, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 443, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 444, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 161, 0, 0, 0, 0, 367, 225, 0, 0, 0, 0], [0, 0, 0, 364, 116, 365, 445, 8, 161, 0, 162, 0, 0, 367, 120, 0, 0, 16, 0], [0, 0, 0, 364, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 446, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 448, 0, 0, 0, 76, 449, 0, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 0, 0, 0, 450, 80, 80, 22, 23, 0, 0, 0, 0, 373, 450, 0, 0, 0, 0], [0, 0, 0, 369, 370, 371, 447, 22, 23, 0, 24, 0, 0, 373, 374, 0, 0, 27, 0], [0, 0, 0, 369, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 451, 90, 0, 0, 76, 449, 0, 23, 0, 24, 0, 0, 0, 78, 0, 451, 0, 0], [0, 279, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 279, 0, 375, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 0, 0, 446, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 0, 0, 0, 450, 80, 80, 22, 23, 0, 0, 0, 0, 380, 450, 0, 0, 0, 0], [0, 0, 0, 377, 370, 378, 447, 22, 23, 0, 24, 0, 0, 380, 374, 0, 0, 27, 0], [0, 0, 0, 377, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0], [0, 0, 0, 0, 0, 452, 452, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 76, 175, 386, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 454, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 455, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 457, 0, 0, 0, 97, 458, 0, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 0, 0, 0, 459, 101, 101, 32, 33, 0, 0, 0, 0, 391, 459, 0, 0, 0, 0], [0, 0, 0, 387, 388, 389, 456, 32, 33, 0, 34, 0, 0, 391, 392, 0, 0, 37, 0], [0, 0, 0, 387, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 460, 111, 0, 0, 97, 458, 0, 33, 0, 34, 0, 0, 0, 99, 0, 460, 0, 0], [0, 299, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 299, 0, 393, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 0, 0, 455, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 0, 0, 0, 459, 101, 101, 32, 33, 0, 0, 0, 0, 398, 459, 0, 0, 0, 0], [0, 0, 0, 395, 388, 396, 456, 32, 33, 0, 34, 0, 0, 398, 392, 0, 0, 37, 0], [0, 0, 0, 395, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0], [0, 0, 0, 0, 0, 461, 461, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 97, 201, 404, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 463, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 0, 0, 0, 409, 44, 44, 8, 9, 0, 0, 0, 0, 0, 409, 0, 0, 0, 0], [0, 0, 0, 464, 465, 466, 467, 8, 9, 0, 10, 0, 0, 468, 469, 0, 0, 16, 0], [0, 407, 0, 470, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 407, 0, 0, 0, 121, 471, 0, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 0, 0, 472, 465, 473, 474, 8, 9, 0, 10, 0, 0, 475, 469, 0, 0, 16, 0], [0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, 0], [0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 477, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 479, 0, 0, 0, 137, 480, 0, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 0, 0, 0, 481, 141, 141, 57, 58, 0, 0, 0, 0, 418, 481, 0, 0, 0, 0], [0, 0, 0, 414, 415, 416, 478, 57, 58, 0, 59, 0, 0, 418, 419, 0, 0, 62, 0], [0, 0, 0, 414, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 482, 151, 0, 0, 137, 480, 0, 58, 0, 59, 0, 0, 0, 139, 0, 482, 0, 0], [0, 337, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 337, 0, 420, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 0, 0, 477, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 0, 0, 0, 481, 141, 141, 57, 58, 0, 0, 0, 0, 425, 481, 0, 0, 0, 0], [0, 0, 0, 422, 415, 423, 478, 57, 58, 0, 59, 0, 0, 425, 419, 0, 0, 62, 0], [0, 0, 0, 422, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0], [0, 0, 0, 0, 0, 483, 483, 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 137, 246, 431, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 485, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 444, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 161, 0, 0, 0, 0, 435, 225, 0, 0, 0, 0], [0, 0, 0, 432, 116, 433, 445, 8, 161, 0, 162, 0, 0, 435, 120, 0, 0, 16, 0], [0, 0, 0, 432, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 486, 486, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 439, 440, 441, 442, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 440, 440, 442, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 488, 488, 442, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 489, 488, 488, 442, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 490, 491, 492, 493, 494, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 495, 0, 496, 497, 0, 161, 0, 162, 0, 0, 498, 0, 0, 0, 0, 0], [0, 0, 0, 0, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 161, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0], [0, 0, 0, 0, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 0, 0, 0, 450, 80, 80, 22, 23, 0, 0, 0, 0, 0, 450, 0, 0, 0, 0], [0, 0, 0, 499, 500, 501, 502, 22, 23, 0, 24, 0, 0, 503, 504, 0, 0, 27, 0], [0, 448, 0, 505, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 448, 0, 0, 0, 175, 506, 0, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 0, 0, 507, 500, 508, 509, 22, 23, 0, 24, 0, 0, 510, 504, 0, 0, 27, 0], [0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0], [0, 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 0, 0, 0, 459, 101, 101, 32, 33, 0, 0, 0, 0, 0, 459, 0, 0, 0, 0], [0, 0, 0, 512, 513, 514, 515, 32, 33, 0, 34, 0, 0, 516, 517, 0, 0, 37, 0], [0, 457, 0, 518, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 457, 0, 0, 0, 201, 519, 0, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 0, 0, 520, 513, 521, 522, 32, 33, 0, 34, 0, 0, 523, 517, 0, 0, 37, 0], [0, 0, 0, 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, 0], [0, 0, 0, 0, 0, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 525, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 527, 0, 0, 0, 40, 528, 0, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 0, 0, 0, 529, 44, 44, 8, 9, 0, 0, 0, 0, 468, 529, 0, 0, 0, 0], [0, 0, 0, 464, 465, 466, 526, 8, 9, 0, 10, 0, 0, 468, 469, 0, 0, 16, 0], [0, 0, 0, 464, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 530, 64, 0, 0, 40, 528, 0, 9, 0, 10, 0, 0, 0, 42, 0, 530, 0, 0], [0, 407, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 407, 0, 470, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 0, 0, 525, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 0, 0, 0, 529, 44, 44, 8, 9, 0, 0, 0, 0, 475, 529, 0, 0, 0, 0], [0, 0, 0, 472, 465, 473, 526, 8, 9, 0, 10, 0, 0, 475, 469, 0, 0, 16, 0], [0, 0, 0, 472, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0], [0, 0, 0, 0, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 0, 0, 0, 481, 141, 141, 57, 58, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0], [0, 0, 0, 531, 532, 533, 534, 57, 58, 0, 59, 0, 0, 535, 536, 0, 0, 62, 0], [0, 479, 0, 537, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 479, 0, 0, 0, 246, 538, 0, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 0, 0, 539, 532, 540, 541, 57, 58, 0, 59, 0, 0, 542, 536, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0], [0, 0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0], [0, 0, 0, 0, 0, 544, 544, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 491, 492, 493, 494, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 492, 492, 494, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 546, 546, 494, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 547, 546, 546, 494, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 548, 549, 368, 550, 0, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 274, 0, 368, 368, 0, 161, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0], [0, 0, 0, 495, 0, 496, 368, 0, 161, 0, 162, 0, 0, 498, 0, 0, 0, 0, 0], [0, 0, 0, 495, 0, 368, 368, 0, 161, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 551, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 553, 0, 0, 0, 76, 554, 0, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 0, 0, 0, 555, 80, 80, 22, 23, 0, 0, 0, 0, 503, 555, 0, 0, 0, 0], [0, 0, 0, 499, 500, 501, 552, 22, 23, 0, 24, 0, 0, 503, 504, 0, 0, 27, 0], [0, 0, 0, 499, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 556, 90, 0, 0, 76, 554, 0, 23, 0, 24, 0, 0, 0, 78, 0, 556, 0, 0], [0, 448, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 448, 0, 505, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 0, 0, 551, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 0, 0, 0, 555, 80, 80, 22, 23, 0, 0, 0, 0, 510, 555, 0, 0, 0, 0], [0, 0, 0, 507, 500, 508, 552, 22, 23, 0, 24, 0, 0, 510, 504, 0, 0, 27, 0], [0, 0, 0, 507, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0], [0, 0, 0, 557, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 559, 0, 0, 0, 97, 560, 0, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 0, 0, 0, 561, 101, 101, 32, 33, 0, 0, 0, 0, 516, 561, 0, 0, 0, 0], [0, 0, 0, 512, 513, 514, 558, 32, 33, 0, 34, 0, 0, 516, 517, 0, 0, 37, 0], [0, 0, 0, 512, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 562, 111, 0, 0, 97, 560, 0, 33, 0, 34, 0, 0, 0, 99, 0, 562, 0, 0], [0, 457, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 457, 0, 518, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 0, 0, 557, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 0, 0, 0, 561, 101, 101, 32, 33, 0, 0, 0, 0, 523, 561, 0, 0, 0, 0], [0, 0, 0, 520, 513, 521, 558, 32, 33, 0, 34, 0, 0, 523, 517, 0, 0, 37, 0], [0, 0, 0, 520, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0], [0, 0, 0, 0, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 0, 0, 0, 529, 44, 44, 8, 9, 0, 0, 0, 0, 0, 529, 0, 0, 0, 0], [0, 0, 0, 563, 66, 564, 565, 8, 9, 0, 10, 0, 0, 566, 68, 0, 0, 16, 0], [0, 527, 0, 567, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 527, 0, 0, 0, 121, 568, 0, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 0, 0, 569, 66, 570, 571, 8, 9, 0, 10, 0, 0, 572, 68, 0, 0, 16, 0], [0, 0, 0, 573, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 575, 0, 0, 0, 137, 576, 0, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 0, 0, 0, 577, 141, 141, 57, 58, 0, 0, 0, 0, 535, 577, 0, 0, 0, 0], [0, 0, 0, 531, 532, 533, 574, 57, 58, 0, 59, 0, 0, 535, 536, 0, 0, 62, 0], [0, 0, 0, 531, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 578, 151, 0, 0, 137, 576, 0, 58, 0, 59, 0, 0, 0, 139, 0, 578, 0, 0], [0, 479, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 479, 0, 537, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 0, 0, 573, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 0, 0, 0, 577, 141, 141, 57, 58, 0, 0, 0, 0, 542, 577, 0, 0, 0, 0], [0, 0, 0, 539, 532, 540, 574, 57, 58, 0, 59, 0, 0, 542, 536, 0, 0, 62, 0], [0, 0, 0, 539, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, 0], [0, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 0], [0, 0, 0, 0, 0, 579, 579, 494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 549, 368, 550, 0, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 368, 368, 0, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 581, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 0, 0, 0, 555, 80, 80, 22, 23, 0, 0, 0, 0, 0, 555, 0, 0, 0, 0], [0, 0, 0, 582, 91, 583, 584, 22, 23, 0, 24, 0, 0, 585, 93, 0, 0, 27, 0], [0, 553, 0, 586, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 553, 0, 0, 0, 175, 587, 0, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 0, 0, 588, 91, 589, 590, 22, 23, 0, 24, 0, 0, 591, 93, 0, 0, 27, 0], [0, 0, 0, 0, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 0, 0, 0, 561, 101, 101, 32, 33, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0], [0, 0, 0, 592, 112, 593, 594, 32, 33, 0, 34, 0, 0, 595, 114, 0, 0, 37, 0], [0, 559, 0, 596, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 559, 0, 0, 0, 201, 597, 0, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 0, 0, 598, 112, 599, 600, 32, 33, 0, 34, 0, 0, 601, 114, 0, 0, 37, 0], [0, 0, 0, 602, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 0, 0, 0, 165, 44, 44, 8, 9, 0, 0, 0, 0, 566, 165, 0, 0, 0, 0], [0, 0, 0, 563, 66, 564, 67, 8, 9, 0, 10, 0, 0, 566, 68, 0, 0, 16, 0], [0, 0, 0, 563, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 527, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 527, 0, 567, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 0, 0, 602, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 0, 0, 0, 165, 44, 44, 8, 9, 0, 0, 0, 0, 572, 165, 0, 0, 0, 0], [0, 0, 0, 569, 66, 570, 67, 8, 9, 0, 10, 0, 0, 572, 68, 0, 0, 16, 0], [0, 0, 0, 569, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 0, 0, 0, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 0, 0, 0, 577, 141, 141, 57, 58, 0, 0, 0, 0, 0, 577, 0, 0, 0, 0], [0, 0, 0, 603, 152, 604, 605, 57, 58, 0, 59, 0, 0, 606, 154, 0, 0, 62, 0], [0, 575, 0, 607, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 575, 0, 0, 0, 246, 608, 0, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 0, 0, 609, 152, 610, 611, 57, 58, 0, 59, 0, 0, 612, 154, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, 0, 0], [0, 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 614, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 0, 0, 0, 194, 80, 80, 22, 23, 0, 0, 0, 0, 585, 194, 0, 0, 0, 0], [0, 0, 0, 582, 91, 583, 92, 22, 23, 0, 24, 0, 0, 585, 93, 0, 0, 27, 0], [0, 0, 0, 582, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 553, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 553, 0, 586, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 0, 0, 614, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 0, 0, 0, 194, 80, 80, 22, 23, 0, 0, 0, 0, 591, 194, 0, 0, 0, 0], [0, 0, 0, 588, 91, 589, 92, 22, 23, 0, 24, 0, 0, 591, 93, 0, 0, 27, 0], [0, 0, 0, 588, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 0, 0, 615, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 0, 0, 0, 220, 101, 101, 32, 33, 0, 0, 0, 0, 595, 220, 0, 0, 0, 0], [0, 0, 0, 592, 112, 593, 113, 32, 33, 0, 34, 0, 0, 595, 114, 0, 0, 37, 0], [0, 0, 0, 592, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 559, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 559, 0, 596, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 0, 0, 615, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 0, 0, 0, 220, 101, 101, 32, 33, 0, 0, 0, 0, 601, 220, 0, 0, 0, 0], [0, 0, 0, 598, 112, 599, 113, 32, 33, 0, 34, 0, 0, 601, 114, 0, 0, 37, 0], [0, 0, 0, 598, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 0, 0, 0, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 0, 0, 616, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0], [0, 0, 0, 0, 265, 141, 141, 57, 58, 0, 0, 0, 0, 606, 265, 0, 0, 0, 0], [0, 0, 0, 603, 152, 604, 153, 57, 58, 0, 59, 0, 0, 606, 154, 0, 0, 62, 0], [0, 0, 0, 603, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0], [0, 575, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 575, 0, 607, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 0, 0, 616, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0], [0, 0, 0, 0, 265, 141, 141, 57, 58, 0, 0, 0, 0, 612, 265, 0, 0, 0, 0], [0, 0, 0, 609, 152, 610, 153, 57, 58, 0, 59, 0, 0, 612, 154, 0, 0, 62, 0], [0, 0, 0, 609, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 549, 0, 0], [0, 0, 0, 0, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 0, 0, 0, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 0, 0, 0, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0]];\nvar accepting = [false, true, true, true, true, true, false, false, true, true, true, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, true, true, true, true, true, true, false, true, false, true, true, false, false, true, true, true, true, true, true, false, false, true, true, true, true, true, true, true, true, true, true, false, true, true, false, true, true, true, false, true, true, true, false, true, false, true, true, false, false, true, true, true, true, true, true, true, false, true, true, false, true, true, true, false, true, false, true, true, false, false, true, true, true, true, true, true, true, false, true, true, true, false, true, true, true, false, true, false, true, true, false, false, false, true, true, false, false, true, true, true, true, true, true, false, true, false, true, true, false, false, true, true, true, true, true, true, true, false, true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, true, true, true, false, true, false, true, true, false, false, false, true, true, false, false, true, true, true, false, true, true, true, true, true, true, false, true, true, true, false, true, false, true, true, false, false, false, true, true, false, false, true, true, true, false, true, true, true, true, true, false, true, true, true, true, true, false, true, true, false, false, false, false, true, true, false, false, true, true, true, false, true, true, true, false, true, false, true, true, false, false, false, true, true, false, false, true, true, true, false, true, true, true, true, false, true, false, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, false, true, true, false, false, false, false, true, true, false, false, true, true, true, false, true, true, true, true, true, false, true, true, false, false, false, false, true, true, false, false, true, true, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, true, false, true, false, true, true, true, true, true, false, true, true, false, false, false, false, true, true, false, false, true, true, true, false, true, true, false, false, true, false, true, true, false, true, true, false, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, true, false, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, true, false, true, false, true, true, true, true, false, false, false, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, true, false, true, false, true, true, false, false, true, true, false, false, true, true, true, false, true, false, true, true, true, true, false, false, false, true, false, true, true, true, true, false, false, false, true, true, false, true, true, true, true, true, true, false, true, true, false, true, false, true, true, true, true, false, false, false, false, false, false, false, true, true, false, false, true, true, false, true, true, true, true, false, true, true, true, true, true, true, false, true, true, false, true, true, false, true, true, true, true, true, true, false, true, true, false, true, false, true, true, true, true, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, false, true, true, false, true, false, true, true, true, true, true, false, true, true, true, true, true, false, true, true, true, true, true, false, true, true, true, false, true, true, true, true, false, false, false, true, false, true, true, true, true, true, false, true, true, true, false, true, true, true, true, true, false, true, true, true, true, false, true, true, true, true, true, false, true, true, false, true, true, true];\nvar tags = [[], [\"broken_cluster\"], [\"consonant_syllable\"], [\"vowel_syllable\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"standalone_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"consonant_syllable\"], [\"broken_cluster\"], [\"symbol_cluster\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"symbol_cluster\"], [], [\"symbol_cluster\"], [\"symbol_cluster\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"symbol_cluster\"], [\"symbol_cluster\"], [\"symbol_cluster\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [\"broken_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"broken_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"broken_cluster\"], [\"symbol_cluster\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [], [], [\"broken_cluster\"], [], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [], [], [\"consonant_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [], [], [\"vowel_syllable\"], [], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [], [], [\"standalone_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [], [], [], [], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [], [], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"broken_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"consonant_syllable\"], [\"vowel_syllable\"], [\"standalone_cluster\"]];\nvar indicMachine = {\n  stateTable: stateTable,\n  accepting: accepting,\n  tags: tags\n};\nvar categories = [\"O\", \"IND\", \"S\", \"GB\", \"B\", \"FM\", \"CGJ\", \"VMAbv\", \"VMPst\", \"VAbv\", \"VPst\", \"CMBlw\", \"VPre\", \"VBlw\", \"H\", \"VMBlw\", \"CMAbv\", \"MBlw\", \"CS\", \"R\", \"SUB\", \"MPst\", \"MPre\", \"FAbv\", \"FPst\", \"FBlw\", \"null\", \"SMAbv\", \"SMBlw\", \"VMPre\", \"ZWNJ\", \"ZWJ\", \"WJ\", \"M\", \"VS\", \"N\", \"HN\", \"MAbv\"];\nvar decompositions = {\n  \"2507\": [2503, 2494],\n  \"2508\": [2503, 2519],\n  \"2888\": [2887, 2902],\n  \"2891\": [2887, 2878],\n  \"2892\": [2887, 2903],\n  \"3018\": [3014, 3006],\n  \"3019\": [3015, 3006],\n  \"3020\": [3014, 3031],\n  \"3144\": [3142, 3158],\n  \"3264\": [3263, 3285],\n  \"3271\": [3270, 3285],\n  \"3272\": [3270, 3286],\n  \"3274\": [3270, 3266],\n  \"3275\": [3270, 3266, 3285],\n  \"3402\": [3398, 3390],\n  \"3403\": [3399, 3390],\n  \"3404\": [3398, 3415],\n  \"3546\": [3545, 3530],\n  \"3548\": [3545, 3535],\n  \"3549\": [3545, 3535, 3530],\n  \"3550\": [3545, 3551],\n  \"3635\": [3661, 3634],\n  \"3763\": [3789, 3762],\n  \"3955\": [3953, 3954],\n  \"3957\": [3953, 3956],\n  \"3958\": [4018, 3968],\n  \"3959\": [4018, 3953, 3968],\n  \"3960\": [4019, 3968],\n  \"3961\": [4019, 3953, 3968],\n  \"3969\": [3953, 3968],\n  \"6971\": [6970, 6965],\n  \"6973\": [6972, 6965],\n  \"6976\": [6974, 6965],\n  \"6977\": [6975, 6965],\n  \"6979\": [6978, 6965],\n  \"69934\": [69937, 69927],\n  \"69935\": [69938, 69927],\n  \"70475\": [70471, 70462],\n  \"70476\": [70471, 70487],\n  \"70843\": [70841, 70842],\n  \"70844\": [70841, 70832],\n  \"70846\": [70841, 70845],\n  \"71098\": [71096, 71087],\n  \"71099\": [71097, 71087]\n};\nvar stateTable$1 = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [2, 2, 3, 4, 4, 5, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 17, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 2, 0, 0, 24, 0, 25], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 28, 0, 0, 0, 0, 0, 27, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 39, 0, 0, 47], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 0, 12, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 0, 9, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 11, 12, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 0, 9, 0, 0, 12, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 11, 12, 0, 14, 0, 0, 0, 0, 0, 11, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 4, 4, 5, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 48, 11, 12, 13, 14, 48, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 49, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 11, 12, 0, 14, 0, 16, 0, 0, 0, 11, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 51, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 11, 12, 0, 14, 0, 16, 0, 0, 0, 11, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 0, 36, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 0, 33, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 0, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 35, 36, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 0, 33, 0, 0, 36, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 0, 31, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 35, 36, 0, 38, 0, 0, 0, 0, 0, 35, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 52, 35, 36, 37, 38, 52, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 53, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 35, 36, 0, 38, 0, 40, 0, 0, 0, 35, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 35, 36, 0, 38, 0, 40, 0, 0, 0, 35, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 48, 11, 12, 13, 14, 0, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 48, 11, 12, 13, 14, 48, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 52, 35, 36, 37, 38, 0, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 52, 35, 36, 37, 38, 52, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 51, 0]];\nvar accepting$1 = [false, true, true, true, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true];\nvar tags$1 = [[], [\"broken_cluster\"], [\"independent_cluster\"], [\"symbol_cluster\"], [\"standard_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"numeral_cluster\"], [\"broken_cluster\"], [\"independent_cluster\"], [\"symbol_cluster\"], [\"symbol_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"virama_terminated_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"numeral_cluster\"], [\"number_joiner_terminated_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"numeral_cluster\"]];\nvar useData = {\n  categories: categories,\n  decompositions: decompositions,\n  stateTable: stateTable$1,\n  accepting: accepting$1,\n  tags: tags$1\n};\n\n// Cateories used in the OpenType spec:\n// https://www.microsoft.com/typography/otfntdev/devanot/shaping.aspx\nvar CATEGORIES = {\n  X: 1 << 0,\n  C: 1 << 1,\n  V: 1 << 2,\n  N: 1 << 3,\n  H: 1 << 4,\n  ZWNJ: 1 << 5,\n  ZWJ: 1 << 6,\n  M: 1 << 7,\n  SM: 1 << 8,\n  VD: 1 << 9,\n  A: 1 << 10,\n  Placeholder: 1 << 11,\n  Dotted_Circle: 1 << 12,\n  RS: 1 << 13,\n  // Register Shifter, used in Khmer OT spec.\n  Coeng: 1 << 14,\n  // Khmer-style Virama.\n  Repha: 1 << 15,\n  // Atomically-encoded logical or visual repha.\n  Ra: 1 << 16,\n  CM: 1 << 17,\n  // Consonant-Medial.\n  Symbol: 1 << 18 // Avagraha, etc that take marks (SM,A,VD).\n}; // Visual positions in a syllable from left to right.\n\nvar POSITIONS = {\n  Start: 1 << 0,\n  Ra_To_Become_Reph: 1 << 1,\n  Pre_M: 1 << 2,\n  Pre_C: 1 << 3,\n  Base_C: 1 << 4,\n  After_Main: 1 << 5,\n  Above_C: 1 << 6,\n  Before_Sub: 1 << 7,\n  Below_C: 1 << 8,\n  After_Sub: 1 << 9,\n  Before_Post: 1 << 10,\n  Post_C: 1 << 11,\n  After_Post: 1 << 12,\n  Final_C: 1 << 13,\n  SMVD: 1 << 14,\n  End: 1 << 15\n};\nvar CONSONANT_FLAGS = CATEGORIES.C | CATEGORIES.Ra | CATEGORIES.CM | CATEGORIES.V | CATEGORIES.Placeholder | CATEGORIES.Dotted_Circle;\nvar JOINER_FLAGS = CATEGORIES.ZWJ | CATEGORIES.ZWNJ;\nvar HALANT_OR_COENG_FLAGS = CATEGORIES.H | CATEGORIES.Coeng;\nvar INDIC_CONFIGS = {\n  Default: {\n    hasOldSpec: false,\n    virama: 0,\n    basePos: 'Last',\n    rephPos: POSITIONS.Before_Post,\n    rephMode: 'Implicit',\n    blwfMode: 'Pre_And_Post'\n  },\n  Devanagari: {\n    hasOldSpec: true,\n    virama: 0x094D,\n    basePos: 'Last',\n    rephPos: POSITIONS.Before_Post,\n    rephMode: 'Implicit',\n    blwfMode: 'Pre_And_Post'\n  },\n  Bengali: {\n    hasOldSpec: true,\n    virama: 0x09CD,\n    basePos: 'Last',\n    rephPos: POSITIONS.After_Sub,\n    rephMode: 'Implicit',\n    blwfMode: 'Pre_And_Post'\n  },\n  Gurmukhi: {\n    hasOldSpec: true,\n    virama: 0x0A4D,\n    basePos: 'Last',\n    rephPos: POSITIONS.Before_Sub,\n    rephMode: 'Implicit',\n    blwfMode: 'Pre_And_Post'\n  },\n  Gujarati: {\n    hasOldSpec: true,\n    virama: 0x0ACD,\n    basePos: 'Last',\n    rephPos: POSITIONS.Before_Post,\n    rephMode: 'Implicit',\n    blwfMode: 'Pre_And_Post'\n  },\n  Oriya: {\n    hasOldSpec: true,\n    virama: 0x0B4D,\n    basePos: 'Last',\n    rephPos: POSITIONS.After_Main,\n    rephMode: 'Implicit',\n    blwfMode: 'Pre_And_Post'\n  },\n  Tamil: {\n    hasOldSpec: true,\n    virama: 0x0BCD,\n    basePos: 'Last',\n    rephPos: POSITIONS.After_Post,\n    rephMode: 'Implicit',\n    blwfMode: 'Pre_And_Post'\n  },\n  Telugu: {\n    hasOldSpec: true,\n    virama: 0x0C4D,\n    basePos: 'Last',\n    rephPos: POSITIONS.After_Post,\n    rephMode: 'Explicit',\n    blwfMode: 'Post_Only'\n  },\n  Kannada: {\n    hasOldSpec: true,\n    virama: 0x0CCD,\n    basePos: 'Last',\n    rephPos: POSITIONS.After_Post,\n    rephMode: 'Implicit',\n    blwfMode: 'Post_Only'\n  },\n  Malayalam: {\n    hasOldSpec: true,\n    virama: 0x0D4D,\n    basePos: 'Last',\n    rephPos: POSITIONS.After_Main,\n    rephMode: 'Log_Repha',\n    blwfMode: 'Pre_And_Post'\n  },\n  // Handled by UniversalShaper\n  // Sinhala: {\n  //   hasOldSpec: false,\n  //   virama: 0x0DCA,\n  //   basePos: 'Last_Sinhala',\n  //   rephPos: POSITIONS.After_Main,\n  //   rephMode: 'Explicit',\n  //   blwfMode: 'Pre_And_Post'\n  // },\n  Khmer: {\n    hasOldSpec: false,\n    virama: 0x17D2,\n    basePos: 'First',\n    rephPos: POSITIONS.Ra_To_Become_Reph,\n    rephMode: 'Vis_Repha',\n    blwfMode: 'Pre_And_Post'\n  }\n}; // Additional decompositions that aren't in Unicode\n\nvar INDIC_DECOMPOSITIONS = {\n  // Khmer\n  0x17BE: [0x17C1, 0x17BE],\n  0x17BF: [0x17C1, 0x17BF],\n  0x17C0: [0x17C1, 0x17C0],\n  0x17C4: [0x17C1, 0x17C4],\n  0x17C5: [0x17C1, 0x17C5]\n};\nvar decompositions$1 = useData.decompositions;\nvar trie$1 = new UnicodeTrie(Buffer(\"AAARAAAAAABg2AAAAWYPmfDtnXuMXFUdx+/uzs7M7szudAtECGJRIMRQbUAithQWkGAKiVhNpFVRRAmIQVCDkDYICGotIA9BTCz8IeUviv7BQ2PBtBIRLBBQIWAUsKg1BKxRAqIgfs/cc+aeOXPej3tnZX7JJ/dxzj3nd36/8753Z5fUsuxgsAwcAU4Gp4BPgM+Cd4P3RjieDs4GXwLrHJ5bDy4DG8A14LvgZrAZbAF3gns0z18ALgY/B78C94NHwBPgabAE/AX8DbwM5sF/QX0yD5vFcU/wVnAgWAoOAyvAceBE8CGwBpwGzgJfAF8BXwXfAFeC68EmsBlsAXeCreA+8CB4DDwF/gh2gd3gFfAGmKxn2QzYC+wHDgRLweFgJTgWrKrnuq/GcQ04jV6fheN54EJwEbgcXAG+Q8O/j+Mt4DZwB9haz8t9Hz3a8iCN/xiOvwRP0evH6fE68AzOH+Ke2eWYhw3PcGnuxvkr4A3QaGRZB7wFLAEHg2XgiEZ/fHKcp/ceBh/A+cngFPCpRm6vM3E8l8a5gN67GMdvgqsbeX2ap9yI601gM7gN3AG20mfuo8cdOP6GpvdUg9oKxz839GV90RDO2/glxN1B790NXsN1rZll7WYRdw+c70uvTwIHNAfTO0RyL5TDmnnbc3lmRQI9UnM0dD5eovfz4FpJ/BNpXNYWV+N6Lfg0hY97JK1vn+Pur9DoQur2F7m436bHDUK8C5t5/8vruo4+97WmXG+GLmzEiBF+PDwEOowYMWLEiBEjRoxYeBw5BDqIPEfXut9yWN+vVNxfrnnmWqR/PdgENoMt4E5wD9gOHgCPgifBs2BXM99b2o3jP8F/wMRUlrXAHNgHvH0q3895J46HguXgWHAGLctmLv9VuL96qnp7jxgxYsSbCbJvuRZ97/tqxT59VVRtixEjRsThBG7OSt5zzoPT0M+cBc4T5noXOs79TqLHeZrHUeCSqeJ96gacXy2kecNU8V6Hh7yXuQlhtw7B/PO1RTkr52Aj8JNFZjYg3gOKuC/g/v6Ls2wNuAY8urg//PcIb+6RZXuDNeCS6SzbBrJWlh0DLiFHco8ed9IjzzvaWfa9sZzTcf6D9mCcnbg3PlNcH4fzS8F2MDaLdQG4dLZIJxbbaZqv4ri8k58f3+mPs66T6/TTzqDeI0aMGDGiHP5dcR8ce/xxYcWi6vOfr725uRzcjnngXVOD61Hync+9uL+Nmyfej/NHpvL56A5Jeuz7uyfo+pqcPz2Vf1NH0ttJ03pekt8SmuY/EPYy9zzbN319ym/9TL6ZIt9MHCXRdxJtoAkWTRdz472n87D9cTwYLJvuz++I6WIePo/zE8AHp4v8WLyP0nufnM6/+zoDx8+DL08P6r9+urheRtO+jD6/cdrsx3mqu8w+xH4PScKIXa5D2jeCm8Et4DbwI/BjcC/4BXgI/Bb8DuwEu8Bu8Ap4A9RaRZptnO8J9gUHgEPAoWA5OLY1qMO90GEV7q+mYWtxPBWcIYnL4p+DsPNbxfVFOP86uAr8DNc34HgTDb8Vx9sVaRFI/LtagzYjnCqpb908EX87eBA8Bh4Hf2jle/9/wvGFVv787rrZZy8h7qtgDOuFOmiBuXYRvg/O9wMHgXeB97SLspk4sq0OI/q9v13+ek+sh3zYSRp9jrYorw9ll1/GRzR+KotYZSHf8laVP2lvpA/8OGdPMk59hqtXZ+L8nHbxvWwqO65ryu+fT3VZz+l4dET7L0R072ljsMyzTpaJqQxsbL8M9WajY789DO85XMp/Dcp3Qztdn+9qf/a97ZWK8PXc3G+TpC/nv8Mncy7ZvICF302P5O+aNiOtLdTXd+D4Q7DVwfcvWvx9zTEJ/o5iG3R8YAjGNFseha5PGuZKz7b7xxXbOrXMcu5eJSo//rXdH/73Enz6L1q/X+fyIu8wZGtNBmkjkzNZNgP2AvuBg2bysKUzduXn/66JtNeN4PCZvO0/x7Ujdn4VnYOvRJzjZ/I+9sQZeftX2Tc1RPcPz/Tf4/si0g+t5Mq+kfZjZL34Mc5ul3PPnE7TOxvHK2qDaZ+L++db2HyYqMo/qVnb/P8uH8/rmnFxR0k6DCu/rjj/RxT7KGUSWgbd+LMQuEgYB1zsk2qtvJD8v5AhdfdttbEunSxbcJD9Zf7chqp1Hlbe7FK1/aPVTfp7FgtC1yGGiSncFK/DhZvi+epZta0WWjlsfDZMyPRdSPrryqSSKnXx1bkq/Ye9TlRpk7Lrjq1UrfdC9X+MtKqwP6+3a/4pJFUZF0pZZpv91MYjMBaRRXbxpho5zQmUY3F+Pt4o7rvQrBXPdm00TaE24uMadaM2meLSI7iu071t3er3b6ZLi8JEde3qw+6zGv+ycF5kaRBh/m1T/7Yl/mMyTuMwadP4xL9ifjJpNwbvDZRJ8G8vnqV/Wf12aa/kyOdl69+BspTsXzGueE6E+JfZnvmXIfNPW+FfXkjb1YmqPNpnLP3b61fHCj/X5tzGANf2y3yqvC7Jv7btV4TVbdammI9l/g0dS5lNxLrk2j9r8xjjxhBQnygg0lgg/bOrfyct+udJi/Yrk0lFnxC7f+5kRbsNmcexfrubt0X/rGvLqrGSnYv3ZPHEe8r7lvMvUfi2LOu/2dg8LrRtQt2yfcv8r5IU70VkIs6nbebUXf0M/o7Znl39Sdoz+X1oEb5N8ffF67qhPfPP6eoUbxf+GRf/6sRnvaSdmw+Bf1VxmbD+2sa//DU7t/Gv2PfKpKdrBP92Ojk+IvqX16ks/2qxbL8EZnc2HqsgYuqPuzZV+I3RbujbDm+T0PmWCVO/5jqftp1zy+wSA6s0JWtp2z5e1oZV+yMsjB3ZXolsv0Ulrv01v3/iKrF94Qtbt9siCnmeb6fjjf59KnLk1xaEbvtvFnFirGvEOqmycQrbm/IMsXd3P28uh4nM3swXRER717OiX8kc7K2qqyn2p3maFGU/aruP5VCv+PraoTYU8yUmmbDwcYo6pusnM486xdoga4dkPCb1pK7Sfc6ebvkd4qeAtQcd/N63bB3lU3dlUnUf38VyvqCqK7JxlNSd7lydrDlm+/uqHiRvl30Nrp/n9zpkZRjoJ3V1diyP05rIYXHYs+w+D5+WMS8b5gZtKcuX0KT5d/WwtB97VnyvY6rjMukI56HI0rFJPwt8PjT/1OXzSbcMeEmdh294qvKK4rNu7j4n3LNZg8TKXwafv025U+XvKjHsT8Q7/7LGaJt9lAh7Asz3uv0XEX6t0duDoWN/93wmh92XpUHmCKb9GALbG+rZP3AfNbQPKKv/jpF/bP0JXfuW1QYk7dhljcyvk5mw+933Hpo1g26PQ2ZP6zVmTJt47P25jncD9vPwGS+q9QS/V6RaY8j8K8LmvUr9HfYCpH5OWL9lZY+Sv6pesHCJHbtrf9k6etZvf0G1L0ja4cAe1UT/s3zdCe3/Q5/n372wMc97/E1Qh0Tbmfwh3m/V9On72tNnrCF1sJkVe1EyXMdBa7+lHMsk44zMF6St9e2djNnbm8ybpHkq+gbbemMaH0UZmD8obKGrk7r+nt+3bE7o83YZp/vqOKdv6PzJNN6mTJsI/51XR7i2ZrGA5B6zFwnjzxmqPjaGfW3tZNrz1eljq29mOOqeCfF/irRt87PNw0uXSVAvrmOMNT569MptsYaV0sic/wbY13e8hPrb9K2ySUJ0j6G/Lu0U4qpTrR23jMp6m5hU+YTaWCeh9aIsm/rqUHV4bFv42kgnZdfH1PUj1D7DVH9d8khRN1zFRl/+/TW//qxL1uH83+mk3H+SvRtS2TDU90nX2TpM6/1xzZpZtoYdK763dqlz0f6uNeFehcs+H/nbGP77MpX06n/ofpzP+tVmTUvRtVuX/cjS67OE5kRBrxyJ+w/dPo7r+9cO1160e3gqu0S2uW7PjN/L6ns/UfMf10Lai87frJ+3KndAfc8yTf1M3T4s6qm4/yh7/2GSkG8UMw//DvRLgbYZSEOxr0LCWvRdjfh9XGzfqN4NivfZd7rsmFp08zmbssrKJEuTfVMZopdpbuwSrhNv3/N2s+0PDG3KNB6RMrFvJHv6B85HXObAoWsd3zm3i+6uZYytv+5+pohbpo6+tpZJFfmGlrcMf4c8b1Pe2OUIsaXJrinCTfaxtZOt+NYnU3hIfQlN20Z/1+dt7JaqLsbIzycNWZmrlNg2Dc2/LJ1T+T6WrrYSml4Ku7ik7yIx2opJD51vU9UfVRmrqL8u/olZj0PyCLV5irxcdKoi/6rKb8qTrHsnhW9jyZH/nSpeWDzxd9769uQ016lgUuf2pAfKPhu2FpfZL2Yb9snLNl/fNIepXaUsj4vNXCXUZ75px8ojNP8UPvAta2g6fb+F1ckZuneshv1vGXXDeyRRrN/bBPS1Jul+l+7zW86R7Wv63WXyDpt/RxraRjvC+TC3O61/Sqj/prag8x372yQivn+XwudrI2X2E2KdtJEov52e0L+uv4FO3p/rvssgsL8F4d/z9PzlWS94m8fqS3361Fi+6qaVYHwi9Yz4iH2fobIj+45cpz/TUaarr/4+z+vaWtVtyAX2d1LG8W9C3f+F1mnf36/k4w3YPrLv+XBVXCJs3cr+n4MKJuLv/fN9GhNdXVP5pJMN9vFi3rpv3/r8Ywg3SYp66zNOsO8QGcxPpnmRS/1mvmJjju3v7absI2xspQrvs1dNbjOj/wP7h1RlZyKGy8occ408UL8En4v6xfC/K3z52XzJd62T8vuZGGsxo/6O46ntmNqqFb/jps2/hHV4rPKH0svT4pstU7t2tZ9u/ZdqbJL1MwP6O86Fyt4jYaIrGz9mjEt8lFL4PtVE6votG2P6fpdf/GZRse7s3bf4BtSl/DIbKMctx++Z+8o6K6z9FPOwKsRmXiaNl7C+6NYRpjlbqG1j72f49qsuY4brd/amb4ZVc8TQ+sSH985LrEe8iPWJnfPrJRbWbb+dwn4x6o+r/aS2S7w3qWt//LnYz2ntE0vH1uDcyKatx1rH+EiMPEN1SZG/iz6+9o01Rob6O7Q+xLZ1jHobK61U+pWVvo2EpuWqzzD6Poa+pvhli0wn8Zq/72Mzm2d90o5VN1x9ZKuzbTgvqWwUIin8FSpl1CXXvFRxU0iozVPYJDRtF3uFphn6XAyJUUdD7SjTJ8v6n9fVbVObkKWp001lc9VRlqdOf5v0ZM+bymdbfp1NfG0bq27Y5JMyfxeJkU6o/inKH8O2Zfgidb6h/g3VJ7QcVbWL0Pxt6rlrPqa4KfQ25a2zl4/E8GdM/4fK/wA=\",\"base64\"));\nvar stateMachine = new StateMachine(indicMachine);\n/**\r\n * The IndicShaper supports indic scripts e.g. Devanagari, Kannada, etc.\r\n * Based on code from Harfbuzz: https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-complex-indic.cc\r\n */\nvar IndicShaper = /*#__PURE__*/function (_DefaultShaper3) {\n  _inheritsLoose(IndicShaper, _DefaultShaper3);\n  function IndicShaper() {\n    return _DefaultShaper3.apply(this, arguments) || this;\n  }\n  IndicShaper.planFeatures = function planFeatures(plan) {\n    plan.addStage(setupSyllables);\n    plan.addStage(['locl', 'ccmp']);\n    plan.addStage(initialReordering);\n    plan.addStage('nukt');\n    plan.addStage('akhn');\n    plan.addStage('rphf', false);\n    plan.addStage('rkrf');\n    plan.addStage('pref', false);\n    plan.addStage('blwf', false);\n    plan.addStage('abvf', false);\n    plan.addStage('half', false);\n    plan.addStage('pstf', false);\n    plan.addStage('vatu');\n    plan.addStage('cjct');\n    plan.addStage('cfar', false);\n    plan.addStage(finalReordering);\n    plan.addStage({\n      local: ['init'],\n      global: ['pres', 'abvs', 'blws', 'psts', 'haln', 'dist', 'abvm', 'blwm', 'calt', 'clig']\n    }); // Setup the indic config for the selected script\n\n    plan.unicodeScript = fromOpenType(plan.script);\n    plan.indicConfig = INDIC_CONFIGS[plan.unicodeScript] || INDIC_CONFIGS.Default;\n    plan.isOldSpec = plan.indicConfig.hasOldSpec && plan.script[plan.script.length - 1] !== '2'; // TODO: turn off kern (Khmer) and liga features.\n  };\n  IndicShaper.assignFeatures = function assignFeatures(plan, glyphs) {\n    var _loop = function _loop(i) {\n      var codepoint = glyphs[i].codePoints[0];\n      var d = INDIC_DECOMPOSITIONS[codepoint] || decompositions$1[codepoint];\n      if (d) {\n        var decomposed = d.map(function (c) {\n          var g = plan.font.glyphForCodePoint(c);\n          return new GlyphInfo(plan.font, g.id, [c], glyphs[i].features);\n        });\n        glyphs.splice.apply(glyphs, [i, 1].concat(decomposed));\n      }\n    };\n\n    // Decompose split matras\n    // TODO: do this in a more general unicode normalizer\n    for (var i = glyphs.length - 1; i >= 0; i--) {\n      _loop(i);\n    }\n  };\n  return IndicShaper;\n}(DefaultShaper);\n_defineProperty(IndicShaper, \"zeroMarkWidths\", 'NONE');\nfunction indicCategory(glyph) {\n  return trie$1.get(glyph.codePoints[0]) >> 8;\n}\nfunction indicPosition(glyph) {\n  return 1 << (trie$1.get(glyph.codePoints[0]) & 0xff);\n}\nvar IndicInfo = function IndicInfo(category, position, syllableType, syllable) {\n  this.category = category;\n  this.position = position;\n  this.syllableType = syllableType;\n  this.syllable = syllable;\n};\nfunction setupSyllables(font, glyphs) {\n  var syllable = 0;\n  var last = 0;\n  for (var _iterator53 = _createForOfIteratorHelperLoose(stateMachine.match(glyphs.map(indicCategory))), _step53; !(_step53 = _iterator53()).done;) {\n    var _step53$value = _step53.value,\n      start = _step53$value[0],\n      end = _step53$value[1],\n      tags = _step53$value[2];\n    if (start > last) {\n      ++syllable;\n      for (var i = last; i < start; i++) {\n        glyphs[i].shaperInfo = new IndicInfo(CATEGORIES.X, POSITIONS.End, 'non_indic_cluster', syllable);\n      }\n    }\n    ++syllable; // Create shaper info\n\n    for (var _i = start; _i <= end; _i++) {\n      glyphs[_i].shaperInfo = new IndicInfo(1 << indicCategory(glyphs[_i]), indicPosition(glyphs[_i]), tags[0], syllable);\n    }\n    last = end + 1;\n  }\n  if (last < glyphs.length) {\n    ++syllable;\n    for (var _i2 = last; _i2 < glyphs.length; _i2++) {\n      glyphs[_i2].shaperInfo = new IndicInfo(CATEGORIES.X, POSITIONS.End, 'non_indic_cluster', syllable);\n    }\n  }\n}\nfunction isConsonant(glyph) {\n  return glyph.shaperInfo.category & CONSONANT_FLAGS;\n}\nfunction isJoiner(glyph) {\n  return glyph.shaperInfo.category & JOINER_FLAGS;\n}\nfunction isHalantOrCoeng(glyph) {\n  return glyph.shaperInfo.category & HALANT_OR_COENG_FLAGS;\n}\nfunction wouldSubstitute(glyphs, feature) {\n  for (var _iterator54 = _createForOfIteratorHelperLoose(glyphs), _step54; !(_step54 = _iterator54()).done;) {\n    var _glyph$features;\n    var glyph = _step54.value;\n    glyph.features = (_glyph$features = {}, _glyph$features[feature] = true, _glyph$features);\n  }\n  var GSUB = glyphs[0]._font._layoutEngine.engine.GSUBProcessor;\n  GSUB.applyFeatures([feature], glyphs);\n  return glyphs.length === 1;\n}\nfunction consonantPosition(font, consonant, virama) {\n  var glyphs = [virama, consonant, virama];\n  if (wouldSubstitute(glyphs.slice(0, 2), 'blwf') || wouldSubstitute(glyphs.slice(1, 3), 'blwf')) {\n    return POSITIONS.Below_C;\n  } else if (wouldSubstitute(glyphs.slice(0, 2), 'pstf') || wouldSubstitute(glyphs.slice(1, 3), 'pstf')) {\n    return POSITIONS.Post_C;\n  } else if (wouldSubstitute(glyphs.slice(0, 2), 'pref') || wouldSubstitute(glyphs.slice(1, 3), 'pref')) {\n    return POSITIONS.Post_C;\n  }\n  return POSITIONS.Base_C;\n}\nfunction initialReordering(font, glyphs, plan) {\n  var indicConfig = plan.indicConfig;\n  var features = font._layoutEngine.engine.GSUBProcessor.features;\n  var dottedCircle = font.glyphForCodePoint(0x25cc).id;\n  var virama = font.glyphForCodePoint(indicConfig.virama).id;\n  if (virama) {\n    var info = new GlyphInfo(font, virama, [indicConfig.virama]);\n    for (var i = 0; i < glyphs.length; i++) {\n      if (glyphs[i].shaperInfo.position === POSITIONS.Base_C) {\n        glyphs[i].shaperInfo.position = consonantPosition(font, glyphs[i].copy(), info);\n      }\n    }\n  }\n  for (var start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) {\n    var _glyphs$start$shaperI = glyphs[start].shaperInfo,\n      category = _glyphs$start$shaperI.category,\n      syllableType = _glyphs$start$shaperI.syllableType;\n    if (syllableType === 'symbol_cluster' || syllableType === 'non_indic_cluster') {\n      continue;\n    }\n    if (syllableType === 'broken_cluster' && dottedCircle) {\n      var g = new GlyphInfo(font, dottedCircle, [0x25cc]);\n      g.shaperInfo = new IndicInfo(1 << indicCategory(g), indicPosition(g), glyphs[start].shaperInfo.syllableType, glyphs[start].shaperInfo.syllable); // Insert after possible Repha.\n\n      var _i3 = start;\n      while (_i3 < end && glyphs[_i3].shaperInfo.category === CATEGORIES.Repha) {\n        _i3++;\n      }\n      glyphs.splice(_i3++, 0, g);\n      end++;\n    } // 1. Find base consonant:\n    //\n    // The shaping engine finds the base consonant of the syllable, using the\n    // following algorithm: starting from the end of the syllable, move backwards\n    // until a consonant is found that does not have a below-base or post-base\n    // form (post-base forms have to follow below-base forms), or that is not a\n    // pre-base reordering Ra, or arrive at the first consonant. The consonant\n    // stopped at will be the base.\n\n    var base = end;\n    var limit = start;\n    var hasReph = false; // If the syllable starts with Ra + Halant (in a script that has Reph)\n    // and has more than one consonant, Ra is excluded from candidates for\n    // base consonants.\n\n    if (indicConfig.rephPos !== POSITIONS.Ra_To_Become_Reph && features.rphf && start + 3 <= end && (indicConfig.rephMode === 'Implicit' && !isJoiner(glyphs[start + 2]) || indicConfig.rephMode === 'Explicit' && glyphs[start + 2].shaperInfo.category === CATEGORIES.ZWJ)) {\n      // See if it matches the 'rphf' feature.\n      var _g = [glyphs[start].copy(), glyphs[start + 1].copy(), glyphs[start + 2].copy()];\n      if (wouldSubstitute(_g.slice(0, 2), 'rphf') || indicConfig.rephMode === 'Explicit' && wouldSubstitute(_g, 'rphf')) {\n        limit += 2;\n        while (limit < end && isJoiner(glyphs[limit])) {\n          limit++;\n        }\n        base = start;\n        hasReph = true;\n      }\n    } else if (indicConfig.rephMode === 'Log_Repha' && glyphs[start].shaperInfo.category === CATEGORIES.Repha) {\n      limit++;\n      while (limit < end && isJoiner(glyphs[limit])) {\n        limit++;\n      }\n      base = start;\n      hasReph = true;\n    }\n    switch (indicConfig.basePos) {\n      case 'Last':\n        {\n          // starting from the end of the syllable, move backwards\n          var _i4 = end;\n          var seenBelow = false;\n          do {\n            var _info = glyphs[--_i4].shaperInfo; // until a consonant is found\n\n            if (isConsonant(glyphs[_i4])) {\n              // that does not have a below-base or post-base form\n              // (post-base forms have to follow below-base forms),\n              if (_info.position !== POSITIONS.Below_C && (_info.position !== POSITIONS.Post_C || seenBelow)) {\n                base = _i4;\n                break;\n              } // or that is not a pre-base reordering Ra,\n              //\n              // IMPLEMENTATION NOTES:\n              //\n              // Our pre-base reordering Ra's are marked POS_POST_C, so will be skipped\n              // by the logic above already.\n              //\n              // or arrive at the first consonant. The consonant stopped at will\n              // be the base.\n\n              if (_info.position === POSITIONS.Below_C) {\n                seenBelow = true;\n              }\n              base = _i4;\n            } else if (start < _i4 && _info.category === CATEGORIES.ZWJ && glyphs[_i4 - 1].shaperInfo.category === CATEGORIES.H) {\n              // A ZWJ after a Halant stops the base search, and requests an explicit\n              // half form.\n              // A ZWJ before a Halant, requests a subjoined form instead, and hence\n              // search continues.  This is particularly important for Bengali\n              // sequence Ra,H,Ya that should form Ya-Phalaa by subjoining Ya.\n              break;\n            }\n          } while (_i4 > limit);\n          break;\n        }\n      case 'First':\n        {\n          // The first consonant is always the base.\n          base = start; // Mark all subsequent consonants as below.\n\n          for (var _i5 = base + 1; _i5 < end; _i5++) {\n            if (isConsonant(glyphs[_i5])) {\n              glyphs[_i5].shaperInfo.position = POSITIONS.Below_C;\n            }\n          }\n        }\n    } // If the syllable starts with Ra + Halant (in a script that has Reph)\n    // and has more than one consonant, Ra is excluded from candidates for\n    // base consonants.\n    //\n    //  Only do this for unforced Reph. (ie. not for Ra,H,ZWJ)\n\n    if (hasReph && base === start && limit - base <= 2) {\n      hasReph = false;\n    } // 2. Decompose and reorder Matras:\n    //\n    // Each matra and any syllable modifier sign in the cluster are moved to the\n    // appropriate position relative to the consonant(s) in the cluster. The\n    // shaping engine decomposes two- or three-part matras into their constituent\n    // parts before any repositioning. Matra characters are classified by which\n    // consonant in a conjunct they have affinity for and are reordered to the\n    // following positions:\n    //\n    //   o Before first half form in the syllable\n    //   o After subjoined consonants\n    //   o After post-form consonant\n    //   o After main consonant (for above marks)\n    //\n    // IMPLEMENTATION NOTES:\n    //\n    // The normalize() routine has already decomposed matras for us, so we don't\n    // need to worry about that.\n    // 3.  Reorder marks to canonical order:\n    //\n    // Adjacent nukta and halant or nukta and vedic sign are always repositioned\n    // if necessary, so that the nukta is first.\n    //\n    // IMPLEMENTATION NOTES:\n    //\n    // We don't need to do this: the normalize() routine already did this for us.\n    // Reorder characters\n\n    for (var _i6 = start; _i6 < base; _i6++) {\n      var _info2 = glyphs[_i6].shaperInfo;\n      _info2.position = Math.min(POSITIONS.Pre_C, _info2.position);\n    }\n    if (base < end) {\n      glyphs[base].shaperInfo.position = POSITIONS.Base_C;\n    } // Mark final consonants.  A final consonant is one appearing after a matra,\n    // like in Khmer.\n\n    for (var _i7 = base + 1; _i7 < end; _i7++) {\n      if (glyphs[_i7].shaperInfo.category === CATEGORIES.M) {\n        for (var j = _i7 + 1; j < end; j++) {\n          if (isConsonant(glyphs[j])) {\n            glyphs[j].shaperInfo.position = POSITIONS.Final_C;\n            break;\n          }\n        }\n        break;\n      }\n    } // Handle beginning Ra\n\n    if (hasReph) {\n      glyphs[start].shaperInfo.position = POSITIONS.Ra_To_Become_Reph;\n    } // For old-style Indic script tags, move the first post-base Halant after\n    // last consonant.\n    //\n    // Reports suggest that in some scripts Uniscribe does this only if there\n    // is *not* a Halant after last consonant already (eg. Kannada), while it\n    // does it unconditionally in other scripts (eg. Malayalam).  We don't\n    // currently know about other scripts, so we single out Malayalam for now.\n    //\n    // Kannada test case:\n    // U+0C9A,U+0CCD,U+0C9A,U+0CCD\n    // With some versions of Lohit Kannada.\n    // https://bugs.freedesktop.org/show_bug.cgi?id=59118\n    //\n    // Malayalam test case:\n    // U+0D38,U+0D4D,U+0D31,U+0D4D,U+0D31,U+0D4D\n    // With lohit-ttf-20121122/Lohit-Malayalam.ttf\n\n    if (plan.isOldSpec) {\n      var disallowDoubleHalants = plan.unicodeScript !== 'Malayalam';\n      for (var _i8 = base + 1; _i8 < end; _i8++) {\n        if (glyphs[_i8].shaperInfo.category === CATEGORIES.H) {\n          var _j = void 0;\n          for (_j = end - 1; _j > _i8; _j--) {\n            if (isConsonant(glyphs[_j]) || disallowDoubleHalants && glyphs[_j].shaperInfo.category === CATEGORIES.H) {\n              break;\n            }\n          }\n          if (glyphs[_j].shaperInfo.category !== CATEGORIES.H && _j > _i8) {\n            // Move Halant to after last consonant.\n            var t = glyphs[_i8];\n            glyphs.splice.apply(glyphs, [_i8, 0].concat(glyphs.splice(_i8 + 1, _j - _i8)));\n            glyphs[_j] = t;\n          }\n          break;\n        }\n      }\n    } // Attach misc marks to previous char to move with them.\n\n    var lastPos = POSITIONS.Start;\n    for (var _i9 = start; _i9 < end; _i9++) {\n      var _info3 = glyphs[_i9].shaperInfo;\n      if (_info3.category & (JOINER_FLAGS | CATEGORIES.N | CATEGORIES.RS | CATEGORIES.CM | HALANT_OR_COENG_FLAGS & _info3.category)) {\n        _info3.position = lastPos;\n        if (_info3.category === CATEGORIES.H && _info3.position === POSITIONS.Pre_M) {\n          // Uniscribe doesn't move the Halant with Left Matra.\n          // TEST: U+092B,U+093F,U+094DE\n          // We follow.  This is important for the Sinhala\n          // U+0DDA split matra since it decomposes to U+0DD9,U+0DCA\n          // where U+0DD9 is a left matra and U+0DCA is the virama.\n          // We don't want to move the virama with the left matra.\n          // TEST: U+0D9A,U+0DDA\n          for (var _j2 = _i9; _j2 > start; _j2--) {\n            if (glyphs[_j2 - 1].shaperInfo.position !== POSITIONS.Pre_M) {\n              _info3.position = glyphs[_j2 - 1].shaperInfo.position;\n              break;\n            }\n          }\n        }\n      } else if (_info3.position !== POSITIONS.SMVD) {\n        lastPos = _info3.position;\n      }\n    } // For post-base consonants let them own anything before them\n    // since the last consonant or matra.\n\n    var last = base;\n    for (var _i10 = base + 1; _i10 < end; _i10++) {\n      if (isConsonant(glyphs[_i10])) {\n        for (var _j3 = last + 1; _j3 < _i10; _j3++) {\n          if (glyphs[_j3].shaperInfo.position < POSITIONS.SMVD) {\n            glyphs[_j3].shaperInfo.position = glyphs[_i10].shaperInfo.position;\n          }\n        }\n        last = _i10;\n      } else if (glyphs[_i10].shaperInfo.category === CATEGORIES.M) {\n        last = _i10;\n      }\n    }\n    var arr = glyphs.slice(start, end);\n    arr.sort(function (a, b) {\n      return a.shaperInfo.position - b.shaperInfo.position;\n    });\n    glyphs.splice.apply(glyphs, [start, arr.length].concat(arr)); // Find base again\n\n    for (var _i11 = start; _i11 < end; _i11++) {\n      if (glyphs[_i11].shaperInfo.position === POSITIONS.Base_C) {\n        base = _i11;\n        break;\n      }\n    } // Setup features now\n    // Reph\n\n    for (var _i12 = start; _i12 < end && glyphs[_i12].shaperInfo.position === POSITIONS.Ra_To_Become_Reph; _i12++) {\n      glyphs[_i12].features.rphf = true;\n    } // Pre-base\n\n    var blwf = !plan.isOldSpec && indicConfig.blwfMode === 'Pre_And_Post';\n    for (var _i13 = start; _i13 < base; _i13++) {\n      glyphs[_i13].features.half = true;\n      if (blwf) {\n        glyphs[_i13].features.blwf = true;\n      }\n    } // Post-base\n\n    for (var _i14 = base + 1; _i14 < end; _i14++) {\n      glyphs[_i14].features.abvf = true;\n      glyphs[_i14].features.pstf = true;\n      glyphs[_i14].features.blwf = true;\n    }\n    if (plan.isOldSpec && plan.unicodeScript === 'Devanagari') {\n      // Old-spec eye-lash Ra needs special handling.  From the\n      // spec:\n      //\n      // \"The feature 'below-base form' is applied to consonants\n      // having below-base forms and following the base consonant.\n      // The exception is vattu, which may appear below half forms\n      // as well as below the base glyph. The feature 'below-base\n      // form' will be applied to all such occurrences of Ra as well.\"\n      //\n      // Test case: U+0924,U+094D,U+0930,U+094d,U+0915\n      // with Sanskrit 2003 font.\n      //\n      // However, note that Ra,Halant,ZWJ is the correct way to\n      // request eyelash form of Ra, so we wouldbn't inhibit it\n      // in that sequence.\n      //\n      // Test case: U+0924,U+094D,U+0930,U+094d,U+200D,U+0915\n      for (var _i15 = start; _i15 + 1 < base; _i15++) {\n        if (glyphs[_i15].shaperInfo.category === CATEGORIES.Ra && glyphs[_i15 + 1].shaperInfo.category === CATEGORIES.H && (_i15 + 1 === base || glyphs[_i15 + 2].shaperInfo.category === CATEGORIES.ZWJ)) {\n          glyphs[_i15].features.blwf = true;\n          glyphs[_i15 + 1].features.blwf = true;\n        }\n      }\n    }\n    var prefLen = 2;\n    if (features.pref && base + prefLen < end) {\n      // Find a Halant,Ra sequence and mark it for pre-base reordering processing.\n      for (var _i16 = base + 1; _i16 + prefLen - 1 < end; _i16++) {\n        var _g2 = [glyphs[_i16].copy(), glyphs[_i16 + 1].copy()];\n        if (wouldSubstitute(_g2, 'pref')) {\n          for (var _j4 = 0; _j4 < prefLen; _j4++) {\n            glyphs[_i16++].features.pref = true;\n          } // Mark the subsequent stuff with 'cfar'.  Used in Khmer.\n          // Read the feature spec.\n          // This allows distinguishing the following cases with MS Khmer fonts:\n          // U+1784,U+17D2,U+179A,U+17D2,U+1782\n          // U+1784,U+17D2,U+1782,U+17D2,U+179A\n\n          if (features.cfar) {\n            for (; _i16 < end; _i16++) {\n              glyphs[_i16].features.cfar = true;\n            }\n          }\n          break;\n        }\n      }\n    } // Apply ZWJ/ZWNJ effects\n\n    for (var _i17 = start + 1; _i17 < end; _i17++) {\n      if (isJoiner(glyphs[_i17])) {\n        var nonJoiner = glyphs[_i17].shaperInfo.category === CATEGORIES.ZWNJ;\n        var _j5 = _i17;\n        do {\n          _j5--; // ZWJ/ZWNJ should disable CJCT.  They do that by simply\n          // being there, since we don't skip them for the CJCT\n          // feature (ie. F_MANUAL_ZWJ)\n          // A ZWNJ disables HALF.\n\n          if (nonJoiner) {\n            delete glyphs[_j5].features.half;\n          }\n        } while (_j5 > start && !isConsonant(glyphs[_j5]));\n      }\n    }\n  }\n}\nfunction finalReordering(font, glyphs, plan) {\n  var indicConfig = plan.indicConfig;\n  var features = font._layoutEngine.engine.GSUBProcessor.features;\n  for (var start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) {\n    // 4. Final reordering:\n    //\n    // After the localized forms and basic shaping forms GSUB features have been\n    // applied (see below), the shaping engine performs some final glyph\n    // reordering before applying all the remaining font features to the entire\n    // cluster.\n    var tryPref = !!features.pref; // Find base again\n\n    var base = start;\n    for (; base < end; base++) {\n      if (glyphs[base].shaperInfo.position >= POSITIONS.Base_C) {\n        if (tryPref && base + 1 < end) {\n          for (var i = base + 1; i < end; i++) {\n            if (glyphs[i].features.pref) {\n              if (!(glyphs[i].substituted && glyphs[i].isLigated && !glyphs[i].isMultiplied)) {\n                // Ok, this was a 'pref' candidate but didn't form any.\n                // Base is around here...\n                base = i;\n                while (base < end && isHalantOrCoeng(glyphs[base])) {\n                  base++;\n                }\n                glyphs[base].shaperInfo.position = POSITIONS.BASE_C;\n                tryPref = false;\n              }\n              break;\n            }\n          }\n        } // For Malayalam, skip over unformed below- (but NOT post-) forms.\n\n        if (plan.unicodeScript === 'Malayalam') {\n          for (var _i18 = base + 1; _i18 < end; _i18++) {\n            while (_i18 < end && isJoiner(glyphs[_i18])) {\n              _i18++;\n            }\n            if (_i18 === end || !isHalantOrCoeng(glyphs[_i18])) {\n              break;\n            }\n            _i18++; // Skip halant.\n\n            while (_i18 < end && isJoiner(glyphs[_i18])) {\n              _i18++;\n            }\n            if (_i18 < end && isConsonant(glyphs[_i18]) && glyphs[_i18].shaperInfo.position === POSITIONS.Below_C) {\n              base = _i18;\n              glyphs[base].shaperInfo.position = POSITIONS.Base_C;\n            }\n          }\n        }\n        if (start < base && glyphs[base].shaperInfo.position > POSITIONS.Base_C) {\n          base--;\n        }\n        break;\n      }\n    }\n    if (base === end && start < base && glyphs[base - 1].shaperInfo.category === CATEGORIES.ZWJ) {\n      base--;\n    }\n    if (base < end) {\n      while (start < base && glyphs[base].shaperInfo.category & (CATEGORIES.N | HALANT_OR_COENG_FLAGS)) {\n        base--;\n      }\n    } // o Reorder matras:\n    //\n    // If a pre-base matra character had been reordered before applying basic\n    // features, the glyph can be moved closer to the main consonant based on\n    // whether half-forms had been formed. Actual position for the matra is\n    // defined as “after last standalone halant glyph, after initial matra\n    // position and before the main consonant”. If ZWJ or ZWNJ follow this\n    // halant, position is moved after it.\n    //\n\n    if (start + 1 < end && start < base) {\n      // Otherwise there can't be any pre-base matra characters.\n      // If we lost track of base, alas, position before last thingy.\n      var newPos = base === end ? base - 2 : base - 1; // Malayalam / Tamil do not have \"half\" forms or explicit virama forms.\n      // The glyphs formed by 'half' are Chillus or ligated explicit viramas.\n      // We want to position matra after them.\n\n      if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') {\n        while (newPos > start && !(glyphs[newPos].shaperInfo.category & (CATEGORIES.M | HALANT_OR_COENG_FLAGS))) {\n          newPos--;\n        } // If we found no Halant we are done.\n        // Otherwise only proceed if the Halant does\n        // not belong to the Matra itself!\n\n        if (isHalantOrCoeng(glyphs[newPos]) && glyphs[newPos].shaperInfo.position !== POSITIONS.Pre_M) {\n          // If ZWJ or ZWNJ follow this halant, position is moved after it.\n          if (newPos + 1 < end && isJoiner(glyphs[newPos + 1])) {\n            newPos++;\n          }\n        } else {\n          newPos = start; // No move.\n        }\n      }\n      if (start < newPos && glyphs[newPos].shaperInfo.position !== POSITIONS.Pre_M) {\n        // Now go see if there's actually any matras...\n        for (var _i19 = newPos; _i19 > start; _i19--) {\n          if (glyphs[_i19 - 1].shaperInfo.position === POSITIONS.Pre_M) {\n            var oldPos = _i19 - 1;\n            if (oldPos < base && base <= newPos) {\n              // Shouldn't actually happen.\n              base--;\n            }\n            var tmp = glyphs[oldPos];\n            glyphs.splice.apply(glyphs, [oldPos, 0].concat(glyphs.splice(oldPos + 1, newPos - oldPos)));\n            glyphs[newPos] = tmp;\n            newPos--;\n          }\n        }\n      }\n    } // o Reorder reph:\n    //\n    // Reph’s original position is always at the beginning of the syllable,\n    // (i.e. it is not reordered at the character reordering stage). However,\n    // it will be reordered according to the basic-forms shaping results.\n    // Possible positions for reph, depending on the script, are; after main,\n    // before post-base consonant forms, and after post-base consonant forms.\n    // Two cases:\n    //\n    // - If repha is encoded as a sequence of characters (Ra,H or Ra,H,ZWJ), then\n    //   we should only move it if the sequence ligated to the repha form.\n    //\n    // - If repha is encoded separately and in the logical position, we should only\n    //   move it if it did NOT ligate.  If it ligated, it's probably the font trying\n    //   to make it work without the reordering.\n\n    if (start + 1 < end && glyphs[start].shaperInfo.position === POSITIONS.Ra_To_Become_Reph && glyphs[start].shaperInfo.category === CATEGORIES.Repha !== (glyphs[start].isLigated && !glyphs[start].isMultiplied)) {\n      var newRephPos = void 0;\n      var rephPos = indicConfig.rephPos;\n      var found = false; // 1. If reph should be positioned after post-base consonant forms,\n      //    proceed to step 5.\n\n      if (rephPos !== POSITIONS.After_Post) {\n        //  2. If the reph repositioning class is not after post-base: target\n        //     position is after the first explicit halant glyph between the\n        //     first post-reph consonant and last main consonant. If ZWJ or ZWNJ\n        //     are following this halant, position is moved after it. If such\n        //     position is found, this is the target position. Otherwise,\n        //     proceed to the next step.\n        //\n        //     Note: in old-implementation fonts, where classifications were\n        //     fixed in shaping engine, there was no case where reph position\n        //     will be found on this step.\n        newRephPos = start + 1;\n        while (newRephPos < base && !isHalantOrCoeng(glyphs[newRephPos])) {\n          newRephPos++;\n        }\n        if (newRephPos < base && isHalantOrCoeng(glyphs[newRephPos])) {\n          // ->If ZWJ or ZWNJ are following this halant, position is moved after it.\n          if (newRephPos + 1 < base && isJoiner(glyphs[newRephPos + 1])) {\n            newRephPos++;\n          }\n          found = true;\n        } // 3. If reph should be repositioned after the main consonant: find the\n        //    first consonant not ligated with main, or find the first\n        //    consonant that is not a potential pre-base reordering Ra.\n\n        if (!found && rephPos === POSITIONS.After_Main) {\n          newRephPos = base;\n          while (newRephPos + 1 < end && glyphs[newRephPos + 1].shaperInfo.position <= POSITIONS.After_Main) {\n            newRephPos++;\n          }\n          found = newRephPos < end;\n        } // 4. If reph should be positioned before post-base consonant, find\n        //    first post-base classified consonant not ligated with main. If no\n        //    consonant is found, the target position should be before the\n        //    first matra, syllable modifier sign or vedic sign.\n        //\n        // This is our take on what step 4 is trying to say (and failing, BADLY).\n\n        if (!found && rephPos === POSITIONS.After_Sub) {\n          newRephPos = base;\n          while (newRephPos + 1 < end && !(glyphs[newRephPos + 1].shaperInfo.position & (POSITIONS.Post_C | POSITIONS.After_Post | POSITIONS.SMVD))) {\n            newRephPos++;\n          }\n          found = newRephPos < end;\n        }\n      } //  5. If no consonant is found in steps 3 or 4, move reph to a position\n      //     immediately before the first post-base matra, syllable modifier\n      //     sign or vedic sign that has a reordering class after the intended\n      //     reph position. For example, if the reordering position for reph\n      //     is post-main, it will skip above-base matras that also have a\n      //     post-main position.\n\n      if (!found) {\n        // Copied from step 2.\n        newRephPos = start + 1;\n        while (newRephPos < base && !isHalantOrCoeng(glyphs[newRephPos])) {\n          newRephPos++;\n        }\n        if (newRephPos < base && isHalantOrCoeng(glyphs[newRephPos])) {\n          // ->If ZWJ or ZWNJ are following this halant, position is moved after it.\n          if (newRephPos + 1 < base && isJoiner(glyphs[newRephPos + 1])) {\n            newRephPos++;\n          }\n          found = true;\n        }\n      } // 6. Otherwise, reorder reph to the end of the syllable.\n\n      if (!found) {\n        newRephPos = end - 1;\n        while (newRephPos > start && glyphs[newRephPos].shaperInfo.position === POSITIONS.SMVD) {\n          newRephPos--;\n        } // If the Reph is to be ending up after a Matra,Halant sequence,\n        // position it before that Halant so it can interact with the Matra.\n        // However, if it's a plain Consonant,Halant we shouldn't do that.\n        // Uniscribe doesn't do this.\n        // TEST: U+0930,U+094D,U+0915,U+094B,U+094D\n\n        if (isHalantOrCoeng(glyphs[newRephPos])) {\n          for (var _i20 = base + 1; _i20 < newRephPos; _i20++) {\n            if (glyphs[_i20].shaperInfo.category === CATEGORIES.M) {\n              newRephPos--;\n            }\n          }\n        }\n      }\n      var reph = glyphs[start];\n      glyphs.splice.apply(glyphs, [start, 0].concat(glyphs.splice(start + 1, newRephPos - start)));\n      glyphs[newRephPos] = reph;\n      if (start < base && base <= newRephPos) {\n        base--;\n      }\n    } // o Reorder pre-base reordering consonants:\n    //\n    // If a pre-base reordering consonant is found, reorder it according to\n    // the following rules:\n\n    if (tryPref && base + 1 < end) {\n      for (var _i21 = base + 1; _i21 < end; _i21++) {\n        if (glyphs[_i21].features.pref) {\n          // 1. Only reorder a glyph produced by substitution during application\n          //    of the <pref> feature. (Note that a font may shape a Ra consonant with\n          //    the feature generally but block it in certain contexts.)\n          // Note: We just check that something got substituted.  We don't check that\n          // the <pref> feature actually did it...\n          //\n          // Reorder pref only if it ligated.\n          if (glyphs[_i21].isLigated && !glyphs[_i21].isMultiplied) {\n            // 2. Try to find a target position the same way as for pre-base matra.\n            //    If it is found, reorder pre-base consonant glyph.\n            //\n            // 3. If position is not found, reorder immediately before main\n            //    consonant.\n            var _newPos = base; // Malayalam / Tamil do not have \"half\" forms or explicit virama forms.\n            // The glyphs formed by 'half' are Chillus or ligated explicit viramas.\n            // We want to position matra after them.\n\n            if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') {\n              while (_newPos > start && !(glyphs[_newPos - 1].shaperInfo.category & (CATEGORIES.M | HALANT_OR_COENG_FLAGS))) {\n                _newPos--;\n              } // In Khmer coeng model, a H,Ra can go *after* matras.  If it goes after a\n              // split matra, it should be reordered to *before* the left part of such matra.\n\n              if (_newPos > start && glyphs[_newPos - 1].shaperInfo.category === CATEGORIES.M) {\n                var _oldPos2 = _i21;\n                for (var j = base + 1; j < _oldPos2; j++) {\n                  if (glyphs[j].shaperInfo.category === CATEGORIES.M) {\n                    _newPos--;\n                    break;\n                  }\n                }\n              }\n            }\n            if (_newPos > start && isHalantOrCoeng(glyphs[_newPos - 1])) {\n              // -> If ZWJ or ZWNJ follow this halant, position is moved after it.\n              if (_newPos < end && isJoiner(glyphs[_newPos])) {\n                _newPos++;\n              }\n            }\n            var _oldPos = _i21;\n            var _tmp = glyphs[_oldPos];\n            glyphs.splice.apply(glyphs, [_newPos + 1, 0].concat(glyphs.splice(_newPos, _oldPos - _newPos)));\n            glyphs[_newPos] = _tmp;\n            if (_newPos <= base && base < _oldPos) {\n              base++;\n            }\n          }\n          break;\n        }\n      }\n    } // Apply 'init' to the Left Matra if it's a word start.\n\n    if (glyphs[start].shaperInfo.position === POSITIONS.Pre_M && (!start || !/Cf|Mn/.test(unicode.getCategory(glyphs[start - 1].codePoints[0])))) {\n      glyphs[start].features.init = true;\n    }\n  }\n}\nfunction nextSyllable(glyphs, start) {\n  if (start >= glyphs.length) return start;\n  var syllable = glyphs[start].shaperInfo.syllable;\n  while (++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable) {}\n  return start;\n}\nvar categories$1 = useData.categories,\n  decompositions$2 = useData.decompositions;\nvar trie$2 = new UnicodeTrie(Buffer(\"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\",\"base64\"));\nvar stateMachine$1 = new StateMachine(useData);\n/**\r\n * This shaper is an implementation of the Universal Shaping Engine, which\r\n * uses Unicode data to shape a number of scripts without a dedicated shaping engine.\r\n * See https://www.microsoft.com/typography/OpenTypeDev/USE/intro.htm.\r\n */\nvar UniversalShaper = /*#__PURE__*/function (_DefaultShaper4) {\n  _inheritsLoose(UniversalShaper, _DefaultShaper4);\n  function UniversalShaper() {\n    return _DefaultShaper4.apply(this, arguments) || this;\n  }\n  UniversalShaper.planFeatures = function planFeatures(plan) {\n    plan.addStage(setupSyllables$1); // Default glyph pre-processing group\n\n    plan.addStage(['locl', 'ccmp', 'nukt', 'akhn']); // Reordering group\n\n    plan.addStage(clearSubstitutionFlags);\n    plan.addStage(['rphf'], false);\n    plan.addStage(recordRphf);\n    plan.addStage(clearSubstitutionFlags);\n    plan.addStage(['pref']);\n    plan.addStage(recordPref); // Orthographic unit shaping group\n\n    plan.addStage(['rkrf', 'abvf', 'blwf', 'half', 'pstf', 'vatu', 'cjct']);\n    plan.addStage(reorder); // Topographical features\n    // Scripts that need this are handled by the Arabic shaper, not implemented here for now.\n    // plan.addStage(['isol', 'init', 'medi', 'fina', 'med2', 'fin2', 'fin3'], false);\n    // Standard topographic presentation and positional feature application\n\n    plan.addStage(['abvs', 'blws', 'pres', 'psts', 'dist', 'abvm', 'blwm']);\n  };\n  UniversalShaper.assignFeatures = function assignFeatures(plan, glyphs) {\n    var _loop = function _loop(i) {\n      var codepoint = glyphs[i].codePoints[0];\n      if (decompositions$2[codepoint]) {\n        var decomposed = decompositions$2[codepoint].map(function (c) {\n          var g = plan.font.glyphForCodePoint(c);\n          return new GlyphInfo(plan.font, g.id, [c], glyphs[i].features);\n        });\n        glyphs.splice.apply(glyphs, [i, 1].concat(decomposed));\n      }\n    };\n\n    // Decompose split vowels\n    // TODO: do this in a more general unicode normalizer\n    for (var i = glyphs.length - 1; i >= 0; i--) {\n      _loop(i);\n    }\n  };\n  return UniversalShaper;\n}(DefaultShaper);\n_defineProperty(UniversalShaper, \"zeroMarkWidths\", 'BEFORE_GPOS');\nfunction useCategory(glyph) {\n  return trie$2.get(glyph.codePoints[0]);\n}\nvar USEInfo = function USEInfo(category, syllableType, syllable) {\n  this.category = category;\n  this.syllableType = syllableType;\n  this.syllable = syllable;\n};\nfunction setupSyllables$1(font, glyphs) {\n  var syllable = 0;\n  for (var _iterator55 = _createForOfIteratorHelperLoose(stateMachine$1.match(glyphs.map(useCategory))), _step55; !(_step55 = _iterator55()).done;) {\n    var _step55$value = _step55.value,\n      start = _step55$value[0],\n      end = _step55$value[1],\n      tags = _step55$value[2];\n    ++syllable; // Create shaper info\n\n    for (var i = start; i <= end; i++) {\n      glyphs[i].shaperInfo = new USEInfo(categories$1[useCategory(glyphs[i])], tags[0], syllable);\n    } // Assign rphf feature\n\n    var limit = glyphs[start].shaperInfo.category === 'R' ? 1 : Math.min(3, end - start);\n    for (var _i = start; _i < start + limit; _i++) {\n      glyphs[_i].features.rphf = true;\n    }\n  }\n}\nfunction clearSubstitutionFlags(font, glyphs) {\n  for (var _iterator56 = _createForOfIteratorHelperLoose(glyphs), _step56; !(_step56 = _iterator56()).done;) {\n    var glyph = _step56.value;\n    glyph.substituted = false;\n  }\n}\nfunction recordRphf(font, glyphs) {\n  for (var _iterator57 = _createForOfIteratorHelperLoose(glyphs), _step57; !(_step57 = _iterator57()).done;) {\n    var glyph = _step57.value;\n    if (glyph.substituted && glyph.features.rphf) {\n      // Mark a substituted repha.\n      glyph.shaperInfo.category = 'R';\n    }\n  }\n}\nfunction recordPref(font, glyphs) {\n  for (var _iterator58 = _createForOfIteratorHelperLoose(glyphs), _step58; !(_step58 = _iterator58()).done;) {\n    var glyph = _step58.value;\n    if (glyph.substituted) {\n      // Mark a substituted pref as VPre, as they behave the same way.\n      glyph.shaperInfo.category = 'VPre';\n    }\n  }\n}\nfunction reorder(font, glyphs) {\n  var dottedCircle = font.glyphForCodePoint(0x25cc).id;\n  for (var start = 0, end = nextSyllable$1(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable$1(glyphs, start)) {\n    var i = void 0,\n      j = void 0;\n    var info = glyphs[start].shaperInfo;\n    var type = info.syllableType; // Only a few syllable types need reordering.\n\n    if (type !== 'virama_terminated_cluster' && type !== 'standard_cluster' && type !== 'broken_cluster') {\n      continue;\n    } // Insert a dotted circle glyph in broken clusters.\n\n    if (type === 'broken_cluster' && dottedCircle) {\n      var g = new GlyphInfo(font, dottedCircle, [0x25cc]);\n      g.shaperInfo = info; // Insert after possible Repha.\n\n      for (i = start; i < end && glyphs[i].shaperInfo.category === 'R'; i++) {}\n      glyphs.splice(++i, 0, g);\n      end++;\n    } // Move things forward.\n\n    if (info.category === 'R' && end - start > 1) {\n      // Got a repha. Reorder it to after first base, before first halant.\n      for (i = start + 1; i < end; i++) {\n        info = glyphs[i].shaperInfo;\n        if (isBase(info) || isHalant(glyphs[i])) {\n          // If we hit a halant, move before it; otherwise it's a base: move to it's\n          // place, and shift things in between backward.\n          if (isHalant(glyphs[i])) {\n            i--;\n          }\n          glyphs.splice.apply(glyphs, [start, 0].concat(glyphs.splice(start + 1, i - start), [glyphs[i]]));\n          break;\n        }\n      }\n    } // Move things back.\n\n    for (i = start, j = end; i < end; i++) {\n      info = glyphs[i].shaperInfo;\n      if (isBase(info) || isHalant(glyphs[i])) {\n        // If we hit a halant, move after it; otherwise it's a base: move to it's\n        // place, and shift things in between backward.\n        j = isHalant(glyphs[i]) ? i + 1 : i;\n      } else if ((info.category === 'VPre' || info.category === 'VMPre') && j < i) {\n        glyphs.splice.apply(glyphs, [j, 1, glyphs[i]].concat(glyphs.splice(j, i - j)));\n      }\n    }\n  }\n}\nfunction nextSyllable$1(glyphs, start) {\n  if (start >= glyphs.length) return start;\n  var syllable = glyphs[start].shaperInfo.syllable;\n  while (++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable) {}\n  return start;\n}\nfunction isHalant(glyph) {\n  return glyph.shaperInfo.category === 'H' && !glyph.isLigated;\n}\nfunction isBase(info) {\n  return info.category === 'B' || info.category === 'GB';\n}\nvar SHAPERS = {\n  arab: ArabicShaper,\n  // Arabic\n  mong: ArabicShaper,\n  // Mongolian\n  syrc: ArabicShaper,\n  // Syriac\n  'nko ': ArabicShaper,\n  // N'Ko\n  phag: ArabicShaper,\n  // Phags Pa\n  mand: ArabicShaper,\n  // Mandaic\n  mani: ArabicShaper,\n  // Manichaean\n  phlp: ArabicShaper,\n  // Psalter Pahlavi\n  hang: HangulShaper,\n  // Hangul\n  bng2: IndicShaper,\n  // Bengali\n  beng: IndicShaper,\n  // Bengali\n  dev2: IndicShaper,\n  // Devanagari\n  deva: IndicShaper,\n  // Devanagari\n  gjr2: IndicShaper,\n  // Gujarati\n  gujr: IndicShaper,\n  // Gujarati\n  guru: IndicShaper,\n  // Gurmukhi\n  gur2: IndicShaper,\n  // Gurmukhi\n  knda: IndicShaper,\n  // Kannada\n  knd2: IndicShaper,\n  // Kannada\n  mlm2: IndicShaper,\n  // Malayalam\n  mlym: IndicShaper,\n  // Malayalam\n  ory2: IndicShaper,\n  // Oriya\n  orya: IndicShaper,\n  // Oriya\n  taml: IndicShaper,\n  // Tamil\n  tml2: IndicShaper,\n  // Tamil\n  telu: IndicShaper,\n  // Telugu\n  tel2: IndicShaper,\n  // Telugu\n  khmr: IndicShaper,\n  // Khmer\n  bali: UniversalShaper,\n  // Balinese\n  batk: UniversalShaper,\n  // Batak\n  brah: UniversalShaper,\n  // Brahmi\n  bugi: UniversalShaper,\n  // Buginese\n  buhd: UniversalShaper,\n  // Buhid\n  cakm: UniversalShaper,\n  // Chakma\n  cham: UniversalShaper,\n  // Cham\n  dupl: UniversalShaper,\n  // Duployan\n  egyp: UniversalShaper,\n  // Egyptian Hieroglyphs\n  gran: UniversalShaper,\n  // Grantha\n  hano: UniversalShaper,\n  // Hanunoo\n  java: UniversalShaper,\n  // Javanese\n  kthi: UniversalShaper,\n  // Kaithi\n  kali: UniversalShaper,\n  // Kayah Li\n  khar: UniversalShaper,\n  // Kharoshthi\n  khoj: UniversalShaper,\n  // Khojki\n  sind: UniversalShaper,\n  // Khudawadi\n  lepc: UniversalShaper,\n  // Lepcha\n  limb: UniversalShaper,\n  // Limbu\n  mahj: UniversalShaper,\n  // Mahajani\n  // mand: UniversalShaper, // Mandaic\n  // mani: UniversalShaper, // Manichaean\n  mtei: UniversalShaper,\n  // Meitei Mayek\n  modi: UniversalShaper,\n  // Modi\n  // mong: UniversalShaper, // Mongolian\n  // 'nko ': UniversalShaper, // N’Ko\n  hmng: UniversalShaper,\n  // Pahawh Hmong\n  // phag: UniversalShaper, // Phags-pa\n  // phlp: UniversalShaper, // Psalter Pahlavi\n  rjng: UniversalShaper,\n  // Rejang\n  saur: UniversalShaper,\n  // Saurashtra\n  shrd: UniversalShaper,\n  // Sharada\n  sidd: UniversalShaper,\n  // Siddham\n  sinh: UniversalShaper,\n  // Sinhala\n  sund: UniversalShaper,\n  // Sundanese\n  sylo: UniversalShaper,\n  // Syloti Nagri\n  tglg: UniversalShaper,\n  // Tagalog\n  tagb: UniversalShaper,\n  // Tagbanwa\n  tale: UniversalShaper,\n  // Tai Le\n  lana: UniversalShaper,\n  // Tai Tham\n  tavt: UniversalShaper,\n  // Tai Viet\n  takr: UniversalShaper,\n  // Takri\n  tibt: UniversalShaper,\n  // Tibetan\n  tfng: UniversalShaper,\n  // Tifinagh\n  tirh: UniversalShaper,\n  // Tirhuta\n  latn: DefaultShaper,\n  // Latin\n  DFLT: DefaultShaper // Default\n};\nfunction choose(script) {\n  if (!Array.isArray(script)) {\n    script = [script];\n  }\n  for (var _iterator59 = _createForOfIteratorHelperLoose(script), _step59; !(_step59 = _iterator59()).done;) {\n    var s = _step59.value;\n    var shaper = SHAPERS[s];\n    if (shaper) {\n      return shaper;\n    }\n  }\n  return DefaultShaper;\n}\nvar GSUBProcessor = /*#__PURE__*/function (_OTProcessor) {\n  _inheritsLoose(GSUBProcessor, _OTProcessor);\n  function GSUBProcessor() {\n    return _OTProcessor.apply(this, arguments) || this;\n  }\n  var _proto27 = GSUBProcessor.prototype;\n  _proto27.applyLookup = function applyLookup(lookupType, table) {\n    var _this7 = this;\n    switch (lookupType) {\n      case 1:\n        {\n          // Single Substitution\n          var index = this.coverageIndex(table.coverage);\n          if (index === -1) {\n            return false;\n          }\n          var glyph = this.glyphIterator.cur;\n          switch (table.version) {\n            case 1:\n              glyph.id = glyph.id + table.deltaGlyphID & 0xffff;\n              break;\n            case 2:\n              glyph.id = table.substitute.get(index);\n              break;\n          }\n          return true;\n        }\n      case 2:\n        {\n          // Multiple Substitution\n          var _index = this.coverageIndex(table.coverage);\n          if (_index !== -1) {\n            var _this$glyphs2;\n            var sequence = table.sequences.get(_index);\n            if (sequence.length === 0) {\n              // If the sequence length is zero, delete the glyph.\n              // The OpenType spec disallows this, but seems like Harfbuzz and Uniscribe allow it.\n              this.glyphs.splice(this.glyphIterator.index, 1);\n              return true;\n            }\n            this.glyphIterator.cur.id = sequence[0];\n            this.glyphIterator.cur.ligatureComponent = 0;\n            var features = this.glyphIterator.cur.features;\n            var curGlyph = this.glyphIterator.cur;\n            var replacement = sequence.slice(1).map(function (gid, i) {\n              var glyph = new GlyphInfo(_this7.font, gid, undefined, features);\n              glyph.shaperInfo = curGlyph.shaperInfo;\n              glyph.isLigated = curGlyph.isLigated;\n              glyph.ligatureComponent = i + 1;\n              glyph.substituted = true;\n              glyph.isMultiplied = true;\n              return glyph;\n            });\n            (_this$glyphs2 = this.glyphs).splice.apply(_this$glyphs2, [this.glyphIterator.index + 1, 0].concat(replacement));\n            return true;\n          }\n          return false;\n        }\n      case 3:\n        {\n          // Alternate Substitution\n          var _index2 = this.coverageIndex(table.coverage);\n          if (_index2 !== -1) {\n            var USER_INDEX = 0; // TODO\n\n            this.glyphIterator.cur.id = table.alternateSet.get(_index2)[USER_INDEX];\n            return true;\n          }\n          return false;\n        }\n      case 4:\n        {\n          // Ligature Substitution\n          var _index3 = this.coverageIndex(table.coverage);\n          if (_index3 === -1) {\n            return false;\n          }\n          for (var _iterator60 = _createForOfIteratorHelperLoose(table.ligatureSets.get(_index3)), _step60; !(_step60 = _iterator60()).done;) {\n            var ligature = _step60.value;\n            var matched = this.sequenceMatchIndices(1, ligature.components);\n            if (!matched) {\n              continue;\n            }\n            var _curGlyph = this.glyphIterator.cur; // Concatenate all of the characters the new ligature will represent\n\n            var characters = _curGlyph.codePoints.slice();\n            for (var _iterator61 = _createForOfIteratorHelperLoose(matched), _step61; !(_step61 = _iterator61()).done;) {\n              var _characters;\n              var _index4 = _step61.value;\n              (_characters = characters).push.apply(_characters, this.glyphs[_index4].codePoints);\n            } // Create the replacement ligature glyph\n\n            var ligatureGlyph = new GlyphInfo(this.font, ligature.glyph, characters, _curGlyph.features);\n            ligatureGlyph.shaperInfo = _curGlyph.shaperInfo;\n            ligatureGlyph.isLigated = true;\n            ligatureGlyph.substituted = true; // From Harfbuzz:\n            // - If it *is* a mark ligature, we don't allocate a new ligature id, and leave\n            //   the ligature to keep its old ligature id.  This will allow it to attach to\n            //   a base ligature in GPOS.  Eg. if the sequence is: LAM,LAM,SHADDA,FATHA,HEH,\n            //   and LAM,LAM,HEH for a ligature, they will leave SHADDA and FATHA with a\n            //   ligature id and component value of 2.  Then if SHADDA,FATHA form a ligature\n            //   later, we don't want them to lose their ligature id/component, otherwise\n            //   GPOS will fail to correctly position the mark ligature on top of the\n            //   LAM,LAM,HEH ligature. See https://bugzilla.gnome.org/show_bug.cgi?id=676343\n            //\n            // - If a ligature is formed of components that some of which are also ligatures\n            //   themselves, and those ligature components had marks attached to *their*\n            //   components, we have to attach the marks to the new ligature component\n            //   positions!  Now *that*'s tricky!  And these marks may be following the\n            //   last component of the whole sequence, so we should loop forward looking\n            //   for them and update them.\n            //\n            //   Eg. the sequence is LAM,LAM,SHADDA,FATHA,HEH, and the font first forms a\n            //   'calt' ligature of LAM,HEH, leaving the SHADDA and FATHA with a ligature\n            //   id and component == 1.  Now, during 'liga', the LAM and the LAM-HEH ligature\n            //   form a LAM-LAM-HEH ligature.  We need to reassign the SHADDA and FATHA to\n            //   the new ligature with a component value of 2.\n            //\n            //   This in fact happened to a font...  See https://bugzilla.gnome.org/show_bug.cgi?id=437633\n\n            var isMarkLigature = _curGlyph.isMark;\n            for (var i = 0; i < matched.length && isMarkLigature; i++) {\n              isMarkLigature = this.glyphs[matched[i]].isMark;\n            }\n            ligatureGlyph.ligatureID = isMarkLigature ? null : this.ligatureID++;\n            var lastLigID = _curGlyph.ligatureID;\n            var lastNumComps = _curGlyph.codePoints.length;\n            var curComps = lastNumComps;\n            var idx = this.glyphIterator.index + 1; // Set ligatureID and ligatureComponent on glyphs that were skipped in the matched sequence.\n            // This allows GPOS to attach marks to the correct ligature components.\n\n            for (var _iterator62 = _createForOfIteratorHelperLoose(matched), _step62; !(_step62 = _iterator62()).done;) {\n              var matchIndex = _step62.value;\n              // Don't assign new ligature components for mark ligatures (see above)\n              if (isMarkLigature) {\n                idx = matchIndex;\n              } else {\n                while (idx < matchIndex) {\n                  var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[idx].ligatureComponent || 1, lastNumComps);\n                  this.glyphs[idx].ligatureID = ligatureGlyph.ligatureID;\n                  this.glyphs[idx].ligatureComponent = ligatureComponent;\n                  idx++;\n                }\n              }\n              lastLigID = this.glyphs[idx].ligatureID;\n              lastNumComps = this.glyphs[idx].codePoints.length;\n              curComps += lastNumComps;\n              idx++; // skip base glyph\n            } // Adjust ligature components for any marks following\n\n            if (lastLigID && !isMarkLigature) {\n              for (var _i = idx; _i < this.glyphs.length; _i++) {\n                if (this.glyphs[_i].ligatureID === lastLigID) {\n                  var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[_i].ligatureComponent || 1, lastNumComps);\n                  this.glyphs[_i].ligatureComponent = ligatureComponent;\n                } else {\n                  break;\n                }\n              }\n            } // Delete the matched glyphs, and replace the current glyph with the ligature glyph\n\n            for (var _i2 = matched.length - 1; _i2 >= 0; _i2--) {\n              this.glyphs.splice(matched[_i2], 1);\n            }\n            this.glyphs[this.glyphIterator.index] = ligatureGlyph;\n            return true;\n          }\n          return false;\n        }\n      case 5:\n        // Contextual Substitution\n        return this.applyContext(table);\n      case 6:\n        // Chaining Contextual Substitution\n        return this.applyChainingContext(table);\n      case 7:\n        // Extension Substitution\n        return this.applyLookup(table.lookupType, table.extension);\n      default:\n        throw new Error(\"GSUB lookupType \".concat(lookupType, \" is not supported\"));\n    }\n  };\n  return GSUBProcessor;\n}(OTProcessor);\nvar GPOSProcessor = /*#__PURE__*/function (_OTProcessor2) {\n  _inheritsLoose(GPOSProcessor, _OTProcessor2);\n  function GPOSProcessor() {\n    return _OTProcessor2.apply(this, arguments) || this;\n  }\n  var _proto28 = GPOSProcessor.prototype;\n  _proto28.applyPositionValue = function applyPositionValue(sequenceIndex, value) {\n    var position = this.positions[this.glyphIterator.peekIndex(sequenceIndex)];\n    if (value.xAdvance != null) {\n      position.xAdvance += value.xAdvance;\n    }\n    if (value.yAdvance != null) {\n      position.yAdvance += value.yAdvance;\n    }\n    if (value.xPlacement != null) {\n      position.xOffset += value.xPlacement;\n    }\n    if (value.yPlacement != null) {\n      position.yOffset += value.yPlacement;\n    } // Adjustments for font variations\n\n    var variationProcessor = this.font._variationProcessor;\n    var variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore;\n    if (variationProcessor && variationStore) {\n      if (value.xPlaDevice) {\n        position.xOffset += variationProcessor.getDelta(variationStore, value.xPlaDevice.a, value.xPlaDevice.b);\n      }\n      if (value.yPlaDevice) {\n        position.yOffset += variationProcessor.getDelta(variationStore, value.yPlaDevice.a, value.yPlaDevice.b);\n      }\n      if (value.xAdvDevice) {\n        position.xAdvance += variationProcessor.getDelta(variationStore, value.xAdvDevice.a, value.xAdvDevice.b);\n      }\n      if (value.yAdvDevice) {\n        position.yAdvance += variationProcessor.getDelta(variationStore, value.yAdvDevice.a, value.yAdvDevice.b);\n      }\n    } // TODO: device tables\n  };\n  _proto28.applyLookup = function applyLookup(lookupType, table) {\n    switch (lookupType) {\n      case 1:\n        {\n          // Single positioning value\n          var index = this.coverageIndex(table.coverage);\n          if (index === -1) {\n            return false;\n          }\n          switch (table.version) {\n            case 1:\n              this.applyPositionValue(0, table.value);\n              break;\n            case 2:\n              this.applyPositionValue(0, table.values.get(index));\n              break;\n          }\n          return true;\n        }\n      case 2:\n        {\n          // Pair Adjustment Positioning\n          var nextGlyph = this.glyphIterator.peek();\n          if (!nextGlyph) {\n            return false;\n          }\n          var _index = this.coverageIndex(table.coverage);\n          if (_index === -1) {\n            return false;\n          }\n          switch (table.version) {\n            case 1:\n              // Adjustments for glyph pairs\n              var set = table.pairSets.get(_index);\n              for (var _iterator63 = _createForOfIteratorHelperLoose(set), _step63; !(_step63 = _iterator63()).done;) {\n                var _pair = _step63.value;\n                if (_pair.secondGlyph === nextGlyph.id) {\n                  this.applyPositionValue(0, _pair.value1);\n                  this.applyPositionValue(1, _pair.value2);\n                  return true;\n                }\n              }\n              return false;\n            case 2:\n              // Class pair adjustment\n              var class1 = this.getClassID(this.glyphIterator.cur.id, table.classDef1);\n              var class2 = this.getClassID(nextGlyph.id, table.classDef2);\n              if (class1 === -1 || class2 === -1) {\n                return false;\n              }\n              var pair = table.classRecords.get(class1).get(class2);\n              this.applyPositionValue(0, pair.value1);\n              this.applyPositionValue(1, pair.value2);\n              return true;\n          }\n        }\n      case 3:\n        {\n          // Cursive Attachment Positioning\n          var nextIndex = this.glyphIterator.peekIndex();\n          var _nextGlyph = this.glyphs[nextIndex];\n          if (!_nextGlyph) {\n            return false;\n          }\n          var curRecord = table.entryExitRecords[this.coverageIndex(table.coverage)];\n          if (!curRecord || !curRecord.exitAnchor) {\n            return false;\n          }\n          var nextRecord = table.entryExitRecords[this.coverageIndex(table.coverage, _nextGlyph.id)];\n          if (!nextRecord || !nextRecord.entryAnchor) {\n            return false;\n          }\n          var entry = this.getAnchor(nextRecord.entryAnchor);\n          var exit = this.getAnchor(curRecord.exitAnchor);\n          var cur = this.positions[this.glyphIterator.index];\n          var next = this.positions[nextIndex];\n          switch (this.direction) {\n            case 'ltr':\n              cur.xAdvance = exit.x + cur.xOffset;\n              var d = entry.x + next.xOffset;\n              next.xAdvance -= d;\n              next.xOffset -= d;\n              break;\n            case 'rtl':\n              d = exit.x + cur.xOffset;\n              cur.xAdvance -= d;\n              cur.xOffset -= d;\n              next.xAdvance = entry.x + next.xOffset;\n              break;\n          }\n          if (this.glyphIterator.flags.rightToLeft) {\n            this.glyphIterator.cur.cursiveAttachment = nextIndex;\n            cur.yOffset = entry.y - exit.y;\n          } else {\n            _nextGlyph.cursiveAttachment = this.glyphIterator.index;\n            cur.yOffset = exit.y - entry.y;\n          }\n          return true;\n        }\n      case 4:\n        {\n          // Mark to base positioning\n          var markIndex = this.coverageIndex(table.markCoverage);\n          if (markIndex === -1) {\n            return false;\n          } // search backward for a base glyph\n\n          var baseGlyphIndex = this.glyphIterator.index;\n          while (--baseGlyphIndex >= 0 && (this.glyphs[baseGlyphIndex].isMark || this.glyphs[baseGlyphIndex].ligatureComponent > 0)) {}\n          if (baseGlyphIndex < 0) {\n            return false;\n          }\n          var baseIndex = this.coverageIndex(table.baseCoverage, this.glyphs[baseGlyphIndex].id);\n          if (baseIndex === -1) {\n            return false;\n          }\n          var markRecord = table.markArray[markIndex];\n          var baseAnchor = table.baseArray[baseIndex][markRecord.class];\n          this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex);\n          return true;\n        }\n      case 5:\n        {\n          // Mark to ligature positioning\n          var _markIndex = this.coverageIndex(table.markCoverage);\n          if (_markIndex === -1) {\n            return false;\n          } // search backward for a base glyph\n\n          var _baseGlyphIndex = this.glyphIterator.index;\n          while (--_baseGlyphIndex >= 0 && this.glyphs[_baseGlyphIndex].isMark) {}\n          if (_baseGlyphIndex < 0) {\n            return false;\n          }\n          var ligIndex = this.coverageIndex(table.ligatureCoverage, this.glyphs[_baseGlyphIndex].id);\n          if (ligIndex === -1) {\n            return false;\n          }\n          var ligAttach = table.ligatureArray[ligIndex];\n          var markGlyph = this.glyphIterator.cur;\n          var ligGlyph = this.glyphs[_baseGlyphIndex];\n          var compIndex = ligGlyph.ligatureID && ligGlyph.ligatureID === markGlyph.ligatureID && markGlyph.ligatureComponent > 0 ? Math.min(markGlyph.ligatureComponent, ligGlyph.codePoints.length) - 1 : ligGlyph.codePoints.length - 1;\n          var _markRecord = table.markArray[_markIndex];\n          var _baseAnchor = ligAttach[compIndex][_markRecord.class];\n          this.applyAnchor(_markRecord, _baseAnchor, _baseGlyphIndex);\n          return true;\n        }\n      case 6:\n        {\n          // Mark to mark positioning\n          var mark1Index = this.coverageIndex(table.mark1Coverage);\n          if (mark1Index === -1) {\n            return false;\n          } // get the previous mark to attach to\n\n          var prevIndex = this.glyphIterator.peekIndex(-1);\n          var prev = this.glyphs[prevIndex];\n          if (!prev || !prev.isMark) {\n            return false;\n          }\n          var _cur = this.glyphIterator.cur; // The following logic was borrowed from Harfbuzz\n\n          var good = false;\n          if (_cur.ligatureID === prev.ligatureID) {\n            if (!_cur.ligatureID) {\n              // Marks belonging to the same base\n              good = true;\n            } else if (_cur.ligatureComponent === prev.ligatureComponent) {\n              // Marks belonging to the same ligature component\n              good = true;\n            }\n          } else {\n            // If ligature ids don't match, it may be the case that one of the marks\n            // itself is a ligature, in which case match.\n            if (_cur.ligatureID && !_cur.ligatureComponent || prev.ligatureID && !prev.ligatureComponent) {\n              good = true;\n            }\n          }\n          if (!good) {\n            return false;\n          }\n          var mark2Index = this.coverageIndex(table.mark2Coverage, prev.id);\n          if (mark2Index === -1) {\n            return false;\n          }\n          var _markRecord2 = table.mark1Array[mark1Index];\n          var _baseAnchor2 = table.mark2Array[mark2Index][_markRecord2.class];\n          this.applyAnchor(_markRecord2, _baseAnchor2, prevIndex);\n          return true;\n        }\n      case 7:\n        // Contextual positioning\n        return this.applyContext(table);\n      case 8:\n        // Chaining contextual positioning\n        return this.applyChainingContext(table);\n      case 9:\n        // Extension positioning\n        return this.applyLookup(table.lookupType, table.extension);\n      default:\n        throw new Error(\"Unsupported GPOS table: \".concat(lookupType));\n    }\n  };\n  _proto28.applyAnchor = function applyAnchor(markRecord, baseAnchor, baseGlyphIndex) {\n    var baseCoords = this.getAnchor(baseAnchor);\n    var markCoords = this.getAnchor(markRecord.markAnchor);\n    var basePos = this.positions[baseGlyphIndex];\n    var markPos = this.positions[this.glyphIterator.index];\n    markPos.xOffset = baseCoords.x - markCoords.x;\n    markPos.yOffset = baseCoords.y - markCoords.y;\n    this.glyphIterator.cur.markAttachment = baseGlyphIndex;\n  };\n  _proto28.getAnchor = function getAnchor(anchor) {\n    // TODO: contour point, device tables\n    var x = anchor.xCoordinate;\n    var y = anchor.yCoordinate; // Adjustments for font variations\n\n    var variationProcessor = this.font._variationProcessor;\n    var variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore;\n    if (variationProcessor && variationStore) {\n      if (anchor.xDeviceTable) {\n        x += variationProcessor.getDelta(variationStore, anchor.xDeviceTable.a, anchor.xDeviceTable.b);\n      }\n      if (anchor.yDeviceTable) {\n        y += variationProcessor.getDelta(variationStore, anchor.yDeviceTable.a, anchor.yDeviceTable.b);\n      }\n    }\n    return {\n      x: x,\n      y: y\n    };\n  };\n  _proto28.applyFeatures = function applyFeatures(userFeatures, glyphs, advances) {\n    _OTProcessor2.prototype.applyFeatures.call(this, userFeatures, glyphs, advances);\n    for (var i = 0; i < this.glyphs.length; i++) {\n      this.fixCursiveAttachment(i);\n    }\n    this.fixMarkAttachment();\n  };\n  _proto28.fixCursiveAttachment = function fixCursiveAttachment(i) {\n    var glyph = this.glyphs[i];\n    if (glyph.cursiveAttachment != null) {\n      var j = glyph.cursiveAttachment;\n      glyph.cursiveAttachment = null;\n      this.fixCursiveAttachment(j);\n      this.positions[i].yOffset += this.positions[j].yOffset;\n    }\n  };\n  _proto28.fixMarkAttachment = function fixMarkAttachment() {\n    for (var i = 0; i < this.glyphs.length; i++) {\n      var glyph = this.glyphs[i];\n      if (glyph.markAttachment != null) {\n        var j = glyph.markAttachment;\n        this.positions[i].xOffset += this.positions[j].xOffset;\n        this.positions[i].yOffset += this.positions[j].yOffset;\n        if (this.direction === 'ltr') {\n          for (var k = j; k < i; k++) {\n            this.positions[i].xOffset -= this.positions[k].xAdvance;\n            this.positions[i].yOffset -= this.positions[k].yAdvance;\n          }\n        } else {\n          for (var _k = j + 1; _k < i + 1; _k++) {\n            this.positions[i].xOffset += this.positions[_k].xAdvance;\n            this.positions[i].yOffset += this.positions[_k].yAdvance;\n          }\n        }\n      }\n    }\n  };\n  return GPOSProcessor;\n}(OTProcessor);\nvar OTLayoutEngine = /*#__PURE__*/function () {\n  function OTLayoutEngine(font) {\n    this.font = font;\n    this.glyphInfos = null;\n    this.plan = null;\n    this.GSUBProcessor = null;\n    this.GPOSProcessor = null;\n    this.fallbackPosition = true;\n    if (font.GSUB) {\n      this.GSUBProcessor = new GSUBProcessor(font, font.GSUB);\n    }\n    if (font.GPOS) {\n      this.GPOSProcessor = new GPOSProcessor(font, font.GPOS);\n    }\n  }\n  var _proto29 = OTLayoutEngine.prototype;\n  _proto29.setup = function setup(glyphRun) {\n    var _this8 = this;\n    // Map glyphs to GlyphInfo objects so data can be passed between\n    // GSUB and GPOS without mutating the real (shared) Glyph objects.\n    this.glyphInfos = glyphRun.glyphs.map(function (glyph) {\n      return new GlyphInfo(_this8.font, glyph.id, [].concat(glyph.codePoints));\n    }); // Select a script based on what is available in GSUB/GPOS.\n\n    var script = null;\n    if (this.GPOSProcessor) {\n      script = this.GPOSProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction);\n    }\n    if (this.GSUBProcessor) {\n      script = this.GSUBProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction);\n    } // Choose a shaper based on the script, and setup a shaping plan.\n    // This determines which features to apply to which glyphs.\n\n    this.shaper = choose(script);\n    this.plan = new ShapingPlan(this.font, script, glyphRun.direction);\n    this.shaper.plan(this.plan, this.glyphInfos, glyphRun.features); // Assign chosen features to output glyph run\n\n    for (var key in this.plan.allFeatures) {\n      glyphRun.features[key] = true;\n    }\n  };\n  _proto29.substitute = function substitute(glyphRun) {\n    var _this9 = this;\n    if (this.GSUBProcessor) {\n      this.plan.process(this.GSUBProcessor, this.glyphInfos); // Map glyph infos back to normal Glyph objects\n\n      glyphRun.glyphs = this.glyphInfos.map(function (glyphInfo) {\n        return _this9.font.getGlyph(glyphInfo.id, glyphInfo.codePoints);\n      });\n    }\n  };\n  _proto29.position = function position(glyphRun) {\n    if (this.shaper.zeroMarkWidths === 'BEFORE_GPOS') {\n      this.zeroMarkAdvances(glyphRun.positions);\n    }\n    if (this.GPOSProcessor) {\n      this.plan.process(this.GPOSProcessor, this.glyphInfos, glyphRun.positions);\n    }\n    if (this.shaper.zeroMarkWidths === 'AFTER_GPOS') {\n      this.zeroMarkAdvances(glyphRun.positions);\n    } // Reverse the glyphs and positions if the script is right-to-left\n\n    if (glyphRun.direction === 'rtl') {\n      glyphRun.glyphs.reverse();\n      glyphRun.positions.reverse();\n    }\n    return this.GPOSProcessor && this.GPOSProcessor.features;\n  };\n  _proto29.zeroMarkAdvances = function zeroMarkAdvances(positions) {\n    for (var i = 0; i < this.glyphInfos.length; i++) {\n      if (this.glyphInfos[i].isMark) {\n        positions[i].xAdvance = 0;\n        positions[i].yAdvance = 0;\n      }\n    }\n  };\n  _proto29.cleanup = function cleanup() {\n    this.glyphInfos = null;\n    this.plan = null;\n    this.shaper = null;\n  };\n  _proto29.getAvailableFeatures = function getAvailableFeatures(script, language) {\n    var features = [];\n    if (this.GSUBProcessor) {\n      this.GSUBProcessor.selectScript(script, language);\n      features.push.apply(features, Object.keys(this.GSUBProcessor.features));\n    }\n    if (this.GPOSProcessor) {\n      this.GPOSProcessor.selectScript(script, language);\n      features.push.apply(features, Object.keys(this.GPOSProcessor.features));\n    }\n    return features;\n  };\n  return OTLayoutEngine;\n}();\nvar LayoutEngine = /*#__PURE__*/function () {\n  function LayoutEngine(font) {\n    this.font = font;\n    this.unicodeLayoutEngine = null;\n    this.kernProcessor = null; // Choose an advanced layout engine. We try the AAT morx table first since more\n    // scripts are currently supported because the shaping logic is built into the font.\n\n    if (this.font.morx) {\n      this.engine = new AATLayoutEngine(this.font);\n    } else if (this.font.GSUB || this.font.GPOS) {\n      this.engine = new OTLayoutEngine(this.font);\n    }\n  }\n  var _proto30 = LayoutEngine.prototype;\n  _proto30.layout = function layout(string, features, script, language, direction) {\n    // Make the features parameter optional\n    if (typeof features === 'string') {\n      direction = language;\n      language = script;\n      script = features;\n      features = [];\n    } // Map string to glyphs if needed\n\n    if (typeof string === 'string') {\n      // Attempt to detect the script from the string if not provided.\n      if (script == null) {\n        script = forString(string);\n      }\n      var glyphs = this.font.glyphsForString(string);\n    } else {\n      // Attempt to detect the script from the glyph code points if not provided.\n      if (script == null) {\n        var codePoints = [];\n        for (var _iterator64 = _createForOfIteratorHelperLoose(string), _step64; !(_step64 = _iterator64()).done;) {\n          var glyph = _step64.value;\n          codePoints.push.apply(codePoints, glyph.codePoints);\n        }\n        script = forCodePoints(codePoints);\n      }\n      var glyphs = string;\n    }\n    var glyphRun = new GlyphRun(glyphs, features, script, language, direction); // Return early if there are no glyphs\n\n    if (glyphs.length === 0) {\n      glyphRun.positions = [];\n      return glyphRun;\n    } // Setup the advanced layout engine\n\n    if (this.engine && this.engine.setup) {\n      this.engine.setup(glyphRun);\n    } // Substitute and position the glyphs\n\n    this.substitute(glyphRun);\n    this.position(glyphRun);\n    this.hideDefaultIgnorables(glyphRun.glyphs, glyphRun.positions); // Let the layout engine clean up any state it might have\n\n    if (this.engine && this.engine.cleanup) {\n      this.engine.cleanup();\n    }\n    return glyphRun;\n  };\n  _proto30.substitute = function substitute(glyphRun) {\n    // Call the advanced layout engine to make substitutions\n    if (this.engine && this.engine.substitute) {\n      this.engine.substitute(glyphRun);\n    }\n  };\n  _proto30.position = function position(glyphRun) {\n    // Get initial glyph positions\n    glyphRun.positions = glyphRun.glyphs.map(function (glyph) {\n      return new GlyphPosition(glyph.advanceWidth);\n    });\n    var positioned = null; // Call the advanced layout engine. Returns the features applied.\n\n    if (this.engine && this.engine.position) {\n      positioned = this.engine.position(glyphRun);\n    } // if there is no GPOS table, use unicode properties to position marks.\n\n    if (!positioned && (!this.engine || this.engine.fallbackPosition)) {\n      if (!this.unicodeLayoutEngine) {\n        this.unicodeLayoutEngine = new UnicodeLayoutEngine(this.font);\n      }\n      this.unicodeLayoutEngine.positionGlyphs(glyphRun.glyphs, glyphRun.positions);\n    } // if kerning is not supported by GPOS, do kerning with the TrueType/AAT kern table\n\n    if ((!positioned || !positioned.kern) && glyphRun.features.kern !== false && this.font.kern) {\n      if (!this.kernProcessor) {\n        this.kernProcessor = new KernProcessor(this.font);\n      }\n      this.kernProcessor.process(glyphRun.glyphs, glyphRun.positions);\n      glyphRun.features.kern = true;\n    }\n  };\n  _proto30.hideDefaultIgnorables = function hideDefaultIgnorables(glyphs, positions) {\n    var space = this.font.glyphForCodePoint(0x20);\n    for (var i = 0; i < glyphs.length; i++) {\n      if (this.isDefaultIgnorable(glyphs[i].codePoints[0])) {\n        glyphs[i] = space;\n        positions[i].xAdvance = 0;\n        positions[i].yAdvance = 0;\n      }\n    }\n  };\n  _proto30.isDefaultIgnorable = function isDefaultIgnorable(ch) {\n    // From DerivedCoreProperties.txt in the Unicode database,\n    // minus U+115F, U+1160, U+3164 and U+FFA0, which is what\n    // Harfbuzz and Uniscribe do.\n    var plane = ch >> 16;\n    if (plane === 0) {\n      // BMP\n      switch (ch >> 8) {\n        case 0x00:\n          return ch === 0x00AD;\n        case 0x03:\n          return ch === 0x034F;\n        case 0x06:\n          return ch === 0x061C;\n        case 0x17:\n          return 0x17B4 <= ch && ch <= 0x17B5;\n        case 0x18:\n          return 0x180B <= ch && ch <= 0x180E;\n        case 0x20:\n          return 0x200B <= ch && ch <= 0x200F || 0x202A <= ch && ch <= 0x202E || 0x2060 <= ch && ch <= 0x206F;\n        case 0xFE:\n          return 0xFE00 <= ch && ch <= 0xFE0F || ch === 0xFEFF;\n        case 0xFF:\n          return 0xFFF0 <= ch && ch <= 0xFFF8;\n        default:\n          return false;\n      }\n    } else {\n      // Other planes\n      switch (plane) {\n        case 0x01:\n          return 0x1BCA0 <= ch && ch <= 0x1BCA3 || 0x1D173 <= ch && ch <= 0x1D17A;\n        case 0x0E:\n          return 0xE0000 <= ch && ch <= 0xE0FFF;\n        default:\n          return false;\n      }\n    }\n  };\n  _proto30.getAvailableFeatures = function getAvailableFeatures(script, language) {\n    var features = [];\n    if (this.engine) {\n      features.push.apply(features, this.engine.getAvailableFeatures(script, language));\n    }\n    if (this.font.kern && features.indexOf('kern') === -1) {\n      features.push('kern');\n    }\n    return features;\n  };\n  _proto30.stringsForGlyph = function stringsForGlyph(gid) {\n    var result = new Set();\n    var codePoints = this.font._cmapProcessor.codePointsForGlyph(gid);\n    for (var _iterator65 = _createForOfIteratorHelperLoose(codePoints), _step65; !(_step65 = _iterator65()).done;) {\n      var codePoint = _step65.value;\n      result.add(String.fromCodePoint(codePoint));\n    }\n    if (this.engine && this.engine.stringsForGlyph) {\n      for (var _iterator66 = _createForOfIteratorHelperLoose(this.engine.stringsForGlyph(gid)), _step66; !(_step66 = _iterator66()).done;) {\n        var string = _step66.value;\n        result.add(string);\n      }\n    }\n    return Array.from(result);\n  };\n  return LayoutEngine;\n}();\nvar SVG_COMMANDS = {\n  moveTo: 'M',\n  lineTo: 'L',\n  quadraticCurveTo: 'Q',\n  bezierCurveTo: 'C',\n  closePath: 'Z'\n};\n/**\r\n * Path objects are returned by glyphs and represent the actual\r\n * vector outlines for each glyph in the font. Paths can be converted\r\n * to SVG path data strings, or to functions that can be applied to\r\n * render the path to a graphics context.\r\n */\nvar Path = /*#__PURE__*/function () {\n  function Path() {\n    this.commands = [];\n    this._bbox = null;\n    this._cbox = null;\n  }\n  /**\r\n   * Compiles the path to a JavaScript function that can be applied with\r\n   * a graphics context in order to render the path.\r\n   * @return {string}\r\n   */\n  var _proto31 = Path.prototype;\n  _proto31.toFunction = function toFunction() {\n    var _this10 = this;\n    return function (ctx) {\n      _this10.commands.forEach(function (c) {\n        return ctx[c.command].apply(ctx, c.args);\n      });\n    };\n  }\n  /**\r\n   * Converts the path to an SVG path data string\r\n   * @return {string}\r\n   */;\n  _proto31.toSVG = function toSVG() {\n    var cmds = this.commands.map(function (c) {\n      var args = c.args.map(function (arg) {\n        return Math.round(arg * 100) / 100;\n      });\n      return \"\".concat(SVG_COMMANDS[c.command]).concat(args.join(' '));\n    });\n    return cmds.join('');\n  }\n  /**\r\n   * Gets the \"control box\" of a path.\r\n   * This is like the bounding box, but it includes all points including\r\n   * control points of bezier segments and is much faster to compute than\r\n   * the real bounding box.\r\n   * @type {BBox}\r\n   */;\n  /**\r\n   * Applies a mapping function to each point in the path.\r\n   * @param {function} fn\r\n   * @return {Path}\r\n   */\n  _proto31.mapPoints = function mapPoints(fn) {\n    var path = new Path();\n    for (var _iterator67 = _createForOfIteratorHelperLoose(this.commands), _step67; !(_step67 = _iterator67()).done;) {\n      var c = _step67.value;\n      var args = [];\n      for (var i = 0; i < c.args.length; i += 2) {\n        var _fn = fn(c.args[i], c.args[i + 1]),\n          x = _fn[0],\n          y = _fn[1];\n        args.push(x, y);\n      }\n      path[c.command].apply(path, args);\n    }\n    return path;\n  }\n  /**\r\n   * Transforms the path by the given matrix.\r\n   */;\n  _proto31.transform = function transform(m0, m1, m2, m3, m4, m5) {\n    return this.mapPoints(function (x, y) {\n      x = m0 * x + m2 * y + m4;\n      y = m1 * x + m3 * y + m5;\n      return [x, y];\n    });\n  }\n  /**\r\n   * Translates the path by the given offset.\r\n   */;\n  _proto31.translate = function translate(x, y) {\n    return this.transform(1, 0, 0, 1, x, y);\n  }\n  /**\r\n   * Rotates the path by the given angle (in radians).\r\n   */;\n  _proto31.rotate = function rotate(angle) {\n    var cos = Math.cos(angle);\n    var sin = Math.sin(angle);\n    return this.transform(cos, sin, -sin, cos, 0, 0);\n  }\n  /**\r\n   * Scales the path.\r\n   */;\n  _proto31.scale = function scale(scaleX, scaleY) {\n    if (scaleY === void 0) {\n      scaleY = scaleX;\n    }\n    return this.transform(scaleX, 0, 0, scaleY, 0, 0);\n  };\n  _createClass(Path, [{\n    key: \"cbox\",\n    get: function get() {\n      if (!this._cbox) {\n        var cbox = new BBox();\n        for (var _iterator68 = _createForOfIteratorHelperLoose(this.commands), _step68; !(_step68 = _iterator68()).done;) {\n          var command = _step68.value;\n          for (var i = 0; i < command.args.length; i += 2) {\n            cbox.addPoint(command.args[i], command.args[i + 1]);\n          }\n        }\n        this._cbox = Object.freeze(cbox);\n      }\n      return this._cbox;\n    }\n    /**\r\n     * Gets the exact bounding box of the path by evaluating curve segments.\r\n     * Slower to compute than the control box, but more accurate.\r\n     * @type {BBox}\r\n     */\n  }, {\n    key: \"bbox\",\n    get: function get() {\n      if (this._bbox) {\n        return this._bbox;\n      }\n      var bbox = new BBox();\n      var cx = 0,\n        cy = 0;\n      var f = function f(t) {\n        return Math.pow(1 - t, 3) * p0[i] + 3 * Math.pow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * Math.pow(t, 2) * p2[i] + Math.pow(t, 3) * p3[i];\n      };\n      for (var _iterator69 = _createForOfIteratorHelperLoose(this.commands), _step69; !(_step69 = _iterator69()).done;) {\n        var c = _step69.value;\n        switch (c.command) {\n          case 'moveTo':\n          case 'lineTo':\n            var _c$args = c.args,\n              x = _c$args[0],\n              y = _c$args[1];\n            bbox.addPoint(x, y);\n            cx = x;\n            cy = y;\n            break;\n          case 'quadraticCurveTo':\n          case 'bezierCurveTo':\n            if (c.command === 'quadraticCurveTo') {\n              // http://fontforge.org/bezier.html\n              var _c$args2 = c.args,\n                qp1x = _c$args2[0],\n                qp1y = _c$args2[1],\n                p3x = _c$args2[2],\n                p3y = _c$args2[3];\n              var cp1x = cx + 2 / 3 * (qp1x - cx); // CP1 = QP0 + 2/3 * (QP1-QP0)\n\n              var cp1y = cy + 2 / 3 * (qp1y - cy);\n              var cp2x = p3x + 2 / 3 * (qp1x - p3x); // CP2 = QP2 + 2/3 * (QP1-QP2)\n\n              var cp2y = p3y + 2 / 3 * (qp1y - p3y);\n            } else {\n              var _c$args3 = c.args,\n                cp1x = _c$args3[0],\n                cp1y = _c$args3[1],\n                cp2x = _c$args3[2],\n                cp2y = _c$args3[3],\n                p3x = _c$args3[4],\n                p3y = _c$args3[5];\n            } // http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n\n            bbox.addPoint(p3x, p3y);\n            var p0 = [cx, cy];\n            var p1 = [cp1x, cp1y];\n            var p2 = [cp2x, cp2y];\n            var p3 = [p3x, p3y];\n            for (var i = 0; i <= 1; i++) {\n              var b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n              var a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n              c = 3 * p1[i] - 3 * p0[i];\n              if (a === 0) {\n                if (b === 0) {\n                  continue;\n                }\n                var t = -c / b;\n                if (0 < t && t < 1) {\n                  if (i === 0) {\n                    bbox.addPoint(f(t), bbox.maxY);\n                  } else if (i === 1) {\n                    bbox.addPoint(bbox.maxX, f(t));\n                  }\n                }\n                continue;\n              }\n              var b2ac = Math.pow(b, 2) - 4 * c * a;\n              if (b2ac < 0) {\n                continue;\n              }\n              var t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n              if (0 < t1 && t1 < 1) {\n                if (i === 0) {\n                  bbox.addPoint(f(t1), bbox.maxY);\n                } else if (i === 1) {\n                  bbox.addPoint(bbox.maxX, f(t1));\n                }\n              }\n              var t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n              if (0 < t2 && t2 < 1) {\n                if (i === 0) {\n                  bbox.addPoint(f(t2), bbox.maxY);\n                } else if (i === 1) {\n                  bbox.addPoint(bbox.maxX, f(t2));\n                }\n              }\n            }\n            cx = p3x;\n            cy = p3y;\n            break;\n        }\n      }\n      return this._bbox = Object.freeze(bbox);\n    }\n  }]);\n  return Path;\n}();\nvar _loop = function _loop(command) {\n  Path.prototype[command] = function () {\n    this._bbox = this._cbox = null;\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n    this.commands.push({\n      command: command,\n      args: args\n    });\n    return this;\n  };\n};\nfor (var _i23 = 0, _arr = ['moveTo', 'lineTo', 'quadraticCurveTo', 'bezierCurveTo', 'closePath']; _i23 < _arr.length; _i23++) {\n  var command = _arr[_i23];\n  _loop(command);\n}\nvar StandardNames = ['.notdef', '.null', 'nonmarkingreturn', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'grave', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', 'Adieresis', 'Aring', 'Ccedilla', 'Eacute', 'Ntilde', 'Odieresis', 'Udieresis', 'aacute', 'agrave', 'acircumflex', 'adieresis', 'atilde', 'aring', 'ccedilla', 'eacute', 'egrave', 'ecircumflex', 'edieresis', 'iacute', 'igrave', 'icircumflex', 'idieresis', 'ntilde', 'oacute', 'ograve', 'ocircumflex', 'odieresis', 'otilde', 'uacute', 'ugrave', 'ucircumflex', 'udieresis', 'dagger', 'degree', 'cent', 'sterling', 'section', 'bullet', 'paragraph', 'germandbls', 'registered', 'copyright', 'trademark', 'acute', 'dieresis', 'notequal', 'AE', 'Oslash', 'infinity', 'plusminus', 'lessequal', 'greaterequal', 'yen', 'mu', 'partialdiff', 'summation', 'product', 'pi', 'integral', 'ordfeminine', 'ordmasculine', 'Omega', 'ae', 'oslash', 'questiondown', 'exclamdown', 'logicalnot', 'radical', 'florin', 'approxequal', 'Delta', 'guillemotleft', 'guillemotright', 'ellipsis', 'nonbreakingspace', 'Agrave', 'Atilde', 'Otilde', 'OE', 'oe', 'endash', 'emdash', 'quotedblleft', 'quotedblright', 'quoteleft', 'quoteright', 'divide', 'lozenge', 'ydieresis', 'Ydieresis', 'fraction', 'currency', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'daggerdbl', 'periodcentered', 'quotesinglbase', 'quotedblbase', 'perthousand', 'Acircumflex', 'Ecircumflex', 'Aacute', 'Edieresis', 'Egrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Igrave', 'Oacute', 'Ocircumflex', 'apple', 'Ograve', 'Uacute', 'Ucircumflex', 'Ugrave', 'dotlessi', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'ring', 'cedilla', 'hungarumlaut', 'ogonek', 'caron', 'Lslash', 'lslash', 'Scaron', 'scaron', 'Zcaron', 'zcaron', 'brokenbar', 'Eth', 'eth', 'Yacute', 'yacute', 'Thorn', 'thorn', 'minus', 'multiply', 'onesuperior', 'twosuperior', 'threesuperior', 'onehalf', 'onequarter', 'threequarters', 'franc', 'Gbreve', 'gbreve', 'Idotaccent', 'Scedilla', 'scedilla', 'Cacute', 'cacute', 'Ccaron', 'ccaron', 'dcroat'];\nvar _class$3;\n/**\r\n * Glyph objects represent a glyph in the font. They have various properties for accessing metrics and\r\n * the actual vector path the glyph represents, and methods for rendering the glyph to a graphics context.\r\n *\r\n * You do not create glyph objects directly. They are created by various methods on the font object.\r\n * There are several subclasses of the base Glyph class internally that may be returned depending\r\n * on the font format, but they all inherit from this class.\r\n */\n\nvar Glyph = (_class$3 = /*#__PURE__*/function () {\n  function Glyph(id, codePoints, font) {\n    /**\r\n     * The glyph id in the font\r\n     * @type {number}\r\n     */\n    this.id = id;\n    /**\r\n     * An array of unicode code points that are represented by this glyph.\r\n     * There can be multiple code points in the case of ligatures and other glyphs\r\n     * that represent multiple visual characters.\r\n     * @type {number[]}\r\n     */\n\n    this.codePoints = codePoints;\n    this._font = font; // TODO: get this info from GDEF if available\n\n    this.isMark = this.codePoints.length > 0 && this.codePoints.every(unicode.isMark);\n    this.isLigature = this.codePoints.length > 1;\n  }\n  var _proto32 = Glyph.prototype;\n  _proto32._getPath = function _getPath() {\n    return new Path();\n  };\n  _proto32._getCBox = function _getCBox() {\n    return this.path.cbox;\n  };\n  _proto32._getBBox = function _getBBox() {\n    return this.path.bbox;\n  };\n  _proto32._getTableMetrics = function _getTableMetrics(table) {\n    if (this.id < table.metrics.length) {\n      return table.metrics.get(this.id);\n    }\n    var metric = table.metrics.get(table.metrics.length - 1);\n    var res = {\n      advance: metric ? metric.advance : 0,\n      bearing: table.bearings.get(this.id - table.metrics.length) || 0\n    };\n    return res;\n  };\n  _proto32._getMetrics = function _getMetrics(cbox) {\n    if (this._metrics) {\n      return this._metrics;\n    }\n    var _this$_getTableMetric = this._getTableMetrics(this._font.hmtx),\n      advanceWidth = _this$_getTableMetric.advance,\n      leftBearing = _this$_getTableMetric.bearing; // For vertical metrics, use vmtx if available, or fall back to global data from OS/2 or hhea\n\n    if (this._font.vmtx) {\n      var _this$_getTableMetric2 = this._getTableMetrics(this._font.vmtx),\n        advanceHeight = _this$_getTableMetric2.advance,\n        topBearing = _this$_getTableMetric2.bearing;\n    } else {\n      var os2;\n      if (typeof cbox === 'undefined' || cbox === null) {\n        cbox = this.cbox;\n      }\n      if ((os2 = this._font['OS/2']) && os2.version > 0) {\n        var advanceHeight = Math.abs(os2.typoAscender - os2.typoDescender);\n        var topBearing = os2.typoAscender - cbox.maxY;\n      } else {\n        var hhea = this._font.hhea;\n        var advanceHeight = Math.abs(hhea.ascent - hhea.descent);\n        var topBearing = hhea.ascent - cbox.maxY;\n      }\n    }\n    if (this._font._variationProcessor && this._font.HVAR) {\n      advanceWidth += this._font._variationProcessor.getAdvanceAdjustment(this.id, this._font.HVAR);\n    }\n    return this._metrics = {\n      advanceWidth: advanceWidth,\n      advanceHeight: advanceHeight,\n      leftBearing: leftBearing,\n      topBearing: topBearing\n    };\n  }\n  /**\r\n   * The glyph’s control box.\r\n   * This is often the same as the bounding box, but is faster to compute.\r\n   * Because of the way bezier curves are defined, some of the control points\r\n   * can be outside of the bounding box. Where `bbox` takes this into account,\r\n   * `cbox` does not. Thus, cbox is less accurate, but faster to compute.\r\n   * See [here](http://www.freetype.org/freetype2/docs/glyphs/glyphs-6.html#section-2)\r\n   * for a more detailed description.\r\n   *\r\n   * @type {BBox}\r\n   */;\n  /**\r\n   * Returns a path scaled to the given font size.\r\n   * @param {number} size\r\n   * @return {Path}\r\n   */\n  _proto32.getScaledPath = function getScaledPath(size) {\n    var scale = 1 / this._font.unitsPerEm * size;\n    return this.path.scale(scale);\n  }\n  /**\r\n   * The glyph's advance width.\r\n   * @type {number}\r\n   */;\n  _proto32._getName = function _getName() {\n    var post = this._font.post;\n    if (!post) {\n      return null;\n    }\n    switch (post.version) {\n      case 1:\n        return StandardNames[this.id];\n      case 2:\n        var id = post.glyphNameIndex[this.id];\n        if (id < StandardNames.length) {\n          return StandardNames[id];\n        }\n        return post.names[id - StandardNames.length];\n      case 2.5:\n        return StandardNames[this.id + post.offsets[this.id]];\n      case 4:\n        return String.fromCharCode(post.map[this.id]);\n    }\n  }\n  /**\r\n   * The glyph's name\r\n   * @type {string}\r\n   */;\n  /**\r\n   * Renders the glyph to the given graphics context, at the specified font size.\r\n   * @param {CanvasRenderingContext2d} ctx\r\n   * @param {number} size\r\n   */\n  _proto32.render = function render(ctx, size) {\n    ctx.save();\n    var scale = 1 / this._font.head.unitsPerEm * size;\n    ctx.scale(scale, scale);\n    var fn = this.path.toFunction();\n    fn(ctx);\n    ctx.fill();\n    ctx.restore();\n  };\n  _createClass(Glyph, [{\n    key: \"cbox\",\n    get: function get() {\n      return this._getCBox();\n    }\n    /**\r\n     * The glyph’s bounding box, i.e. the rectangle that encloses the\r\n     * glyph outline as tightly as possible.\r\n     * @type {BBox}\r\n     */\n  }, {\n    key: \"bbox\",\n    get: function get() {\n      return this._getBBox();\n    }\n    /**\r\n     * A vector Path object representing the glyph outline.\r\n     * @type {Path}\r\n     */\n  }, {\n    key: \"path\",\n    get: function get() {\n      // Cache the path so we only decode it once\n      // Decoding is actually performed by subclasses\n      return this._getPath();\n    }\n  }, {\n    key: \"advanceWidth\",\n    get: function get() {\n      return this._getMetrics().advanceWidth;\n    }\n    /**\r\n     * The glyph's advance height.\r\n     * @type {number}\r\n     */\n  }, {\n    key: \"advanceHeight\",\n    get: function get() {\n      return this._getMetrics().advanceHeight;\n    }\n  }, {\n    key: \"ligatureCaretPositions\",\n    get: function get() {}\n  }, {\n    key: \"name\",\n    get: function get() {\n      return this._getName();\n    }\n  }]);\n  return Glyph;\n}(), (_applyDecoratedDescriptor(_class$3.prototype, \"cbox\", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, \"cbox\"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, \"bbox\", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, \"bbox\"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, \"path\", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, \"path\"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, \"advanceWidth\", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, \"advanceWidth\"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, \"advanceHeight\", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, \"advanceHeight\"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, \"name\", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, \"name\"), _class$3.prototype)), _class$3);\nvar GlyfHeader = new r.Struct({\n  numberOfContours: r.int16,\n  // if negative, this is a composite glyph\n  xMin: r.int16,\n  yMin: r.int16,\n  xMax: r.int16,\n  yMax: r.int16\n}); // Flags for simple glyphs\n\nvar ON_CURVE = 1 << 0;\nvar X_SHORT_VECTOR = 1 << 1;\nvar Y_SHORT_VECTOR = 1 << 2;\nvar REPEAT = 1 << 3;\nvar SAME_X = 1 << 4;\nvar SAME_Y = 1 << 5; // Flags for composite glyphs\n\nvar ARG_1_AND_2_ARE_WORDS = 1 << 0;\nvar WE_HAVE_A_SCALE = 1 << 3;\nvar MORE_COMPONENTS = 1 << 5;\nvar WE_HAVE_AN_X_AND_Y_SCALE = 1 << 6;\nvar WE_HAVE_A_TWO_BY_TWO = 1 << 7;\nvar WE_HAVE_INSTRUCTIONS = 1 << 8;\nvar Point = /*#__PURE__*/function () {\n  function Point(onCurve, endContour, x, y) {\n    if (x === void 0) {\n      x = 0;\n    }\n    if (y === void 0) {\n      y = 0;\n    }\n    this.onCurve = onCurve;\n    this.endContour = endContour;\n    this.x = x;\n    this.y = y;\n  }\n  var _proto33 = Point.prototype;\n  _proto33.copy = function copy() {\n    return new Point(this.onCurve, this.endContour, this.x, this.y);\n  };\n  return Point;\n}(); // Represents a component in a composite glyph\nvar Component = function Component(glyphID, dx, dy) {\n  this.glyphID = glyphID;\n  this.dx = dx;\n  this.dy = dy;\n  this.pos = 0;\n  this.scaleX = this.scaleY = 1;\n  this.scale01 = this.scale10 = 0;\n};\n/**\r\n * Represents a TrueType glyph.\r\n */\nvar TTFGlyph = /*#__PURE__*/function (_Glyph) {\n  _inheritsLoose(TTFGlyph, _Glyph);\n  function TTFGlyph() {\n    return _Glyph.apply(this, arguments) || this;\n  }\n  var _proto34 = TTFGlyph.prototype;\n  // Parses just the glyph header and returns the bounding box\n  _proto34._getCBox = function _getCBox(internal) {\n    // We need to decode the glyph if variation processing is requested,\n    // so it's easier just to recompute the path's cbox after decoding.\n    if (this._font._variationProcessor && !internal) {\n      return this.path.cbox;\n    }\n    var stream = this._font._getTableStream('glyf');\n    stream.pos += this._font.loca.offsets[this.id];\n    var glyph = GlyfHeader.decode(stream);\n    var cbox = new BBox(glyph.xMin, glyph.yMin, glyph.xMax, glyph.yMax);\n    return Object.freeze(cbox);\n  } // Parses a single glyph coordinate\n  ;\n  _proto34._parseGlyphCoord = function _parseGlyphCoord(stream, prev, short, same) {\n    if (short) {\n      var val = stream.readUInt8();\n      if (!same) {\n        val = -val;\n      }\n      val += prev;\n    } else {\n      if (same) {\n        var val = prev;\n      } else {\n        var val = prev + stream.readInt16BE();\n      }\n    }\n    return val;\n  } // Decodes the glyph data into points for simple glyphs,\n  // or components for composite glyphs\n  ;\n  _proto34._decode = function _decode() {\n    var glyfPos = this._font.loca.offsets[this.id];\n    var nextPos = this._font.loca.offsets[this.id + 1]; // Nothing to do if there is no data for this glyph\n\n    if (glyfPos === nextPos) {\n      return null;\n    }\n    var stream = this._font._getTableStream('glyf');\n    stream.pos += glyfPos;\n    var startPos = stream.pos;\n    var glyph = GlyfHeader.decode(stream);\n    if (glyph.numberOfContours > 0) {\n      this._decodeSimple(glyph, stream);\n    } else if (glyph.numberOfContours < 0) {\n      this._decodeComposite(glyph, stream, startPos);\n    }\n    return glyph;\n  };\n  _proto34._decodeSimple = function _decodeSimple(glyph, stream) {\n    // this is a simple glyph\n    glyph.points = [];\n    var endPtsOfContours = new r.Array(r.uint16, glyph.numberOfContours).decode(stream);\n    glyph.instructions = new r.Array(r.uint8, r.uint16).decode(stream);\n    var flags = [];\n    var numCoords = endPtsOfContours[endPtsOfContours.length - 1] + 1;\n    while (flags.length < numCoords) {\n      var flag = stream.readUInt8();\n      flags.push(flag); // check for repeat flag\n\n      if (flag & REPEAT) {\n        var count = stream.readUInt8();\n        for (var j = 0; j < count; j++) {\n          flags.push(flag);\n        }\n      }\n    }\n    for (var i = 0; i < flags.length; i++) {\n      var flag = flags[i];\n      var point = new Point(!!(flag & ON_CURVE), endPtsOfContours.indexOf(i) >= 0, 0, 0);\n      glyph.points.push(point);\n    }\n    var px = 0;\n    for (var i = 0; i < flags.length; i++) {\n      var flag = flags[i];\n      glyph.points[i].x = px = this._parseGlyphCoord(stream, px, flag & X_SHORT_VECTOR, flag & SAME_X);\n    }\n    var py = 0;\n    for (var i = 0; i < flags.length; i++) {\n      var flag = flags[i];\n      glyph.points[i].y = py = this._parseGlyphCoord(stream, py, flag & Y_SHORT_VECTOR, flag & SAME_Y);\n    }\n    if (this._font._variationProcessor) {\n      var points = glyph.points.slice();\n      points.push.apply(points, this._getPhantomPoints(glyph));\n      this._font._variationProcessor.transformPoints(this.id, points);\n      glyph.phantomPoints = points.slice(-4);\n    }\n    return;\n  };\n  _proto34._decodeComposite = function _decodeComposite(glyph, stream, offset) {\n    if (offset === void 0) {\n      offset = 0;\n    }\n    // this is a composite glyph\n    glyph.components = [];\n    var haveInstructions = false;\n    var flags = MORE_COMPONENTS;\n    while (flags & MORE_COMPONENTS) {\n      flags = stream.readUInt16BE();\n      var gPos = stream.pos - offset;\n      var glyphID = stream.readUInt16BE();\n      if (!haveInstructions) {\n        haveInstructions = (flags & WE_HAVE_INSTRUCTIONS) !== 0;\n      }\n      if (flags & ARG_1_AND_2_ARE_WORDS) {\n        var dx = stream.readInt16BE();\n        var dy = stream.readInt16BE();\n      } else {\n        var dx = stream.readInt8();\n        var dy = stream.readInt8();\n      }\n      var component = new Component(glyphID, dx, dy);\n      component.pos = gPos;\n      if (flags & WE_HAVE_A_SCALE) {\n        // fixed number with 14 bits of fraction\n        component.scaleX = component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n      } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {\n        component.scaleX = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n        component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n      } else if (flags & WE_HAVE_A_TWO_BY_TWO) {\n        component.scaleX = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n        component.scale01 = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n        component.scale10 = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n        component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n      }\n      glyph.components.push(component);\n    }\n    if (this._font._variationProcessor) {\n      var points = [];\n      for (var j = 0; j < glyph.components.length; j++) {\n        var component = glyph.components[j];\n        points.push(new Point(true, true, component.dx, component.dy));\n      }\n      points.push.apply(points, this._getPhantomPoints(glyph));\n      this._font._variationProcessor.transformPoints(this.id, points);\n      glyph.phantomPoints = points.splice(-4, 4);\n      for (var i = 0; i < points.length; i++) {\n        var point = points[i];\n        glyph.components[i].dx = point.x;\n        glyph.components[i].dy = point.y;\n      }\n    }\n    return haveInstructions;\n  };\n  _proto34._getPhantomPoints = function _getPhantomPoints(glyph) {\n    var cbox = this._getCBox(true);\n    if (this._metrics == null) {\n      this._metrics = Glyph.prototype._getMetrics.call(this, cbox);\n    }\n    var _this$_metrics = this._metrics,\n      advanceWidth = _this$_metrics.advanceWidth,\n      advanceHeight = _this$_metrics.advanceHeight,\n      leftBearing = _this$_metrics.leftBearing,\n      topBearing = _this$_metrics.topBearing;\n    return [new Point(false, true, glyph.xMin - leftBearing, 0), new Point(false, true, glyph.xMin - leftBearing + advanceWidth, 0), new Point(false, true, 0, glyph.yMax + topBearing), new Point(false, true, 0, glyph.yMax + topBearing + advanceHeight)];\n  } // Decodes font data, resolves composite glyphs, and returns an array of contours\n  ;\n  _proto34._getContours = function _getContours() {\n    var glyph = this._decode();\n    if (!glyph) {\n      return [];\n    }\n    var points = [];\n    if (glyph.numberOfContours < 0) {\n      // resolve composite glyphs\n      for (var _iterator70 = _createForOfIteratorHelperLoose(glyph.components), _step70; !(_step70 = _iterator70()).done;) {\n        var component = _step70.value;\n        var _contours = this._font.getGlyph(component.glyphID)._getContours();\n        for (var i = 0; i < _contours.length; i++) {\n          var contour = _contours[i];\n          for (var j = 0; j < contour.length; j++) {\n            var _point = contour[j];\n            var x = _point.x * component.scaleX + _point.y * component.scale01 + component.dx;\n            var y = _point.y * component.scaleY + _point.x * component.scale10 + component.dy;\n            points.push(new Point(_point.onCurve, _point.endContour, x, y));\n          }\n        }\n      }\n    } else {\n      points = glyph.points || [];\n    } // Recompute and cache metrics if we performed variation processing, and don't have an HVAR table\n\n    if (glyph.phantomPoints && !this._font.directory.tables.HVAR) {\n      this._metrics.advanceWidth = glyph.phantomPoints[1].x - glyph.phantomPoints[0].x;\n      this._metrics.advanceHeight = glyph.phantomPoints[3].y - glyph.phantomPoints[2].y;\n      this._metrics.leftBearing = glyph.xMin - glyph.phantomPoints[0].x;\n      this._metrics.topBearing = glyph.phantomPoints[2].y - glyph.yMax;\n    }\n    var contours = [];\n    var cur = [];\n    for (var k = 0; k < points.length; k++) {\n      var point = points[k];\n      cur.push(point);\n      if (point.endContour) {\n        contours.push(cur);\n        cur = [];\n      }\n    }\n    return contours;\n  };\n  _proto34._getMetrics = function _getMetrics() {\n    if (this._metrics) {\n      return this._metrics;\n    }\n    var cbox = this._getCBox(true);\n    _Glyph.prototype._getMetrics.call(this, cbox);\n    if (this._font._variationProcessor && !this._font.HVAR) {\n      // No HVAR table, decode the glyph. This triggers recomputation of metrics.\n      this.path;\n    }\n    return this._metrics;\n  } // Converts contours to a Path object that can be rendered\n  ;\n  _proto34._getPath = function _getPath() {\n    var contours = this._getContours();\n    var path = new Path();\n    for (var i = 0; i < contours.length; i++) {\n      var contour = contours[i];\n      var firstPt = contour[0];\n      var lastPt = contour[contour.length - 1];\n      var start = 0;\n      if (firstPt.onCurve) {\n        // The first point will be consumed by the moveTo command, so skip in the loop\n        var curvePt = null;\n        start = 1;\n      } else {\n        if (lastPt.onCurve) {\n          // Start at the last point if the first point is off curve and the last point is on curve\n          firstPt = lastPt;\n        } else {\n          // Start at the middle if both the first and last points are off curve\n          firstPt = new Point(false, false, (firstPt.x + lastPt.x) / 2, (firstPt.y + lastPt.y) / 2);\n        }\n        var curvePt = firstPt;\n      }\n      path.moveTo(firstPt.x, firstPt.y);\n      for (var j = start; j < contour.length; j++) {\n        var pt = contour[j];\n        var prevPt = j === 0 ? firstPt : contour[j - 1];\n        if (prevPt.onCurve && pt.onCurve) {\n          path.lineTo(pt.x, pt.y);\n        } else if (prevPt.onCurve && !pt.onCurve) {\n          var curvePt = pt;\n        } else if (!prevPt.onCurve && !pt.onCurve) {\n          var midX = (prevPt.x + pt.x) / 2;\n          var midY = (prevPt.y + pt.y) / 2;\n          path.quadraticCurveTo(prevPt.x, prevPt.y, midX, midY);\n          var curvePt = pt;\n        } else if (!prevPt.onCurve && pt.onCurve) {\n          path.quadraticCurveTo(curvePt.x, curvePt.y, pt.x, pt.y);\n          var curvePt = null;\n        } else {\n          throw new Error(\"Unknown TTF path state\");\n        }\n      } // Connect the first and last points\n\n      if (curvePt) {\n        path.quadraticCurveTo(curvePt.x, curvePt.y, firstPt.x, firstPt.y);\n      }\n      path.closePath();\n    }\n    return path;\n  };\n  return TTFGlyph;\n}(Glyph);\n/**\r\n * Represents an OpenType PostScript glyph, in the Compact Font Format.\r\n */\nvar CFFGlyph = /*#__PURE__*/function (_Glyph2) {\n  _inheritsLoose(CFFGlyph, _Glyph2);\n  function CFFGlyph() {\n    return _Glyph2.apply(this, arguments) || this;\n  }\n  var _proto35 = CFFGlyph.prototype;\n  _proto35._getName = function _getName() {\n    if (this._font.CFF2) {\n      return _Glyph2.prototype._getName.call(this);\n    }\n    return this._font['CFF '].getGlyphName(this.id);\n  };\n  _proto35.bias = function bias(s) {\n    if (s.length < 1240) {\n      return 107;\n    } else if (s.length < 33900) {\n      return 1131;\n    } else {\n      return 32768;\n    }\n  };\n  _proto35._getPath = function _getPath() {\n    var cff = this._font.CFF2 || this._font['CFF '];\n    var stream = cff.stream;\n    var str = cff.topDict.CharStrings[this.id];\n    var end = str.offset + str.length;\n    stream.pos = str.offset;\n    var path = new Path();\n    var stack = [];\n    var trans = [];\n    var width = null;\n    var nStems = 0;\n    var x = 0,\n      y = 0;\n    var usedGsubrs;\n    var usedSubrs;\n    var open = false;\n    this._usedGsubrs = usedGsubrs = {};\n    this._usedSubrs = usedSubrs = {};\n    var gsubrs = cff.globalSubrIndex || [];\n    var gsubrsBias = this.bias(gsubrs);\n    var privateDict = cff.privateDictForGlyph(this.id) || {};\n    var subrs = privateDict.Subrs || [];\n    var subrsBias = this.bias(subrs);\n    var vstore = cff.topDict.vstore && cff.topDict.vstore.itemVariationStore;\n    var vsindex = privateDict.vsindex;\n    var variationProcessor = this._font._variationProcessor;\n    function checkWidth() {\n      if (width == null) {\n        width = stack.shift() + privateDict.nominalWidthX;\n      }\n    }\n    function parseStems() {\n      if (stack.length % 2 !== 0) {\n        checkWidth();\n      }\n      nStems += stack.length >> 1;\n      return stack.length = 0;\n    }\n    function moveTo(x, y) {\n      if (open) {\n        path.closePath();\n      }\n      path.moveTo(x, y);\n      open = true;\n    }\n    var parse = function parse() {\n      while (stream.pos < end) {\n        var op = stream.readUInt8();\n        if (op < 32) {\n          switch (op) {\n            case 1: // hstem\n\n            case 3: // vstem\n\n            case 18: // hstemhm\n\n            case 23:\n              // vstemhm\n              parseStems();\n              break;\n            case 4:\n              // vmoveto\n              if (stack.length > 1) {\n                checkWidth();\n              }\n              y += stack.shift();\n              moveTo(x, y);\n              break;\n            case 5:\n              // rlineto\n              while (stack.length >= 2) {\n                x += stack.shift();\n                y += stack.shift();\n                path.lineTo(x, y);\n              }\n              break;\n            case 6: // hlineto\n\n            case 7:\n              // vlineto\n              var phase = op === 6;\n              while (stack.length >= 1) {\n                if (phase) {\n                  x += stack.shift();\n                } else {\n                  y += stack.shift();\n                }\n                path.lineTo(x, y);\n                phase = !phase;\n              }\n              break;\n            case 8:\n              // rrcurveto\n              while (stack.length > 0) {\n                var c1x = x + stack.shift();\n                var c1y = y + stack.shift();\n                var c2x = c1x + stack.shift();\n                var c2y = c1y + stack.shift();\n                x = c2x + stack.shift();\n                y = c2y + stack.shift();\n                path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n              }\n              break;\n            case 10:\n              // callsubr\n              var index = stack.pop() + subrsBias;\n              var subr = subrs[index];\n              if (subr) {\n                usedSubrs[index] = true;\n                var p = stream.pos;\n                var e = end;\n                stream.pos = subr.offset;\n                end = subr.offset + subr.length;\n                parse();\n                stream.pos = p;\n                end = e;\n              }\n              break;\n            case 11:\n              // return\n              if (cff.version >= 2) {\n                break;\n              }\n              return;\n            case 14:\n              // endchar\n              if (cff.version >= 2) {\n                break;\n              }\n              if (stack.length > 0) {\n                checkWidth();\n              }\n              if (open) {\n                path.closePath();\n                open = false;\n              }\n              break;\n            case 15:\n              {\n                // vsindex\n                if (cff.version < 2) {\n                  throw new Error('vsindex operator not supported in CFF v1');\n                }\n                vsindex = stack.pop();\n                break;\n              }\n            case 16:\n              {\n                // blend\n                if (cff.version < 2) {\n                  throw new Error('blend operator not supported in CFF v1');\n                }\n                if (!variationProcessor) {\n                  throw new Error('blend operator in non-variation font');\n                }\n                var blendVector = variationProcessor.getBlendVector(vstore, vsindex);\n                var numBlends = stack.pop();\n                var numOperands = numBlends * blendVector.length;\n                var delta = stack.length - numOperands;\n                var base = delta - numBlends;\n                for (var i = 0; i < numBlends; i++) {\n                  var sum = stack[base + i];\n                  for (var j = 0; j < blendVector.length; j++) {\n                    sum += blendVector[j] * stack[delta++];\n                  }\n                  stack[base + i] = sum;\n                }\n                while (numOperands--) {\n                  stack.pop();\n                }\n                break;\n              }\n            case 19: // hintmask\n\n            case 20:\n              // cntrmask\n              parseStems();\n              stream.pos += nStems + 7 >> 3;\n              break;\n            case 21:\n              // rmoveto\n              if (stack.length > 2) {\n                checkWidth();\n              }\n              x += stack.shift();\n              y += stack.shift();\n              moveTo(x, y);\n              break;\n            case 22:\n              // hmoveto\n              if (stack.length > 1) {\n                checkWidth();\n              }\n              x += stack.shift();\n              moveTo(x, y);\n              break;\n            case 24:\n              // rcurveline\n              while (stack.length >= 8) {\n                var c1x = x + stack.shift();\n                var c1y = y + stack.shift();\n                var c2x = c1x + stack.shift();\n                var c2y = c1y + stack.shift();\n                x = c2x + stack.shift();\n                y = c2y + stack.shift();\n                path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n              }\n              x += stack.shift();\n              y += stack.shift();\n              path.lineTo(x, y);\n              break;\n            case 25:\n              // rlinecurve\n              while (stack.length >= 8) {\n                x += stack.shift();\n                y += stack.shift();\n                path.lineTo(x, y);\n              }\n              var c1x = x + stack.shift();\n              var c1y = y + stack.shift();\n              var c2x = c1x + stack.shift();\n              var c2y = c1y + stack.shift();\n              x = c2x + stack.shift();\n              y = c2y + stack.shift();\n              path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n              break;\n            case 26:\n              // vvcurveto\n              if (stack.length % 2) {\n                x += stack.shift();\n              }\n              while (stack.length >= 4) {\n                c1x = x;\n                c1y = y + stack.shift();\n                c2x = c1x + stack.shift();\n                c2y = c1y + stack.shift();\n                x = c2x;\n                y = c2y + stack.shift();\n                path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n              }\n              break;\n            case 27:\n              // hhcurveto\n              if (stack.length % 2) {\n                y += stack.shift();\n              }\n              while (stack.length >= 4) {\n                c1x = x + stack.shift();\n                c1y = y;\n                c2x = c1x + stack.shift();\n                c2y = c1y + stack.shift();\n                x = c2x + stack.shift();\n                y = c2y;\n                path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n              }\n              break;\n            case 28:\n              // shortint\n              stack.push(stream.readInt16BE());\n              break;\n            case 29:\n              // callgsubr\n              index = stack.pop() + gsubrsBias;\n              subr = gsubrs[index];\n              if (subr) {\n                usedGsubrs[index] = true;\n                var p = stream.pos;\n                var e = end;\n                stream.pos = subr.offset;\n                end = subr.offset + subr.length;\n                parse();\n                stream.pos = p;\n                end = e;\n              }\n              break;\n            case 30: // vhcurveto\n\n            case 31:\n              // hvcurveto\n              phase = op === 31;\n              while (stack.length >= 4) {\n                if (phase) {\n                  c1x = x + stack.shift();\n                  c1y = y;\n                  c2x = c1x + stack.shift();\n                  c2y = c1y + stack.shift();\n                  y = c2y + stack.shift();\n                  x = c2x + (stack.length === 1 ? stack.shift() : 0);\n                } else {\n                  c1x = x;\n                  c1y = y + stack.shift();\n                  c2x = c1x + stack.shift();\n                  c2y = c1y + stack.shift();\n                  x = c2x + stack.shift();\n                  y = c2y + (stack.length === 1 ? stack.shift() : 0);\n                }\n                path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n                phase = !phase;\n              }\n              break;\n            case 12:\n              op = stream.readUInt8();\n              switch (op) {\n                case 3:\n                  // and\n                  var a = stack.pop();\n                  var b = stack.pop();\n                  stack.push(a && b ? 1 : 0);\n                  break;\n                case 4:\n                  // or\n                  a = stack.pop();\n                  b = stack.pop();\n                  stack.push(a || b ? 1 : 0);\n                  break;\n                case 5:\n                  // not\n                  a = stack.pop();\n                  stack.push(a ? 0 : 1);\n                  break;\n                case 9:\n                  // abs\n                  a = stack.pop();\n                  stack.push(Math.abs(a));\n                  break;\n                case 10:\n                  // add\n                  a = stack.pop();\n                  b = stack.pop();\n                  stack.push(a + b);\n                  break;\n                case 11:\n                  // sub\n                  a = stack.pop();\n                  b = stack.pop();\n                  stack.push(a - b);\n                  break;\n                case 12:\n                  // div\n                  a = stack.pop();\n                  b = stack.pop();\n                  stack.push(a / b);\n                  break;\n                case 14:\n                  // neg\n                  a = stack.pop();\n                  stack.push(-a);\n                  break;\n                case 15:\n                  // eq\n                  a = stack.pop();\n                  b = stack.pop();\n                  stack.push(a === b ? 1 : 0);\n                  break;\n                case 18:\n                  // drop\n                  stack.pop();\n                  break;\n                case 20:\n                  // put\n                  var val = stack.pop();\n                  var idx = stack.pop();\n                  trans[idx] = val;\n                  break;\n                case 21:\n                  // get\n                  idx = stack.pop();\n                  stack.push(trans[idx] || 0);\n                  break;\n                case 22:\n                  // ifelse\n                  var s1 = stack.pop();\n                  var s2 = stack.pop();\n                  var v1 = stack.pop();\n                  var v2 = stack.pop();\n                  stack.push(v1 <= v2 ? s1 : s2);\n                  break;\n                case 23:\n                  // random\n                  stack.push(Math.random());\n                  break;\n                case 24:\n                  // mul\n                  a = stack.pop();\n                  b = stack.pop();\n                  stack.push(a * b);\n                  break;\n                case 26:\n                  // sqrt\n                  a = stack.pop();\n                  stack.push(Math.sqrt(a));\n                  break;\n                case 27:\n                  // dup\n                  a = stack.pop();\n                  stack.push(a, a);\n                  break;\n                case 28:\n                  // exch\n                  a = stack.pop();\n                  b = stack.pop();\n                  stack.push(b, a);\n                  break;\n                case 29:\n                  // index\n                  idx = stack.pop();\n                  if (idx < 0) {\n                    idx = 0;\n                  } else if (idx > stack.length - 1) {\n                    idx = stack.length - 1;\n                  }\n                  stack.push(stack[idx]);\n                  break;\n                case 30:\n                  // roll\n                  var n = stack.pop();\n                  var _j = stack.pop();\n                  if (_j >= 0) {\n                    while (_j > 0) {\n                      var t = stack[n - 1];\n                      for (var _i = n - 2; _i >= 0; _i--) {\n                        stack[_i + 1] = stack[_i];\n                      }\n                      stack[0] = t;\n                      _j--;\n                    }\n                  } else {\n                    while (_j < 0) {\n                      var t = stack[0];\n                      for (var _i2 = 0; _i2 <= n; _i2++) {\n                        stack[_i2] = stack[_i2 + 1];\n                      }\n                      stack[n - 1] = t;\n                      _j++;\n                    }\n                  }\n                  break;\n                case 34:\n                  // hflex\n                  c1x = x + stack.shift();\n                  c1y = y;\n                  c2x = c1x + stack.shift();\n                  c2y = c1y + stack.shift();\n                  var c3x = c2x + stack.shift();\n                  var c3y = c2y;\n                  var c4x = c3x + stack.shift();\n                  var c4y = c3y;\n                  var c5x = c4x + stack.shift();\n                  var c5y = c4y;\n                  var c6x = c5x + stack.shift();\n                  var c6y = c5y;\n                  x = c6x;\n                  y = c6y;\n                  path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y);\n                  path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y);\n                  break;\n                case 35:\n                  // flex\n                  var pts = [];\n                  for (var _i3 = 0; _i3 <= 5; _i3++) {\n                    x += stack.shift();\n                    y += stack.shift();\n                    pts.push(x, y);\n                  }\n                  path.bezierCurveTo.apply(path, pts.slice(0, 6));\n                  path.bezierCurveTo.apply(path, pts.slice(6));\n                  stack.shift(); // fd\n\n                  break;\n                case 36:\n                  // hflex1\n                  c1x = x + stack.shift();\n                  c1y = y + stack.shift();\n                  c2x = c1x + stack.shift();\n                  c2y = c1y + stack.shift();\n                  c3x = c2x + stack.shift();\n                  c3y = c2y;\n                  c4x = c3x + stack.shift();\n                  c4y = c3y;\n                  c5x = c4x + stack.shift();\n                  c5y = c4y + stack.shift();\n                  c6x = c5x + stack.shift();\n                  c6y = c5y;\n                  x = c6x;\n                  y = c6y;\n                  path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y);\n                  path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y);\n                  break;\n                case 37:\n                  // flex1\n                  var startx = x;\n                  var starty = y;\n                  pts = [];\n                  for (var _i4 = 0; _i4 <= 4; _i4++) {\n                    x += stack.shift();\n                    y += stack.shift();\n                    pts.push(x, y);\n                  }\n                  if (Math.abs(x - startx) > Math.abs(y - starty)) {\n                    // horizontal\n                    x += stack.shift();\n                    y = starty;\n                  } else {\n                    x = startx;\n                    y += stack.shift();\n                  }\n                  pts.push(x, y);\n                  path.bezierCurveTo.apply(path, pts.slice(0, 6));\n                  path.bezierCurveTo.apply(path, pts.slice(6));\n                  break;\n                default:\n                  throw new Error(\"Unknown op: 12 \".concat(op));\n              }\n              break;\n            default:\n              throw new Error(\"Unknown op: \".concat(op));\n          }\n        } else if (op < 247) {\n          stack.push(op - 139);\n        } else if (op < 251) {\n          var b1 = stream.readUInt8();\n          stack.push((op - 247) * 256 + b1 + 108);\n        } else if (op < 255) {\n          var b1 = stream.readUInt8();\n          stack.push(-(op - 251) * 256 - b1 - 108);\n        } else {\n          stack.push(stream.readInt32BE() / 65536);\n        }\n      }\n    };\n    parse();\n    if (open) {\n      path.closePath();\n    }\n    return path;\n  };\n  return CFFGlyph;\n}(Glyph);\nvar SBIXImage = new r.Struct({\n  originX: r.uint16,\n  originY: r.uint16,\n  type: new r.String(4),\n  data: new r.Buffer(function (t) {\n    return t.parent.buflen - t._currentOffset;\n  })\n});\n/**\r\n * Represents a color (e.g. emoji) glyph in Apple's SBIX format.\r\n */\nvar SBIXGlyph = /*#__PURE__*/function (_TTFGlyph) {\n  _inheritsLoose(SBIXGlyph, _TTFGlyph);\n  function SBIXGlyph() {\n    return _TTFGlyph.apply(this, arguments) || this;\n  }\n  var _proto36 = SBIXGlyph.prototype;\n  /**\r\n   * Returns an object representing a glyph image at the given point size.\r\n   * The object has a data property with a Buffer containing the actual image data,\r\n   * along with the image type, and origin.\r\n   *\r\n   * @param {number} size\r\n   * @return {object}\r\n   */\n  _proto36.getImageForSize = function getImageForSize(size) {\n    for (var i = 0; i < this._font.sbix.imageTables.length; i++) {\n      var table = this._font.sbix.imageTables[i];\n      if (table.ppem >= size) {\n        break;\n      }\n    }\n    var offsets = table.imageOffsets;\n    var start = offsets[this.id];\n    var end = offsets[this.id + 1];\n    if (start === end) {\n      return null;\n    }\n    this._font.stream.pos = start;\n    return SBIXImage.decode(this._font.stream, {\n      buflen: end - start\n    });\n  };\n  _proto36.render = function render(ctx, size) {\n    var img = this.getImageForSize(size);\n    if (img != null) {\n      var scale = size / this._font.unitsPerEm;\n      ctx.image(img.data, {\n        height: size,\n        x: img.originX,\n        y: (this.bbox.minY - img.originY) * scale\n      });\n    }\n    if (this._font.sbix.flags.renderOutlines) {\n      _TTFGlyph.prototype.render.call(this, ctx, size);\n    }\n  };\n  return SBIXGlyph;\n}(TTFGlyph);\nvar COLRLayer = function COLRLayer(glyph, color) {\n  this.glyph = glyph;\n  this.color = color;\n};\n/**\r\n * Represents a color (e.g. emoji) glyph in Microsoft's COLR format.\r\n * Each glyph in this format contain a list of colored layers, each\r\n * of which  is another vector glyph.\r\n */\nvar COLRGlyph = /*#__PURE__*/function (_Glyph3) {\n  _inheritsLoose(COLRGlyph, _Glyph3);\n  function COLRGlyph() {\n    return _Glyph3.apply(this, arguments) || this;\n  }\n  var _proto37 = COLRGlyph.prototype;\n  _proto37._getBBox = function _getBBox() {\n    var bbox = new BBox();\n    for (var i = 0; i < this.layers.length; i++) {\n      var layer = this.layers[i];\n      var b = layer.glyph.bbox;\n      bbox.addPoint(b.minX, b.minY);\n      bbox.addPoint(b.maxX, b.maxY);\n    }\n    return bbox;\n  }\n  /**\r\n   * Returns an array of objects containing the glyph and color for\r\n   * each layer in the composite color glyph.\r\n   * @type {object[]}\r\n   */;\n  _proto37.render = function render(ctx, size) {\n    for (var _iterator71 = _createForOfIteratorHelperLoose(this.layers), _step71; !(_step71 = _iterator71()).done;) {\n      var _step71$value = _step71.value,\n        glyph = _step71$value.glyph,\n        color = _step71$value.color;\n      ctx.fillColor([color.red, color.green, color.blue], color.alpha / 255 * 100);\n      glyph.render(ctx, size);\n    }\n    return;\n  };\n  _createClass(COLRGlyph, [{\n    key: \"layers\",\n    get: function get() {\n      var cpal = this._font.CPAL;\n      var colr = this._font.COLR;\n      var low = 0;\n      var high = colr.baseGlyphRecord.length - 1;\n      while (low <= high) {\n        var mid = low + high >> 1;\n        var rec = colr.baseGlyphRecord[mid];\n        if (this.id < rec.gid) {\n          high = mid - 1;\n        } else if (this.id > rec.gid) {\n          low = mid + 1;\n        } else {\n          var baseLayer = rec;\n          break;\n        }\n      } // if base glyph not found in COLR table,\n      // default to normal glyph from glyf or CFF\n\n      if (baseLayer == null) {\n        var g = this._font._getBaseGlyph(this.id);\n        var color = {\n          red: 0,\n          green: 0,\n          blue: 0,\n          alpha: 255\n        };\n        return [new COLRLayer(g, color)];\n      } // otherwise, return an array of all the layers\n\n      var layers = [];\n      for (var i = baseLayer.firstLayerIndex; i < baseLayer.firstLayerIndex + baseLayer.numLayers; i++) {\n        var rec = colr.layerRecords[i];\n        var color = cpal.colorRecords[rec.paletteIndex];\n        var g = this._font._getBaseGlyph(rec.gid);\n        layers.push(new COLRLayer(g, color));\n      }\n      return layers;\n    }\n  }]);\n  return COLRGlyph;\n}(Glyph);\nvar TUPLES_SHARE_POINT_NUMBERS = 0x8000;\nvar TUPLE_COUNT_MASK = 0x0fff;\nvar EMBEDDED_TUPLE_COORD = 0x8000;\nvar INTERMEDIATE_TUPLE = 0x4000;\nvar PRIVATE_POINT_NUMBERS = 0x2000;\nvar TUPLE_INDEX_MASK = 0x0fff;\nvar POINTS_ARE_WORDS = 0x80;\nvar POINT_RUN_COUNT_MASK = 0x7f;\nvar DELTAS_ARE_ZERO = 0x80;\nvar DELTAS_ARE_WORDS = 0x40;\nvar DELTA_RUN_COUNT_MASK = 0x3f;\n/**\r\n * This class is transforms TrueType glyphs according to the data from\r\n * the Apple Advanced Typography variation tables (fvar, gvar, and avar).\r\n * These tables allow infinite adjustments to glyph weight, width, slant,\r\n * and optical size without the designer needing to specify every exact style.\r\n *\r\n * Apple's documentation for these tables is not great, so thanks to the\r\n * Freetype project for figuring much of this out.\r\n *\r\n * @private\r\n */\nvar GlyphVariationProcessor = /*#__PURE__*/function () {\n  function GlyphVariationProcessor(font, coords) {\n    this.font = font;\n    this.normalizedCoords = this.normalizeCoords(coords);\n    this.blendVectors = new Map();\n  }\n  var _proto38 = GlyphVariationProcessor.prototype;\n  _proto38.normalizeCoords = function normalizeCoords(coords) {\n    // the default mapping is linear along each axis, in two segments:\n    // from the minValue to defaultValue, and from defaultValue to maxValue.\n    var normalized = [];\n    for (var i = 0; i < this.font.fvar.axis.length; i++) {\n      var axis = this.font.fvar.axis[i];\n      if (coords[i] < axis.defaultValue) {\n        normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.defaultValue - axis.minValue + Number.EPSILON));\n      } else {\n        normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.maxValue - axis.defaultValue + Number.EPSILON));\n      }\n    } // if there is an avar table, the normalized value is calculated\n    // by interpolating between the two nearest mapped values.\n\n    if (this.font.avar) {\n      for (var i = 0; i < this.font.avar.segment.length; i++) {\n        var segment = this.font.avar.segment[i];\n        for (var j = 0; j < segment.correspondence.length; j++) {\n          var pair = segment.correspondence[j];\n          if (j >= 1 && normalized[i] < pair.fromCoord) {\n            var prev = segment.correspondence[j - 1];\n            normalized[i] = ((normalized[i] - prev.fromCoord) * (pair.toCoord - prev.toCoord) + Number.EPSILON) / (pair.fromCoord - prev.fromCoord + Number.EPSILON) + prev.toCoord;\n            break;\n          }\n        }\n      }\n    }\n    return normalized;\n  };\n  _proto38.transformPoints = function transformPoints(gid, glyphPoints) {\n    if (!this.font.fvar || !this.font.gvar) {\n      return;\n    }\n    var gvar = this.font.gvar;\n    if (gid >= gvar.glyphCount) {\n      return;\n    }\n    var offset = gvar.offsets[gid];\n    if (offset === gvar.offsets[gid + 1]) {\n      return;\n    } // Read the gvar data for this glyph\n\n    var stream = this.font.stream;\n    stream.pos = offset;\n    if (stream.pos >= stream.length) {\n      return;\n    }\n    var tupleCount = stream.readUInt16BE();\n    var offsetToData = offset + stream.readUInt16BE();\n    if (tupleCount & TUPLES_SHARE_POINT_NUMBERS) {\n      var here = stream.pos;\n      stream.pos = offsetToData;\n      var sharedPoints = this.decodePoints();\n      offsetToData = stream.pos;\n      stream.pos = here;\n    }\n    var origPoints = glyphPoints.map(function (pt) {\n      return pt.copy();\n    });\n    tupleCount &= TUPLE_COUNT_MASK;\n    for (var i = 0; i < tupleCount; i++) {\n      var tupleDataSize = stream.readUInt16BE();\n      var tupleIndex = stream.readUInt16BE();\n      if (tupleIndex & EMBEDDED_TUPLE_COORD) {\n        var tupleCoords = [];\n        for (var a = 0; a < gvar.axisCount; a++) {\n          tupleCoords.push(stream.readInt16BE() / 16384);\n        }\n      } else {\n        if ((tupleIndex & TUPLE_INDEX_MASK) >= gvar.globalCoordCount) {\n          throw new Error('Invalid gvar table');\n        }\n        var tupleCoords = gvar.globalCoords[tupleIndex & TUPLE_INDEX_MASK];\n      }\n      if (tupleIndex & INTERMEDIATE_TUPLE) {\n        var startCoords = [];\n        for (var _a = 0; _a < gvar.axisCount; _a++) {\n          startCoords.push(stream.readInt16BE() / 16384);\n        }\n        var endCoords = [];\n        for (var _a2 = 0; _a2 < gvar.axisCount; _a2++) {\n          endCoords.push(stream.readInt16BE() / 16384);\n        }\n      } // Get the factor at which to apply this tuple\n\n      var factor = this.tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords);\n      if (factor === 0) {\n        offsetToData += tupleDataSize;\n        continue;\n      }\n      var here = stream.pos;\n      stream.pos = offsetToData;\n      if (tupleIndex & PRIVATE_POINT_NUMBERS) {\n        var points = this.decodePoints();\n      } else {\n        var points = sharedPoints;\n      } // points.length = 0 means there are deltas for all points\n\n      var nPoints = points.length === 0 ? glyphPoints.length : points.length;\n      var xDeltas = this.decodeDeltas(nPoints);\n      var yDeltas = this.decodeDeltas(nPoints);\n      if (points.length === 0) {\n        // all points\n        for (var _i = 0; _i < glyphPoints.length; _i++) {\n          var point = glyphPoints[_i];\n          point.x += Math.round(xDeltas[_i] * factor);\n          point.y += Math.round(yDeltas[_i] * factor);\n        }\n      } else {\n        var outPoints = origPoints.map(function (pt) {\n          return pt.copy();\n        });\n        var hasDelta = glyphPoints.map(function () {\n          return false;\n        });\n        for (var _i2 = 0; _i2 < points.length; _i2++) {\n          var idx = points[_i2];\n          if (idx < glyphPoints.length) {\n            var _point = outPoints[idx];\n            hasDelta[idx] = true;\n            _point.x += Math.round(xDeltas[_i2] * factor);\n            _point.y += Math.round(yDeltas[_i2] * factor);\n          }\n        }\n        this.interpolateMissingDeltas(outPoints, origPoints, hasDelta);\n        for (var _i3 = 0; _i3 < glyphPoints.length; _i3++) {\n          var deltaX = outPoints[_i3].x - origPoints[_i3].x;\n          var deltaY = outPoints[_i3].y - origPoints[_i3].y;\n          glyphPoints[_i3].x += deltaX;\n          glyphPoints[_i3].y += deltaY;\n        }\n      }\n      offsetToData += tupleDataSize;\n      stream.pos = here;\n    }\n  };\n  _proto38.decodePoints = function decodePoints() {\n    var stream = this.font.stream;\n    var count = stream.readUInt8();\n    if (count & POINTS_ARE_WORDS) {\n      count = (count & POINT_RUN_COUNT_MASK) << 8 | stream.readUInt8();\n    }\n    var points = new Uint16Array(count);\n    var i = 0;\n    var point = 0;\n    while (i < count) {\n      var run = stream.readUInt8();\n      var runCount = (run & POINT_RUN_COUNT_MASK) + 1;\n      var fn = run & POINTS_ARE_WORDS ? stream.readUInt16 : stream.readUInt8;\n      for (var j = 0; j < runCount && i < count; j++) {\n        point += fn.call(stream);\n        points[i++] = point;\n      }\n    }\n    return points;\n  };\n  _proto38.decodeDeltas = function decodeDeltas(count) {\n    var stream = this.font.stream;\n    var i = 0;\n    var deltas = new Int16Array(count);\n    while (i < count) {\n      var run = stream.readUInt8();\n      var runCount = (run & DELTA_RUN_COUNT_MASK) + 1;\n      if (run & DELTAS_ARE_ZERO) {\n        i += runCount;\n      } else {\n        var fn = run & DELTAS_ARE_WORDS ? stream.readInt16BE : stream.readInt8;\n        for (var j = 0; j < runCount && i < count; j++) {\n          deltas[i++] = fn.call(stream);\n        }\n      }\n    }\n    return deltas;\n  };\n  _proto38.tupleFactor = function tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords) {\n    var normalized = this.normalizedCoords;\n    var gvar = this.font.gvar;\n    var factor = 1;\n    for (var i = 0; i < gvar.axisCount; i++) {\n      if (tupleCoords[i] === 0) {\n        continue;\n      }\n      if (normalized[i] === 0) {\n        return 0;\n      }\n      if ((tupleIndex & INTERMEDIATE_TUPLE) === 0) {\n        if (normalized[i] < Math.min(0, tupleCoords[i]) || normalized[i] > Math.max(0, tupleCoords[i])) {\n          return 0;\n        }\n        factor = (factor * normalized[i] + Number.EPSILON) / (tupleCoords[i] + Number.EPSILON);\n      } else {\n        if (normalized[i] < startCoords[i] || normalized[i] > endCoords[i]) {\n          return 0;\n        } else if (normalized[i] < tupleCoords[i]) {\n          factor = factor * (normalized[i] - startCoords[i] + Number.EPSILON) / (tupleCoords[i] - startCoords[i] + Number.EPSILON);\n        } else {\n          factor = factor * (endCoords[i] - normalized[i] + Number.EPSILON) / (endCoords[i] - tupleCoords[i] + Number.EPSILON);\n        }\n      }\n    }\n    return factor;\n  } // Interpolates points without delta values.\n  // Needed for the Ø and Q glyphs in Skia.\n  // Algorithm from Freetype.\n  ;\n  _proto38.interpolateMissingDeltas = function interpolateMissingDeltas(points, inPoints, hasDelta) {\n    if (points.length === 0) {\n      return;\n    }\n    var point = 0;\n    while (point < points.length) {\n      var firstPoint = point; // find the end point of the contour\n\n      var endPoint = point;\n      var pt = points[endPoint];\n      while (!pt.endContour) {\n        pt = points[++endPoint];\n      } // find the first point that has a delta\n\n      while (point <= endPoint && !hasDelta[point]) {\n        point++;\n      }\n      if (point > endPoint) {\n        continue;\n      }\n      var firstDelta = point;\n      var curDelta = point;\n      point++;\n      while (point <= endPoint) {\n        // find the next point with a delta, and interpolate intermediate points\n        if (hasDelta[point]) {\n          this.deltaInterpolate(curDelta + 1, point - 1, curDelta, point, inPoints, points);\n          curDelta = point;\n        }\n        point++;\n      } // shift contour if we only have a single delta\n\n      if (curDelta === firstDelta) {\n        this.deltaShift(firstPoint, endPoint, curDelta, inPoints, points);\n      } else {\n        // otherwise, handle the remaining points at the end and beginning of the contour\n        this.deltaInterpolate(curDelta + 1, endPoint, curDelta, firstDelta, inPoints, points);\n        if (firstDelta > 0) {\n          this.deltaInterpolate(firstPoint, firstDelta - 1, curDelta, firstDelta, inPoints, points);\n        }\n      }\n      point = endPoint + 1;\n    }\n  };\n  _proto38.deltaInterpolate = function deltaInterpolate(p1, p2, ref1, ref2, inPoints, outPoints) {\n    if (p1 > p2) {\n      return;\n    }\n    var iterable = ['x', 'y'];\n    for (var i = 0; i < iterable.length; i++) {\n      var k = iterable[i];\n      if (inPoints[ref1][k] > inPoints[ref2][k]) {\n        var p = ref1;\n        ref1 = ref2;\n        ref2 = p;\n      }\n      var in1 = inPoints[ref1][k];\n      var in2 = inPoints[ref2][k];\n      var out1 = outPoints[ref1][k];\n      var out2 = outPoints[ref2][k]; // If the reference points have the same coordinate but different\n      // delta, inferred delta is zero.  Otherwise interpolate.\n\n      if (in1 !== in2 || out1 === out2) {\n        var scale = in1 === in2 ? 0 : (out2 - out1) / (in2 - in1);\n        for (var _p = p1; _p <= p2; _p++) {\n          var out = inPoints[_p][k];\n          if (out <= in1) {\n            out += out1 - in1;\n          } else if (out >= in2) {\n            out += out2 - in2;\n          } else {\n            out = out1 + (out - in1) * scale;\n          }\n          outPoints[_p][k] = out;\n        }\n      }\n    }\n  };\n  _proto38.deltaShift = function deltaShift(p1, p2, ref, inPoints, outPoints) {\n    var deltaX = outPoints[ref].x - inPoints[ref].x;\n    var deltaY = outPoints[ref].y - inPoints[ref].y;\n    if (deltaX === 0 && deltaY === 0) {\n      return;\n    }\n    for (var p = p1; p <= p2; p++) {\n      if (p !== ref) {\n        outPoints[p].x += deltaX;\n        outPoints[p].y += deltaY;\n      }\n    }\n  };\n  _proto38.getAdvanceAdjustment = function getAdvanceAdjustment(gid, table) {\n    var outerIndex, innerIndex;\n    if (table.advanceWidthMapping) {\n      var idx = gid;\n      if (idx >= table.advanceWidthMapping.mapCount) {\n        idx = table.advanceWidthMapping.mapCount - 1;\n      }\n      var entryFormat = table.advanceWidthMapping.entryFormat;\n      var _table$advanceWidthMa = table.advanceWidthMapping.mapData[idx];\n      outerIndex = _table$advanceWidthMa.outerIndex;\n      innerIndex = _table$advanceWidthMa.innerIndex;\n    } else {\n      outerIndex = 0;\n      innerIndex = gid;\n    }\n    return this.getDelta(table.itemVariationStore, outerIndex, innerIndex);\n  } // See pseudo code from `Font Variations Overview'\n  // in the OpenType specification.\n  ;\n  _proto38.getDelta = function getDelta(itemStore, outerIndex, innerIndex) {\n    if (outerIndex >= itemStore.itemVariationData.length) {\n      return 0;\n    }\n    var varData = itemStore.itemVariationData[outerIndex];\n    if (innerIndex >= varData.deltaSets.length) {\n      return 0;\n    }\n    var deltaSet = varData.deltaSets[innerIndex];\n    var blendVector = this.getBlendVector(itemStore, outerIndex);\n    var netAdjustment = 0;\n    for (var master = 0; master < varData.regionIndexCount; master++) {\n      netAdjustment += deltaSet.deltas[master] * blendVector[master];\n    }\n    return netAdjustment;\n  };\n  _proto38.getBlendVector = function getBlendVector(itemStore, outerIndex) {\n    var varData = itemStore.itemVariationData[outerIndex];\n    if (this.blendVectors.has(varData)) {\n      return this.blendVectors.get(varData);\n    }\n    var normalizedCoords = this.normalizedCoords;\n    var blendVector = []; // outer loop steps through master designs to be blended\n\n    for (var master = 0; master < varData.regionIndexCount; master++) {\n      var scalar = 1;\n      var regionIndex = varData.regionIndexes[master];\n      var axes = itemStore.variationRegionList.variationRegions[regionIndex]; // inner loop steps through axes in this region\n\n      for (var j = 0; j < axes.length; j++) {\n        var axis = axes[j];\n        var axisScalar = void 0; // compute the scalar contribution of this axis\n        // ignore invalid ranges\n\n        if (axis.startCoord > axis.peakCoord || axis.peakCoord > axis.endCoord) {\n          axisScalar = 1;\n        } else if (axis.startCoord < 0 && axis.endCoord > 0 && axis.peakCoord !== 0) {\n          axisScalar = 1; // peak of 0 means ignore this axis\n        } else if (axis.peakCoord === 0) {\n          axisScalar = 1; // ignore this region if coords are out of range\n        } else if (normalizedCoords[j] < axis.startCoord || normalizedCoords[j] > axis.endCoord) {\n          axisScalar = 0; // calculate a proportional factor\n        } else {\n          if (normalizedCoords[j] === axis.peakCoord) {\n            axisScalar = 1;\n          } else if (normalizedCoords[j] < axis.peakCoord) {\n            axisScalar = (normalizedCoords[j] - axis.startCoord + Number.EPSILON) / (axis.peakCoord - axis.startCoord + Number.EPSILON);\n          } else {\n            axisScalar = (axis.endCoord - normalizedCoords[j] + Number.EPSILON) / (axis.endCoord - axis.peakCoord + Number.EPSILON);\n          }\n        } // take product of all the axis scalars\n\n        scalar *= axisScalar;\n      }\n      blendVector[master] = scalar;\n    }\n    this.blendVectors.set(varData, blendVector);\n    return blendVector;\n  };\n  return GlyphVariationProcessor;\n}();\nvar resolved = Promise.resolve();\nvar Subset = /*#__PURE__*/function () {\n  function Subset(font) {\n    this.font = font;\n    this.glyphs = [];\n    this.mapping = {}; // always include the missing glyph\n\n    this.includeGlyph(0);\n  }\n  var _proto39 = Subset.prototype;\n  _proto39.includeGlyph = function includeGlyph(glyph) {\n    if (typeof glyph === 'object') {\n      glyph = glyph.id;\n    }\n    if (this.mapping[glyph] == null) {\n      this.glyphs.push(glyph);\n      this.mapping[glyph] = this.glyphs.length - 1;\n    }\n    return this.mapping[glyph];\n  };\n  _proto39.encodeStream = function encodeStream() {\n    var _this11 = this;\n    var s = new r.EncodeStream();\n    resolved.then(function () {\n      _this11.encode(s);\n      return s.end();\n    });\n    return s;\n  };\n  return Subset;\n}();\nvar ON_CURVE$1 = 1 << 0;\nvar X_SHORT_VECTOR$1 = 1 << 1;\nvar Y_SHORT_VECTOR$1 = 1 << 2;\nvar REPEAT$1 = 1 << 3;\nvar SAME_X$1 = 1 << 4;\nvar SAME_Y$1 = 1 << 5;\nvar Point$1 = /*#__PURE__*/function () {\n  function Point$1() {}\n  Point$1.size = function size(val) {\n    return val >= 0 && val <= 255 ? 1 : 2;\n  };\n  Point$1.encode = function encode(stream, value) {\n    if (value >= 0 && value <= 255) {\n      stream.writeUInt8(value);\n    } else {\n      stream.writeInt16BE(value);\n    }\n  };\n  return Point$1;\n}();\nvar Glyf = new r.Struct({\n  numberOfContours: r.int16,\n  // if negative, this is a composite glyph\n  xMin: r.int16,\n  yMin: r.int16,\n  xMax: r.int16,\n  yMax: r.int16,\n  endPtsOfContours: new r.Array(r.uint16, 'numberOfContours'),\n  instructions: new r.Array(r.uint8, r.uint16),\n  flags: new r.Array(r.uint8, 0),\n  xPoints: new r.Array(Point$1, 0),\n  yPoints: new r.Array(Point$1, 0)\n});\n/**\r\n * Encodes TrueType glyph outlines\r\n */\nvar TTFGlyphEncoder = /*#__PURE__*/function () {\n  function TTFGlyphEncoder() {}\n  var _proto40 = TTFGlyphEncoder.prototype;\n  _proto40.encodeSimple = function encodeSimple(path, instructions) {\n    if (instructions === void 0) {\n      instructions = [];\n    }\n    var endPtsOfContours = [];\n    var xPoints = [];\n    var yPoints = [];\n    var flags = [];\n    var same = 0;\n    var lastX = 0,\n      lastY = 0,\n      lastFlag = 0;\n    var pointCount = 0;\n    for (var i = 0; i < path.commands.length; i++) {\n      var c = path.commands[i];\n      for (var j = 0; j < c.args.length; j += 2) {\n        var x = c.args[j];\n        var y = c.args[j + 1];\n        var flag = 0; // If the ending point of a quadratic curve is the midpoint\n        // between the control point and the control point of the next\n        // quadratic curve, we can omit the ending point.\n\n        if (c.command === 'quadraticCurveTo' && j === 2) {\n          var next = path.commands[i + 1];\n          if (next && next.command === 'quadraticCurveTo') {\n            var midX = (lastX + next.args[0]) / 2;\n            var midY = (lastY + next.args[1]) / 2;\n            if (x === midX && y === midY) {\n              continue;\n            }\n          }\n        } // All points except control points are on curve.\n\n        if (!(c.command === 'quadraticCurveTo' && j === 0)) {\n          flag |= ON_CURVE$1;\n        }\n        flag = this._encodePoint(x, lastX, xPoints, flag, X_SHORT_VECTOR$1, SAME_X$1);\n        flag = this._encodePoint(y, lastY, yPoints, flag, Y_SHORT_VECTOR$1, SAME_Y$1);\n        if (flag === lastFlag && same < 255) {\n          flags[flags.length - 1] |= REPEAT$1;\n          same++;\n        } else {\n          if (same > 0) {\n            flags.push(same);\n            same = 0;\n          }\n          flags.push(flag);\n          lastFlag = flag;\n        }\n        lastX = x;\n        lastY = y;\n        pointCount++;\n      }\n      if (c.command === 'closePath') {\n        endPtsOfContours.push(pointCount - 1);\n      }\n    } // Close the path if the last command didn't already\n\n    if (path.commands.length > 1 && path.commands[path.commands.length - 1].command !== 'closePath') {\n      endPtsOfContours.push(pointCount - 1);\n    }\n    var bbox = path.bbox;\n    var glyf = {\n      numberOfContours: endPtsOfContours.length,\n      xMin: bbox.minX,\n      yMin: bbox.minY,\n      xMax: bbox.maxX,\n      yMax: bbox.maxY,\n      endPtsOfContours: endPtsOfContours,\n      instructions: instructions,\n      flags: flags,\n      xPoints: xPoints,\n      yPoints: yPoints\n    };\n    var size = Glyf.size(glyf);\n    var tail = 4 - size % 4;\n    var stream = new r.EncodeStream(size + tail);\n    Glyf.encode(stream, glyf); // Align to 4-byte length\n\n    if (tail !== 0) {\n      stream.fill(0, tail);\n    }\n    return stream.buffer;\n  };\n  _proto40._encodePoint = function _encodePoint(value, last, points, flag, shortFlag, sameFlag) {\n    var diff = value - last;\n    if (value === last) {\n      flag |= sameFlag;\n    } else {\n      if (-255 <= diff && diff <= 255) {\n        flag |= shortFlag;\n        if (diff < 0) {\n          diff = -diff;\n        } else {\n          flag |= sameFlag;\n        }\n      }\n      points.push(diff);\n    }\n    return flag;\n  };\n  return TTFGlyphEncoder;\n}();\nvar TTFSubset = /*#__PURE__*/function (_Subset) {\n  _inheritsLoose(TTFSubset, _Subset);\n  function TTFSubset(font) {\n    var _this12;\n    _this12 = _Subset.call(this, font) || this;\n    _this12.glyphEncoder = new TTFGlyphEncoder();\n    return _this12;\n  }\n  var _proto41 = TTFSubset.prototype;\n  _proto41._addGlyph = function _addGlyph(gid) {\n    var glyph = this.font.getGlyph(gid);\n    var glyf = glyph._decode(); // get the offset to the glyph from the loca table\n\n    var curOffset = this.font.loca.offsets[gid];\n    var nextOffset = this.font.loca.offsets[gid + 1];\n    var stream = this.font._getTableStream('glyf');\n    stream.pos += curOffset;\n    var buffer = stream.readBuffer(nextOffset - curOffset); // if it is a compound glyph, include its components\n\n    if (glyf && glyf.numberOfContours < 0) {\n      buffer = Buffer.from(buffer);\n      for (var _iterator72 = _createForOfIteratorHelperLoose(glyf.components), _step72; !(_step72 = _iterator72()).done;) {\n        var component = _step72.value;\n        gid = this.includeGlyph(component.glyphID);\n        buffer.writeUInt16BE(gid, component.pos);\n      }\n    } else if (glyf && this.font._variationProcessor) {\n      // If this is a TrueType variation glyph, re-encode the path\n      buffer = this.glyphEncoder.encodeSimple(glyph.path, glyf.instructions);\n    }\n    this.glyf.push(buffer);\n    this.loca.offsets.push(this.offset);\n    this.hmtx.metrics.push({\n      advance: glyph.advanceWidth,\n      bearing: glyph._getMetrics().leftBearing\n    });\n    this.offset += buffer.length;\n    return this.glyf.length - 1;\n  };\n  _proto41.encode = function encode(stream) {\n    // tables required by PDF spec:\n    //   head, hhea, loca, maxp, cvt , prep, glyf, hmtx, fpgm\n    //\n    // additional tables required for standalone fonts:\n    //   name, cmap, OS/2, post\n    this.glyf = [];\n    this.offset = 0;\n    this.loca = {\n      offsets: [],\n      version: this.font.loca.version\n    };\n    this.hmtx = {\n      metrics: [],\n      bearings: []\n    }; // include all the glyphs\n    // not using a for loop because we need to support adding more\n    // glyphs to the array as we go, and CoffeeScript caches the length.\n\n    var i = 0;\n    while (i < this.glyphs.length) {\n      this._addGlyph(this.glyphs[i++]);\n    }\n    var maxp = cloneDeep(this.font.maxp);\n    maxp.numGlyphs = this.glyf.length;\n    this.loca.offsets.push(this.offset);\n    var head = cloneDeep(this.font.head);\n    head.indexToLocFormat = this.loca.version;\n    var hhea = cloneDeep(this.font.hhea);\n    hhea.numberOfMetrics = this.hmtx.metrics.length; // map = []\n    // for index in [0...256]\n    //     if index < @numGlyphs\n    //         map[index] = index\n    //     else\n    //         map[index] = 0\n    //\n    // cmapTable =\n    //     version: 0\n    //     length: 262\n    //     language: 0\n    //     codeMap: map\n    //\n    // cmap =\n    //     version: 0\n    //     numSubtables: 1\n    //     tables: [\n    //         platformID: 1\n    //         encodingID: 0\n    //         table: cmapTable\n    //     ]\n    // TODO: subset prep, cvt, fpgm?\n\n    Directory.encode(stream, {\n      tables: {\n        head: head,\n        hhea: hhea,\n        loca: this.loca,\n        maxp: maxp,\n        'cvt ': this.font['cvt '],\n        prep: this.font.prep,\n        glyf: this.glyf,\n        hmtx: this.hmtx,\n        fpgm: this.font.fpgm // name: clone @font.name\n        // 'OS/2': clone @font['OS/2']\n        // post: clone @font.post\n        // cmap: cmap\n      }\n    });\n  };\n  return TTFSubset;\n}(Subset);\nvar CFFSubset = /*#__PURE__*/function (_Subset2) {\n  _inheritsLoose(CFFSubset, _Subset2);\n  function CFFSubset(font) {\n    var _this13;\n    _this13 = _Subset2.call(this, font) || this;\n    _this13.cff = _this13.font['CFF '];\n    if (!_this13.cff) {\n      throw new Error('Not a CFF Font');\n    }\n    return _this13;\n  }\n  var _proto42 = CFFSubset.prototype;\n  _proto42.subsetCharstrings = function subsetCharstrings() {\n    this.charstrings = [];\n    var gsubrs = {};\n    for (var _iterator73 = _createForOfIteratorHelperLoose(this.glyphs), _step73; !(_step73 = _iterator73()).done;) {\n      var gid = _step73.value;\n      this.charstrings.push(this.cff.getCharString(gid));\n      var glyph = this.font.getGlyph(gid);\n      var path = glyph.path; // this causes the glyph to be parsed\n\n      for (var subr in glyph._usedGsubrs) {\n        gsubrs[subr] = true;\n      }\n    }\n    this.gsubrs = this.subsetSubrs(this.cff.globalSubrIndex, gsubrs);\n  };\n  _proto42.subsetSubrs = function subsetSubrs(subrs, used) {\n    var res = [];\n    for (var i = 0; i < subrs.length; i++) {\n      var subr = subrs[i];\n      if (used[i]) {\n        this.cff.stream.pos = subr.offset;\n        res.push(this.cff.stream.readBuffer(subr.length));\n      } else {\n        res.push(Buffer.from([11])); // return\n      }\n    }\n    return res;\n  };\n  _proto42.subsetFontdict = function subsetFontdict(topDict) {\n    topDict.FDArray = [];\n    topDict.FDSelect = {\n      version: 0,\n      fds: []\n    };\n    var used_fds = {};\n    var used_subrs = [];\n    var fd_select = {};\n    for (var _iterator74 = _createForOfIteratorHelperLoose(this.glyphs), _step74; !(_step74 = _iterator74()).done;) {\n      var gid = _step74.value;\n      var fd = this.cff.fdForGlyph(gid);\n      if (fd == null) {\n        continue;\n      }\n      if (!used_fds[fd]) {\n        topDict.FDArray.push(Object.assign({}, this.cff.topDict.FDArray[fd]));\n        used_subrs.push({});\n        fd_select[fd] = topDict.FDArray.length - 1;\n      }\n      used_fds[fd] = true;\n      topDict.FDSelect.fds.push(fd_select[fd]);\n      var glyph = this.font.getGlyph(gid);\n      var path = glyph.path; // this causes the glyph to be parsed\n\n      for (var subr in glyph._usedSubrs) {\n        used_subrs[fd_select[fd]][subr] = true;\n      }\n    }\n    for (var i = 0; i < topDict.FDArray.length; i++) {\n      var dict = topDict.FDArray[i];\n      delete dict.FontName;\n      if (dict.Private && dict.Private.Subrs) {\n        dict.Private = Object.assign({}, dict.Private);\n        dict.Private.Subrs = this.subsetSubrs(dict.Private.Subrs, used_subrs[i]);\n      }\n    }\n    return;\n  };\n  _proto42.createCIDFontdict = function createCIDFontdict(topDict) {\n    var used_subrs = {};\n    for (var _iterator75 = _createForOfIteratorHelperLoose(this.glyphs), _step75; !(_step75 = _iterator75()).done;) {\n      var gid = _step75.value;\n      var glyph = this.font.getGlyph(gid);\n      var path = glyph.path; // this causes the glyph to be parsed\n\n      for (var subr in glyph._usedSubrs) {\n        used_subrs[subr] = true;\n      }\n    }\n    var privateDict = Object.assign({}, this.cff.topDict.Private);\n    if (this.cff.topDict.Private && this.cff.topDict.Private.Subrs) {\n      privateDict.Subrs = this.subsetSubrs(this.cff.topDict.Private.Subrs, used_subrs);\n    }\n    topDict.FDArray = [{\n      Private: privateDict\n    }];\n    return topDict.FDSelect = {\n      version: 3,\n      nRanges: 1,\n      ranges: [{\n        first: 0,\n        fd: 0\n      }],\n      sentinel: this.charstrings.length\n    };\n  };\n  _proto42.addString = function addString(string) {\n    if (!string) {\n      return null;\n    }\n    if (!this.strings) {\n      this.strings = [];\n    }\n    this.strings.push(string);\n    return standardStrings.length + this.strings.length - 1;\n  };\n  _proto42.encode = function encode(stream) {\n    this.subsetCharstrings();\n    var charset = {\n      version: this.charstrings.length > 255 ? 2 : 1,\n      ranges: [{\n        first: 1,\n        nLeft: this.charstrings.length - 2\n      }]\n    };\n    var topDict = Object.assign({}, this.cff.topDict);\n    topDict.Private = null;\n    topDict.charset = charset;\n    topDict.Encoding = null;\n    topDict.CharStrings = this.charstrings;\n    for (var _i24 = 0, _arr2 = ['version', 'Notice', 'Copyright', 'FullName', 'FamilyName', 'Weight', 'PostScript', 'BaseFontName', 'FontName']; _i24 < _arr2.length; _i24++) {\n      var key = _arr2[_i24];\n      topDict[key] = this.addString(this.cff.string(topDict[key]));\n    }\n    topDict.ROS = [this.addString('Adobe'), this.addString('Identity'), 0];\n    topDict.CIDCount = this.charstrings.length;\n    if (this.cff.isCIDFont) {\n      this.subsetFontdict(topDict);\n    } else {\n      this.createCIDFontdict(topDict);\n    }\n    var top = {\n      version: 1,\n      hdrSize: this.cff.hdrSize,\n      offSize: 4,\n      header: this.cff.header,\n      nameIndex: [this.cff.postscriptName],\n      topDictIndex: [topDict],\n      stringIndex: this.strings,\n      globalSubrIndex: this.gsubrs\n    };\n    CFFTop.encode(stream, top);\n  };\n  return CFFSubset;\n}(Subset);\nvar _class$4;\n/**\r\n * This is the base class for all SFNT-based font formats in fontkit.\r\n * It supports TrueType, and PostScript glyphs, and several color glyph formats.\r\n */\n\nvar TTFFont = (_class$4 = /*#__PURE__*/function () {\n  TTFFont.probe = function probe(buffer) {\n    var format = buffer.toString('ascii', 0, 4);\n    return format === 'true' || format === 'OTTO' || format === String.fromCharCode(0, 1, 0, 0);\n  };\n  function TTFFont(stream, variationCoords) {\n    if (variationCoords === void 0) {\n      variationCoords = null;\n    }\n    this.defaultLanguage = null;\n    this.stream = stream;\n    this.variationCoords = variationCoords;\n    this._directoryPos = this.stream.pos;\n    this._tables = {};\n    this._glyphs = {};\n    this._decodeDirectory(); // define properties for each table to lazily parse\n\n    for (var tag in this.directory.tables) {\n      var table = this.directory.tables[tag];\n      if (tables[tag] && table.length > 0) {\n        Object.defineProperty(this, tag, {\n          get: this._getTable.bind(this, table)\n        });\n      }\n    }\n  }\n  var _proto43 = TTFFont.prototype;\n  _proto43.setDefaultLanguage = function setDefaultLanguage(lang) {\n    if (lang === void 0) {\n      lang = null;\n    }\n    this.defaultLanguage = lang;\n  };\n  _proto43._getTable = function _getTable(table) {\n    if (!(table.tag in this._tables)) {\n      try {\n        this._tables[table.tag] = this._decodeTable(table);\n      } catch (e) {\n        if (fontkit.logErrors) {\n          console.error(\"Error decoding table \".concat(table.tag));\n          console.error(e.stack);\n        }\n      }\n    }\n    return this._tables[table.tag];\n  };\n  _proto43._getTableStream = function _getTableStream(tag) {\n    var table = this.directory.tables[tag];\n    if (table) {\n      this.stream.pos = table.offset;\n      return this.stream;\n    }\n    return null;\n  };\n  _proto43._decodeDirectory = function _decodeDirectory() {\n    return this.directory = Directory.decode(this.stream, {\n      _startOffset: 0\n    });\n  };\n  _proto43._decodeTable = function _decodeTable(table) {\n    var pos = this.stream.pos;\n    var stream = this._getTableStream(table.tag);\n    var result = tables[table.tag].decode(stream, this, table.length);\n    this.stream.pos = pos;\n    return result;\n  }\n  /**\r\n   * Gets a string from the font's `name` table\r\n   * `lang` is a BCP-47 language code.\r\n   * @return {string}\r\n   */;\n  _proto43.getName = function getName(key, lang) {\n    if (lang === void 0) {\n      lang = this.defaultLanguage || fontkit.defaultLanguage;\n    }\n    var record = this.name && this.name.records[key];\n    if (record) {\n      // Attempt to retrieve the entry, depending on which translation is available:\n      return record[lang] || record[this.defaultLanguage] || record[fontkit.defaultLanguage] || record['en'] || record[Object.keys(record)[0]] // Seriously, ANY language would be fine\n      || null;\n    }\n    return null;\n  }\n  /**\r\n   * The unique PostScript name for this font, e.g. \"Helvetica-Bold\"\r\n   * @type {string}\r\n   */;\n  /**\r\n   * Returns whether there is glyph in the font for the given unicode code point.\r\n   *\r\n   * @param {number} codePoint\r\n   * @return {boolean}\r\n   */\n  _proto43.hasGlyphForCodePoint = function hasGlyphForCodePoint(codePoint) {\n    return !!this._cmapProcessor.lookup(codePoint);\n  }\n  /**\r\n   * Maps a single unicode code point to a Glyph object.\r\n   * Does not perform any advanced substitutions (there is no context to do so).\r\n   *\r\n   * @param {number} codePoint\r\n   * @return {Glyph}\r\n   */;\n  _proto43.glyphForCodePoint = function glyphForCodePoint(codePoint) {\n    return this.getGlyph(this._cmapProcessor.lookup(codePoint), [codePoint]);\n  }\n  /**\r\n   * Returns an array of Glyph objects for the given string.\r\n   * This is only a one-to-one mapping from characters to glyphs.\r\n   * For most uses, you should use font.layout (described below), which\r\n   * provides a much more advanced mapping supporting AAT and OpenType shaping.\r\n   *\r\n   * @param {string} string\r\n   * @return {Glyph[]}\r\n   */;\n  _proto43.glyphsForString = function glyphsForString(string) {\n    var glyphs = [];\n    var len = string.length;\n    var idx = 0;\n    var last = -1;\n    var state = -1;\n    while (idx <= len) {\n      var code = 0;\n      var nextState = 0;\n      if (idx < len) {\n        // Decode the next codepoint from UTF 16\n        code = string.charCodeAt(idx++);\n        if (0xd800 <= code && code <= 0xdbff && idx < len) {\n          var next = string.charCodeAt(idx);\n          if (0xdc00 <= next && next <= 0xdfff) {\n            idx++;\n            code = ((code & 0x3ff) << 10) + (next & 0x3ff) + 0x10000;\n          }\n        } // Compute the next state: 1 if the next codepoint is a variation selector, 0 otherwise.\n\n        nextState = 0xfe00 <= code && code <= 0xfe0f || 0xe0100 <= code && code <= 0xe01ef ? 1 : 0;\n      } else {\n        idx++;\n      }\n      if (state === 0 && nextState === 1) {\n        // Variation selector following normal codepoint.\n        glyphs.push(this.getGlyph(this._cmapProcessor.lookup(last, code), [last, code]));\n      } else if (state === 0 && nextState === 0) {\n        // Normal codepoint following normal codepoint.\n        glyphs.push(this.glyphForCodePoint(last));\n      }\n      last = code;\n      state = nextState;\n    }\n    return glyphs;\n  };\n  /**\r\n   * Returns a GlyphRun object, which includes an array of Glyphs and GlyphPositions for the given string.\r\n   *\r\n   * @param {string} string\r\n   * @param {string[]} [userFeatures]\r\n   * @param {string} [script]\r\n   * @param {string} [language]\r\n   * @param {string} [direction]\r\n   * @return {GlyphRun}\r\n   */\n  _proto43.layout = function layout(string, userFeatures, script, language, direction) {\n    return this._layoutEngine.layout(string, userFeatures, script, language, direction);\n  }\n  /**\r\n   * Returns an array of strings that map to the given glyph id.\r\n   * @param {number} gid - glyph id\r\n   */;\n  _proto43.stringsForGlyph = function stringsForGlyph(gid) {\n    return this._layoutEngine.stringsForGlyph(gid);\n  }\n  /**\r\n   * An array of all [OpenType feature tags](https://www.microsoft.com/typography/otspec/featuretags.htm)\r\n   * (or mapped AAT tags) supported by the font.\r\n   * The features parameter is an array of OpenType feature tags to be applied in addition to the default set.\r\n   * If this is an AAT font, the OpenType feature tags are mapped to AAT features.\r\n   *\r\n   * @type {string[]}\r\n   */;\n  _proto43.getAvailableFeatures = function getAvailableFeatures(script, language) {\n    return this._layoutEngine.getAvailableFeatures(script, language);\n  };\n  _proto43._getBaseGlyph = function _getBaseGlyph(glyph, characters) {\n    if (characters === void 0) {\n      characters = [];\n    }\n    if (!this._glyphs[glyph]) {\n      if (this.directory.tables.glyf) {\n        this._glyphs[glyph] = new TTFGlyph(glyph, characters, this);\n      } else if (this.directory.tables['CFF '] || this.directory.tables.CFF2) {\n        this._glyphs[glyph] = new CFFGlyph(glyph, characters, this);\n      }\n    }\n    return this._glyphs[glyph] || null;\n  }\n  /**\r\n   * Returns a glyph object for the given glyph id.\r\n   * You can pass the array of code points this glyph represents for\r\n   * your use later, and it will be stored in the glyph object.\r\n   *\r\n   * @param {number} glyph\r\n   * @param {number[]} characters\r\n   * @return {Glyph}\r\n   */;\n  _proto43.getGlyph = function getGlyph(glyph, characters) {\n    if (characters === void 0) {\n      characters = [];\n    }\n    if (!this._glyphs[glyph]) {\n      if (this.directory.tables.sbix) {\n        this._glyphs[glyph] = new SBIXGlyph(glyph, characters, this);\n      } else if (this.directory.tables.COLR && this.directory.tables.CPAL) {\n        this._glyphs[glyph] = new COLRGlyph(glyph, characters, this);\n      } else {\n        this._getBaseGlyph(glyph, characters);\n      }\n    }\n    return this._glyphs[glyph] || null;\n  }\n  /**\r\n   * Returns a Subset for this font.\r\n   * @return {Subset}\r\n   */;\n  _proto43.createSubset = function createSubset() {\n    if (this.directory.tables['CFF ']) {\n      return new CFFSubset(this);\n    }\n    return new TTFSubset(this);\n  }\n  /**\r\n   * Returns an object describing the available variation axes\r\n   * that this font supports. Keys are setting tags, and values\r\n   * contain the axis name, range, and default value.\r\n   *\r\n   * @type {object}\r\n   */;\n  /**\r\n   * Returns a new font with the given variation settings applied.\r\n   * Settings can either be an instance name, or an object containing\r\n   * variation tags as specified by the `variationAxes` property.\r\n   *\r\n   * @param {object} settings\r\n   * @return {TTFFont}\r\n   */\n  _proto43.getVariation = function getVariation(settings) {\n    if (!(this.directory.tables.fvar && (this.directory.tables.gvar && this.directory.tables.glyf || this.directory.tables.CFF2))) {\n      throw new Error('Variations require a font with the fvar, gvar and glyf, or CFF2 tables.');\n    }\n    if (typeof settings === 'string') {\n      settings = this.namedVariations[settings];\n    }\n    if (typeof settings !== 'object') {\n      throw new Error('Variation settings must be either a variation name or settings object.');\n    } // normalize the coordinates\n\n    var coords = this.fvar.axis.map(function (axis, i) {\n      var axisTag = axis.axisTag.trim();\n      if (axisTag in settings) {\n        return Math.max(axis.minValue, Math.min(axis.maxValue, settings[axisTag]));\n      } else {\n        return axis.defaultValue;\n      }\n    });\n    var stream = new r.DecodeStream(this.stream.buffer);\n    stream.pos = this._directoryPos;\n    var font = new TTFFont(stream, coords);\n    font._tables = this._tables;\n    return font;\n  };\n  // Standardized format plugin API\n  _proto43.getFont = function getFont(name) {\n    return this.getVariation(name);\n  };\n  _createClass(TTFFont, [{\n    key: \"postscriptName\",\n    get: function get() {\n      return this.getName('postscriptName');\n    }\n    /**\r\n     * The font's full name, e.g. \"Helvetica Bold\"\r\n     * @type {string}\r\n     */\n  }, {\n    key: \"fullName\",\n    get: function get() {\n      return this.getName('fullName');\n    }\n    /**\r\n     * The font's family name, e.g. \"Helvetica\"\r\n     * @type {string}\r\n     */\n  }, {\n    key: \"familyName\",\n    get: function get() {\n      return this.getName('fontFamily');\n    }\n    /**\r\n     * The font's sub-family, e.g. \"Bold\".\r\n     * @type {string}\r\n     */\n  }, {\n    key: \"subfamilyName\",\n    get: function get() {\n      return this.getName('fontSubfamily');\n    }\n    /**\r\n     * The font's copyright information\r\n     * @type {string}\r\n     */\n  }, {\n    key: \"copyright\",\n    get: function get() {\n      return this.getName('copyright');\n    }\n    /**\r\n     * The font's version number\r\n     * @type {string}\r\n     */\n  }, {\n    key: \"version\",\n    get: function get() {\n      return this.getName('version');\n    }\n    /**\r\n     * The font’s [ascender](https://en.wikipedia.org/wiki/Ascender_(typography))\r\n     * @type {number}\r\n     */\n  }, {\n    key: \"ascent\",\n    get: function get() {\n      return this.hhea.ascent;\n    }\n    /**\r\n     * The font’s [descender](https://en.wikipedia.org/wiki/Descender)\r\n     * @type {number}\r\n     */\n  }, {\n    key: \"descent\",\n    get: function get() {\n      return this.hhea.descent;\n    }\n    /**\r\n     * The amount of space that should be included between lines\r\n     * @type {number}\r\n     */\n  }, {\n    key: \"lineGap\",\n    get: function get() {\n      return this.hhea.lineGap;\n    }\n    /**\r\n     * The offset from the normal underline position that should be used\r\n     * @type {number}\r\n     */\n  }, {\n    key: \"underlinePosition\",\n    get: function get() {\n      return this.post.underlinePosition;\n    }\n    /**\r\n     * The weight of the underline that should be used\r\n     * @type {number}\r\n     */\n  }, {\n    key: \"underlineThickness\",\n    get: function get() {\n      return this.post.underlineThickness;\n    }\n    /**\r\n     * If this is an italic font, the angle the cursor should be drawn at to match the font design\r\n     * @type {number}\r\n     */\n  }, {\n    key: \"italicAngle\",\n    get: function get() {\n      return this.post.italicAngle;\n    }\n    /**\r\n     * The height of capital letters above the baseline.\r\n     * See [here](https://en.wikipedia.org/wiki/Cap_height) for more details.\r\n     * @type {number}\r\n     */\n  }, {\n    key: \"capHeight\",\n    get: function get() {\n      var os2 = this['OS/2'];\n      return os2 ? os2.capHeight : this.ascent;\n    }\n    /**\r\n     * The height of lower case letters in the font.\r\n     * See [here](https://en.wikipedia.org/wiki/X-height) for more details.\r\n     * @type {number}\r\n     */\n  }, {\n    key: \"xHeight\",\n    get: function get() {\n      var os2 = this['OS/2'];\n      return os2 ? os2.xHeight : 0;\n    }\n    /**\r\n     * The number of glyphs in the font.\r\n     * @type {number}\r\n     */\n  }, {\n    key: \"numGlyphs\",\n    get: function get() {\n      return this.maxp.numGlyphs;\n    }\n    /**\r\n     * The size of the font’s internal coordinate grid\r\n     * @type {number}\r\n     */\n  }, {\n    key: \"unitsPerEm\",\n    get: function get() {\n      return this.head.unitsPerEm;\n    }\n    /**\r\n     * The font’s bounding box, i.e. the box that encloses all glyphs in the font.\r\n     * @type {BBox}\r\n     */\n  }, {\n    key: \"bbox\",\n    get: function get() {\n      return Object.freeze(new BBox(this.head.xMin, this.head.yMin, this.head.xMax, this.head.yMax));\n    }\n  }, {\n    key: \"_cmapProcessor\",\n    get: function get() {\n      return new CmapProcessor(this.cmap);\n    }\n    /**\r\n     * An array of all of the unicode code points supported by the font.\r\n     * @type {number[]}\r\n     */\n  }, {\n    key: \"characterSet\",\n    get: function get() {\n      return this._cmapProcessor.getCharacterSet();\n    }\n  }, {\n    key: \"_layoutEngine\",\n    get: function get() {\n      return new LayoutEngine(this);\n    }\n  }, {\n    key: \"availableFeatures\",\n    get: function get() {\n      return this._layoutEngine.getAvailableFeatures();\n    }\n  }, {\n    key: \"variationAxes\",\n    get: function get() {\n      var res = {};\n      if (!this.fvar) {\n        return res;\n      }\n      for (var _iterator76 = _createForOfIteratorHelperLoose(this.fvar.axis), _step76; !(_step76 = _iterator76()).done;) {\n        var axis = _step76.value;\n        res[axis.axisTag.trim()] = {\n          name: axis.name.en,\n          min: axis.minValue,\n          default: axis.defaultValue,\n          max: axis.maxValue\n        };\n      }\n      return res;\n    }\n    /**\r\n     * Returns an object describing the named variation instances\r\n     * that the font designer has specified. Keys are variation names\r\n     * and values are the variation settings for this instance.\r\n     *\r\n     * @type {object}\r\n     */\n  }, {\n    key: \"namedVariations\",\n    get: function get() {\n      var res = {};\n      if (!this.fvar) {\n        return res;\n      }\n      for (var _iterator77 = _createForOfIteratorHelperLoose(this.fvar.instance), _step77; !(_step77 = _iterator77()).done;) {\n        var instance = _step77.value;\n        var settings = {};\n        for (var i = 0; i < this.fvar.axis.length; i++) {\n          var axis = this.fvar.axis[i];\n          settings[axis.axisTag.trim()] = instance.coord[i];\n        }\n        res[instance.name.en] = settings;\n      }\n      return res;\n    }\n  }, {\n    key: \"_variationProcessor\",\n    get: function get() {\n      if (!this.fvar) {\n        return null;\n      }\n      var variationCoords = this.variationCoords; // Ignore if no variation coords and not CFF2\n\n      if (!variationCoords && !this.CFF2) {\n        return null;\n      }\n      if (!variationCoords) {\n        variationCoords = this.fvar.axis.map(function (axis) {\n          return axis.defaultValue;\n        });\n      }\n      return new GlyphVariationProcessor(this, variationCoords);\n    }\n  }]);\n  return TTFFont;\n}(), (_applyDecoratedDescriptor(_class$4.prototype, \"bbox\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"bbox\"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, \"_cmapProcessor\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"_cmapProcessor\"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, \"characterSet\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"characterSet\"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, \"_layoutEngine\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"_layoutEngine\"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, \"variationAxes\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"variationAxes\"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, \"namedVariations\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"namedVariations\"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, \"_variationProcessor\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"_variationProcessor\"), _class$4.prototype)), _class$4);\nvar WOFFDirectoryEntry = new r.Struct({\n  tag: new r.String(4),\n  offset: new r.Pointer(r.uint32, 'void', {\n    type: 'global'\n  }),\n  compLength: r.uint32,\n  length: r.uint32,\n  origChecksum: r.uint32\n});\nvar WOFFDirectory = new r.Struct({\n  tag: new r.String(4),\n  // should be 'wOFF'\n  flavor: r.uint32,\n  length: r.uint32,\n  numTables: r.uint16,\n  reserved: new r.Reserved(r.uint16),\n  totalSfntSize: r.uint32,\n  majorVersion: r.uint16,\n  minorVersion: r.uint16,\n  metaOffset: r.uint32,\n  metaLength: r.uint32,\n  metaOrigLength: r.uint32,\n  privOffset: r.uint32,\n  privLength: r.uint32,\n  tables: new r.Array(WOFFDirectoryEntry, 'numTables')\n});\nWOFFDirectory.process = function () {\n  var tables = {};\n  for (var _iterator78 = _createForOfIteratorHelperLoose(this.tables), _step78; !(_step78 = _iterator78()).done;) {\n    var table = _step78.value;\n    tables[table.tag] = table;\n  }\n  this.tables = tables;\n};\nvar WOFFFont = /*#__PURE__*/function (_TTFFont) {\n  _inheritsLoose(WOFFFont, _TTFFont);\n  function WOFFFont() {\n    return _TTFFont.apply(this, arguments) || this;\n  }\n  WOFFFont.probe = function probe(buffer) {\n    return buffer.toString('ascii', 0, 4) === 'wOFF';\n  };\n  var _proto44 = WOFFFont.prototype;\n  _proto44._decodeDirectory = function _decodeDirectory() {\n    this.directory = WOFFDirectory.decode(this.stream, {\n      _startOffset: 0\n    });\n  };\n  _proto44._getTableStream = function _getTableStream(tag) {\n    var table = this.directory.tables[tag];\n    if (table) {\n      this.stream.pos = table.offset;\n      if (table.compLength < table.length) {\n        this.stream.pos += 2; // skip deflate header\n\n        var outBuffer = Buffer.alloc(table.length);\n        var buf = inflate(this.stream.readBuffer(table.compLength - 2), outBuffer);\n        return new r.DecodeStream(buf);\n      } else {\n        return this.stream;\n      }\n    }\n    return null;\n  };\n  return WOFFFont;\n}(TTFFont);\n/**\r\n * Represents a TrueType glyph in the WOFF2 format, which compresses glyphs differently.\r\n */\nvar WOFF2Glyph = /*#__PURE__*/function (_TTFGlyph2) {\n  _inheritsLoose(WOFF2Glyph, _TTFGlyph2);\n  function WOFF2Glyph() {\n    return _TTFGlyph2.apply(this, arguments) || this;\n  }\n  var _proto45 = WOFF2Glyph.prototype;\n  _proto45._decode = function _decode() {\n    // We have to decode in advance (in WOFF2Font), so just return the pre-decoded data.\n    return this._font._transformedGlyphs[this.id];\n  };\n  _proto45._getCBox = function _getCBox() {\n    return this.path.bbox;\n  };\n  return WOFF2Glyph;\n}(TTFGlyph);\nvar Base128 = {\n  decode: function decode(stream) {\n    var result = 0;\n    var iterable = [0, 1, 2, 3, 4];\n    for (var j = 0; j < iterable.length; j++) {\n      var code = stream.readUInt8(); // If any of the top seven bits are set then we're about to overflow.\n\n      if (result & 0xe0000000) {\n        throw new Error('Overflow');\n      }\n      result = result << 7 | code & 0x7f;\n      if ((code & 0x80) === 0) {\n        return result;\n      }\n    }\n    throw new Error('Bad base 128 number');\n  }\n};\nvar knownTags = ['cmap', 'head', 'hhea', 'hmtx', 'maxp', 'name', 'OS/2', 'post', 'cvt ', 'fpgm', 'glyf', 'loca', 'prep', 'CFF ', 'VORG', 'EBDT', 'EBLC', 'gasp', 'hdmx', 'kern', 'LTSH', 'PCLT', 'VDMX', 'vhea', 'vmtx', 'BASE', 'GDEF', 'GPOS', 'GSUB', 'EBSC', 'JSTF', 'MATH', 'CBDT', 'CBLC', 'COLR', 'CPAL', 'SVG ', 'sbix', 'acnt', 'avar', 'bdat', 'bloc', 'bsln', 'cvar', 'fdsc', 'feat', 'fmtx', 'fvar', 'gvar', 'hsty', 'just', 'lcar', 'mort', 'morx', 'opbd', 'prop', 'trak', 'Zapf', 'Silf', 'Glat', 'Gloc', 'Feat', 'Sill'];\nvar WOFF2DirectoryEntry = new r.Struct({\n  flags: r.uint8,\n  customTag: new r.Optional(new r.String(4), function (t) {\n    return (t.flags & 0x3f) === 0x3f;\n  }),\n  tag: function tag(t) {\n    return t.customTag || knownTags[t.flags & 0x3f];\n  },\n  // || (() => { throw new Error(`Bad tag: ${flags & 0x3f}`); })(); },\n  length: Base128,\n  transformVersion: function transformVersion(t) {\n    return t.flags >>> 6 & 0x03;\n  },\n  transformed: function transformed(t) {\n    return t.tag === 'glyf' || t.tag === 'loca' ? t.transformVersion === 0 : t.transformVersion !== 0;\n  },\n  transformLength: new r.Optional(Base128, function (t) {\n    return t.transformed;\n  })\n});\nvar WOFF2Directory = new r.Struct({\n  tag: new r.String(4),\n  // should be 'wOF2'\n  flavor: r.uint32,\n  length: r.uint32,\n  numTables: r.uint16,\n  reserved: new r.Reserved(r.uint16),\n  totalSfntSize: r.uint32,\n  totalCompressedSize: r.uint32,\n  majorVersion: r.uint16,\n  minorVersion: r.uint16,\n  metaOffset: r.uint32,\n  metaLength: r.uint32,\n  metaOrigLength: r.uint32,\n  privOffset: r.uint32,\n  privLength: r.uint32,\n  tables: new r.Array(WOFF2DirectoryEntry, 'numTables')\n});\nWOFF2Directory.process = function () {\n  var tables = {};\n  for (var i = 0; i < this.tables.length; i++) {\n    var table = this.tables[i];\n    tables[table.tag] = table;\n  }\n  return this.tables = tables;\n};\n\n/**\r\n * Subclass of TTFFont that represents a TTF/OTF font compressed by WOFF2\r\n * See spec here: http://www.w3.org/TR/WOFF2/\r\n */\nvar WOFF2Font = /*#__PURE__*/function (_TTFFont2) {\n  _inheritsLoose(WOFF2Font, _TTFFont2);\n  function WOFF2Font() {\n    return _TTFFont2.apply(this, arguments) || this;\n  }\n  WOFF2Font.probe = function probe(buffer) {\n    return buffer.toString('ascii', 0, 4) === 'wOF2';\n  };\n  var _proto46 = WOFF2Font.prototype;\n  _proto46._decodeDirectory = function _decodeDirectory() {\n    this.directory = WOFF2Directory.decode(this.stream);\n    this._dataPos = this.stream.pos;\n  };\n  _proto46._decompress = function _decompress() {\n    // decompress data and setup table offsets if we haven't already\n    if (!this._decompressed) {\n      this.stream.pos = this._dataPos;\n      var buffer = this.stream.readBuffer(this.directory.totalCompressedSize);\n      var decompressedSize = 0;\n      for (var tag in this.directory.tables) {\n        var entry = this.directory.tables[tag];\n        entry.offset = decompressedSize;\n        decompressedSize += entry.transformLength != null ? entry.transformLength : entry.length;\n      }\n      var decompressed = brotli(buffer, decompressedSize);\n      if (!decompressed) {\n        throw new Error('Error decoding compressed data in WOFF2');\n      }\n      this.stream = new r.DecodeStream(Buffer.from(decompressed));\n      this._decompressed = true;\n    }\n  };\n  _proto46._decodeTable = function _decodeTable(table) {\n    this._decompress();\n    return _TTFFont2.prototype._decodeTable.call(this, table);\n  } // Override this method to get a glyph and return our\n  // custom subclass if there is a glyf table.\n  ;\n  _proto46._getBaseGlyph = function _getBaseGlyph(glyph, characters) {\n    if (characters === void 0) {\n      characters = [];\n    }\n    if (!this._glyphs[glyph]) {\n      if (this.directory.tables.glyf && this.directory.tables.glyf.transformed) {\n        if (!this._transformedGlyphs) {\n          this._transformGlyfTable();\n        }\n        return this._glyphs[glyph] = new WOFF2Glyph(glyph, characters, this);\n      } else {\n        return _TTFFont2.prototype._getBaseGlyph.call(this, glyph, characters);\n      }\n    }\n  };\n  _proto46._transformGlyfTable = function _transformGlyfTable() {\n    this._decompress();\n    this.stream.pos = this.directory.tables.glyf.offset;\n    var table = GlyfTable.decode(this.stream);\n    var glyphs = [];\n    for (var index = 0; index < table.numGlyphs; index++) {\n      var glyph = {};\n      var nContours = table.nContours.readInt16BE();\n      glyph.numberOfContours = nContours;\n      if (nContours > 0) {\n        // simple glyph\n        var nPoints = [];\n        var totalPoints = 0;\n        for (var i = 0; i < nContours; i++) {\n          var _r = read255UInt16(table.nPoints);\n          totalPoints += _r;\n          nPoints.push(totalPoints);\n        }\n        glyph.points = decodeTriplet(table.flags, table.glyphs, totalPoints);\n        for (var _i = 0; _i < nContours; _i++) {\n          glyph.points[nPoints[_i] - 1].endContour = true;\n        }\n        var instructionSize = read255UInt16(table.glyphs);\n      } else if (nContours < 0) {\n        // composite glyph\n        var haveInstructions = TTFGlyph.prototype._decodeComposite.call({\n          _font: this\n        }, glyph, table.composites);\n        if (haveInstructions) {\n          var instructionSize = read255UInt16(table.glyphs);\n        }\n      }\n      glyphs.push(glyph);\n    }\n    this._transformedGlyphs = glyphs;\n  };\n  return WOFF2Font;\n}(TTFFont); // Special class that accepts a length and returns a sub-stream for that data\nvar Substream = /*#__PURE__*/function () {\n  function Substream(length) {\n    this.length = length;\n    this._buf = new r.Buffer(length);\n  }\n  var _proto47 = Substream.prototype;\n  _proto47.decode = function decode(stream, parent) {\n    return new r.DecodeStream(this._buf.decode(stream, parent));\n  };\n  return Substream;\n}(); // This struct represents the entire glyf table\nvar GlyfTable = new r.Struct({\n  version: r.uint32,\n  numGlyphs: r.uint16,\n  indexFormat: r.uint16,\n  nContourStreamSize: r.uint32,\n  nPointsStreamSize: r.uint32,\n  flagStreamSize: r.uint32,\n  glyphStreamSize: r.uint32,\n  compositeStreamSize: r.uint32,\n  bboxStreamSize: r.uint32,\n  instructionStreamSize: r.uint32,\n  nContours: new Substream('nContourStreamSize'),\n  nPoints: new Substream('nPointsStreamSize'),\n  flags: new Substream('flagStreamSize'),\n  glyphs: new Substream('glyphStreamSize'),\n  composites: new Substream('compositeStreamSize'),\n  bboxes: new Substream('bboxStreamSize'),\n  instructions: new Substream('instructionStreamSize')\n});\nvar WORD_CODE = 253;\nvar ONE_MORE_BYTE_CODE2 = 254;\nvar ONE_MORE_BYTE_CODE1 = 255;\nvar LOWEST_U_CODE = 253;\nfunction read255UInt16(stream) {\n  var code = stream.readUInt8();\n  if (code === WORD_CODE) {\n    return stream.readUInt16BE();\n  }\n  if (code === ONE_MORE_BYTE_CODE1) {\n    return stream.readUInt8() + LOWEST_U_CODE;\n  }\n  if (code === ONE_MORE_BYTE_CODE2) {\n    return stream.readUInt8() + LOWEST_U_CODE * 2;\n  }\n  return code;\n}\nfunction withSign(flag, baseval) {\n  return flag & 1 ? baseval : -baseval;\n}\nfunction decodeTriplet(flags, glyphs, nPoints) {\n  var y;\n  var x = y = 0;\n  var res = [];\n  for (var i = 0; i < nPoints; i++) {\n    var dx = 0,\n      dy = 0;\n    var flag = flags.readUInt8();\n    var onCurve = !(flag >> 7);\n    flag &= 0x7f;\n    if (flag < 10) {\n      dx = 0;\n      dy = withSign(flag, ((flag & 14) << 7) + glyphs.readUInt8());\n    } else if (flag < 20) {\n      dx = withSign(flag, ((flag - 10 & 14) << 7) + glyphs.readUInt8());\n      dy = 0;\n    } else if (flag < 84) {\n      var b0 = flag - 20;\n      var b1 = glyphs.readUInt8();\n      dx = withSign(flag, 1 + (b0 & 0x30) + (b1 >> 4));\n      dy = withSign(flag >> 1, 1 + ((b0 & 0x0c) << 2) + (b1 & 0x0f));\n    } else if (flag < 120) {\n      var b0 = flag - 84;\n      dx = withSign(flag, 1 + (b0 / 12 << 8) + glyphs.readUInt8());\n      dy = withSign(flag >> 1, 1 + (b0 % 12 >> 2 << 8) + glyphs.readUInt8());\n    } else if (flag < 124) {\n      var b1 = glyphs.readUInt8();\n      var b2 = glyphs.readUInt8();\n      dx = withSign(flag, (b1 << 4) + (b2 >> 4));\n      dy = withSign(flag >> 1, ((b2 & 0x0f) << 8) + glyphs.readUInt8());\n    } else {\n      dx = withSign(flag, glyphs.readUInt16BE());\n      dy = withSign(flag >> 1, glyphs.readUInt16BE());\n    }\n    x += dx;\n    y += dy;\n    res.push(new Point(onCurve, false, x, y));\n  }\n  return res;\n}\nvar TTCHeader = new r.VersionedStruct(r.uint32, {\n  0x00010000: {\n    numFonts: r.uint32,\n    offsets: new r.Array(r.uint32, 'numFonts')\n  },\n  0x00020000: {\n    numFonts: r.uint32,\n    offsets: new r.Array(r.uint32, 'numFonts'),\n    dsigTag: r.uint32,\n    dsigLength: r.uint32,\n    dsigOffset: r.uint32\n  }\n});\nvar TrueTypeCollection = /*#__PURE__*/function () {\n  TrueTypeCollection.probe = function probe(buffer) {\n    return buffer.toString('ascii', 0, 4) === 'ttcf';\n  };\n  function TrueTypeCollection(stream) {\n    this.stream = stream;\n    if (stream.readString(4) !== 'ttcf') {\n      throw new Error('Not a TrueType collection');\n    }\n    this.header = TTCHeader.decode(stream);\n  }\n  var _proto48 = TrueTypeCollection.prototype;\n  _proto48.getFont = function getFont(name) {\n    for (var _iterator79 = _createForOfIteratorHelperLoose(this.header.offsets), _step79; !(_step79 = _iterator79()).done;) {\n      var offset = _step79.value;\n      var stream = new r.DecodeStream(this.stream.buffer);\n      stream.pos = offset;\n      var font = new TTFFont(stream);\n      if (font.postscriptName === name) {\n        return font;\n      }\n    }\n    return null;\n  };\n  _createClass(TrueTypeCollection, [{\n    key: \"fonts\",\n    get: function get() {\n      var fonts = [];\n      for (var _iterator80 = _createForOfIteratorHelperLoose(this.header.offsets), _step80; !(_step80 = _iterator80()).done;) {\n        var offset = _step80.value;\n        var stream = new r.DecodeStream(this.stream.buffer);\n        stream.pos = offset;\n        fonts.push(new TTFFont(stream));\n      }\n      return fonts;\n    }\n  }]);\n  return TrueTypeCollection;\n}();\nvar DFontName = new r.String(r.uint8);\nvar DFontData = new r.Struct({\n  len: r.uint32,\n  buf: new r.Buffer('len')\n});\nvar Ref = new r.Struct({\n  id: r.uint16,\n  nameOffset: r.int16,\n  attr: r.uint8,\n  dataOffset: r.uint24,\n  handle: r.uint32\n});\nvar Type = new r.Struct({\n  name: new r.String(4),\n  maxTypeIndex: r.uint16,\n  refList: new r.Pointer(r.uint16, new r.Array(Ref, function (t) {\n    return t.maxTypeIndex + 1;\n  }), {\n    type: 'parent'\n  })\n});\nvar TypeList = new r.Struct({\n  length: r.uint16,\n  types: new r.Array(Type, function (t) {\n    return t.length + 1;\n  })\n});\nvar DFontMap = new r.Struct({\n  reserved: new r.Reserved(r.uint8, 24),\n  typeList: new r.Pointer(r.uint16, TypeList),\n  nameListOffset: new r.Pointer(r.uint16, 'void')\n});\nvar DFontHeader = new r.Struct({\n  dataOffset: r.uint32,\n  map: new r.Pointer(r.uint32, DFontMap),\n  dataLength: r.uint32,\n  mapLength: r.uint32\n});\nvar DFont = /*#__PURE__*/function () {\n  DFont.probe = function probe(buffer) {\n    var stream = new r.DecodeStream(buffer);\n    try {\n      var header = DFontHeader.decode(stream);\n    } catch (e) {\n      return false;\n    }\n    for (var _iterator81 = _createForOfIteratorHelperLoose(header.map.typeList.types), _step81; !(_step81 = _iterator81()).done;) {\n      var type = _step81.value;\n      if (type.name === 'sfnt') {\n        return true;\n      }\n    }\n    return false;\n  };\n  function DFont(stream) {\n    this.stream = stream;\n    this.header = DFontHeader.decode(this.stream);\n    for (var _iterator82 = _createForOfIteratorHelperLoose(this.header.map.typeList.types), _step82; !(_step82 = _iterator82()).done;) {\n      var type = _step82.value;\n      for (var _iterator83 = _createForOfIteratorHelperLoose(type.refList), _step83; !(_step83 = _iterator83()).done;) {\n        var ref = _step83.value;\n        if (ref.nameOffset >= 0) {\n          this.stream.pos = ref.nameOffset + this.header.map.nameListOffset;\n          ref.name = DFontName.decode(this.stream);\n        } else {\n          ref.name = null;\n        }\n      }\n      if (type.name === 'sfnt') {\n        this.sfnt = type;\n      }\n    }\n  }\n  var _proto49 = DFont.prototype;\n  _proto49.getFont = function getFont(name) {\n    if (!this.sfnt) {\n      return null;\n    }\n    for (var _iterator84 = _createForOfIteratorHelperLoose(this.sfnt.refList), _step84; !(_step84 = _iterator84()).done;) {\n      var ref = _step84.value;\n      var pos = this.header.dataOffset + ref.dataOffset + 4;\n      var stream = new r.DecodeStream(this.stream.buffer.slice(pos));\n      var font = new TTFFont(stream);\n      if (font.postscriptName === name) {\n        return font;\n      }\n    }\n    return null;\n  };\n  _createClass(DFont, [{\n    key: \"fonts\",\n    get: function get() {\n      var fonts = [];\n      for (var _iterator85 = _createForOfIteratorHelperLoose(this.sfnt.refList), _step85; !(_step85 = _iterator85()).done;) {\n        var ref = _step85.value;\n        var pos = this.header.dataOffset + ref.dataOffset + 4;\n        var stream = new r.DecodeStream(this.stream.buffer.slice(pos));\n        fonts.push(new TTFFont(stream));\n      }\n      return fonts;\n    }\n  }]);\n  return DFont;\n}();\nfontkit.registerFormat(TTFFont);\nfontkit.registerFormat(WOFFFont);\nfontkit.registerFormat(WOFF2Font);\nfontkit.registerFormat(TrueTypeCollection);\nfontkit.registerFormat(DFont);\nmodule.exports = fontkit;","\"use strict\";\n\nvar UnicodeTrie = require('unicode-trie');\n\nvar base64 = require('base64-js');\nvar _require = require('./classes'),\n  BK = _require.BK,\n  CR = _require.CR,\n  LF = _require.LF,\n  NL = _require.NL,\n  SG = _require.SG,\n  WJ = _require.WJ,\n  SP = _require.SP,\n  ZWJ = _require.ZWJ,\n  BA = _require.BA,\n  HY = _require.HY,\n  NS = _require.NS,\n  AI = _require.AI,\n  AL = _require.AL,\n  CJ = _require.CJ,\n  HL = _require.HL,\n  RI = _require.RI,\n  SA = _require.SA,\n  XX = _require.XX;\nvar _require2 = require('./pairs'),\n  DI_BRK = _require2.DI_BRK,\n  IN_BRK = _require2.IN_BRK,\n  CI_BRK = _require2.CI_BRK,\n  CP_BRK = _require2.CP_BRK,\n  PR_BRK = _require2.PR_BRK,\n  pairTable = _require2.pairTable;\nvar data = base64.toByteArray(\"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\");\nvar classTrie = new UnicodeTrie(data);\nvar mapClass = function mapClass(c) {\n  switch (c) {\n    case AI:\n      return AL;\n    case SA:\n    case SG:\n    case XX:\n      return AL;\n    case CJ:\n      return NS;\n    default:\n      return c;\n  }\n};\nvar mapFirst = function mapFirst(c) {\n  switch (c) {\n    case LF:\n    case NL:\n      return BK;\n    case SP:\n      return WJ;\n    default:\n      return c;\n  }\n};\nvar Break = function Break(position, required) {\n  if (required === void 0) {\n    required = false;\n  }\n  this.position = position;\n  this.required = required;\n};\nvar LineBreaker = /*#__PURE__*/function () {\n  function LineBreaker(string) {\n    this.string = string;\n    this.pos = 0;\n    this.lastPos = 0;\n    this.curClass = null;\n    this.nextClass = null;\n    this.LB8a = false;\n    this.LB21a = false;\n    this.LB30a = 0;\n  }\n  var _proto = LineBreaker.prototype;\n  _proto.nextCodePoint = function nextCodePoint() {\n    var code = this.string.charCodeAt(this.pos++);\n    var next = this.string.charCodeAt(this.pos);\n\n    // If a surrogate pair\n    if (0xd800 <= code && code <= 0xdbff && 0xdc00 <= next && next <= 0xdfff) {\n      this.pos++;\n      return (code - 0xd800) * 0x400 + (next - 0xdc00) + 0x10000;\n    }\n    return code;\n  };\n  _proto.nextCharClass = function nextCharClass() {\n    return mapClass(classTrie.get(this.nextCodePoint()));\n  };\n  _proto.getSimpleBreak = function getSimpleBreak() {\n    // handle classes not handled by the pair table\n    switch (this.nextClass) {\n      case SP:\n        return false;\n      case BK:\n      case LF:\n      case NL:\n        this.curClass = BK;\n        return false;\n      case CR:\n        this.curClass = CR;\n        return false;\n    }\n    return null;\n  };\n  _proto.getPairTableBreak = function getPairTableBreak(lastClass) {\n    // if not handled already, use the pair table\n    var shouldBreak = false;\n    switch (pairTable[this.curClass][this.nextClass]) {\n      case DI_BRK:\n        // Direct break\n        shouldBreak = true;\n        break;\n      case IN_BRK:\n        // possible indirect break\n        shouldBreak = lastClass === SP;\n        break;\n      case CI_BRK:\n        shouldBreak = lastClass === SP;\n        if (!shouldBreak) {\n          shouldBreak = false;\n          return shouldBreak;\n        }\n        break;\n      case CP_BRK:\n        // prohibited for combining marks\n        if (lastClass !== SP) {\n          return shouldBreak;\n        }\n        break;\n      case PR_BRK:\n        break;\n    }\n    if (this.LB8a) {\n      shouldBreak = false;\n    }\n\n    // Rule LB21a\n    if (this.LB21a && (this.curClass === HY || this.curClass === BA)) {\n      shouldBreak = false;\n      this.LB21a = false;\n    } else {\n      this.LB21a = this.curClass === HL;\n    }\n\n    // Rule LB30a\n    if (this.curClass === RI) {\n      this.LB30a++;\n      if (this.LB30a == 2 && this.nextClass === RI) {\n        shouldBreak = true;\n        this.LB30a = 0;\n      }\n    } else {\n      this.LB30a = 0;\n    }\n    this.curClass = this.nextClass;\n    return shouldBreak;\n  };\n  _proto.nextBreak = function nextBreak() {\n    // get the first char if we're at the beginning of the string\n    if (this.curClass == null) {\n      var firstClass = this.nextCharClass();\n      this.curClass = mapFirst(firstClass);\n      this.nextClass = firstClass;\n      this.LB8a = firstClass === ZWJ;\n      this.LB30a = 0;\n    }\n    while (this.pos < this.string.length) {\n      this.lastPos = this.pos;\n      var lastClass = this.nextClass;\n      this.nextClass = this.nextCharClass();\n\n      // explicit newline\n      if (this.curClass === BK || this.curClass === CR && this.nextClass !== LF) {\n        this.curClass = mapFirst(mapClass(this.nextClass));\n        return new Break(this.lastPos, true);\n      }\n      var shouldBreak = this.getSimpleBreak();\n      if (shouldBreak === null) {\n        shouldBreak = this.getPairTableBreak(lastClass);\n      }\n\n      // Rule LB8a\n      this.LB8a = this.nextClass === ZWJ;\n      if (shouldBreak) {\n        return new Break(this.lastPos);\n      }\n    }\n    if (this.lastPos < this.string.length) {\n      this.lastPos = this.string.length;\n      return new Break(this.string.length);\n    }\n    return null;\n  };\n  return LineBreaker;\n}();\nmodule.exports = LineBreaker;","'use strict';\n\nvar possibleNames = require('possible-typed-array-names');\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\n\n/** @type {import('.')} */\nmodule.exports = function availableTypedArrays() {\n\tvar /** @type {ReturnType<typeof availableTypedArrays>} */ out = [];\n\tfor (var i = 0; i < possibleNames.length; i++) {\n\t\tif (typeof g[possibleNames[i]] === 'function') {\n\t\t\t// @ts-expect-error\n\t\t\tout[out.length] = possibleNames[i];\n\t\t}\n\t}\n\treturn out;\n};\n","{\"categories\":[\"Cc\",\"Zs\",\"Po\",\"Sc\",\"Ps\",\"Pe\",\"Sm\",\"Pd\",\"Nd\",\"Lu\",\"Sk\",\"Pc\",\"Ll\",\"So\",\"Lo\",\"Pi\",\"Cf\",\"No\",\"Pf\",\"Lt\",\"Lm\",\"Mn\",\"Me\",\"Mc\",\"Nl\",\"Zl\",\"Zp\",\"Cs\",\"Co\"],\"combiningClasses\":[\"Not_Reordered\",\"Above\",\"Above_Right\",\"Below\",\"Attached_Above_Right\",\"Attached_Below\",\"Overlay\",\"Iota_Subscript\",\"Double_Below\",\"Double_Above\",\"Below_Right\",\"Above_Left\",\"CCC10\",\"CCC11\",\"CCC12\",\"CCC13\",\"CCC14\",\"CCC15\",\"CCC16\",\"CCC17\",\"CCC18\",\"CCC19\",\"CCC20\",\"CCC21\",\"CCC22\",\"CCC23\",\"CCC24\",\"CCC25\",\"CCC30\",\"CCC31\",\"CCC32\",\"CCC27\",\"CCC28\",\"CCC29\",\"CCC33\",\"CCC34\",\"CCC35\",\"CCC36\",\"Nukta\",\"Virama\",\"CCC84\",\"CCC91\",\"CCC103\",\"CCC107\",\"CCC118\",\"CCC122\",\"CCC129\",\"CCC130\",\"CCC132\",\"Attached_Above\",\"Below_Left\",\"Left\",\"Kana_Voicing\",\"CCC26\",\"Right\"],\"scripts\":[\"Common\",\"Latin\",\"Bopomofo\",\"Inherited\",\"Greek\",\"Coptic\",\"Cyrillic\",\"Armenian\",\"Hebrew\",\"Arabic\",\"Syriac\",\"Thaana\",\"Nko\",\"Samaritan\",\"Mandaic\",\"Devanagari\",\"Bengali\",\"Gurmukhi\",\"Gujarati\",\"Oriya\",\"Tamil\",\"Telugu\",\"Kannada\",\"Malayalam\",\"Sinhala\",\"Thai\",\"Lao\",\"Tibetan\",\"Myanmar\",\"Georgian\",\"Hangul\",\"Ethiopic\",\"Cherokee\",\"Canadian_Aboriginal\",\"Ogham\",\"Runic\",\"Tagalog\",\"Hanunoo\",\"Buhid\",\"Tagbanwa\",\"Khmer\",\"Mongolian\",\"Limbu\",\"Tai_Le\",\"New_Tai_Lue\",\"Buginese\",\"Tai_Tham\",\"Balinese\",\"Sundanese\",\"Batak\",\"Lepcha\",\"Ol_Chiki\",\"Braille\",\"Glagolitic\",\"Tifinagh\",\"Han\",\"Hiragana\",\"Katakana\",\"Yi\",\"Lisu\",\"Vai\",\"Bamum\",\"Syloti_Nagri\",\"Phags_Pa\",\"Saurashtra\",\"Kayah_Li\",\"Rejang\",\"Javanese\",\"Cham\",\"Tai_Viet\",\"Meetei_Mayek\",\"null\",\"Linear_B\",\"Lycian\",\"Carian\",\"Old_Italic\",\"Gothic\",\"Old_Permic\",\"Ugaritic\",\"Old_Persian\",\"Deseret\",\"Shavian\",\"Osmanya\",\"Osage\",\"Elbasan\",\"Caucasian_Albanian\",\"Linear_A\",\"Cypriot\",\"Imperial_Aramaic\",\"Palmyrene\",\"Nabataean\",\"Hatran\",\"Phoenician\",\"Lydian\",\"Meroitic_Hieroglyphs\",\"Meroitic_Cursive\",\"Kharoshthi\",\"Old_South_Arabian\",\"Old_North_Arabian\",\"Manichaean\",\"Avestan\",\"Inscriptional_Parthian\",\"Inscriptional_Pahlavi\",\"Psalter_Pahlavi\",\"Old_Turkic\",\"Old_Hungarian\",\"Hanifi_Rohingya\",\"Old_Sogdian\",\"Sogdian\",\"Elymaic\",\"Brahmi\",\"Kaithi\",\"Sora_Sompeng\",\"Chakma\",\"Mahajani\",\"Sharada\",\"Khojki\",\"Multani\",\"Khudawadi\",\"Grantha\",\"Newa\",\"Tirhuta\",\"Siddham\",\"Modi\",\"Takri\",\"Ahom\",\"Dogra\",\"Warang_Citi\",\"Nandinagari\",\"Zanabazar_Square\",\"Soyombo\",\"Pau_Cin_Hau\",\"Bhaiksuki\",\"Marchen\",\"Masaram_Gondi\",\"Gunjala_Gondi\",\"Makasar\",\"Cuneiform\",\"Egyptian_Hieroglyphs\",\"Anatolian_Hieroglyphs\",\"Mro\",\"Bassa_Vah\",\"Pahawh_Hmong\",\"Medefaidrin\",\"Miao\",\"Tangut\",\"Nushu\",\"Duployan\",\"SignWriting\",\"Nyiakeng_Puachue_Hmong\",\"Wancho\",\"Mende_Kikakui\",\"Adlam\"],\"eaw\":[\"N\",\"Na\",\"A\",\"W\",\"H\",\"F\"]}","import base64 from 'base64-js';\nimport UnicodeTrie from 'unicode-trie';\nimport data from './data.json';\n\nconst trie = new UnicodeTrie(base64.toByteArray(require('fs').readFileSync(__dirname + '/data.trie', 'base64')));\n\nconst log2 = Math.log2 || (n => Math.log(n) / Math.LN2);\nconst bits = (n) => ((log2(n) + 1) | 0);\n\n// compute the number of bits stored for each field\nconst CATEGORY_BITS = bits(data.categories.length - 1);\nconst COMBINING_BITS = bits(data.combiningClasses.length - 1);\nconst SCRIPT_BITS = bits(data.scripts.length - 1);\nconst EAW_BITS = bits(data.eaw.length - 1);\nconst NUMBER_BITS = 10;\n\n// compute shift and mask values for each field\nconst CATEGORY_SHIFT = COMBINING_BITS + SCRIPT_BITS + EAW_BITS + NUMBER_BITS;\nconst COMBINING_SHIFT = SCRIPT_BITS + EAW_BITS + NUMBER_BITS;\nconst SCRIPT_SHIFT = EAW_BITS + NUMBER_BITS;\nconst EAW_SHIFT = NUMBER_BITS;\nconst CATEGORY_MASK = (1 << CATEGORY_BITS) - 1;\nconst COMBINING_MASK = (1 << COMBINING_BITS) - 1;\nconst SCRIPT_MASK = (1 << SCRIPT_BITS) - 1;\nconst EAW_MASK = (1 << EAW_BITS) - 1;\nconst NUMBER_MASK = (1 << NUMBER_BITS) - 1;\n\nexport function getCategory(codePoint) {\n  const val = trie.get(codePoint);\n  return data.categories[(val >> CATEGORY_SHIFT) & CATEGORY_MASK];\n}\n\nexport function getCombiningClass(codePoint) {\n  const val = trie.get(codePoint);\n  return data.combiningClasses[(val >> COMBINING_SHIFT) & COMBINING_MASK];\n}\n\nexport function getScript(codePoint) {\n  const val = trie.get(codePoint);\n  return data.scripts[(val >> SCRIPT_SHIFT) & SCRIPT_MASK];\n}\n\nexport function getEastAsianWidth(codePoint) {\n  const val = trie.get(codePoint);\n  return data.eaw[(val >> EAW_SHIFT) & EAW_MASK];\n}\n\nexport function getNumericValue(codePoint) {\n  let val = trie.get(codePoint);\n  let num = val & NUMBER_MASK;\n\n  if (num === 0) {\n    return null;\n  } else if (num <= 50) {\n    return num - 1;\n  } else if (num < 0x1e0) {\n    const numerator = (num >> 4) - 12;\n    const denominator = (num & 0xf) + 1;\n    return numerator / denominator;\n  } else if (num < 0x300) {\n    val = (num >> 5) - 14;\n    let exp = (num & 0x1f) + 2;\n\n    while (exp > 0) {\n      val *= 10;\n      exp--;\n    }\n    return val;\n  } else {\n    val = (num >> 2) - 0xbf;\n    let exp = (num & 3) + 1;\n    while (exp > 0) {\n      val *= 60;\n      exp--;\n    }\n    return val;\n  }\n}\n\nexport function isAlphabetic(codePoint) {\n  const category = getCategory(codePoint);\n  return (\n    category === 'Lu' ||\n    category === 'Ll' ||\n    category === 'Lt' ||\n    category === 'Lm' ||\n    category === 'Lo' ||\n    category === 'Nl'\n  )\n}\n\nexport function isDigit(codePoint) {\n  return getCategory(codePoint) === 'Nd'\n}\n\nexport function isPunctuation(codePoint) {\n  const category = getCategory(codePoint);\n  return (\n    category === 'Pc' ||\n    category === 'Pd' ||\n    category === 'Pe' ||\n    category === 'Pf' ||\n    category === 'Pi' ||\n    category === 'Po' ||\n    category === 'Ps'\n  );\n}\n\nexport function isLowerCase(codePoint) {\n  return getCategory(codePoint) === 'Ll';\n}\n\nexport function isUpperCase(codePoint) {\n  return getCategory(codePoint) === 'Lu'\n}\n\nexport function isTitleCase(codePoint) {\n  return getCategory(codePoint) === 'Lt'\n}\n\nexport function isWhiteSpace(codePoint) {\n  const category = getCategory(codePoint);\n  return (\n    category === 'Zs' ||\n    category === 'Zl' ||\n    category === 'Zp'\n  );\n}\n\nexport function isBaseForm(codePoint) {\n  const category = getCategory(codePoint);\n  return (\n    category === 'Nd' ||\n    category === 'No' ||\n    category === 'Nl' ||\n    category === 'Lu' ||\n    category === 'Ll' ||\n    category === 'Lt' ||\n    category === 'Lm' ||\n    category === 'Lo' ||\n    category === 'Me' ||\n    category === 'Mc'\n  )\n}\n\nexport function isMark(codePoint) {\n  const category = getCategory(codePoint);\n  return (\n    category === 'Mn' ||\n    category === 'Me' ||\n    category === 'Mc'\n  );\n}\n\n// Backwards compatibility.\nexport default {\n  getCategory,\n  getCombiningClass,\n  getScript,\n  getEastAsianWidth,\n  getNumericValue,\n  isAlphabetic,\n  isDigit,\n  isPunctuation,\n  isLowerCase,\n  isUpperCase,\n  isTitleCase,\n  isWhiteSpace,\n  isBaseForm,\n  isMark\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(36164);\n","this.pdfMake = this.pdfMake || {}; this.pdfMake.vfs = {\r\n  \"Roboto-Italic.ttf\": \"AAEAAAARAQAABAAQR0RFRqbzo4gAAddgAAACWEdQT1N/jKrdAAHZuAAAWMBHU1VCm18k/AACMngAABX2T1MvMpeDsUwAAAGYAAAAYGNtYXDTfF9iAAAWnAAABoJjdnQgO/gmfQAAL3gAAAD+ZnBnbagFhDIAAB0gAAAPhmdhc3AACAAZAAHXVAAAAAxnbHlmNN3JWAAAOswAAZmmaGVhZAh9pEIAAAEcAAAANmhoZWEMnBKkAAABVAAAACRobXR4VUzdowAAAfgAABSkbG9jYV8SwLgAADB4AAAKVG1heHAI2RDGAAABeAAAACBuYW1lOSJt5gAB1HQAAALAcG9zdP9hAGQAAdc0AAAAIHByZXB5WM7TAAAsqAAAAs4AAQAAAAMCDJn8J2NfDzz1ABsIAAAAAADE8BEuAAAAAODgRcL6N/3VCUMIcwACAAkAAgAAAAAAAAABAAAHbP4MAAAJA/o3/mwJQwgAAbMAAAAAAAAAAAAAAAAFKQABAAAFKQCpABUAdgAHAAIAEAAvAJoAAALmD3UAAwABAAQEiQGQAAUAAAWaBTMAAAEfBZoFMwAAA9EAZgIAAAACAAAAAAAAAAAA4AAC/1AAIFsAAAAgAAAAAEdPT0cAAQAA//0GAP4AAGYHmgIAIAABnwAAAAAEOgWwAAAAIAADA5YAZAAAAAAAAAAAAfcAAAH3AAACAABEAnwAyQTHAFIEXABJBa8AugTUADkBWwCsAqgAbQK0/5ADWABrBGcATAGH/48CJQAaAgwANAM0/5AEXABqBFwA+gRcABgEXAA1BFwABQRcAHIEXABtBFwAnQRcAEAEXACUAesAKQGu/5sD8gBCBEIAcAQPADsDqwClBvgAQQUQ/68E1gA7BQ0AcAUYADsEaQA7BEoAOwVJAHQFiQA7AhwASQRIAAcE3gA7BC4AOwbGADsFiQA7BVcAcwTlADsFVwBrBMgAOwScACkEoQCpBQgAYwTxAKUG4gDDBN3/1ASpAKgEpv/sAg8AAAMwAMACD/97Az4ATwOA/4ECZgDQBDkAMQRcAB8EEABGBGAARwQdAEUCswB1BFwAAwRGACAB4wAvAdv/EwPvACAB4wAvBs4AHgRJACAEbQBGBFz/1wRpAEYCoQAgBAEALgKKAEMERwBbA8IAbgXVAIAD2v/FA6z/qgPa/+4CoAA3AeUAIgKg/40FRwBpAeX/8QQ/AFAEg//zBYkAEgQUAEMB3f/4BML/2gM/ANoGGQBeA3kAwwOuAFYETACBBhoAXQOPAPgC5gDoBCYAJgLiAF0C4gBvAm8A1QRm/+YDzAB4AgcApQHt/8gC4gDgA4gAvwOtABEFuQC6Bg8AtQYTAJ4Drf/RB0H/gwQkACgFVwAgBJYAOQSdAB8GjgATBI0AXARvAEQEZgA6BHn/4ASjAEYFcAA2AewALwRSAC4ELgAjAhkAJAVgADUEZgAlB2YAVQcMAEcB7QA0BV0AUgKl/0cFVQBmBHAAQwVlAGMEzQBbAfX/CQQYAD8DpwEYA3MBKAOZAPgDUQEHAeMBDgKZAQECGv+uA6kA3gLlAMMCSP/pAAD9agAA/eoAAP0LAAD99AAA/NsAAPy6Af4BIwPtAPQCEQClBFEARAV5/7IFSABnBRf/xARvAAwFiQBEBG//2wWPAFYFXgCFBSkACgRjAEgEmf/xA+QAhQRmAEUEMAApBAUAigRmACUEawB1AoQAhARN/7gDzgBABKAAYARm/90ELQBKBGUASAQMAIcEPABoBXgAQAVvAE4GZABnBH4AUgQiAGcGGABoBdIAogU8AHMIUP/NCGMARAZRALQFiABCBO4ANgXW/4wHC/+rBJwAJQWJAEQFf//LBOEAlAX+AFsFrQBBBVAAywdNAEIHhABCBeMAigbAAEQE3gA2BTwAdgb6AEkE8f/pBEsARwRwADEDQgAuBK//jQXy/6cD8QAgBHsAMAQyADAEfP/IBcEAMQR6ADAEewAwA7sAYAWhAEkEmgAwBDkAeQZHADAGbAAlBNEAVgYQADEENwAxBC0AMgZWADEEQv+/BEYAIAQtAE4Glf/DBq8AMARwACAEewAwBtMAbgX9AE8ENgAvBvUASgXLAC0Erv+6BCb/ogbWAFsF3gBPBp4AJgW1ACoIwABJB5UALwQE/80Dvf/JBUgAZwRpAEME5ACtA+UAhQVIAGcEZgBDBssAdAX1AFIG0wBuBf0ATwUKAGkEJwBMBNgAQAAA/OcAAP0KAAD+FgAA/jsAAPo3AAD6TgXlAEQE0QAwBDYALwT0ADsEZ//XBEIANQN2ACUEwABEA+cAJQdx/6sGOv+nBXkARASeADAE4wA2BFwALgZaALwFWgB2BdsAOwS+ADAHkwA7BYgAJQf8AEIGvwAlBcEAawSvAFwE+//UBBT/xQb2AKwFNABXBZoAywR9AHkFRgDKBEkAlAVGABwGAACIBJoABATjADYEOQAuBdr/ywTT/8gFhwBEBGYAJQXtADsE0AAwByEAOwYYADEFXQBSBIQAPASE//0Env/5A5n/6QUQ/9QEKf/FBNEALgZiADEGsABIBiYArQUEAGgEKQCwA+kAoAeG/+AGRP/aB74APAZvACME0QBlA/4ATQWCAJsE+gB9BTwAaAXe/8sE1//IAwkA8wP/AAAH9AAAA/8AAAf0AAACrgAAAgQAAAFcAAAEZgAAAikAAAGfAAABAgAAANUAAAAAAAACLQAaAi0AGgUiAKYGGQCYA4r/XgGOALABjgCJAYz/lwGOANICyAC4AtAAlQKt/5QESAB3BG3/9gKeAKEDsQA4BTsAOAF0AFIHbwCWAlUAXQJVAAQDh//wAuIAjwLiAGQC4gCKAuIAkALiAKIC4gB7AuIAqgMfAIgC4QCJAuEAcwHiAI8B4gA+A0cAfgLi/9wC4gAtAuL/qwLi/7wC4v+yAuL/2ALi/94C4v/wAuL/yQLi//gDKf/cAuv/3QLr/8cB4v/oAeL/nQSD//MGJQAKBl8AOQg/ADsFvgAJBfwAHwRcAFEFrQBDBAMASgRSAAsFH//yBSb/5QW7AMwDsQBLB/sANQTbAOsE8QB/BgEAtgasAJIGpQCQBkMAvgRtAE0FZAAkBIv/rQRwAKsEoABBB/sASwH9/xUEXwAzBEIAcAP8/9MEGQAYA+kAQgJEAHcCfABxAfX/5ATXAHUETQBZBGgAdQagAHUGoAB1BMgAdQZoACgAAAAAB/X/qwg1AFwC2P/qAtgAbALYABwD8QBpA/EAJwPxAHAD8ABLA/EASgPx//cD8QAXA/H//QPxAL0D8QBGBAP/3QQLAHUEM/+3BeYAlARGAHkEWwBCBAcAbgQAABIEKQAdBJgARgQ7AB4EmABMBL0AHgXUAB4DmQAeBDQAHgOy//YB2gArBL4AHgSIAEwDrwAeBAAAEgQUAAYDhQAZA5MAHgRG/7AEmABMBEb/sANu/9MEqgAeA9L/1gU+AFIE8AB9BM0ADgVJAG0EWgBIBwr/wwcYAB4FSgBuBKkAHgQ5ACAE/f+JBd3/rwQfABIExgAgBC0AHwSc/8QEAABaBQEAHgRIAFYGIAAeBnkAHgT2AFEFzQAgBC4AIARaACAGRQAeBGT/4APz//oGGP+vBFcAHwTjAB8FDwBqBZcAUARHAHUEhP+3BjEAbQRIAFUESAAeBZgALgSmAEAEHwASBJwARgQUAAADxgAfB+QAHgSH/94C2P/7Atj/8QLYABcC2AAdAtgALwLYAAgC2AA3A3sAkwKgAQsDyAAeBBr/mQSfAEgFIwBEBP0ARAP1ACYFFQBEA/AAJgRdAB4EWgBIBDAAHgRj/6YB7wD8A4kBEgAA/SoD0gDTA9YAIgPwAM4D1wDNA5MAHgOEARIDgwETAuIAjwLiAGQC4gCKAuIAkALiAKIC4gB7AuIAqgVYAIAFgwCBBWgARAWzAIMFtgCDA7gAvARfADkEN/+BBKr/0wRJ/9UEDgArA4kBFAGG/74GcQBMBJYAPgHt/w8EZv+sBGb/4wRm/7gEZgAsBGYAVgRmACQEZgBmBGYAGwRmAEAEZgENAgD/CQH//wkB9gAvAfb/eAH2AC8EMAAeBNoAZAQBAGIEXAAfBBMARARwAEMEaQAjBHwAQgRr/9cEeQBCBB0ARgRcADUETv+/A2gAqQSxACwDmf/pBgr/mgPaAB4EmP/0BL0AHgS9AB4B9wAAAiUAGgU2AC8FNgAvBGQAPgShAKkCiv/0BRD/rwUQ/68FEP+vBRD/rwUQ/68FEP+vBRD/rwUNAHAEaQA7BGkAOwRpADsEaQA7AhwASQIcAEkCHABJAhwASQWJADsFVwBzBVcAcwVXAHMFVwBzBVcAcwUIAGMFCABjBQgAYwUIAGMEqQCoBDkAMQQ5ADEEOQAxBDkAMQQ5ADEEOQAxBDkAMQQQAEYEHQBFBB0ARQQdAEUEHQBFAewALwHsAC8B7AAvAewALwRJACAEbQBGBG0ARgRtAEYEbQBGBG0ARgRHAFsERwBbBEcAWwRHAFsDrP+qA6z/qgUQ/68EOQAxBRD/rwQ5ADEFEP+vBDkAMQUNAHAEEABGBQ0AcAQQAEYFDQBwBBAARgUNAHAEEABGBRgAOwT2AEcEaQA7BB0ARQRpADsEHQBFBGkAOwQdAEUEaQA7BB0ARQRpADsEHQBFBUkAdARcAAMFSQB0BFwAAwVJAHQEXAADBUkAdARcAAMFiQA7BEYAIAIcAEkB7AARAhwASQHsAC4CHABJAewALwIc/4sB4/9tAhwASQZkAEkDvgAvBEgABwH1/wkE3gA7A+8AIAQuADsB4wAvBC4AOwHj/6IELgA7AnkALwQuADsCvwAvBYkAOwRJACAFiQA7BEkAIAWJADsESQAgBEkAIAVXAHMEbQBGBVcAcwRtAEYFVwBzBG0ARgTIADsCoQAgBMgAOwKh/58EyAA7AqEAIAScACkEAQAuBJwAKQQBAC4EnAApBAEALgScACkEAQAuBJwAKQQBAC4EoQCpAooAQwShAKkCigBDBKEAqQKyAEMFCABjBEcAWwUIAGMERwBbBQgAYwRHAFsFCABjBEcAWwUIAGMERwBbBQgAYwRHAFsG4gDDBdUAgASpAKgDrP+qBKkAqASm/+wD2v/uBKb/7APa/+4Epv/sA9r/7gdB/4MGjgATBVcAIARmADoEXf+vBF3/rwQHAG4EY/+mBGP/pgRj/6YEY/+mBGP/pgRj/6YEY/+mBFoASAPIAB4DyAAeA8gAHgPIAB4B2gArAdoAKwHaACsB2gArBL0AHgSYAEwEmABMBJgATASYAEwEmABMBFsAQgRbAEIEWwBCBFsAQgQLAHUEY/+mBGP/pgRj/6YEWgBIBFoASARaAEgEWgBIBF0AHgPIAB4DyAAeA8gAHgPIAB4DyAAeBIgATASIAEwEiABMBIgATAS+AB4B2gAOAdoAKwHaACsB5P+CAdoAKwOy//YENAAeA5kAHgOZAB4DmQAeA5kAHgS9AB4EvQAeBL0AHgSYAEwEmABMBJgATAQpAB0EKQAdBCkAHQQAABIEAAASBAAAEgQAABIEBwBuBAcAbgQHAG4EWwBCBFsAQgRbAEIEWwBCBFsAQgRbAEIF5gCUBAsAdQQLAHUEA//dBAP/3QQD/90FEP+vBM0AAwXtABECgAAXBWsAawUN/+0FPQAeAoQAIAUQ/68E1gA7BGkAOwSm/+wFiQA7AhwASQTeADsGxgA7BYkAOwVXAHME5QA7BKEAqQSpAKgE3f/UAhwASQSpAKgEYwBIBDAAKQRmACUChACEBDwAaARSAC4EbQBGBGb/5gPCAG4ETv+/AoQAZQQ8AGgEbQBGBDwAaAZkAGcEaQA7BFEARAScACkCHABJAhwASQRIAAcE/QBEBN4AOwThAJQFEP+vBNYAOwRRAEQEaQA7BYkARAbGADsFiQA7BVcAcwWJAEQE5QA7BQ0AcAShAKkE3f/UBDkAMQQdAEUEewAwBG0ARgRc/9cEEABGA6z/qgPa/8UEHQBFA0IALgQBAC4B4wAvAewALwHb/xMEMgAwA6z/qgbiAMMF1QCABuIAwwXVAIAG4gDDBdUAgASpAKgDrP+qAVsArAJ8AMkEAABEAfX/CQGOAIkGxgA7Bs4AHgUQ/68EOQAxBGkAOwWJAEQEHQBFBHsAMAVeAIUFbwBOBOQArQPlAIUIGQBGCQMAcwScACUD8QAgBQ0AcAQQAEYEqQCoA+QAhQIcAEkHC/+rBfL/pwIcAEkFEP+vBDkAMQUQ/68EOQAxB0H/gwaOABMEaQA7BB0ARQVdAFIEGAA/BBgAPwcL/6sF8v+nBJwAJQPxACAFiQBEBHsAMAWJAEQEewAwBVcAcwRtAEYFSABnBGkAQwVIAGcEaQBDBTwAdgQtADIE4QCUA6z/qgThAJQDrP+qBOEAlAOs/6oFUADLBDkAeQbAAEQGEAAxBGAARwUQ/68EOQAxBRD/rwQ5ADEFEP+vBDkAMQUQ/68EOQAxBRD/rwQ5ADEFEP+vBDkAMQUQ/68EOQAxBRD/rwQ5ADEFEP+vBDkAMQUQ/68EOQAxBRD/rwQ5ADEFEP+vBDkAMQRpADsEHQBFBGkAOwQdAEUEaQA7BB0ARQRpADsEHQBFBGkAOwQdAEUEaQA7BB0ARQRpADsEHQBFBGkAOwQdAEUCHABJAewALwIcAA0B4//wBVcAcwRtAEYFVwBzBG0ARgVXAHMEbQBGBVcAcwRtAEYFVwBzBG0ARgVXAHMEbQBGBVcAcwRtAEYFVQBmBHAAQwVVAGYEcABDBVUAZgRwAEMFVQBmBHAAQwVVAGYEcABDBQgAYwRHAFsFCABjBEcAWwVlAGMEzQBbBWUAYwTNAFsFZQBjBM0AWwVlAGMEzQBbBWUAYwTNAFsEqQCoA6z/qgSpAKgDrP+qBKkAqAOs/6oEfgAABKEAqQO7AGAFUADLBDkAeQRRAEQDQgAuBgAAiASaAAQERgAgBN4ALATeACwEUQARA0L/5wURAFgECQA6BKkAqAPkAF4E3f/UA9r/xQQwACkESv/XBhkAmARcABgEXAA1BFwABQRcAHIEcACBBIQAVARwAJQEhAB+BUkAdARcAAMFiQA7BEkAIAUQ/68EOQAxBGkAOwQdAEUCHP/gAez/jQVXAHMEbQBGBMgAOwKhACAFCABjBEcAWwSG/7EE1gA7BFwAHwUYADsEYABHBRgAOwRgAEcFiQA7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AGUAcwAvAEwASQBDAEUATgBTAEUALQAyAC4AMAADAAD/9AAA/2oAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAgAIAAj//wAPAAEAAgAOAAAAAAAAAigAAgBZACUAPgABAEQAXgABAGoAagABAHAAcAABAHUAdQABAIEAgQABAIMAgwABAIYAhgABAIkAiQABAIsAlgABAJgAnwABAKEAowABAKUApgABAKgArQADALEAsQABALoAuwABAL8AvwABAMEAwQABAMMAxAABAMcAxwABAMsAywABAM0AzgABANAA0QABANMA0wABANoA3gABAOEA4QABAOUA5QABAOcA6QABAOsA+wABAP0A/QABAP8BAQABAQMBAwABAQgBCQABARYBGgABARwBHAABASABIgABASQBJwADASoBKwABATMBNAABATYBNgABATsBPAABAUEBRAABAUcBSAABAUsBTQABAVEBUQABAVQBWAABAV0BXgABAWIBYgABAWQBZAABAWgBaAABAWoBbAABAW4BbgABAXABcAABAdUB2wACAewCAAABAgQCBAABAg0CDQABAg8CDwABAhYCGAABAhoCGwABAh0CHQABAiECIQABAiMCJQABAisCKwABAjACMgABAjQCNAABAkICQgABAkUCRQABAkcCRwABAkoCTQABAnkCfQABAo0CkgABApUC/QABAwADvwABA8EDwQABA8MDzQABA88D2AABA9oD9QABA/kD+QABA/sEAgABBAQEBgABBAkEDQABBA8EmgABBJ0EngABBKAEoQABBKMEpgABBLAFDAABBQ4FGAABBRsFKAABAAEAAwAAABAAAAAWAAAAIAABAAEArQACAAEAqACsAAAAAgACAKgArAAAASQBJwAFAAEAAAAWADAACgAFAEYATgBYAGIAbAAEREZMVABqY3lybABuZ3JlawBybGF0bgB2AAVjcHNwAGBrZXJuAGxrZXJuAGZrZXJuAHRrZXJuAHwAAQAAAAEAZAACAAgAAgEyCAgAAgAIAAIAzAQuAAIACAACAjIP/AACAAgAAgBIAIAATgAAAFQAAABaAAAAYAAAAAAAAQAAAAAAAQAEAAAAAgAEAAMAAAACAAQAAQAAAAIABAACAAErTAAFACQASAABGRIABAAAAAMZBhkcGQwAAP//AAIAAAACAAD//wACAAAAAwAA//8AAgAAAAQAAP//AAIAAAABAAIZDgAEAAAZVBt4AAQABQAA/5UAAAAA/4gAAP9WAAAAAAAAAAAAAAAAAAAAAAAA/4gAAAAAAAAAARv2AAQAAAApGXwZihlKGtgZ2BmmGgQZtBnuGlYafBj+GcYZBByiGRYdBBukGqoZChkQHWoZVBoaGgQZphxMGgQZXhloGaYZmBsKHEwaNBxMGRYZchnGGXIZpgABLrQABAAAAIUeQh4IHYwdkh3QHwYgAjbCMNQ08ih8Hn4x6izCH9AlEB5+Hn4hHB5+Hn4efimMJBQefh+mJJIjJB5cJ9IiZB28JzQdmB98I5ovwh4sIN4lkiG4HyweLCIOH1IhZiA4HywgpB7CHewdsh98HiwmHB28H9AdmCBuIG4gbh5+H9AdmB5+Hn4d+h28H9AdmCLCJhwefh5+IG4gbiEcIKQdniYcHn4efh36Hd4eGiamH9AeoB2oHsIeLB2yHZgdqB28HbIdqB3sHbIeGh7kHbIefh/QHZgefiCkHqAgpB6gHagdqB2oH9AdmB36HsIewh4sIRwdsiEcHbIhHB2yJqYmHB28HcYfpiYcIG4e5AABOcYABAAAAPQswChIKEgy9CzWK2goTit2PCArhCzsKE4objUkMi4tMiyuLQIoWjHwK6AycBemN8IXpjccF6YXphemK5IzOihULRgoVDKyKE4ziCycKEg4nChIKEgoSChCLVQteig8KGQoNitaKDYraChOKE4oTihOLTIs1izWLNYs1izWLNYs1itoK3Yrdit2K3YoTihOKE4oTihOMfAXphemF6YXphemF6YXphemF6YXpihUKFQs1izWLNYraCtoK2graChOK3YXpit2F6YrdhemK3YXpit2F6YXpiuELOws7CzsLOwXphemF6YXpihOF6YoThemKE4XpiuSK5Irki0yLTItMi0CMfAoVDHwK6AroCugKDwoPChCKDYoNig2KDYoNig2KDYoPCg8KDwoPCg8KDYoNig2KDwoZChkKGQoZCg8KDwoPChCLQItAi0CMfAoVChIKEgoSBemLNYs1izWLNYs1izWLNYs1izWLNYs1izWLNYrdhemK3YXpit2F6YrdhemK3YXpit2F6YrdhemK3YXpihOF6YoThemKE4XpihOF6YoThemKE4XpihOF6YXpjHwKFQx8ChUMfAoVBemLNYrdihOF6YrkihOKE4XpiuEK4Qs7BemF6YoTihuK5ItMiyuKFQsrihULQIroAACOcAABAAAPMw9wAAYABQAAAAAAAAAAP/FAAD/iAAAAAAAAAAA/+wAAAAA/8MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAP/kAAAAAAAAAAAAAAAAABEAAAAAAAAAEgAAAAD/mgAAAAAAAP/rAAD/1f/tAAAAAAAAAAAAAP/q/+n/7f/1/+sAAP+IAAAAAAAA//UAAP/1/6IAAP/EAAD/zv/1//QAAAAAAAAAAAAAAAAAAP8t/8z/v//Z/6L/4wAS/6sAAP/Y/+z/y/+/AA0AAP+r/+//ogAAAAAAAAAAAAAAAAAAAAAAAAAA/78AAAAA//IAAAAAAAAAAAAAAAAAAAAAAAAAAP/t/+8AAAAAAAAAAP/wAAD/5gAA/+0AAAAAAAAAAAAAAAD/mAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//lQAA//MAAAAAAAAAAAAAAAAAAAAAAAD/8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/qAAAAAAAAAAAAAAAAAAD/7AAAAAD/eAAAAAAAAAAAAAAAAAAAAAAAAAAA//EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/yQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/0v/m/+sAAP/nAAAAAAAAAAD/4f/n/+sAAAAAAAAAAAAAAAAAAP56/mL/RP9L/z7/vQAHAAAAAP8z/3IAAP9EAAAAAAAAAAD/PgAAAAAAAP/A/+b/6QAA/+EAAAAAAAD/6f/Y/+f/5QAAAAAAAAAAAAAAAAAA/rwAAP/zAAD/dgAAAAD/xgAAAAAADwAA//P/4f/m/8YAAP92AAAAAP8m/xj/nf+h/7H/5AAQ/68AAP+T/7j/uf+dAAAAAP+v/+3/sQAAAAAAAAAA/+v/7QAN/+YAAAANAAAAAP/l/+z/6wAAAAAADQAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAP+/AAAAAP/yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/6wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAP/jAAAAAAAAAAAAAAAAAAAAAAAAAAD/9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/9QAA//X/ogAA/8QAAP/O//X/9AAAAAAAAAAAAAAAAjsgAAQAADwwQNYAIgAeAAAAAAAAAAAAAAAAABEAAAAAAAD/4wAAAAAAEQAAAAAAEv/kABEAAP/lAAAAAAAA/+QAAAAAABIAAAAAAAD/7P/FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/iAAAAAD/wwAA/84AAAAAAAAAAAAAAAAAAP+wAAAAAP/zAAAADwAAAAAAAP+VAAAAAAAAAAAAAAAAAAAAAAAA/9f/8QAA//EAAAAAAAAAAAAAAAAAAAAAAAAAAP/m/+cAAP/hAAAAAAAA/+cAAP/SAAAAEQAAAAAAAAAAABH/6//RAAAAAAAOAAAAAAAAAAAAAAAAAAAAAP/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/6f/m/+EAAP/YAAAAAAAA/+cAAP/AAAAAAAAAAAAAAAAAAAD/5f+jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/8v/zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/M/9E/70AAP9yAAD/av56AAAAB/5iAAD/kgAAAAD/PgAA/w//RP8M/ywAAAAHAAcAAAAA/z4AAP8nAAAAAAAAAAD/wAAA//D/yQAAAAD+9QAAAAD/9f/rAAAAAP/nAAAAAAAAAAAAAP/I/60AAAAAAAAAAAAAAAD/mv+9/+kAAAAAAAAAAP5tAAAAEv+JAAD/ygAAAAD/pQAA/7v/vf/p/5EAAAAAABIAAAAA/6UAAP/SAAAAAP/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9j/7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4//1AAD/8QAAAAAAAAAAAAAAAAAAAAAAAAAA//IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ef/dAAD/9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/ZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/tAAAAAP/mAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAD/7QAAAAD/8AAAAAAAAAAAAAAAAAAAAAAAAAAA//X/iP/OAAAAAAAA//X/fwAA/8cAEQAAAAAAAP/JABL/9P+PAAD/xP+p/6IAAAAAAAAAAAAAAAAAAAAAAAD/eP/xAAD/6wAAAAAAAAAAAAAAAAAAAAAAAAAA//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+oAAP+aAAD/5QAAAAD/4QAA//X/6wAAAAAAAAAAAAAAAP/q/9X/7f/t/+sAAAAAAAAAAAAAAAD/vf/xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/k/+d/+QAAP+4AAD/s/8m/7kAEP8Y//H/ywAA/+3/sQAA/37/nf98/48AAAAQABD/r/+v/7H/EP+MAAAAAAAAAAD/9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/U//MAAP/1AAAAAP8f/9kAAP/bAAAAAAAAAAD/tQAAAAD/0gAA/9IAAAAAAAD/tP+0/7UAAAAAAAD/2P+//+MAAP/sAA3/6f8t/8sAEf/M//MAAAAA/+//ogAAAAD/vwAA/7cAAAASABL/q/+r/6L/oP/GAAAAAAAAAAAAAAAAAAAAAAAA//IAAAAA/8AAAAAAAAAAAAAAAAAAAAAAAAD/vwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//IAAAAA/8AAAAAAAAAAAAAAAAAAAAAAAAD/vwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+4AAAAA/+wAAAAAAAAAAAAAAAD/6gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//UAAP/OAAAAAAAA//X/fwAA/8cAEQAAAAAAAP/JABL/9P+PAAD/xP+p/6IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/6gAAAAAAAAAAAAAAAAAAAAD/6//r/+oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/5QAAAAAAAP/zAAAAAAAAAAAAAAAAAAAAAP/o/8kAAAAAAAAAAAAAAAAAAP/zAAAAAAAP/+EAAP68AAAAAAAAAAD/yQAAAAD/dgAA/9n/8wAA//UAAAAAAAD/xv/G/3b/OAAAAAAAAAAAAAD/mAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI2rgAEAAA8kkIeACMAIgAAAAAAAP/rAAAAAAAAAAAAAAAAAAD/7QAAAAD/1QAAAAAAAP+a/+X/6QAAAAAAAAAA/+oAAAAAAAD/6v/1/+3/6wAAAAAAAAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAP/kAAAAAAAAAAD/4wAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAASAAAAAP/1AAAAAAAA//X/9f/0/+8AAP/xAAD/zv+I/6IAAAAA/7sAAP9/AAAAAAAAAAz/xP+pAAD/3f/HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/x/70AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/tAAAAAAAA/+//7QAAAAAAAAAA/+YAAAAAAAAAAAAAAAAAFAAAAAAAAAAA//AAAAAA/+0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/8//yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/x/3gAAAAAAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAAAAAAAAAAP/rAAAAAAAA/+oAAAAAAAAAAAAAAAAAAP/rAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/6//qAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/qAAAAAAAA/+4AAP/sAAAAAAAAAAAAAAAAAAAAAP/yAAAAAAAAAAD/7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/78AAAAA/9j/wAAAAAAAAAAAAAAAAAAA//MAAP/xAAAAAP/xAAAAAAAAAAAAAAAPAAAAAAAAAAD/lQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/xf+I/84AAAAA/8MAAP/sAAAAAAAAAAAAAP+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4/+//6L/t//L/9n/v/+g/9gAAP+r/+wAAAAS/8b/8AAR/y0AEQAA/8wAAP/iAAAAEv+g//P/8wAN/+//q/+i/+kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/78AAAATAAD/8v/UAAD/ygAA/9oAE/97AAD/EQAAAAD/cQAA/u0AAAAAAAAAAP8//1EAAP+R/zsAAAAAABMAEwAAAAD/5P+d/7H/j/+5/6H/nQAA/5MAAP+v/7gAAAAQ/4z/8AAP/yYAEAAA/xj/vP/EAAAAEP8Q//H/8QAA/+3/r/+x/7MAAAAA/+H/1f/f/+f/7f/hAAAAAAAA/8sAAAAAAAAAAAAAAAD/hQAOAAD/xAAAAAAAAAAAAAAAAAAAAAAAAP/L/9UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/tAAD/2AAAAAD/7AAAAAAAAAAAABIAEAAAAAAAAAAA/4UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/m/+sADQAA/+z/7f/rAAAAAAAAAA3/5QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/1/+MAAAAAAAAAAAAAAAAAAAAAAAD/8QAAAAAAAAAAAAAAAAAAAAAAAP/xAAAAAAAAAAAAAP/vAAAAAAAAAAD/7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/7QAAAAA/9X/uwAAAAAAAAAAAAAAAAAA//AAAAAAAAAAAP/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+H/5gAAAAD/5//p/+UAAP/pAAAAAP/YAAAAAAAAAAAAAAAAAAAAAP/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/8//U/7X/0v/Z/+T/0gAAAAAAAP+0//UAAAAAAAAAAAAA/x8AAAAA/9sAAAAAAAAAAAAAAAAAAAAAAAD/tP+1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/yQAAAAAAAAAA/+UAAAAAAAAAAAAA/+gAAAAAAAAAAAAAAAAAAAAAAAAAAP/z/3b/9QAAAAD/8wAAAAAAAP/GAA8AAAAAAAAAAAAA/rwAAP/mAAAAAAAAAAAAAP84AAAAAP/hAAD/xv92AAAAAAAAAAAAAAAA/+sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+f/5gAAAAD/5//r/+sAAAAAAAAAAP/hAAAAAAAAAAAAAAAAAAAAAP/SAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/yAAAAAAAAAAD/7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/78AAAAA/9j/wAAAAAAAAAAAAAAAAAAAAAD/6wAAAAAAAAAAAAAAAAAA/+0AAAAA/9UAAAAAAAD/mv/l/+kAAAAAAAAAAP/qAAAAAAAA/+r/9f/t/+sAAAAA//UAAAAAAAD/9f/1//T/7wAA//EAAP/OAAD/ogAAAAD/uwAA/38AAAAAAAAADP/E/6kAAP/d/8cAAAAAAAAAAAAAAAAAAP/sAAAAAAAAAAD/7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAT/yAAAQAj/8MAAQADABMAnQCyAAoABgAAAAsAAAGEAAABhQAAAYcAAAGIAAABiQAAA/YAAAP3AAAD+gAAAAEAEgAGAAsAEAASAJYAsgGEAYUBhgGHAYgBiQGKAY4BjwP2A/cD+gABAMQADgABAMr/7QABAMr/6gABAMoACwABAYX/sAACAAcAEAAQAAEAEgASAAEAlgCWAAIAsgCyAAMBhgGGAAEBigGKAAEBjgGPAAEAAgC9AAADwQAAAAIAvf/0A8H/9AACALj/ywDN/+QAAgC4/8UAyv+0AAIAyv/qAYX/sAADA6YAFgO1ABYDuAAWAAMAtQAAALcAAADEAAAAAwC+//UAxP/eAMf/5QADALX/8wC3//AAxP/qAAQAs//zAMQADQOl//MDsv/zAAQAvv/1AMYACwDH/+oAygAMAAUAIwAAALj/5QC5/9EAxAARAMr/yAAFALP/5gC4/8IAxAAQA6X/5gOy/+YABQAj/8MAuP/lALn/0QDEABEAyv/IAAYAu//FAMj/xQDJ/8UDuf/FA7//gAPF/4AACAC4/9QAvv/wAML/7QDEABEAyv/gAMz/5wDN/+UAzv/uAAkAsv/kALT/5ADE/+IDof/kA6b/0wOp/+QDtf/TA7b/0gO4/9MACwAQ/x4AEv8eALL/zQC0/80Ax//yAYb/HgGK/x4Bjv8eAY//HgOh/80Dqf/NAAsAEAAAABIAAAC7/+cAxAAPAMj/5wDJ/+cBhgAAAYoAAAGOAAABjwAAA7n/5wAMAG39vwB8/n0AuP9hAL7/jwC//w8Aw/7oAMb/HwDH/uUAyv9GAMz+7QDN/v0Azv7ZAA0ABP/YAG3+uAB8/ygAuP+uAL7/yQC//34Aw/9nAMb/hwDH/2UAyv+eAMz/agDN/3MAzv9eAAIAEAAGAAYAAQALAAsAAQAQABAAAgARABEAAwASABIAAgCyALIABAGBAYIAAwGEAYUAAQGGAYYAAgGHAYkAAQGKAYoAAgGOAY8AAgKUApQAAwP2A/cAAQP6A/oAAQSnBKcAAwAUAAb/oAAL/6AAvf/FAML/7gDEABAAxv/sAMr/IADL//EBhP+gAYX/oAGH/6ABiP+gAYn/oAO9//EDwf/FA8T/8QPG//ED9v+gA/f/oAP6/6AAAQApAAwAlgCdALEAsgCzALQAtQC3ALgAuQC7AL0AvgDAAMEAwwDEAMUAxwDJAMoAzgGFA6EDpQOmA6kDrAOvA7IDswO0A7UDtgO4A7sDvwPBA8UE5QAVAAr/4gANABQADv/PAEEAEgBhABMAbf+uAHz/zQC4/9AAvP/qAL7/7gC//8YAwAANAML/6QDD/9YAxv/oAMf/ugDK/+kAzP/LAM3/2gDO/8cBjf/TABgAu//cAL3/4QC+/+4Av//mAMH/8wDC/+sAw//pAMX/8ADG/+cAyP/cAMn/3ADK/+MAy//dAMz/zgDN/9QAzv/bA7n/3AO7//MDvf/dA7//1gPB/+EDxP/dA8X/1gPG/90AGQAG/9oAC//aALv/8AC9/9wAwv/sAMQADwDG/+oAyP/wAMn/8ADK/8QAy//vAMz/5wGE/9oBhf/aAYf/2gGI/9oBif/aA7n/8AO9/+8Dwf/cA8T/7wPG/+8D9v/aA/f/2gP6/9oAHwAGAAwACwAMALv/6AC9AAsAvv/tAMQAAADGAAsAyP/oAMn/6ADKAAwBhAAMAYUADAGHAAwBiAAMAYkADAIF/78CBv/tAgf/vwO5/+gDv//qA8EACwPF/+oD9gAMA/cADAP6AAwE5v+/BOr/7QTrAA0E7f+/BPkADQT8AA0AAQPN/+4AAQPN/+wAAQEc//EAAgERAAsBbP/mAAIA9v/1AYX/sAACAO3/yAEc//EAAgDt/8kBHP/uAAIA9v/AAYX/sAADANkAAADmAAABbAAAAAMA2f+oAO3/ygFf/+MAAwANABQAQQARAGEAEwADANn/3wDm/+ABbP/gAAQBGQAUBAUAFAQNABYEoQAWAAQADf/mAEH/9ABh/+8BTf/tAAUA7f/uAPb/sAD+AAABOv/sAW3/7AAGANL/2ADW/9gBOf/YAUX/2APc/9gEkv/YAAgA0v/rANb/6wE5/+sBRf/rA9z/6wQN//MEkv/rBKH/8wAIANkAFQDtABUBSf/kAUr/5QFM/+QBYv/jAWT/4gFs/+QACAD2//AA/gAAAQn/8QEg//MBOv/xAWP/8wFl/+kBbf/TAAgA7f+4APb/6gEJ//ABIP/xATr/6wFj//UBbf/sAYX/sAAIAAr/4gANABQADv/PAEEAEgBhABMAbf+uAHz/zQGN/9MACQD2AAABGgAAA+QAAAPtAAAEBgAABA4AAAQvAAAEMQAABDMAAAAJAPb/ugD+AAABCf/PASD/2wE6/1ABSv+dAWP/8AFl//IBbf9MAAoABv/WAAv/1gGE/9YBhf/WAYf/1gGI/9YBif/WA/b/1gP3/9YD+v/WAAoABv/1AAv/9QGE//UBhf/1AYf/9QGI//UBif/1A/b/9QP3//UD+v/1AAoA5v/DAPb/zwD+AAABOv/OAUn/5wFM/98BYv/RAWT/7AFs/6ABbf/RAAwA2QASAOr/6QD2/9cBOv/XAUr/0wFM/9YBTf/FAVj/5wFiAA0BZAAMAW3/1gFu//IADQDZABMA5v/FAPb/ygE6/58BSf9RAUr/ewFM/8oBTf/dAVj/8gFi/3UBZP/KAWz/TwFt/4wADQD2/7oA+f/ZAP4AAAEJ/88BIP/bATr/UAFI/9kBSv+dAWP/8AFl//IBbf9MBDX/2QSV/9kADQDq/9cA9v+5AP7/6QEJ/7IBHP/SASD/yAE6/6ABSv/FAVj/5AFj/8wBZf/MAW3/ywFu/+8ADgAj/8MA2QATAOb/xQD2/8oBOv+fAUn/UQFK/3sBTP/KAU3/3QFY//IBYv91AWT/ygFs/08Bbf+MAA8A7QAUAPIAEAD2//AA+f/wAP4AAAEBAAwBBAAQATr/8AFI//ABSv/mAVEAEAFt//ABcAAQBDX/8ASV//AAEgDZ/64A5gASAOv/4ADt/60A7//WAP3/3wEB/9IBB//gARz/zgEu/90BMP/iATj/4AFA/+ABSv/pAU3/2gFf/70Baf/fAWwAEQAUAO7/9QD2/7oA+f/ZAP4AAAEJ/88BIP/bATT/9QE6/1ABRP/1AUj/2QFK/50BXv/1AWP/8AFl//IBbf9MA+X/9QQR//UEH//1BDX/2QSV/9kAFQD2/7oA+f/ZAP4AAAEJ/88BGv/dASD/2wE6/1ABSP/ZAUr/nQFj//ABZf/yAW3/TAPk/90D7f/dBAb/3QQO/90EL//dBDH/3QQz/90ENf/ZBJX/2QAVAO3/7wDu//AA8v/zAP4AAAEE//MBGv/0ATT/8AFE//ABUf/zAV7/8AFw//MD5P/0A+X/8APt//QEBv/0BA7/9AQR//AEH//wBC//9AQx//QEM//0ABcABv/yAAv/8gD2//QA/gAAAQn/9QEa//UBOv/1AW3/9QGE//IBhf/yAYf/8gGI//IBif/yA+T/9QPt//UD9v/yA/f/8gP6//IEBv/1BA7/9QQv//UEMf/1BDP/9QAYAPf/xQED/8UBGP+AAR7/xQEi/8UBQv/FAWD/xQFh/8UBa//FA9//xQPh/4AD4//FA+b/xQPo/5AEAf/FBAf/xQQM/8UEGv/FBBz/xQQd/8UEJ/+ABCn/xQQr/4AEOP/FAB0A0v/iANT/5ADW/+IA2f/hANr/5ADd/+QA3v/pAO3/5ADy/+sBBP/rATP/5AE5/+IBQ//kAUX/4gFQ/+QBUf/rAV3/5AFm/+QBb//kAXD/6wPQ/+kD3P/iA93/5AQQ/+QEHv/kBC7/6QQw/+kEMv/pBJL/4gAeAPf/8AED//ABGP/rARz/6wEe//ABIv/wAUL/8AFg//ABYf/wAWv/8AIP/+sCK//rAjT/6wPf//AD4f/rA+P/8APm//AEAf/wBAf/8AQM//AEGv/wBBz/8AQd//AEJ//rBCn/8AQr/+sEOP/wBQz/6wUP/+sFFP/rAB8ABv/AAAv/wADe/+sA4f/nAOb/wwD2/88A/gAAARn/yAE6/84BR//nAUn/5wFM/98BYv/RAWT/7AFs/6ABbf/RAYT/wAGF/8ABh//AAYj/wAGJ/8AD0P/rA/b/wAP3/8AD+v/ABAX/yAQu/+sEMP/rBDL/6wQ0/+cElP/nAB8A0v/jANT/5QDW/+MA2f/iANr/5QDd/+UA3v/pAPL/6gEE/+oBM//lATn/4wFD/+UBRf/jAVD/5QFR/+oBXf/lAWb/5QFs/+QBb//lAXD/6gPQ/+kD3P/jA93/5QQN/+QEEP/lBB7/5QQu/+kEMP/pBDL/6QSS/+MEof/kACAAG//yANL/8QDU//UA1v/xANr/9ADd//UA3v/zAOb/8QEZ//QBM//0ATn/8QFD//QBRf/xAVD/9QFd//QBYv/yAWT/8gFm//UBbP/yAW//9QPQ//MD3P/xA93/9AQF//QEDf/wBBD/9AQe//QELv/zBDD/8wQy//MEkv/xBKH/8AAiAO0AOgDyABgA9v/jAPcADAD5//cA/AAAAP4AAAEDAAwBBAAYAR4ADAEiAAwBOv/iAUIADAFI//cBSv/jAVEAGAFgAAwBYQAMAWsADAFt/+MBcAAYA98ADAPjAAwD5gAMBAEADAQHAAwEDAAMBBoADAQcAAwEHQAMBCkADAQ1//cEOAAMBJX/9wAiAG39vwB8/n0A2f9SAOYABQDq/70A6/9JAO3+/gDv/xMA9v9oAP3/DgD+/zMA//8TAQH/BwECAAABB/8OAQn/EQEc/zwBIP+sAS7/FQEw/zwBOP8OATr/agFA/0kBSv8MAUz/PwFN/vEBWP/AAV/+7wFj/zEBZf9fAWn/CgFsAAUBbf8wAW7/1QAjAAT/2ABt/rgAfP8oANn/pQDmAA8A6v/kAOv/oADt/3QA7/+AAPb/sgD9/30A/v+TAP//gAEB/3kBAgAAAQf/fQEJ/38BHP+YASD/2gEu/4EBMP+YATj/fQE6/7MBQP+gAUr/fAFM/5oBTf9sAVj/5gFf/2sBY/+SAWX/rQFp/3sBbAAPAW3/kQFu//IAJwDsAAAA7QAUAPAAAADxAAAA8wAAAPQAAAD1AAAA9v/tAPgAAAD5/+0A+gAAAPsAAAD8/+IA/gAAAQAAAAEFAAABKwAAATYAAAE6/+0BPAAAAT4AAAFI/+0BSv/tAVMAAAFVAAABVwAAAVwAAAFt/+0D4AAAA+IAAAPnAAAD7AAABAIAAAQjAAAEJQAABDX/7QQ3AAAElf/tBJcAAAAqAOz/7wDt/+4A7v/wAPD/7wDx/+8A8//vAPT/7wD1/+8A9v/uAPj/7wD6/+8A+//vAP7/7wEA/+8BBf/vAQn/9AEg//EBK//vATT/8AE2/+8BOv/vATz/7wE+/+8BRP/wAVP/7wFV/+8BV//vAVz/7wFe//ABbf/vA+D/7wPi/+8D5f/wA+f/7wPs/+8EAv/vBBH/8AQf//AEI//vBCX/7wQ3/+8El//vADMA0v++ANb/vgDm/8kA7AAAAPAAAADxAAAA8wAAAPQAAAD1AAAA9v/fAPgAAAD6AAAA+wAAAP4AAAEAAAABBQAAAQn/7QEa/+8BIP/rASsAAAE2AAABOf++ATr/3wE8AAABPgAAAUX/vgFM/+kBUwAAAVUAAAFXAAABXAAAAWP/9QFt/+AD3P++A+AAAAPiAAAD5P/vA+cAAAPsAAAD7f/vBAIAAAQG/+8EDv/vBCMAAAQlAAAEL//vBDH/7wQz/+8ENwAABJL/vgSXAAAAAQHw/8cAAQHw//EAAQHwAA0AAQBbAAsAAQCB/98AAQBKAA0AAgH1/+kCS//pAAIB8P+3AfX/8AACAFgADgCB/58AOgCyAA8A0v/mANQADgDW/+YA2QATANoADgDdAA4A3gALAOH/5QDm/+YA5//0AO0AEgDyAA8A9v/nAPn/6AD+AAABBAAPAQ0ADwEZ/+YBMwAOATn/5gE6/+cBQwAOAUX/5gFH/+UBSP/oAUn/5QFK/+gBTP/kAVAADgFRAA8BXQAOAWL/5gFk/+YBZgAOAWz/5gFt/+cBbwAOAXAADwPQAAsD0QAPA9z/5gPdAA4EBf/mBA3/5gQQAA4EEwAPBBUADwQeAA4ELgALBDAACwQyAAsENP/lBDX/6ASS/+YElP/lBJX/6ASh/+YAAQD6AAgACgAUABUAFgAXABgAGQAaABsAHAAdACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgBlAGcAgQCDAIQAjACPAJEAkwCxALIAswC0ALUAtgC3ALgAuQC6ANIA0wDUANUA1gDXANgA2QDaANsA3ADdAN4A3wDgAOEA4gDjAOQA5QDmAOcA6ADpAS8BMwE1ATcBOQE7AUEBQwFFAUkBSwFMAVgBWQGxAbcBvAG/ApUClgKYApoCmwKcAp0CngKfAqACoQKiAqMCpAKlAqYCpwKoAqkCqgKrAqwCrQKuAq8CsAKxArICswK0AtEC0wLVAtcC2QLbAt0C3wLhAuMC5QLnAukC6wLtAu8C8QLzAvUC9wL5AvsC/QL+AwADAgMEAwYDCAMKAwwDDgMQAxMDFQMXAxkDGwMdAx8DIQMjAyUDJwMpAysDLQMvAzEDMwM1AzcDOQM7Az0DPwNAA0IDRANGA0gDoQOiA6MDpAOlA6YDpwOpA6oDqwOsA60DrgOvA7ADsQOyA7MDtAO1A7YDtwO4A8gDyQPKA8sDzAPNA84DzwPQA9ED0gPTA9QD1QPWA9cD2APZA9oD2wPcA90D7gPwA/ID9AQJBAsEDQQiBCgELgSYBJ0EoQUiBSQAAwHv//UB8P/uA5v/9QADAA3/5gBB//QAYf/vAAMASv/uAFv/6gHw//AAAwBb/8EB///mAkv/6AADAEoADwBYADIAWwARAAMAW//lAf//6wJL/+0AOwCyABAA0v/gANP/6ADUABAA1v/gANkAFADdABAA4f/hAOb/4ADtABMA8gAQAPn/4AEEABABCP/oAQ0AEAEX/+gBGf/gARv/6AEd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/8oBif/KA9D/7QPc/9ID3f/0A+D/0QPi/9ED5P/mA+X/7wPn/9ED7P/RA+3/5gP2/8oD9//KA/r/ygQC/9EEBf/UBAb/5gQN/9MEDv/mBBD/9AQR/+8EHv/0BB//7wQj/9EEJf/RBC7/7QQv/+YEMP/tBDH/5gQy/+0EM//mBDT/4QQ3/9EEkv/SBJT/4QSX/9EEof/TACkAR//sAEj/7ABJ/+wAS//sAFX/7ACU/+wAmf/sArz/7AK9/+wCvv/sAr//7ALA/+wC2P/sAtr/7ALc/+wC3v/sAuD/7ALi/+wC5P/sAub/7ALo/+wC6v/sAuz/7ALu/+wC8P/sAvL/7ARS/+wEVP/sBFb/7ARY/+wEWv/sBFz/7ARe/+wEYP/sBHT/7AR2/+wEeP/sBHz/7AS3/+wExP/sBMb/7AA2AAYAEAALABAADQAUAEEAEgBH/+gASP/oAEn/6ABL/+gAVf/oAGEAEwCU/+gAmf/oAYQAEAGFABABhwAQAYgAEAGJABACvP/oAr3/6AK+/+gCv//oAsD/6ALY/+gC2v/oAtz/6ALe/+gC4P/oAuL/6ALk/+gC5v/oAuj/6ALq/+gC7P/oAu7/6ALw/+gC8v/oA/YAEAP3ABAD+gAQBFL/6ARU/+gEVv/oBFj/6ARa/+gEXP/oBF7/6ARg/+gEdP/oBHb/6AR4/+gEfP/oBLf/6ATE/+gExv/oAEoAR//FAEj/xQBJ/8UAS//FAEwAIABPACAAUAAgAFP/gABV/8UAV/+QAFsACwCU/8UAmf/FAdv/kAK8/8UCvf/FAr7/xQK//8UCwP/FAsb/gALH/4ACyP+AAsn/gALK/4AC2P/FAtr/xQLc/8UC3v/FAuD/xQLi/8UC5P/FAub/xQLo/8UC6v/FAuz/xQLu/8UC8P/FAvL/xQMU/4ADFv+AAxj/gAMg/5ADIv+QAyT/kAMm/5ADKP+QBFL/xQRU/8UEVv/FBFj/xQRa/8UEXP/FBF7/xQRg/8UEZv+ABGj/gARq/4AEbP+ABG7/gARw/4AEcv+ABHT/xQR2/8UEeP/FBHr/gAR8/8UEt//FBLv/gATE/8UExv/FBMgAIATKACAEzAAgBNn/kAABAPQABAAGAAsADAAlACcAKAApACoALwAwADMANAA1ADYAOAA6ADsAPAA9AD4APwBJAEoATABPAFEAUgBTAFYAWABaAFsAXQBfAJYAnQCyAYQBhQGHAYgBiQHyAfQB9QH3AfoCBQJKAk0CXwJhAmIClQKWApgCmgKbApwCnQKeAp8CoAKhAqICowKkAqUCqwKsAq0CrgKvArQCvQK+Ar8CwALFAsYCxwLIAskCygLPAtAC0QLTAtUC1wLZAtsC3QLfAuEC4gLjAuQC5QLmAucC6ALpAuoC9AMCAwQDBgMIAwoDDQMPAxEDEgMTAxQDFQMWAxcDGAMaAxwDHgMpAysDLQM7Az0DPgM/A0ADQgNEA0oDSwNMA00DTgNPA1ADUQNSA1MDXgNfA2ADYQNiA2gDaQNqA28DgQOCA4MDhAOIA4kDigOTA+4D8APyA/QD9QP2A/cD+gP8A/0EOQQ7BD0EPwRBBEMERQRHBEkESwRNBE8EUQRSBFMEVARVBFYEVwRYBFkEWgRbBFwEXQReBF8EYARlBGYEZwRoBGkEagRrBGwEbQRuBG8EcARxBHIEegSLBIwEjQSOBI8EkASzBLQEtgS6BLsEvQTDBMUEyATJBMsEzQTQBNIE0wTUBNcE2gTdBN4E3wTgBOEE4wABADUABgALAJYAsQCyALMAtAC9AMEAxwGEAYUBhwGIAYkCBQIGAgcDoQOiA6MDpAOlA6YDqQOqA6sDrAOtA64DrwOwA7EDsgOzA7QDtQO2A7cDuAO7A78DwQPFA/YD9wP6BOUE5gTqBO0E8wT4AKcAEP8WABL/FgAl/1YALv74ADgAFABF/94AR//rAEj/6wBJ/+sAS//rAFP/6wBV/+sAVv/mAFn/6gBa/+gAXf/oAJT/6wCZ/+sAm//qALL/VgGG/xYBiv8WAY7/FgGP/xYCBf/AAk3/wAKa/1YCm/9WApz/VgKd/1YCnv9WAp//VgKg/1YCtf/eArb/3gK3/94CuP/eArn/3gK6/94Cu//eArz/6wK9/+sCvv/rAr//6wLA/+sCxv/rAsf/6wLI/+sCyf/rAsr/6wLL/+oCzP/qAs3/6gLO/+oCz//oAtD/6ALR/1YC0v/eAtP/VgLU/94C1f9WAtb/3gLY/+sC2v/rAtz/6wLe/+sC4P/rAuL/6wLk/+sC5v/rAuj/6wLq/+sC7P/rAu7/6wLw/+sC8v/rAwD++AMU/+sDFv/rAxj/6wMpABQDKwAUAy0AFAMw/+oDMv/qAzT/6gM2/+oDOP/qAzr/6gM+/+gDTf/A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AiQCJQIOAg8CEAIRAhICEwJVAicCKAIpAioFEwIrAi0CLgIvAjECMwKRA0wDTQNOA08DUANRA1IDUwNUA1UDVgNXA1gDWQNaA1sDXANdA14DXwNgA2EDYgNjA2QDZQNmA2cDnQNoA2kDagNrA2wDbQNuA28DcANxA3IDcwN0A3UDdgN3A3gDeQN6A3sDfAN9BRoDfwOAA4EDggODA4QDhQOGA4cDiAOJA4oDiwOMA40DjgOPA5AFHQORA5IDlAOTA5UDlgOXA5gDmQOaA5sDnAOeA58DoAUbBRwE5gTnBOgE6QTzBPYE9AT1BPoE+wT8BOoE6wTsBQUFCAUJBQwFDgUPAhsFEQT9BP4E/wUABQEFAgUDBQQFHgUfBSAFIQUSBRQFFQIyBRcCNAUYBRYCMAImAiwFJgUnAAIHAAD6AgECjAHrAeoB6QHoAecB5gHlAeQB4wHiAk0CTAJLAkoCQgIAAf8B/gH9AfwB+wH6AfkB+AH3AfYB9QH0AfMB8gHxAfAB7wHuAe0B7AICAgMCjgKQAo8CkQKNApICbAIEAgUCBgIHAggCCQIKAgsCDAINAg4CDwIQAhECEgITAhQCFQIWAhcCGAIaAhsFGQIcAh0CHgIfAiACIQIiAiMCJAIlAlUCJwIoAikCKgUTAisCLQIuAi8CMAIxAjICMwI1AjYCOAI3A0oDSwNMA00DTgNPA1ADUQNSA1MDVANVA1YDVwNYA1kDWgNbA1wDXQNeA18DYANhA2IDYwNkA2UDZgNnA2gDaQNqA2sDbANtA24DbwNwA3EDcgNzA3QDdQN2A3cDeAN5A3oDewN8A30DfgUaA38DgAOBA4IDgwOEA4UDhgOHA4gDiQOKA4sDjAONA44DjwOQBR0DkQOSA5QDkwOVA5YDlwOYA5kDmgObA5wDnQOeA58DoAUbBRwE5gTnBOgE6QTqBOsE7ATtBO4E7wTwBPEE8gTzBPQE9QT2BPcE+AT5BPoE+wT8BP0E/gT/BQAFAQUCAhkFAwUEBQUFBgUHBQgFCQUKBQsFDAUNBQ4FDwUQBREFHgUfBSAFIQUSBRQFFQUXAjQFGAUWAiYCLAUmBScAAQABAXsAAQABAEsAAQABALsAAQABADYAAQABABMAAQACAyMDJAACBuQG2AACBuYG2AABBu4AAQbwAAEG8gACAAEAFAAdAAAAAQACAC8ATwABAAMASQBLAoQAAgAAAAEG3gABAAYC1QLWAucC6ANqA3MAAQAGAE0ATgL8A+kD6wRkAAIAAwGUAZQAAAHfAeEAAQI5Aj8ABAACAAIAqACsAAEBJAEnAAEAAQAMACcAKAArADMANQBGAEcASABLAFMAVABVAAIAAgAUAB0AAAJvAngACgACAAYATQBNAAYATgBOAAQC/AL8AAUD6QPpAAMD6wPrAAIEZARkAAEAAgAEABQAHQAAAoACgAAKAosCiwALBKgErwAMAAIABgAaABoAAAAcABwAAQJkAmkAAgJtAm0ACAJvAngACQJ/An8AEwABABQAGgAcAmQCZQJmAmcCaAJpAm0CfwKAAosEqASpBKoEqwSsBK0ErgSvAAEF3gABBeAAAQXiAAEF5AABBeYAAQXoAAEF6gABBewAAQXuAAEF8AABBfIAAQX0AAEF9gABBfgAAQX6AAIF/AYCAAIGAgYIAAIGCAYOAAIGDgYUAAIGFAYaAAIGGgYgAAIGIAYmAAIGJgYsAAIGLAYyAAIGMgY4AAIGOAY+AAMGPgZEBkoAAwZIBk4GVAADBlIGWAZeAAMGXAZiBmgAAwZmBmwGcgADBnAGdgZ8AAMGegaABoYAAwaEBooGkAAEBo4GlAaaBqAABAacBqIGqAauAAUGqgawBrYGvAbCAAUGvAbCBsgGzgbUAAUGzgbUBtoG4AbmAAUG4AbmBuwG8gb4AAUG8gb4Bv4HBAcKAAUHBAcKBxAHFgccAAUHFgccByIHKAcuAAUHKAcuBzQHOgdAAAUHOgdAB0YHTAdSAAYHTAdSB1gHXgdkB2oABgdiB2gHbgd0B3oHgAAGB3gHfgeEB4oHkAeWAAYHjgeUB5oHoAemB6wABgekB6oHsAe2B7wHwgAGB7oHwAfGB8wH0gfYAAYH0AfWB9wH4gfoB+4ABwguB+YH7AfyB/gH/ggEAAcIJgf6CAAIBggMCBIIGAABAOsACgBFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AhQCGAIcAiQCKAIsAjQCQAJIAlAC7ALwAvQC+AL8AwADBAMIAwwDEAMUAxgDHAMgAyQDKAMsAzADNAM4A6gDrAOwA7QDuAO8A8ADxAPIA8wD0APUA9gD3APgA+QD6APsA/AD9AP4A/wEAAQEBAgEDAQQBBQEGAQcBMAE0ATYBOAE6ATwBQgFEAUYBSgFNAVoClwKZArUCtgK3ArgCuQK6ArsCvAK9Ar4CvwLAAsECwgLDAsQCxQLGAscCyALJAsoCywLMAs0CzgLPAtAC0gLUAtYC2ALaAtwC3gLgAuIC5ALmAugC6gLsAu4C8ALyAvQC9gL4AvoC/AL/AwEDAwMFAwcDCQMLAw0DDwMRAxQDFgMYAxoDHAMeAyADIgMkAyYDKAMqAywDLgMwAzIDNAM2AzgDOgM8Az4DQQNDA0UDRwNJA7kDugO7A7wDvgO/A8ADwQPCA8MDxAPFA8YDxwPeA98D4APhA+ID4wPkA+UD5gPnA+gD6QPqA+sD7APtA+8D8QPzA/UECgQMBA4EHAQjBCkELwSZBJoEngSiBSMFJQABAPoACAAKABQAFQAWABcAGAAZABoAGwAcAB0AJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AGUAZwCBAIMAhACMAI8AkQCTALEAsgCzALQAtQC2ALcAuAC5ALoA0gDTANQA1QDWANcA2ADZANoA2wDcAN0A3gDfAOAA4QDiAOMA5ADlAOYA5wDoAOkBLwEzATUBNwE5ATsBQQFDAUUBSQFLAUwBWAFZAbEBtwG8Ab8ClQKWApgCmgKbApwCnQKeAp8CoAKhAqICowKkAqUCpgKnAqgCqQKqAqsCrAKtAq4CrwKwArECsgKzArQC0QLTAtUC1wLZAtsC3QLfAuEC4wLlAucC6QLrAu0C7wLxAvMC9QL3AvkC+wL9Av4DAAMCAwQDBgMIAwoDDAMOAxADEwMVAxcDGQMbAx0DHwMhAyMDJQMnAykDKwMtAy8DMQMzAzUDNwM5AzsDPQM/A0ADQgNEA0YDSAOhA6IDowOkA6UDpgOnA6kDqgOrA6wDrQOuA68DsAOxA7IDswO0A7UDtgO3A7gDyAPJA8oDywPMA80DzgPPA9AD0QPSA9MD1APVA9YD1wPYA9kD2gPbA9wD3QPuA/AD8gP0BAkECwQNBCIEKAQuBJgEnQShBSIFJAHWAAIATQHXAAIAUAHYAAMASgBNAdkAAwBKAFAAAQABAEoB1QACAEoB2wACAFgB2gACAFgAAQADAEoAVwCVAAAAAQABAAEAAQAAAAMEwQACAK0C1wACAKkExwACAK0E1AACAKkEwgACAK0C2AACAKkEsQACAKkEyAACAK0EZAACAK0E1QACAKkDRgACAKkDSAACAKkDRwACAKkDSQACAKkEwAACAKkExQACAdQEwwACAK0EsAACAKkC8QACAdQD+wACAKkEzwACAK0DKQACAdQE2gACAK0E3wACAK0E3QACAKoDQAACAKkE4wACAK0ExgACAdQExAACAK0D/AACAKkE0AACAK0DKgACAdQE2wACAK0E4AACAK0E3gACAKoDQQACAKkE5AACAK0EyQACAKkDAgACAdQEywACAK0DBAACAKkDBgACAdQEzQACAK0DHwACAKkDJQACAdQE2AACAK0D8AACAKkE4QACAK0D7gACAKgEygACAKkDAwACAdQEzAACAK0DBQACAKkDBwACAdQEzgACAK0DIAACAKkDJgACAdQE2QACAK0D8QACAKkE4gACAK0D7wACAKgDGQACAKkDGwACAdQE1gACAK0EvAACAKwDGgACAKkDHAACAdQE1wACAK0EvQACAKwDDAACAKkDDgACAdQE0QACAK0EsgACAKgCqgACAKoCtAACAKkEiwACAK0D9AACAKgEjQACAKsEjwACAKoDDQACAKkDDwACAdQE0gACAK0EswACAKgCxQACAKoCzwACAKkEjAACAK0D9QACAKgEjgACAKsEkAACAKoCwgACAKkCwQACAKgEYgACAKsC9gACAKoEuQACAKwEcwACAKkEewACAK0EdQACAKgEdwACAKsEeQACAKoEdAACAKkEfAACAK0EdgACAKgEeAACAKsEegACAKoEgQACAKkEiQACAK0EgwACAKgEhQACAKsEhwACAKoEggACAKkEigACAK0EhAACAKgEhgACAKsEiAACAKoCmwACAKkEOQACAK0CmgACAKgEOwACAKsCnQACAKoEtAACAKwCowACAKkEUQACAK0CogACAKgEUwACAKsEVQACAKoEtgACAKwCpwACAKkEYwACAK0CpgACAKgEYQACAKsC9QACAKoEuAACAKwCtgACAKkEOgACAK0CtQACAKgEPAACAKsCuAACAKoEtQACAKwCvgACAKkEUgACAK0CvQACAKgEVAACAKsEVgACAKoEtwACAKwCxwACAKkEZgACAK0CxgACAKgEaAACAKsCyQACAKoEuwACAKwCzAACAKkEfgACAK0CywACAKgEgAACAKsDMAACAKoEvwACAKwCrAACAKkEZQACAK0CqwACAKgEZwACAKsCrgACAKoEugACAKwCsQACAKkEfQACAK0CsAACAKgEfwACAKsDLwACAKoEvgACAKwE0wADAKoAqQTcAAMAqgCpAAIAEQAlACkAAAArAC0ABQAvADQACAA2ADsADgA9AD4AFABFAEkAFgBLAE0AGwBPAFQAHgBWAFsAJABdAF4AKgCBAIEALACDAIMALQCGAIYALgCJAIkALwCNAI0AMACYAJsAMQDQANAANQAA\",\r\n  \"Roboto-Medium.ttf\": \"AAEAAAARAQAABAAQR0RFRqbzo4gAAcGUAAACWEdQT1OYN0PaAAHD7AAAWPxHU1VCm18k/AACHOgAABX2T1MvMpfnsYsAAAGYAAAAYGNtYXDTfF9iAAAWnAAABoJjdnQgO/gmfQAAL3gAAAD+ZnBnbagFhDIAAB0gAAAPhmdhc3AACAAZAAHBiAAAAAxnbHlml3ag9QAAOswAAYOyaGVhZAiGpEQAAAEcAAAANmhoZWEK9griAAABVAAAACRobXR4QNtY9AAAAfgAABSkbG9jYcJrHvoAADB4AAAKVG1heHAI2RDGAAABeAAAACBuYW1lQmB1PgABvoAAAALmcG9zdP9tAGQAAcFoAAAAIHByZXB5WM7TAAAsqAAAAs4AAQAAAAMCDPWGK6FfDzz1ABkIAAAAAADE8BEuAAAAAODgRcT6Jv3VCWEIcwAAAAkAAgAAAAAAAAABAAAHbP4MAAAJbvom/j4JYQABAAAAAAAAAAAAAAAAAAAFKQABAAAFKQCpABUAdgAHAAIAEAAvAJoAAALmD3UAAwABAAQEiQH0AAUAAAWaBTMAAAEfBZoFMwAAA9EAZgIAAAACAAAAAAAAAAAA4AAC/1AAIFsAAAAgAAAAAEdPT0cAQAAA//0GAP4AAGYHmgIAIAABnwAAAAAEOgWwAAAAIAADA4wAZAAAAAAAAAAAAf0AAAH9AAACHgCMAo4AYATTAFYEjABkBeQAZAUhAFUBVwBSAsUAgQLMACcDjAAcBHEAQgHKACICuABQAjkAhgMfAAEEjABoBIwAqgSMAFIEjABOBIwANwSMAH8EjABzBIwARASMAGcEjABdAhwAfwHrADMEEgA+BIAAjwQoAH4D5AA7By0AWwVOABEFDQCUBTkAZgU5AJQEhQCUBGgAlAVzAGsFrQCUAkQApQRyAC8FDgCUBFIAlAb/AJQFrQCUBYMAZQUbAJQFgwBgBQkAlATYAEsE4AAtBTwAgAUqABEHCwAvBQ0AJgTjAAgE0wBQAiwAhQNVABICLAALA24ANgOVAAICkAA4BFAAVgR/AH0ELQBOBIIAUARJAFEC0wArBIkAUgRyAHoCCgB8AgL/qwQsAH0CCgCMBvgAfAR0AHoEigBOBH8AfQSHAFAC1AB9BB4ASQKqAAoEcwB3A/gAFgXwACMEBgAfA+sADAQGAFECqwA4Af0ArwKrABwFTQB1Ah8AhQSCAGcEtQBfBZ4AXARAAA0B+ACJBPkAXAOSAGMGSQBaA5AAjgPjAFcEawB/BkoAWQPaAJ0DDwCBBEoAXAL1AD0C9QA3ApQAbwTBAJMD6gBJAkQAkAITAGwC9QCCA6cAeQPjAF4FygBfBiIAUwZcAGYD5QBGB37//ARCAEwFgQBpBM8AlQTrAIoGwgBIBKQAaASRAEMEhgBOBJEAgQTsAFAFsAAfAhcAkASaAI0EZAAgAlIAIAWXAJAEhgB9B7AAZQc+AFkCBwCJBY0AVQLQ/94FkQBbBJ0ATQWjAIAE5gB3AiX/rgQ5AFcD3gCQA6oAbgPaAJ0DfgB1AgoAgQKqAHgCTAApA84AdwMoAEsCcwCJAAD8kwAA/WIAAPx0AAD9OgAA/AgAAP0eAmsAzQQ7AG4CRACQBHQAmQXCABoFegBcBTUAIASMAGoFrgCZBIwARwX5AEwFsQBGBVkAbASEAFYEyACXBA0AHgSGAFEEZQBiBA8AWQSGAH0EpwB2AqUAowRoABUEGgBnBPwAMASGAIAEMwBQBI4AUAQqADwEXQB/BdEARgXMAFIGlABlBLQAeASH/+EGeQArBf0AJAVTAGcIgQAtCIwAmQZRAC0FpQCPBQcAkAX9ACYHqQAVBNsASQWmAJIFqAAsBQsAMgZfAE4F+ACOBYUAkQeaAJUH+gCVBiEAFQbwAJkFAgCQBUgAYwdiAKEE6AAXBIAAWgSLAI8DWwCDBPIAJwaHACAEFwBOBJIAhARsAI8ElAAgBgIAjwSRAIQEkgCEA/oAIwXUAFMEzwCEBGUAYAaNAIQG8QB9BSEAIAZvAI8EaQCPBDkAUAaCAJIEcAAuBHL/1wQ5AFIG1gAdBuQAhASG/+gEkgCEB1gAiAZqAHIEaP/hBygAmAYCAIYFFgAaBGMACwdLAKwGPQCaBuUAfgXdAIEJKgClB+4AkAQgACgD9QAyBXoAYASIAE0FGAAQBA0AHgV6AGAEhgBOB1QAiAZWAHUHWACIBmoAcgUQAGcERwBdBPsAcAAA/HAAAPx1AAD9gQAA/aYAAPomAAD6UQYgAJIFEwCEBGj/4QUQAJQEhgB9BGsAjwOjAH0E6gCZBCQAfQgjABUG4AAgBckAmQT7AI8FLgCRBKwAjQaUADQFoAA8BiAAlAUHAIQH3QCUBa0AfQhJAJcG7wB9BjcAZwUEAGAFOQAmBEEAHwcoACkFbwAnBfIAkQTcAGAFcACBBHQAdQWFAIkGGwAKBMT/ywUgAJEEeACNBh8ALAUUACAFrQCZBIYAfQYqAJQFEQCEB3UAlAZ0AI8FjQBVBKMAWwSkAF0EwwAsA6oAJAVpACYEcQAfBPkATwbzAGgG2wBfBlEAPQUoAC8EgwBKBEgAcwe8AEIGpAA/B/UAlAaeAHQFBgBcBC8AVQWoACEFHQBEBU4AfQZGACwFOwAgAxsAZAQUAAAIKQAABBQAAAgpAAACuQAAAgoAAAFcAAAEfwAAAjAAAAGiAAABAAAAANEAAAAAAAACtwBQArcAUAUjAJwGKgB7A5oACAG/AGUBugA3Ac4ANQGjAEsDCwBtAxMAQwMAADUEWwA/BJoAXQLMAIoD/QCNBaoAjQHPAF4HrgBQAnQAbAJpAFUDmQArAvUATAL1ADYC9QBQAvUATgL1ADcC9QBLAvUARwM5AFAC8wBQAvMAUAIDAFMCAwBQA1wAZwL1AEwC9QCCAvUAPQL1ADcC9QA2AvUAUAL1AE4C9QA3AvUASwL1AEcDOQBQAvMAUALzAFACAwBTAgMAUAS1AGIGbgAjBr8AmQiVAJQGOwAjBpsAfQSMAFwF6gAjBC0AKgSbACQFYgBPBX4AKwXkAG4D4wBFCCkAkAUIAG8FFACWBjcAXAbeAFYG0ABeBqwAXASTAGEFigCmBN4APwSAAJwEnQA7CFIAYQIy/6cEkQBlBIAAjwQSAD0EKAB9BA4AJQJRAJwCjgBkAekARwUZACsErQAaBL0AKwcoACsHKAArBQ8AKwa3AEkAAAAACDAAWQg1AFwC9QA9AvUAggL1AEwEHQBPBB0AVwQdADgEHQBfBB0AZgQdADMEHQA9BB0AQwQdAJgEHQBYBCsAQQQ+AAYEXAATBgkAJwR5AAgEiABpBD8AJQQ3AD8EZAB1BL0ATQRrAHYEvQBOBNwAdgYFAHYDtwB2BF4AdgPWACYB/gCGBN0AdgSnAFYDyAB2BDcAPwRoADoDpQAKA7wAdgR5AAgEvQBOBHkACAOdAEYE2QB2BB4ARAWmAE8FWABPBOAAXgWSACMEgABPB1YAJAdYAHYFmQAlBNgAdgRyAHYFXgAnBkUAGwRGAEME4gB2BF0AdgTLACQETAAfBWIAdgSNAEMGhAB2Bw4AdgVhAAkGFgB2BGcAdgSAAD0GjwB2BIQAQgQoAAsGowAbBKAAdgUNAHYFdAAhBfgATgRWAAYExAATBpcAIwSNAEMEjQB2BgAADgTOAE0ERwBDBL0ATgRoADoD9ABFCC0AdgT0ACgC9QA3AvUANgL1AFAC9QBOAvUANwL1AEsC9QBHA7YAjQKuAJgD4AB2BDoADAS2AFYFQQCZBSgAmQQwAIEFNQCZBCgAgQR6AHYEgABPBGAAdgSaAAgB/gCQA6EAdQAA/J4D9wB6A/r/UQQLAHkD+gB5A7wAdgOdAHUDnQB1AvUATAL1ADYC9QBQAvUATgL1ADcC9QBLAvUARwVzAGkFngBpBX8AmQXZAGkF2gBpBCgAlgSCAGsEWAAPBLsANARrAGcELgBCA6EAdgG6AGIGmABOBK8AbgIM/6cEjAA4BIwAaASMACwEjABiBIwAXwSMADQEjABsBIwAWQSMAGcEjADmAib/rgIl/64CFwCQAhf/+gIXAJAEYAB2BOYAYAQwADkEiAB9BD4ATwSVAE4EkQBOBJ0ASQSSAH0EmgBOBEkAUQSJAFAEWQA0A60AYQUMAF8DxAAFBkb/7AQHAHYEvQBOBQ4ANATcAHYB/QAAArgAUAVXABcFVwAXBJD/9QTgAC0Cqv/rBU4AEQVOABEFTgARBU4AEQVOABEFTgARBU4AEQU5AGYEhQCUBIUAlASFAJQEhQCUAkT/ywJEAKUCRP/KAkT/vgWtAJQFgwBlBYMAZQWDAGUFgwBlBYMAZQU8AIAFPACABTwAgAU8AIAE4wAIBFAAVgRQAFYEUABWBFAAVgRQAFYEUABWBFAAVgQtAE4ESQBRBEkAUQRJAFEESQBRAhf/tQIXAJACF/+zAhf/qAR0AHoEigBOBIoATgSKAE4EigBOBIoATgRzAHcEcwB3BHMAdwRzAHcD6wAMA+sADAVOABEEUABWBU4AEQRQAFYFTgARBFAAVgU5AGYELQBOBTkAZgQtAE4FOQBmBC0ATgU5AGYELQBOBTkAlAUYAFAEhQCUBEkAUQSFAJQESQBRBIUAlARJAFEEhQCUBEkAUQSFAJQESQBRBXMAawSJAFIFcwBrBIkAUgVzAGsEiQBSBXMAawSJAFIFrQCUBHIAegJE/7QCF/+dAkT/0QIX/7sCRP/dAhf/xgJEABgCCv//AkQAnwa1AKUECwB8BHIALwIl/64FDgCUBCwAfQRSAJQCCgCMBFIAlAIKAFkEUgCUAqAAjARSAJQC5gCMBa0AlAR0AHoFrQCUBHQAegWtAJQEdAB6BHT/owWDAGUEigBOBYMAZQSKAE4FgwBlBIoATgUJAJQC1AB9BQkAlALUAFIFCQCUAtQANwTYAEsEHgBJBNgASwQeAEkE2ABLBB4ASQTYAEsEHgBJBNgASwQeAEkE4AAtAqoACgTgAC0CqgAKBOAALQLSAAoFPACABHMAdwU8AIAEcwB3BTwAgARzAHcFPACABHMAdwU8AIAEcwB3BTwAgARzAHcHCwAvBfAAIwTjAAgD6wAMBOMACATTAFAEBgBRBNMAUAQGAFEE0wBQBAYAUQd+//wGwgBIBYEAaQSGAE4Eev+lBHr/pQQ/ACUEmgAIBJoACASaAAgEmgAIBJoACASaAAgEmgAIBIAATwPgAHYD4AB2A+AAdgPgAHYB/v+pAf4AhgH+/6cB/v+cBNwAdgS9AE4EvQBOBL0ATgS9AE4EvQBOBIgAaQSIAGkEiABpBIgAaQQ+AAYEmgAIBJoACASaAAgEgABPBIAATwSAAE8EgABPBHoAYQPgAHYD4AB2A+AAdgPgAHYD4AB2BKcAVgSnAFYEpwBWBKcAVgTdAHYB/v+RAf7/rwH+/7oB/gAXAf4AfQPWACYEXgB2A7cAdgO3AHYDtwB2A7cAdgTcAHYE3AB2BNwAdgS9AE4EvQBOBL0ATgRkAHUEZAB1BGQAdQQ3AD8ENwA/BDcAPwQ3AD8EPwAlBD8AJQQ/ACUEiABpBIgAaQSIAGkEiABpBIgAaQSIAGkGCQAnBD4ABgQ+AAYEKwBBBCsAQQQrAEEFTgARBOn/QgYR/0oCqP9OBZf/tAVH/0EFbf/CAqX/hQVOABEFDQCUBIUAlATTAFAFrQCUAkQApQUOAJQG/wCUBa0AlAWDAGUFGwCUBOAALQTjAAgFDQAmAkT/vgTjAAgEhABWBGUAYgSGAH0CpQCjBF0AfwSaAI0EigBOBMEAkwP4ABYEWQA0AqX/wwRdAH8EigBOBF0AfwaUAGUEhQCUBHQAmQTYAEsCRAClAkT/vgRyAC8FKACZBQ4AlAULADIFTgARBQ0AlAR0AJkEhQCUBaYAkgb/AJQFrQCUBYMAZQWuAJkFGwCUBTkAZgTgAC0FDQAmBFAAVgRJAFEEkgCEBIoATgR/AH0ELQBOA+sADAQGAB8ESQBR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ALoAuwABAL8AvwABAMEAwQABAMMAxAABAMcAxwABAMsAywABAM0AzgABANAA0QABANMA0wABANoA3gABAOEA4QABAOUA5QABAOcA6QABAOsA+wABAP0A/QABAP8BAQABAQMBAwABAQgBCQABARYBGgABARwBHAABASABIgABASQBJwADASoBKwABATMBNAABATYBNgABATsBPAABAUEBRAABAUcBSAABAUsBTQABAVEBUQABAVQBWAABAV0BXgABAWIBYgABAWQBZAABAWgBaAABAWoBbAABAW4BbgABAXABcAABAdUB2wACAewCAAABAgQCBAABAg0CDQABAg8CDwABAhYCGAABAhoCGwABAh0CHQABAiECIQABAiMCJQABAisCKwABAjACMgABAjQCNAABAkICQgABAkUCRQABAkcCRwABAkoCTQABAnkCfQABAo0CkgABApUC/QABAwADvwABA8EDwQABA8MDzQABA88D2AABA9oD9QABA/kD+QABA/sEAgABBAQEBgABBAkEDQABBA8EmgABBJ0EngABBKAEoQABBKMEpgABBLAFDAABBQ4FGAABBRsFKAABAAEAAwAAABAAAAAWAAAAIAABAAEArQACAAEAqACsAAAAAgACAKgArAAAASQBJwAFAAEAAAAWADAACgAFAEYATgBYAGIAbAAEREZMVABqY3lybABuZ3JlawBybGF0bgB2AAVjcHNwAGBrZXJuAGxrZXJuAGZrZXJuAHRrZXJuAHwAAQAAAAEAZAACAAgAAgEyCAgAAgAIAAIAzAQuAAIACAACAjIP/AACAAgAAgBIAIAATgAAAFQAAABaAAAAYAAAAAAAAQAAAAAAAQAEAAAAAgAEAAMAAAACAAQAAQAAAAIABAACAAEriAAFACQASAABGRIABAAAAAMZBhkcGQwAAP//AAIAAAACAAD//wACAAAAAwAA//8AAgAAAAQAAP//AAIAAAABAAIZDgAEAAAZVBt4AAQABQAA/68AAAAA/4gAAP8sAAAAAAAAAAAAAAAAAAAAAAAA/4gAAAAAAAAAARv2AAQAAAApGXwZihlKGtgZ2BmmGgQZtBnuGlYafBj+GcYZBByiGRYdBBukGqoZChkQHWoZVBoaGgQZphxMGgQZXhloGaYZmBsKHEwaNBxMGRYZchnGGXIZpgABLvAABAAAAIUeQh4I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AVAADgFRAA8BXQAOAWL/5gFk/+YBZgAOAWz/5gFt/+cBbwAOAXAADwPQAAsD0QAPA9z/5gPdAA4EBf/mBA3/5gQQAA4EEwAPBBUADwQeAA4ELgALBDAACwQyAAsENP/lBDX/6ASS/+YElP/lBJX/6ASh/+YAAQD6AAgACgAUABUAFgAXABgAGQAaABsAHAAdACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgBlAGcAgQCDAIQAjACPAJEAkwCxALIAswC0ALUAtgC3ALgAuQC6ANIA0wDUANUA1gDXANgA2QDaANsA3ADdAN4A3wDgAOEA4gDjAOQA5QDmAOcA6ADpAS8BMwE1ATcBOQE7AUEBQwFFAUkBSwFMAVgBWQGxAbcBvAG/ApUClgKYApoCmwKcAp0CngKfAqACoQKiAqMCpAKlAqYCpwKoAqkCqgKrAqwCrQKuAq8CsAKxArICswK0AtEC0wLVAtcC2QLbAt0C3wLhAuMC5QLnAukC6wLtAu8C8QLzAvUC9wL5AvsC/QL+AwADAgMEAwYDCAMKAwwDDgMQAxMDFQMXAxkDGwMdAx8DIQMjAyUDJwMpAysDLQMvAzEDMwM1AzcDOQM7Az0DPwNAA0IDRANGA0gDoQOiA6MDpAOlA6YDpwOpA6oDqwOsA60DrgOvA7ADsQOyA7MDtAO1A7YDtwO4A8gDyQPKA8sDzAPNA84DzwPQA9ED0gPTA9QD1QPWA9cD2APZA9oD2wPcA90D7gPwA/ID9AQJBAsEDQQiBCgELgSYBJ0EoQUiBSQAAwHv//UB8P/uA5v/9QADAA3/5gBB//QAYf/vAAMASv/uAFv/6gHw//AAAwBb/8EB///mAkv/6AADAEoAEQBYADIAWwARAAMAW//lAf//6wJL/+0AOwCyABAA0v/gANP/6ADUABAA1v/gANkAFADdABAA4f/hAOb/4ADtABMA8gAQAPn/4AEEABABCP/oAQ0AEAEX/+gBGf/gARv/6AEd/+gBH//oASH/6AE5/+ABQf/oAUX/4AFH/+EBSP/gAUn/4QFK/+ABTf/hAVAAEAFRABABWP/pAWL/3wFk/94BZgAQAWr/6AFs/98Bbv/yAW8AEAFwABAD0QAQA9j/6APb/+gD3P/gBAX/4AQI/+gEC//oBA3/3wQT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/+0EM//mBDT/4QQ3/+IEkv/SBJT/4QSX/+IEof/TACkAR//sAEj/7ABJ/+wAS//sAFX/7ACU/+wAmf/sArz/7AK9/+wCvv/sAr//7ALA/+wC2P/sAtr/7ALc/+wC3v/sAuD/7ALi/+wC5P/sAub/7ALo/+wC6v/sAuz/7ALu/+wC8P/sAvL/7ARS/+wEVP/sBFb/7ARY/+wEWv/sBFz/7ARe/+wEYP/sBHT/7AR2/+wEeP/sBHz/7AS3/+wExP/sBMb/7AA2AAYAEAALABAADQAUAEEAEgBH/+gASP/oAEn/6ABL/+gAVf/oAGEAEwCU/+gAmf/oAYQAEAGFABABhwAQAYgAEAGJABACvP/oAr3/6AK+/+gCv//oAsD/6ALY/+gC2v/oAtz/6ALe/+gC4P/oAuL/6ALk/+gC5v/oAuj/6ALq/+gC7P/oAu7/6ALw/+gC8v/oA/YAEAP3ABAD+gAQBFL/6ARU/+gEVv/oBFj/6ARa/+gEXP/oBF7/6ARg/+gEdP/oBHb/6AR4/+gEfP/oBLf/6ATE/+gExv/oAEoAR/+0AEj/tABJ/7QAS/+0AEwAFABPABQAUAAUAFP/egBV/7QAV/9kAFsACwCU/7QAmf+0Adv/ZAK8/7QCvf+0Ar7/tAK//7QCwP+0Asb/egLH/3oCyP96Asn/egLK/3oC2P+0Atr/tALc/7QC3v+0AuD/tALi/7QC5P+0Aub/tALo/7QC6v+0Auz/tALu/7QC8P+0AvL/tAMU/3oDFv96Axj/egMg/2QDIv9kAyT/ZAMm/2QDKP9kBFL/tARU/7QEVv+0BFj/tARa/7QEXP+0BF7/tARg/7QEZv96BGj/egRq/3oEbP96BG7/egRw/3oEcv96BHT/tAR2/7QEeP+0BHr/egR8/7QEt/+0BLv/egTE/7QExv+0BMgAFATKABQEzAAUBNn/ZAABAPQABAAGAAsADAAlACcAKAApACoALwAwADMANAA1ADYAOAA6ADsAPAA9AD4APwBJAEoATABPAFEAUgBTAFYAWABaAFsAXQBfAJYAnQCyAYQBhQGHAYgBiQHyAfQB9QH3AfoCBQJKAk0CXwJhAmIClQKWApgCmgKbApwCnQKeAp8CoAKhAqICowKkAqUCqwKsAq0CrgKvArQCvQK+Ar8CwALFAsYCxwLIAskCygLPAtAC0QLTAtUC1wLZAtsC3QLfAuEC4gLjAuQC5QLmAucC6ALpAuoC9AMCAwQDBgMIAwoDDQMPAxEDEgMTAxQDFQMWAxcDGAMaAxwDHgMpAysDLQM7Az0DPgM/A0ADQgNEA0oDSwNMA00DTgNPA1ADUQNSA1MDXgNfA2ADYQNiA2gDaQNqA28DgQOCA4MDhAOIA4kDigOTA+4D8APyA/QD9QP2A/cD+gP8A/0EOQQ7BD0EPwRBBEMERQRHBEkESwRNBE8EUQRSBFMEVARVBFYEVwRYBFkEWgRbBFwEXQReBF8EYARlBGYEZwRoBGkEagRrBGwEbQRuBG8EcARxBHIEegSLBIwEjQSOBI8EkASzBLQEtgS6BLsEvQTDBMUEyATJBMsEzQTQBNIE0wTUBNcE2gTdBN4E3wTgBOEE4wABADUABgALAJYAsQCyALMAtAC9AMEAxwGEAYUBhwGIAYkCBQIGAgcDoQOiA6MDpAOlA6YDqQOqA6sDrAOtA64DrwOwA7EDsgOzA7QDtQO2A7cDuAO7A78DwQPFA/YD9wP6BOUE5gTqBO0E8wT4AKcAEP8HABL/BwAl/04ALv8NADgAFABF/94AR//rAEj/6wBJ/+sAS//rAFP/6wBV/+sAVv/mAFn/6gBa/+gAXf/oAJT/6wCZ/+sAm//qALL/TgGG/wcBiv8HAY7/BwGP/wcCBf/AAk3/wAKa/04Cm/9OApz/TgKd/04Cnv9OAp//TgKg/04Ctf/eArb/3gK3/94CuP/eArn/3gK6/94Cu//eArz/6wK9/+sCvv/rAr//6wLA/+sCxv/rAsf/6wLI/+sCyf/rAsr/6wLL/+oCzP/qAs3/6gLO/+oCz//oAtD/6ALR/04C0v/eAtP/TgLU/94C1f9OAtb/3gLY/+sC2v/rAtz/6wLe/+sC4P/rAuL/6wLk/+sC5v/rAuj/6wLq/+sC7P/rAu7/6wLw/+sC8v/rAwD/DQMU/+sDFv/rAxj/6wMpABQDKwAUAy0AFAMw/+oDMv/qAzT/6gM2/+oDOP/qAzr/6gM+/+gDTf/AA07/wANP/8ADUP/AA1H/wANS/8ADU//AA2j/wANp/8ADav/AA/X/6AP9/04D/v/eBDn/TgQ6/94EO/9OBDz/3gQ9/04EPv/eBD//TgRA/94EQf9OBEL/3gRD/04ERP/eBEX/TgRG/94ER/9OBEj/3gRJ/04ESv/e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AK0E3wACAK0E3QACAKoDQAACAKkE4wACAK0ExgACAdQExAACAK0D/AACAKkE0AACAK0DKgACAdQE2wACAK0E4AACAK0E3gACAKoDQQACAKkE5AACAK0EyQACAKkDAgACAdQEywACAK0DBAACAKkDBgACAdQEzQACAK0DHwACAKkDJQACAdQE2AACAK0D8AACAKkE4QACAK0D7gACAKgEygACAKkDAwACAdQEzAACAK0DBQACAKkDBwACAdQEzgACAK0DIAACAKkDJgACAdQE2QACAK0D8QACAKkE4gACAK0D7wACAKgDGQACAKkDGwACAdQE1gACAK0EvAACAKwDGgACAKkDHAACAdQE1wACAK0EvQACAKwDDAACAKkDDgACAdQE0QACAK0EsgACAKgCqgACAKoCtAACAKkEiwACAK0D9AACAKgEjQACAKsEjwACAKoDDQACAKkDDwACAdQE0gACAK0EswACAKgCxQACAKoCzwACAKkEjAACAK0D9QACAKgEjgACAKsEkAACAKoCwgACAKkCwQACAKgEYgACAKsC9gACAKoEuQACAKwEcwACAKkEewACAK0EdQACAKgEdwACAKsEeQACAKoEdAACAKkEfAACAK0EdgACAKgEeAACAKsEegACAKoEgQACAKkEiQACAK0EgwACAKgEhQACAKsEhwACAKoEggACAKkEigACAK0EhAACAKgEhgACAKsEiAACAKoCmwACAKkEOQACAK0CmgACAKgEOwACAKsCnQACAKoEtAACAKwCowACAKkEUQACAK0CogACAKgEUwACAKsEVQACAKoEtgACAKwCpwACAKkEYwACAK0CpgACAKgEYQACAKsC9QACAKoEuAACAKwCtgACAKkEOgACAK0CtQACAKgEPAACAKsCuAACAKoEtQACAKwCvgACAKkEUgACAK0CvQACAKgEVAACAKsEVgACAKoEtwACAKwCxwACAKkEZgACAK0CxgACAKgEaAACAKsCyQACAKoEuwACAKwCzAACAKkEfgACAK0CywACAKgEgAACAKsDMAACAKoEvwACAKwCrAACAKkEZQACAK0CqwACAKgEZwACAKsCrgACAKoEugACAKwCsQACAKkEfQACAK0CsAACAKgEfwACAKsDLwACAKoEvgACAKwE0wADAKoAqQTcAAMAqgCpAAIAEQAlACkAAAArAC0ABQAvADQACAA2ADsADgA9AD4AFABFAEkAFgBLAE0AGwBPAFQAHgBWAFsAJABdAF4AKgCBAIEALACDAIMALQCGAIYALgCJAIkALwCNAI0AMACYAJsAMQDQANAANQAA\",\r\n  \"Roboto-MediumItalic.ttf\": \"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BGH/0QQI//YGcP+qBHwACgTmAAoFSgBgBcoAPgQ/AGwEn/+iBmUAYgRqAFsEagAJBdIAOwSpADIEJgAOBJwANARGAAcD1gAeB+8ACQTO/9oC3v/1At7/8wLeAAsC3gAWAt4AJQLeAAUC3gA0A5kAkQKaAQgDwgAJBBr/hwSSADsFGQArBQAAKwQQABQFDQArBAkAFARXAAkEXgA5BD8ACQR2/5oB7wDoA4UBBAAA/ScD2QDcA9sAFgPsANwD3ADbA58ACQOBAQQDgQEFAugAiQLoAGYC6AB+AugAiQLoAJgC6AB4AugApwVKAGwFcwBrBVUAKwWsAG4FrgBtBAkAqwRfABwEN/+BBJf/0QRJ/9gEDgAxA4UBBQGt/7gGZgA7BIsARQH8/wAEc/+pBHP/2QRz/8kEcwATBHMATARzACIEcwBXBHMAMQRzADcEcwD4Ah//BAIf/wQCEQAjAhH/fAIRACMEPwAJBMEATAQQAFYEZgAQBB4ANgRyADcEbgAtBHoAMgRv/8gEdwA2BCgAOgRmAC4EOP+fA5sAqwTmACQDp//vBhX/fgPoAAkEmf/bBOcAIgS2AAkB+AAAAqMAQAUvACAFLwAgBG4AKwS6AJ0Clv/lBSX/owUl/6MFJf+jBSX/owUl/6MFJf+jBSX/owURAF8EYwAmBGMAJgRjACYEYwAmAjIANwIyADcCMgA3AjIANwWBACYFWQBiBVkAYgVZAGIFWQBiBVkAYgUUAFgFFABYBRQAWAUUAFgEvQChBC8AHAQvABwELwAcBC8AHAQvABwELwAcBC8AHAQNADcEKAA6BCgAOgQoADoEKAA6AgcAIwIHACMCBwAjAgcAIwRSAA0EZwA4BGcAOARnADgEZwA4BGcAOARRAEoEUQBKBFEASgRRAEoDzf+8A83/vAUl/6MELwAcBSX/owQvABwFJf+jBC8AHAURAF8EDQA3BREAXwQNADcFEQBfBA0ANwURAF8EDQA3BREAJgT1ADgEYwAmBCgAOgRjACYEKAA6BGMAJgQoADoEYwAmBCgAOgRjACYEKAA6BUkAZgRm//kFSQBmBGb/+QVJAGYEZv/5BUkAZgRm//kFgQAmBFAADQIyADcCBwATAjIANwIHACMCMgA3AgcAIwIy/44B+v91AjIANwaCADcD7AAgBE8ABAIV/wQE5wAmBAwAEQQxACYB+gAgBDEAJgH6/6YEMQAmApAAIAQxACYC1gAgBYEAJgRSAA0FgQAmBFIADQWBACYEUgANBFIADQVZAGIEZwA4BVkAYgRnADgFWQBiBGcAOATiACYCvgARBOIAJgK+/58E4gAmAr4AEQS0ACYD/wAbBLQAJgP/ABsEtAAmA/8AGwS0ACYD/wAbBLQAJgP/ABsEugCdApYAPwS6AJ0ClgA/BLoAnQK+AD8FFABYBFEASgUUAFgEUQBKBRQAWARRAEoFFABYBFEASgUUAFgEUQBKBRQAWARRAEoG1QC1BcIAeQS9AKEDzf+8BL0AoQSu/+UD6P/mBK7/5QPo/+YErv/lA+j/5gdF/40GjgAOBVcAFgRjACoEV/+WBFf/lgQeAGMEdv+aBHb/mgR2/5oEdv+aBHb/mgR2/5oEdv+aBF4AOQPCAAkDwgAJA8IACQPCAAkB7wAaAe8AGgHvABoB7wAaBLYACQSZADsEmQA7BJkAOwSZADsEmQA7BGYAOARmADgEZgA4BGYAOAQeAGwEdv+aBHb/mgR2/5oEXgA5BF4AOQReADkEXgA5BFcACQPCAAkDwgAJA8IACQPCAAkDwgAJBIMAPwSDAD8EgwA/BIMAPwS3AAkB7wAOAe8AGgHvABoB+f+XAe8AGgO5//MEPAAJA5sACQObAAkDmwAJA5sACQS2AAkEtgAJBLYACQSZADsEmQA7BJkAOwRDAAkEQwAJBEMACQQWAA8EFgAPBBYADwQWAA8EHgBjBB4AYwQeAGMEZgA4BGYAOARmADgEZgA4BGYAOARmADgF2gCLBB4AbAQeAGwEC//WBAv/1gQL/9YFJf+jBMf/ugXl/8IClv/GBW0AJgUh/7gFRAAeApAACQUl/6ME5gAmBGMAJgSu/+UFgQAmAjIANwTnACYGyQAmBYEAJgVZAGIE9AAmBLoAnQS9AKEE5v/AAjIANwS9AKEEYQA7BEMAKARjABECkABmBDwAVwR3ACEEZwA4BJ3/3gPaAGQEOP+fApAARAQ8AFcEZwA4BDwAVwZhAFIEYwAmBFIAKwS0ACYCMgA3AjIANwRPAAQFAAArBOcAJgTkAJkFJf+jBOYAJgRSACsEYwAmBXoAJQbJACYFgQAmBVkAYgWCACsE9AAmBREAXwS6AJ0E5v/ABC8AHAQoADoEbwAXBGcAOARd/8gEDQA3A83/vAPo/7oEKAA6A0EAFgP/ABsB+gAgAgcAIwHy/wIESgAiA83/vAbVALUFwgB5BtUAtQXCAHkG1QC1BcIAeQS9AKEDzf+8AUwAkQJ6AJ0EGwAzAhX/BAGtAI0GyQAmBsMADwUl/6MELwAcBGMAJgV6ACUEKAA6BG8AFwWFAHYFnwA/BPEAqAPuAHUINAA4CSYAYgS2AB8D+AAXBREAXwQNADcEvQChA+0AdQIyADcHbv+kBlX/sAIyADcFJf+jBC8AHAUl/6MELwAcB0X/jQaOAA4EYwAmBCgAOgViAEsEGQA0BBkANAdu/6QGVf+wBLYAHwP4ABcFegAlBG8AFwV6ACUEbwAXBVkAYgRnADgFUABhBGUANAVQAGEEZQA0BSAASAQZACAE5ACZA83/vATkAJkDzf+8BOQAmQPN/7wFWgDEBEMAbQbFACwGSAAjBF8AOAUl/6MELwAcBSX/owQvABwFJf+jBC8AHAUl/6MELwAcBSX/owQvABwFJf+jBC8AHAUl/6MELwAcBSX/owQvABwFJf+jBC8AHAUl/6MELwAcBSX/owQvABwFJf+jBC8AHARjACYEKAA6BGMAJgQoADoEYwAmBCgAOgRjACYEKAA6BGMAJgQoADoEYwAmBCgAOgRjACYEKAA6BGMAJgQoADoCMgA3AgcAIwIy//8B+v/jBVkAYgRnADgFWQBiBGcAOAVZAGIEZwA4BVkAYgRnADgFWQBiBGcAOAVZAGIEZwA4BVkAYgRnADgFZgBcBHoANAVmAFwEegA0BWYAXAR6ADQFZgBcBHoANAVmAFwEegA0BRQAWARRAEoFFABYBFEASgV3AFgEwABKBXcAWATAAEoFdwBYBMAASgV3AFgEwABKBXcAWATAAEoEvQChA83/vAS9AKEDzf+8BL0AoQPN/7wEff/0BLoAnQPbAFQFWgDEBEMAbQRSACsDQQAWBewAVQSg//IEUAANBNsAJATbACQEUgAAA0H/xwUUAD8EJAAoBL0AoQPtAFIE5v/AA+j/ugRDACgERv/CBgQAfARpAA0EaQAmBGkADQRpAFgEfQBxBJEASwR9AIwEkQBzBUkAZgRm//kFgQAmBFIADQUl/6MELwAcBGMAJgQoADoCMv/PAgf/gAVZAGIEZwA4BOIAJgK+AAwFFABYBFEASgTI/4UE5gAmBF0AEAURACYEXwA4BREAJgRfADgFgQAm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BiYB7QAAAAcARACXAB7///+j/lgEqwWwBiYAJQAAAQcApAFrAAMAC7YDDgUBATlWACs0AP//ABz+XQPRBFAGJgBFAAABBwCkAKYACAALtgI7MQAATVYAKzQA//8AJv5fBLwFsAYmACkAAAEHAKQBMAAKAAu2BBACAABDVgArNAD//wA6/lUD8ARRBiYASQAAAQcApAD9AAAAC7YBLAAAAE1WACs0AP///5r+VQQBBI0GJgJNAAAABwCkAQ8AAP//AAn+XQP7BI0GJgJCAAAABwCkAOAACP///+P+nwHKBDoGJgCNAAABBwCtA0IACgAOtAEHAgEBuP9/sFYAKzQAAAAAABEA0gADAAEECQAAAF4AAAADAAEECQABABoAXgADAAEECQACAAwAeAADAAEECQADACgAhAADAAEECQAEACgAhAADAAEECQAFACYArAADAAEECQAGACYA0gADAAEECQAHAEAA+AADAAEECQAIAAwBOAADAAEECQAJACYBRAADAAEECQALABQBagADAAEECQAMABQBagADAAEECQANAFwBfgADAAEECQAOAFQB2gADAAEECQAQAAwCLgADAAEECQARABoCOgADAAEECQAZAAwCLgBDAG8AcAB5AHIAaQBnAGgAdAAgADIAMAAxADEAIABHAG8AbwBnAGwAZQAgAEkAbgBjAC4AIABBAGwAbAAgAFIAaQBnAGgAdABzACAAUgBlAHMAZQByAHYAZQBkAC4AUgBvAGIAbwB0AG8AIABNAGUAZABpAHUAbQBJAHQAYQBsAGkAYwBSAG8AYgBvAHQAbwAgAE0AZQBkAGkAdQBtACAASQB0AGEAbABpAGMAVgBlAHIAcwBpAG8AbgAgADMALgAwADAAOAA7ACAAMgAwADIAMwBSAG8AYgBvAHQAbwAtAE0AZQBkAGkAdQBtAEkAdABhAGwAaQBjAFIAbwBiAG8AdABvACAAaQBzACAAYQAgAHQAcgBhAGQAZQBtAGEAcgBrACAAbwBmACAARwBvAG8AZwBsAGUALgBHAG8AbwBnAGwAZQBDAGgAcgBpAHMAdABpAGEAbgAgAFIAbwBiAGUAcgB0AHMAbwBuAEcAbwBvAGcAbABlAC4AYwBvAG0ATABpAGMAZQBuAHMAZQBkACAAdQBuAGQAZQByACAAdABoAGUAIABBAHAAYQBjAGgAZQAgAEwAaQBjAGUAbgBzAGUALAAgAFYAZQByAHMAaQBvAG4AIAAyAC4AMABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBwAGEAYwBoAGUALgBvAHIAZwAvAGwAaQBjAGUAbgBzAGUAcwAvAEwASQBDAEUATgBTAEUALQAyAC4AMABSAG8AYgBvAHQAbwBNAGUAZABpAHUAbQAgAEkAdABhAGwAaQBjAAAAAwAA//QAAP9qAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAIACAAI//8ADwABAAIADgAAAAAAAAIoAAIAWQAlAD4AAQBEAF4AAQBqAGoAAQBwAHAAAQB1AHUAAQCBAIEAAQCDAIMAAQCGAIYAAQCJAIkAAQCLAJYAAQCYAJ8AAQChAKMAAQClAKYAAQCoAK0AAwCxALEAAQC6ALsAAQC/AL8AAQDBAMEAAQDDAMQAAQDHAMcAAQDLAMsAAQDNAM4AAQDQANEAAQDTANMAAQDaAN4AAQDhAOEAAQDlAOUAAQDnAOkAAQDrAPsAAQD9AP0AAQD/AQEAAQEDAQMAAQEIAQkAAQEWARoAAQEcARwAAQEgASIAAQEkAScAAwEqASsAAQEzATQAAQE2ATYAAQE7ATwAAQFBAUQAAQFHAUgAAQFLAU0AAQFRAVEAAQFUAVgAAQFdAV4AAQFiAWIAAQFkAWQAAQFoAWgAAQFqAWwAAQFuAW4AAQFwAXAAAQHVAdsAAgHsAgAAAQIEAgQAAQINAg0AAQIPAg8AAQIWAhgAAQIaAhsAAQIdAh0AAQIhAiEAAQIjAiUAAQIrAisAAQIwAjIAAQI0AjQAAQJCAkIAAQJFAkUAAQJHAkcAAQJKAk0AAQJ5An0AAQKNApIAAQKVAv0AAQMAA78AAQPBA8EAAQPDA80AAQPPA9gAAQPaA/UAAQP5A/kAAQP7BAIAAQQEBAYAAQQJBA0AAQQPBJoAAQSdBJ4AAQSgBKEAAQSjBKYAAQSwBQwAAQUOBRgAAQUbBSgAAQABAAMAAAAQAAAAFgAAACAAAQABAK0AAgABAKgArAAAAAIAAgCoAKwAAAEkAScABQABAAAAFgAwAAoABQBGAE4AWABiAGwABERGTFQAamN5cmwAbmdyZWsAcmxhdG4AdgAFY3BzcABga2VybgBsa2VybgBma2VybgB0a2VybgB8AAEAAAABAGQAAgAIAAIBMggIAAIACAACAMwELgACAAgAAgIyD/wAAgAIAAIASACAAE4AAABUAAAAWgAAAGAAAAAAAAEAAAAAAAEABAAAAAIABAADAAAAAgAEAAEAAAACAAQAAgABK4gABQAkAEgAARkSAAQAAAADGQYZHBkMAAD//wACAAAAAgAA//8AAgAAAAMAAP//AAIAAAAEAAD//wACAAAAAQACGQ4ABAAAGVQbeAAEAAUAAP+vAAAAAP+IAAD/LAAAAAAAAAAAAAAAAAAAAAAAAP+IAAAAAAAAAAEb9gAEAAAAKRl8GYoZShrYGdgZphoEGbQZ7hpWGnwY/hnGGQQcohkWHQQbpBqqGQoZEB1qGVQaGhoEGaYcTBoEGV4ZaBmmGZgbChxMGjQcTBkWGXIZxhlyGaYAAS7wAAQAAACFHkIeCB2MHZId0B8GICw2/jEQNS4oph5+MiYs/h/6JToefh5+IUYefh5+Hn4pyCQ+Hn4f0CS8I04eXCf8Io4dvCdeHZgfUiPEL/4eLCEIJbwh4h8sHiwiOB98IZAgYh8sIM4ewh3sHbIfph4sJkYdvB/6HZggmCCYIJgefh/6HZgefh5+HfodvB/6HZgi7CZGHn4efiCYIJghRiDOHZ4mRh5+Hn4d+h3eHhom0B/6HqAdqB7CHiwdsh2YHagdvB2yHagd7B2yHhoe5B2yHn4f+h2YHn4gzh6gIM4eoB2oHagdqB/6HZgd+h7CHsIeLCFGHbIhRh2yIUYdsibQJkYdvB3GH9AmRiCYHuQAAToCAAQAAAD0LPwoeCh4MzAtEiukKIorsjxcK8AtKCiKKKo1YDJqLW4s6i0+KJYyLCvcMqwofjf+KGA3WBemF6YohCvOM3YokC1UKJAy7iiKM8Qs2Ch4ONgoeCh4KHgoci2QLbYobCigKGYrlihmK6QoiiiKKIooii1uLRItEi0SLRItEi0SLRIrpCuyK7IrsiuyKIooiiiKKIooijIsKH4ofih+KH4XpiiEKIQohCiEKIQokCiQLRItEi0SK6QrpCukK6QoiiuyKH4rsih+K7IofiuyKH4rsih+F6YrwC0oLSgtKC0oF6YXphemF6YoiiiEKIoohCiKKIQrzivOK84tbi1uLW4tPjIsKJAyLCvcK9wr3ChsKGwocihmKGYoZihmKGYoZihmKGwobChsKGwobChmKGYoZihsKKAooCigKKAobChsKGwoci0+LT4tPjIsKJAoeCh4KHgXpi0SLRItEi0SLRItEi0SLRItEi0SLRItEi0SK7IofiuyKH4rsih+K7IofiuyKH4rsih+K7IofiuyKH4oiiiEKIoohCiKKIQoiiiEKIoohCiKKIQoiiiEKIQyLCiQMiwokDIsKJAXpi0SK7IoiiiEK84oiiiKF6YrwCvALSgXphemKIooqivOLW4s6iiQLOookC0+K9wAAjn8AAQAAD0IPfwAGAAUAAAAAAAAAAD/xQAA/4gAAAAAAAAAAP/sAAAAAP+4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAD/5AAAAAAAAAAAAAAAAAARAAAAAAAAABIAAAAA/5MAAAAAAAD/6wAA/9X/7QAAAAAAAAAAAAD/6v/p/+3/9f/rAAD/iAAAAAAAAP/1AAD/8f+NAAD/xP/u/87/9f/0AAAAAAAAAAAAAAAAAAD/Jv+n/7//2f+N/+MAEv+rAAD/2P/s/8v/vwANAAD/q//v/40AAAAAAAAAAAAAAAAAAAAAAAAAAP+/AAAAAP/yAAAAAAAAAAAAAAAAAAAAAAAAAAD/7f/vAAAAAAAAAAD/8AAA/+YAAP/tAAAAAAAAAAAAAAAA/6EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/38AAP/zAAAAAAAAAAAAAAAAAAAAAAAA//EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/6gAAAAAAAAAAAAAAAAAA/+wAAAAA/4oAAAAAAAAAAAAAAAAAAAAAAAAAAP/xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/8kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/6r/5v/rAAD/5wAAAAAAAAAA/+H/5//rAAAAAAAAAAAAAAAAAAD+Yf5J/0r/Xv86/70ABwAAAAD/P/9sAAD/UAAAAAAAAAAA/zoAAAAAAAD/m//m/+kAAP/hAAAAAAAA//H/2P/n/+UAAAAAAAAAAAAAAAAAAP6fAAD/8wAA/2cAAAAA/6wAAAAAAA8AAP/z/9r/4v+sAAD/ZwAAAAD/F/8J/6H/rP+i/+QAEP+vAAD/mv+0/7n/dQAAAAD/r//t/6IAAAAAAAAAAP/r/+0ADf/mAAAADQAAAAD/5f/s/+sAAAAAAA0AAAANAAAAAAAAAAAAAAAAAAAAAAAAAAD/vwAAAAD/8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAD/4wAAAAAAAAAAAAAAAAAAAAAAAAAA//UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//UAAP/x/40AAP/E/+7/zv/1//QAAAAAAAAAAAAAAAI7XAAEAAA8bEESACIAHgAAAAAAAAAAAAAAAAARAAAAAAAA/+MAAAAAABEAAAAAABL/5AARAAD/5QAAAAAAAP/kAAAAAAASAAAAAAAA/+z/xQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4gAAAAA/7gAAP/OAAAAAAAAAAAAAAAAAAD/rAAAAAD/8wAAAA8AAAAAAAD/fwAAAAAAAAAAAAAAAAAAAAAAAP/X//EAAP/xAAAAAAAAAAAAAAAAAAAAAAAAAAD/5v/nAAD/4QAAAAAAAP/nAAD/qgAAABEAAAAAAAAAAAAR/+v/0QAAAAAADgAAAAAAAAAAAAAAAAAAAAD/7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//H/5v/hAAD/2AAAAAAAAP/nAAD/mwAAAAAAAAAAAAAAAAAA/+X/owAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//L/8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/rAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/z//Sv+9AAD/bAAA/2r+YQAAAAf+SQAA/5IAAAAA/zoAAP8P/1D/DP8/AAAABwAHAAAAAP86AAD/QAAAAAAAAAAA/8AAAP/2/8kAAAAA/zMAAAAA//n/6wAAAAD/5wAAAAAAAAAAAAD/yP+tAAAAAAAAAAAAAAAA/6H/vf/pAAAAAAAAAAD+cQAAABL/bAAA/8oAAAAA/6UAAP+7/73/6f+cAAAAAAASAAAAAP+lAAD/0gAAAAD/7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/Y/+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+P/9QAA//EAAAAAAAAAAAAAAAAAAAAAAAAAAP/yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/3n/zgAA//EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/7QAAAAD/5gAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAA/+0AAAAA//AAAAAAAAAAAAAAAAAAAAAA/+4AAP/x/4j/zgAAAAAAAP/1/4IAAP/HABEAAAAAAAD/yQAS//T/rAAA/8T/rf+NAAAAAAAAAAAAAAAAAAAAAAAA/4r/8QAA/+sAAAAAAAAAAAAAAAAAAAAAAAAAAP/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/qAAD/kwAA/9AAAAAA/+EAAP/1/+sAAAAAAAAAAAAAAAD/6v/V/+3/7f/rAAAAAAAAAAAAAAAA/8//8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/5r/of/kAAD/tAAA/7P/F/+5ABD/Cf/x/8sAAP/t/6IAAP9+/3X/fP97AAAAEAAQ/6//r/+i/xn/mwAAAAAAAAAA//UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/1P/zAAD/9QAAAAD/I//ZAAD/rwAAAAAAAAAA/7UAAAAA/9IAAP/SAAAAAAAA/7T/tP+1AAAAAAAA/9j/v//jAAD/7AAN/+n/Jv/LABH/p//zAAAAAP/v/40AAAAA/78AAP+7AAAAEgAS/6v/q/+N/6D/xgAAAAAAAAAAAAAAAAAAAAAAAP/yAAAAAP/AAAAAAAAAAAAAAAAAAAAAAAAA/78AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/yAAAAAP/AAAAAAAAAAAAAAAAAAAAAAAAA/78AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/uAAAAAP/sAAAAAAAAAAAAAAAA/+oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+4AAP/xAAD/zgAAAAAAAP/1/4IAAP/HABEAAAAAAAD/yQAS//T/rAAA/8T/rf+NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+oAAAAAAAAAAAAAAAAAAAAA/+v/6//qAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+UAAAAAAAD/8wAAAAAAAAAAAAAAAAAAAAD/6P/JAAAAAAAAAAAAAAAAAAD/8wAAAAAAD//aAAD+nwAAAAAAAAAA/6gAAAAA/2cAAP/H//MAAP/1AAAAAAAA/6z/rP9n/z4AAAAAAAAAAAAA/6EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACNuoABAAAPM5CWgAjACIAAAAAAAD/6wAAAAAAAAAAAAAAAAAA/+0AAAAA/9UAAAAAAAD/k//Q/+kAAAAAAAAAAP/qAAAAAAAA/+r/9f/t/+sAAAAAAAAAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAD/5AAAAAAAAAAA/+MAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAEgAAAAD/8QAAAAAAAP/1//X/9P/v/+7/8QAA/87/iP+NAAAAAP/GAAD/ggAAAAAAAAAM/8T/rQAA/93/xwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/8f/PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/7QAAAAAAAP/v/+0AAAAAAAAAAP/mAAAAAAAAAAAAAAAAABQAAAAAAAAAAP/wAAAAAP/tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//P/8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/8f+KAAAAAAAAAAAAAAAAAAAAAAAA//AAAAAAAAAAAAAAAAAAAAAAAAD/6wAAAAAAAP/qAAAAAAAAAAAAAAAAAAD/6wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+v/6gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/oQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/6gAAAAAAAP/uAAD/7AAAAAAAAAAAAAAAAAAAAAD/8gAAAAAAAAAA/+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+/AAAAAP/Y/8AAAAAAAAAAAAAAAAAAAP/zAAD/8QAAAAD/8QAAAAAAAAAAAAAADwAAAAAAAAAA/38AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/8X/iP/OAAAAAP+4AAD/7AAAAAAAAAAAAAD/rAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+P/v/+N/7v/y//Z/7//oP/YAAD/q//sAAAAEv/G//AAEf8mABEAAP+nAAD/4gAAABL/oP/z//MADf/v/6v/jf/pAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+/AAAAEwAA//L/3wAA/9UAAP/hABP/fwAA/wIAAAAA/4MAAP8HAAAAAAAAAAD/a/9GAAD/q/9rAAAAAAATABMAAAAA/+T/of+i/3v/uf+s/3UAAP+aAAD/r/+0AAAAEP+b//AAD/8XABAAAP8J/7z/xAAAABD/Gf/x//EAAP/t/6//ov+zAAAAAP/h/9X/3//n/+3/4QAAAAAAAP/LAAAAAAAAAAAAAAAA/34ADgAA/8QAAAAAAAAAAAAAAAAAAAAAAAD/y//VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/7QAA/9wAAAAA/+YAAAAAAAAAAAASABAAAAAAAAAAAP9zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/5v/rAA0AAP/s/+3/6wAAAAAAAAAN/+UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/9f/jAAAAAAAAAAAAAAAAAAAAAAAA//EAAAAAAAAAAAAAAAAAAAAAAAD/8QAAAAAAAAAAAAD/7wAAAAAAAAAA/+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+0AAAAAP/V/7sAAAAAAAAAAAAAAAAAAP/wAAAAAAAAAAD/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/h/+YAAAAA/+f/6f/lAAD/8QAAAAD/2AAAAAAAAAAAAAAAAAAAAAD/mwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//P/1P+1/9L/2f/k/9IAAAAAAAD/tP/1AAAAAAAAAAAAAP8jAAAAAP+vAAAAAAAAAAAAAAAAAAAAAAAA/7T/tQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/8kAAAAAAAAAAP/lAAAAAAAAAAAAAP/oAAAAAAAAAAAAAAAAAAAAAAAAAAD/8/9n//UAAAAA//MAAAAAAAD/rAAPAAAAAAAAAAAAAP6fAAD/4gAAAAAAAAAAAAD/PgAAAAD/2gAA/6z/ZwAAAAAAAAAAAAAAAP/rAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/n/+YAAAAA/+f/6//rAAAAAAAAAAD/4QAAAAAAAAAAAAAAAAAAAAD/qgAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/8gAAAAAAAAAA/+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+/AAAAAP/Y/8AAAAAAAAAAAAAAAAAAAAAA/+sAAAAAAAAAAAAAAAAAAP/tAAAAAP/VAAAAAAAA/5P/0P/pAAAAAAAAAAD/6gAAAAAAAP/q//X/7f/rAAAAAP/xAAAAAAAA//X/9f/0/+//7v/xAAD/zgAA/40AAAAA/8YAAP+CAAAAAAAAAAz/xP+tAAD/3f/HAAAAAAAAAAAAAAAAAAD/7AAAAAAAAAAA/+UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAE/8XAAEAI/+8AAEAAwATAJ0AsgAKAAYAAAALAAABhAAAAYUAAAGHAAABiAAAAYkAAAP2AAAD9wAAA/oAAAABABIABgALABAAEgCWALIBhAGFAYYBhwGIAYkBigGOAY8D9gP3A/oAAQDEAA4AAQDK//QAAQDK/+oAAQDKABMAAQGF/6EAAgAHABAAEAABABIAEgABAJYAlgACALIAsgADAYYBhgABAYoBigABAY4BjwABAAIAvQAAA8EAAAACAL3/9APB//QAAgC4/8sAzf/kAAIAuP/FAMr/tAACAMr/6gGF/6QAAwOmABYDtQAWA7gAFgADALUAAAC3AAAAxAAAAAMAvv/5AMT/xADH/9oAAwC1//MAt//wAMT/6gAEALP/8wDEAA0Dpf/zA7L/8wAEAL7/+QDGAAsAx//qAMoADAAFACMAAAC4/+UAuf/RAMQAEQDK/8gABQCz/+YAuP/CAMQAEAOl/+YDsv/mAAUAI/+8ALj/5QC5/9EAxAARAMr/yAAGALv/tADI/7QAyf+0A7n/tAO//3oDxf96AAgAuP/UAL7/9gDC/+0AxAARAMr/4ADM/+cAzf/lAM7/7gAJALL/5AC0/+QAxP/iA6H/5AOm/9MDqf/kA7X/0wO2/9IDuP/TAAsAEP8tABL/LQCy/80AtP/NAMf/8gGG/y0Biv8tAY7/LQGP/y0Dof/NA6n/zQALABAABAASAAQAu//nAMQADwDI/+cAyf/nAYYABAGKAAQBjgAEAY8ABAO5/+cADABt/i8AfP6pALj/ZwC+/7kAv/8PAMP+9ADG/ysAx/7xAMr/UgDM/vkAzf8DAM7+7AANAAT/0QBt/voAfP9CALj/sgC+/90Av/9+AMP/bgDG/44Ax/9sAMr/pQDM/3EAzf93AM7/aQACABAABgAGAAEACwALAAEAEAAQAAIAEQARAAMAEgASAAIAsgCyAAQBgQGCAAMBhAGFAAEBhgGGAAIBhwGJAAEBigGKAAIBjgGPAAIClAKUAAMD9gP3AAED+gP6AAEEpwSnAAMAFAAG/8MAC//DAL3/2wDC//UAxAAKAMb/8wDK/3IAy//3AYT/wwGF/8MBh//DAYj/wwGJ/8MDvf/3A8H/2wPE//cDxv/3A/b/wwP3/8MD+v/DAAEAKQAMAJYAnQCxALIAswC0ALUAtwC4ALkAuwC9AL4AwADBAMMAxADFAMcAyQDKAM4BhQOhA6UDpgOpA6wDrwOyA7MDtAO1A7YDuAO7A78DwQPFBOUAFQAK/+IADQAUAA7/zwBBABIAYQATAG3/rgB8/80AuP/QALz/6gC+//UAv//GAMAADQDC/+kAw//WAMb/6ADH/7oAyv/pAMz/ywDN/9oAzv/HAY3/0wAYALv/3AC9/+EAvv/1AL//5gDB/+EAwv/rAMP/6QDF//AAxv/nAMj/3ADJ/9wAyv/jAMv/3QDM/84Azf/UAM7/2wO5/9wDu//hA73/3QO//9YDwf/hA8T/3QPF/9YDxv/dABkABv/aAAv/2gC7//AAvf/cAML/7ADEAA8Axv/qAMj/8ADJ//AAyv/IAMv/7wDM/+cBhP/aAYX/2gGH/9oBiP/aAYn/2gO5//ADvf/vA8H/3APE/+8Dxv/vA/b/2gP3/9oD+v/aAB8ABgAMAAsADAC7/+gAvQALAL7/9ADE/9cAxgALAMj/6ADJ/+gAygAMAYQADAGFAAwBhwAMAYgADAGJAAwCBf+/Agb/7QIH/78Duf/oA7//6gPBAAsDxf/qA/YADAP3AAwD+gAMBOb/vwTq/+0E6wANBO3/vwT5AA0E/AANAAEDzf/uAAEDzf/sAAEBHP/xAAIBEQALAWz/5gACAPb/9QGF/7YAAgDt/8gBHP/xAAIA7f+lARz/7gACAPb/yAGF/6EAAwDZAAAA5gAAAWwAAAADANn/cQDt/54BX//cAAMADQAUAEEAEQBhABMAAwDZ/98A5v/gAWz/4AAEARkAFAQFABQEDQAWBKEAFgAEAA3/5gBB//QAYf/vAU3/7QAFAO3/7gD2/74A/v/5ATr/7AFt/+wABgDS/9EA1v/RATn/0QFF/9ED3P/RBJL/0QAIANL/6wDW/+sBOf/rAUX/6wPc/+sEDf/zBJL/6wSh//MACADZABUA7QAVAUn/5AFK/+UBTP/kAWL/4wFk/+IBbP/kAAgA9v/wAP7/+gEJ//EBIP/zATr/8QFj//MBZf/tAW3/3gAIAO3/uAD2/+cBCf/wASD/8QE6/+sBY//1AW3/7AGF/6QACAAK/+IADQAUAA7/zwBBABIAYQATAG3/rgB8/80Bjf/TAAkA9gAAARoAAAPkAAAD7QAABAYAAAQOAAAELwAABDEAAAQzAAAACQD2/50A/v/rAQn/0wEg/9sBOv8+AUr/ugFj//ABZf/yAW3/UAAKAAb/9QAL//UBhP/1AYX/9QGH//UBiP/1AYn/9QP2//UD9//1A/r/9QAKAAb/1gAL/9YBhP/WAYX/1gGH/9YBiP/WAYn/1gP2/9YD9//WA/r/1gAKAAb/6gAL/+oBhP/qAYX/6gGH/+oBiP/qAYn/6gP2/+oD9//qA/r/6gAKAOb/wwD2/88A/v/wATr/zgFJ/+cBTP/fAWL/0QFk/+wBbP+gAW3/0QAMANkAEgDq/+kA9v/XATr/1wFK/9MBTP/WAU3/xQFY/+cBYgANAWQADAFt/9YBbv/yAA0A2QATAOb/xQD2/8oBOv+UAUn/WAFK/38BTP+lAU3/3QFY//IBYv+LAWT/ygFs/3ABbf+iAA0A9v+aAPn/1gD+//IBCf/TASD/2wE6/z4BSP/WAUr/ugFj//ABZf/yAW3/UAQ1/9YElf/WAA0A6v/XAPb/uQD+/+kBCf+yARz/0gEg/8gBOv+gAUr/xQFY/+QBY//MAWX/zAFt/8sBbv/vAA4AI/+8ANkAEwDm/8UA9v/KATr/lAFJ/1gBSv9/AUz/pQFN/90BWP/yAWL/iwFk/8oBbP9wAW3/ogAPAO0AFADyABAA9v/wAPn/8AD+//oBAQAQAQQAEAE6/+wBSP/wAUr/4gFRABABbf/wAXAAEAQ1//AElf/wABIA2f+uAOYAEgDr/+AA7f+tAO//1gD9/98BAf/SAQf/4AEc/84BLv/dATD/4gE4/+ABQP/gAUr/6QFN/9oBX/+9AWn/3wFsABEAFADu/+0A9v+hAPn/0QD+/+8BCf/TASD/2wE0/+0BOv8+AUT/7QFI/9EBSv+6AV7/7QFj//ABZf/yAW3/UAPl/+0EEf/tBB//7QQ1/9EElf/RABUA9v+lAPn/4QD+//oBCf/TARr/0gEg/9sBOv9NAUj/4QFK/7sBY//4AWX/8wFt/18D5P/SA+3/0gQG/9IEDv/SBC//0gQx/9IEM//SBDX/4QSV/+EAFQDt/+8A7v/wAPL/8wD+//kBBP/zARr/9AE0//ABRP/wAVH/8wFe//ABcP/zA+T/9APl//AD7f/0BAb/9AQO//QEEf/wBB//8AQv//QEMf/0BDP/9AAXAAb/8gAL//IA9v/0AP7//AEJ//UBGv/1ATr/9QFt//UBhP/yAYX/8gGH//IBiP/yAYn/8gPk//UD7f/1A/b/8gP3//ID+v/yBAb/9QQO//UEL//1BDH/9QQz//UAGAD3/7QBA/+0ARj/egEe/7QBIv+0AUL/tAFg/7QBYf+0AWv/tAPf/7QD4f96A+P/tAPm/7QD6P9kBAH/tAQH/7QEDP+0BBr/tAQc/7QEHf+0BCf/egQp/7QEK/96BDj/tAAdANL/4gDU/+QA1v/iANn/4QDa/+QA3f/kAN7/6QDt/+QA8v/rAQT/6wEz/+QBOf/iAUP/5AFF/+IBUP/kAVH/6wFd/+QBZv/kAW//5AFw/+sD0P/pA9z/4gPd/+QEEP/kBB7/5AQu/+kEMP/pBDL/6QSS/+IAHgD3//ABA//wARj/3gEc/+sBHv/wASL/8AFC//ABYP/wAWH/8AFr//ACD//rAiv/6wI0/+sD3//wA+H/3gPj//AD5v/wBAH/8AQH//AEDP/wBBr/8AQc//AEHf/wBCf/3gQp//AEK//eBDj/8AUM/+sFD//rBRT/6wAfAAb/wAAL/8AA3v/rAOH/5wDm/8MA9v/OAP7/8AEZ/8gBOv/NAUf/5wFJ/+cBTP/fAWL/0QFk/+wBbP+gAW3/0AGE/8ABhf/AAYf/wAGI/8ABif/AA9D/6wP2/8AD9//AA/r/wAQF/8gELv/rBDD/6wQy/+sENP/nBJT/5wAfANL/4wDU/+UA1v/jANn/4gDa/+UA3f/lAN7/6QDy/+oBBP/qATP/5QE5/+MBQ//lAUX/4wFQ/+UBUf/qAV3/5QFm/+UBbP/kAW//5QFw/+oD0P/pA9z/4wPd/+UEDf/kBBD/5QQe/+UELv/pBDD/6QQy/+kEkv/jBKH/5AAgABv/8gDS//EA1P/1ANb/8QDa//QA3f/1AN7/8wDm//EBGf/0ATP/9AE5//EBQ//0AUX/8QFQ//UBXf/0AWL/8gFk//IBZv/1AWz/8gFv//UD0P/zA9z/8QPd//QEBf/0BA3/8AQQ//QEHv/0BC7/8wQw//MEMv/zBJL/8QSh//AAIgDtACsA8gAUAPb/4wD3AAEA+f/wAPz/5gD+//UBAwABAQQAFAEeAAEBIgABATr/0wFCAAEBSP/wAUr/3wFRABQBYAABAWEAAQFrAAEBbf/jAXAAFAPfAAED4wABA+YAAQQBAAEEBwABBAwAAQQaAAEEHAABBB0AAQQpAAEENf/wBDgAAQSV//AAIgBt/i8AfP6pANn/WADmAAUA6v+9AOv/SQDt/v4A7/8TAPb/aAD9/w4A/v9GAP//EwEB/wcBAgASAQf/DgEJ/xEBHP8dASD/rAEu/xUBMP88ATj/DgE6/2oBQP9JAUr/DAFM/z8BTf7xAVj/wAFf/u8BY/8xAWX/XwFp/woBbAAFAW3/MAFu/9UAIwAE/9EAbf76AHz/QgDZ/6kA5gAPAOr/5ADr/6AA7f90AO//gAD2/7IA/f99AP7/ngD//4ABAf95AQIADwEH/30BCf9/ARz/hgEg/9oBLv+BATD/mAE4/30BOv+zAUD/oAFK/3wBTP+aAU3/bAFY/+YBX/9rAWP/kgFl/60Baf97AWwADwFt/5EBbv/yACcA7P/5AO0AFADw//kA8f/5APP/+QD0//kA9f/5APb/7QD4//kA+f/tAPr/+QD7//kA/P/bAP7/+QEA//kBBf/5ASv/+QE2//kBOv/tATz/+QE+//kBSP/tAUr/7QFT//kBVf/5AVf/+QFc//kBbf/tA+D/+QPi//kD5//5A+z/+QQC//kEI//5BCX/+QQ1/+0EN//5BJX/7QSX//kAKgDs/+8A7f/uAO7/8ADw/+8A8f/vAPP/7wD0/+8A9f/vAPb/7gD4/+8A+v/vAPv/7wD+/+8BAP/vAQX/7wEJ//QBIP/xASv/7wE0//ABNv/vATr/7wE8/+8BPv/vAUT/8AFT/+8BVf/vAVf/7wFc/+8BXv/wAW3/7wPg/+8D4v/vA+X/8APn/+8D7P/vBAL/7wQR//AEH//wBCP/7wQl/+8EN//vBJf/7wAzANL/vgDW/74A5v/JAOz/9QDw//UA8f/1APP/9QD0//UA9f/1APb/3wD4//UA+v/1APv/9QD+//UBAP/1AQX/9QEJ/+0BGv/vASD/6wEr//UBNv/1ATn/vgE6/98BPP/1AT7/9QFF/74BTP/pAVP/9QFV//UBV//1AVz/9QFj//UBbf/gA9z/vgPg//UD4v/1A+T/7wPn//UD7P/1A+3/7wQC//UEBv/vBA7/7wQj//UEJf/1BC//7wQx/+8EM//vBDf/9QSS/74El//1AAEBhf+nAAEB8P/HAAEB8P/xAAEB8AANAAEAWwALAAEBhf+2AAEBhf+kAAEAgf/fAAEASgANAAIB9f/pAkv/6QACAfD/twH1//AAAgBYAA4Agf9WADoAsgAPANL/5gDUAA4A1v/mANkAEwDaAA4A3QAOAN4ACwDh/+UA5v/mAOf/9ADtABIA8gAPAPb/5wD5/+gA/v/3AQQADwENAA8BGf/mATMADgE5/+YBOv/nAUMADgFF/+YBR//lAUj/6AFJ/+UBSv/oAUz/5AFQAA4BUQAPAV0ADgFi/+YBZP/mAWYADgFs/+YBbf/nAW8ADgFwAA8D0AALA9EADwPc/+YD3QAOBAX/5gQN/+YEEAAOBBMADwQVAA8EHgAOBC4ACwQwAAsEMgALBDT/5QQ1/+gEkv/mBJT/5QSV/+gEof/mAAEA+gAIAAoAFAAVABYAFwAYABkAGgAbABwAHQAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4AZQBnAIEAgwCEAIwAjwCRAJMAsQCyALMAtAC1ALYAtwC4ALkAugDSANMA1ADVANYA1wDYANkA2gDbANwA3QDeAN8A4ADhAOIA4wDkAOUA5gDnAOgA6QEvATMBNQE3ATkBOwFBAUMBRQFJAUsBTAFYAVkBsQG3AbwBvwKVApYCmAKaApsCnAKdAp4CnwKgAqECogKjAqQCpQKmAqcCqAKpAqoCqwKsAq0CrgKvArACsQKyArMCtALRAtMC1QLXAtkC2wLdAt8C4QLjAuUC5wLpAusC7QLvAvEC8wL1AvcC+QL7Av0C/gMAAwIDBAMGAwgDCgMMAw4DEAMTAxUDFwMZAxsDHQMfAyEDIwMlAycDKQMrAy0DLwMxAzMDNQM3AzkDOwM9Az8DQANCA0QDRgNIA6EDogOjA6QDpQOmA6cDqQOqA6sDrAOtA64DrwOwA7EDsgOzA7QDtQO2A7cDuAPIA8kDygPLA8wDzQPOA88D0APRA9ID0wPUA9UD1gPXA9gD2QPaA9sD3APdA+4D8APyA/QECQQLBA0EIgQoBC4EmASdBKEFIgUkAAMB7//1AfD/7gOb//UAAwAN/+YAQf/0AGH/7wADAEr/7gBb/+oB8P/wAAMAW//BAf//5gJL/+gAAwBKABEAWAAyAFsAEQADAFv/5QH//+sCS//tADsAsgAQANL/4ADT/+gA1AAQANb/4ADZABQA3QAQAOH/4QDm/+AA7QATAPIAEAD5/+ABBAAQAQj/6AENABABF//oARn/4AEb/+gBHf/oAR//6AEh/+gBOf/gAUH/6AFF/+ABR//hAUj/4AFJ/+EBSv/gAU3/4QFQABABUQAQAVj/6QFi/98BZP/eAWYAEAFq/+gBbP/fAW7/8gFvABABcAAQA9EAEAPY/+gD2//oA9z/4AQF/+AECP/oBAv/6AQN/98EEwAQBBUAEAQm/+gEKP/oBCr/6AQ0/+EENf/gBJL/4ASU/+EElf/gBKH/3wAEAFj/7wBb/98Amv/uAfD/zQAEAA0AFABBABEAVv/iAGEAEwAFADj/0QMp/9EDK//RAy3/0QTa/9EABQAj/7wAWP/vAFv/3wCa/+4B8P/NAAUAW/+zAfD/eQH1//EB///xAkv/8wAFAA0ADwBBAAwAVv/rAGEADgJL/+kABgAQ/4QAEv+EAYb/hAGK/4QBjv+EAY//hAAIAAT/0QBW/7kAW//LAG3++gB8/0IAgf9JAIb/mQCJ/6EACQHt/+4B7//1AfD/8QHy//IDZ//uA5P/8gOb//UDnP/uA53/7gAJAe3/5QHv//EB8P/rAfL/6QNn/+UDk//pA5v/8QOc/+UDnf/lAAEAhQAEAAwAPwBfAJYAnQCyANIA1ADVANYA1wDYANkA2gDbANwA3QDeAOAA4QDiAOMA5ADlAOYA5wDoAOkA6gDrAOwA7QDuAO8A8QD2APcA+AD7APwA/gD/AQABAwEEAQUBCgENARgBGQEaASIBLgEvATABMwE0ATUBNwE5ATsBQwFEAVQBVgFYAVwBXQFeAYUDyQPLA8wDzgPPA9AD0QPSA9MD1gPXA9gD2gPbA9wD3QPeA98D4QPiA+QD5QPmA+cD7QQBBAUEBgQLBA0EDgQPBBAEEQQSBBMEFAQVBBYEGgQcBB0EHgQfBCYEJwQrBC0ELgQvBDAEMQQyBDMEkgSWBJcEmgScBJ0EnwShAEQABgANAAsADQDt/7UA8v++APf/tgED/7YBBP++ARj/2gEaAAsBHP/mAR7/tgEgAAwBIv+2AUL/tgFR/74BYP+2AWH/tgFjAAsBZQALAWv/tgFw/74BhAANAYUADQGHAA0BiAANAYkADQIF/78CDgAOAg//7QISAA4CKgAOAiv/7QIsAA0CLgAOAjT/7QPe//AD3/+2A+H/2gPj/7YD5AALA+b/tgPtAAsD9gANA/cADQP6AA0EAf+2BAYACwQH/7YEDP+2BA4ACwQU//AEFv/wBBr/tgQc/7YEHf+2BCf/2gQp/7YEK//aBC8ACwQxAAsEMwALBDj/tgUF/78FDP/tBQ//7QUQAA4FFP/tBRUADQBFANL/MwDU//UA1v8zANr/8ADd//UA3v/rAOH/5gDm/8IA7P/vAPD/7wDx/+8A8//vAPT/7wD1/+8A9v/OAPj/7wD6/+8A+//vAP7/7wEA/+8BBf/vARn/yAEr/+8BM//wATb/7wE5/zMBOv/NATz/7wE+/+8BQ//wAUX/MwFH/+YBSf/mAUz/3wFQ//UBU//vAVX/7wFX/+8BXP/vAV3/8AFi/9ABZP/rAWb/9QFs/58Bbf/QAW//9QPQ/+sD3P8zA93/8APg/+8D4v/vA+f/7wPs/+8EAv/vBAX/yAQN/6wEEP/wBB7/8AQj/+8EJf/vBC7/6wQw/+sEMv/rBDT/5gQ3/+8Ekv8zBJT/5gSX/+8Eof+sAEYA0v/mANb/5gDa//IA3v/uAOH/6ADm/+YA7P/xAO7/8QDw//EA8f/xAPP/8QD0//EA9f/xAPb/0AD4//EA+v/xAPv/8QD+//EBAP/xAQX/8QEZ/+cBK//xATP/8gE0//EBNv/xATn/5gE6/84BPP/xAT7/8QFD//IBRP/xAUX/5gFH/+gBSf/oAVP/8QFV//EBV//xAVz/8QFd//IBXv/xAWL/5wFk/+0BbP/mAW3/0APQ/+4D3P/mA93/8gPg//ED4v/xA+X/8QPn//ED7P/xBAL/8QQF/+cEDf/nBBD/8gQR//EEHv/yBB//8QQj//EEJf/xBC7/7gQw/+4EMv/uBDT/6AQ3//EEkv/mBJT/6ASX//EEof/nAA8ACv/iAA0AFAAO/88AQQASAEr/6gBW/9gAWP/qAGEAEwBt/64AfP/NAIH/oACG/8EAif/AAY3/0wJL/80AEAA4/7sAOv/tAD3/0AK0/9ADKf+7Ayv/uwMt/7sDPf/QAz//0AP0/9AEi//QBI3/0ASP/9AE2v+7BN3/7QTf/+0AEAAu/+4AOf/uArD/7gKx/+4Csv/uArP/7gMA/+4DL//uAzH/7gMz/+4DNf/uAzf/7gM5/+4Eff/uBH//7gTc/+4AEAAu/+wAOf/sArD/7AKx/+wCsv/sArP/7AMA/+wDL//sAzH/7AMz/+wDNf/sAzf/7AM5/+wEff/sBH//7ATc/+wAEQA6ABQAOwAZAD0AFgK0ABYDOwAZAz0AFgM/ABYD7gAZA/AAGQPyABkD9AAWBIsAFgSNABYEjwAWBN0AFATfABQE4QAZABMAU//oAYUACQLG/+gCx//oAsj/6ALJ/+gCyv/oAxT/6AMW/+gDGP/oBGb/6ARo/+gEav/oBGz/6ARu/+gEcP/oBHL/6AR6/+gEu//oABUABv/yAAv/8gBa//MAXf/zAYT/8gGF//IBh//yAYj/8gGJ//ICz//zAtD/8wM+//MD9f/zA/b/8gP3//ID+v/yBIz/8wSO//MEkP/zBN7/8wTg//MAUQAG/7oAC/+6ANL/MwDW/zMA2v/xAN7/6wDh/+UA5v/DAOz/7gDu/9cA8P/uAPH/7gDz/+4A9P/uAPX/7gD2/8wA+P/uAPr/7gD7/+4A/v/uAQD/7gEF/+4BGf/HASv/7gEz//EBNP/XATb/7gE5/zMBOv/JATz/7gE+/+4BQ//xAUT/1wFF/zMBR//lAUn/5QFM/98BU//uAVX/7gFX/+4BXP/uAV3/8QFe/9cBYv/QAWT/6wFs/6ABbf/NAYT/ugGF/7oBh/+6AYj/ugGJ/7oD0P/rA9z/MwPd//ED4P/uA+L/7gPl/9cD5//uA+z/7gP2/7oD9/+6A/r/ugQC/+4EBf/HBA3/qwQQ//EEEf/XBB7/8QQf/9cEI//uBCX/7gQu/+sEMP/rBDL/6wQ0/+UEN//uBJL/MwSU/+UEl//uBKH/qwAiADj/2QA6/+QAO//sAD3/3QIFAA4CTQAOArT/3QMp/9kDK//ZAy3/2QM7/+wDPf/dAz//3QNNAA4DTgAOA08ADgNQAA4DUQAOA1IADgNTAA4DaAAOA2kADgNqAA4D7v/sA/D/7APy/+wD9P/dBIv/3QSN/90Ej//dBNr/2QTd/+QE3//kBOH/7ABbAAb/ygAL/8oA0v/SANb/0gDa//QA3v/tAOH/4QDm/9QA7P/iAO7/7wDw/+IA8f/iAPP/4gD0/+IA9f/iAPb/yQD4/+IA+v/iAPv/4gD+/9EBAP/iAQX/4gEJ/+UBGf/UARr/5gEg/+MBK//iATP/9AE0/+8BNv/iATn/0gE6/8QBPP/iAT7/4gFD//QBRP/vAUX/0gFH/+EBSf/hAVP/4gFV/+IBV//iAVz/4gFd//QBXv/vAWL/1AFj//UBZP/nAWz/qgFt/8kBhP/KAYX/ygGH/8oBiP/KAYn/ygPQ/+0D3P/SA93/9APg/+ID4v/iA+T/5gPl/+8D5//iA+z/4gPt/+YD9v/KA/f/ygP6/8oEAv/iBAX/1AQG/+YEDf/TBA7/5gQQ//QEEf/vBB7/9AQf/+8EI//iBCX/4gQu/+0EL//mBDD/7QQx/+YEMv/tBDP/5gQ0/+EEN//iBJL/0gSU/+EEl//iBKH/0wApAEf/7ABI/+wASf/sAEv/7ABV/+wAlP/sAJn/7AK8/+wCvf/sAr7/7AK//+wCwP/sAtj/7ALa/+wC3P/sAt7/7ALg/+wC4v/sAuT/7ALm/+wC6P/sAur/7ALs/+wC7v/sAvD/7ALy/+wEUv/sBFT/7ARW/+wEWP/sBFr/7ARc/+wEXv/sBGD/7AR0/+wEdv/sBHj/7AR8/+wEt//sBMT/7ATG/+wANgAGABAACwAQAA0AFABBABIAR//oAEj/6ABJ/+gAS//oAFX/6ABhABMAlP/oAJn/6AGEABABhQAQAYcAEAGIABABiQAQArz/6AK9/+gCvv/oAr//6ALA/+gC2P/oAtr/6ALc/+gC3v/oAuD/6ALi/+gC5P/oAub/6ALo/+gC6v/oAuz/6ALu/+gC8P/oAvL/6AP2ABAD9wAQA/oAEARS/+gEVP/oBFb/6ARY/+gEWv/oBFz/6ARe/+gEYP/oBHT/6AR2/+gEeP/oBHz/6AS3/+gExP/oBMb/6ABKAEf/tABI/7QASf+0AEv/tABMABQATwAUAFAAFABT/3oAVf+0AFf/ZABbAAsAlP+0AJn/tAHb/2QCvP+0Ar3/tAK+/7QCv/+0AsD/tALG/3oCx/96Asj/egLJ/3oCyv96Atj/tALa/7QC3P+0At7/tALg/7QC4v+0AuT/tALm/7QC6P+0Aur/tALs/7QC7v+0AvD/tALy/7QDFP96Axb/egMY/3oDIP9kAyL/ZAMk/2QDJv9kAyj/ZARS/7QEVP+0BFb/tARY/7QEWv+0BFz/tARe/7QEYP+0BGb/egRo/3oEav96BGz/egRu/3oEcP96BHL/egR0/7QEdv+0BHj/tAR6/3oEfP+0BLf/tAS7/3oExP+0BMb/tATIABQEygAUBMwAFATZ/2QAAQD0AAQABgALAAwAJQAnACgAKQAqAC8AMAAzADQANQA2ADgAOgA7ADwAPQA+AD8ASQBKAEwATwBRAFIAUwBWAFgAWgBbAF0AXwCWAJ0AsgGEAYUBhwGIAYkB8gH0AfUB9wH6AgUCSgJNAl8CYQJiApUClgKYApoCmwKcAp0CngKfAqACoQKiAqMCpAKlAqsCrAKtAq4CrwK0Ar0CvgK/AsACxQLGAscCyALJAsoCzwLQAtEC0wLVAtcC2QLbAt0C3wLhAuIC4wLkAuUC5gLnAugC6QLqAvQDAgMEAwYDCAMKAw0DDwMRAxIDEwMUAxUDFgMXAxgDGgMcAx4DKQMrAy0DOwM9Az4DPwNAA0IDRANKA0sDTANNA04DTwNQA1EDUgNTA14DXwNgA2EDYgNoA2kDagNvA4EDggODA4QDiAOJA4oDkwPuA/AD8gP0A/UD9gP3A/oD/AP9BDkEOwQ9BD8EQQRDBEUERwRJBEsETQRPBFEEUgRTBFQEVQRWBFcEWARZBFoEWwRcBF0EXgRfBGAEZQRmBGcEaARpBGoEawRsBG0EbgRvBHAEcQRyBHoEiwSMBI0EjgSPBJAEswS0BLYEugS7BL0EwwTFBMgEyQTLBM0E0ATSBNME1ATXBNoE3QTeBN8E4AThBOMAAQA1AAYACwCWALEAsgCzALQAvQDBAMcBhAGFAYcBiAGJAgUCBgIHA6EDogOjA6QDpQOmA6kDqgOrA6wDrQOuA68DsAOxA7IDswO0A7UDtgO3A7gDuwO/A8EDxQP2A/cD+gTlBOYE6gTtBPME+ACnABD/BwAS/wcAJf9OAC7/DQA4ABQARf/eAEf/6wBI/+sASf/rAEv/6wBT/+sAVf/rAFb/5gBZ/+oAWv/oAF3/6ACU/+sAmf/rAJv/6gCy/04Bhv8HAYr/BwGO/wcBj/8HAgX/wAJN/8ACmv9OApv/TgKc/04Cnf9OAp7/TgKf/04CoP9OArX/3gK2/94Ct//eArj/3gK5/94Cuv/eArv/3gK8/+sCvf/rAr7/6wK//+sCwP/rAsb/6wLH/+sCyP/rAsn/6wLK/+sCy//qAsz/6gLN/+oCzv/qAs//6ALQ/+gC0f9OAtL/3gLT/04C1P/eAtX/TgLW/94C2P/rAtr/6wLc/+sC3v/rAuD/6wLi/+sC5P/rAub/6wLo/+sC6v/rAuz/6wLu/+sC8P/rAvL/6wMA/w0DFP/rAxb/6wMY/+sDKQAUAysAFAMtABQDMP/qAzL/6gM0/+oDNv/qAzj/6gM6/+oDPv/oA03/wANO/8ADT//AA1D/wANR/8ADUv/AA1P/wANo/8ADaf/AA2r/wAP1/+gD/f9OA/7/3gQ5/04EOv/eBDv/TgQ8/94EPf9OBD7/3gQ//04EQP/eBEH/TgRC/94EQ/9OBET/3gRF/04ERv/eBEf/TgRI/94ESf9OBEr/3gRL/04ETP/eBE3/TgRO/94ET/9OBFD/3gRS/+sEVP/rBFb/6wRY/+sEWv/rBFz/6wRe/+sEYP/rBGb/6wRo/+sEav/rBGz/6wRu/+sEcP/rBHL/6wR0/+sEdv/rBHj/6wR6/+sEfP/rBH7/6gSA/+oEgv/qBIT/6gSG/+oEiP/qBIr/6gSM/+gEjv/oBJD/6AS0/04Etf/eBLf/6wS7/+sEv//qBMT/6wTG/+sE2gAUBN7/6ATg/+gAAgAoAJYAlgAWALEAsQANALIAsgAXALMAswACALQAtAADAL0AvQAIAMEAwQAHAMcAxwAVAgUCBQASAgYCBgAJAgcCBwAFA6EDoQADA6IDogAGA6MDpAABA6UDpQACA6YDpgAEA6kDqQADA6oDqgALA6sDqwAGA6wDrAARA60DrgABA68DrwAOA7ADsQABA7IDsgACA7MDswAPA7QDtAAQA7UDtQAEA7YDtgAMA7cDtwABA7gDuAAEA7sDuwAHA78DvwAKA8EDwQAIA8UDxQAKBOUE5QACBOYE5gAFBOoE6gAJBO0E7QAFBPME8wATBPgE+AAUAAIAMgAGAAYAAQALAAsAAQAQABAAAgARABEAAwASABIAAgCyALIAEwCzALMABwC0ALQABgC7ALsABAC9AL0ADADBAMEACwDIAMkABADLAMsABQGBAYIAAwGEAYUAAQGGAYYAAgGHAYkAAQGKAYoAAgGOAY8AAgIFAgUAEQIGAgYADQIHAgcACQKUApQAAwOhA6EABgOlA6UABwOmA6YACAOpA6kABgOsA6wAEAOyA7IABwO1A7UACAO2A7YADwO4A7gACAO5A7kABAO7A7sACwO9A70ABQO/A78ADgPBA8EADAPEA8QABQPFA8UADgPGA8YABQP2A/cAAQP6A/oAAQSnBKcAAwTmBOYACQTqBOoADQTrBOsACgTtBO0ACQT5BPkACgT6BPoAEgT8BPwACgABAIYABgALAJYAsgDUANUA1wDaANwA3QDeAOAA4QDiAOMA5ADlAOYA7ADuAPcA/AD+AP8BBAEFAQoBDQEYARkBGgEuAS8BMAEzATQBNQE3ATkBOwFDAUQBVAFWAVgBXAFdAV4BhAGFAYcBiAGJAgUCGQIoAikCKgPIA8kDywPMA80DzgPPA9AD0QPSA9MD1APWA9cD2APaA9sD3APdA94D3wPhA+ID4wPkA+UD5gPnA+0D9gP3A/oD/wQBBAUEBgQLBAwEDQQOBA8EEAQRBBIEEwQUBBUEFgQZBBoEHAQdBB4EHwQmBCcEKwQtBC4ELwQwBDEEMgQzBJIElgSXBJoEnASdBJ8EoQUDBQUFDAUQAAIAawAGAAYAAQALAAsAAQCWAJYAHACyALIAHQDUANUACQDaANoAAwDeAN4ACgDkAOQACQDmAOYACQDsAOwACwDuAO4ABAD3APcADAD8APwADQD+AP4ADQD/AP8ADAEEAQUADQEKAQoADQENAQ0ADwEYARgAEAEZARkAFgEaARoAAgEuAS4ADAEvAS8ACAEwATAACwEzATMAAwE0ATQABAE1ATUABQE3ATcABQE5ATkABQFDAUMAAwFEAUQABAFYAVgAEQFcAVwACwFdAV0AAwFeAV4ABAGEAYUAAQGHAYkAAQIFAgUAGAIZAhkABwIoAioABwPIA8gADgPJA8kACAPNA80AHgPOA88ABQPQA9AACgPRA9EADwPSA9IAHwPTA9MACAPUA9QADgPYA9gAEQPaA9oAIAPbA9sAEwPcA9wAFAPdA90AAwPeA94AEgPfA98ABgPhA+EAEAPiA+IADAPjA+MAFQPkA+QAAgPlA+UABAPmA+YABgPnA+cACwPtA+0AAgP2A/cAAQP6A/oAAQP/A/8ADgQBBAEABgQFBAUAFgQGBAYAAgQLBAsAEwQMBAwAFQQNBA0AFwQOBA4AAgQQBBAAAwQRBBEABAQTBBMADwQUBBQAEgQVBBUADwQWBBYAEgQZBBkADgQaBBoABgQcBB0ABgQeBB4AAwQfBB8ABAQmBCYAEQQnBCcAEAQrBCsAEAQtBC0ADAQuBC4ACgQvBC8AAgQwBDAACgQxBDEAAgQyBDIACgQzBDMAAgSSBJIAFASWBJYACASXBJcACwSaBJoAIQScBJwACQSdBJ0ACASfBJ8ABQShBKEAFwUDBQMABwUFBQUAGQUMBQwAGgUQBRAAGwACAFoABgAGAAAACwALAAEAJQApAAIALAA0AAcAOAA+ABAARQBHABcASQBJABoATABMABsAUQBUABwAVgBWACAAWgBaACEAXABeACIAigCKACUAlgCWACYAsgCyACcBhAGFACgBhwGJACoB8gHyAC0B9wH3AC4B+gH7AC8CBQIFADECSgJKADICTQJNADMCXwJfADQCYQJiADUClQKWADcCmAKYADkCmgLAADoCxQLKAGECzwLfAGcC4QLqAHgC8wL1AIIC9wL3AIUC+QL5AIYC+wL7AIcC/QL9AIgDAAMAAIkDAgMCAIoDBAMEAIsDBgMGAIwDCAMIAI0DCgMKAI4DDAMYAI8DGgMaAJwDHAMcAJ0DHgMeAJ4DKQMpAJ8DKwMrAKADLQMtAKEDLwMvAKIDMQMxAKMDMwMzAKQDNQM1AKUDNwM3AKYDOQM5AKcDOwM7AKgDPQNFAKkDSgNTALIDXgNiALwDaANqAMEDbwNvAMQDgAOEAMUDiAOKAMoDkwOTAM0D7gPuAM4D8APwAM8D8gPyANAD9AP3ANED+gP+ANUEOQRhANoEYwRjAQMEZQRyAQQEegR6ARIEfQR9ARMEfwR/ARQEiwSQARUEsgS2ARsEuAS4ASAEugS7ASEEvQS9ASMEwQTDASQExQTFAScExwTJASgEywTLASsEzQTNASwEzwTVAS0E1wTXATQE2gTaATUE3AThATYE4wTkATwAAgCgAAYABgAEAAsACwAEABAAEAAIABEAEQALABIAEgAIALIAsgAbANIA0gAKANMA0wADANQA1AANANYA1gAKANoA2gAGAN0A3QANAN4A3gAOAOEA4QARAOwA7AABAO4A7gAHAPAA8QABAPIA8gASAPMA9QABAPcA9wACAPgA+AABAPkA+QAUAPoA+wABAP4A/gABAQABAAABAQMBAwACAQQBBAASAQUBBQABAQgBCAADAQ0BDQAQARcBFwADARgBGAATARkBGQAXARoBGgAFARsBGwADAR0BHQADAR4BHgACAR8BHwADASEBIQADASIBIgACASsBKwABATMBMwAGATQBNAAHATYBNgABATkBOQAKATwBPAABAT4BPgABAUEBQQADAUIBQgACAUMBQwAGAUQBRAAHAUUBRQAKAUcBRwARAUgBSAAUAVABUAANAVEBUQASAVMBUwABAVUBVQABAVcBVwABAVwBXAABAV0BXQAGAV4BXgAHAWABYQACAWYBZgANAWoBagADAWsBawACAW8BbwANAXABcAASAYEBggALAYQBhQAEAYYBhgAIAYcBiQAEAYoBigAIAY4BjwAIAgUCBQAZAg4CDgAMAg8CDwAJAhICEgAMAhYCFgAPAicCJwAPAioCKgAMAisCKwAJAiwCLAAWAi0CLQAPAi4CLgAMAjQCNAAJApQClAALA80DzQAcA9AD0AAOA9ED0QAQA9gD2AADA9sD2wADA9wD3AAKA90D3QAGA94D3gAVA98D3wACA+AD4AABA+ED4QATA+ID4gABA+MD4wACA+QD5AAFA+UD5QAHA+YD5gACA+cD5wABA+gD6AAdA+wD7AABA+0D7QAFA/YD9wAEA/oD+gAEBAEEAQACBAIEAgABBAUEBQAXBAYEBgAFBAcEBwACBAgECAADBAsECwADBAwEDAACBA0EDQAYBA4EDgAFBBAEEAAGBBEEEQAHBBMEEwAQBBQEFAAVBBUEFQAQBBYEFgAVBBoEGgACBBwEHQACBB4EHgAGBB8EHwAHBCMEIwABBCUEJQABBCYEJgADBCcEJwATBCgEKAADBCkEKQACBCoEKgADBCsEKwATBC4ELgAOBC8ELwAFBDAEMAAOBDEEMQAFBDIEMgAOBDMEMwAFBDQENAARBDUENQAUBDcENwABBDgEOAACBJIEkgAKBJQElAARBJUElQAUBJcElwABBKEEoQAYBKcEpwALBQUFBQAaBQwFDAAJBQ8FDwAJBRAFEAAMBREFEQAPBRQFFAAJBRUFFQAWAAIA7AAGAAYADAALAAsADAAlACUAAgAmACYAGwAnACcADgApACkABAAsAC0AAQAuAC4ABwAvAC8AGAAwADAADwAxADIAAQA0ADQAHAA4ADgAEAA5ADkABwA6ADoAGQA7ADsAEQA8ADwAHgA9AD0ADQA+AD4AFABFAEUAAwBG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BiAHRgYmBmoGqgYsBdwF4AXkBegGtgbCBs4G2gbmBewAAgcCAOsCjAJNAkwCSwJKAkICAAH/Af4B/QH8AfsB+gH5AfgB9wH2AfUB9AHzAfIB8QHwAe8B7gHtAewCfgKOA0sCkAKPA0oB/QKNApICbATtBO4CBAIFBO8E8ATxAgYE8gIHAggCCQT3AgoCCgT4BPkCCwIMAg0CFAUGBQcCFQIWAhcCGAIZAhoFCgULBQ0FEAUZAhwCHQIeAh8CIAIhAiICIwIkAiUCDgIPAhACEQISAhMCVQInAigCKQIqBRMCKwItAi4CLwIxAjMCkQNMA00DTgNPA1ADUQNSA1MDVANVA1YDVwNYA1kDWgNbA1wDXQNeA18DYANhA2IDYwNkA2UDZgNnA50DaANpA2oDawNsA20DbgNvA3ADcQNyA3MDdAN1A3YDdwN4A3kDegN7A3wDfQUaA38DgAOBA4IDgwOEA4UDhgOHA4gDiQOKA4sDjAONA44DjwOQBR0DkQOSA5QDkwOVA5YDlwOYA5kDmgObA5wDngOfA6AFGwUcBOYE5wToBOkE8wT2BPQE9QT6BPsE/ATqBOsE7AUFBQgFCQUMBQ4FDwIbBREE/QT+BP8FAAUBBQIFAwUEBR4FHwUgBSEFEgUUBRUCMgUXAjQFGAUWAjACJgIsBSYFJwACBwAA+gIBAowB6wHqAekB6AHnAeYB5QHkAeMB4gJNAkwCSwJKAkICAAH/Af4B/QH8AfsB+gH5AfgB9wH2AfUB9AHzAfIB8QHwAe8B7gHtAewCAgIDAo4CkAKPApECjQKSAmwCBAIFAgYCBwIIAgkCCgILAgwCDQIOAg8CEAIRAhICEwIUAhUCFgIXAhgCGgIbBRkCHAIdAh4CHwIgAiECIgIjAiQCJQJVAicCKAIpAioFEwIrAi0CLgIvAjACMQIyAjMCNQI2AjgCNwNKA0sDTANNA04DTwNQA1EDUgNTA1QDVQNWA1cDWANZA1oDWwNcA10DXgNfA2ADYQNiA2MDZANlA2YDZwNoA2kDagNrA2wDbQNuA28DcANxA3IDcwN0A3UDdgN3A3gDeQN6A3sDfAN9A34FGgN/A4ADgQOCA4MDhAOFA4YDhwOIA4kDigOLA4wDjQOOA48DkAUdA5EDkgOUA5MDlQOWA5cDmAOZA5oDmwOcA50DngOfA6AFGwUcBOYE5wToBOkE6gTrBOwE7QTuBO8E8ATxBPIE8wT0BPUE9gT3BPgE+QT6BPsE/AT9BP4E/wUABQEFAgIZBQMFBAUFBQYFBwUIBQkFCgULBQwFDQUOBQ8FEAURBR4FHwUgBSEFEgUUBRUFFwI0BRgFFgImAiwFJgUnAAEAAQF7AAEAAQBLAAEAAQC7AAEAAQA2AAEAAQATAAEAAgMjAyQAAgbkBtgAAgbmBtgAAQbuAAEG8AABBvIAAgABABQAHQAAAAEAAgAvAE8AAQADAEkASwKEAAIAAAABBt4AAQAGAtUC1gLnAugDagNzAAEABgBNAE4C/APpA+sEZAACAAMBlAGUAAAB3wHhAAECOQI/AAQAAgACAKgArAABASQBJwABAAEADAAnACgAKwAzADUARgBHAEgASwBTAFQAVQACAAIAFAAdAAACbwJ4AAoAAgAGAE0ATQAGAE4ATgAEAvwC/AAFA+kD6QADA+sD6wACBGQEZAABAAIABAAUAB0AAAKAAoAACgKLAosACwSoBK8ADAACAAYAGgAaAAAAHAAcAAECZAJpAAICbQJtAAgCbwJ4AAkCfwJ/ABMAAQAUABoAHAJkAmUCZgJnAmgCaQJtAn8CgAKLBKgEqQSqBKsErAStBK4ErwABBd4AAQXgAAEF4gABBeQAAQXmAAEF6AABBeoAAQXsAAEF7gABBfAAAQXyAAEF9AABBfYAAQX4AAEF+gACBfwGAgACBgIGCAACBggGDgACBg4GFAACBhQGGgACBhoGIAACBiAGJgACBiYGLAACBiwGMgACBjIGOAACBjgGPgADBj4GRAZKAAMGSAZOBlQAAwZSBlgGXgADBlwGYgZoAAMGZgZsBnIAAwZwBnYGfAADBnoGgAaGAAMGhAaKBpAABAaOBpQGmgagAAQGnAaiBqgGrgAFBqoGsAa2BrwGwgAFBrwGwgbIBs4G1AAFBs4G1AbaBuAG5gAFBuAG5gbsBvIG+AAFBvIG+Ab+BwQHCgAFBwQHCgcQBxYHHAAFBxYHHAciBygHLgAFBygHLgc0BzoHQAAFBzoHQAdGB0wHUgAGB0wHUgdYB14HZAdqAAYHYgdoB24HdAd6B4AABgd4B34HhAeKB5AHlgAGB44HlAeaB6AHpgesAAYHpAeqB7AHtge8B8IABge6B8AHxgfMB9IH2AAGB9AH1gfcB+IH6AfuAAcILgfmB+wH8gf4B/4IBAAHCCYH+ggACAYIDAgSCBgAAQDrAAoARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAIUAhgCHAIkAigCLAI0AkACSAJQAuwC8AL0AvgC/AMAAwQDCAMMAxADFAMYAxwDIAMkAygDLAMwAzQDOAOoA6wDsAO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+AP8BAAEBAQIBAwEEAQUBBgEHATABNAE2ATgBOgE8AUIBRAFGAUoBTQFaApcCmQK1ArYCtwK4ArkCugK7ArwCvQK+Ar8CwALBAsICwwLEAsUCxgLHAsgCyQLKAssCzALNAs4CzwLQAtIC1ALWAtgC2gLcAt4C4ALiAuQC5gLoAuoC7ALuAvAC8gL0AvYC+AL6AvwC/wMBAwMDBQMHAwkDCwMNAw8DEQMUAxYDGAMaAxwDHgMgAyIDJAMmAygDKgMsAy4DMAMyAzQDNgM4AzoDPAM+A0EDQwNFA0cDSQO5A7oDuwO8A74DvwPAA8EDwgPDA8QDxQPGA8cD3gPfA+AD4QPiA+MD5APlA+YD5wPoA+kD6gPrA+wD7QPvA/ED8wP1BAoEDAQOBBwEIwQpBC8EmQSaBJ4EogUjBSUAAQD6AAgACgAUABUAFgAXABgAGQAaABsAHAAdACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgBlAGcAgQCDAIQAjACPAJEAkwCxALIAswC0ALUAtgC3ALgAuQC6ANIA0wDUANUA1gDXANgA2QDaANsA3ADdAN4A3wDgAOEA4gDjAOQA5QDmAOcA6ADpAS8BMwE1ATcBOQE7AUEBQwFFAUkBSwFMAVgBWQGxAbcBvAG/ApUClgKYApoCmwKcAp0CngKfAqACoQKiAqMCpAKlAqYCpwKoAqkCqgKrAqwCrQKuAq8CsAKxArICswK0AtEC0wLVAtcC2QLbAt0C3wLhAuMC5QLnAukC6wLtAu8C8QLzAvUC9wL5AvsC/QL+AwADAgMEAwYDCAMKAwwDDgMQAxMDFQMXAxkDGwMdAx8DIQMjAyUDJwMpAysDLQMvAzEDMwM1AzcDOQM7Az0DPwNAA0IDRANGA0gDoQOiA6MDpAOlA6YDpwOpA6oDqwOsA60DrgOvA7ADsQOyA7MDtAO1A7YDtwO4A8gDyQPKA8sDzAPNA84DzwPQA9ED0gPTA9QD1QPWA9cD2APZA9oD2wPcA90D7gPwA/ID9AQJBAsEDQQiBCgELgSYBJ0EoQUiBSQB1gACAE0B1wACAFAB2AADAEoATQHZAAMASgBQAAEAAQBKAdUAAgBKAdsAAgBYAdoAAgBYAAEAAwBKAFcAlQAAAAEAAQABAAEAAAADBMEAAgCtAtcAAgCpBMcAAgCtBNQAAgCpBMIAAgCtAtgAAgCpBLEAAgCpBMgAAgCtBGQAAgCtBNUAAgCpA0YAAgCpA0gAAgCpA0cAAgCpA0kAAgCpBMAAAgCpBMUAAgHUBMMAAgCtBLAAAgCpAvEAAgHUA/sAAgCpBM8AAgCtAykAAgHUBNoAAgCtBN8AAgCtBN0AAgCqA0AAAgCpBOMAAgCtBMYAAgHUBMQAAgCtA/wAAgCpBNAAAgCtAyoAAgHUBNsAAgCtBOAAAgCtBN4AAgCqA0EAAgCpBOQAAgCtBMkAAgCpAwIAAgHUBMsAAgCtAwQAAgCpAwYAAgHUBM0AAgCtAx8AAgCpAyUAAgHUBNgAAgCtA/AAAgCpBOEAAgCtA+4AAgCoBMoAAgCpAwMAAgHUBMwAAgCtAwUAAgCpAwcAAgHUBM4AAgCtAyAAAgCpAyYAAgHUBNkAAgCtA/EAAgCpBOIAAgCtA+8AAgCoAxkAAgCpAxsAAgHUBNYAAgCtBLwAAgCsAxoAAgCpAxwAAgHUBNcAAgCtBL0AAgCsAwwAAgCpAw4AAgHUBNEAAgCtBLIAAgCoAqoAAgCqArQAAgCpBIsAAgCtA/QAAgCoBI0AAgCrBI8AAgCqAw0AAgCpAw8AAgHUBNIAAgCtBLMAAgCoAsUAAgCqAs8AAgCpBIwAAgCtA/UAAgCoBI4AAgCrBJAAAgCqAsIAAgCpAsEAAgCoBGIAAgCrAvYAAgCqBLkAAgCsBHMAAgCpBHsAAgCtBHUAAgCoBHcAAgCrBHkAAgCqBHQAAgCpBHwAAgCtBHYAAgCoBHgAAgCrBHoAAgCqBIEAAgCpBIkAAgCtBIMAAgCoBIUAAgCrBIcAAgCqBIIAAgCpBIoAAgCtBIQAAgCoBIYAAgCrBIgAAgCqApsAAgCpBDkAAgCtApoAAgCoBDsAAgCrAp0AAgCqBLQAAgCsAqMAAgCpBFEAAgCtAqIAAgCoBFMAAgCrBFUAAgCqBLYAAgCsAqcAAgCpBGMAAgCtAqYAAgCoBGEAAgCrAvUAAgCqBLgAAgCsArYAAgCpBDoAAgCtArUAAgCoBDwAAgCrArgAAgCqBLUAAgCsAr4AAgCpBFIAAgCtAr0AAgCoBFQAAgCrBFYAAgCqBLcAAgCsAscAAgCpBGYAAgCtAsYAAgCoBGgAAgCrAskAAgCqBLsAAgCsAswAAgCpBH4AAgCtAssAAgCoBIAAAgCrAzAAAgCqBL8AAgCsAqwAAgCpBGUAAgCtAqsAAgCoBGcAAgCrAq4AAgCqBLoAAgCsArEAAgCpBH0AAgCtArAAAgCoBH8AAgCrAy8AAgCqBL4AAgCsBNMAAwCqAKkE3AADAKoAqQACABEAJQApAAAAKwAtAAUALwA0AAgANgA7AA4APQA+ABQARQBJABYASwBNABsATwBUAB4AVgBbACQAXQBeACoAgQCBACwAgwCDAC0AhgCGAC4AiQCJAC8AjQCNADAAmACbADEA0ADQADUAAA==\",\r\n  \"Roboto-Regular.ttf\": \"AAEAAAARAQAABAAQR0RFRqbzo4gAAcFUAAACWEdQT1N/jKrdAAHDrAAAWMBHU1VCm18k/AACHGwAABX2T1MvMpeDsYsAAAGYAAAAYGNtYXDTfF9iAAAWnAAABoJjdnQgO/gmfQAAL3gAAAD+ZnBnbagFhDIAAB0gAAAPhmdhc3AACAAZAAHBSAAAAAxnbHlm5vV0AgAAOswAAYOwaGVhZAhMpEUAAAEcAAAANmhoZWEKugrKAAABVAAAACRobXR4//meUgAAAfgAABSkbG9jYadOA+EAADB4AAAKVG1heHAI2RDGAAABeAAAACBuYW1lOEJpwQABvnwAAAKqcG9zdP9tAGQAAcEoAAAAIHByZXB5WM7TAAAsqAAAAs4AAQAAAAMCDFXLfBlfDzz1ABsIAAAAAADE8BEuAAAAAODgRcX6Gv3VCTEIcwAAAAkAAgAAAAAAAAABAAAHbP4MAAAJSvoa/koJMQABAAAAAAAAAAAAAAAAAAAFKQABAAAFKQCpABUAdgAHAAIAEAAvAJoAAALmD3UAAwABAAQEiQGQAAUAAAWaBTMAAAEfBZoFMwAAA9EAZgIAAAACAAAAAAAAAAAA4AAC/1AAIFsAAAAgAAAAAEdPT0cAQAAA//0GAP4AAGYHmgIAIAABnwAAAAAEOgWwAAAAIAADA4wAZAAAAAAAAAAAAfwAAAH8AAACEAChApAAiQTtAHcEfwBuBdwAaQT6AGYBZgBoAr0AhgLJACcDcgAcBIoATgGTAB0CNgAmAhwAkANNABMEfwBzBH8AqwR/AF4EfwBfBH8ANQR/AJoEfwCFBH8ATgR/AHEEfwBkAfAAhQGxACkEEQBIBGQAmAQvAIcDyABLBy8AbQU4AB0E/ACpBTUAeAVAAKkEjACpBGwAqQVzAHoFtQCpAi0AtwRqADUFBQCpBE8AqQb8AKkFtQCpBYEAdwUMAKkFgQBuBO4AqQTAAFEExgAyBTAAjAUYAB0HGQA9BQQAOgTOAA8EywBXAh8AkwNJACkCHwAKA1gAQAOcAAQCeQA5BFoAbQR+AIwEMABdBIMAXwQ+AF0CyAA9BH4AYQRoAI0B8gCOAer/vgQOAI0B8gCcBwQAiwRrAI0EkABcBH4AjASMAF8CtgCNBCEAXwKeAAkEaQCJA+AAIQYDACsD+AAqA8kAFgP4AFkCtQBAAfQAsAK1ABQFcQCDAfQAiwRhAGkEpwBbBbUAaQQ0AA8B7ACUBOgAWwNZAGUGSQBcA5QAkwPBAGUEbgB/BkoAWwOrAI8C/QCDBEcAYQLvAEIC7wA/AoIAewSJAJsD6gBEAhcAlAH8AHQC7wB7A6QAewPAAGcF3ABVBjUAUAY5AHADygBEB3r/8QRFAFkFgQB3BLoApwTCAIwGwgBPBLEAfgSSAEcEiQBcBJwAlQTIAF8FmwAeAfsAnAR0AJsETwAjAioAIwWLAKIEiQCSB6EAaQdEAGEB/AChBYcAXgK6/+MFfwBmBJMAXAWQAIwE8wCJAgT/tAQ4AGMDxACqA44AjgOrAI8DawCCAfIAjgKuAHkCKwAyA8YAewL8AF8CWgB/AAD8pwAA/W4AAPyKAAD9XQAA/CcAAP04Ag4AuAQMAHICFwCUBHMAsgWkACAFcgBnBT8AMgSSAHgFtQCyBJIARgW7AE4FiQBaBVIAcgSGAGQEvQChBAMALwSJAGEEUQBkBCUAbQSJAJIEjwB7ApgAwwRvACYD7ABmBMUAKQSJAJIETgBlBIgAYQQsAFEEXgCQBaMAWAWaAGAGlwB6BKIAegRD/9oGSABLBgAAKwVlAHsIkgAyCKUAsgaDAD4FtACwBQsAowYEADMHQwAbBMAAUAW1ALIFqgAwBQgATQYtAFQF2gCvBXoAlweHALAHwACwBhIAEQbrALIFBQCjBWUAlAcnALcFGABaBG0AYgSTAJ4DXACbBNQALgYhABYEEABYBJ4AnQRTAJ0EoAAsBe8AngSdAJ0EngCdA9kAKAXOAGQEvgCdBFoAaAZ5AJ0GnwCSBPcAHgY2AJ4EWACeBE4AZAaIAJ4EZAAvBGj/5wROAGcGyQAnBuQAnQSJ//0EngCdBwkAnAYsAIEEV//bBywAuAX5AJoE0wAoBEcADwcMAMoGDAC9BtIAkwXiAJcJBQC3B9EAnAQkAFAD2wBMBXIAZwSMAFwFCwAWBAQALwVyAGcEiQBcBwEAnAYkAH4HCQCcBiwAgQUyAHYESABkBP4AdAAA/GYAAPxwAAD9ZQAA/aQAAPoaAAD6KwYJALIE7QCdBFf/2wUbAKkEigCMBGQAogORAJIE2wCyBAYAkgeiABsGYQAWBZoAsgS4AJ0FCgCkBH4AmwaMAEUFhAA/Bf8AqQTZAJ0HzwCpBbQAkggxALAG9ACSBe8AcQTUAG4FGAA6BCoAKgctADQFXQAfBbwAlwSWAGgFcACXBGsAhAVwAIkGMAA/BL7/3QUKAKQEWgCbBf4AMATvACwFswCyBIkAkgYSAKkE7ACdB08AqQY+AJ4FhwBeBKgAaASoAGoEuAA5A6sAOgUuADoEQAAqBPcAVwaVAFoG5QBkBlcANgUsADEESgBTBAgAeQfCAEUGdgA/B/sAqgaiAJAE9wB2BB4AZgWuACQFIQBGBWUAlwYCADAE8wAsAyEAcAQUAAAIKQAABBQAAAgpAAACuQAAAgoAAAFcAAAEfwAAAjAAAAGiAAABAAAAANEAAAAAAAACNAAmAjQAJgVAAKIGPwCQA6YADQGaAGEBmgAwAZgAJAGaAE8C1ABpAtwAPALCACQEagBGBJAAVwKzAIsDxACUBVoAlAF/AFIHqgBEAmcAbAJnAFoDowA8Au8AUQLvADYC7wBcAu8AVgLvADsC7wBPAu8ASgM4AFAC+ABQAvgAUAHxAFQB8QBQA2EAegLvAFEC7wB7Au8AQgLvAD8C7wA2Au8AXALvAFYC7wA7Au8ATwLvAEoDOABQAvgAUAL4AFAB8QBUAfEAUASnAFsGVgAfBpEApwh2AKkF6wAfBisAjAR/AF8F2gAfBCMAKwR0ACEFSABdBU8AHwXoAHsDzgBoCDoAogUBAGgFGACYBiYAVAbXAGUGzwBkBmoAWgSQAGoFjwCpBK8ARgSTAKgExQA/CDoAYwIN/68EggBlBGQAmAQRAD0ELwCEBAgALAJMALUCkABvAgQAXQTzAD0EbwAgBIsAPQbUAD0G1AA9BO4APQabAF8AAAAACDQAWwg1AFwC7wBCAu8AewLvAFEEEABWBBAAYQQQAEIEDwByBBAAgQQQADEEEABPBBAATwQQAJkEEABjBCMASAQrAA4EVAAnBhUAMQRoABQEfQB1BCcAKQQgAEQESgCKBLwAWgRdAIsEvABgBOMAiwYCAIsDtQCLBFUAiwPPACwB6QCYBOQAiwSsAGQDzACLBCAARAQ0ADEDoQAOA68AiwRoABQEvABgBGgAFAOJAD4EzwCLA/AAQAVnAGEFFwBhBPMAdgVzACcEfABhB0IAKAdQAIsFdAApBM4AiwRaAIsFJQAuBgsAHwRAAEgE7ACLBE4AjATBACgEIAAjBSkAiwRqAD0GUQCLBqwAiwUdAAkF8QCLBE8AiwR8AEsGdwCLBIcAUAQSAAsGSAAfBHkAjAUKAIwFNwAkBcMAYARfAA4EqAAnBmIAJwRqAD0EagCLBcQAAgTLAF4EQABIBLwAYAQ0ADED5ABDCCIAiwSrACgC7wA/Au8ANgLvAFwC7wBWAu8AOwLvAE8C7wBKA5cAjwK1AJ8D5gCLBDoAHwTEAGQFTACyBSQAsgQUAJMFPQCyBA8AkwSAAIsEfABhBFEAiwSGABQB/gCfA6UAggAA/KMD8ABvA/T/XQQPAGkD9QBpA68AiwOgAIIDnwCCAu8AUQLvADYC7wBcAu8AVgLvADsC7wBPAu8ASgWCAH4FrwB+BZMAsgXgAH4F4wB+A9UAoASCAIMEWAAPBM8APgRrAGUELgBKA6UAhAGSAGgGpABgBLoAggH8/7YEfwA7BH8AcwR/ACIEfwB2BH8AdgR/ADYEfwB+BH8AXgR/AHEEfwD0Agb/tAIE/7QB+wCcAfv/+QH7AJwEUQCLBQAAeAQhADsEfgCMBDMAXQSTAFsEjABbBJ8AWgSOAIwEnABbBD4AXQR+AGEEcABaA3kAVwTWAGgDtQABBjoACQP5AIsEvABgBOMAMATjAIsB/AAAAjYAJgVeACUFXgAlBIYAAQTGADICnv/0BTgAHQU4AB0FOAAdBTgAHQU4AB0FOAAdBTgAHQU1AHgEjACpBIwAqQSMAKkEjACpAi3/3wItALECLf/qAi3/1QW1AKkFgQB3BYEAdwWBAHcFgQB3BYEAdwUwAIwFMACMBTAAjAUwAIwEzgAPBFoAbQRaAG0EWgBtBFoAbQRaAG0EWgBtBFoAbQQwAF0EPgBdBD4AXQQ+AF0EPgBdAfv/xAH7AJYB+//PAfv/ugRrAI0EkABcBJAAXASQAFwEkABcBJAAXARpAIkEaQCJBGkAiQRpAIkDyQAWA8kAFgU4AB0EWgBtBTgAHQRaAG0FOAAdBFoAbQU1AHgEMABdBTUAeAQwAF0FNQB4BDAAXQU1AHgEMABdBUAAqQUZAF8EjACpBD4AXQSMAKkEPgBdBIwAqQQ+AF0EjACpBD4AXQSMAKkEPgBdBXMAegR+AGEFcwB6BH4AYQVzAHoEfgBhBXMAegR+AGEFtQCpBGgAjQIt/7YB+/+bAi3/zQH7/7ICLf/sAfv/0QItABcB8v/6Ai0AqgaXALcD3ACOBGoANQIE/7QFBQCpBA4AjQRPAKIB8gCTBE8AqQHyAFYETwCpAogAnARPAKkCzgCcBbUAqQRrAI0FtQCpBGsAjQW1AKkEawCNBGv/uwWBAHcEkABcBYEAdwSQAFwFgQB3BJAAXATuAKkCtgCNBO4AqQK2AFME7gCpArYAZATAAFEEIQBfBMAAUQQhAF8EwABRBCEAXwTAAFEEIQBfBMAAUQQhAF8ExgAyAp4ACQTGADICngAJBMYAMgLGAAkFMACMBGkAiQUwAIwEaQCJBTAAjARpAIkFMACMBGkAiQUwAIwEaQCJBTAAjARpAIkHGQA9BgMAKwTOAA8DyQAWBM4ADwTLAFcD+ABZBMsAVwP4AFkEywBXA/gAWQd6//EGwgBPBYEAdwSJAFwEgP+9BID/vQQnACkEhgAUBIYAFASGABQEhgAUBIYAFASGABQEhgAUBHwAYQPmAIsD5gCLA+YAiwPmAIsB6f+8AekAjgHp/8cB6f+yBOMAiwS8AGAEvABgBLwAYAS8AGAEvABgBH0AdQR9AHUEfQB1BH0AdQQrAA4EhgAUBIYAFASGABQEfABhBHwAYQR8AGEEfABhBIAAiwPmAIsD5gCLA+YAiwPmAIsD5gCLBKwAZASsAGQErABkBKwAZATkAIsB6f+TAen/qgHp/8kB6QAFAekAhwPPACwEVQCLA7UAgwO1AIsDtQCLA7UAiwTjAIsE4wCLBOMAiwS8AGAEvABgBLwAYARKAIoESgCKBEoAigQgAEQEIABEBCAARAQgAEQEJwApBCcAKQQnACkEfQB1BH0AdQR9AHUEfQB1BH0AdQR9AHUGFQAxBCsADgQrAA4EIwBIBCMASAQjAEgFOAAdBPD/jAYZ/5oCkf+gBZX/+gUy/3YFZv/8Apj/mwU4AB0E/ACpBIwAqQTLAFcFtQCpAi0AtwUFAKkG/ACpBbUAqQWBAHcFDACpBMYAMgTOAA8FBAA6Ai3/1QTOAA8EhgBkBFEAZASJAJICmADDBF4AkAR0AJsEkABcBIkAmwPgACEEcABaApj/5AReAJAEkABcBF4AkAaXAHoEjACpBHMAsgTAAFECLQC3Ai3/1QRqADUFJACyBQUAqQUIAE0FOAAdBPwAqQRzALIEjACpBbUAsgb8AKkFtQCpBYEAdwW1ALIFDACpBTUAeATGADIFBAA6BFoAbQQ+AF0EngCdBJAAXAR+AIwEMABdA8kAFgP4ACoEPgBdA1wAmwQhAF8B8gCOAfv/ugHq/74EUwCdA8kAFgcZAD0GAwArBxkAPQYDACsHGQA9BgMAKwTOAA8DyQAWAWYAaAKQAIkEIAChAgT/tAGaADAG/ACpBwQAiwU4AB0EWgBtBIwAqQW1ALIEPgBdBJ4AnQWJAFoFmgBgBQsAFgQE//sIWQBcCUoAdwTAAFAEEABYBTUAeAQwAF0EzgAPBAMALwItALcHQwAbBiEAFgItALcFOAAdBFoAbQU4AB0EWgBtB3r/8QbCAE8EjACpBD4AXQWHAF4EOABjBDgAYwdDABsGIQAWBMAAUAQQAFgFtQCyBJ4AnQW1ALIEngCdBYEAdwSQAFwFcgBnBIwAXAVyAGcEjABcBWUAlAROAGQFCABNA8kAFgUIAE0DyQAWBQgATQPJABYFegCXBFoAaAbrALIGNgCeBIMAXwU4AB0EWgBtBTgAHQRaAG0FOAAdBFoAbQU4AB0EWv/JBTgAHQRaAG0FOAAdBFoAbQU4AB0EWgBtBTgAHQRaAG0FOAAdBFoAbQU4AB0EWgBtBTgAHQRaAG0FOAAdBFoAbQSMAKkEPgBdBIwAqQQ+AF0EjACpBD4AXQSMAKkEPgBdBIz/7gQ+/7gEjACpBD4AXQSMAKkEPgBdBIwAqQQ+AF0CLQC3AfsAnAItAKQB8gCGBYEAdwSQAFwFgQB3BJAAXAWBAHcEkABcBYEARgSQ/8IFgQB3BJAAXAWBAHcEkABcBYEAdwSQAFwFfwBmBJMAXAV/AGYEkwBcBX8AZgSTAFwFfwBmBJMAXAV/AGYEkwBcBTAAjARpAIkFMACMBGkAiQWQAIwE8wCJBZAAjATzAIkFkACMBPMAiQWQAIwE8wCJBZAAjATzAIkEzgAPA8kAFgTOAA8DyQAWBM4ADwPJABYEoQBfBMYAMgPZACgFegCXBFoAaARzALIDXACbBjAAPwS+/90EaACNBQX/1AUF/9QEcwADA1z//QU4AAsEKP/TBM4ADwQDAC8FBAA6A/gAKgRRAGQEbAASBj8AkAR/AF4EfwBfBH8ANQR/AJoEkwCZBKcAhQSTAGQEpwCHBXMAegR+AGEFtQCpBGsAjQU4AB0EWgA6BIwAXwQ+ACkCLf8LAfv+8AWBAHcEkAAzBO4AVgK2/4wFMACMBGkAKwSn/zgE/ACpBH4AjAVAAKkEgwBfBUAAqQSDAF8FtQCp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ABQAFQAWABcAGAAZABoAGwAcAB0AJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AGUAZwCBAIMAhACMAI8AkQCTALEAsgCzALQAtQC2ALcAuAC5ALoA0gDTANQA1QDWANcA2ADZANoA2wDcAN0A3gDfAOAA4QDiAOMA5ADlAOYA5wDoAOkBLwEzATUBNwE5ATsBQQFDAUUBSQFLAUwBWAFZAbEBtwG8Ab8ClQKWApgCmgKbApwCnQKeAp8CoAKhAqICowKkAqUCpgKnAqgCqQKqAqsCrAKtAq4CrwKwArECsgKzArQC0QLTAtUC1wLZAtsC3QLfAuEC4wLlAucC6QLrAu0C7wLxAvMC9QL3AvkC+wL9Av4DAAMCAwQDBgMIAwoDDAMOAxADEwMVAxcDGQMbAx0DHwMhAyMDJQMnAykDKwMtAy8DMQMzAzUDNwM5AzsDPQM/A0ADQgNEA0YDSAOhA6IDowOkA6UDpgOnA6kDqgOrA6wDrQOuA68DsAOxA7IDswO0A7UDtgO3A7gDyAPJA8oDywPMA80DzgPPA9AD0QPSA9MD1APVA9YD1wPYA9kD2gPbA9wD3QPuA/AD8gP0BAkECwQNBCIEKAQuBJgEnQShBSIFJAADAe//9QHw/+4Dm//1AAMADf/mAEH/9ABh/+8AAwBK/+4AW//qAfD/8AADAFv/wQH//+YCS//oAAMASgAPAFgAMgBbABEAAwBb/+UB///rAkv/7QA7ALIAEADS/+AA0//oANQAEADW/+AA2QAUAN0AEADh/+EA5v/gAO0AEwDyABAA+f/gAQQAEAEI/+gBDQAQARf/6AEZ/+ABG//oAR3/6AEf/+gBIf/oATn/4AFB/+gBRf/gAUf/4QFI/+ABSf/hAUr/4AFN/+EBUAAQAVEAEAFY/+kBYv/fAWT/3gFmABABav/oAWz/3wFu//IBbwAQAXAAEAPRABAD2P/oA9v/6APc/+AEBf/gBAj/6AQL/+gEDf/fBBMAEAQVABAEJv/oBCj/6AQq/+gENP/hBDX/4ASS/+AElP/hBJX/4ASh/98ABABY/+8AW//fAJr/7gHw/80ABAANABQAQQARAFb/4gBhABMABQA4/9gDKf/YAyv/2AMt/9gE2v/YAAUAI//DAFj/7wBb/98Amv/uAfD/zQAF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Au7/7ALw/+wC8v/sBFL/7ARU/+wEVv/sBFj/7ARa/+wEXP/sBF7/7ARg/+wEdP/sBHb/7AR4/+wEfP/sBLf/7ATE/+wExv/sADYABgAQAAsAEAANABQAQQASAEf/6ABI/+gASf/oAEv/6ABV/+gAYQATAJT/6ACZ/+gBhAAQAYUAEAGHABABiAAQAYkAEAK8/+gCvf/oAr7/6AK//+gCwP/oAtj/6ALa/+gC3P/oAt7/6ALg/+gC4v/oAuT/6ALm/+gC6P/oAur/6ALs/+gC7v/oAvD/6ALy/+gD9gAQA/cAEAP6ABAEUv/oBFT/6ARW/+gEWP/oBFr/6ARc/+gEXv/oBGD/6AR0/+gEdv/oBHj/6AR8/+gEt//oBMT/6ATG/+gASgBH/8UASP/FAEn/xQBL/8UATAAgAE8AIABQACAAU/+AAFX/xQBX/5AAWwALAJT/xQCZ/8UB2/+QArz/xQK9/8UCvv/FAr//xQLA/8UCxv+AAsf/gALI/4ACyf+AAsr/gALY/8UC2v/FAtz/xQLe/8UC4P/FAuL/xQLk/8UC5v/FAuj/xQLq/8UC7P/FAu7/xQLw/8UC8v/FAxT/gAMW/4ADGP+AAyD/kAMi/5ADJP+QAyb/kAMo/5AEUv/FBFT/xQRW/8UEWP/FBFr/xQRc/8UEXv/FBGD/xQRm/4AEaP+ABGr/gARs/4AEbv+ABHD/gARy/4AEdP/FBHb/xQR4/8UEev+ABHz/xQS3/8UEu/+ABMT/xQTG/8UEyAAgBMoAIATMACAE2f+QAAEA9AAEAAYACwAMACUAJwAoACkAKgAvADAAMwA0ADUANgA4ADoAOwA8AD0APgA/AEkASgBMAE8AUQBSAFMAVgBYAFoAWwBdAF8AlgCdALIBhAGFAYcBiAGJAfIB9AH1AfcB+gIFAkoCTQJfAmECYgKVApYCmAKaApsCnAKdAp4CnwKgAqECogKjAqQCpQKrAqwCrQKuAq8CtAK9Ar4CvwLAAsUCxgLHAsgCyQLKAs8C0ALRAtMC1QLXAtkC2wLdAt8C4QLiAuMC5ALlAuYC5wLoAukC6gL0AwIDBAMGAwgDCgMNAw8DEQMSAxMDFAMVAxYDFwMYAxoDHAMeAykDKwMtAzsDPQM+Az8DQANCA0QDSgNLA0wDTQNOA08DUANRA1IDUwNeA18DYANhA2IDaANpA2oDbwOBA4IDgwOEA4gDiQOKA5MD7gPwA/ID9AP1A/YD9wP6A/wD/QQ5BDsEPQQ/BEEEQwRFBEcESQRLBE0ETwRRBFIEUwRUBFUEVgRXBFgEWQRaBFsEXARdBF4EXwRgBGUEZgRnBGgEaQRqBGsEbARtBG4EbwRwBHEEcgR6BIsEjASNBI4EjwSQBLMEtAS2BLoEuwS9BMMExQTIBMkEywTNBNAE0gTTBNQE1wTaBN0E3gTfBOAE4QTjAAEANQAGAAsAlgCxALIAswC0AL0AwQDHAYQBhQGHAYgBiQIFAgYCBwOhA6IDowOkA6UDpgOpA6oDqwOsA60DrgOvA7ADsQOyA7MDtAO1A7YDtwO4A7sDvwPBA8UD9gP3A/oE5QTmBOoE7QTzBPgApwAQ/xYAEv8WACX/VgAu/vgAOAAUAEX/3gBH/+sASP/rAEn/6wBL/+sAU//rAFX/6wBW/+YAWf/qAFr/6ABd/+gAlP/rAJn/6wCb/+oAsv9WAYb/FgGK/xYBjv8WAY//FgIF/8ACTf/AApr/VgKb/1YCnP9WAp3/VgKe/1YCn/9WAqD/VgK1/94Ctv/eArf/3gK4/94Cuf/eArr/3gK7/94CvP/rAr3/6wK+/+sCv//rAsD/6wLG/+sCx//rAsj/6wLJ/+sCyv/rAsv/6gLM/+oCzf/qAs7/6gLP/+gC0P/oAtH/VgLS/94C0/9WAtT/3gLV/1YC1v/eAtj/6wLa/+sC3P/rAt7/6wLg/+sC4v/rAuT/6wLm/+sC6P/rAur/6wLs/+sC7v/rAvD/6wLy/+sDAP74AxT/6wMW/+sDGP/rAykAFAMrABQDLQAUAzD/6gMy/+oDNP/qAzb/6gM4/+oDOv/qAz7/6ANN/8ADTv/AA0//wANQ/8ADUf/AA1L/wANT/8ADaP/AA2n/wANq/8AD9f/oA/3/VgP+/94EOf9WBDr/3gQ7/1YEPP/eBD3/VgQ+/94EP/9WBED/3gRB/1YEQv/eBEP/VgRE/94ERf9WBEb/3gRH/1YESP/eBEn/VgRK/94ES/9WBEz/3gRN/1YETv/eBE//VgRQ/94EUv/rBFT/6wRW/+sEWP/rBFr/6wRc/+sEXv/rBGD/6wRm/+sEaP/rBGr/6wRs/+sEbv/rBHD/6wRy/+sEdP/rBHb/6wR4/+sEev/rBHz/6wR+/+oEgP/qBIL/6gSE/+oEhv/q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\"\r\n};","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n  function shim(props, propName, componentName, location, propFullName, secret) {\n    if (secret === ReactPropTypesSecret) {\n      // It is still safe when called from React.\n      return;\n    }\n    var err = new Error(\n      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n      'Use PropTypes.checkPropTypes() to call them. ' +\n      'Read more at http://fb.me/use-check-prop-types'\n    );\n    err.name = 'Invariant Violation';\n    throw err;\n  };\n  shim.isRequired = shim;\n  function getShim() {\n    return shim;\n  };\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n  var ReactPropTypes = {\n    array: shim,\n    bigint: shim,\n    bool: shim,\n    func: shim,\n    number: shim,\n    object: shim,\n    string: shim,\n    symbol: shim,\n\n    any: shim,\n    arrayOf: getShim,\n    element: shim,\n    elementType: shim,\n    instanceOf: getShim,\n    node: shim,\n    objectOf: getShim,\n    oneOf: getShim,\n    oneOfType: getShim,\n    shape: getShim,\n    exact: getShim,\n\n    checkPropTypes: emptyFunctionWithReset,\n    resetWarningCache: emptyFunction\n  };\n\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n  var ReactIs = require('react-is');\n\n  // By explicitly using `prop-types` you are opting into new development behavior.\n  // http://fb.me/prop-types-in-prod\n  var throwOnDirectAccess = true;\n  module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n  // By explicitly using `prop-types` you are opting into new production behavior.\n  // http://fb.me/prop-types-in-prod\n  module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/**\n * @license React\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),ca=require(\"scheduler\");function p(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}var da=new Set,ea={};function fa(a,b){ha(a,b);ha(a+\"Capture\",b)}\nfunction ha(a,b){ea[a]=b;for(a=0;a<b.length;a++)da.add(b[a])}\nvar ia=!(\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement),ja=Object.prototype.hasOwnProperty,ka=/^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,la=\n{},ma={};function oa(a){if(ja.call(ma,a))return!0;if(ja.call(la,a))return!1;if(ka.test(a))return ma[a]=!0;la[a]=!0;return!1}function pa(a,b,c,d){if(null!==c&&0===c.type)return!1;switch(typeof b){case \"function\":case \"symbol\":return!0;case \"boolean\":if(d)return!1;if(null!==c)return!c.acceptsBooleans;a=a.toLowerCase().slice(0,5);return\"data-\"!==a&&\"aria-\"!==a;default:return!1}}\nfunction qa(a,b,c,d){if(null===b||\"undefined\"===typeof b||pa(a,b,c,d))return!0;if(d)return!1;if(null!==c)switch(c.type){case 3:return!b;case 4:return!1===b;case 5:return isNaN(b);case 6:return isNaN(b)||1>b}return!1}function v(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var z={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){z[a]=new v(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];z[b]=new v(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){z[a]=new v(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){z[a]=new v(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){z[a]=new v(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){z[a]=new v(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){z[a]=new v(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){z[a]=new v(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){z[a]=new v(a,5,!1,a.toLowerCase(),null,!1,!1)});var ra=/[\\-:]([a-z])/g;function sa(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(ra,\nsa);z[b]=new v(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!1,!1)});\nz.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction ta(a,b,c,d){var e=z.hasOwnProperty(b)?z[b]:null;if(null!==e?0!==e.type:d||!(2<b.length)||\"o\"!==b[0]&&\"O\"!==b[0]||\"n\"!==b[1]&&\"N\"!==b[1])qa(b,c,e,d)&&(c=null),d||null===e?oa(b)&&(null===c?a.removeAttribute(b):a.setAttribute(b,\"\"+c)):e.mustUseProperty?a[e.propertyName]=null===c?3===e.type?!1:\"\":c:(b=e.attributeName,d=e.attributeNamespace,null===c?a.removeAttribute(b):(e=e.type,c=3===e||4===e&&!0===c?\"\":\"\"+c,d?a.setAttributeNS(d,b,c):a.setAttribute(b,c)))}\nvar ua=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,va=Symbol.for(\"react.element\"),wa=Symbol.for(\"react.portal\"),ya=Symbol.for(\"react.fragment\"),za=Symbol.for(\"react.strict_mode\"),Aa=Symbol.for(\"react.profiler\"),Ba=Symbol.for(\"react.provider\"),Ca=Symbol.for(\"react.context\"),Da=Symbol.for(\"react.forward_ref\"),Ea=Symbol.for(\"react.suspense\"),Fa=Symbol.for(\"react.suspense_list\"),Ga=Symbol.for(\"react.memo\"),Ha=Symbol.for(\"react.lazy\");Symbol.for(\"react.scope\");Symbol.for(\"react.debug_trace_mode\");\nvar Ia=Symbol.for(\"react.offscreen\");Symbol.for(\"react.legacy_hidden\");Symbol.for(\"react.cache\");Symbol.for(\"react.tracing_marker\");var Ja=Symbol.iterator;function Ka(a){if(null===a||\"object\"!==typeof a)return null;a=Ja&&a[Ja]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}var A=Object.assign,La;function Ma(a){if(void 0===La)try{throw Error();}catch(c){var b=c.stack.trim().match(/\\n( *(at )?)/);La=b&&b[1]||\"\"}return\"\\n\"+La+a}var Na=!1;\nfunction Oa(a,b){if(!a||Na)return\"\";Na=!0;var c=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(b)if(b=function(){throw Error();},Object.defineProperty(b.prototype,\"props\",{set:function(){throw Error();}}),\"object\"===typeof Reflect&&Reflect.construct){try{Reflect.construct(b,[])}catch(l){var d=l}Reflect.construct(a,[],b)}else{try{b.call()}catch(l){d=l}a.call(b.prototype)}else{try{throw Error();}catch(l){d=l}a()}}catch(l){if(l&&d&&\"string\"===typeof l.stack){for(var e=l.stack.split(\"\\n\"),\nf=d.stack.split(\"\\n\"),g=e.length-1,h=f.length-1;1<=g&&0<=h&&e[g]!==f[h];)h--;for(;1<=g&&0<=h;g--,h--)if(e[g]!==f[h]){if(1!==g||1!==h){do if(g--,h--,0>h||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"<anonymous>\")&&(k=k.replace(\"<anonymous>\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{Na=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Ma(a):\"\"}\nfunction Pa(a){switch(a.tag){case 5:return Ma(a.type);case 16:return Ma(\"Lazy\");case 13:return Ma(\"Suspense\");case 19:return Ma(\"SuspenseList\");case 0:case 2:case 15:return a=Oa(a.type,!1),a;case 11:return a=Oa(a.type.render,!1),a;case 1:return a=Oa(a.type,!0),a;default:return\"\"}}\nfunction Qa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ya:return\"Fragment\";case wa:return\"Portal\";case Aa:return\"Profiler\";case za:return\"StrictMode\";case Ea:return\"Suspense\";case Fa:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ca:return(a.displayName||\"Context\")+\".Consumer\";case Ba:return(a._context.displayName||\"Context\")+\".Provider\";case Da:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case Ga:return b=a.displayName||null,null!==b?b:Qa(a.type)||\"Memo\";case Ha:b=a._payload;a=a._init;try{return Qa(a(b))}catch(c){}}return null}\nfunction Ra(a){var b=a.type;switch(a.tag){case 24:return\"Cache\";case 9:return(b.displayName||\"Context\")+\".Consumer\";case 10:return(b._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return a=b.render,a=a.displayName||a.name||\"\",b.displayName||(\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return b;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return Qa(b);case 8:return b===za?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";\ncase 12:return\"Profiler\";case 21:return\"Scope\";case 13:return\"Suspense\";case 19:return\"SuspenseList\";case 25:return\"TracingMarker\";case 1:case 0:case 17:case 2:case 14:case 15:if(\"function\"===typeof b)return b.displayName||b.name||null;if(\"string\"===typeof b)return b}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"string\":case \"undefined\":return a;case \"object\":return a;default:return\"\"}}\nfunction Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return A({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function ab(a,b){b=b.checked;null!=b&&ta(a,\"checked\",b,!1)}\nfunction bb(a,b){ab(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?cb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&cb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction db(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction cb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}var eb=Array.isArray;\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e<c.length;e++)b[\"$\"+c[e]]=!0;for(c=0;c<a.length;c++)e=b.hasOwnProperty(\"$\"+a[c].value),a[c].selected!==e&&(a[c].selected=e),e&&d&&(a[c].defaultSelected=!0)}else{c=\"\"+Sa(c);b=null;for(e=0;e<a.length;e++){if(a[e].value===c){a[e].selected=!0;d&&(a[e].defaultSelected=!0);return}null!==b||a[e].disabled||(b=a[e])}null!==b&&(b.selected=!0)}}\nfunction gb(a,b){if(null!=b.dangerouslySetInnerHTML)throw Error(p(91));return A({},b,{value:void 0,defaultValue:void 0,children:\"\"+a._wrapperState.initialValue})}function hb(a,b){var c=b.value;if(null==c){c=b.children;b=b.defaultValue;if(null!=c){if(null!=b)throw Error(p(92));if(eb(c)){if(1<c.length)throw Error(p(93));c=c[0]}b=c}null==b&&(b=\"\");c=b}a._wrapperState={initialValue:Sa(c)}}\nfunction ib(a,b){var c=Sa(b.value),d=Sa(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function jb(a){var b=a.textContent;b===a._wrapperState.initialValue&&\"\"!==b&&null!==b&&(a.value=b)}function kb(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}\nfunction lb(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?kb(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar mb,nb=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(\"http://www.w3.org/2000/svg\"!==a.namespaceURI||\"innerHTML\"in a)a.innerHTML=b;else{mb=mb||document.createElement(\"div\");mb.innerHTML=\"<svg>\"+b.valueOf().toString()+\"</svg>\";for(b=mb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction ob(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar pb={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,\nzoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},qb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(pb).forEach(function(a){qb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);pb[b]=pb[a]})});function rb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||pb.hasOwnProperty(a)&&pb[a]?(\"\"+b).trim():b+\"px\"}\nfunction sb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=rb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var tb=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction ub(a,b){if(b){if(tb[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(p(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(p(60));if(\"object\"!==typeof b.dangerouslySetInnerHTML||!(\"__html\"in b.dangerouslySetInnerHTML))throw Error(p(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(p(62));}}\nfunction vb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var wb=null;function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(p(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;a<b.length;a++)Bb(b[a])}}function Gb(a,b){return a(b)}function Hb(){}var Ib=!1;function Jb(a,b,c){if(Ib)return a(b,c);Ib=!0;try{return Gb(a,b,c)}finally{if(Ib=!1,null!==zb||null!==Ab)Hb(),Fb()}}\nfunction Kb(a,b){var c=a.stateNode;if(null===c)return null;var d=Db(c);if(null===d)return null;c=d[b];a:switch(b){case \"onClick\":case \"onClickCapture\":case \"onDoubleClick\":case \"onDoubleClickCapture\":case \"onMouseDown\":case \"onMouseDownCapture\":case \"onMouseMove\":case \"onMouseMoveCapture\":case \"onMouseUp\":case \"onMouseUpCapture\":case \"onMouseEnter\":(d=!d.disabled)||(a=a.type,d=!(\"button\"===a||\"input\"===a||\"select\"===a||\"textarea\"===a));a=!d;break a;default:a=!1}if(a)return null;if(c&&\"function\"!==\ntypeof c)throw Error(p(231,b,typeof c));return c}var Lb=!1;if(ia)try{var Mb={};Object.defineProperty(Mb,\"passive\",{get:function(){Lb=!0}});window.addEventListener(\"test\",Mb,Mb);window.removeEventListener(\"test\",Mb,Mb)}catch(a){Lb=!1}function Nb(a,b,c,d,e,f,g,h,k){var l=Array.prototype.slice.call(arguments,3);try{b.apply(c,l)}catch(m){this.onError(m)}}var Ob=!1,Pb=null,Qb=!1,Rb=null,Sb={onError:function(a){Ob=!0;Pb=a}};function Tb(a,b,c,d,e,f,g,h,k){Ob=!1;Pb=null;Nb.apply(Sb,arguments)}\nfunction Ub(a,b,c,d,e,f,g,h,k){Tb.apply(this,arguments);if(Ob){if(Ob){var l=Pb;Ob=!1;Pb=null}else throw Error(p(198));Qb||(Qb=!0,Rb=l)}}function Vb(a){var b=a,c=a;if(a.alternate)for(;b.return;)b=b.return;else{a=b;do b=a,0!==(b.flags&4098)&&(c=b.return),a=b.return;while(a)}return 3===b.tag?c:null}function Wb(a){if(13===a.tag){var b=a.memoizedState;null===b&&(a=a.alternate,null!==a&&(b=a.memoizedState));if(null!==b)return b.dehydrated}return null}function Xb(a){if(Vb(a)!==a)throw Error(p(188));}\nfunction Yb(a){var b=a.alternate;if(!b){b=Vb(a);if(null===b)throw Error(p(188));return b!==a?null:a}for(var c=a,d=b;;){var e=c.return;if(null===e)break;var f=e.alternate;if(null===f){d=e.return;if(null!==d){c=d;continue}break}if(e.child===f.child){for(f=e.child;f;){if(f===c)return Xb(e),a;if(f===d)return Xb(e),b;f=f.sibling}throw Error(p(188));}if(c.return!==d.return)c=e,d=f;else{for(var g=!1,h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=f.child;h;){if(h===\nc){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}if(!g)throw Error(p(189));}}if(c.alternate!==d)throw Error(p(190));}if(3!==c.tag)throw Error(p(188));return c.stateNode.current===c?a:b}function Zb(a){a=Yb(a);return null!==a?$b(a):null}function $b(a){if(5===a.tag||6===a.tag)return a;for(a=a.child;null!==a;){var b=$b(a);if(null!==b)return b;a=a.sibling}return null}\nvar ac=ca.unstable_scheduleCallback,bc=ca.unstable_cancelCallback,cc=ca.unstable_shouldYield,dc=ca.unstable_requestPaint,B=ca.unstable_now,ec=ca.unstable_getCurrentPriorityLevel,fc=ca.unstable_ImmediatePriority,gc=ca.unstable_UserBlockingPriority,hc=ca.unstable_NormalPriority,ic=ca.unstable_LowPriority,jc=ca.unstable_IdlePriority,kc=null,lc=null;function mc(a){if(lc&&\"function\"===typeof lc.onCommitFiberRoot)try{lc.onCommitFiberRoot(kc,a,void 0,128===(a.current.flags&128))}catch(b){}}\nvar oc=Math.clz32?Math.clz32:nc,pc=Math.log,qc=Math.LN2;function nc(a){a>>>=0;return 0===a?32:31-(pc(a)/qc|0)|0}var rc=64,sc=4194304;\nfunction tc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function uc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=tc(h):(f&=g,0!==f&&(d=tc(f)))}else g=c&~e,0!==g?d=tc(g):0!==f&&(d=tc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0<b;)c=31-oc(b),e=1<<c,d|=a[c],b&=~e;return d}\nfunction vc(a,b){switch(a){case 1:case 2:case 4:return b+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return b+5E3;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return-1;case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}\nfunction wc(a,b){for(var c=a.suspendedLanes,d=a.pingedLanes,e=a.expirationTimes,f=a.pendingLanes;0<f;){var g=31-oc(f),h=1<<g,k=e[g];if(-1===k){if(0===(h&c)||0!==(h&d))e[g]=vc(h,b)}else k<=b&&(a.expiredLanes|=h);f&=~h}}function xc(a){a=a.pendingLanes&-1073741825;return 0!==a?a:a&1073741824?1073741824:0}function yc(){var a=rc;rc<<=1;0===(rc&4194240)&&(rc=64);return a}function zc(a){for(var b=[],c=0;31>c;c++)b.push(a);return b}\nfunction Ac(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-oc(b);a[b]=c}function Bc(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0<c;){var e=31-oc(c),f=1<<e;b[e]=0;d[e]=-1;a[e]=-1;c&=~f}}\nfunction Cc(a,b){var c=a.entangledLanes|=b;for(a=a.entanglements;c;){var d=31-oc(c),e=1<<d;e&b|a[d]&b&&(a[d]|=b);c&=~e}}var C=0;function Dc(a){a&=-a;return 1<a?4<a?0!==(a&268435455)?16:536870912:4:1}var Ec,Fc,Gc,Hc,Ic,Jc=!1,Kc=[],Lc=null,Mc=null,Nc=null,Oc=new Map,Pc=new Map,Qc=[],Rc=\"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit\".split(\" \");\nfunction Sc(a,b){switch(a){case \"focusin\":case \"focusout\":Lc=null;break;case \"dragenter\":case \"dragleave\":Mc=null;break;case \"mouseover\":case \"mouseout\":Nc=null;break;case \"pointerover\":case \"pointerout\":Oc.delete(b.pointerId);break;case \"gotpointercapture\":case \"lostpointercapture\":Pc.delete(b.pointerId)}}\nfunction Tc(a,b,c,d,e,f){if(null===a||a.nativeEvent!==f)return a={blockedOn:b,domEventName:c,eventSystemFlags:d,nativeEvent:f,targetContainers:[e]},null!==b&&(b=Cb(b),null!==b&&Fc(b)),a;a.eventSystemFlags|=d;b=a.targetContainers;null!==e&&-1===b.indexOf(e)&&b.push(e);return a}\nfunction Uc(a,b,c,d,e){switch(b){case \"focusin\":return Lc=Tc(Lc,a,b,c,d,e),!0;case \"dragenter\":return Mc=Tc(Mc,a,b,c,d,e),!0;case \"mouseover\":return Nc=Tc(Nc,a,b,c,d,e),!0;case \"pointerover\":var f=e.pointerId;Oc.set(f,Tc(Oc.get(f)||null,a,b,c,d,e));return!0;case \"gotpointercapture\":return f=e.pointerId,Pc.set(f,Tc(Pc.get(f)||null,a,b,c,d,e)),!0}return!1}\nfunction Vc(a){var b=Wc(a.target);if(null!==b){var c=Vb(b);if(null!==c)if(b=c.tag,13===b){if(b=Wb(c),null!==b){a.blockedOn=b;Ic(a.priority,function(){Gc(c)});return}}else if(3===b&&c.stateNode.current.memoizedState.isDehydrated){a.blockedOn=3===c.tag?c.stateNode.containerInfo:null;return}}a.blockedOn=null}\nfunction Xc(a){if(null!==a.blockedOn)return!1;for(var b=a.targetContainers;0<b.length;){var c=Yc(a.domEventName,a.eventSystemFlags,b[0],a.nativeEvent);if(null===c){c=a.nativeEvent;var d=new c.constructor(c.type,c);wb=d;c.target.dispatchEvent(d);wb=null}else return b=Cb(c),null!==b&&Fc(b),a.blockedOn=c,!1;b.shift()}return!0}function Zc(a,b,c){Xc(a)&&c.delete(b)}function $c(){Jc=!1;null!==Lc&&Xc(Lc)&&(Lc=null);null!==Mc&&Xc(Mc)&&(Mc=null);null!==Nc&&Xc(Nc)&&(Nc=null);Oc.forEach(Zc);Pc.forEach(Zc)}\nfunction ad(a,b){a.blockedOn===b&&(a.blockedOn=null,Jc||(Jc=!0,ca.unstable_scheduleCallback(ca.unstable_NormalPriority,$c)))}\nfunction bd(a){function b(b){return ad(b,a)}if(0<Kc.length){ad(Kc[0],a);for(var c=1;c<Kc.length;c++){var d=Kc[c];d.blockedOn===a&&(d.blockedOn=null)}}null!==Lc&&ad(Lc,a);null!==Mc&&ad(Mc,a);null!==Nc&&ad(Nc,a);Oc.forEach(b);Pc.forEach(b);for(c=0;c<Qc.length;c++)d=Qc[c],d.blockedOn===a&&(d.blockedOn=null);for(;0<Qc.length&&(c=Qc[0],null===c.blockedOn);)Vc(c),null===c.blockedOn&&Qc.shift()}var cd=ua.ReactCurrentBatchConfig,dd=!0;\nfunction ed(a,b,c,d){var e=C,f=cd.transition;cd.transition=null;try{C=1,fd(a,b,c,d)}finally{C=e,cd.transition=f}}function gd(a,b,c,d){var e=C,f=cd.transition;cd.transition=null;try{C=4,fd(a,b,c,d)}finally{C=e,cd.transition=f}}\nfunction fd(a,b,c,d){if(dd){var e=Yc(a,b,c,d);if(null===e)hd(a,b,d,id,c),Sc(a,d);else if(Uc(e,a,b,c,d))d.stopPropagation();else if(Sc(a,d),b&4&&-1<Rc.indexOf(a)){for(;null!==e;){var f=Cb(e);null!==f&&Ec(f);f=Yc(a,b,c,d);null===f&&hd(a,b,d,id,c);if(f===e)break;e=f}null!==e&&d.stopPropagation()}else hd(a,b,d,null,c)}}var id=null;\nfunction Yc(a,b,c,d){id=null;a=xb(d);a=Wc(a);if(null!==a)if(b=Vb(a),null===b)a=null;else if(c=b.tag,13===c){a=Wb(b);if(null!==a)return a;a=null}else if(3===c){if(b.stateNode.current.memoizedState.isDehydrated)return 3===b.tag?b.stateNode.containerInfo:null;a=null}else b!==a&&(a=null);id=a;return null}\nfunction jd(a){switch(a){case \"cancel\":case \"click\":case \"close\":case \"contextmenu\":case \"copy\":case \"cut\":case \"auxclick\":case \"dblclick\":case \"dragend\":case \"dragstart\":case \"drop\":case \"focusin\":case \"focusout\":case \"input\":case \"invalid\":case \"keydown\":case \"keypress\":case \"keyup\":case \"mousedown\":case \"mouseup\":case \"paste\":case \"pause\":case \"play\":case \"pointercancel\":case \"pointerdown\":case \"pointerup\":case \"ratechange\":case \"reset\":case \"resize\":case \"seeked\":case \"submit\":case \"touchcancel\":case \"touchend\":case \"touchstart\":case \"volumechange\":case \"change\":case \"selectionchange\":case \"textInput\":case \"compositionstart\":case \"compositionend\":case \"compositionupdate\":case \"beforeblur\":case \"afterblur\":case \"beforeinput\":case \"blur\":case \"fullscreenchange\":case \"focus\":case \"hashchange\":case \"popstate\":case \"select\":case \"selectstart\":return 1;case \"drag\":case \"dragenter\":case \"dragexit\":case \"dragleave\":case \"dragover\":case \"mousemove\":case \"mouseout\":case \"mouseover\":case \"pointermove\":case \"pointerout\":case \"pointerover\":case \"scroll\":case \"toggle\":case \"touchmove\":case \"wheel\":case \"mouseenter\":case \"mouseleave\":case \"pointerenter\":case \"pointerleave\":return 4;\ncase \"message\":switch(ec()){case fc:return 1;case gc:return 4;case hc:case ic:return 16;case jc:return 536870912;default:return 16}default:return 16}}var kd=null,ld=null,md=null;function nd(){if(md)return md;var a,b=ld,c=b.length,d,e=\"value\"in kd?kd.value:kd.textContent,f=e.length;for(a=0;a<c&&b[a]===e[a];a++);var g=c-a;for(d=1;d<=g&&b[c-d]===e[f-d];d++);return md=e.slice(a,1<d?1-d:void 0)}\nfunction od(a){var b=a.keyCode;\"charCode\"in a?(a=a.charCode,0===a&&13===b&&(a=13)):a=b;10===a&&(a=13);return 32<=a||13===a?a:0}function pd(){return!0}function qd(){return!1}\nfunction rd(a){function b(b,d,e,f,g){this._reactName=b;this._targetInst=e;this.type=d;this.nativeEvent=f;this.target=g;this.currentTarget=null;for(var c in a)a.hasOwnProperty(c)&&(b=a[c],this[c]=b?b(f):f[c]);this.isDefaultPrevented=(null!=f.defaultPrevented?f.defaultPrevented:!1===f.returnValue)?pd:qd;this.isPropagationStopped=qd;return this}A(b.prototype,{preventDefault:function(){this.defaultPrevented=!0;var a=this.nativeEvent;a&&(a.preventDefault?a.preventDefault():\"unknown\"!==typeof a.returnValue&&\n(a.returnValue=!1),this.isDefaultPrevented=pd)},stopPropagation:function(){var a=this.nativeEvent;a&&(a.stopPropagation?a.stopPropagation():\"unknown\"!==typeof a.cancelBubble&&(a.cancelBubble=!0),this.isPropagationStopped=pd)},persist:function(){},isPersistent:pd});return b}\nvar sd={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(a){return a.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},td=rd(sd),ud=A({},sd,{view:0,detail:0}),vd=rd(ud),wd,xd,yd,Ad=A({},ud,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:zd,button:0,buttons:0,relatedTarget:function(a){return void 0===a.relatedTarget?a.fromElement===a.srcElement?a.toElement:a.fromElement:a.relatedTarget},movementX:function(a){if(\"movementX\"in\na)return a.movementX;a!==yd&&(yd&&\"mousemove\"===a.type?(wd=a.screenX-yd.screenX,xd=a.screenY-yd.screenY):xd=wd=0,yd=a);return wd},movementY:function(a){return\"movementY\"in a?a.movementY:xd}}),Bd=rd(Ad),Cd=A({},Ad,{dataTransfer:0}),Dd=rd(Cd),Ed=A({},ud,{relatedTarget:0}),Fd=rd(Ed),Gd=A({},sd,{animationName:0,elapsedTime:0,pseudoElement:0}),Hd=rd(Gd),Id=A({},sd,{clipboardData:function(a){return\"clipboardData\"in a?a.clipboardData:window.clipboardData}}),Jd=rd(Id),Kd=A({},sd,{data:0}),Ld=rd(Kd),Md={Esc:\"Escape\",\nSpacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},Nd={8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",\n119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",224:\"Meta\"},Od={Alt:\"altKey\",Control:\"ctrlKey\",Meta:\"metaKey\",Shift:\"shiftKey\"};function Pd(a){var b=this.nativeEvent;return b.getModifierState?b.getModifierState(a):(a=Od[a])?!!b[a]:!1}function zd(){return Pd}\nvar Qd=A({},ud,{key:function(a){if(a.key){var b=Md[a.key]||a.key;if(\"Unidentified\"!==b)return b}return\"keypress\"===a.type?(a=od(a),13===a?\"Enter\":String.fromCharCode(a)):\"keydown\"===a.type||\"keyup\"===a.type?Nd[a.keyCode]||\"Unidentified\":\"\"},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:zd,charCode:function(a){return\"keypress\"===a.type?od(a):0},keyCode:function(a){return\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0},which:function(a){return\"keypress\"===\na.type?od(a):\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0}}),Rd=rd(Qd),Sd=A({},Ad,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),Td=rd(Sd),Ud=A({},ud,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:zd}),Vd=rd(Ud),Wd=A({},sd,{propertyName:0,elapsedTime:0,pseudoElement:0}),Xd=rd(Wd),Yd=A({},Ad,{deltaX:function(a){return\"deltaX\"in a?a.deltaX:\"wheelDeltaX\"in a?-a.wheelDeltaX:0},\ndeltaY:function(a){return\"deltaY\"in a?a.deltaY:\"wheelDeltaY\"in a?-a.wheelDeltaY:\"wheelDelta\"in a?-a.wheelDelta:0},deltaZ:0,deltaMode:0}),Zd=rd(Yd),$d=[9,13,27,32],ae=ia&&\"CompositionEvent\"in window,be=null;ia&&\"documentMode\"in document&&(be=document.documentMode);var ce=ia&&\"TextEvent\"in window&&!be,de=ia&&(!ae||be&&8<be&&11>=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1<b.char.length)return b.char;if(b.which)return String.fromCharCode(b.which)}return null;case \"compositionend\":return de&&\"ko\"!==b.locale?null:b.data;default:return null}}\nvar le={color:!0,date:!0,datetime:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function me(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return\"input\"===b?!!le[a.type]:\"textarea\"===b?!0:!1}function ne(a,b,c,d){Eb(d);b=oe(b,\"onChange\");0<b.length&&(c=new td(\"onChange\",\"change\",null,c,d),a.push({event:c,listeners:b}))}var pe=null,qe=null;function re(a){se(a,0)}function te(a){var b=ue(a);if(Wa(b))return a}\nfunction ve(a,b){if(\"change\"===a)return b}var we=!1;if(ia){var xe;if(ia){var ye=\"oninput\"in document;if(!ye){var ze=document.createElement(\"div\");ze.setAttribute(\"oninput\",\"return;\");ye=\"function\"===typeof ze.oninput}xe=ye}else xe=!1;we=xe&&(!document.documentMode||9<document.documentMode)}function Ae(){pe&&(pe.detachEvent(\"onpropertychange\",Be),qe=pe=null)}function Be(a){if(\"value\"===a.propertyName&&te(qe)){var b=[];ne(b,qe,a,xb(a));Jb(re,b)}}\nfunction Ce(a,b,c){\"focusin\"===a?(Ae(),pe=b,qe=c,pe.attachEvent(\"onpropertychange\",Be)):\"focusout\"===a&&Ae()}function De(a){if(\"selectionchange\"===a||\"keyup\"===a||\"keydown\"===a)return te(qe)}function Ee(a,b){if(\"click\"===a)return te(b)}function Fe(a,b){if(\"input\"===a||\"change\"===a)return te(b)}function Ge(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var He=\"function\"===typeof Object.is?Object.is:Ge;\nfunction Ie(a,b){if(He(a,b))return!0;if(\"object\"!==typeof a||null===a||\"object\"!==typeof b||null===b)return!1;var c=Object.keys(a),d=Object.keys(b);if(c.length!==d.length)return!1;for(d=0;d<c.length;d++){var e=c[d];if(!ja.call(b,e)||!He(a[e],b[e]))return!1}return!0}function Je(a){for(;a&&a.firstChild;)a=a.firstChild;return a}\nfunction Ke(a,b){var c=Je(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Je(c)}}function Le(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Le(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Me(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Ne(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Oe(a){var b=Me(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Le(c.ownerDocument.documentElement,c)){if(null!==d&&Ne(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Ke(c,f);var g=Ke(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c<b.length;c++)a=b[c],a.element.scrollLeft=a.left,a.element.scrollTop=a.top}}\nvar Pe=ia&&\"documentMode\"in document&&11>=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Ne(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Ie(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0<d.length&&(b=new td(\"onSelect\",\"select\",null,b,c),a.push({event:b,listeners:d}),b.target=Qe)))}\nfunction Ve(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c[\"Webkit\"+a]=\"webkit\"+b;c[\"Moz\"+a]=\"moz\"+b;return c}var We={animationend:Ve(\"Animation\",\"AnimationEnd\"),animationiteration:Ve(\"Animation\",\"AnimationIteration\"),animationstart:Ve(\"Animation\",\"AnimationStart\"),transitionend:Ve(\"Transition\",\"TransitionEnd\")},Xe={},Ye={};\nia&&(Ye=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete We.animationend.animation,delete We.animationiteration.animation,delete We.animationstart.animation),\"TransitionEvent\"in window||delete We.transitionend.transition);function Ze(a){if(Xe[a])return Xe[a];if(!We[a])return a;var b=We[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Ye)return Xe[a]=b[c];return a}var $e=Ze(\"animationend\"),af=Ze(\"animationiteration\"),bf=Ze(\"animationstart\"),cf=Ze(\"transitionend\"),df=new Map,ef=\"abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\" \");\nfunction ff(a,b){df.set(a,b);fa(b,[a])}for(var gf=0;gf<ef.length;gf++){var hf=ef[gf],jf=hf.toLowerCase(),kf=hf[0].toUpperCase()+hf.slice(1);ff(jf,\"on\"+kf)}ff($e,\"onAnimationEnd\");ff(af,\"onAnimationIteration\");ff(bf,\"onAnimationStart\");ff(\"dblclick\",\"onDoubleClick\");ff(\"focusin\",\"onFocus\");ff(\"focusout\",\"onBlur\");ff(cf,\"onTransitionEnd\");ha(\"onMouseEnter\",[\"mouseout\",\"mouseover\"]);ha(\"onMouseLeave\",[\"mouseout\",\"mouseover\"]);ha(\"onPointerEnter\",[\"pointerout\",\"pointerover\"]);\nha(\"onPointerLeave\",[\"pointerout\",\"pointerover\"]);fa(\"onChange\",\"change click focusin focusout input keydown keyup selectionchange\".split(\" \"));fa(\"onSelect\",\"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\" \"));fa(\"onBeforeInput\",[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]);fa(\"onCompositionEnd\",\"compositionend focusout keydown keypress keyup mousedown\".split(\" \"));fa(\"onCompositionStart\",\"compositionstart focusout keydown keypress keyup mousedown\".split(\" \"));\nfa(\"onCompositionUpdate\",\"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \"));var lf=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),mf=new Set(\"cancel close invalid load scroll toggle\".split(\" \").concat(lf));\nfunction nf(a,b,c){var d=a.type||\"unknown-event\";a.currentTarget=c;Ub(d,b,void 0,a);a.currentTarget=null}\nfunction se(a,b){b=0!==(b&4);for(var c=0;c<a.length;c++){var d=a[c],e=d.event;d=d.listeners;a:{var f=void 0;if(b)for(var g=d.length-1;0<=g;g--){var h=d[g],k=h.instance,l=h.currentTarget;h=h.listener;if(k!==f&&e.isPropagationStopped())break a;nf(e,h,l);f=k}else for(g=0;g<d.length;g++){h=d[g];k=h.instance;l=h.currentTarget;h=h.listener;if(k!==f&&e.isPropagationStopped())break a;nf(e,h,l);f=k}}}if(Qb)throw a=Rb,Qb=!1,Rb=null,a;}\nfunction D(a,b){var c=b[of];void 0===c&&(c=b[of]=new Set);var d=a+\"__bubble\";c.has(d)||(pf(b,a,2,!1),c.add(d))}function qf(a,b,c){var d=0;b&&(d|=4);pf(c,a,d,b)}var rf=\"_reactListening\"+Math.random().toString(36).slice(2);function sf(a){if(!a[rf]){a[rf]=!0;da.forEach(function(b){\"selectionchange\"!==b&&(mf.has(b)||qf(b,!1,a),qf(b,!0,a))});var b=9===a.nodeType?a:a.ownerDocument;null===b||b[rf]||(b[rf]=!0,qf(\"selectionchange\",!1,b))}}\nfunction pf(a,b,c,d){switch(jd(b)){case 1:var e=ed;break;case 4:e=gd;break;default:e=fd}c=e.bind(null,b,c,a);e=void 0;!Lb||\"touchstart\"!==b&&\"touchmove\"!==b&&\"wheel\"!==b||(e=!0);d?void 0!==e?a.addEventListener(b,c,{capture:!0,passive:e}):a.addEventListener(b,c,!0):void 0!==e?a.addEventListener(b,c,{passive:e}):a.addEventListener(b,c,!1)}\nfunction hd(a,b,c,d,e){var f=d;if(0===(b&1)&&0===(b&2)&&null!==d)a:for(;;){if(null===d)return;var g=d.tag;if(3===g||4===g){var h=d.stateNode.containerInfo;if(h===e||8===h.nodeType&&h.parentNode===e)break;if(4===g)for(g=d.return;null!==g;){var k=g.tag;if(3===k||4===k)if(k=g.stateNode.containerInfo,k===e||8===k.nodeType&&k.parentNode===e)return;g=g.return}for(;null!==h;){g=Wc(h);if(null===g)return;k=g.tag;if(5===k||6===k){d=f=g;continue a}h=h.parentNode}}d=d.return}Jb(function(){var d=f,e=xb(c),g=[];\na:{var h=df.get(a);if(void 0!==h){var k=td,n=a;switch(a){case \"keypress\":if(0===od(c))break a;case \"keydown\":case \"keyup\":k=Rd;break;case \"focusin\":n=\"focus\";k=Fd;break;case \"focusout\":n=\"blur\";k=Fd;break;case \"beforeblur\":case \"afterblur\":k=Fd;break;case \"click\":if(2===c.button)break a;case \"auxclick\":case \"dblclick\":case \"mousedown\":case \"mousemove\":case \"mouseup\":case \"mouseout\":case \"mouseover\":case \"contextmenu\":k=Bd;break;case \"drag\":case \"dragend\":case \"dragenter\":case \"dragexit\":case \"dragleave\":case \"dragover\":case \"dragstart\":case \"drop\":k=\nDd;break;case \"touchcancel\":case \"touchend\":case \"touchmove\":case \"touchstart\":k=Vd;break;case $e:case af:case bf:k=Hd;break;case cf:k=Xd;break;case \"scroll\":k=vd;break;case \"wheel\":k=Zd;break;case \"copy\":case \"cut\":case \"paste\":k=Jd;break;case \"gotpointercapture\":case \"lostpointercapture\":case \"pointercancel\":case \"pointerdown\":case \"pointermove\":case \"pointerout\":case \"pointerover\":case \"pointerup\":k=Td}var t=0!==(b&4),J=!t&&\"scroll\"===a,x=t?null!==h?h+\"Capture\":null:h;t=[];for(var w=d,u;null!==\nw;){u=w;var F=u.stateNode;5===u.tag&&null!==F&&(u=F,null!==x&&(F=Kb(w,x),null!=F&&t.push(tf(w,F,u))));if(J)break;w=w.return}0<t.length&&(h=new k(h,n,null,c,e),g.push({event:h,listeners:t}))}}if(0===(b&7)){a:{h=\"mouseover\"===a||\"pointerover\"===a;k=\"mouseout\"===a||\"pointerout\"===a;if(h&&c!==wb&&(n=c.relatedTarget||c.fromElement)&&(Wc(n)||n[uf]))break a;if(k||h){h=e.window===e?e:(h=e.ownerDocument)?h.defaultView||h.parentWindow:window;if(k){if(n=c.relatedTarget||c.toElement,k=d,n=n?Wc(n):null,null!==\nn&&(J=Vb(n),n!==J||5!==n.tag&&6!==n.tag))n=null}else k=null,n=d;if(k!==n){t=Bd;F=\"onMouseLeave\";x=\"onMouseEnter\";w=\"mouse\";if(\"pointerout\"===a||\"pointerover\"===a)t=Td,F=\"onPointerLeave\",x=\"onPointerEnter\",w=\"pointer\";J=null==k?h:ue(k);u=null==n?h:ue(n);h=new t(F,w+\"leave\",k,c,e);h.target=J;h.relatedTarget=u;F=null;Wc(e)===d&&(t=new t(x,w+\"enter\",n,c,e),t.target=u,t.relatedTarget=J,F=t);J=F;if(k&&n)b:{t=k;x=n;w=0;for(u=t;u;u=vf(u))w++;u=0;for(F=x;F;F=vf(F))u++;for(;0<w-u;)t=vf(t),w--;for(;0<u-w;)x=\nvf(x),u--;for(;w--;){if(t===x||null!==x&&t===x.alternate)break b;t=vf(t);x=vf(x)}t=null}else t=null;null!==k&&wf(g,h,k,t,!1);null!==n&&null!==J&&wf(g,J,n,t,!0)}}}a:{h=d?ue(d):window;k=h.nodeName&&h.nodeName.toLowerCase();if(\"select\"===k||\"input\"===k&&\"file\"===h.type)var na=ve;else if(me(h))if(we)na=Fe;else{na=De;var xa=Ce}else(k=h.nodeName)&&\"input\"===k.toLowerCase()&&(\"checkbox\"===h.type||\"radio\"===h.type)&&(na=Ee);if(na&&(na=na(a,d))){ne(g,na,c,e);break a}xa&&xa(a,h,d);\"focusout\"===a&&(xa=h._wrapperState)&&\nxa.controlled&&\"number\"===h.type&&cb(h,\"number\",h.value)}xa=d?ue(d):window;switch(a){case \"focusin\":if(me(xa)||\"true\"===xa.contentEditable)Qe=xa,Re=d,Se=null;break;case \"focusout\":Se=Re=Qe=null;break;case \"mousedown\":Te=!0;break;case \"contextmenu\":case \"mouseup\":case \"dragend\":Te=!1;Ue(g,c,e);break;case \"selectionchange\":if(Pe)break;case \"keydown\":case \"keyup\":Ue(g,c,e)}var $a;if(ae)b:{switch(a){case \"compositionstart\":var ba=\"onCompositionStart\";break b;case \"compositionend\":ba=\"onCompositionEnd\";\nbreak b;case \"compositionupdate\":ba=\"onCompositionUpdate\";break b}ba=void 0}else ie?ge(a,c)&&(ba=\"onCompositionEnd\"):\"keydown\"===a&&229===c.keyCode&&(ba=\"onCompositionStart\");ba&&(de&&\"ko\"!==c.locale&&(ie||\"onCompositionStart\"!==ba?\"onCompositionEnd\"===ba&&ie&&($a=nd()):(kd=e,ld=\"value\"in kd?kd.value:kd.textContent,ie=!0)),xa=oe(d,ba),0<xa.length&&(ba=new Ld(ba,a,null,c,e),g.push({event:ba,listeners:xa}),$a?ba.data=$a:($a=he(c),null!==$a&&(ba.data=$a))));if($a=ce?je(a,c):ke(a,c))d=oe(d,\"onBeforeInput\"),\n0<d.length&&(e=new Ld(\"onBeforeInput\",\"beforeinput\",null,c,e),g.push({event:e,listeners:d}),e.data=$a)}se(g,b)})}function tf(a,b,c){return{instance:a,listener:b,currentTarget:c}}function oe(a,b){for(var c=b+\"Capture\",d=[];null!==a;){var e=a,f=e.stateNode;5===e.tag&&null!==f&&(e=f,f=Kb(a,c),null!=f&&d.unshift(tf(a,f,e)),f=Kb(a,b),null!=f&&d.push(tf(a,f,e)));a=a.return}return d}function vf(a){if(null===a)return null;do a=a.return;while(a&&5!==a.tag);return a?a:null}\nfunction wf(a,b,c,d,e){for(var f=b._reactName,g=[];null!==c&&c!==d;){var h=c,k=h.alternate,l=h.stateNode;if(null!==k&&k===d)break;5===h.tag&&null!==l&&(h=l,e?(k=Kb(c,f),null!=k&&g.unshift(tf(c,k,h))):e||(k=Kb(c,f),null!=k&&g.push(tf(c,k,h))));c=c.return}0!==g.length&&a.push({event:b,listeners:g})}var xf=/\\r\\n?/g,yf=/\\u0000|\\uFFFD/g;function zf(a){return(\"string\"===typeof a?a:\"\"+a).replace(xf,\"\\n\").replace(yf,\"\")}function Af(a,b,c){b=zf(b);if(zf(a)!==b&&c)throw Error(p(425));}function Bf(){}\nvar Cf=null,Df=null;function Ef(a,b){return\"textarea\"===a||\"noscript\"===a||\"string\"===typeof b.children||\"number\"===typeof b.children||\"object\"===typeof b.dangerouslySetInnerHTML&&null!==b.dangerouslySetInnerHTML&&null!=b.dangerouslySetInnerHTML.__html}\nvar Ff=\"function\"===typeof setTimeout?setTimeout:void 0,Gf=\"function\"===typeof clearTimeout?clearTimeout:void 0,Hf=\"function\"===typeof Promise?Promise:void 0,Jf=\"function\"===typeof queueMicrotask?queueMicrotask:\"undefined\"!==typeof Hf?function(a){return Hf.resolve(null).then(a).catch(If)}:Ff;function If(a){setTimeout(function(){throw a;})}\nfunction Kf(a,b){var c=b,d=0;do{var e=c.nextSibling;a.removeChild(c);if(e&&8===e.nodeType)if(c=e.data,\"/$\"===c){if(0===d){a.removeChild(e);bd(b);return}d--}else\"$\"!==c&&\"$?\"!==c&&\"$!\"!==c||d++;c=e}while(c);bd(b)}function Lf(a){for(;null!=a;a=a.nextSibling){var b=a.nodeType;if(1===b||3===b)break;if(8===b){b=a.data;if(\"$\"===b||\"$!\"===b||\"$?\"===b)break;if(\"/$\"===b)return null}}return a}\nfunction Mf(a){a=a.previousSibling;for(var b=0;a;){if(8===a.nodeType){var c=a.data;if(\"$\"===c||\"$!\"===c||\"$?\"===c){if(0===b)return a;b--}else\"/$\"===c&&b++}a=a.previousSibling}return null}var Nf=Math.random().toString(36).slice(2),Of=\"__reactFiber$\"+Nf,Pf=\"__reactProps$\"+Nf,uf=\"__reactContainer$\"+Nf,of=\"__reactEvents$\"+Nf,Qf=\"__reactListeners$\"+Nf,Rf=\"__reactHandles$\"+Nf;\nfunction Wc(a){var b=a[Of];if(b)return b;for(var c=a.parentNode;c;){if(b=c[uf]||c[Of]){c=b.alternate;if(null!==b.child||null!==c&&null!==c.child)for(a=Mf(a);null!==a;){if(c=a[Of])return c;a=Mf(a)}return b}a=c;c=a.parentNode}return null}function Cb(a){a=a[Of]||a[uf];return!a||5!==a.tag&&6!==a.tag&&13!==a.tag&&3!==a.tag?null:a}function ue(a){if(5===a.tag||6===a.tag)return a.stateNode;throw Error(p(33));}function Db(a){return a[Pf]||null}var Sf=[],Tf=-1;function Uf(a){return{current:a}}\nfunction E(a){0>Tf||(a.current=Sf[Tf],Sf[Tf]=null,Tf--)}function G(a,b){Tf++;Sf[Tf]=a.current;a.current=b}var Vf={},H=Uf(Vf),Wf=Uf(!1),Xf=Vf;function Yf(a,b){var c=a.type.contextTypes;if(!c)return Vf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction Zf(a){a=a.childContextTypes;return null!==a&&void 0!==a}function $f(){E(Wf);E(H)}function ag(a,b,c){if(H.current!==Vf)throw Error(p(168));G(H,b);G(Wf,c)}function bg(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(p(108,Ra(a)||\"Unknown\",e));return A({},c,d)}\nfunction cg(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Vf;Xf=H.current;G(H,a);G(Wf,Wf.current);return!0}function dg(a,b,c){var d=a.stateNode;if(!d)throw Error(p(169));c?(a=bg(a,b,Xf),d.__reactInternalMemoizedMergedChildContext=a,E(Wf),E(H),G(H,a)):E(Wf);G(Wf,c)}var eg=null,fg=!1,gg=!1;function hg(a){null===eg?eg=[a]:eg.push(a)}function ig(a){fg=!0;hg(a)}\nfunction jg(){if(!gg&&null!==eg){gg=!0;var a=0,b=C;try{var c=eg;for(C=1;a<c.length;a++){var d=c[a];do d=d(!0);while(null!==d)}eg=null;fg=!1}catch(e){throw null!==eg&&(eg=eg.slice(a+1)),ac(fc,jg),e;}finally{C=b,gg=!1}}return null}var kg=[],lg=0,mg=null,ng=0,og=[],pg=0,qg=null,rg=1,sg=\"\";function tg(a,b){kg[lg++]=ng;kg[lg++]=mg;mg=a;ng=b}\nfunction ug(a,b,c){og[pg++]=rg;og[pg++]=sg;og[pg++]=qg;qg=a;var d=rg;a=sg;var e=32-oc(d)-1;d&=~(1<<e);c+=1;var f=32-oc(b)+e;if(30<f){var g=e-e%5;f=(d&(1<<g)-1).toString(32);d>>=g;e-=g;rg=1<<32-oc(b)+e|c<<e|d;sg=f+a}else rg=1<<f|c<<e|d,sg=a}function vg(a){null!==a.return&&(tg(a,1),ug(a,1,0))}function wg(a){for(;a===mg;)mg=kg[--lg],kg[lg]=null,ng=kg[--lg],kg[lg]=null;for(;a===qg;)qg=og[--pg],og[pg]=null,sg=og[--pg],og[pg]=null,rg=og[--pg],og[pg]=null}var xg=null,yg=null,I=!1,zg=null;\nfunction Ag(a,b){var c=Bg(5,null,null,0);c.elementType=\"DELETED\";c.stateNode=b;c.return=a;b=a.deletions;null===b?(a.deletions=[c],a.flags|=16):b.push(c)}\nfunction Cg(a,b){switch(a.tag){case 5:var c=a.type;b=1!==b.nodeType||c.toLowerCase()!==b.nodeName.toLowerCase()?null:b;return null!==b?(a.stateNode=b,xg=a,yg=Lf(b.firstChild),!0):!1;case 6:return b=\"\"===a.pendingProps||3!==b.nodeType?null:b,null!==b?(a.stateNode=b,xg=a,yg=null,!0):!1;case 13:return b=8!==b.nodeType?null:b,null!==b?(c=null!==qg?{id:rg,overflow:sg}:null,a.memoizedState={dehydrated:b,treeContext:c,retryLane:1073741824},c=Bg(18,null,null,0),c.stateNode=b,c.return=a,a.child=c,xg=a,yg=\nnull,!0):!1;default:return!1}}function Dg(a){return 0!==(a.mode&1)&&0===(a.flags&128)}function Eg(a){if(I){var b=yg;if(b){var c=b;if(!Cg(a,b)){if(Dg(a))throw Error(p(418));b=Lf(c.nextSibling);var d=xg;b&&Cg(a,b)?Ag(d,c):(a.flags=a.flags&-4097|2,I=!1,xg=a)}}else{if(Dg(a))throw Error(p(418));a.flags=a.flags&-4097|2;I=!1;xg=a}}}function Fg(a){for(a=a.return;null!==a&&5!==a.tag&&3!==a.tag&&13!==a.tag;)a=a.return;xg=a}\nfunction Gg(a){if(a!==xg)return!1;if(!I)return Fg(a),I=!0,!1;var b;(b=3!==a.tag)&&!(b=5!==a.tag)&&(b=a.type,b=\"head\"!==b&&\"body\"!==b&&!Ef(a.type,a.memoizedProps));if(b&&(b=yg)){if(Dg(a))throw Hg(),Error(p(418));for(;b;)Ag(a,b),b=Lf(b.nextSibling)}Fg(a);if(13===a.tag){a=a.memoizedState;a=null!==a?a.dehydrated:null;if(!a)throw Error(p(317));a:{a=a.nextSibling;for(b=0;a;){if(8===a.nodeType){var c=a.data;if(\"/$\"===c){if(0===b){yg=Lf(a.nextSibling);break a}b--}else\"$\"!==c&&\"$!\"!==c&&\"$?\"!==c||b++}a=a.nextSibling}yg=\nnull}}else yg=xg?Lf(a.stateNode.nextSibling):null;return!0}function Hg(){for(var a=yg;a;)a=Lf(a.nextSibling)}function Ig(){yg=xg=null;I=!1}function Jg(a){null===zg?zg=[a]:zg.push(a)}var Kg=ua.ReactCurrentBatchConfig;\nfunction Lg(a,b,c){a=c.ref;if(null!==a&&\"function\"!==typeof a&&\"object\"!==typeof a){if(c._owner){c=c._owner;if(c){if(1!==c.tag)throw Error(p(309));var d=c.stateNode}if(!d)throw Error(p(147,a));var e=d,f=\"\"+a;if(null!==b&&null!==b.ref&&\"function\"===typeof b.ref&&b.ref._stringRef===f)return b.ref;b=function(a){var b=e.refs;null===a?delete b[f]:b[f]=a};b._stringRef=f;return b}if(\"string\"!==typeof a)throw Error(p(284));if(!c._owner)throw Error(p(290,a));}return a}\nfunction Mg(a,b){a=Object.prototype.toString.call(b);throw Error(p(31,\"[object Object]\"===a?\"object with keys {\"+Object.keys(b).join(\", \")+\"}\":a));}function Ng(a){var b=a._init;return b(a._payload)}\nfunction Og(a){function b(b,c){if(a){var d=b.deletions;null===d?(b.deletions=[c],b.flags|=16):d.push(c)}}function c(c,d){if(!a)return null;for(;null!==d;)b(c,d),d=d.sibling;return null}function d(a,b){for(a=new Map;null!==b;)null!==b.key?a.set(b.key,b):a.set(b.index,b),b=b.sibling;return a}function e(a,b){a=Pg(a,b);a.index=0;a.sibling=null;return a}function f(b,c,d){b.index=d;if(!a)return b.flags|=1048576,c;d=b.alternate;if(null!==d)return d=d.index,d<c?(b.flags|=2,c):d;b.flags|=2;return c}function g(b){a&&\nnull===b.alternate&&(b.flags|=2);return b}function h(a,b,c,d){if(null===b||6!==b.tag)return b=Qg(c,a.mode,d),b.return=a,b;b=e(b,c);b.return=a;return b}function k(a,b,c,d){var f=c.type;if(f===ya)return m(a,b,c.props.children,d,c.key);if(null!==b&&(b.elementType===f||\"object\"===typeof f&&null!==f&&f.$$typeof===Ha&&Ng(f)===b.type))return d=e(b,c.props),d.ref=Lg(a,b,c),d.return=a,d;d=Rg(c.type,c.key,c.props,null,a.mode,d);d.ref=Lg(a,b,c);d.return=a;return d}function l(a,b,c,d){if(null===b||4!==b.tag||\nb.stateNode.containerInfo!==c.containerInfo||b.stateNode.implementation!==c.implementation)return b=Sg(c,a.mode,d),b.return=a,b;b=e(b,c.children||[]);b.return=a;return b}function m(a,b,c,d,f){if(null===b||7!==b.tag)return b=Tg(c,a.mode,d,f),b.return=a,b;b=e(b,c);b.return=a;return b}function q(a,b,c){if(\"string\"===typeof b&&\"\"!==b||\"number\"===typeof b)return b=Qg(\"\"+b,a.mode,c),b.return=a,b;if(\"object\"===typeof b&&null!==b){switch(b.$$typeof){case va:return c=Rg(b.type,b.key,b.props,null,a.mode,c),\nc.ref=Lg(a,null,b),c.return=a,c;case wa:return b=Sg(b,a.mode,c),b.return=a,b;case Ha:var d=b._init;return q(a,d(b._payload),c)}if(eb(b)||Ka(b))return b=Tg(b,a.mode,c,null),b.return=a,b;Mg(a,b)}return null}function r(a,b,c,d){var e=null!==b?b.key:null;if(\"string\"===typeof c&&\"\"!==c||\"number\"===typeof c)return null!==e?null:h(a,b,\"\"+c,d);if(\"object\"===typeof c&&null!==c){switch(c.$$typeof){case va:return c.key===e?k(a,b,c,d):null;case wa:return c.key===e?l(a,b,c,d):null;case Ha:return e=c._init,r(a,\nb,e(c._payload),d)}if(eb(c)||Ka(c))return null!==e?null:m(a,b,c,d,null);Mg(a,c)}return null}function y(a,b,c,d,e){if(\"string\"===typeof d&&\"\"!==d||\"number\"===typeof d)return a=a.get(c)||null,h(b,a,\"\"+d,e);if(\"object\"===typeof d&&null!==d){switch(d.$$typeof){case va:return a=a.get(null===d.key?c:d.key)||null,k(b,a,d,e);case wa:return a=a.get(null===d.key?c:d.key)||null,l(b,a,d,e);case Ha:var f=d._init;return y(a,b,c,f(d._payload),e)}if(eb(d)||Ka(d))return a=a.get(c)||null,m(b,a,d,e,null);Mg(b,d)}return null}\nfunction n(e,g,h,k){for(var l=null,m=null,u=g,w=g=0,x=null;null!==u&&w<h.length;w++){u.index>w?(x=u,u=null):x=u.sibling;var n=r(e,u,h[w],k);if(null===n){null===u&&(u=x);break}a&&u&&null===n.alternate&&b(e,u);g=f(n,g,w);null===m?l=n:m.sibling=n;m=n;u=x}if(w===h.length)return c(e,u),I&&tg(e,w),l;if(null===u){for(;w<h.length;w++)u=q(e,h[w],k),null!==u&&(g=f(u,g,w),null===m?l=u:m.sibling=u,m=u);I&&tg(e,w);return l}for(u=d(e,u);w<h.length;w++)x=y(u,e,w,h[w],k),null!==x&&(a&&null!==x.alternate&&u.delete(null===\nx.key?w:x.key),g=f(x,g,w),null===m?l=x:m.sibling=x,m=x);a&&u.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function t(e,g,h,k){var l=Ka(h);if(\"function\"!==typeof l)throw Error(p(150));h=l.call(h);if(null==h)throw Error(p(151));for(var u=l=null,m=g,w=g=0,x=null,n=h.next();null!==m&&!n.done;w++,n=h.next()){m.index>w?(x=m,m=null):x=m.sibling;var t=r(e,m,n.value,k);if(null===t){null===m&&(m=x);break}a&&m&&null===t.alternate&&b(e,m);g=f(t,g,w);null===u?l=t:u.sibling=t;u=t;m=x}if(n.done)return c(e,\nm),I&&tg(e,w),l;if(null===m){for(;!n.done;w++,n=h.next())n=q(e,n.value,k),null!==n&&(g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);I&&tg(e,w);return l}for(m=d(e,m);!n.done;w++,n=h.next())n=y(m,e,w,n.value,k),null!==n&&(a&&null!==n.alternate&&m.delete(null===n.key?w:n.key),g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);a&&m.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function J(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===ya&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==f){switch(f.$$typeof){case va:a:{for(var k=\nf.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===ya){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===Ha&&Ng(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=Lg(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===ya?(d=Tg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Rg(f.type,f.key,f.props,null,a.mode,h),h.ref=Lg(a,d,f),h.return=a,a=h)}return g(a);case wa:a:{for(l=f.key;null!==\nd;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=Sg(f,a.mode,h);d.return=a;a=d}return g(a);case Ha:return l=f._init,J(a,d,l(f._payload),h)}if(eb(f))return n(a,d,f,h);if(Ka(f))return t(a,d,f,h);Mg(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):\n(c(a,d),d=Qg(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return J}var Ug=Og(!0),Vg=Og(!1),Wg=Uf(null),Xg=null,Yg=null,Zg=null;function $g(){Zg=Yg=Xg=null}function ah(a){var b=Wg.current;E(Wg);a._currentValue=b}function bh(a,b,c){for(;null!==a;){var d=a.alternate;(a.childLanes&b)!==b?(a.childLanes|=b,null!==d&&(d.childLanes|=b)):null!==d&&(d.childLanes&b)!==b&&(d.childLanes|=b);if(a===c)break;a=a.return}}\nfunction ch(a,b){Xg=a;Zg=Yg=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(0!==(a.lanes&b)&&(dh=!0),a.firstContext=null)}function eh(a){var b=a._currentValue;if(Zg!==a)if(a={context:a,memoizedValue:b,next:null},null===Yg){if(null===Xg)throw Error(p(308));Yg=a;Xg.dependencies={lanes:0,firstContext:a}}else Yg=Yg.next=a;return b}var fh=null;function gh(a){null===fh?fh=[a]:fh.push(a)}\nfunction hh(a,b,c,d){var e=b.interleaved;null===e?(c.next=c,gh(b)):(c.next=e.next,e.next=c);b.interleaved=c;return ih(a,d)}function ih(a,b){a.lanes|=b;var c=a.alternate;null!==c&&(c.lanes|=b);c=a;for(a=a.return;null!==a;)a.childLanes|=b,c=a.alternate,null!==c&&(c.childLanes|=b),c=a,a=a.return;return 3===c.tag?c.stateNode:null}var jh=!1;function kh(a){a.updateQueue={baseState:a.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}\nfunction lh(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,firstBaseUpdate:a.firstBaseUpdate,lastBaseUpdate:a.lastBaseUpdate,shared:a.shared,effects:a.effects})}function mh(a,b){return{eventTime:a,lane:b,tag:0,payload:null,callback:null,next:null}}\nfunction nh(a,b,c){var d=a.updateQueue;if(null===d)return null;d=d.shared;if(0!==(K&2)){var e=d.pending;null===e?b.next=b:(b.next=e.next,e.next=b);d.pending=b;return ih(a,c)}e=d.interleaved;null===e?(b.next=b,gh(d)):(b.next=e.next,e.next=b);d.interleaved=b;return ih(a,c)}function oh(a,b,c){b=b.updateQueue;if(null!==b&&(b=b.shared,0!==(c&4194240))){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nfunction ph(a,b){var c=a.updateQueue,d=a.alternate;if(null!==d&&(d=d.updateQueue,c===d)){var e=null,f=null;c=c.firstBaseUpdate;if(null!==c){do{var g={eventTime:c.eventTime,lane:c.lane,tag:c.tag,payload:c.payload,callback:c.callback,next:null};null===f?e=f=g:f=f.next=g;c=c.next}while(null!==c);null===f?e=f=b:f=f.next=b}else e=f=b;c={baseState:d.baseState,firstBaseUpdate:e,lastBaseUpdate:f,shared:d.shared,effects:d.effects};a.updateQueue=c;return}a=c.lastBaseUpdate;null===a?c.firstBaseUpdate=b:a.next=\nb;c.lastBaseUpdate=b}\nfunction qh(a,b,c,d){var e=a.updateQueue;jh=!1;var f=e.firstBaseUpdate,g=e.lastBaseUpdate,h=e.shared.pending;if(null!==h){e.shared.pending=null;var k=h,l=k.next;k.next=null;null===g?f=l:g.next=l;g=k;var m=a.alternate;null!==m&&(m=m.updateQueue,h=m.lastBaseUpdate,h!==g&&(null===h?m.firstBaseUpdate=l:h.next=l,m.lastBaseUpdate=k))}if(null!==f){var q=e.baseState;g=0;m=l=k=null;h=f;do{var r=h.lane,y=h.eventTime;if((d&r)===r){null!==m&&(m=m.next={eventTime:y,lane:0,tag:h.tag,payload:h.payload,callback:h.callback,\nnext:null});a:{var n=a,t=h;r=b;y=c;switch(t.tag){case 1:n=t.payload;if(\"function\"===typeof n){q=n.call(y,q,r);break a}q=n;break a;case 3:n.flags=n.flags&-65537|128;case 0:n=t.payload;r=\"function\"===typeof n?n.call(y,q,r):n;if(null===r||void 0===r)break a;q=A({},q,r);break a;case 2:jh=!0}}null!==h.callback&&0!==h.lane&&(a.flags|=64,r=e.effects,null===r?e.effects=[h]:r.push(h))}else y={eventTime:y,lane:r,tag:h.tag,payload:h.payload,callback:h.callback,next:null},null===m?(l=m=y,k=q):m=m.next=y,g|=r;\nh=h.next;if(null===h)if(h=e.shared.pending,null===h)break;else r=h,h=r.next,r.next=null,e.lastBaseUpdate=r,e.shared.pending=null}while(1);null===m&&(k=q);e.baseState=k;e.firstBaseUpdate=l;e.lastBaseUpdate=m;b=e.shared.interleaved;if(null!==b){e=b;do g|=e.lane,e=e.next;while(e!==b)}else null===f&&(e.shared.lanes=0);rh|=g;a.lanes=g;a.memoizedState=q}}\nfunction sh(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;b<a.length;b++){var d=a[b],e=d.callback;if(null!==e){d.callback=null;d=c;if(\"function\"!==typeof e)throw Error(p(191,e));e.call(d)}}}var th={},uh=Uf(th),vh=Uf(th),wh=Uf(th);function xh(a){if(a===th)throw Error(p(174));return a}\nfunction yh(a,b){G(wh,b);G(vh,a);G(uh,th);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:lb(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=lb(b,a)}E(uh);G(uh,b)}function zh(){E(uh);E(vh);E(wh)}function Ah(a){xh(wh.current);var b=xh(uh.current);var c=lb(b,a.type);b!==c&&(G(vh,a),G(uh,c))}function Bh(a){vh.current===a&&(E(uh),E(vh))}var L=Uf(0);\nfunction Ch(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||\"$?\"===c.data||\"$!\"===c.data))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&128))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}var Dh=[];\nfunction Eh(){for(var a=0;a<Dh.length;a++)Dh[a]._workInProgressVersionPrimary=null;Dh.length=0}var Fh=ua.ReactCurrentDispatcher,Gh=ua.ReactCurrentBatchConfig,Hh=0,M=null,N=null,O=null,Ih=!1,Jh=!1,Kh=0,Lh=0;function P(){throw Error(p(321));}function Mh(a,b){if(null===b)return!1;for(var c=0;c<b.length&&c<a.length;c++)if(!He(a[c],b[c]))return!1;return!0}\nfunction Nh(a,b,c,d,e,f){Hh=f;M=b;b.memoizedState=null;b.updateQueue=null;b.lanes=0;Fh.current=null===a||null===a.memoizedState?Oh:Ph;a=c(d,e);if(Jh){f=0;do{Jh=!1;Kh=0;if(25<=f)throw Error(p(301));f+=1;O=N=null;b.updateQueue=null;Fh.current=Qh;a=c(d,e)}while(Jh)}Fh.current=Rh;b=null!==N&&null!==N.next;Hh=0;O=N=M=null;Ih=!1;if(b)throw Error(p(300));return a}function Sh(){var a=0!==Kh;Kh=0;return a}\nfunction Th(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===O?M.memoizedState=O=a:O=O.next=a;return O}function Uh(){if(null===N){var a=M.alternate;a=null!==a?a.memoizedState:null}else a=N.next;var b=null===O?M.memoizedState:O.next;if(null!==b)O=b,N=a;else{if(null===a)throw Error(p(310));N=a;a={memoizedState:N.memoizedState,baseState:N.baseState,baseQueue:N.baseQueue,queue:N.queue,next:null};null===O?M.memoizedState=O=a:O=O.next=a}return O}\nfunction Vh(a,b){return\"function\"===typeof b?b(a):b}\nfunction Wh(a){var b=Uh(),c=b.queue;if(null===c)throw Error(p(311));c.lastRenderedReducer=a;var d=N,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g}d.baseQueue=e=f;c.pending=null}if(null!==e){f=e.next;d=d.baseState;var h=g=null,k=null,l=f;do{var m=l.lane;if((Hh&m)===m)null!==k&&(k=k.next={lane:0,action:l.action,hasEagerState:l.hasEagerState,eagerState:l.eagerState,next:null}),d=l.hasEagerState?l.eagerState:a(d,l.action);else{var q={lane:m,action:l.action,hasEagerState:l.hasEagerState,\neagerState:l.eagerState,next:null};null===k?(h=k=q,g=d):k=k.next=q;M.lanes|=m;rh|=m}l=l.next}while(null!==l&&l!==f);null===k?g=d:k.next=h;He(d,b.memoizedState)||(dh=!0);b.memoizedState=d;b.baseState=g;b.baseQueue=k;c.lastRenderedState=d}a=c.interleaved;if(null!==a){e=a;do f=e.lane,M.lanes|=f,rh|=f,e=e.next;while(e!==a)}else null===e&&(c.lanes=0);return[b.memoizedState,c.dispatch]}\nfunction Xh(a){var b=Uh(),c=b.queue;if(null===c)throw Error(p(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);He(f,b.memoizedState)||(dh=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f}return[f,d]}function Yh(){}\nfunction Zh(a,b){var c=M,d=Uh(),e=b(),f=!He(d.memoizedState,e);f&&(d.memoizedState=e,dh=!0);d=d.queue;$h(ai.bind(null,c,d,a),[a]);if(d.getSnapshot!==b||f||null!==O&&O.memoizedState.tag&1){c.flags|=2048;bi(9,ci.bind(null,c,d,e,b),void 0,null);if(null===Q)throw Error(p(349));0!==(Hh&30)||di(c,b,e)}return e}function di(a,b,c){a.flags|=16384;a={getSnapshot:b,value:c};b=M.updateQueue;null===b?(b={lastEffect:null,stores:null},M.updateQueue=b,b.stores=[a]):(c=b.stores,null===c?b.stores=[a]:c.push(a))}\nfunction ci(a,b,c,d){b.value=c;b.getSnapshot=d;ei(b)&&fi(a)}function ai(a,b,c){return c(function(){ei(b)&&fi(a)})}function ei(a){var b=a.getSnapshot;a=a.value;try{var c=b();return!He(a,c)}catch(d){return!0}}function fi(a){var b=ih(a,1);null!==b&&gi(b,a,1,-1)}\nfunction hi(a){var b=Th();\"function\"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Vh,lastRenderedState:a};b.queue=a;a=a.dispatch=ii.bind(null,M,a);return[b.memoizedState,a]}\nfunction bi(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};b=M.updateQueue;null===b?(b={lastEffect:null,stores:null},M.updateQueue=b,b.lastEffect=a.next=a):(c=b.lastEffect,null===c?b.lastEffect=a.next=a:(d=c.next,c.next=a,a.next=d,b.lastEffect=a));return a}function ji(){return Uh().memoizedState}function ki(a,b,c,d){var e=Th();M.flags|=a;e.memoizedState=bi(1|b,c,void 0,void 0===d?null:d)}\nfunction li(a,b,c,d){var e=Uh();d=void 0===d?null:d;var f=void 0;if(null!==N){var g=N.memoizedState;f=g.destroy;if(null!==d&&Mh(d,g.deps)){e.memoizedState=bi(b,c,f,d);return}}M.flags|=a;e.memoizedState=bi(1|b,c,f,d)}function mi(a,b){return ki(8390656,8,a,b)}function $h(a,b){return li(2048,8,a,b)}function ni(a,b){return li(4,2,a,b)}function oi(a,b){return li(4,4,a,b)}\nfunction pi(a,b){if(\"function\"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}function qi(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return li(4,4,pi.bind(null,b,a),c)}function ri(){}function si(a,b){var c=Uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&Mh(b,d[1]))return d[0];c.memoizedState=[a,b];return a}\nfunction ti(a,b){var c=Uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&Mh(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a}function ui(a,b,c){if(0===(Hh&21))return a.baseState&&(a.baseState=!1,dh=!0),a.memoizedState=c;He(c,b)||(c=yc(),M.lanes|=c,rh|=c,a.baseState=!0);return b}function vi(a,b){var c=C;C=0!==c&&4>c?c:4;a(!0);var d=Gh.transition;Gh.transition={};try{a(!1),b()}finally{C=c,Gh.transition=d}}function wi(){return Uh().memoizedState}\nfunction xi(a,b,c){var d=yi(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi(a))Ai(b,c);else if(c=hh(a,b,c,d),null!==c){var e=R();gi(c,a,d,e);Bi(c,b,d)}}\nfunction ii(a,b,c){var d=yi(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi(a))Ai(b,e);else{var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(He(h,g)){var k=b.interleaved;null===k?(e.next=e,gh(b)):(e.next=k.next,k.next=e);b.interleaved=e;return}}catch(l){}finally{}c=hh(a,b,e,d);null!==c&&(e=R(),gi(c,a,d,e),Bi(c,b,d))}}\nfunction zi(a){var b=a.alternate;return a===M||null!==b&&b===M}function Ai(a,b){Jh=Ih=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function Bi(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nvar Rh={readContext:eh,useCallback:P,useContext:P,useEffect:P,useImperativeHandle:P,useInsertionEffect:P,useLayoutEffect:P,useMemo:P,useReducer:P,useRef:P,useState:P,useDebugValue:P,useDeferredValue:P,useTransition:P,useMutableSource:P,useSyncExternalStore:P,useId:P,unstable_isNewReconciler:!1},Oh={readContext:eh,useCallback:function(a,b){Th().memoizedState=[a,void 0===b?null:b];return a},useContext:eh,useEffect:mi,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ki(4194308,\n4,pi.bind(null,b,a),c)},useLayoutEffect:function(a,b){return ki(4194308,4,a,b)},useInsertionEffect:function(a,b){return ki(4,2,a,b)},useMemo:function(a,b){var c=Th();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=Th();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=xi.bind(null,M,a);return[d.memoizedState,a]},useRef:function(a){var b=\nTh();a={current:a};return b.memoizedState=a},useState:hi,useDebugValue:ri,useDeferredValue:function(a){return Th().memoizedState=a},useTransition:function(){var a=hi(!1),b=a[0];a=vi.bind(null,a[1]);Th().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=M,e=Th();if(I){if(void 0===c)throw Error(p(407));c=c()}else{c=b();if(null===Q)throw Error(p(349));0!==(Hh&30)||di(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;mi(ai.bind(null,d,\nf,a),[a]);d.flags|=2048;bi(9,ci.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=Th(),b=Q.identifierPrefix;if(I){var c=sg;var d=rg;c=(d&~(1<<32-oc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=Kh++;0<c&&(b+=\"H\"+c.toString(32));b+=\":\"}else c=Lh++,b=\":\"+b+\"r\"+c.toString(32)+\":\";return a.memoizedState=b},unstable_isNewReconciler:!1},Ph={readContext:eh,useCallback:si,useContext:eh,useEffect:$h,useImperativeHandle:qi,useInsertionEffect:ni,useLayoutEffect:oi,useMemo:ti,useReducer:Wh,useRef:ji,useState:function(){return Wh(Vh)},\nuseDebugValue:ri,useDeferredValue:function(a){var b=Uh();return ui(b,N.memoizedState,a)},useTransition:function(){var a=Wh(Vh)[0],b=Uh().memoizedState;return[a,b]},useMutableSource:Yh,useSyncExternalStore:Zh,useId:wi,unstable_isNewReconciler:!1},Qh={readContext:eh,useCallback:si,useContext:eh,useEffect:$h,useImperativeHandle:qi,useInsertionEffect:ni,useLayoutEffect:oi,useMemo:ti,useReducer:Xh,useRef:ji,useState:function(){return Xh(Vh)},useDebugValue:ri,useDeferredValue:function(a){var b=Uh();return null===\nN?b.memoizedState=a:ui(b,N.memoizedState,a)},useTransition:function(){var a=Xh(Vh)[0],b=Uh().memoizedState;return[a,b]},useMutableSource:Yh,useSyncExternalStore:Zh,useId:wi,unstable_isNewReconciler:!1};function Ci(a,b){if(a&&a.defaultProps){b=A({},b);a=a.defaultProps;for(var c in a)void 0===b[c]&&(b[c]=a[c]);return b}return b}function Di(a,b,c,d){b=a.memoizedState;c=c(d,b);c=null===c||void 0===c?b:A({},b,c);a.memoizedState=c;0===a.lanes&&(a.updateQueue.baseState=c)}\nvar Ei={isMounted:function(a){return(a=a._reactInternals)?Vb(a)===a:!1},enqueueSetState:function(a,b,c){a=a._reactInternals;var d=R(),e=yi(a),f=mh(d,e);f.payload=b;void 0!==c&&null!==c&&(f.callback=c);b=nh(a,f,e);null!==b&&(gi(b,a,e,d),oh(b,a,e))},enqueueReplaceState:function(a,b,c){a=a._reactInternals;var d=R(),e=yi(a),f=mh(d,e);f.tag=1;f.payload=b;void 0!==c&&null!==c&&(f.callback=c);b=nh(a,f,e);null!==b&&(gi(b,a,e,d),oh(b,a,e))},enqueueForceUpdate:function(a,b){a=a._reactInternals;var c=R(),d=\nyi(a),e=mh(c,d);e.tag=2;void 0!==b&&null!==b&&(e.callback=b);b=nh(a,e,d);null!==b&&(gi(b,a,d,c),oh(b,a,d))}};function Fi(a,b,c,d,e,f,g){a=a.stateNode;return\"function\"===typeof a.shouldComponentUpdate?a.shouldComponentUpdate(d,f,g):b.prototype&&b.prototype.isPureReactComponent?!Ie(c,d)||!Ie(e,f):!0}\nfunction Gi(a,b,c){var d=!1,e=Vf;var f=b.contextType;\"object\"===typeof f&&null!==f?f=eh(f):(e=Zf(b)?Xf:H.current,d=b.contextTypes,f=(d=null!==d&&void 0!==d)?Yf(a,e):Vf);b=new b(c,f);a.memoizedState=null!==b.state&&void 0!==b.state?b.state:null;b.updater=Ei;a.stateNode=b;b._reactInternals=a;d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=e,a.__reactInternalMemoizedMaskedChildContext=f);return b}\nfunction Hi(a,b,c,d){a=b.state;\"function\"===typeof b.componentWillReceiveProps&&b.componentWillReceiveProps(c,d);\"function\"===typeof b.UNSAFE_componentWillReceiveProps&&b.UNSAFE_componentWillReceiveProps(c,d);b.state!==a&&Ei.enqueueReplaceState(b,b.state,null)}\nfunction Ii(a,b,c,d){var e=a.stateNode;e.props=c;e.state=a.memoizedState;e.refs={};kh(a);var f=b.contextType;\"object\"===typeof f&&null!==f?e.context=eh(f):(f=Zf(b)?Xf:H.current,e.context=Yf(a,f));e.state=a.memoizedState;f=b.getDerivedStateFromProps;\"function\"===typeof f&&(Di(a,b,f,c),e.state=a.memoizedState);\"function\"===typeof b.getDerivedStateFromProps||\"function\"===typeof e.getSnapshotBeforeUpdate||\"function\"!==typeof e.UNSAFE_componentWillMount&&\"function\"!==typeof e.componentWillMount||(b=e.state,\n\"function\"===typeof e.componentWillMount&&e.componentWillMount(),\"function\"===typeof e.UNSAFE_componentWillMount&&e.UNSAFE_componentWillMount(),b!==e.state&&Ei.enqueueReplaceState(e,e.state,null),qh(a,c,e,d),e.state=a.memoizedState);\"function\"===typeof e.componentDidMount&&(a.flags|=4194308)}function Ji(a,b){try{var c=\"\",d=b;do c+=Pa(d),d=d.return;while(d);var e=c}catch(f){e=\"\\nError generating stack: \"+f.message+\"\\n\"+f.stack}return{value:a,source:b,stack:e,digest:null}}\nfunction Ki(a,b,c){return{value:a,source:null,stack:null!=c?c:null,digest:null!=b?b:null}}function Li(a,b){try{console.error(b.value)}catch(c){setTimeout(function(){throw c;})}}var Mi=\"function\"===typeof WeakMap?WeakMap:Map;function Ni(a,b,c){c=mh(-1,c);c.tag=3;c.payload={element:null};var d=b.value;c.callback=function(){Oi||(Oi=!0,Pi=d);Li(a,b)};return c}\nfunction Qi(a,b,c){c=mh(-1,c);c.tag=3;var d=a.type.getDerivedStateFromError;if(\"function\"===typeof d){var e=b.value;c.payload=function(){return d(e)};c.callback=function(){Li(a,b)}}var f=a.stateNode;null!==f&&\"function\"===typeof f.componentDidCatch&&(c.callback=function(){Li(a,b);\"function\"!==typeof d&&(null===Ri?Ri=new Set([this]):Ri.add(this));var c=b.stack;this.componentDidCatch(b.value,{componentStack:null!==c?c:\"\"})});return c}\nfunction Si(a,b,c){var d=a.pingCache;if(null===d){d=a.pingCache=new Mi;var e=new Set;d.set(b,e)}else e=d.get(b),void 0===e&&(e=new Set,d.set(b,e));e.has(c)||(e.add(c),a=Ti.bind(null,a,b,c),b.then(a,a))}function Ui(a){do{var b;if(b=13===a.tag)b=a.memoizedState,b=null!==b?null!==b.dehydrated?!0:!1:!0;if(b)return a;a=a.return}while(null!==a);return null}\nfunction Vi(a,b,c,d,e){if(0===(a.mode&1))return a===b?a.flags|=65536:(a.flags|=128,c.flags|=131072,c.flags&=-52805,1===c.tag&&(null===c.alternate?c.tag=17:(b=mh(-1,1),b.tag=2,nh(c,b,1))),c.lanes|=1),a;a.flags|=65536;a.lanes=e;return a}var Wi=ua.ReactCurrentOwner,dh=!1;function Xi(a,b,c,d){b.child=null===a?Vg(b,null,c,d):Ug(b,a.child,c,d)}\nfunction Yi(a,b,c,d,e){c=c.render;var f=b.ref;ch(b,e);d=Nh(a,b,c,d,f,e);c=Sh();if(null!==a&&!dh)return b.updateQueue=a.updateQueue,b.flags&=-2053,a.lanes&=~e,Zi(a,b,e);I&&c&&vg(b);b.flags|=1;Xi(a,b,d,e);return b.child}\nfunction $i(a,b,c,d,e){if(null===a){var f=c.type;if(\"function\"===typeof f&&!aj(f)&&void 0===f.defaultProps&&null===c.compare&&void 0===c.defaultProps)return b.tag=15,b.type=f,bj(a,b,f,d,e);a=Rg(c.type,null,d,b,b.mode,e);a.ref=b.ref;a.return=b;return b.child=a}f=a.child;if(0===(a.lanes&e)){var g=f.memoizedProps;c=c.compare;c=null!==c?c:Ie;if(c(g,d)&&a.ref===b.ref)return Zi(a,b,e)}b.flags|=1;a=Pg(f,d);a.ref=b.ref;a.return=b;return b.child=a}\nfunction bj(a,b,c,d,e){if(null!==a){var f=a.memoizedProps;if(Ie(f,d)&&a.ref===b.ref)if(dh=!1,b.pendingProps=d=f,0!==(a.lanes&e))0!==(a.flags&131072)&&(dh=!0);else return b.lanes=a.lanes,Zi(a,b,e)}return cj(a,b,c,d,e)}\nfunction dj(a,b,c){var d=b.pendingProps,e=d.children,f=null!==a?a.memoizedState:null;if(\"hidden\"===d.mode)if(0===(b.mode&1))b.memoizedState={baseLanes:0,cachePool:null,transitions:null},G(ej,fj),fj|=c;else{if(0===(c&1073741824))return a=null!==f?f.baseLanes|c:c,b.lanes=b.childLanes=1073741824,b.memoizedState={baseLanes:a,cachePool:null,transitions:null},b.updateQueue=null,G(ej,fj),fj|=a,null;b.memoizedState={baseLanes:0,cachePool:null,transitions:null};d=null!==f?f.baseLanes:c;G(ej,fj);fj|=d}else null!==\nf?(d=f.baseLanes|c,b.memoizedState=null):d=c,G(ej,fj),fj|=d;Xi(a,b,e,c);return b.child}function gj(a,b){var c=b.ref;if(null===a&&null!==c||null!==a&&a.ref!==c)b.flags|=512,b.flags|=2097152}function cj(a,b,c,d,e){var f=Zf(c)?Xf:H.current;f=Yf(b,f);ch(b,e);c=Nh(a,b,c,d,f,e);d=Sh();if(null!==a&&!dh)return b.updateQueue=a.updateQueue,b.flags&=-2053,a.lanes&=~e,Zi(a,b,e);I&&d&&vg(b);b.flags|=1;Xi(a,b,c,e);return b.child}\nfunction hj(a,b,c,d,e){if(Zf(c)){var f=!0;cg(b)}else f=!1;ch(b,e);if(null===b.stateNode)ij(a,b),Gi(b,c,d),Ii(b,c,d,e),d=!0;else if(null===a){var g=b.stateNode,h=b.memoizedProps;g.props=h;var k=g.context,l=c.contextType;\"object\"===typeof l&&null!==l?l=eh(l):(l=Zf(c)?Xf:H.current,l=Yf(b,l));var m=c.getDerivedStateFromProps,q=\"function\"===typeof m||\"function\"===typeof g.getSnapshotBeforeUpdate;q||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof g.componentWillReceiveProps||\n(h!==d||k!==l)&&Hi(b,g,d,l);jh=!1;var r=b.memoizedState;g.state=r;qh(b,d,g,e);k=b.memoizedState;h!==d||r!==k||Wf.current||jh?(\"function\"===typeof m&&(Di(b,c,m,d),k=b.memoizedState),(h=jh||Fi(b,c,h,d,r,k,l))?(q||\"function\"!==typeof g.UNSAFE_componentWillMount&&\"function\"!==typeof g.componentWillMount||(\"function\"===typeof g.componentWillMount&&g.componentWillMount(),\"function\"===typeof g.UNSAFE_componentWillMount&&g.UNSAFE_componentWillMount()),\"function\"===typeof g.componentDidMount&&(b.flags|=4194308)):\n(\"function\"===typeof g.componentDidMount&&(b.flags|=4194308),b.memoizedProps=d,b.memoizedState=k),g.props=d,g.state=k,g.context=l,d=h):(\"function\"===typeof g.componentDidMount&&(b.flags|=4194308),d=!1)}else{g=b.stateNode;lh(a,b);h=b.memoizedProps;l=b.type===b.elementType?h:Ci(b.type,h);g.props=l;q=b.pendingProps;r=g.context;k=c.contextType;\"object\"===typeof k&&null!==k?k=eh(k):(k=Zf(c)?Xf:H.current,k=Yf(b,k));var y=c.getDerivedStateFromProps;(m=\"function\"===typeof y||\"function\"===typeof g.getSnapshotBeforeUpdate)||\n\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof g.componentWillReceiveProps||(h!==q||r!==k)&&Hi(b,g,d,k);jh=!1;r=b.memoizedState;g.state=r;qh(b,d,g,e);var n=b.memoizedState;h!==q||r!==n||Wf.current||jh?(\"function\"===typeof y&&(Di(b,c,y,d),n=b.memoizedState),(l=jh||Fi(b,c,l,d,r,n,k)||!1)?(m||\"function\"!==typeof g.UNSAFE_componentWillUpdate&&\"function\"!==typeof g.componentWillUpdate||(\"function\"===typeof g.componentWillUpdate&&g.componentWillUpdate(d,n,k),\"function\"===typeof g.UNSAFE_componentWillUpdate&&\ng.UNSAFE_componentWillUpdate(d,n,k)),\"function\"===typeof g.componentDidUpdate&&(b.flags|=4),\"function\"===typeof g.getSnapshotBeforeUpdate&&(b.flags|=1024)):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=1024),b.memoizedProps=d,b.memoizedState=n),g.props=d,g.state=n,g.context=k,d=l):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&r===\na.memoizedState||(b.flags|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=1024),d=!1)}return jj(a,b,c,d,f,e)}\nfunction jj(a,b,c,d,e,f){gj(a,b);var g=0!==(b.flags&128);if(!d&&!g)return e&&dg(b,c,!1),Zi(a,b,f);d=b.stateNode;Wi.current=b;var h=g&&\"function\"!==typeof c.getDerivedStateFromError?null:d.render();b.flags|=1;null!==a&&g?(b.child=Ug(b,a.child,null,f),b.child=Ug(b,null,h,f)):Xi(a,b,h,f);b.memoizedState=d.state;e&&dg(b,c,!0);return b.child}function kj(a){var b=a.stateNode;b.pendingContext?ag(a,b.pendingContext,b.pendingContext!==b.context):b.context&&ag(a,b.context,!1);yh(a,b.containerInfo)}\nfunction lj(a,b,c,d,e){Ig();Jg(e);b.flags|=256;Xi(a,b,c,d);return b.child}var mj={dehydrated:null,treeContext:null,retryLane:0};function nj(a){return{baseLanes:a,cachePool:null,transitions:null}}\nfunction oj(a,b,c){var d=b.pendingProps,e=L.current,f=!1,g=0!==(b.flags&128),h;(h=g)||(h=null!==a&&null===a.memoizedState?!1:0!==(e&2));if(h)f=!0,b.flags&=-129;else if(null===a||null!==a.memoizedState)e|=1;G(L,e&1);if(null===a){Eg(b);a=b.memoizedState;if(null!==a&&(a=a.dehydrated,null!==a))return 0===(b.mode&1)?b.lanes=1:\"$!\"===a.data?b.lanes=8:b.lanes=1073741824,null;g=d.children;a=d.fallback;return f?(d=b.mode,f=b.child,g={mode:\"hidden\",children:g},0===(d&1)&&null!==f?(f.childLanes=0,f.pendingProps=\ng):f=pj(g,d,0,null),a=Tg(a,d,c,null),f.return=b,a.return=b,f.sibling=a,b.child=f,b.child.memoizedState=nj(c),b.memoizedState=mj,a):qj(b,g)}e=a.memoizedState;if(null!==e&&(h=e.dehydrated,null!==h))return rj(a,b,g,d,h,e,c);if(f){f=d.fallback;g=b.mode;e=a.child;h=e.sibling;var k={mode:\"hidden\",children:d.children};0===(g&1)&&b.child!==e?(d=b.child,d.childLanes=0,d.pendingProps=k,b.deletions=null):(d=Pg(e,k),d.subtreeFlags=e.subtreeFlags&14680064);null!==h?f=Pg(h,f):(f=Tg(f,g,c,null),f.flags|=2);f.return=\nb;d.return=b;d.sibling=f;b.child=d;d=f;f=b.child;g=a.child.memoizedState;g=null===g?nj(c):{baseLanes:g.baseLanes|c,cachePool:null,transitions:g.transitions};f.memoizedState=g;f.childLanes=a.childLanes&~c;b.memoizedState=mj;return d}f=a.child;a=f.sibling;d=Pg(f,{mode:\"visible\",children:d.children});0===(b.mode&1)&&(d.lanes=c);d.return=b;d.sibling=null;null!==a&&(c=b.deletions,null===c?(b.deletions=[a],b.flags|=16):c.push(a));b.child=d;b.memoizedState=null;return d}\nfunction qj(a,b){b=pj({mode:\"visible\",children:b},a.mode,0,null);b.return=a;return a.child=b}function sj(a,b,c,d){null!==d&&Jg(d);Ug(b,a.child,null,c);a=qj(b,b.pendingProps.children);a.flags|=2;b.memoizedState=null;return a}\nfunction rj(a,b,c,d,e,f,g){if(c){if(b.flags&256)return b.flags&=-257,d=Ki(Error(p(422))),sj(a,b,g,d);if(null!==b.memoizedState)return b.child=a.child,b.flags|=128,null;f=d.fallback;e=b.mode;d=pj({mode:\"visible\",children:d.children},e,0,null);f=Tg(f,e,g,null);f.flags|=2;d.return=b;f.return=b;d.sibling=f;b.child=d;0!==(b.mode&1)&&Ug(b,a.child,null,g);b.child.memoizedState=nj(g);b.memoizedState=mj;return f}if(0===(b.mode&1))return sj(a,b,g,null);if(\"$!\"===e.data){d=e.nextSibling&&e.nextSibling.dataset;\nif(d)var h=d.dgst;d=h;f=Error(p(419));d=Ki(f,d,void 0);return sj(a,b,g,d)}h=0!==(g&a.childLanes);if(dh||h){d=Q;if(null!==d){switch(g&-g){case 4:e=2;break;case 16:e=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:e=32;break;case 536870912:e=268435456;break;default:e=0}e=0!==(e&(d.suspendedLanes|g))?0:e;\n0!==e&&e!==f.retryLane&&(f.retryLane=e,ih(a,e),gi(d,a,e,-1))}tj();d=Ki(Error(p(421)));return sj(a,b,g,d)}if(\"$?\"===e.data)return b.flags|=128,b.child=a.child,b=uj.bind(null,a),e._reactRetry=b,null;a=f.treeContext;yg=Lf(e.nextSibling);xg=b;I=!0;zg=null;null!==a&&(og[pg++]=rg,og[pg++]=sg,og[pg++]=qg,rg=a.id,sg=a.overflow,qg=b);b=qj(b,d.children);b.flags|=4096;return b}function vj(a,b,c){a.lanes|=b;var d=a.alternate;null!==d&&(d.lanes|=b);bh(a.return,b,c)}\nfunction wj(a,b,c,d,e){var f=a.memoizedState;null===f?a.memoizedState={isBackwards:b,rendering:null,renderingStartTime:0,last:d,tail:c,tailMode:e}:(f.isBackwards=b,f.rendering=null,f.renderingStartTime=0,f.last=d,f.tail=c,f.tailMode=e)}\nfunction xj(a,b,c){var d=b.pendingProps,e=d.revealOrder,f=d.tail;Xi(a,b,d.children,c);d=L.current;if(0!==(d&2))d=d&1|2,b.flags|=128;else{if(null!==a&&0!==(a.flags&128))a:for(a=b.child;null!==a;){if(13===a.tag)null!==a.memoizedState&&vj(a,c,b);else if(19===a.tag)vj(a,c,b);else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===b)break a;for(;null===a.sibling;){if(null===a.return||a.return===b)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}d&=1}G(L,d);if(0===(b.mode&1))b.memoizedState=\nnull;else switch(e){case \"forwards\":c=b.child;for(e=null;null!==c;)a=c.alternate,null!==a&&null===Ch(a)&&(e=c),c=c.sibling;c=e;null===c?(e=b.child,b.child=null):(e=c.sibling,c.sibling=null);wj(b,!1,e,c,f);break;case \"backwards\":c=null;e=b.child;for(b.child=null;null!==e;){a=e.alternate;if(null!==a&&null===Ch(a)){b.child=e;break}a=e.sibling;e.sibling=c;c=e;e=a}wj(b,!0,c,null,f);break;case \"together\":wj(b,!1,null,null,void 0);break;default:b.memoizedState=null}return b.child}\nfunction ij(a,b){0===(b.mode&1)&&null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2)}function Zi(a,b,c){null!==a&&(b.dependencies=a.dependencies);rh|=b.lanes;if(0===(c&b.childLanes))return null;if(null!==a&&b.child!==a.child)throw Error(p(153));if(null!==b.child){a=b.child;c=Pg(a,a.pendingProps);b.child=c;for(c.return=b;null!==a.sibling;)a=a.sibling,c=c.sibling=Pg(a,a.pendingProps),c.return=b;c.sibling=null}return b.child}\nfunction yj(a,b,c){switch(b.tag){case 3:kj(b);Ig();break;case 5:Ah(b);break;case 1:Zf(b.type)&&cg(b);break;case 4:yh(b,b.stateNode.containerInfo);break;case 10:var d=b.type._context,e=b.memoizedProps.value;G(Wg,d._currentValue);d._currentValue=e;break;case 13:d=b.memoizedState;if(null!==d){if(null!==d.dehydrated)return G(L,L.current&1),b.flags|=128,null;if(0!==(c&b.child.childLanes))return oj(a,b,c);G(L,L.current&1);a=Zi(a,b,c);return null!==a?a.sibling:null}G(L,L.current&1);break;case 19:d=0!==(c&\nb.childLanes);if(0!==(a.flags&128)){if(d)return xj(a,b,c);b.flags|=128}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null,e.lastEffect=null);G(L,L.current);if(d)break;else return null;case 22:case 23:return b.lanes=0,dj(a,b,c)}return Zi(a,b,c)}var zj,Aj,Bj,Cj;\nzj=function(a,b){for(var c=b.child;null!==c;){if(5===c.tag||6===c.tag)a.appendChild(c.stateNode);else if(4!==c.tag&&null!==c.child){c.child.return=c;c=c.child;continue}if(c===b)break;for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return}c.sibling.return=c.return;c=c.sibling}};Aj=function(){};\nBj=function(a,b,c,d){var e=a.memoizedProps;if(e!==d){a=b.stateNode;xh(uh.current);var f=null;switch(c){case \"input\":e=Ya(a,e);d=Ya(a,d);f=[];break;case \"select\":e=A({},e,{value:void 0});d=A({},d,{value:void 0});f=[];break;case \"textarea\":e=gb(a,e);d=gb(a,d);f=[];break;default:\"function\"!==typeof e.onClick&&\"function\"===typeof d.onClick&&(a.onclick=Bf)}ub(c,d);var g;c=null;for(l in e)if(!d.hasOwnProperty(l)&&e.hasOwnProperty(l)&&null!=e[l])if(\"style\"===l){var h=e[l];for(g in h)h.hasOwnProperty(g)&&\n(c||(c={}),c[g]=\"\")}else\"dangerouslySetInnerHTML\"!==l&&\"children\"!==l&&\"suppressContentEditableWarning\"!==l&&\"suppressHydrationWarning\"!==l&&\"autoFocus\"!==l&&(ea.hasOwnProperty(l)?f||(f=[]):(f=f||[]).push(l,null));for(l in d){var k=d[l];h=null!=e?e[l]:void 0;if(d.hasOwnProperty(l)&&k!==h&&(null!=k||null!=h))if(\"style\"===l)if(h){for(g in h)!h.hasOwnProperty(g)||k&&k.hasOwnProperty(g)||(c||(c={}),c[g]=\"\");for(g in k)k.hasOwnProperty(g)&&h[g]!==k[g]&&(c||(c={}),c[g]=k[g])}else c||(f||(f=[]),f.push(l,\nc)),c=k;else\"dangerouslySetInnerHTML\"===l?(k=k?k.__html:void 0,h=h?h.__html:void 0,null!=k&&h!==k&&(f=f||[]).push(l,k)):\"children\"===l?\"string\"!==typeof k&&\"number\"!==typeof k||(f=f||[]).push(l,\"\"+k):\"suppressContentEditableWarning\"!==l&&\"suppressHydrationWarning\"!==l&&(ea.hasOwnProperty(l)?(null!=k&&\"onScroll\"===l&&D(\"scroll\",a),f||h===k||(f=[])):(f=f||[]).push(l,k))}c&&(f=f||[]).push(\"style\",c);var l=f;if(b.updateQueue=l)b.flags|=4}};Cj=function(a,b,c,d){c!==d&&(b.flags|=4)};\nfunction Dj(a,b){if(!I)switch(a.tailMode){case \"hidden\":b=a.tail;for(var c=null;null!==b;)null!==b.alternate&&(c=b),b=b.sibling;null===c?a.tail=null:c.sibling=null;break;case \"collapsed\":c=a.tail;for(var d=null;null!==c;)null!==c.alternate&&(d=c),c=c.sibling;null===d?b||null===a.tail?a.tail=null:a.tail.sibling=null:d.sibling=null}}\nfunction S(a){var b=null!==a.alternate&&a.alternate.child===a.child,c=0,d=0;if(b)for(var e=a.child;null!==e;)c|=e.lanes|e.childLanes,d|=e.subtreeFlags&14680064,d|=e.flags&14680064,e.return=a,e=e.sibling;else for(e=a.child;null!==e;)c|=e.lanes|e.childLanes,d|=e.subtreeFlags,d|=e.flags,e.return=a,e=e.sibling;a.subtreeFlags|=d;a.childLanes=c;return b}\nfunction Ej(a,b,c){var d=b.pendingProps;wg(b);switch(b.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return S(b),null;case 1:return Zf(b.type)&&$f(),S(b),null;case 3:d=b.stateNode;zh();E(Wf);E(H);Eh();d.pendingContext&&(d.context=d.pendingContext,d.pendingContext=null);if(null===a||null===a.child)Gg(b)?b.flags|=4:null===a||a.memoizedState.isDehydrated&&0===(b.flags&256)||(b.flags|=1024,null!==zg&&(Fj(zg),zg=null));Aj(a,b);S(b);return null;case 5:Bh(b);var e=xh(wh.current);\nc=b.type;if(null!==a&&null!=b.stateNode)Bj(a,b,c,d,e),a.ref!==b.ref&&(b.flags|=512,b.flags|=2097152);else{if(!d){if(null===b.stateNode)throw Error(p(166));S(b);return null}a=xh(uh.current);if(Gg(b)){d=b.stateNode;c=b.type;var f=b.memoizedProps;d[Of]=b;d[Pf]=f;a=0!==(b.mode&1);switch(c){case \"dialog\":D(\"cancel\",d);D(\"close\",d);break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",d);break;case \"video\":case \"audio\":for(e=0;e<lf.length;e++)D(lf[e],d);break;case \"source\":D(\"error\",d);break;case \"img\":case \"image\":case \"link\":D(\"error\",\nd);D(\"load\",d);break;case \"details\":D(\"toggle\",d);break;case \"input\":Za(d,f);D(\"invalid\",d);break;case \"select\":d._wrapperState={wasMultiple:!!f.multiple};D(\"invalid\",d);break;case \"textarea\":hb(d,f),D(\"invalid\",d)}ub(c,f);e=null;for(var g in f)if(f.hasOwnProperty(g)){var h=f[g];\"children\"===g?\"string\"===typeof h?d.textContent!==h&&(!0!==f.suppressHydrationWarning&&Af(d.textContent,h,a),e=[\"children\",h]):\"number\"===typeof h&&d.textContent!==\"\"+h&&(!0!==f.suppressHydrationWarning&&Af(d.textContent,\nh,a),e=[\"children\",\"\"+h]):ea.hasOwnProperty(g)&&null!=h&&\"onScroll\"===g&&D(\"scroll\",d)}switch(c){case \"input\":Va(d);db(d,f,!0);break;case \"textarea\":Va(d);jb(d);break;case \"select\":case \"option\":break;default:\"function\"===typeof f.onClick&&(d.onclick=Bf)}d=e;b.updateQueue=d;null!==d&&(b.flags|=4)}else{g=9===e.nodeType?e:e.ownerDocument;\"http://www.w3.org/1999/xhtml\"===a&&(a=kb(c));\"http://www.w3.org/1999/xhtml\"===a?\"script\"===c?(a=g.createElement(\"div\"),a.innerHTML=\"<script>\\x3c/script>\",a=a.removeChild(a.firstChild)):\n\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Of]=b;a[Pf]=d;zj(a,b,!1,!1);b.stateNode=a;a:{g=vb(c,d);switch(c){case \"dialog\":D(\"cancel\",a);D(\"close\",a);e=d;break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;e<lf.length;e++)D(lf[e],a);e=d;break;case \"source\":D(\"error\",a);e=d;break;case \"img\":case \"image\":case \"link\":D(\"error\",\na);D(\"load\",a);e=d;break;case \"details\":D(\"toggle\",a);e=d;break;case \"input\":Za(a,d);e=Ya(a,d);D(\"invalid\",a);break;case \"option\":e=d;break;case \"select\":a._wrapperState={wasMultiple:!!d.multiple};e=A({},d,{value:void 0});D(\"invalid\",a);break;case \"textarea\":hb(a,d);e=gb(a,d);D(\"invalid\",a);break;default:e=d}ub(c,e);h=e;for(f in h)if(h.hasOwnProperty(f)){var k=h[f];\"style\"===f?sb(a,k):\"dangerouslySetInnerHTML\"===f?(k=k?k.__html:void 0,null!=k&&nb(a,k)):\"children\"===f?\"string\"===typeof k?(\"textarea\"!==\nc||\"\"!==k)&&ob(a,k):\"number\"===typeof k&&ob(a,\"\"+k):\"suppressContentEditableWarning\"!==f&&\"suppressHydrationWarning\"!==f&&\"autoFocus\"!==f&&(ea.hasOwnProperty(f)?null!=k&&\"onScroll\"===f&&D(\"scroll\",a):null!=k&&ta(a,f,k,g))}switch(c){case \"input\":Va(a);db(a,d,!1);break;case \"textarea\":Va(a);jb(a);break;case \"option\":null!=d.value&&a.setAttribute(\"value\",\"\"+Sa(d.value));break;case \"select\":a.multiple=!!d.multiple;f=d.value;null!=f?fb(a,!!d.multiple,f,!1):null!=d.defaultValue&&fb(a,!!d.multiple,d.defaultValue,\n!0);break;default:\"function\"===typeof e.onClick&&(a.onclick=Bf)}switch(c){case \"button\":case \"input\":case \"select\":case \"textarea\":d=!!d.autoFocus;break a;case \"img\":d=!0;break a;default:d=!1}}d&&(b.flags|=4)}null!==b.ref&&(b.flags|=512,b.flags|=2097152)}S(b);return null;case 6:if(a&&null!=b.stateNode)Cj(a,b,a.memoizedProps,d);else{if(\"string\"!==typeof d&&null===b.stateNode)throw Error(p(166));c=xh(wh.current);xh(uh.current);if(Gg(b)){d=b.stateNode;c=b.memoizedProps;d[Of]=b;if(f=d.nodeValue!==c)if(a=\nxg,null!==a)switch(a.tag){case 3:Af(d.nodeValue,c,0!==(a.mode&1));break;case 5:!0!==a.memoizedProps.suppressHydrationWarning&&Af(d.nodeValue,c,0!==(a.mode&1))}f&&(b.flags|=4)}else d=(9===c.nodeType?c:c.ownerDocument).createTextNode(d),d[Of]=b,b.stateNode=d}S(b);return null;case 13:E(L);d=b.memoizedState;if(null===a||null!==a.memoizedState&&null!==a.memoizedState.dehydrated){if(I&&null!==yg&&0!==(b.mode&1)&&0===(b.flags&128))Hg(),Ig(),b.flags|=98560,f=!1;else if(f=Gg(b),null!==d&&null!==d.dehydrated){if(null===\na){if(!f)throw Error(p(318));f=b.memoizedState;f=null!==f?f.dehydrated:null;if(!f)throw Error(p(317));f[Of]=b}else Ig(),0===(b.flags&128)&&(b.memoizedState=null),b.flags|=4;S(b);f=!1}else null!==zg&&(Fj(zg),zg=null),f=!0;if(!f)return b.flags&65536?b:null}if(0!==(b.flags&128))return b.lanes=c,b;d=null!==d;d!==(null!==a&&null!==a.memoizedState)&&d&&(b.child.flags|=8192,0!==(b.mode&1)&&(null===a||0!==(L.current&1)?0===T&&(T=3):tj()));null!==b.updateQueue&&(b.flags|=4);S(b);return null;case 4:return zh(),\nAj(a,b),null===a&&sf(b.stateNode.containerInfo),S(b),null;case 10:return ah(b.type._context),S(b),null;case 17:return Zf(b.type)&&$f(),S(b),null;case 19:E(L);f=b.memoizedState;if(null===f)return S(b),null;d=0!==(b.flags&128);g=f.rendering;if(null===g)if(d)Dj(f,!1);else{if(0!==T||null!==a&&0!==(a.flags&128))for(a=b.child;null!==a;){g=Ch(a);if(null!==g){b.flags|=128;Dj(f,!1);d=g.updateQueue;null!==d&&(b.updateQueue=d,b.flags|=4);b.subtreeFlags=0;d=c;for(c=b.child;null!==c;)f=c,a=d,f.flags&=14680066,\ng=f.alternate,null===g?(f.childLanes=0,f.lanes=a,f.child=null,f.subtreeFlags=0,f.memoizedProps=null,f.memoizedState=null,f.updateQueue=null,f.dependencies=null,f.stateNode=null):(f.childLanes=g.childLanes,f.lanes=g.lanes,f.child=g.child,f.subtreeFlags=0,f.deletions=null,f.memoizedProps=g.memoizedProps,f.memoizedState=g.memoizedState,f.updateQueue=g.updateQueue,f.type=g.type,a=g.dependencies,f.dependencies=null===a?null:{lanes:a.lanes,firstContext:a.firstContext}),c=c.sibling;G(L,L.current&1|2);return b.child}a=\na.sibling}null!==f.tail&&B()>Gj&&(b.flags|=128,d=!0,Dj(f,!1),b.lanes=4194304)}else{if(!d)if(a=Ch(g),null!==a){if(b.flags|=128,d=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Dj(f,!0),null===f.tail&&\"hidden\"===f.tailMode&&!g.alternate&&!I)return S(b),null}else 2*B()-f.renderingStartTime>Gj&&1073741824!==c&&(b.flags|=128,d=!0,Dj(f,!1),b.lanes=4194304);f.isBackwards?(g.sibling=b.child,b.child=g):(c=f.last,null!==c?c.sibling=g:b.child=g,f.last=g)}if(null!==f.tail)return b=f.tail,f.rendering=\nb,f.tail=b.sibling,f.renderingStartTime=B(),b.sibling=null,c=L.current,G(L,d?c&1|2:c&1),b;S(b);return null;case 22:case 23:return Hj(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(fj&1073741824)&&(S(b),b.subtreeFlags&6&&(b.flags|=8192)):S(b),null;case 24:return null;case 25:return null}throw Error(p(156,b.tag));}\nfunction Ij(a,b){wg(b);switch(b.tag){case 1:return Zf(b.type)&&$f(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return zh(),E(Wf),E(H),Eh(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return Bh(b),null;case 13:E(L);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(p(340));Ig()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return E(L),null;case 4:return zh(),null;case 10:return ah(b.type._context),null;case 22:case 23:return Hj(),\nnull;case 24:return null;default:return null}}var Jj=!1,U=!1,Kj=\"function\"===typeof WeakSet?WeakSet:Set,V=null;function Lj(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){W(a,b,d)}else c.current=null}function Mj(a,b,c){try{c()}catch(d){W(a,b,d)}}var Nj=!1;\nfunction Oj(a,b){Cf=dd;a=Me();if(Ne(a)){if(\"selectionStart\"in a)var c={start:a.selectionStart,end:a.selectionEnd};else a:{c=(c=a.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection();if(d&&0!==d.rangeCount){c=d.anchorNode;var e=d.anchorOffset,f=d.focusNode;d=d.focusOffset;try{c.nodeType,f.nodeType}catch(F){c=null;break a}var g=0,h=-1,k=-1,l=0,m=0,q=a,r=null;b:for(;;){for(var y;;){q!==c||0!==e&&3!==q.nodeType||(h=g+e);q!==f||0!==d&&3!==q.nodeType||(k=g+d);3===q.nodeType&&(g+=\nq.nodeValue.length);if(null===(y=q.firstChild))break;r=q;q=y}for(;;){if(q===a)break b;r===c&&++l===e&&(h=g);r===f&&++m===d&&(k=g);if(null!==(y=q.nextSibling))break;q=r;r=q.parentNode}q=y}c=-1===h||-1===k?null:{start:h,end:k}}else c=null}c=c||{start:0,end:0}}else c=null;Df={focusedElem:a,selectionRange:c};dd=!1;for(V=b;null!==V;)if(b=V,a=b.child,0!==(b.subtreeFlags&1028)&&null!==a)a.return=b,V=a;else for(;null!==V;){b=V;try{var n=b.alternate;if(0!==(b.flags&1024))switch(b.tag){case 0:case 11:case 15:break;\ncase 1:if(null!==n){var t=n.memoizedProps,J=n.memoizedState,x=b.stateNode,w=x.getSnapshotBeforeUpdate(b.elementType===b.type?t:Ci(b.type,t),J);x.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var u=b.stateNode.containerInfo;1===u.nodeType?u.textContent=\"\":9===u.nodeType&&u.documentElement&&u.removeChild(u.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163));}}catch(F){W(b,b.return,F)}a=b.sibling;if(null!==a){a.return=b.return;V=a;break}V=b.return}n=Nj;Nj=!1;return n}\nfunction Pj(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Mj(b,c,f)}e=e.next}while(e!==d)}}function Qj(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}function Rj(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Sj(a){var b=a.alternate;null!==b&&(a.alternate=null,Sj(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&(delete b[Of],delete b[Pf],delete b[of],delete b[Qf],delete b[Rf]));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Tj(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Uj(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Tj(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Vj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=Bf));else if(4!==d&&(a=a.child,null!==a))for(Vj(a,b,c),a=a.sibling;null!==a;)Vj(a,b,c),a=a.sibling}\nfunction Wj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Wj(a,b,c),a=a.sibling;null!==a;)Wj(a,b,c),a=a.sibling}var X=null,Xj=!1;function Yj(a,b,c){for(c=c.child;null!==c;)Zj(a,b,c),c=c.sibling}\nfunction Zj(a,b,c){if(lc&&\"function\"===typeof lc.onCommitFiberUnmount)try{lc.onCommitFiberUnmount(kc,c)}catch(h){}switch(c.tag){case 5:U||Lj(c,b);case 6:var d=X,e=Xj;X=null;Yj(a,b,c);X=d;Xj=e;null!==X&&(Xj?(a=X,c=c.stateNode,8===a.nodeType?a.parentNode.removeChild(c):a.removeChild(c)):X.removeChild(c.stateNode));break;case 18:null!==X&&(Xj?(a=X,c=c.stateNode,8===a.nodeType?Kf(a.parentNode,c):1===a.nodeType&&Kf(a,c),bd(a)):Kf(X,c.stateNode));break;case 4:d=X;e=Xj;X=c.stateNode.containerInfo;Xj=!0;\nYj(a,b,c);X=d;Xj=e;break;case 0:case 11:case 14:case 15:if(!U&&(d=c.updateQueue,null!==d&&(d=d.lastEffect,null!==d))){e=d=d.next;do{var f=e,g=f.destroy;f=f.tag;void 0!==g&&(0!==(f&2)?Mj(c,b,g):0!==(f&4)&&Mj(c,b,g));e=e.next}while(e!==d)}Yj(a,b,c);break;case 1:if(!U&&(Lj(c,b),d=c.stateNode,\"function\"===typeof d.componentWillUnmount))try{d.props=c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(h){W(c,b,h)}Yj(a,b,c);break;case 21:Yj(a,b,c);break;case 22:c.mode&1?(U=(d=U)||null!==\nc.memoizedState,Yj(a,b,c),U=d):Yj(a,b,c);break;default:Yj(a,b,c)}}function ak(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Kj);b.forEach(function(b){var d=bk.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction ck(a,b){var c=b.deletions;if(null!==c)for(var d=0;d<c.length;d++){var e=c[d];try{var f=a,g=b,h=g;a:for(;null!==h;){switch(h.tag){case 5:X=h.stateNode;Xj=!1;break a;case 3:X=h.stateNode.containerInfo;Xj=!0;break a;case 4:X=h.stateNode.containerInfo;Xj=!0;break a}h=h.return}if(null===X)throw Error(p(160));Zj(f,g,e);X=null;Xj=!1;var k=e.alternate;null!==k&&(k.return=null);e.return=null}catch(l){W(e,b,l)}}if(b.subtreeFlags&12854)for(b=b.child;null!==b;)dk(b,a),b=b.sibling}\nfunction dk(a,b){var c=a.alternate,d=a.flags;switch(a.tag){case 0:case 11:case 14:case 15:ck(b,a);ek(a);if(d&4){try{Pj(3,a,a.return),Qj(3,a)}catch(t){W(a,a.return,t)}try{Pj(5,a,a.return)}catch(t){W(a,a.return,t)}}break;case 1:ck(b,a);ek(a);d&512&&null!==c&&Lj(c,c.return);break;case 5:ck(b,a);ek(a);d&512&&null!==c&&Lj(c,c.return);if(a.flags&32){var e=a.stateNode;try{ob(e,\"\")}catch(t){W(a,a.return,t)}}if(d&4&&(e=a.stateNode,null!=e)){var f=a.memoizedProps,g=null!==c?c.memoizedProps:f,h=a.type,k=a.updateQueue;\na.updateQueue=null;if(null!==k)try{\"input\"===h&&\"radio\"===f.type&&null!=f.name&&ab(e,f);vb(h,g);var l=vb(h,f);for(g=0;g<k.length;g+=2){var m=k[g],q=k[g+1];\"style\"===m?sb(e,q):\"dangerouslySetInnerHTML\"===m?nb(e,q):\"children\"===m?ob(e,q):ta(e,m,q,l)}switch(h){case \"input\":bb(e,f);break;case \"textarea\":ib(e,f);break;case \"select\":var r=e._wrapperState.wasMultiple;e._wrapperState.wasMultiple=!!f.multiple;var y=f.value;null!=y?fb(e,!!f.multiple,y,!1):r!==!!f.multiple&&(null!=f.defaultValue?fb(e,!!f.multiple,\nf.defaultValue,!0):fb(e,!!f.multiple,f.multiple?[]:\"\",!1))}e[Pf]=f}catch(t){W(a,a.return,t)}}break;case 6:ck(b,a);ek(a);if(d&4){if(null===a.stateNode)throw Error(p(162));e=a.stateNode;f=a.memoizedProps;try{e.nodeValue=f}catch(t){W(a,a.return,t)}}break;case 3:ck(b,a);ek(a);if(d&4&&null!==c&&c.memoizedState.isDehydrated)try{bd(b.containerInfo)}catch(t){W(a,a.return,t)}break;case 4:ck(b,a);ek(a);break;case 13:ck(b,a);ek(a);e=a.child;e.flags&8192&&(f=null!==e.memoizedState,e.stateNode.isHidden=f,!f||\nnull!==e.alternate&&null!==e.alternate.memoizedState||(fk=B()));d&4&&ak(a);break;case 22:m=null!==c&&null!==c.memoizedState;a.mode&1?(U=(l=U)||m,ck(b,a),U=l):ck(b,a);ek(a);if(d&8192){l=null!==a.memoizedState;if((a.stateNode.isHidden=l)&&!m&&0!==(a.mode&1))for(V=a,m=a.child;null!==m;){for(q=V=m;null!==V;){r=V;y=r.child;switch(r.tag){case 0:case 11:case 14:case 15:Pj(4,r,r.return);break;case 1:Lj(r,r.return);var n=r.stateNode;if(\"function\"===typeof n.componentWillUnmount){d=r;c=r.return;try{b=d,n.props=\nb.memoizedProps,n.state=b.memoizedState,n.componentWillUnmount()}catch(t){W(d,c,t)}}break;case 5:Lj(r,r.return);break;case 22:if(null!==r.memoizedState){gk(q);continue}}null!==y?(y.return=r,V=y):gk(q)}m=m.sibling}a:for(m=null,q=a;;){if(5===q.tag){if(null===m){m=q;try{e=q.stateNode,l?(f=e.style,\"function\"===typeof f.setProperty?f.setProperty(\"display\",\"none\",\"important\"):f.display=\"none\"):(h=q.stateNode,k=q.memoizedProps.style,g=void 0!==k&&null!==k&&k.hasOwnProperty(\"display\")?k.display:null,h.style.display=\nrb(\"display\",g))}catch(t){W(a,a.return,t)}}}else if(6===q.tag){if(null===m)try{q.stateNode.nodeValue=l?\"\":q.memoizedProps}catch(t){W(a,a.return,t)}}else if((22!==q.tag&&23!==q.tag||null===q.memoizedState||q===a)&&null!==q.child){q.child.return=q;q=q.child;continue}if(q===a)break a;for(;null===q.sibling;){if(null===q.return||q.return===a)break a;m===q&&(m=null);q=q.return}m===q&&(m=null);q.sibling.return=q.return;q=q.sibling}}break;case 19:ck(b,a);ek(a);d&4&&ak(a);break;case 21:break;default:ck(b,\na),ek(a)}}function ek(a){var b=a.flags;if(b&2){try{a:{for(var c=a.return;null!==c;){if(Tj(c)){var d=c;break a}c=c.return}throw Error(p(160));}switch(d.tag){case 5:var e=d.stateNode;d.flags&32&&(ob(e,\"\"),d.flags&=-33);var f=Uj(a);Wj(a,f,e);break;case 3:case 4:var g=d.stateNode.containerInfo,h=Uj(a);Vj(a,h,g);break;default:throw Error(p(161));}}catch(k){W(a,a.return,k)}a.flags&=-3}b&4096&&(a.flags&=-4097)}function hk(a,b,c){V=a;ik(a,b,c)}\nfunction ik(a,b,c){for(var d=0!==(a.mode&1);null!==V;){var e=V,f=e.child;if(22===e.tag&&d){var g=null!==e.memoizedState||Jj;if(!g){var h=e.alternate,k=null!==h&&null!==h.memoizedState||U;h=Jj;var l=U;Jj=g;if((U=k)&&!l)for(V=e;null!==V;)g=V,k=g.child,22===g.tag&&null!==g.memoizedState?jk(e):null!==k?(k.return=g,V=k):jk(e);for(;null!==f;)V=f,ik(f,b,c),f=f.sibling;V=e;Jj=h;U=l}kk(a,b,c)}else 0!==(e.subtreeFlags&8772)&&null!==f?(f.return=e,V=f):kk(a,b,c)}}\nfunction kk(a){for(;null!==V;){var b=V;if(0!==(b.flags&8772)){var c=b.alternate;try{if(0!==(b.flags&8772))switch(b.tag){case 0:case 11:case 15:U||Qj(5,b);break;case 1:var d=b.stateNode;if(b.flags&4&&!U)if(null===c)d.componentDidMount();else{var e=b.elementType===b.type?c.memoizedProps:Ci(b.type,c.memoizedProps);d.componentDidUpdate(e,c.memoizedState,d.__reactInternalSnapshotBeforeUpdate)}var f=b.updateQueue;null!==f&&sh(b,f,d);break;case 3:var g=b.updateQueue;if(null!==g){c=null;if(null!==b.child)switch(b.child.tag){case 5:c=\nb.child.stateNode;break;case 1:c=b.child.stateNode}sh(b,g,c)}break;case 5:var h=b.stateNode;if(null===c&&b.flags&4){c=h;var k=b.memoizedProps;switch(b.type){case \"button\":case \"input\":case \"select\":case \"textarea\":k.autoFocus&&c.focus();break;case \"img\":k.src&&(c.src=k.src)}}break;case 6:break;case 4:break;case 12:break;case 13:if(null===b.memoizedState){var l=b.alternate;if(null!==l){var m=l.memoizedState;if(null!==m){var q=m.dehydrated;null!==q&&bd(q)}}}break;case 19:case 17:case 21:case 22:case 23:case 25:break;\ndefault:throw Error(p(163));}U||b.flags&512&&Rj(b)}catch(r){W(b,b.return,r)}}if(b===a){V=null;break}c=b.sibling;if(null!==c){c.return=b.return;V=c;break}V=b.return}}function gk(a){for(;null!==V;){var b=V;if(b===a){V=null;break}var c=b.sibling;if(null!==c){c.return=b.return;V=c;break}V=b.return}}\nfunction jk(a){for(;null!==V;){var b=V;try{switch(b.tag){case 0:case 11:case 15:var c=b.return;try{Qj(4,b)}catch(k){W(b,c,k)}break;case 1:var d=b.stateNode;if(\"function\"===typeof d.componentDidMount){var e=b.return;try{d.componentDidMount()}catch(k){W(b,e,k)}}var f=b.return;try{Rj(b)}catch(k){W(b,f,k)}break;case 5:var g=b.return;try{Rj(b)}catch(k){W(b,g,k)}}}catch(k){W(b,b.return,k)}if(b===a){V=null;break}var h=b.sibling;if(null!==h){h.return=b.return;V=h;break}V=b.return}}\nvar lk=Math.ceil,mk=ua.ReactCurrentDispatcher,nk=ua.ReactCurrentOwner,ok=ua.ReactCurrentBatchConfig,K=0,Q=null,Y=null,Z=0,fj=0,ej=Uf(0),T=0,pk=null,rh=0,qk=0,rk=0,sk=null,tk=null,fk=0,Gj=Infinity,uk=null,Oi=!1,Pi=null,Ri=null,vk=!1,wk=null,xk=0,yk=0,zk=null,Ak=-1,Bk=0;function R(){return 0!==(K&6)?B():-1!==Ak?Ak:Ak=B()}\nfunction yi(a){if(0===(a.mode&1))return 1;if(0!==(K&2)&&0!==Z)return Z&-Z;if(null!==Kg.transition)return 0===Bk&&(Bk=yc()),Bk;a=C;if(0!==a)return a;a=window.event;a=void 0===a?16:jd(a.type);return a}function gi(a,b,c,d){if(50<yk)throw yk=0,zk=null,Error(p(185));Ac(a,c,d);if(0===(K&2)||a!==Q)a===Q&&(0===(K&2)&&(qk|=c),4===T&&Ck(a,Z)),Dk(a,d),1===c&&0===K&&0===(b.mode&1)&&(Gj=B()+500,fg&&jg())}\nfunction Dk(a,b){var c=a.callbackNode;wc(a,b);var d=uc(a,a===Q?Z:0);if(0===d)null!==c&&bc(c),a.callbackNode=null,a.callbackPriority=0;else if(b=d&-d,a.callbackPriority!==b){null!=c&&bc(c);if(1===b)0===a.tag?ig(Ek.bind(null,a)):hg(Ek.bind(null,a)),Jf(function(){0===(K&6)&&jg()}),c=null;else{switch(Dc(d)){case 1:c=fc;break;case 4:c=gc;break;case 16:c=hc;break;case 536870912:c=jc;break;default:c=hc}c=Fk(c,Gk.bind(null,a))}a.callbackPriority=b;a.callbackNode=c}}\nfunction Gk(a,b){Ak=-1;Bk=0;if(0!==(K&6))throw Error(p(327));var c=a.callbackNode;if(Hk()&&a.callbackNode!==c)return null;var d=uc(a,a===Q?Z:0);if(0===d)return null;if(0!==(d&30)||0!==(d&a.expiredLanes)||b)b=Ik(a,d);else{b=d;var e=K;K|=2;var f=Jk();if(Q!==a||Z!==b)uk=null,Gj=B()+500,Kk(a,b);do try{Lk();break}catch(h){Mk(a,h)}while(1);$g();mk.current=f;K=e;null!==Y?b=0:(Q=null,Z=0,b=T)}if(0!==b){2===b&&(e=xc(a),0!==e&&(d=e,b=Nk(a,e)));if(1===b)throw c=pk,Kk(a,0),Ck(a,d),Dk(a,B()),c;if(6===b)Ck(a,d);\nelse{e=a.current.alternate;if(0===(d&30)&&!Ok(e)&&(b=Ik(a,d),2===b&&(f=xc(a),0!==f&&(d=f,b=Nk(a,f))),1===b))throw c=pk,Kk(a,0),Ck(a,d),Dk(a,B()),c;a.finishedWork=e;a.finishedLanes=d;switch(b){case 0:case 1:throw Error(p(345));case 2:Pk(a,tk,uk);break;case 3:Ck(a,d);if((d&130023424)===d&&(b=fk+500-B(),10<b)){if(0!==uc(a,0))break;e=a.suspendedLanes;if((e&d)!==d){R();a.pingedLanes|=a.suspendedLanes&e;break}a.timeoutHandle=Ff(Pk.bind(null,a,tk,uk),b);break}Pk(a,tk,uk);break;case 4:Ck(a,d);if((d&4194240)===\nd)break;b=a.eventTimes;for(e=-1;0<d;){var g=31-oc(d);f=1<<g;g=b[g];g>e&&(e=g);d&=~f}d=e;d=B()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*lk(d/1960))-d;if(10<d){a.timeoutHandle=Ff(Pk.bind(null,a,tk,uk),d);break}Pk(a,tk,uk);break;case 5:Pk(a,tk,uk);break;default:throw Error(p(329));}}}Dk(a,B());return a.callbackNode===c?Gk.bind(null,a):null}\nfunction Nk(a,b){var c=sk;a.current.memoizedState.isDehydrated&&(Kk(a,b).flags|=256);a=Ik(a,b);2!==a&&(b=tk,tk=c,null!==b&&Fj(b));return a}function Fj(a){null===tk?tk=a:tk.push.apply(tk,a)}\nfunction Ok(a){for(var b=a;;){if(b.flags&16384){var c=b.updateQueue;if(null!==c&&(c=c.stores,null!==c))for(var d=0;d<c.length;d++){var e=c[d],f=e.getSnapshot;e=e.value;try{if(!He(f(),e))return!1}catch(g){return!1}}}c=b.child;if(b.subtreeFlags&16384&&null!==c)c.return=b,b=c;else{if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return!0;b=b.return}b.sibling.return=b.return;b=b.sibling}}return!0}\nfunction Ck(a,b){b&=~rk;b&=~qk;a.suspendedLanes|=b;a.pingedLanes&=~b;for(a=a.expirationTimes;0<b;){var c=31-oc(b),d=1<<c;a[c]=-1;b&=~d}}function Ek(a){if(0!==(K&6))throw Error(p(327));Hk();var b=uc(a,0);if(0===(b&1))return Dk(a,B()),null;var c=Ik(a,b);if(0!==a.tag&&2===c){var d=xc(a);0!==d&&(b=d,c=Nk(a,d))}if(1===c)throw c=pk,Kk(a,0),Ck(a,b),Dk(a,B()),c;if(6===c)throw Error(p(345));a.finishedWork=a.current.alternate;a.finishedLanes=b;Pk(a,tk,uk);Dk(a,B());return null}\nfunction Qk(a,b){var c=K;K|=1;try{return a(b)}finally{K=c,0===K&&(Gj=B()+500,fg&&jg())}}function Rk(a){null!==wk&&0===wk.tag&&0===(K&6)&&Hk();var b=K;K|=1;var c=ok.transition,d=C;try{if(ok.transition=null,C=1,a)return a()}finally{C=d,ok.transition=c,K=b,0===(K&6)&&jg()}}function Hj(){fj=ej.current;E(ej)}\nfunction Kk(a,b){a.finishedWork=null;a.finishedLanes=0;var c=a.timeoutHandle;-1!==c&&(a.timeoutHandle=-1,Gf(c));if(null!==Y)for(c=Y.return;null!==c;){var d=c;wg(d);switch(d.tag){case 1:d=d.type.childContextTypes;null!==d&&void 0!==d&&$f();break;case 3:zh();E(Wf);E(H);Eh();break;case 5:Bh(d);break;case 4:zh();break;case 13:E(L);break;case 19:E(L);break;case 10:ah(d.type._context);break;case 22:case 23:Hj()}c=c.return}Q=a;Y=a=Pg(a.current,null);Z=fj=b;T=0;pk=null;rk=qk=rh=0;tk=sk=null;if(null!==fh){for(b=\n0;b<fh.length;b++)if(c=fh[b],d=c.interleaved,null!==d){c.interleaved=null;var e=d.next,f=c.pending;if(null!==f){var g=f.next;f.next=e;d.next=g}c.pending=d}fh=null}return a}\nfunction Mk(a,b){do{var c=Y;try{$g();Fh.current=Rh;if(Ih){for(var d=M.memoizedState;null!==d;){var e=d.queue;null!==e&&(e.pending=null);d=d.next}Ih=!1}Hh=0;O=N=M=null;Jh=!1;Kh=0;nk.current=null;if(null===c||null===c.return){T=1;pk=b;Y=null;break}a:{var f=a,g=c.return,h=c,k=b;b=Z;h.flags|=32768;if(null!==k&&\"object\"===typeof k&&\"function\"===typeof k.then){var l=k,m=h,q=m.tag;if(0===(m.mode&1)&&(0===q||11===q||15===q)){var r=m.alternate;r?(m.updateQueue=r.updateQueue,m.memoizedState=r.memoizedState,\nm.lanes=r.lanes):(m.updateQueue=null,m.memoizedState=null)}var y=Ui(g);if(null!==y){y.flags&=-257;Vi(y,g,h,f,b);y.mode&1&&Si(f,l,b);b=y;k=l;var n=b.updateQueue;if(null===n){var t=new Set;t.add(k);b.updateQueue=t}else n.add(k);break a}else{if(0===(b&1)){Si(f,l,b);tj();break a}k=Error(p(426))}}else if(I&&h.mode&1){var J=Ui(g);if(null!==J){0===(J.flags&65536)&&(J.flags|=256);Vi(J,g,h,f,b);Jg(Ji(k,h));break a}}f=k=Ji(k,h);4!==T&&(T=2);null===sk?sk=[f]:sk.push(f);f=g;do{switch(f.tag){case 3:f.flags|=65536;\nb&=-b;f.lanes|=b;var x=Ni(f,k,b);ph(f,x);break a;case 1:h=k;var w=f.type,u=f.stateNode;if(0===(f.flags&128)&&(\"function\"===typeof w.getDerivedStateFromError||null!==u&&\"function\"===typeof u.componentDidCatch&&(null===Ri||!Ri.has(u)))){f.flags|=65536;b&=-b;f.lanes|=b;var F=Qi(f,h,b);ph(f,F);break a}}f=f.return}while(null!==f)}Sk(c)}catch(na){b=na;Y===c&&null!==c&&(Y=c=c.return);continue}break}while(1)}function Jk(){var a=mk.current;mk.current=Rh;return null===a?Rh:a}\nfunction tj(){if(0===T||3===T||2===T)T=4;null===Q||0===(rh&268435455)&&0===(qk&268435455)||Ck(Q,Z)}function Ik(a,b){var c=K;K|=2;var d=Jk();if(Q!==a||Z!==b)uk=null,Kk(a,b);do try{Tk();break}catch(e){Mk(a,e)}while(1);$g();K=c;mk.current=d;if(null!==Y)throw Error(p(261));Q=null;Z=0;return T}function Tk(){for(;null!==Y;)Uk(Y)}function Lk(){for(;null!==Y&&!cc();)Uk(Y)}function Uk(a){var b=Vk(a.alternate,a,fj);a.memoizedProps=a.pendingProps;null===b?Sk(a):Y=b;nk.current=null}\nfunction Sk(a){var b=a;do{var c=b.alternate;a=b.return;if(0===(b.flags&32768)){if(c=Ej(c,b,fj),null!==c){Y=c;return}}else{c=Ij(c,b);if(null!==c){c.flags&=32767;Y=c;return}if(null!==a)a.flags|=32768,a.subtreeFlags=0,a.deletions=null;else{T=6;Y=null;return}}b=b.sibling;if(null!==b){Y=b;return}Y=b=a}while(null!==b);0===T&&(T=5)}function Pk(a,b,c){var d=C,e=ok.transition;try{ok.transition=null,C=1,Wk(a,b,c,d)}finally{ok.transition=e,C=d}return null}\nfunction Wk(a,b,c,d){do Hk();while(null!==wk);if(0!==(K&6))throw Error(p(327));c=a.finishedWork;var e=a.finishedLanes;if(null===c)return null;a.finishedWork=null;a.finishedLanes=0;if(c===a.current)throw Error(p(177));a.callbackNode=null;a.callbackPriority=0;var f=c.lanes|c.childLanes;Bc(a,f);a===Q&&(Y=Q=null,Z=0);0===(c.subtreeFlags&2064)&&0===(c.flags&2064)||vk||(vk=!0,Fk(hc,function(){Hk();return null}));f=0!==(c.flags&15990);if(0!==(c.subtreeFlags&15990)||f){f=ok.transition;ok.transition=null;\nvar g=C;C=1;var h=K;K|=4;nk.current=null;Oj(a,c);dk(c,a);Oe(Df);dd=!!Cf;Df=Cf=null;a.current=c;hk(c,a,e);dc();K=h;C=g;ok.transition=f}else a.current=c;vk&&(vk=!1,wk=a,xk=e);f=a.pendingLanes;0===f&&(Ri=null);mc(c.stateNode,d);Dk(a,B());if(null!==b)for(d=a.onRecoverableError,c=0;c<b.length;c++)e=b[c],d(e.value,{componentStack:e.stack,digest:e.digest});if(Oi)throw Oi=!1,a=Pi,Pi=null,a;0!==(xk&1)&&0!==a.tag&&Hk();f=a.pendingLanes;0!==(f&1)?a===zk?yk++:(yk=0,zk=a):yk=0;jg();return null}\nfunction Hk(){if(null!==wk){var a=Dc(xk),b=ok.transition,c=C;try{ok.transition=null;C=16>a?16:a;if(null===wk)var d=!1;else{a=wk;wk=null;xk=0;if(0!==(K&6))throw Error(p(331));var e=K;K|=4;for(V=a.current;null!==V;){var f=V,g=f.child;if(0!==(V.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;k<h.length;k++){var l=h[k];for(V=l;null!==V;){var m=V;switch(m.tag){case 0:case 11:case 15:Pj(8,m,f)}var q=m.child;if(null!==q)q.return=m,V=q;else for(;null!==V;){m=V;var r=m.sibling,y=m.return;Sj(m);if(m===\nl){V=null;break}if(null!==r){r.return=y;V=r;break}V=y}}}var n=f.alternate;if(null!==n){var t=n.child;if(null!==t){n.child=null;do{var J=t.sibling;t.sibling=null;t=J}while(null!==t)}}V=f}}if(0!==(f.subtreeFlags&2064)&&null!==g)g.return=f,V=g;else b:for(;null!==V;){f=V;if(0!==(f.flags&2048))switch(f.tag){case 0:case 11:case 15:Pj(9,f,f.return)}var x=f.sibling;if(null!==x){x.return=f.return;V=x;break b}V=f.return}}var w=a.current;for(V=w;null!==V;){g=V;var u=g.child;if(0!==(g.subtreeFlags&2064)&&null!==\nu)u.return=g,V=u;else b:for(g=w;null!==V;){h=V;if(0!==(h.flags&2048))try{switch(h.tag){case 0:case 11:case 15:Qj(9,h)}}catch(na){W(h,h.return,na)}if(h===g){V=null;break b}var F=h.sibling;if(null!==F){F.return=h.return;V=F;break b}V=h.return}}K=e;jg();if(lc&&\"function\"===typeof lc.onPostCommitFiberRoot)try{lc.onPostCommitFiberRoot(kc,a)}catch(na){}d=!0}return d}finally{C=c,ok.transition=b}}return!1}function Xk(a,b,c){b=Ji(c,b);b=Ni(a,b,1);a=nh(a,b,1);b=R();null!==a&&(Ac(a,1,b),Dk(a,b))}\nfunction W(a,b,c){if(3===a.tag)Xk(a,a,c);else for(;null!==b;){if(3===b.tag){Xk(b,a,c);break}else if(1===b.tag){var d=b.stateNode;if(\"function\"===typeof b.type.getDerivedStateFromError||\"function\"===typeof d.componentDidCatch&&(null===Ri||!Ri.has(d))){a=Ji(c,a);a=Qi(b,a,1);b=nh(b,a,1);a=R();null!==b&&(Ac(b,1,a),Dk(b,a));break}}b=b.return}}\nfunction Ti(a,b,c){var d=a.pingCache;null!==d&&d.delete(b);b=R();a.pingedLanes|=a.suspendedLanes&c;Q===a&&(Z&c)===c&&(4===T||3===T&&(Z&130023424)===Z&&500>B()-fk?Kk(a,0):rk|=c);Dk(a,b)}function Yk(a,b){0===b&&(0===(a.mode&1)?b=1:(b=sc,sc<<=1,0===(sc&130023424)&&(sc=4194304)));var c=R();a=ih(a,b);null!==a&&(Ac(a,b,c),Dk(a,c))}function uj(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Yk(a,c)}\nfunction bk(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(p(314));}null!==d&&d.delete(b);Yk(a,c)}var Vk;\nVk=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||Wf.current)dh=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return dh=!1,yj(a,b,c);dh=0!==(a.flags&131072)?!0:!1}else dh=!1,I&&0!==(b.flags&1048576)&&ug(b,ng,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;ij(a,b);a=b.pendingProps;var e=Yf(b,H.current);ch(b,c);e=Nh(null,b,d,a,e,c);var f=Sh();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?(b.tag=1,b.memoizedState=null,b.updateQueue=\nnull,Zf(d)?(f=!0,cg(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,kh(b),e.updater=Ei,b.stateNode=e,e._reactInternals=b,Ii(b,d,a,c),b=jj(null,b,d,!0,f,c)):(b.tag=0,I&&f&&vg(b),Xi(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{ij(a,b);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=Zk(d);a=Ci(d,a);switch(e){case 0:b=cj(null,b,d,a,c);break a;case 1:b=hj(null,b,d,a,c);break a;case 11:b=Yi(null,b,d,a,c);break a;case 14:b=$i(null,b,d,Ci(d.type,a),c);break a}throw Error(p(306,\nd,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),cj(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),hj(a,b,d,e,c);case 3:a:{kj(b);if(null===a)throw Error(p(387));d=b.pendingProps;f=b.memoizedState;e=f.element;lh(a,b);qh(b,d,null,c);var g=b.memoizedState;d=g.element;if(f.isDehydrated)if(f={element:d,isDehydrated:!1,cache:g.cache,pendingSuspenseBoundaries:g.pendingSuspenseBoundaries,transitions:g.transitions},b.updateQueue.baseState=\nf,b.memoizedState=f,b.flags&256){e=Ji(Error(p(423)),b);b=lj(a,b,d,c,e);break a}else if(d!==e){e=Ji(Error(p(424)),b);b=lj(a,b,d,c,e);break a}else for(yg=Lf(b.stateNode.containerInfo.firstChild),xg=b,I=!0,zg=null,c=Vg(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{Ig();if(d===e){b=Zi(a,b,c);break a}Xi(a,b,d,c)}b=b.child}return b;case 5:return Ah(b),null===a&&Eg(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,Ef(d,e)?g=null:null!==f&&Ef(d,f)&&(b.flags|=32),\ngj(a,b),Xi(a,b,g,c),b.child;case 6:return null===a&&Eg(b),null;case 13:return oj(a,b,c);case 4:return yh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Ug(b,null,d,c):Xi(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),Yi(a,b,d,e,c);case 7:return Xi(a,b,b.pendingProps,c),b.child;case 8:return Xi(a,b,b.pendingProps.children,c),b.child;case 12:return Xi(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;f=b.memoizedProps;\ng=e.value;G(Wg,d._currentValue);d._currentValue=g;if(null!==f)if(He(f.value,g)){if(f.children===e.children&&!Wf.current){b=Zi(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=mh(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var m=l.pending;null===m?k.next=k:(k.next=m.next,m.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=c);bh(f.return,\nc,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(p(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);bh(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}Xi(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,d=b.pendingProps.children,ch(b,c),e=eh(e),d=d(e),b.flags|=1,Xi(a,b,d,c),\nb.child;case 14:return d=b.type,e=Ci(d,b.pendingProps),e=Ci(d.type,e),$i(a,b,d,e,c);case 15:return bj(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),ij(a,b),b.tag=1,Zf(d)?(a=!0,cg(b)):a=!1,ch(b,c),Gi(b,d,e),Ii(b,d,e,c),jj(null,b,d,!0,a,c);case 19:return xj(a,b,c);case 22:return dj(a,b,c)}throw Error(p(156,b.tag));};function Fk(a,b){return ac(a,b)}\nfunction $k(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function Bg(a,b,c,d){return new $k(a,b,c,d)}function aj(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction Zk(a){if(\"function\"===typeof a)return aj(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Da)return 11;if(a===Ga)return 14}return 2}\nfunction Pg(a,b){var c=a.alternate;null===c?(c=Bg(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction Rg(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)aj(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ya:return Tg(c.children,e,f,b);case za:g=8;e|=8;break;case Aa:return a=Bg(12,c,b,e|2),a.elementType=Aa,a.lanes=f,a;case Ea:return a=Bg(13,c,b,e),a.elementType=Ea,a.lanes=f,a;case Fa:return a=Bg(19,c,b,e),a.elementType=Fa,a.lanes=f,a;case Ia:return pj(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case Ba:g=10;break a;case Ca:g=9;break a;case Da:g=11;\nbreak a;case Ga:g=14;break a;case Ha:g=16;d=null;break a}throw Error(p(130,null==a?a:typeof a,\"\"));}b=Bg(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function Tg(a,b,c,d){a=Bg(7,a,d,b);a.lanes=c;return a}function pj(a,b,c,d){a=Bg(22,a,d,b);a.elementType=Ia;a.lanes=c;a.stateNode={isHidden:!1};return a}function Qg(a,b,c){a=Bg(6,a,null,b);a.lanes=c;return a}\nfunction Sg(a,b,c){b=Bg(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction al(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=zc(0);this.expirationTimes=zc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=zc(0);this.identifierPrefix=d;this.onRecoverableError=e;this.mutableSourceEagerHydrationData=\nnull}function bl(a,b,c,d,e,f,g,h,k){a=new al(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=Bg(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null};kh(f);return a}function cl(a,b,c){var d=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:wa,key:null==d?null:\"\"+d,children:a,containerInfo:b,implementation:c}}\nfunction dl(a){if(!a)return Vf;a=a._reactInternals;a:{if(Vb(a)!==a||1!==a.tag)throw Error(p(170));var b=a;do{switch(b.tag){case 3:b=b.stateNode.context;break a;case 1:if(Zf(b.type)){b=b.stateNode.__reactInternalMemoizedMergedChildContext;break a}}b=b.return}while(null!==b);throw Error(p(171));}if(1===a.tag){var c=a.type;if(Zf(c))return bg(a,c,b)}return b}\nfunction el(a,b,c,d,e,f,g,h,k){a=bl(c,d,!0,a,e,f,g,h,k);a.context=dl(null);c=a.current;d=R();e=yi(c);f=mh(d,e);f.callback=void 0!==b&&null!==b?b:null;nh(c,f,e);a.current.lanes=e;Ac(a,e,d);Dk(a,d);return a}function fl(a,b,c,d){var e=b.current,f=R(),g=yi(e);c=dl(c);null===b.context?b.context=c:b.pendingContext=c;b=mh(f,g);b.payload={element:a};d=void 0===d?null:d;null!==d&&(b.callback=d);a=nh(e,b,g);null!==a&&(gi(a,e,g,f),oh(a,e,g));return g}\nfunction gl(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function hl(a,b){a=a.memoizedState;if(null!==a&&null!==a.dehydrated){var c=a.retryLane;a.retryLane=0!==c&&c<b?c:b}}function il(a,b){hl(a,b);(a=a.alternate)&&hl(a,b)}function jl(){return null}var kl=\"function\"===typeof reportError?reportError:function(a){console.error(a)};function ll(a){this._internalRoot=a}\nml.prototype.render=ll.prototype.render=function(a){var b=this._internalRoot;if(null===b)throw Error(p(409));fl(a,b,null,null)};ml.prototype.unmount=ll.prototype.unmount=function(){var a=this._internalRoot;if(null!==a){this._internalRoot=null;var b=a.containerInfo;Rk(function(){fl(null,a,null,null)});b[uf]=null}};function ml(a){this._internalRoot=a}\nml.prototype.unstable_scheduleHydration=function(a){if(a){var b=Hc();a={blockedOn:null,target:a,priority:b};for(var c=0;c<Qc.length&&0!==b&&b<Qc[c].priority;c++);Qc.splice(c,0,a);0===c&&Vc(a)}};function nl(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType)}function ol(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType&&(8!==a.nodeType||\" react-mount-point-unstable \"!==a.nodeValue))}function pl(){}\nfunction ql(a,b,c,d,e){if(e){if(\"function\"===typeof d){var f=d;d=function(){var a=gl(g);f.call(a)}}var g=el(b,d,a,0,null,!1,!1,\"\",pl);a._reactRootContainer=g;a[uf]=g.current;sf(8===a.nodeType?a.parentNode:a);Rk();return g}for(;e=a.lastChild;)a.removeChild(e);if(\"function\"===typeof d){var h=d;d=function(){var a=gl(k);h.call(a)}}var k=bl(a,0,!1,null,null,!1,!1,\"\",pl);a._reactRootContainer=k;a[uf]=k.current;sf(8===a.nodeType?a.parentNode:a);Rk(function(){fl(b,k,c,d)});return k}\nfunction rl(a,b,c,d,e){var f=c._reactRootContainer;if(f){var g=f;if(\"function\"===typeof e){var h=e;e=function(){var a=gl(g);h.call(a)}}fl(b,g,a,e)}else g=ql(c,b,a,e,d);return gl(g)}Ec=function(a){switch(a.tag){case 3:var b=a.stateNode;if(b.current.memoizedState.isDehydrated){var c=tc(b.pendingLanes);0!==c&&(Cc(b,c|1),Dk(b,B()),0===(K&6)&&(Gj=B()+500,jg()))}break;case 13:Rk(function(){var b=ih(a,1);if(null!==b){var c=R();gi(b,a,1,c)}}),il(a,1)}};\nFc=function(a){if(13===a.tag){var b=ih(a,134217728);if(null!==b){var c=R();gi(b,a,134217728,c)}il(a,134217728)}};Gc=function(a){if(13===a.tag){var b=yi(a),c=ih(a,b);if(null!==c){var d=R();gi(c,a,b,d)}il(a,b)}};Hc=function(){return C};Ic=function(a,b){var c=C;try{return C=a,b()}finally{C=c}};\nyb=function(a,b,c){switch(b){case \"input\":bb(a,c);b=c.name;if(\"radio\"===c.type&&null!=b){for(c=a;c.parentNode;)c=c.parentNode;c=c.querySelectorAll(\"input[name=\"+JSON.stringify(\"\"+b)+'][type=\"radio\"]');for(b=0;b<c.length;b++){var d=c[b];if(d!==a&&d.form===a.form){var e=Db(d);if(!e)throw Error(p(90));Wa(d);bb(d,e)}}}break;case \"textarea\":ib(a,c);break;case \"select\":b=c.value,null!=b&&fb(a,!!c.multiple,b,!1)}};Gb=Qk;Hb=Rk;\nvar sl={usingClientEntryPoint:!1,Events:[Cb,ue,Db,Eb,Fb,Qk]},tl={findFiberByHostInstance:Wc,bundleType:0,version:\"18.3.1\",rendererPackageName:\"react-dom\"};\nvar ul={bundleType:tl.bundleType,version:tl.version,rendererPackageName:tl.rendererPackageName,rendererConfig:tl.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:ua.ReactCurrentDispatcher,findHostInstanceByFiber:function(a){a=Zb(a);return null===a?null:a.stateNode},findFiberByHostInstance:tl.findFiberByHostInstance||\njl,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:\"18.3.1-next-f1338f8080-20240426\"};if(\"undefined\"!==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var vl=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!vl.isDisabled&&vl.supportsFiber)try{kc=vl.inject(ul),lc=vl}catch(a){}}exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=sl;\nexports.createPortal=function(a,b){var c=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!nl(b))throw Error(p(200));return cl(a,b,null,c)};exports.createRoot=function(a,b){if(!nl(a))throw Error(p(299));var c=!1,d=\"\",e=kl;null!==b&&void 0!==b&&(!0===b.unstable_strictMode&&(c=!0),void 0!==b.identifierPrefix&&(d=b.identifierPrefix),void 0!==b.onRecoverableError&&(e=b.onRecoverableError));b=bl(a,1,!1,null,null,c,!1,d,e);a[uf]=b.current;sf(8===a.nodeType?a.parentNode:a);return new ll(b)};\nexports.findDOMNode=function(a){if(null==a)return null;if(1===a.nodeType)return a;var b=a._reactInternals;if(void 0===b){if(\"function\"===typeof a.render)throw Error(p(188));a=Object.keys(a).join(\",\");throw Error(p(268,a));}a=Zb(b);a=null===a?null:a.stateNode;return a};exports.flushSync=function(a){return Rk(a)};exports.hydrate=function(a,b,c){if(!ol(b))throw Error(p(200));return rl(null,a,b,!0,c)};\nexports.hydrateRoot=function(a,b,c){if(!nl(a))throw Error(p(405));var d=null!=c&&c.hydratedSources||null,e=!1,f=\"\",g=kl;null!==c&&void 0!==c&&(!0===c.unstable_strictMode&&(e=!0),void 0!==c.identifierPrefix&&(f=c.identifierPrefix),void 0!==c.onRecoverableError&&(g=c.onRecoverableError));b=el(b,null,a,1,null!=c?c:null,e,!1,f,g);a[uf]=b.current;sf(a);if(d)for(a=0;a<d.length;a++)c=d[a],e=c._getVersion,e=e(c._source),null==b.mutableSourceEagerHydrationData?b.mutableSourceEagerHydrationData=[c,e]:b.mutableSourceEagerHydrationData.push(c,\ne);return new ml(b)};exports.render=function(a,b,c){if(!ol(b))throw Error(p(200));return rl(null,a,b,!1,c)};exports.unmountComponentAtNode=function(a){if(!ol(a))throw Error(p(40));return a._reactRootContainer?(Rk(function(){rl(null,null,a,!1,function(){a._reactRootContainer=null;a[uf]=null})}),!0):!1};exports.unstable_batchedUpdates=Qk;\nexports.unstable_renderSubtreeIntoContainer=function(a,b,c,d){if(!ol(c))throw Error(p(200));if(null==a||void 0===a._reactInternals)throw Error(p(38));return rl(a,b,c,!1,d)};exports.version=\"18.3.1-next-f1338f8080-20240426\";\n","'use strict';\n\nvar m = require('react-dom');\nif (process.env.NODE_ENV === 'production') {\n  exports.createRoot = m.createRoot;\n  exports.hydrateRoot = m.hydrateRoot;\n} else {\n  var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n  exports.createRoot = function(c, o) {\n    i.usingClientEntryPoint = true;\n    try {\n      return m.createRoot(c, o);\n    } finally {\n      i.usingClientEntryPoint = false;\n    }\n  };\n  exports.hydrateRoot = function(c, h, o) {\n    i.usingClientEntryPoint = true;\n    try {\n      return m.hydrateRoot(c, h, o);\n    } finally {\n      i.usingClientEntryPoint = false;\n    }\n  };\n}\n","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom.production.min.js');\n} else {\n  module.exports = require('./cjs/react-dom.development.js');\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nObject.defineProperty(exports, \"DraggableCore\", {\n  enumerable: true,\n  get: function () {\n    return _DraggableCore.default;\n  }\n});\nexports.default = void 0;\nvar React = _interopRequireWildcard(require(\"react\"));\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\nvar _clsx = _interopRequireDefault(require(\"clsx\"));\nvar _domFns = require(\"./utils/domFns\");\nvar _positionFns = require(\"./utils/positionFns\");\nvar _shims = require(\"./utils/shims\");\nvar _DraggableCore = _interopRequireDefault(require(\"./DraggableCore\"));\nvar _log = _interopRequireDefault(require(\"./utils/log\"));\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); } /*:: import type {ControlPosition, PositionOffsetControlPosition, DraggableCoreProps, DraggableCoreDefaultProps} from './DraggableCore';*/\n/*:: import type {Bounds, DraggableEventHandler} from './utils/types';*/\n/*:: import type {Element as ReactElement} from 'react';*/\n/*:: type DraggableState = {\n  dragging: boolean,\n  dragged: boolean,\n  x: number, y: number,\n  slackX: number, slackY: number,\n  isElementSVG: boolean,\n  prevPropsPosition: ?ControlPosition,\n};*/\n/*:: export type DraggableDefaultProps = {\n  ...DraggableCoreDefaultProps,\n  axis: 'both' | 'x' | 'y' | 'none',\n  bounds: Bounds | string | false,\n  defaultClassName: string,\n  defaultClassNameDragging: string,\n  defaultClassNameDragged: string,\n  defaultPosition: ControlPosition,\n  scale: number,\n};*/\n/*:: export type DraggableProps = {\n  ...DraggableCoreProps,\n  ...DraggableDefaultProps,\n  positionOffset: PositionOffsetControlPosition,\n  position: ControlPosition,\n};*/\n//\n// Define <Draggable>\n//\nclass Draggable extends React.Component /*:: <DraggableProps, DraggableState>*/{\n  // React 16.3+\n  // Arity (props, state)\n  static getDerivedStateFromProps(_ref /*:: */, _ref2 /*:: */) /*: ?Partial<DraggableState>*/{\n    let {\n      position\n    } /*: DraggableProps*/ = _ref /*: DraggableProps*/;\n    let {\n      prevPropsPosition\n    } /*: DraggableState*/ = _ref2 /*: DraggableState*/;\n    // Set x/y if a new position is provided in props that is different than the previous.\n    if (position && (!prevPropsPosition || position.x !== prevPropsPosition.x || position.y !== prevPropsPosition.y)) {\n      (0, _log.default)('Draggable: getDerivedStateFromProps %j', {\n        position,\n        prevPropsPosition\n      });\n      return {\n        x: position.x,\n        y: position.y,\n        prevPropsPosition: {\n          ...position\n        }\n      };\n    }\n    return null;\n  }\n  constructor(props /*: DraggableProps*/) {\n    super(props);\n    _defineProperty(this, \"onDragStart\", (e, coreData) => {\n      (0, _log.default)('Draggable: onDragStart: %j', coreData);\n\n      // Short-circuit if user's callback killed it.\n      const shouldStart = this.props.onStart(e, (0, _positionFns.createDraggableData)(this, coreData));\n      // Kills start event on core as well, so move handlers are never bound.\n      if (shouldStart === false) return false;\n      this.setState({\n        dragging: true,\n        dragged: true\n      });\n    });\n    _defineProperty(this, \"onDrag\", (e, coreData) => {\n      if (!this.state.dragging) return false;\n      (0, _log.default)('Draggable: onDrag: %j', coreData);\n      const uiData = (0, _positionFns.createDraggableData)(this, coreData);\n      const newState = {\n        x: uiData.x,\n        y: uiData.y,\n        slackX: 0,\n        slackY: 0\n      };\n\n      // Keep within bounds.\n      if (this.props.bounds) {\n        // Save original x and y.\n        const {\n          x,\n          y\n        } = newState;\n\n        // Add slack to the values used to calculate bound position. This will ensure that if\n        // we start removing slack, the element won't react to it right away until it's been\n        // completely removed.\n        newState.x += this.state.slackX;\n        newState.y += this.state.slackY;\n\n        // Get bound position. This will ceil/floor the x and y within the boundaries.\n        const [newStateX, newStateY] = (0, _positionFns.getBoundPosition)(this, newState.x, newState.y);\n        newState.x = newStateX;\n        newState.y = newStateY;\n\n        // Recalculate slack by noting how much was shaved by the boundPosition handler.\n        newState.slackX = this.state.slackX + (x - newState.x);\n        newState.slackY = this.state.slackY + (y - newState.y);\n\n        // Update the event we fire to reflect what really happened after bounds took effect.\n        uiData.x = newState.x;\n        uiData.y = newState.y;\n        uiData.deltaX = newState.x - this.state.x;\n        uiData.deltaY = newState.y - this.state.y;\n      }\n\n      // Short-circuit if user's callback killed it.\n      const shouldUpdate = this.props.onDrag(e, uiData);\n      if (shouldUpdate === false) return false;\n      this.setState(newState);\n    });\n    _defineProperty(this, \"onDragStop\", (e, coreData) => {\n      if (!this.state.dragging) return false;\n\n      // Short-circuit if user's callback killed it.\n      const shouldContinue = this.props.onStop(e, (0, _positionFns.createDraggableData)(this, coreData));\n      if (shouldContinue === false) return false;\n      (0, _log.default)('Draggable: onDragStop: %j', coreData);\n      const newState /*: Partial<DraggableState>*/ = {\n        dragging: false,\n        slackX: 0,\n        slackY: 0\n      };\n\n      // If this is a controlled component, the result of this operation will be to\n      // revert back to the old position. We expect a handler on `onDragStop`, at the least.\n      const controlled = Boolean(this.props.position);\n      if (controlled) {\n        const {\n          x,\n          y\n        } = this.props.position;\n        newState.x = x;\n        newState.y = y;\n      }\n      this.setState(newState);\n    });\n    this.state = {\n      // Whether or not we are currently dragging.\n      dragging: false,\n      // Whether or not we have been dragged before.\n      dragged: false,\n      // Current transform x and y.\n      x: props.position ? props.position.x : props.defaultPosition.x,\n      y: props.position ? props.position.y : props.defaultPosition.y,\n      prevPropsPosition: {\n        ...props.position\n      },\n      // Used for compensating for out-of-bounds drags\n      slackX: 0,\n      slackY: 0,\n      // Can only determine if SVG after mounting\n      isElementSVG: false\n    };\n    if (props.position && !(props.onDrag || props.onStop)) {\n      // eslint-disable-next-line no-console\n      console.warn('A `position` was applied to this <Draggable>, without drag handlers. This will make this ' + 'component effectively undraggable. Please attach `onDrag` or `onStop` handlers so you can adjust the ' + '`position` of this element.');\n    }\n  }\n  componentDidMount() {\n    // Check to see if the element passed is an instanceof SVGElement\n    if (typeof window.SVGElement !== 'undefined' && this.findDOMNode() instanceof window.SVGElement) {\n      this.setState({\n        isElementSVG: true\n      });\n    }\n  }\n  componentWillUnmount() {\n    this.setState({\n      dragging: false\n    }); // prevents invariant if unmounted while dragging\n  }\n\n  // React Strict Mode compatibility: if `nodeRef` is passed, we will use it instead of trying to find\n  // the underlying DOM node ourselves. See the README for more information.\n  findDOMNode() /*: ?HTMLElement*/{\n    var _this$props$nodeRef$c, _this$props;\n    return (_this$props$nodeRef$c = (_this$props = this.props) === null || _this$props === void 0 || (_this$props = _this$props.nodeRef) === null || _this$props === void 0 ? void 0 : _this$props.current) !== null && _this$props$nodeRef$c !== void 0 ? _this$props$nodeRef$c : _reactDom.default.findDOMNode(this);\n  }\n  render() /*: ReactElement<any>*/{\n    const {\n      axis,\n      bounds,\n      children,\n      defaultPosition,\n      defaultClassName,\n      defaultClassNameDragging,\n      defaultClassNameDragged,\n      position,\n      positionOffset,\n      scale,\n      ...draggableCoreProps\n    } = this.props;\n    let style = {};\n    let svgTransform = null;\n\n    // If this is controlled, we don't want to move it - unless it's dragging.\n    const controlled = Boolean(position);\n    const draggable = !controlled || this.state.dragging;\n    const validPosition = position || defaultPosition;\n    const transformOpts = {\n      // Set left if horizontal drag is enabled\n      x: (0, _positionFns.canDragX)(this) && draggable ? this.state.x : validPosition.x,\n      // Set top if vertical drag is enabled\n      y: (0, _positionFns.canDragY)(this) && draggable ? this.state.y : validPosition.y\n    };\n\n    // If this element was SVG, we use the `transform` attribute.\n    if (this.state.isElementSVG) {\n      svgTransform = (0, _domFns.createSVGTransform)(transformOpts, positionOffset);\n    } else {\n      // Add a CSS transform to move the element around. This allows us to move the element around\n      // without worrying about whether or not it is relatively or absolutely positioned.\n      // If the item you are dragging already has a transform set, wrap it in a <span> so <Draggable>\n      // has a clean slate.\n      style = (0, _domFns.createCSSTransform)(transformOpts, positionOffset);\n    }\n\n    // Mark with class while dragging\n    const className = (0, _clsx.default)(children.props.className || '', defaultClassName, {\n      [defaultClassNameDragging]: this.state.dragging,\n      [defaultClassNameDragged]: this.state.dragged\n    });\n\n    // Reuse the child provided\n    // This makes it flexible to use whatever element is wanted (div, ul, etc)\n    return /*#__PURE__*/React.createElement(_DraggableCore.default, _extends({}, draggableCoreProps, {\n      onStart: this.onDragStart,\n      onDrag: this.onDrag,\n      onStop: this.onDragStop\n    }), /*#__PURE__*/React.cloneElement(React.Children.only(children), {\n      className: className,\n      style: {\n        ...children.props.style,\n        ...style\n      },\n      transform: svgTransform\n    }));\n  }\n}\nexports.default = Draggable;\n_defineProperty(Draggable, \"displayName\", 'Draggable');\n_defineProperty(Draggable, \"propTypes\", {\n  // Accepts all props <DraggableCore> accepts.\n  ..._DraggableCore.default.propTypes,\n  /**\n   * `axis` determines which axis the draggable can move.\n   *\n   *  Note that all callbacks will still return data as normal. This only\n   *  controls flushing to the DOM.\n   *\n   * 'both' allows movement horizontally and vertically.\n   * 'x' limits movement to horizontal axis.\n   * 'y' limits movement to vertical axis.\n   * 'none' limits all movement.\n   *\n   * Defaults to 'both'.\n   */\n  axis: _propTypes.default.oneOf(['both', 'x', 'y', 'none']),\n  /**\n   * `bounds` determines the range of movement available to the element.\n   * Available values are:\n   *\n   * 'parent' restricts movement within the Draggable's parent node.\n   *\n   * Alternatively, pass an object with the following properties, all of which are optional:\n   *\n   * {left: LEFT_BOUND, right: RIGHT_BOUND, bottom: BOTTOM_BOUND, top: TOP_BOUND}\n   *\n   * All values are in px.\n   *\n   * Example:\n   *\n   * ```jsx\n   *   let App = React.createClass({\n   *       render: function () {\n   *         return (\n   *            <Draggable bounds={{right: 300, bottom: 300}}>\n   *              <div>Content</div>\n   *           </Draggable>\n   *         );\n   *       }\n   *   });\n   * ```\n   */\n  bounds: _propTypes.default.oneOfType([_propTypes.default.shape({\n    left: _propTypes.default.number,\n    right: _propTypes.default.number,\n    top: _propTypes.default.number,\n    bottom: _propTypes.default.number\n  }), _propTypes.default.string, _propTypes.default.oneOf([false])]),\n  defaultClassName: _propTypes.default.string,\n  defaultClassNameDragging: _propTypes.default.string,\n  defaultClassNameDragged: _propTypes.default.string,\n  /**\n   * `defaultPosition` specifies the x and y that the dragged item should start at\n   *\n   * Example:\n   *\n   * ```jsx\n   *      let App = React.createClass({\n   *          render: function () {\n   *              return (\n   *                  <Draggable defaultPosition={{x: 25, y: 25}}>\n   *                      <div>I start with transformX: 25px and transformY: 25px;</div>\n   *                  </Draggable>\n   *              );\n   *          }\n   *      });\n   * ```\n   */\n  defaultPosition: _propTypes.default.shape({\n    x: _propTypes.default.number,\n    y: _propTypes.default.number\n  }),\n  positionOffset: _propTypes.default.shape({\n    x: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),\n    y: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string])\n  }),\n  /**\n   * `position`, if present, defines the current position of the element.\n   *\n   *  This is similar to how form elements in React work - if no `position` is supplied, the component\n   *  is uncontrolled.\n   *\n   * Example:\n   *\n   * ```jsx\n   *      let App = React.createClass({\n   *          render: function () {\n   *              return (\n   *                  <Draggable position={{x: 25, y: 25}}>\n   *                      <div>I start with transformX: 25px and transformY: 25px;</div>\n   *                  </Draggable>\n   *              );\n   *          }\n   *      });\n   * ```\n   */\n  position: _propTypes.default.shape({\n    x: _propTypes.default.number,\n    y: _propTypes.default.number\n  }),\n  /**\n   * These properties should be defined on the child, not here.\n   */\n  className: _shims.dontSetMe,\n  style: _shims.dontSetMe,\n  transform: _shims.dontSetMe\n});\n_defineProperty(Draggable, \"defaultProps\", {\n  ..._DraggableCore.default.defaultProps,\n  axis: 'both',\n  bounds: false,\n  defaultClassName: 'react-draggable',\n  defaultClassNameDragging: 'react-draggable-dragging',\n  defaultClassNameDragged: 'react-draggable-dragged',\n  defaultPosition: {\n    x: 0,\n    y: 0\n  },\n  scale: 1\n});","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar React = _interopRequireWildcard(require(\"react\"));\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\nvar _domFns = require(\"./utils/domFns\");\nvar _positionFns = require(\"./utils/positionFns\");\nvar _shims = require(\"./utils/shims\");\nvar _log = _interopRequireDefault(require(\"./utils/log\"));\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/*:: import type {EventHandler, MouseTouchEvent} from './utils/types';*/\n/*:: import type {Element as ReactElement} from 'react';*/\n// Simple abstraction for dragging events names.\nconst eventsFor = {\n  touch: {\n    start: 'touchstart',\n    move: 'touchmove',\n    stop: 'touchend'\n  },\n  mouse: {\n    start: 'mousedown',\n    move: 'mousemove',\n    stop: 'mouseup'\n  }\n};\n\n// Default to mouse events.\nlet dragEventFor = eventsFor.mouse;\n/*:: export type DraggableData = {\n  node: HTMLElement,\n  x: number, y: number,\n  deltaX: number, deltaY: number,\n  lastX: number, lastY: number,\n};*/\n/*:: export type DraggableEventHandler = (e: MouseEvent, data: DraggableData) => void | false;*/\n/*:: export type ControlPosition = {x: number, y: number};*/\n/*:: export type PositionOffsetControlPosition = {x: number|string, y: number|string};*/\n/*:: export type DraggableCoreDefaultProps = {\n  allowAnyClick: boolean,\n  disabled: boolean,\n  enableUserSelectHack: boolean,\n  onStart: DraggableEventHandler,\n  onDrag: DraggableEventHandler,\n  onStop: DraggableEventHandler,\n  onMouseDown: (e: MouseEvent) => void,\n  scale: number,\n};*/\n/*:: export type DraggableCoreProps = {\n  ...DraggableCoreDefaultProps,\n  cancel: string,\n  children: ReactElement<any>,\n  offsetParent: HTMLElement,\n  grid: [number, number],\n  handle: string,\n  nodeRef?: ?React.ElementRef<any>,\n};*/\n//\n// Define <DraggableCore>.\n//\n// <DraggableCore> is for advanced usage of <Draggable>. It maintains minimal internal state so it can\n// work well with libraries that require more control over the element.\n//\n\nclass DraggableCore extends React.Component /*:: <DraggableCoreProps>*/{\n  constructor() {\n    super(...arguments);\n    _defineProperty(this, \"dragging\", false);\n    // Used while dragging to determine deltas.\n    _defineProperty(this, \"lastX\", NaN);\n    _defineProperty(this, \"lastY\", NaN);\n    _defineProperty(this, \"touchIdentifier\", null);\n    _defineProperty(this, \"mounted\", false);\n    _defineProperty(this, \"handleDragStart\", e => {\n      // Make it possible to attach event handlers on top of this one.\n      this.props.onMouseDown(e);\n\n      // Only accept left-clicks.\n      if (!this.props.allowAnyClick && typeof e.button === 'number' && e.button !== 0) return false;\n\n      // Get nodes. Be sure to grab relative document (could be iframed)\n      const thisNode = this.findDOMNode();\n      if (!thisNode || !thisNode.ownerDocument || !thisNode.ownerDocument.body) {\n        throw new Error('<DraggableCore> not mounted on DragStart!');\n      }\n      const {\n        ownerDocument\n      } = thisNode;\n\n      // Short circuit if handle or cancel prop was provided and selector doesn't match.\n      if (this.props.disabled || !(e.target instanceof ownerDocument.defaultView.Node) || this.props.handle && !(0, _domFns.matchesSelectorAndParentsTo)(e.target, this.props.handle, thisNode) || this.props.cancel && (0, _domFns.matchesSelectorAndParentsTo)(e.target, this.props.cancel, thisNode)) {\n        return;\n      }\n\n      // Prevent scrolling on mobile devices, like ipad/iphone.\n      // Important that this is after handle/cancel.\n      if (e.type === 'touchstart') e.preventDefault();\n\n      // Set touch identifier in component state if this is a touch event. This allows us to\n      // distinguish between individual touches on multitouch screens by identifying which\n      // touchpoint was set to this element.\n      const touchIdentifier = (0, _domFns.getTouchIdentifier)(e);\n      this.touchIdentifier = touchIdentifier;\n\n      // Get the current drag point from the event. This is used as the offset.\n      const position = (0, _positionFns.getControlPosition)(e, touchIdentifier, this);\n      if (position == null) return; // not possible but satisfies flow\n      const {\n        x,\n        y\n      } = position;\n\n      // Create an event object with all the data parents need to make a decision here.\n      const coreEvent = (0, _positionFns.createCoreData)(this, x, y);\n      (0, _log.default)('DraggableCore: handleDragStart: %j', coreEvent);\n\n      // Call event handler. If it returns explicit false, cancel.\n      (0, _log.default)('calling', this.props.onStart);\n      const shouldUpdate = this.props.onStart(e, coreEvent);\n      if (shouldUpdate === false || this.mounted === false) return;\n\n      // Add a style to the body to disable user-select. This prevents text from\n      // being selected all over the page.\n      if (this.props.enableUserSelectHack) (0, _domFns.addUserSelectStyles)(ownerDocument);\n\n      // Initiate dragging. Set the current x and y as offsets\n      // so we know how much we've moved during the drag. This allows us\n      // to drag elements around even if they have been moved, without issue.\n      this.dragging = true;\n      this.lastX = x;\n      this.lastY = y;\n\n      // Add events to the document directly so we catch when the user's mouse/touch moves outside of\n      // this element. We use different events depending on whether or not we have detected that this\n      // is a touch-capable device.\n      (0, _domFns.addEvent)(ownerDocument, dragEventFor.move, this.handleDrag);\n      (0, _domFns.addEvent)(ownerDocument, dragEventFor.stop, this.handleDragStop);\n    });\n    _defineProperty(this, \"handleDrag\", e => {\n      // Get the current drag point from the event. This is used as the offset.\n      const position = (0, _positionFns.getControlPosition)(e, this.touchIdentifier, this);\n      if (position == null) return;\n      let {\n        x,\n        y\n      } = position;\n\n      // Snap to grid if prop has been provided\n      if (Array.isArray(this.props.grid)) {\n        let deltaX = x - this.lastX,\n          deltaY = y - this.lastY;\n        [deltaX, deltaY] = (0, _positionFns.snapToGrid)(this.props.grid, deltaX, deltaY);\n        if (!deltaX && !deltaY) return; // skip useless drag\n        x = this.lastX + deltaX, y = this.lastY + deltaY;\n      }\n      const coreEvent = (0, _positionFns.createCoreData)(this, x, y);\n      (0, _log.default)('DraggableCore: handleDrag: %j', coreEvent);\n\n      // Call event handler. If it returns explicit false, trigger end.\n      const shouldUpdate = this.props.onDrag(e, coreEvent);\n      if (shouldUpdate === false || this.mounted === false) {\n        try {\n          // $FlowIgnore\n          this.handleDragStop(new MouseEvent('mouseup'));\n        } catch (err) {\n          // Old browsers\n          const event = ((document.createEvent('MouseEvents') /*: any*/) /*: MouseTouchEvent*/);\n          // I see why this insanity was deprecated\n          // $FlowIgnore\n          event.initMouseEvent('mouseup', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n          this.handleDragStop(event);\n        }\n        return;\n      }\n      this.lastX = x;\n      this.lastY = y;\n    });\n    _defineProperty(this, \"handleDragStop\", e => {\n      if (!this.dragging) return;\n      const position = (0, _positionFns.getControlPosition)(e, this.touchIdentifier, this);\n      if (position == null) return;\n      let {\n        x,\n        y\n      } = position;\n\n      // Snap to grid if prop has been provided\n      if (Array.isArray(this.props.grid)) {\n        let deltaX = x - this.lastX || 0;\n        let deltaY = y - this.lastY || 0;\n        [deltaX, deltaY] = (0, _positionFns.snapToGrid)(this.props.grid, deltaX, deltaY);\n        x = this.lastX + deltaX, y = this.lastY + deltaY;\n      }\n      const coreEvent = (0, _positionFns.createCoreData)(this, x, y);\n\n      // Call event handler\n      const shouldContinue = this.props.onStop(e, coreEvent);\n      if (shouldContinue === false || this.mounted === false) return false;\n      const thisNode = this.findDOMNode();\n      if (thisNode) {\n        // Remove user-select hack\n        if (this.props.enableUserSelectHack) (0, _domFns.removeUserSelectStyles)(thisNode.ownerDocument);\n      }\n      (0, _log.default)('DraggableCore: handleDragStop: %j', coreEvent);\n\n      // Reset the el.\n      this.dragging = false;\n      this.lastX = NaN;\n      this.lastY = NaN;\n      if (thisNode) {\n        // Remove event handlers\n        (0, _log.default)('DraggableCore: Removing handlers');\n        (0, _domFns.removeEvent)(thisNode.ownerDocument, dragEventFor.move, this.handleDrag);\n        (0, _domFns.removeEvent)(thisNode.ownerDocument, dragEventFor.stop, this.handleDragStop);\n      }\n    });\n    _defineProperty(this, \"onMouseDown\", e => {\n      dragEventFor = eventsFor.mouse; // on touchscreen laptops we could switch back to mouse\n\n      return this.handleDragStart(e);\n    });\n    _defineProperty(this, \"onMouseUp\", e => {\n      dragEventFor = eventsFor.mouse;\n      return this.handleDragStop(e);\n    });\n    // Same as onMouseDown (start drag), but now consider this a touch device.\n    _defineProperty(this, \"onTouchStart\", e => {\n      // We're on a touch device now, so change the event handlers\n      dragEventFor = eventsFor.touch;\n      return this.handleDragStart(e);\n    });\n    _defineProperty(this, \"onTouchEnd\", e => {\n      // We're on a touch device now, so change the event handlers\n      dragEventFor = eventsFor.touch;\n      return this.handleDragStop(e);\n    });\n  }\n  componentDidMount() {\n    this.mounted = true;\n    // Touch handlers must be added with {passive: false} to be cancelable.\n    // https://developers.google.com/web/updates/2017/01/scrolling-intervention\n    const thisNode = this.findDOMNode();\n    if (thisNode) {\n      (0, _domFns.addEvent)(thisNode, eventsFor.touch.start, this.onTouchStart, {\n        passive: false\n      });\n    }\n  }\n  componentWillUnmount() {\n    this.mounted = false;\n    // Remove any leftover event handlers. Remove both touch and mouse handlers in case\n    // some browser quirk caused a touch event to fire during a mouse move, or vice versa.\n    const thisNode = this.findDOMNode();\n    if (thisNode) {\n      const {\n        ownerDocument\n      } = thisNode;\n      (0, _domFns.removeEvent)(ownerDocument, eventsFor.mouse.move, this.handleDrag);\n      (0, _domFns.removeEvent)(ownerDocument, eventsFor.touch.move, this.handleDrag);\n      (0, _domFns.removeEvent)(ownerDocument, eventsFor.mouse.stop, this.handleDragStop);\n      (0, _domFns.removeEvent)(ownerDocument, eventsFor.touch.stop, this.handleDragStop);\n      (0, _domFns.removeEvent)(thisNode, eventsFor.touch.start, this.onTouchStart, {\n        passive: false\n      });\n      if (this.props.enableUserSelectHack) (0, _domFns.removeUserSelectStyles)(ownerDocument);\n    }\n  }\n\n  // React Strict Mode compatibility: if `nodeRef` is passed, we will use it instead of trying to find\n  // the underlying DOM node ourselves. See the README for more information.\n  findDOMNode() /*: ?HTMLElement*/{\n    var _this$props, _this$props2;\n    return (_this$props = this.props) !== null && _this$props !== void 0 && _this$props.nodeRef ? (_this$props2 = this.props) === null || _this$props2 === void 0 || (_this$props2 = _this$props2.nodeRef) === null || _this$props2 === void 0 ? void 0 : _this$props2.current : _reactDom.default.findDOMNode(this);\n  }\n  render() /*: React.Element<any>*/{\n    // Reuse the child provided\n    // This makes it flexible to use whatever element is wanted (div, ul, etc)\n    return /*#__PURE__*/React.cloneElement(React.Children.only(this.props.children), {\n      // Note: mouseMove handler is attached to document so it will still function\n      // when the user drags quickly and leaves the bounds of the element.\n      onMouseDown: this.onMouseDown,\n      onMouseUp: this.onMouseUp,\n      // onTouchStart is added on `componentDidMount` so they can be added with\n      // {passive: false}, which allows it to cancel. See\n      // https://developers.google.com/web/updates/2017/01/scrolling-intervention\n      onTouchEnd: this.onTouchEnd\n    });\n  }\n}\nexports.default = DraggableCore;\n_defineProperty(DraggableCore, \"displayName\", 'DraggableCore');\n_defineProperty(DraggableCore, \"propTypes\", {\n  /**\n   * `allowAnyClick` allows dragging using any mouse button.\n   * By default, we only accept the left button.\n   *\n   * Defaults to `false`.\n   */\n  allowAnyClick: _propTypes.default.bool,\n  children: _propTypes.default.node.isRequired,\n  /**\n   * `disabled`, if true, stops the <Draggable> from dragging. All handlers,\n   * with the exception of `onMouseDown`, will not fire.\n   */\n  disabled: _propTypes.default.bool,\n  /**\n   * By default, we add 'user-select:none' attributes to the document body\n   * to prevent ugly text selection during drag. If this is causing problems\n   * for your app, set this to `false`.\n   */\n  enableUserSelectHack: _propTypes.default.bool,\n  /**\n   * `offsetParent`, if set, uses the passed DOM node to compute drag offsets\n   * instead of using the parent node.\n   */\n  offsetParent: function (props /*: DraggableCoreProps*/, propName /*: $Keys<DraggableCoreProps>*/) {\n    if (props[propName] && props[propName].nodeType !== 1) {\n      throw new Error('Draggable\\'s offsetParent must be a DOM Node.');\n    }\n  },\n  /**\n   * `grid` specifies the x and y that dragging should snap to.\n   */\n  grid: _propTypes.default.arrayOf(_propTypes.default.number),\n  /**\n   * `handle` specifies a selector to be used as the handle that initiates drag.\n   *\n   * Example:\n   *\n   * ```jsx\n   *   let App = React.createClass({\n   *       render: function () {\n   *         return (\n   *            <Draggable handle=\".handle\">\n   *              <div>\n   *                  <div className=\"handle\">Click me to drag</div>\n   *                  <div>This is some other content</div>\n   *              </div>\n   *           </Draggable>\n   *         );\n   *       }\n   *   });\n   * ```\n   */\n  handle: _propTypes.default.string,\n  /**\n   * `cancel` specifies a selector to be used to prevent drag initialization.\n   *\n   * Example:\n   *\n   * ```jsx\n   *   let App = React.createClass({\n   *       render: function () {\n   *           return(\n   *               <Draggable cancel=\".cancel\">\n   *                   <div>\n   *                     <div className=\"cancel\">You can't drag from here</div>\n   *                     <div>Dragging here works fine</div>\n   *                   </div>\n   *               </Draggable>\n   *           );\n   *       }\n   *   });\n   * ```\n   */\n  cancel: _propTypes.default.string,\n  /* If running in React Strict mode, ReactDOM.findDOMNode() is deprecated.\n   * Unfortunately, in order for <Draggable> to work properly, we need raw access\n   * to the underlying DOM node. If you want to avoid the warning, pass a `nodeRef`\n   * as in this example:\n   *\n   * function MyComponent() {\n   *   const nodeRef = React.useRef(null);\n   *   return (\n   *     <Draggable nodeRef={nodeRef}>\n   *       <div ref={nodeRef}>Example Target</div>\n   *     </Draggable>\n   *   );\n   * }\n   *\n   * This can be used for arbitrarily nested components, so long as the ref ends up\n   * pointing to the actual child DOM node and not a custom component.\n   */\n  nodeRef: _propTypes.default.object,\n  /**\n   * Called when dragging starts.\n   * If this function returns the boolean false, dragging will be canceled.\n   */\n  onStart: _propTypes.default.func,\n  /**\n   * Called while dragging.\n   * If this function returns the boolean false, dragging will be canceled.\n   */\n  onDrag: _propTypes.default.func,\n  /**\n   * Called when dragging stops.\n   * If this function returns the boolean false, the drag will remain active.\n   */\n  onStop: _propTypes.default.func,\n  /**\n   * A workaround option which can be passed if onMouseDown needs to be accessed,\n   * since it'll always be blocked (as there is internal use of onMouseDown)\n   */\n  onMouseDown: _propTypes.default.func,\n  /**\n   * `scale`, if set, applies scaling while dragging an element\n   */\n  scale: _propTypes.default.number,\n  /**\n   * These properties should be defined on the child, not here.\n   */\n  className: _shims.dontSetMe,\n  style: _shims.dontSetMe,\n  transform: _shims.dontSetMe\n});\n_defineProperty(DraggableCore, \"defaultProps\", {\n  allowAnyClick: false,\n  // by default only accept left click\n  disabled: false,\n  enableUserSelectHack: true,\n  onStart: function () {},\n  onDrag: function () {},\n  onStop: function () {},\n  onMouseDown: function () {},\n  scale: 1\n});","\"use strict\";\n\nconst {\n  default: Draggable,\n  DraggableCore\n} = require('./Draggable');\n\n// Previous versions of this lib exported <Draggable> as the root export. As to no-// them, or TypeScript, we export *both* as the root and as 'default'.\n// See https://github.com/mzabriskie/react-draggable/pull/254\n// and https://github.com/mzabriskie/react-draggable/issues/266\nmodule.exports = Draggable;\nmodule.exports.default = Draggable;\nmodule.exports.DraggableCore = DraggableCore;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.addClassName = addClassName;\nexports.addEvent = addEvent;\nexports.addUserSelectStyles = addUserSelectStyles;\nexports.createCSSTransform = createCSSTransform;\nexports.createSVGTransform = createSVGTransform;\nexports.getTouch = getTouch;\nexports.getTouchIdentifier = getTouchIdentifier;\nexports.getTranslation = getTranslation;\nexports.innerHeight = innerHeight;\nexports.innerWidth = innerWidth;\nexports.matchesSelector = matchesSelector;\nexports.matchesSelectorAndParentsTo = matchesSelectorAndParentsTo;\nexports.offsetXYFromParent = offsetXYFromParent;\nexports.outerHeight = outerHeight;\nexports.outerWidth = outerWidth;\nexports.removeClassName = removeClassName;\nexports.removeEvent = removeEvent;\nexports.removeUserSelectStyles = removeUserSelectStyles;\nvar _shims = require(\"./shims\");\nvar _getPrefix = _interopRequireWildcard(require(\"./getPrefix\"));\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n/*:: import type {ControlPosition, PositionOffsetControlPosition, MouseTouchEvent} from './types';*/\nlet matchesSelectorFunc = '';\nfunction matchesSelector(el /*: Node*/, selector /*: string*/) /*: boolean*/{\n  if (!matchesSelectorFunc) {\n    matchesSelectorFunc = (0, _shims.findInArray)(['matches', 'webkitMatchesSelector', 'mozMatchesSelector', 'msMatchesSelector', 'oMatchesSelector'], function (method) {\n      // $FlowIgnore: Doesn't think elements are indexable\n      return (0, _shims.isFunction)(el[method]);\n    });\n  }\n\n  // Might not be found entirely (not an Element?) - in that case, bail\n  // $FlowIgnore: Doesn't think elements are indexable\n  if (!(0, _shims.isFunction)(el[matchesSelectorFunc])) return false;\n\n  // $FlowIgnore: Doesn't think elements are indexable\n  return el[matchesSelectorFunc](selector);\n}\n\n// Works up the tree to the draggable itself attempting to match selector.\nfunction matchesSelectorAndParentsTo(el /*: Node*/, selector /*: string*/, baseNode /*: Node*/) /*: boolean*/{\n  let node = el;\n  do {\n    if (matchesSelector(node, selector)) return true;\n    if (node === baseNode) return false;\n    // $FlowIgnore[incompatible-type]\n    node = node.parentNode;\n  } while (node);\n  return false;\n}\nfunction addEvent(el /*: ?Node*/, event /*: string*/, handler /*: Function*/, inputOptions /*: Object*/) /*: void*/{\n  if (!el) return;\n  const options = {\n    capture: true,\n    ...inputOptions\n  };\n  // $FlowIgnore[method-unbinding]\n  if (el.addEventListener) {\n    el.addEventListener(event, handler, options);\n  } else if (el.attachEvent) {\n    el.attachEvent('on' + event, handler);\n  } else {\n    // $FlowIgnore: Doesn't think elements are indexable\n    el['on' + event] = handler;\n  }\n}\nfunction removeEvent(el /*: ?Node*/, event /*: string*/, handler /*: Function*/, inputOptions /*: Object*/) /*: void*/{\n  if (!el) return;\n  const options = {\n    capture: true,\n    ...inputOptions\n  };\n  // $FlowIgnore[method-unbinding]\n  if (el.removeEventListener) {\n    el.removeEventListener(event, handler, options);\n  } else if (el.detachEvent) {\n    el.detachEvent('on' + event, handler);\n  } else {\n    // $FlowIgnore: Doesn't think elements are indexable\n    el['on' + event] = null;\n  }\n}\nfunction outerHeight(node /*: HTMLElement*/) /*: number*/{\n  // This is deliberately excluding margin for our calculations, since we are using\n  // offsetTop which is including margin. See getBoundPosition\n  let height = node.clientHeight;\n  const computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n  height += (0, _shims.int)(computedStyle.borderTopWidth);\n  height += (0, _shims.int)(computedStyle.borderBottomWidth);\n  return height;\n}\nfunction outerWidth(node /*: HTMLElement*/) /*: number*/{\n  // This is deliberately excluding margin for our calculations, since we are using\n  // offsetLeft which is including margin. See getBoundPosition\n  let width = node.clientWidth;\n  const computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n  width += (0, _shims.int)(computedStyle.borderLeftWidth);\n  width += (0, _shims.int)(computedStyle.borderRightWidth);\n  return width;\n}\nfunction innerHeight(node /*: HTMLElement*/) /*: number*/{\n  let height = node.clientHeight;\n  const computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n  height -= (0, _shims.int)(computedStyle.paddingTop);\n  height -= (0, _shims.int)(computedStyle.paddingBottom);\n  return height;\n}\nfunction innerWidth(node /*: HTMLElement*/) /*: number*/{\n  let width = node.clientWidth;\n  const computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n  width -= (0, _shims.int)(computedStyle.paddingLeft);\n  width -= (0, _shims.int)(computedStyle.paddingRight);\n  return width;\n}\n/*:: interface EventWithOffset {\n  clientX: number, clientY: number\n}*/\n// Get from offsetParent\nfunction offsetXYFromParent(evt /*: EventWithOffset*/, offsetParent /*: HTMLElement*/, scale /*: number*/) /*: ControlPosition*/{\n  const isBody = offsetParent === offsetParent.ownerDocument.body;\n  const offsetParentRect = isBody ? {\n    left: 0,\n    top: 0\n  } : offsetParent.getBoundingClientRect();\n  const x = (evt.clientX + offsetParent.scrollLeft - offsetParentRect.left) / scale;\n  const y = (evt.clientY + offsetParent.scrollTop - offsetParentRect.top) / scale;\n  return {\n    x,\n    y\n  };\n}\nfunction createCSSTransform(controlPos /*: ControlPosition*/, positionOffset /*: PositionOffsetControlPosition*/) /*: Object*/{\n  const translation = getTranslation(controlPos, positionOffset, 'px');\n  return {\n    [(0, _getPrefix.browserPrefixToKey)('transform', _getPrefix.default)]: translation\n  };\n}\nfunction createSVGTransform(controlPos /*: ControlPosition*/, positionOffset /*: PositionOffsetControlPosition*/) /*: string*/{\n  const translation = getTranslation(controlPos, positionOffset, '');\n  return translation;\n}\nfunction getTranslation(_ref /*:: */, positionOffset /*: PositionOffsetControlPosition*/, unitSuffix /*: string*/) /*: string*/{\n  let {\n    x,\n    y\n  } /*: ControlPosition*/ = _ref /*: ControlPosition*/;\n  let translation = \"translate(\".concat(x).concat(unitSuffix, \",\").concat(y).concat(unitSuffix, \")\");\n  if (positionOffset) {\n    const defaultX = \"\".concat(typeof positionOffset.x === 'string' ? positionOffset.x : positionOffset.x + unitSuffix);\n    const defaultY = \"\".concat(typeof positionOffset.y === 'string' ? positionOffset.y : positionOffset.y + unitSuffix);\n    translation = \"translate(\".concat(defaultX, \", \").concat(defaultY, \")\") + translation;\n  }\n  return translation;\n}\nfunction getTouch(e /*: MouseTouchEvent*/, identifier /*: number*/) /*: ?{clientX: number, clientY: number}*/{\n  return e.targetTouches && (0, _shims.findInArray)(e.targetTouches, t => identifier === t.identifier) || e.changedTouches && (0, _shims.findInArray)(e.changedTouches, t => identifier === t.identifier);\n}\nfunction getTouchIdentifier(e /*: MouseTouchEvent*/) /*: ?number*/{\n  if (e.targetTouches && e.targetTouches[0]) return e.targetTouches[0].identifier;\n  if (e.changedTouches && e.changedTouches[0]) return e.changedTouches[0].identifier;\n}\n\n// User-select Hacks:\n//\n// Useful for preventing blue highlights all over everything when dragging.\n\n// Note we're passing `document` b/c we could be iframed\nfunction addUserSelectStyles(doc /*: ?Document*/) {\n  if (!doc) return;\n  let styleEl = doc.getElementById('react-draggable-style-el');\n  if (!styleEl) {\n    styleEl = doc.createElement('style');\n    styleEl.type = 'text/css';\n    styleEl.id = 'react-draggable-style-el';\n    styleEl.innerHTML = '.react-draggable-transparent-selection *::-moz-selection {all: inherit;}\\n';\n    styleEl.innerHTML += '.react-draggable-transparent-selection *::selection {all: inherit;}\\n';\n    doc.getElementsByTagName('head')[0].appendChild(styleEl);\n  }\n  if (doc.body) addClassName(doc.body, 'react-draggable-transparent-selection');\n}\nfunction removeUserSelectStyles(doc /*: ?Document*/) {\n  if (!doc) return;\n  try {\n    if (doc.body) removeClassName(doc.body, 'react-draggable-transparent-selection');\n    // $FlowIgnore: IE\n    if (doc.selection) {\n      // $FlowIgnore: IE\n      doc.selection.empty();\n    } else {\n      // Remove selection caused by scroll, unless it's a focused input\n      // (we use doc.defaultView in case we're in an iframe)\n      const selection = (doc.defaultView || window).getSelection();\n      if (selection && selection.type !== 'Caret') {\n        selection.removeAllRanges();\n      }\n    }\n  } catch (e) {\n    // probably IE\n  }\n}\nfunction addClassName(el /*: HTMLElement*/, className /*: string*/) {\n  if (el.classList) {\n    el.classList.add(className);\n  } else {\n    if (!el.className.match(new RegExp(\"(?:^|\\\\s)\".concat(className, \"(?!\\\\S)\")))) {\n      el.className += \" \".concat(className);\n    }\n  }\n}\nfunction removeClassName(el /*: HTMLElement*/, className /*: string*/) {\n  if (el.classList) {\n    el.classList.remove(className);\n  } else {\n    el.className = el.className.replace(new RegExp(\"(?:^|\\\\s)\".concat(className, \"(?!\\\\S)\"), 'g'), '');\n  }\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.browserPrefixToKey = browserPrefixToKey;\nexports.browserPrefixToStyle = browserPrefixToStyle;\nexports.default = void 0;\nexports.getPrefix = getPrefix;\nconst prefixes = ['Moz', 'Webkit', 'O', 'ms'];\nfunction getPrefix() /*: string*/{\n  var _window$document;\n  let prop /*: string*/ = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'transform';\n  // Ensure we're running in an environment where there is actually a global\n  // `window` obj\n  if (typeof window === 'undefined') return '';\n\n  // If we're in a pseudo-browser server-side environment, this access\n  // path may not exist, so bail out if it doesn't.\n  const style = (_window$document = window.document) === null || _window$document === void 0 || (_window$document = _window$document.documentElement) === null || _window$document === void 0 ? void 0 : _window$document.style;\n  if (!style) return '';\n  if (prop in style) return '';\n  for (let i = 0; i < prefixes.length; i++) {\n    if (browserPrefixToKey(prop, prefixes[i]) in style) return prefixes[i];\n  }\n  return '';\n}\nfunction browserPrefixToKey(prop /*: string*/, prefix /*: string*/) /*: string*/{\n  return prefix ? \"\".concat(prefix).concat(kebabToTitleCase(prop)) : prop;\n}\nfunction browserPrefixToStyle(prop /*: string*/, prefix /*: string*/) /*: string*/{\n  return prefix ? \"-\".concat(prefix.toLowerCase(), \"-\").concat(prop) : prop;\n}\nfunction kebabToTitleCase(str /*: string*/) /*: string*/{\n  let out = '';\n  let shouldCapitalize = true;\n  for (let i = 0; i < str.length; i++) {\n    if (shouldCapitalize) {\n      out += str[i].toUpperCase();\n      shouldCapitalize = false;\n    } else if (str[i] === '-') {\n      shouldCapitalize = true;\n    } else {\n      out += str[i];\n    }\n  }\n  return out;\n}\n\n// Default export is the prefix itself, like 'Moz', 'Webkit', etc\n// Note that you may have to re-test for certain things; for instance, Chrome 50\n// can handle unprefixed `transform`, but not unprefixed `user-select`\nvar _default = exports.default = (getPrefix() /*: string*/);","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = log;\n/*eslint no-console:0*/\nfunction log() {\n  if (undefined) console.log(...arguments);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.canDragX = canDragX;\nexports.canDragY = canDragY;\nexports.createCoreData = createCoreData;\nexports.createDraggableData = createDraggableData;\nexports.getBoundPosition = getBoundPosition;\nexports.getControlPosition = getControlPosition;\nexports.snapToGrid = snapToGrid;\nvar _shims = require(\"./shims\");\nvar _domFns = require(\"./domFns\");\n/*:: import type Draggable from '../Draggable';*/\n/*:: import type {Bounds, ControlPosition, DraggableData, MouseTouchEvent} from './types';*/\n/*:: import type DraggableCore from '../DraggableCore';*/\nfunction getBoundPosition(draggable /*: Draggable*/, x /*: number*/, y /*: number*/) /*: [number, number]*/{\n  // If no bounds, short-circuit and move on\n  if (!draggable.props.bounds) return [x, y];\n\n  // Clone new bounds\n  let {\n    bounds\n  } = draggable.props;\n  bounds = typeof bounds === 'string' ? bounds : cloneBounds(bounds);\n  const node = findDOMNode(draggable);\n  if (typeof bounds === 'string') {\n    const {\n      ownerDocument\n    } = node;\n    const ownerWindow = ownerDocument.defaultView;\n    let boundNode;\n    if (bounds === 'parent') {\n      boundNode = node.parentNode;\n    } else {\n      boundNode = ownerDocument.querySelector(bounds);\n    }\n    if (!(boundNode instanceof ownerWindow.HTMLElement)) {\n      throw new Error('Bounds selector \"' + bounds + '\" could not find an element.');\n    }\n    const boundNodeEl /*: HTMLElement*/ = boundNode; // for Flow, can't seem to refine correctly\n    const nodeStyle = ownerWindow.getComputedStyle(node);\n    const boundNodeStyle = ownerWindow.getComputedStyle(boundNodeEl);\n    // Compute bounds. This is a pain with padding and offsets but this gets it exactly right.\n    bounds = {\n      left: -node.offsetLeft + (0, _shims.int)(boundNodeStyle.paddingLeft) + (0, _shims.int)(nodeStyle.marginLeft),\n      top: -node.offsetTop + (0, _shims.int)(boundNodeStyle.paddingTop) + (0, _shims.int)(nodeStyle.marginTop),\n      right: (0, _domFns.innerWidth)(boundNodeEl) - (0, _domFns.outerWidth)(node) - node.offsetLeft + (0, _shims.int)(boundNodeStyle.paddingRight) - (0, _shims.int)(nodeStyle.marginRight),\n      bottom: (0, _domFns.innerHeight)(boundNodeEl) - (0, _domFns.outerHeight)(node) - node.offsetTop + (0, _shims.int)(boundNodeStyle.paddingBottom) - (0, _shims.int)(nodeStyle.marginBottom)\n    };\n  }\n\n  // Keep x and y below right and bottom limits...\n  if ((0, _shims.isNum)(bounds.right)) x = Math.min(x, bounds.right);\n  if ((0, _shims.isNum)(bounds.bottom)) y = Math.min(y, bounds.bottom);\n\n  // But above left and top limits.\n  if ((0, _shims.isNum)(bounds.left)) x = Math.max(x, bounds.left);\n  if ((0, _shims.isNum)(bounds.top)) y = Math.max(y, bounds.top);\n  return [x, y];\n}\nfunction snapToGrid(grid /*: [number, number]*/, pendingX /*: number*/, pendingY /*: number*/) /*: [number, number]*/{\n  const x = Math.round(pendingX / grid[0]) * grid[0];\n  const y = Math.round(pendingY / grid[1]) * grid[1];\n  return [x, y];\n}\nfunction canDragX(draggable /*: Draggable*/) /*: boolean*/{\n  return draggable.props.axis === 'both' || draggable.props.axis === 'x';\n}\nfunction canDragY(draggable /*: Draggable*/) /*: boolean*/{\n  return draggable.props.axis === 'both' || draggable.props.axis === 'y';\n}\n\n// Get {x, y} positions from event.\nfunction getControlPosition(e /*: MouseTouchEvent*/, touchIdentifier /*: ?number*/, draggableCore /*: DraggableCore*/) /*: ?ControlPosition*/{\n  const touchObj = typeof touchIdentifier === 'number' ? (0, _domFns.getTouch)(e, touchIdentifier) : null;\n  if (typeof touchIdentifier === 'number' && !touchObj) return null; // not the right touch\n  const node = findDOMNode(draggableCore);\n  // User can provide an offsetParent if desired.\n  const offsetParent = draggableCore.props.offsetParent || node.offsetParent || node.ownerDocument.body;\n  return (0, _domFns.offsetXYFromParent)(touchObj || e, offsetParent, draggableCore.props.scale);\n}\n\n// Create an data object exposed by <DraggableCore>'s events\nfunction createCoreData(draggable /*: DraggableCore*/, x /*: number*/, y /*: number*/) /*: DraggableData*/{\n  const isStart = !(0, _shims.isNum)(draggable.lastX);\n  const node = findDOMNode(draggable);\n  if (isStart) {\n    // If this is our first move, use the x and y as last coords.\n    return {\n      node,\n      deltaX: 0,\n      deltaY: 0,\n      lastX: x,\n      lastY: y,\n      x,\n      y\n    };\n  } else {\n    // Otherwise calculate proper values.\n    return {\n      node,\n      deltaX: x - draggable.lastX,\n      deltaY: y - draggable.lastY,\n      lastX: draggable.lastX,\n      lastY: draggable.lastY,\n      x,\n      y\n    };\n  }\n}\n\n// Create an data exposed by <Draggable>'s events\nfunction createDraggableData(draggable /*: Draggable*/, coreData /*: DraggableData*/) /*: DraggableData*/{\n  const scale = draggable.props.scale;\n  return {\n    node: coreData.node,\n    x: draggable.state.x + coreData.deltaX / scale,\n    y: draggable.state.y + coreData.deltaY / scale,\n    deltaX: coreData.deltaX / scale,\n    deltaY: coreData.deltaY / scale,\n    lastX: draggable.state.x,\n    lastY: draggable.state.y\n  };\n}\n\n// A lot faster than stringify/parse\nfunction cloneBounds(bounds /*: Bounds*/) /*: Bounds*/{\n  return {\n    left: bounds.left,\n    top: bounds.top,\n    right: bounds.right,\n    bottom: bounds.bottom\n  };\n}\nfunction findDOMNode(draggable /*: Draggable | DraggableCore*/) /*: HTMLElement*/{\n  const node = draggable.findDOMNode();\n  if (!node) {\n    throw new Error('<DraggableCore>: Unmounted during event!');\n  }\n  // $FlowIgnore we can't assert on HTMLElement due to tests... FIXME\n  return node;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.dontSetMe = dontSetMe;\nexports.findInArray = findInArray;\nexports.int = int;\nexports.isFunction = isFunction;\nexports.isNum = isNum;\n// @credits https://gist.github.com/rogozhnikoff/a43cfed27c41e4e68cdc\nfunction findInArray(array /*: Array<any> | TouchList*/, callback /*: Function*/) /*: any*/{\n  for (let i = 0, length = array.length; i < length; i++) {\n    if (callback.apply(callback, [array[i], i, array])) return array[i];\n  }\n}\nfunction isFunction(func /*: any*/) /*: boolean %checks*/{\n  // $FlowIgnore[method-unbinding]\n  return typeof func === 'function' || Object.prototype.toString.call(func) === '[object Function]';\n}\nfunction isNum(num /*: any*/) /*: boolean %checks*/{\n  return typeof num === 'number' && !isNaN(num);\n}\nfunction int(a /*: string*/) /*: number*/{\n  return parseInt(a, 10);\n}\nfunction dontSetMe(props /*: Object*/, propName /*: string*/, componentName /*: string*/) /*: ?Error*/{\n  if (props[propName]) {\n    return new Error(\"Invalid prop \".concat(propName, \" passed to \").concat(componentName, \" - do not set this, set it on the child.\"));\n  }\n}","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f);else for(t in e)e[t]&&(n&&(n+=\" \"),n+=t);return n}export function clsx(){for(var e,t,f=0,n=\"\";f<arguments.length;)(e=arguments[f++])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","/**\n * @license React\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=Symbol.for(\"react.element\"),n=Symbol.for(\"react.portal\"),p=Symbol.for(\"react.fragment\"),q=Symbol.for(\"react.strict_mode\"),r=Symbol.for(\"react.profiler\"),t=Symbol.for(\"react.provider\"),u=Symbol.for(\"react.context\"),v=Symbol.for(\"react.forward_ref\"),w=Symbol.for(\"react.suspense\"),x=Symbol.for(\"react.memo\"),y=Symbol.for(\"react.lazy\"),z=Symbol.iterator;function A(a){if(null===a||\"object\"!==typeof a)return null;a=z&&a[z]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}\nvar B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}E.prototype.isReactComponent={};\nE.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}var H=G.prototype=new F;\nH.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1<g){for(var f=Array(g),m=0;m<g;m++)f[m]=arguments[m+2];c.children=f}if(a&&a.defaultProps)for(d in g=a.defaultProps,g)void 0===c[d]&&(c[d]=g[d]);return{$$typeof:l,type:a,key:k,ref:h,props:c,_owner:K.current}}\nfunction N(a,b){return{$$typeof:l,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function O(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===l}function escape(a){var b={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+a.replace(/[=:]/g,function(a){return b[a]})}var P=/\\/+/g;function Q(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(\"\"+a.key):b.toString(36)}\nfunction R(a,b,e,d,c){var k=typeof a;if(\"undefined\"===k||\"boolean\"===k)a=null;var h=!1;if(null===a)h=!0;else switch(k){case \"string\":case \"number\":h=!0;break;case \"object\":switch(a.$$typeof){case l:case n:h=!0}}if(h)return h=a,c=c(h),a=\"\"===d?\".\"+Q(h,0):d,I(c)?(e=\"\",null!=a&&(e=a.replace(P,\"$&/\")+\"/\"),R(c,b,e,\"\",function(a){return a})):null!=c&&(O(c)&&(c=N(c,e+(!c.key||h&&h.key===c.key?\"\":(\"\"+c.key).replace(P,\"$&/\")+\"/\")+a)),b.push(c)),1;h=0;d=\"\"===d?\".\":d+\":\";if(I(a))for(var g=0;g<a.length;g++){k=\na[g];var f=d+Q(k,g);h+=R(k,b,e,f,c)}else if(f=A(a),\"function\"===typeof f)for(a=f.call(a),g=0;!(k=a.next()).done;)k=k.value,f=d+Q(k,g++),h+=R(k,b,e,f,c);else if(\"object\"===k)throw b=String(a),Error(\"Objects are not valid as a React child (found: \"+(\"[object Object]\"===b?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":b)+\"). If you meant to render a collection of children, use an array instead.\");return h}\nfunction S(a,b,e){if(null==a)return a;var d=[],c=0;R(a,d,\"\",\"\",function(a){return b.call(e,a,c++)});return d}function T(a){if(-1===a._status){var b=a._result;b=b();b.then(function(b){if(0===a._status||-1===a._status)a._status=1,a._result=b},function(b){if(0===a._status||-1===a._status)a._status=2,a._result=b});-1===a._status&&(a._status=0,a._result=b)}if(1===a._status)return a._result.default;throw a._result;}\nvar U={current:null},V={transition:null},W={ReactCurrentDispatcher:U,ReactCurrentBatchConfig:V,ReactCurrentOwner:K};function X(){throw Error(\"act(...) is not supported in production builds of React.\");}\nexports.Children={map:S,forEach:function(a,b,e){S(a,function(){b.apply(this,arguments)},e)},count:function(a){var b=0;S(a,function(){b++});return b},toArray:function(a){return S(a,function(a){return a})||[]},only:function(a){if(!O(a))throw Error(\"React.Children.only expected to receive a single React element child.\");return a}};exports.Component=E;exports.Fragment=p;exports.Profiler=r;exports.PureComponent=G;exports.StrictMode=q;exports.Suspense=w;\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=W;exports.act=X;\nexports.cloneElement=function(a,b,e){if(null===a||void 0===a)throw Error(\"React.cloneElement(...): The argument must be a React element, but you passed \"+a+\".\");var d=C({},a.props),c=a.key,k=a.ref,h=a._owner;if(null!=b){void 0!==b.ref&&(k=b.ref,h=K.current);void 0!==b.key&&(c=\"\"+b.key);if(a.type&&a.type.defaultProps)var g=a.type.defaultProps;for(f in b)J.call(b,f)&&!L.hasOwnProperty(f)&&(d[f]=void 0===b[f]&&void 0!==g?g[f]:b[f])}var f=arguments.length-2;if(1===f)d.children=e;else if(1<f){g=Array(f);\nfor(var m=0;m<f;m++)g[m]=arguments[m+2];d.children=g}return{$$typeof:l,type:a.type,key:c,ref:k,props:d,_owner:h}};exports.createContext=function(a){a={$$typeof:u,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null};a.Provider={$$typeof:t,_context:a};return a.Consumer=a};exports.createElement=M;exports.createFactory=function(a){var b=M.bind(null,a);b.type=a;return b};exports.createRef=function(){return{current:null}};\nexports.forwardRef=function(a){return{$$typeof:v,render:a}};exports.isValidElement=O;exports.lazy=function(a){return{$$typeof:y,_payload:{_status:-1,_result:a},_init:T}};exports.memo=function(a,b){return{$$typeof:x,type:a,compare:void 0===b?null:b}};exports.startTransition=function(a){var b=V.transition;V.transition={};try{a()}finally{V.transition=b}};exports.unstable_act=X;exports.useCallback=function(a,b){return U.current.useCallback(a,b)};exports.useContext=function(a){return U.current.useContext(a)};\nexports.useDebugValue=function(){};exports.useDeferredValue=function(a){return U.current.useDeferredValue(a)};exports.useEffect=function(a,b){return U.current.useEffect(a,b)};exports.useId=function(){return U.current.useId()};exports.useImperativeHandle=function(a,b,e){return U.current.useImperativeHandle(a,b,e)};exports.useInsertionEffect=function(a,b){return U.current.useInsertionEffect(a,b)};exports.useLayoutEffect=function(a,b){return U.current.useLayoutEffect(a,b)};\nexports.useMemo=function(a,b){return U.current.useMemo(a,b)};exports.useReducer=function(a,b,e){return U.current.useReducer(a,b,e)};exports.useRef=function(a){return U.current.useRef(a)};exports.useState=function(a){return U.current.useState(a)};exports.useSyncExternalStore=function(a,b,e){return U.current.useSyncExternalStore(a,b,e)};exports.useTransition=function(){return U.current.useTransition()};exports.version=\"18.3.1\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react.production.min.js');\n} else {\n  module.exports = require('./cjs/react.development.js');\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n  module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * @license React\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';function f(a,b){var c=a.length;a.push(b);a:for(;0<c;){var d=c-1>>>1,e=a[d];if(0<g(e,b))a[d]=b,a[c]=e,c=d;else break a}}function h(a){return 0===a.length?null:a[0]}function k(a){if(0===a.length)return null;var b=a[0],c=a.pop();if(c!==b){a[0]=c;a:for(var d=0,e=a.length,w=e>>>1;d<w;){var m=2*(d+1)-1,C=a[m],n=m+1,x=a[n];if(0>g(C,c))n<e&&0>g(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(n<e&&0>g(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Q<P?!1:!0}function R(){if(null!==O){var a=exports.unstable_now();Q=a;var b=!0;try{b=O(!0,a)}finally{b?S():(N=!1,O=null)}}else N=!1}var S;if(\"function\"===typeof F)S=function(){F(R)};else if(\"undefined\"!==typeof MessageChannel){var T=new MessageChannel,U=T.port2;T.port1.onmessage=R;S=function(){U.postMessage(null)}}else S=function(){D(R,0)};function I(a){O=a;N||(N=!0,S())}function K(a,b){L=D(function(){a(exports.unstable_now())},b)}\nexports.unstable_IdlePriority=5;exports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){A||z||(A=!0,I(J))};\nexports.unstable_forceFrameRate=function(a){0>a||125<a?console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"):P=0<a?Math.floor(1E3/a):5};exports.unstable_getCurrentPriorityLevel=function(){return y};exports.unstable_getFirstCallbackNode=function(){return h(r)};exports.unstable_next=function(a){switch(y){case 1:case 2:case 3:var b=3;break;default:b=y}var c=y;y=b;try{return a()}finally{y=c}};exports.unstable_pauseExecution=function(){};\nexports.unstable_requestPaint=function(){};exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=y;y=a;try{return b()}finally{y=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();\"object\"===typeof c&&null!==c?(c=c.delay,c=\"number\"===typeof c&&0<c?d+c:d):c=d;switch(a){case 1:var e=-1;break;case 2:e=250;break;case 5:e=1073741823;break;case 4:e=1E4;break;default:e=5E3}e=c+e;a={id:u++,callback:b,priorityLevel:a,startTime:c,expirationTime:e,sortIndex:-1};c>d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n  module.exports = require('./cjs/scheduler.development.js');\n}\n","//\n\nmodule.exports = function shallowEqual(objA, objB, compare, compareContext) {\n  var ret = compare ? compare.call(compareContext, objA, objB) : void 0;\n\n  if (ret !== void 0) {\n    return !!ret;\n  }\n\n  if (objA === objB) {\n    return true;\n  }\n\n  if (typeof objA !== \"object\" || !objA || typeof objB !== \"object\" || !objB) {\n    return false;\n  }\n\n  var keysA = Object.keys(objA);\n  var keysB = Object.keys(objB);\n\n  if (keysA.length !== keysB.length) {\n    return false;\n  }\n\n  var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB);\n\n  // Test for A's keys different from B.\n  for (var idx = 0; idx < keysA.length; idx++) {\n    var key = keysA[idx];\n\n    if (!bHasOwnProperty(key)) {\n      return false;\n    }\n\n    var valueA = objA[key];\n    var valueB = objB[key];\n\n    ret = compare ? compare.call(compareContext, valueA, valueB, key) : void 0;\n\n    if (ret === false || (ret === void 0 && valueA !== valueB)) {\n      return false;\n    }\n  }\n\n  return true;\n};\n","import parse from 'inline-style-parser';\nimport type { Declaration } from 'inline-style-parser';\n\nexport { Declaration };\n\ninterface StyleObject {\n  [name: string]: string;\n}\n\ntype Iterator = (\n  property: string,\n  value: string,\n  declaration: Declaration,\n) => void;\n\n/**\n * Parses inline style to object.\n *\n * @param style - Inline style.\n * @param iterator - Iterator.\n * @returns - Style object or null.\n *\n * @example Parsing inline style to object:\n *\n * ```js\n * import parse from 'style-to-object';\n * parse('line-height: 42;'); // { 'line-height': '42' }\n * ```\n */\nexport default function StyleToObject(\n  style: string,\n  iterator?: Iterator,\n): StyleObject | null {\n  let styleObject: StyleObject | null = null;\n\n  if (!style || typeof style !== 'string') {\n    return styleObject;\n  }\n\n  const declarations = parse(style);\n  const hasIterator = typeof iterator === 'function';\n\n  declarations.forEach((declaration) => {\n    if (declaration.type !== 'declaration') {\n      return;\n    }\n\n    const { property, value } = declaration;\n\n    if (hasIterator) {\n      iterator(property, value, declaration);\n    } else if (value) {\n      styleObject = styleObject || {};\n      styleObject[property] = value;\n    }\n  });\n\n  return styleObject;\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/\";","__webpack_require__.nc = undefined;","////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Actions represent the type of change to a location value.\n */\nexport enum Action {\n  /**\n   * A POP indicates a change to an arbitrary index in the history stack, such\n   * as a back or forward navigation. It does not describe the direction of the\n   * navigation, only that the current index changed.\n   *\n   * Note: This is the default action for newly created history objects.\n   */\n  Pop = \"POP\",\n\n  /**\n   * A PUSH indicates a new entry being added to the history stack, such as when\n   * a link is clicked and a new page loads. When this happens, all subsequent\n   * entries in the stack are lost.\n   */\n  Push = \"PUSH\",\n\n  /**\n   * A REPLACE indicates the entry at the current index in the history stack\n   * being replaced by a new one.\n   */\n  Replace = \"REPLACE\",\n}\n\n/**\n * The pathname, search, and hash values of a URL.\n */\nexport interface Path {\n  /**\n   * A URL pathname, beginning with a /.\n   */\n  pathname: string;\n\n  /**\n   * A URL search string, beginning with a ?.\n   */\n  search: string;\n\n  /**\n   * A URL fragment identifier, beginning with a #.\n   */\n  hash: string;\n}\n\n// TODO: (v7) Change the Location generic default from `any` to `unknown` and\n// remove Remix `useLocation` wrapper.\n\n/**\n * An entry in a history stack. A location contains information about the\n * URL path, as well as possibly some arbitrary state and a key.\n */\nexport interface Location<State = any> extends Path {\n  /**\n   * A value of arbitrary data associated with this location.\n   */\n  state: State;\n\n  /**\n   * A unique string associated with this location. May be used to safely store\n   * and retrieve data in some other storage API, like `localStorage`.\n   *\n   * Note: This value is always \"default\" on the initial location.\n   */\n  key: string;\n}\n\n/**\n * A change to the current location.\n */\nexport interface Update {\n  /**\n   * The action that triggered the change.\n   */\n  action: Action;\n\n  /**\n   * The new location.\n   */\n  location: Location;\n\n  /**\n   * The delta between this location and the former location in the history stack\n   */\n  delta: number | null;\n}\n\n/**\n * A function that receives notifications about location changes.\n */\nexport interface Listener {\n  (update: Update): void;\n}\n\n/**\n * Describes a location that is the destination of some navigation, either via\n * `history.push` or `history.replace`. This may be either a URL or the pieces\n * of a URL path.\n */\nexport type To = string | Partial<Path>;\n\n/**\n * A history is an interface to the navigation stack. The history serves as the\n * source of truth for the current location, as well as provides a set of\n * methods that may be used to change it.\n *\n * It is similar to the DOM's `window.history` object, but with a smaller, more\n * focused API.\n */\nexport interface History {\n  /**\n   * The last action that modified the current location. This will always be\n   * Action.Pop when a history instance is first created. This value is mutable.\n   */\n  readonly action: Action;\n\n  /**\n   * The current location. This value is mutable.\n   */\n  readonly location: Location;\n\n  /**\n   * Returns a valid href for the given `to` value that may be used as\n   * the value of an <a href> attribute.\n   *\n   * @param to - The destination URL\n   */\n  createHref(to: To): string;\n\n  /**\n   * Returns a URL for the given `to` value\n   *\n   * @param to - The destination URL\n   */\n  createURL(to: To): URL;\n\n  /**\n   * Encode a location the same way window.history would do (no-op for memory\n   * history) so we ensure our PUSH/REPLACE navigations for data routers\n   * behave the same as POP\n   *\n   * @param to Unencoded path\n   */\n  encodeLocation(to: To): Path;\n\n  /**\n   * Pushes a new location onto the history stack, increasing its length by one.\n   * If there were any entries in the stack after the current one, they are\n   * lost.\n   *\n   * @param to - The new URL\n   * @param state - Data to associate with the new location\n   */\n  push(to: To, state?: any): void;\n\n  /**\n   * Replaces the current location in the history stack with a new one.  The\n   * location that was replaced will no longer be available.\n   *\n   * @param to - The new URL\n   * @param state - Data to associate with the new location\n   */\n  replace(to: To, state?: any): void;\n\n  /**\n   * Navigates `n` entries backward/forward in the history stack relative to the\n   * current index. For example, a \"back\" navigation would use go(-1).\n   *\n   * @param delta - The delta in the stack index\n   */\n  go(delta: number): void;\n\n  /**\n   * Sets up a listener that will be called whenever the current location\n   * changes.\n   *\n   * @param listener - A function that will be called when the location changes\n   * @returns unlisten - A function that may be used to stop listening\n   */\n  listen(listener: Listener): () => void;\n}\n\ntype HistoryState = {\n  usr: any;\n  key?: string;\n  idx: number;\n};\n\nconst PopStateEventType = \"popstate\";\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Memory History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A user-supplied object that describes a location. Used when providing\n * entries to `createMemoryHistory` via its `initialEntries` option.\n */\nexport type InitialEntry = string | Partial<Location>;\n\nexport type MemoryHistoryOptions = {\n  initialEntries?: InitialEntry[];\n  initialIndex?: number;\n  v5Compat?: boolean;\n};\n\n/**\n * A memory history stores locations in memory. This is useful in stateful\n * environments where there is no web browser, such as node tests or React\n * Native.\n */\nexport interface MemoryHistory extends History {\n  /**\n   * The current index in the history stack.\n   */\n  readonly index: number;\n}\n\n/**\n * Memory history stores the current location in memory. It is designed for use\n * in stateful non-browser environments like tests and React Native.\n */\nexport function createMemoryHistory(\n  options: MemoryHistoryOptions = {}\n): MemoryHistory {\n  let { initialEntries = [\"/\"], initialIndex, v5Compat = false } = options;\n  let entries: Location[]; // Declare so we can access from createMemoryLocation\n  entries = initialEntries.map((entry, index) =>\n    createMemoryLocation(\n      entry,\n      typeof entry === \"string\" ? null : entry.state,\n      index === 0 ? \"default\" : undefined\n    )\n  );\n  let index = clampIndex(\n    initialIndex == null ? entries.length - 1 : initialIndex\n  );\n  let action = Action.Pop;\n  let listener: Listener | null = null;\n\n  function clampIndex(n: number): number {\n    return Math.min(Math.max(n, 0), entries.length - 1);\n  }\n  function getCurrentLocation(): Location {\n    return entries[index];\n  }\n  function createMemoryLocation(\n    to: To,\n    state: any = null,\n    key?: string\n  ): Location {\n    let location = createLocation(\n      entries ? getCurrentLocation().pathname : \"/\",\n      to,\n      state,\n      key\n    );\n    warning(\n      location.pathname.charAt(0) === \"/\",\n      `relative pathnames are not supported in memory history: ${JSON.stringify(\n        to\n      )}`\n    );\n    return location;\n  }\n\n  function createHref(to: To) {\n    return typeof to === \"string\" ? to : createPath(to);\n  }\n\n  let history: MemoryHistory = {\n    get index() {\n      return index;\n    },\n    get action() {\n      return action;\n    },\n    get location() {\n      return getCurrentLocation();\n    },\n    createHref,\n    createURL(to) {\n      return new URL(createHref(to), \"http://localhost\");\n    },\n    encodeLocation(to: To) {\n      let path = typeof to === \"string\" ? parsePath(to) : to;\n      return {\n        pathname: path.pathname || \"\",\n        search: path.search || \"\",\n        hash: path.hash || \"\",\n      };\n    },\n    push(to, state) {\n      action = Action.Push;\n      let nextLocation = createMemoryLocation(to, state);\n      index += 1;\n      entries.splice(index, entries.length, nextLocation);\n      if (v5Compat && listener) {\n        listener({ action, location: nextLocation, delta: 1 });\n      }\n    },\n    replace(to, state) {\n      action = Action.Replace;\n      let nextLocation = createMemoryLocation(to, state);\n      entries[index] = nextLocation;\n      if (v5Compat && listener) {\n        listener({ action, location: nextLocation, delta: 0 });\n      }\n    },\n    go(delta) {\n      action = Action.Pop;\n      let nextIndex = clampIndex(index + delta);\n      let nextLocation = entries[nextIndex];\n      index = nextIndex;\n      if (listener) {\n        listener({ action, location: nextLocation, delta });\n      }\n    },\n    listen(fn: Listener) {\n      listener = fn;\n      return () => {\n        listener = null;\n      };\n    },\n  };\n\n  return history;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Browser History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A browser history stores the current location in regular URLs in a web\n * browser environment. This is the standard for most web apps and provides the\n * cleanest URLs the browser's address bar.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#browserhistory\n */\nexport interface BrowserHistory extends UrlHistory {}\n\nexport type BrowserHistoryOptions = UrlHistoryOptions;\n\n/**\n * Browser history stores the location in regular URLs. This is the standard for\n * most web apps, but it requires some configuration on the server to ensure you\n * serve the same app at multiple URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory\n */\nexport function createBrowserHistory(\n  options: BrowserHistoryOptions = {}\n): BrowserHistory {\n  function createBrowserLocation(\n    window: Window,\n    globalHistory: Window[\"history\"]\n  ) {\n    let { pathname, search, hash } = window.location;\n    return createLocation(\n      \"\",\n      { pathname, search, hash },\n      // state defaults to `null` because `window.history.state` does\n      (globalHistory.state && globalHistory.state.usr) || null,\n      (globalHistory.state && globalHistory.state.key) || \"default\"\n    );\n  }\n\n  function createBrowserHref(window: Window, to: To) {\n    return typeof to === \"string\" ? to : createPath(to);\n  }\n\n  return getUrlBasedHistory(\n    createBrowserLocation,\n    createBrowserHref,\n    null,\n    options\n  );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Hash History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A hash history stores the current location in the fragment identifier portion\n * of the URL in a web browser environment.\n *\n * This is ideal for apps that do not control the server for some reason\n * (because the fragment identifier is never sent to the server), including some\n * shared hosting environments that do not provide fine-grained controls over\n * which pages are served at which URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#hashhistory\n */\nexport interface HashHistory extends UrlHistory {}\n\nexport type HashHistoryOptions = UrlHistoryOptions;\n\n/**\n * Hash history stores the location in window.location.hash. This makes it ideal\n * for situations where you don't want to send the location to the server for\n * some reason, either because you do cannot configure it or the URL space is\n * reserved for something else.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory\n */\nexport function createHashHistory(\n  options: HashHistoryOptions = {}\n): HashHistory {\n  function createHashLocation(\n    window: Window,\n    globalHistory: Window[\"history\"]\n  ) {\n    let {\n      pathname = \"/\",\n      search = \"\",\n      hash = \"\",\n    } = parsePath(window.location.hash.substr(1));\n\n    // Hash URL should always have a leading / just like window.location.pathname\n    // does, so if an app ends up at a route like /#something then we add a\n    // leading slash so all of our path-matching behaves the same as if it would\n    // in a browser router.  This is particularly important when there exists a\n    // root splat route (<Route path=\"*\">) since that matches internally against\n    // \"/*\" and we'd expect /#something to 404 in a hash router app.\n    if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n      pathname = \"/\" + pathname;\n    }\n\n    return createLocation(\n      \"\",\n      { pathname, search, hash },\n      // state defaults to `null` because `window.history.state` does\n      (globalHistory.state && globalHistory.state.usr) || null,\n      (globalHistory.state && globalHistory.state.key) || \"default\"\n    );\n  }\n\n  function createHashHref(window: Window, to: To) {\n    let base = window.document.querySelector(\"base\");\n    let href = \"\";\n\n    if (base && base.getAttribute(\"href\")) {\n      let url = window.location.href;\n      let hashIndex = url.indexOf(\"#\");\n      href = hashIndex === -1 ? url : url.slice(0, hashIndex);\n    }\n\n    return href + \"#\" + (typeof to === \"string\" ? to : createPath(to));\n  }\n\n  function validateHashLocation(location: Location, to: To) {\n    warning(\n      location.pathname.charAt(0) === \"/\",\n      `relative pathnames are not supported in hash history.push(${JSON.stringify(\n        to\n      )})`\n    );\n  }\n\n  return getUrlBasedHistory(\n    createHashLocation,\n    createHashHref,\n    validateHashLocation,\n    options\n  );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region UTILS\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n */\nexport function invariant(value: boolean, message?: string): asserts value;\nexport function invariant<T>(\n  value: T | null | undefined,\n  message?: string\n): asserts value is T;\nexport function invariant(value: any, message?: string) {\n  if (value === false || value === null || typeof value === \"undefined\") {\n    throw new Error(message);\n  }\n}\n\nexport function warning(cond: any, message: string) {\n  if (!cond) {\n    // eslint-disable-next-line no-console\n    if (typeof console !== \"undefined\") console.warn(message);\n\n    try {\n      // Welcome to debugging history!\n      //\n      // This error is thrown as a convenience, so you can more easily\n      // find the source for a warning that appears in the console by\n      // enabling \"pause on exceptions\" in your JavaScript debugger.\n      throw new Error(message);\n      // eslint-disable-next-line no-empty\n    } catch (e) {}\n  }\n}\n\nfunction createKey() {\n  return Math.random().toString(36).substr(2, 8);\n}\n\n/**\n * For browser-based histories, we combine the state and key into an object\n */\nfunction getHistoryState(location: Location, index: number): HistoryState {\n  return {\n    usr: location.state,\n    key: location.key,\n    idx: index,\n  };\n}\n\n/**\n * Creates a Location object with a unique key from the given Path\n */\nexport function createLocation(\n  current: string | Location,\n  to: To,\n  state: any = null,\n  key?: string\n): Readonly<Location> {\n  let location: Readonly<Location> = {\n    pathname: typeof current === \"string\" ? current : current.pathname,\n    search: \"\",\n    hash: \"\",\n    ...(typeof to === \"string\" ? parsePath(to) : to),\n    state,\n    // TODO: This could be cleaned up.  push/replace should probably just take\n    // full Locations now and avoid the need to run through this flow at all\n    // But that's a pretty big refactor to the current test suite so going to\n    // keep as is for the time being and just let any incoming keys take precedence\n    key: (to && (to as Location).key) || key || createKey(),\n  };\n  return location;\n}\n\n/**\n * Creates a string URL path from the given pathname, search, and hash components.\n */\nexport function createPath({\n  pathname = \"/\",\n  search = \"\",\n  hash = \"\",\n}: Partial<Path>) {\n  if (search && search !== \"?\")\n    pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n  if (hash && hash !== \"#\")\n    pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n  return pathname;\n}\n\n/**\n * Parses a string URL path into its separate pathname, search, and hash components.\n */\nexport function parsePath(path: string): Partial<Path> {\n  let parsedPath: Partial<Path> = {};\n\n  if (path) {\n    let hashIndex = path.indexOf(\"#\");\n    if (hashIndex >= 0) {\n      parsedPath.hash = path.substr(hashIndex);\n      path = path.substr(0, hashIndex);\n    }\n\n    let searchIndex = path.indexOf(\"?\");\n    if (searchIndex >= 0) {\n      parsedPath.search = path.substr(searchIndex);\n      path = path.substr(0, searchIndex);\n    }\n\n    if (path) {\n      parsedPath.pathname = path;\n    }\n  }\n\n  return parsedPath;\n}\n\nexport interface UrlHistory extends History {}\n\nexport type UrlHistoryOptions = {\n  window?: Window;\n  v5Compat?: boolean;\n};\n\nfunction getUrlBasedHistory(\n  getLocation: (window: Window, globalHistory: Window[\"history\"]) => Location,\n  createHref: (window: Window, to: To) => string,\n  validateLocation: ((location: Location, to: To) => void) | null,\n  options: UrlHistoryOptions = {}\n): UrlHistory {\n  let { window = document.defaultView!, v5Compat = false } = options;\n  let globalHistory = window.history;\n  let action = Action.Pop;\n  let listener: Listener | null = null;\n\n  let index = getIndex()!;\n  // Index should only be null when we initialize. If not, it's because the\n  // user called history.pushState or history.replaceState directly, in which\n  // case we should log a warning as it will result in bugs.\n  if (index == null) {\n    index = 0;\n    globalHistory.replaceState({ ...globalHistory.state, idx: index }, \"\");\n  }\n\n  function getIndex(): number {\n    let state = globalHistory.state || { idx: null };\n    return state.idx;\n  }\n\n  function handlePop() {\n    action = Action.Pop;\n    let nextIndex = getIndex();\n    let delta = nextIndex == null ? null : nextIndex - index;\n    index = nextIndex;\n    if (listener) {\n      listener({ action, location: history.location, delta });\n    }\n  }\n\n  function push(to: To, state?: any) {\n    action = Action.Push;\n    let location = createLocation(history.location, to, state);\n    if (validateLocation) validateLocation(location, to);\n\n    index = getIndex() + 1;\n    let historyState = getHistoryState(location, index);\n    let url = history.createHref(location);\n\n    // try...catch because iOS limits us to 100 pushState calls :/\n    try {\n      globalHistory.pushState(historyState, \"\", url);\n    } catch (error) {\n      // If the exception is because `state` can't be serialized, let that throw\n      // outwards just like a replace call would so the dev knows the cause\n      // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n      // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n      if (error instanceof DOMException && error.name === \"DataCloneError\") {\n        throw error;\n      }\n      // They are going to lose state here, but there is no real\n      // way to warn them about it since the page will refresh...\n      window.location.assign(url);\n    }\n\n    if (v5Compat && listener) {\n      listener({ action, location: history.location, delta: 1 });\n    }\n  }\n\n  function replace(to: To, state?: any) {\n    action = Action.Replace;\n    let location = createLocation(history.location, to, state);\n    if (validateLocation) validateLocation(location, to);\n\n    index = getIndex();\n    let historyState = getHistoryState(location, index);\n    let url = history.createHref(location);\n    globalHistory.replaceState(historyState, \"\", url);\n\n    if (v5Compat && listener) {\n      listener({ action, location: history.location, delta: 0 });\n    }\n  }\n\n  function createURL(to: To): URL {\n    // window.location.origin is \"null\" (the literal string value) in Firefox\n    // under certain conditions, notably when serving from a local HTML file\n    // See https://bugzilla.mozilla.org/show_bug.cgi?id=878297\n    let base =\n      window.location.origin !== \"null\"\n        ? window.location.origin\n        : window.location.href;\n\n    let href = typeof to === \"string\" ? to : createPath(to);\n    // Treating this as a full URL will strip any trailing spaces so we need to\n    // pre-encode them since they might be part of a matching splat param from\n    // an ancestor route\n    href = href.replace(/ $/, \"%20\");\n    invariant(\n      base,\n      `No window.location.(origin|href) available to create URL for href: ${href}`\n    );\n    return new URL(href, base);\n  }\n\n  let history: History = {\n    get action() {\n      return action;\n    },\n    get location() {\n      return getLocation(window, globalHistory);\n    },\n    listen(fn: Listener) {\n      if (listener) {\n        throw new Error(\"A history only accepts one active listener\");\n      }\n      window.addEventListener(PopStateEventType, handlePop);\n      listener = fn;\n\n      return () => {\n        window.removeEventListener(PopStateEventType, handlePop);\n        listener = null;\n      };\n    },\n    createHref(to) {\n      return createHref(window, to);\n    },\n    createURL,\n    encodeLocation(to) {\n      // Encode a Location the same way window.location would\n      let url = createURL(to);\n      return {\n        pathname: url.pathname,\n        search: url.search,\n        hash: url.hash,\n      };\n    },\n    push,\n    replace,\n    go(n) {\n      return globalHistory.go(n);\n    },\n  };\n\n  return history;\n}\n\n//#endregion\n","import type { Location, Path, To } from \"./history\";\nimport { invariant, parsePath, warning } from \"./history\";\n\n/**\n * Map of routeId -> data returned from a loader/action/error\n */\nexport interface RouteData {\n  [routeId: string]: any;\n}\n\nexport enum ResultType {\n  data = \"data\",\n  deferred = \"deferred\",\n  redirect = \"redirect\",\n  error = \"error\",\n}\n\n/**\n * Successful result from a loader or action\n */\nexport interface SuccessResult {\n  type: ResultType.data;\n  data: unknown;\n  statusCode?: number;\n  headers?: Headers;\n}\n\n/**\n * Successful defer() result from a loader or action\n */\nexport interface DeferredResult {\n  type: ResultType.deferred;\n  deferredData: DeferredData;\n  statusCode?: number;\n  headers?: Headers;\n}\n\n/**\n * Redirect result from a loader or action\n */\nexport interface RedirectResult {\n  type: ResultType.redirect;\n  // We keep the raw Response for redirects so we can return it verbatim\n  response: Response;\n}\n\n/**\n * Unsuccessful result from a loader or action\n */\nexport interface ErrorResult {\n  type: ResultType.error;\n  error: unknown;\n  statusCode?: number;\n  headers?: Headers;\n}\n\n/**\n * Result from a loader or action - potentially successful or unsuccessful\n */\nexport type DataResult =\n  | SuccessResult\n  | DeferredResult\n  | RedirectResult\n  | ErrorResult;\n\n/**\n * Result from a loader or action called via dataStrategy\n */\nexport interface HandlerResult {\n  type: \"data\" | \"error\";\n  result: unknown; // data, Error, Response, DeferredData\n  status?: number;\n}\n\ntype LowerCaseFormMethod = \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\";\ntype UpperCaseFormMethod = Uppercase<LowerCaseFormMethod>;\n\n/**\n * Users can specify either lowercase or uppercase form methods on `<Form>`,\n * useSubmit(), `<fetcher.Form>`, etc.\n */\nexport type HTMLFormMethod = LowerCaseFormMethod | UpperCaseFormMethod;\n\n/**\n * Active navigation/fetcher form methods are exposed in lowercase on the\n * RouterState\n */\nexport type FormMethod = LowerCaseFormMethod;\nexport type MutationFormMethod = Exclude<FormMethod, \"get\">;\n\n/**\n * In v7, active navigation/fetcher form methods are exposed in uppercase on the\n * RouterState.  This is to align with the normalization done via fetch().\n */\nexport type V7_FormMethod = UpperCaseFormMethod;\nexport type V7_MutationFormMethod = Exclude<V7_FormMethod, \"GET\">;\n\nexport type FormEncType =\n  | \"application/x-www-form-urlencoded\"\n  | \"multipart/form-data\"\n  | \"application/json\"\n  | \"text/plain\";\n\n// Thanks https://github.com/sindresorhus/type-fest!\ntype JsonObject = { [Key in string]: JsonValue } & {\n  [Key in string]?: JsonValue | undefined;\n};\ntype JsonArray = JsonValue[] | readonly JsonValue[];\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\n/**\n * @private\n * Internal interface to pass around for action submissions, not intended for\n * external consumption\n */\nexport type Submission =\n  | {\n      formMethod: FormMethod | V7_FormMethod;\n      formAction: string;\n      formEncType: FormEncType;\n      formData: FormData;\n      json: undefined;\n      text: undefined;\n    }\n  | {\n      formMethod: FormMethod | V7_FormMethod;\n      formAction: string;\n      formEncType: FormEncType;\n      formData: undefined;\n      json: JsonValue;\n      text: undefined;\n    }\n  | {\n      formMethod: FormMethod | V7_FormMethod;\n      formAction: string;\n      formEncType: FormEncType;\n      formData: undefined;\n      json: undefined;\n      text: string;\n    };\n\n/**\n * @private\n * Arguments passed to route loader/action functions.  Same for now but we keep\n * this as a private implementation detail in case they diverge in the future.\n */\ninterface DataFunctionArgs<Context> {\n  request: Request;\n  params: Params;\n  context?: Context;\n}\n\n// TODO: (v7) Change the defaults from any to unknown in and remove Remix wrappers:\n//   ActionFunction, ActionFunctionArgs, LoaderFunction, LoaderFunctionArgs\n//   Also, make them a type alias instead of an interface\n\n/**\n * Arguments passed to loader functions\n */\nexport interface LoaderFunctionArgs<Context = any>\n  extends DataFunctionArgs<Context> {}\n\n/**\n * Arguments passed to action functions\n */\nexport interface ActionFunctionArgs<Context = any>\n  extends DataFunctionArgs<Context> {}\n\n/**\n * Loaders and actions can return anything except `undefined` (`null` is a\n * valid return value if there is no data to return).  Responses are preferred\n * and will ease any future migration to Remix\n */\ntype DataFunctionValue = Response | NonNullable<unknown> | null;\n\ntype DataFunctionReturnValue = Promise<DataFunctionValue> | DataFunctionValue;\n\n/**\n * Route loader function signature\n */\nexport type LoaderFunction<Context = any> = {\n  (\n    args: LoaderFunctionArgs<Context>,\n    handlerCtx?: unknown\n  ): DataFunctionReturnValue;\n} & { hydrate?: boolean };\n\n/**\n * Route action function signature\n */\nexport interface ActionFunction<Context = any> {\n  (\n    args: ActionFunctionArgs<Context>,\n    handlerCtx?: unknown\n  ): DataFunctionReturnValue;\n}\n\n/**\n * Arguments passed to shouldRevalidate function\n */\nexport interface ShouldRevalidateFunctionArgs {\n  currentUrl: URL;\n  currentParams: AgnosticDataRouteMatch[\"params\"];\n  nextUrl: URL;\n  nextParams: AgnosticDataRouteMatch[\"params\"];\n  formMethod?: Submission[\"formMethod\"];\n  formAction?: Submission[\"formAction\"];\n  formEncType?: Submission[\"formEncType\"];\n  text?: Submission[\"text\"];\n  formData?: Submission[\"formData\"];\n  json?: Submission[\"json\"];\n  unstable_actionStatus?: number;\n  actionResult?: any;\n  defaultShouldRevalidate: boolean;\n}\n\n/**\n * Route shouldRevalidate function signature.  This runs after any submission\n * (navigation or fetcher), so we flatten the navigation/fetcher submission\n * onto the arguments.  It shouldn't matter whether it came from a navigation\n * or a fetcher, what really matters is the URLs and the formData since loaders\n * have to re-run based on the data models that were potentially mutated.\n */\nexport interface ShouldRevalidateFunction {\n  (args: ShouldRevalidateFunctionArgs): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set `hasErrorBoundary`\n * from the framework-aware `errorElement` prop\n *\n * @deprecated Use `mapRouteProperties` instead\n */\nexport interface DetectErrorBoundaryFunction {\n  (route: AgnosticRouteObject): boolean;\n}\n\nexport interface DataStrategyMatch\n  extends AgnosticRouteMatch<string, AgnosticDataRouteObject> {\n  shouldLoad: boolean;\n  resolve: (\n    handlerOverride?: (\n      handler: (ctx?: unknown) => DataFunctionReturnValue\n    ) => Promise<HandlerResult>\n  ) => Promise<HandlerResult>;\n}\n\nexport interface DataStrategyFunctionArgs<Context = any>\n  extends DataFunctionArgs<Context> {\n  matches: DataStrategyMatch[];\n}\n\nexport interface DataStrategyFunction {\n  (args: DataStrategyFunctionArgs): Promise<HandlerResult[]>;\n}\n\n/**\n * Function provided by the framework-aware layers to set any framework-specific\n * properties from framework-agnostic properties\n */\nexport interface MapRoutePropertiesFunction {\n  (route: AgnosticRouteObject): {\n    hasErrorBoundary: boolean;\n  } & Record<string, any>;\n}\n\n/**\n * Keys we cannot change from within a lazy() function. We spread all other keys\n * onto the route. Either they're meaningful to the router, or they'll get\n * ignored.\n */\nexport type ImmutableRouteKey =\n  | \"lazy\"\n  | \"caseSensitive\"\n  | \"path\"\n  | \"id\"\n  | \"index\"\n  | \"children\";\n\nexport const immutableRouteKeys = new Set<ImmutableRouteKey>([\n  \"lazy\",\n  \"caseSensitive\",\n  \"path\",\n  \"id\",\n  \"index\",\n  \"children\",\n]);\n\ntype RequireOne<T, Key = keyof T> = Exclude<\n  {\n    [K in keyof T]: K extends Key ? Omit<T, K> & Required<Pick<T, K>> : never;\n  }[keyof T],\n  undefined\n>;\n\n/**\n * lazy() function to load a route definition, which can add non-matching\n * related properties to a route\n */\nexport interface LazyRouteFunction<R extends AgnosticRouteObject> {\n  (): Promise<RequireOne<Omit<R, ImmutableRouteKey>>>;\n}\n\n/**\n * Base RouteObject with common props shared by all types of routes\n */\ntype AgnosticBaseRouteObject = {\n  caseSensitive?: boolean;\n  path?: string;\n  id?: string;\n  loader?: LoaderFunction | boolean;\n  action?: ActionFunction | boolean;\n  hasErrorBoundary?: boolean;\n  shouldRevalidate?: ShouldRevalidateFunction;\n  handle?: any;\n  lazy?: LazyRouteFunction<AgnosticBaseRouteObject>;\n};\n\n/**\n * Index routes must not have children\n */\nexport type AgnosticIndexRouteObject = AgnosticBaseRouteObject & {\n  children?: undefined;\n  index: true;\n};\n\n/**\n * Non-index routes may have children, but cannot have index\n */\nexport type AgnosticNonIndexRouteObject = AgnosticBaseRouteObject & {\n  children?: AgnosticRouteObject[];\n  index?: false;\n};\n\n/**\n * A route object represents a logical route, with (optionally) its child\n * routes organized in a tree-like structure.\n */\nexport type AgnosticRouteObject =\n  | AgnosticIndexRouteObject\n  | AgnosticNonIndexRouteObject;\n\nexport type AgnosticDataIndexRouteObject = AgnosticIndexRouteObject & {\n  id: string;\n};\n\nexport type AgnosticDataNonIndexRouteObject = AgnosticNonIndexRouteObject & {\n  children?: AgnosticDataRouteObject[];\n  id: string;\n};\n\n/**\n * A data route object, which is just a RouteObject with a required unique ID\n */\nexport type AgnosticDataRouteObject =\n  | AgnosticDataIndexRouteObject\n  | AgnosticDataNonIndexRouteObject;\n\nexport type RouteManifest = Record<string, AgnosticDataRouteObject | undefined>;\n\n// Recursive helper for finding path parameters in the absence of wildcards\ntype _PathParam<Path extends string> =\n  // split path into individual path segments\n  Path extends `${infer L}/${infer R}`\n    ? _PathParam<L> | _PathParam<R>\n    : // find params after `:`\n    Path extends `:${infer Param}`\n    ? Param extends `${infer Optional}?`\n      ? Optional\n      : Param\n    : // otherwise, there aren't any params present\n      never;\n\n/**\n * Examples:\n * \"/a/b/*\" -> \"*\"\n * \":a\" -> \"a\"\n * \"/a/:b\" -> \"b\"\n * \"/a/blahblahblah:b\" -> \"b\"\n * \"/:a/:b\" -> \"a\" | \"b\"\n * \"/:a/b/:c/*\" -> \"a\" | \"c\" | \"*\"\n */\nexport type PathParam<Path extends string> =\n  // check if path is just a wildcard\n  Path extends \"*\" | \"/*\"\n    ? \"*\"\n    : // look for wildcard at the end of the path\n    Path extends `${infer Rest}/*`\n    ? \"*\" | _PathParam<Rest>\n    : // look for params in the absence of wildcards\n      _PathParam<Path>;\n\n// Attempt to parse the given string segment. If it fails, then just return the\n// plain string type as a default fallback. Otherwise, return the union of the\n// parsed string literals that were referenced as dynamic segments in the route.\nexport type ParamParseKey<Segment extends string> =\n  // if you could not find path params, fallback to `string`\n  [PathParam<Segment>] extends [never] ? string : PathParam<Segment>;\n\n/**\n * The parameters that were parsed from the URL path.\n */\nexport type Params<Key extends string = string> = {\n  readonly [key in Key]: string | undefined;\n};\n\n/**\n * A RouteMatch contains info about how a route matched a URL.\n */\nexport interface AgnosticRouteMatch<\n  ParamKey extends string = string,\n  RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n  /**\n   * The names and values of dynamic parameters in the URL.\n   */\n  params: Params<ParamKey>;\n  /**\n   * The portion of the URL pathname that was matched.\n   */\n  pathname: string;\n  /**\n   * The portion of the URL pathname that was matched before child routes.\n   */\n  pathnameBase: string;\n  /**\n   * The route object that was used to match.\n   */\n  route: RouteObjectType;\n}\n\nexport interface AgnosticDataRouteMatch\n  extends AgnosticRouteMatch<string, AgnosticDataRouteObject> {}\n\nfunction isIndexRoute(\n  route: AgnosticRouteObject\n): route is AgnosticIndexRouteObject {\n  return route.index === true;\n}\n\n// Walk the route tree generating unique IDs where necessary, so we are working\n// solely with AgnosticDataRouteObject's within the Router\nexport function convertRoutesToDataRoutes(\n  routes: AgnosticRouteObject[],\n  mapRouteProperties: MapRoutePropertiesFunction,\n  parentPath: number[] = [],\n  manifest: RouteManifest = {}\n): AgnosticDataRouteObject[] {\n  return routes.map((route, index) => {\n    let treePath = [...parentPath, index];\n    let id = typeof route.id === \"string\" ? route.id : treePath.join(\"-\");\n    invariant(\n      route.index !== true || !route.children,\n      `Cannot specify children on an index route`\n    );\n    invariant(\n      !manifest[id],\n      `Found a route id collision on id \"${id}\".  Route ` +\n        \"id's must be globally unique within Data Router usages\"\n    );\n\n    if (isIndexRoute(route)) {\n      let indexRoute: AgnosticDataIndexRouteObject = {\n        ...route,\n        ...mapRouteProperties(route),\n        id,\n      };\n      manifest[id] = indexRoute;\n      return indexRoute;\n    } else {\n      let pathOrLayoutRoute: AgnosticDataNonIndexRouteObject = {\n        ...route,\n        ...mapRouteProperties(route),\n        id,\n        children: undefined,\n      };\n      manifest[id] = pathOrLayoutRoute;\n\n      if (route.children) {\n        pathOrLayoutRoute.children = convertRoutesToDataRoutes(\n          route.children,\n          mapRouteProperties,\n          treePath,\n          manifest\n        );\n      }\n\n      return pathOrLayoutRoute;\n    }\n  });\n}\n\n/**\n * Matches the given routes to a location and returns the match data.\n *\n * @see https://reactrouter.com/utils/match-routes\n */\nexport function matchRoutes<\n  RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n  routes: RouteObjectType[],\n  locationArg: Partial<Location> | string,\n  basename = \"/\"\n): AgnosticRouteMatch<string, RouteObjectType>[] | null {\n  let location =\n    typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n  let pathname = stripBasename(location.pathname || \"/\", basename);\n\n  if (pathname == null) {\n    return null;\n  }\n\n  let branches = flattenRoutes(routes);\n  rankRouteBranches(branches);\n\n  let matches = null;\n  for (let i = 0; matches == null && i < branches.length; ++i) {\n    // Incoming pathnames are generally encoded from either window.location\n    // or from router.navigate, but we want to match against the unencoded\n    // paths in the route definitions.  Memory router locations won't be\n    // encoded here but there also shouldn't be anything to decode so this\n    // should be a safe operation.  This avoids needing matchRoutes to be\n    // history-aware.\n    let decoded = decodePath(pathname);\n    matches = matchRouteBranch<string, RouteObjectType>(branches[i], decoded);\n  }\n\n  return matches;\n}\n\nexport interface UIMatch<Data = unknown, Handle = unknown> {\n  id: string;\n  pathname: string;\n  params: AgnosticRouteMatch[\"params\"];\n  data: Data;\n  handle: Handle;\n}\n\nexport function convertRouteMatchToUiMatch(\n  match: AgnosticDataRouteMatch,\n  loaderData: RouteData\n): UIMatch {\n  let { route, pathname, params } = match;\n  return {\n    id: route.id,\n    pathname,\n    params,\n    data: loaderData[route.id],\n    handle: route.handle,\n  };\n}\n\ninterface RouteMeta<\n  RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n  relativePath: string;\n  caseSensitive: boolean;\n  childrenIndex: number;\n  route: RouteObjectType;\n}\n\ninterface RouteBranch<\n  RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n  path: string;\n  score: number;\n  routesMeta: RouteMeta<RouteObjectType>[];\n}\n\nfunction flattenRoutes<\n  RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n  routes: RouteObjectType[],\n  branches: RouteBranch<RouteObjectType>[] = [],\n  parentsMeta: RouteMeta<RouteObjectType>[] = [],\n  parentPath = \"\"\n): RouteBranch<RouteObjectType>[] {\n  let flattenRoute = (\n    route: RouteObjectType,\n    index: number,\n    relativePath?: string\n  ) => {\n    let meta: RouteMeta<RouteObjectType> = {\n      relativePath:\n        relativePath === undefined ? route.path || \"\" : relativePath,\n      caseSensitive: route.caseSensitive === true,\n      childrenIndex: index,\n      route,\n    };\n\n    if (meta.relativePath.startsWith(\"/\")) {\n      invariant(\n        meta.relativePath.startsWith(parentPath),\n        `Absolute route path \"${meta.relativePath}\" nested under path ` +\n          `\"${parentPath}\" is not valid. An absolute child route path ` +\n          `must start with the combined path of all its parent routes.`\n      );\n\n      meta.relativePath = meta.relativePath.slice(parentPath.length);\n    }\n\n    let path = joinPaths([parentPath, meta.relativePath]);\n    let routesMeta = parentsMeta.concat(meta);\n\n    // Add the children before adding this route to the array, so we traverse the\n    // route tree depth-first and child routes appear before their parents in\n    // the \"flattened\" version.\n    if (route.children && route.children.length > 0) {\n      invariant(\n        // Our types know better, but runtime JS may not!\n        // @ts-expect-error\n        route.index !== true,\n        `Index routes must not have child routes. Please remove ` +\n          `all child routes from route path \"${path}\".`\n      );\n\n      flattenRoutes(route.children, branches, routesMeta, path);\n    }\n\n    // Routes without a path shouldn't ever match by themselves unless they are\n    // index routes, so don't add them to the list of possible branches.\n    if (route.path == null && !route.index) {\n      return;\n    }\n\n    branches.push({\n      path,\n      score: computeScore(path, route.index),\n      routesMeta,\n    });\n  };\n  routes.forEach((route, index) => {\n    // coarse-grain check for optional params\n    if (route.path === \"\" || !route.path?.includes(\"?\")) {\n      flattenRoute(route, index);\n    } else {\n      for (let exploded of explodeOptionalSegments(route.path)) {\n        flattenRoute(route, index, exploded);\n      }\n    }\n  });\n\n  return branches;\n}\n\n/**\n * Computes all combinations of optional path segments for a given path,\n * excluding combinations that are ambiguous and of lower priority.\n *\n * For example, `/one/:two?/three/:four?/:five?` explodes to:\n * - `/one/three`\n * - `/one/:two/three`\n * - `/one/three/:four`\n * - `/one/three/:five`\n * - `/one/:two/three/:four`\n * - `/one/:two/three/:five`\n * - `/one/three/:four/:five`\n * - `/one/:two/three/:four/:five`\n */\nfunction explodeOptionalSegments(path: string): string[] {\n  let segments = path.split(\"/\");\n  if (segments.length === 0) return [];\n\n  let [first, ...rest] = segments;\n\n  // Optional path segments are denoted by a trailing `?`\n  let isOptional = first.endsWith(\"?\");\n  // Compute the corresponding required segment: `foo?` -> `foo`\n  let required = first.replace(/\\?$/, \"\");\n\n  if (rest.length === 0) {\n    // Intepret empty string as omitting an optional segment\n    // `[\"one\", \"\", \"three\"]` corresponds to omitting `:two` from `/one/:two?/three` -> `/one/three`\n    return isOptional ? [required, \"\"] : [required];\n  }\n\n  let restExploded = explodeOptionalSegments(rest.join(\"/\"));\n\n  let result: string[] = [];\n\n  // All child paths with the prefix.  Do this for all children before the\n  // optional version for all children, so we get consistent ordering where the\n  // parent optional aspect is preferred as required.  Otherwise, we can get\n  // child sections interspersed where deeper optional segments are higher than\n  // parent optional segments, where for example, /:two would explode _earlier_\n  // then /:one.  By always including the parent as required _for all children_\n  // first, we avoid this issue\n  result.push(\n    ...restExploded.map((subpath) =>\n      subpath === \"\" ? required : [required, subpath].join(\"/\")\n    )\n  );\n\n  // Then, if this is an optional value, add all child versions without\n  if (isOptional) {\n    result.push(...restExploded);\n  }\n\n  // for absolute paths, ensure `/` instead of empty segment\n  return result.map((exploded) =>\n    path.startsWith(\"/\") && exploded === \"\" ? \"/\" : exploded\n  );\n}\n\nfunction rankRouteBranches(branches: RouteBranch[]): void {\n  branches.sort((a, b) =>\n    a.score !== b.score\n      ? b.score - a.score // Higher score first\n      : compareIndexes(\n          a.routesMeta.map((meta) => meta.childrenIndex),\n          b.routesMeta.map((meta) => meta.childrenIndex)\n        )\n  );\n}\n\nconst paramRe = /^:[\\w-]+$/;\nconst dynamicSegmentValue = 3;\nconst indexRouteValue = 2;\nconst emptySegmentValue = 1;\nconst staticSegmentValue = 10;\nconst splatPenalty = -2;\nconst isSplat = (s: string) => s === \"*\";\n\nfunction computeScore(path: string, index: boolean | undefined): number {\n  let segments = path.split(\"/\");\n  let initialScore = segments.length;\n  if (segments.some(isSplat)) {\n    initialScore += splatPenalty;\n  }\n\n  if (index) {\n    initialScore += indexRouteValue;\n  }\n\n  return segments\n    .filter((s) => !isSplat(s))\n    .reduce(\n      (score, segment) =>\n        score +\n        (paramRe.test(segment)\n          ? dynamicSegmentValue\n          : segment === \"\"\n          ? emptySegmentValue\n          : staticSegmentValue),\n      initialScore\n    );\n}\n\nfunction compareIndexes(a: number[], b: number[]): number {\n  let siblings =\n    a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\n\n  return siblings\n    ? // If two routes are siblings, we should try to match the earlier sibling\n      // first. This allows people to have fine-grained control over the matching\n      // behavior by simply putting routes with identical paths in the order they\n      // want them tried.\n      a[a.length - 1] - b[b.length - 1]\n    : // Otherwise, it doesn't really make sense to rank non-siblings by index,\n      // so they sort equally.\n      0;\n}\n\nfunction matchRouteBranch<\n  ParamKey extends string = string,\n  RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n  branch: RouteBranch<RouteObjectType>,\n  pathname: string\n): AgnosticRouteMatch<ParamKey, RouteObjectType>[] | null {\n  let { routesMeta } = branch;\n\n  let matchedParams = {};\n  let matchedPathname = \"/\";\n  let matches: AgnosticRouteMatch<ParamKey, RouteObjectType>[] = [];\n  for (let i = 0; i < routesMeta.length; ++i) {\n    let meta = routesMeta[i];\n    let end = i === routesMeta.length - 1;\n    let remainingPathname =\n      matchedPathname === \"/\"\n        ? pathname\n        : pathname.slice(matchedPathname.length) || \"/\";\n    let match = matchPath(\n      { path: meta.relativePath, caseSensitive: meta.caseSensitive, end },\n      remainingPathname\n    );\n\n    if (!match) return null;\n\n    Object.assign(matchedParams, match.params);\n\n    let route = meta.route;\n\n    matches.push({\n      // TODO: Can this as be avoided?\n      params: matchedParams as Params<ParamKey>,\n      pathname: joinPaths([matchedPathname, match.pathname]),\n      pathnameBase: normalizePathname(\n        joinPaths([matchedPathname, match.pathnameBase])\n      ),\n      route,\n    });\n\n    if (match.pathnameBase !== \"/\") {\n      matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n    }\n  }\n\n  return matches;\n}\n\n/**\n * Returns a path with params interpolated.\n *\n * @see https://reactrouter.com/utils/generate-path\n */\nexport function generatePath<Path extends string>(\n  originalPath: Path,\n  params: {\n    [key in PathParam<Path>]: string | null;\n  } = {} as any\n): string {\n  let path: string = originalPath;\n  if (path.endsWith(\"*\") && path !== \"*\" && !path.endsWith(\"/*\")) {\n    warning(\n      false,\n      `Route path \"${path}\" will be treated as if it were ` +\n        `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n        `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n        `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n    );\n    path = path.replace(/\\*$/, \"/*\") as Path;\n  }\n\n  // ensure `/` is added at the beginning if the path is absolute\n  const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n\n  const stringify = (p: any) =>\n    p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n\n  const segments = path\n    .split(/\\/+/)\n    .map((segment, index, array) => {\n      const isLastSegment = index === array.length - 1;\n\n      // only apply the splat if it's the last segment\n      if (isLastSegment && segment === \"*\") {\n        const star = \"*\" as PathParam<Path>;\n        // Apply the splat\n        return stringify(params[star]);\n      }\n\n      const keyMatch = segment.match(/^:([\\w-]+)(\\??)$/);\n      if (keyMatch) {\n        const [, key, optional] = keyMatch;\n        let param = params[key as PathParam<Path>];\n        invariant(optional === \"?\" || param != null, `Missing \":${key}\" param`);\n        return stringify(param);\n      }\n\n      // Remove any optional markers from optional static segments\n      return segment.replace(/\\?$/g, \"\");\n    })\n    // Remove empty segments\n    .filter((segment) => !!segment);\n\n  return prefix + segments.join(\"/\");\n}\n\n/**\n * A PathPattern is used to match on some portion of a URL pathname.\n */\nexport interface PathPattern<Path extends string = string> {\n  /**\n   * A string to match against a URL pathname. May contain `:id`-style segments\n   * to indicate placeholders for dynamic parameters. May also end with `/*` to\n   * indicate matching the rest of the URL pathname.\n   */\n  path: Path;\n  /**\n   * Should be `true` if the static portions of the `path` should be matched in\n   * the same case.\n   */\n  caseSensitive?: boolean;\n  /**\n   * Should be `true` if this pattern should match the entire URL pathname.\n   */\n  end?: boolean;\n}\n\n/**\n * A PathMatch contains info about how a PathPattern matched on a URL pathname.\n */\nexport interface PathMatch<ParamKey extends string = string> {\n  /**\n   * The names and values of dynamic parameters in the URL.\n   */\n  params: Params<ParamKey>;\n  /**\n   * The portion of the URL pathname that was matched.\n   */\n  pathname: string;\n  /**\n   * The portion of the URL pathname that was matched before child routes.\n   */\n  pathnameBase: string;\n  /**\n   * The pattern that was used to match.\n   */\n  pattern: PathPattern;\n}\n\ntype Mutable<T> = {\n  -readonly [P in keyof T]: T[P];\n};\n\n/**\n * Performs pattern matching on a URL pathname and returns information about\n * the match.\n *\n * @see https://reactrouter.com/utils/match-path\n */\nexport function matchPath<\n  ParamKey extends ParamParseKey<Path>,\n  Path extends string\n>(\n  pattern: PathPattern<Path> | Path,\n  pathname: string\n): PathMatch<ParamKey> | null {\n  if (typeof pattern === \"string\") {\n    pattern = { path: pattern, caseSensitive: false, end: true };\n  }\n\n  let [matcher, compiledParams] = compilePath(\n    pattern.path,\n    pattern.caseSensitive,\n    pattern.end\n  );\n\n  let match = pathname.match(matcher);\n  if (!match) return null;\n\n  let matchedPathname = match[0];\n  let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n  let captureGroups = match.slice(1);\n  let params: Params = compiledParams.reduce<Mutable<Params>>(\n    (memo, { paramName, isOptional }, index) => {\n      // We need to compute the pathnameBase here using the raw splat value\n      // instead of using params[\"*\"] later because it will be decoded then\n      if (paramName === \"*\") {\n        let splatValue = captureGroups[index] || \"\";\n        pathnameBase = matchedPathname\n          .slice(0, matchedPathname.length - splatValue.length)\n          .replace(/(.)\\/+$/, \"$1\");\n      }\n\n      const value = captureGroups[index];\n      if (isOptional && !value) {\n        memo[paramName] = undefined;\n      } else {\n        memo[paramName] = (value || \"\").replace(/%2F/g, \"/\");\n      }\n      return memo;\n    },\n    {}\n  );\n\n  return {\n    params,\n    pathname: matchedPathname,\n    pathnameBase,\n    pattern,\n  };\n}\n\ntype CompiledPathParam = { paramName: string; isOptional?: boolean };\n\nfunction compilePath(\n  path: string,\n  caseSensitive = false,\n  end = true\n): [RegExp, CompiledPathParam[]] {\n  warning(\n    path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"),\n    `Route path \"${path}\" will be treated as if it were ` +\n      `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n      `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n      `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n  );\n\n  let params: CompiledPathParam[] = [];\n  let regexpSource =\n    \"^\" +\n    path\n      .replace(/\\/*\\*?$/, \"\") // Ignore trailing / and /*, we'll handle it below\n      .replace(/^\\/*/, \"/\") // Make sure it has a leading /\n      .replace(/[\\\\.*+^${}|()[\\]]/g, \"\\\\$&\") // Escape special regex chars\n      .replace(\n        /\\/:([\\w-]+)(\\?)?/g,\n        (_: string, paramName: string, isOptional) => {\n          params.push({ paramName, isOptional: isOptional != null });\n          return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n        }\n      );\n\n  if (path.endsWith(\"*\")) {\n    params.push({ paramName: \"*\" });\n    regexpSource +=\n      path === \"*\" || path === \"/*\"\n        ? \"(.*)$\" // Already matched the initial /, just match the rest\n        : \"(?:\\\\/(.+)|\\\\/*)$\"; // Don't include the / in params[\"*\"]\n  } else if (end) {\n    // When matching to the end, ignore trailing slashes\n    regexpSource += \"\\\\/*$\";\n  } else if (path !== \"\" && path !== \"/\") {\n    // If our path is non-empty and contains anything beyond an initial slash,\n    // then we have _some_ form of path in our regex, so we should expect to\n    // match only if we find the end of this path segment.  Look for an optional\n    // non-captured trailing slash (to match a portion of the URL) or the end\n    // of the path (if we've matched to the end).  We used to do this with a\n    // word boundary but that gives false positives on routes like\n    // /user-preferences since `-` counts as a word boundary.\n    regexpSource += \"(?:(?=\\\\/|$))\";\n  } else {\n    // Nothing to match for \"\" or \"/\"\n  }\n\n  let matcher = new RegExp(regexpSource, caseSensitive ? undefined : \"i\");\n\n  return [matcher, params];\n}\n\nfunction decodePath(value: string) {\n  try {\n    return value\n      .split(\"/\")\n      .map((v) => decodeURIComponent(v).replace(/\\//g, \"%2F\"))\n      .join(\"/\");\n  } catch (error) {\n    warning(\n      false,\n      `The URL path \"${value}\" could not be decoded because it is is a ` +\n        `malformed URL segment. This is probably due to a bad percent ` +\n        `encoding (${error}).`\n    );\n\n    return value;\n  }\n}\n\n/**\n * @private\n */\nexport function stripBasename(\n  pathname: string,\n  basename: string\n): string | null {\n  if (basename === \"/\") return pathname;\n\n  if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n    return null;\n  }\n\n  // We want to leave trailing slash behavior in the user's control, so if they\n  // specify a basename with a trailing slash, we should support it\n  let startIndex = basename.endsWith(\"/\")\n    ? basename.length - 1\n    : basename.length;\n  let nextChar = pathname.charAt(startIndex);\n  if (nextChar && nextChar !== \"/\") {\n    // pathname does not start with basename/\n    return null;\n  }\n\n  return pathname.slice(startIndex) || \"/\";\n}\n\n/**\n * Returns a resolved path object relative to the given pathname.\n *\n * @see https://reactrouter.com/utils/resolve-path\n */\nexport function resolvePath(to: To, fromPathname = \"/\"): Path {\n  let {\n    pathname: toPathname,\n    search = \"\",\n    hash = \"\",\n  } = typeof to === \"string\" ? parsePath(to) : to;\n\n  let pathname = toPathname\n    ? toPathname.startsWith(\"/\")\n      ? toPathname\n      : resolvePathname(toPathname, fromPathname)\n    : fromPathname;\n\n  return {\n    pathname,\n    search: normalizeSearch(search),\n    hash: normalizeHash(hash),\n  };\n}\n\nfunction resolvePathname(relativePath: string, fromPathname: string): string {\n  let segments = fromPathname.replace(/\\/+$/, \"\").split(\"/\");\n  let relativeSegments = relativePath.split(\"/\");\n\n  relativeSegments.forEach((segment) => {\n    if (segment === \"..\") {\n      // Keep the root \"\" segment so the pathname starts at /\n      if (segments.length > 1) segments.pop();\n    } else if (segment !== \".\") {\n      segments.push(segment);\n    }\n  });\n\n  return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\n\nfunction getInvalidPathError(\n  char: string,\n  field: string,\n  dest: string,\n  path: Partial<Path>\n) {\n  return (\n    `Cannot include a '${char}' character in a manually specified ` +\n    `\\`to.${field}\\` field [${JSON.stringify(\n      path\n    )}].  Please separate it out to the ` +\n    `\\`to.${dest}\\` field. Alternatively you may provide the full path as ` +\n    `a string in <Link to=\"...\"> and the router will parse it for you.`\n  );\n}\n\n/**\n * @private\n *\n * When processing relative navigation we want to ignore ancestor routes that\n * do not contribute to the path, such that index/pathless layout routes don't\n * interfere.\n *\n * For example, when moving a route element into an index route and/or a\n * pathless layout route, relative link behavior contained within should stay\n * the same.  Both of the following examples should link back to the root:\n *\n *   <Route path=\"/\">\n *     <Route path=\"accounts\" element={<Link to=\"..\"}>\n *   </Route>\n *\n *   <Route path=\"/\">\n *     <Route path=\"accounts\">\n *       <Route element={<AccountsLayout />}>       // <-- Does not contribute\n *         <Route index element={<Link to=\"..\"} />  // <-- Does not contribute\n *       </Route\n *     </Route>\n *   </Route>\n */\nexport function getPathContributingMatches<\n  T extends AgnosticRouteMatch = AgnosticRouteMatch\n>(matches: T[]) {\n  return matches.filter(\n    (match, index) =>\n      index === 0 || (match.route.path && match.route.path.length > 0)\n  );\n}\n\n// Return the array of pathnames for the current route matches - used to\n// generate the routePathnames input for resolveTo()\nexport function getResolveToMatches<\n  T extends AgnosticRouteMatch = AgnosticRouteMatch\n>(matches: T[], v7_relativeSplatPath: boolean) {\n  let pathMatches = getPathContributingMatches(matches);\n\n  // When v7_relativeSplatPath is enabled, use the full pathname for the leaf\n  // match so we include splat values for \".\" links.  See:\n  // https://github.com/remix-run/react-router/issues/11052#issuecomment-1836589329\n  if (v7_relativeSplatPath) {\n    return pathMatches.map((match, idx) =>\n      idx === matches.length - 1 ? match.pathname : match.pathnameBase\n    );\n  }\n\n  return pathMatches.map((match) => match.pathnameBase);\n}\n\n/**\n * @private\n */\nexport function resolveTo(\n  toArg: To,\n  routePathnames: string[],\n  locationPathname: string,\n  isPathRelative = false\n): Path {\n  let to: Partial<Path>;\n  if (typeof toArg === \"string\") {\n    to = parsePath(toArg);\n  } else {\n    to = { ...toArg };\n\n    invariant(\n      !to.pathname || !to.pathname.includes(\"?\"),\n      getInvalidPathError(\"?\", \"pathname\", \"search\", to)\n    );\n    invariant(\n      !to.pathname || !to.pathname.includes(\"#\"),\n      getInvalidPathError(\"#\", \"pathname\", \"hash\", to)\n    );\n    invariant(\n      !to.search || !to.search.includes(\"#\"),\n      getInvalidPathError(\"#\", \"search\", \"hash\", to)\n    );\n  }\n\n  let isEmptyPath = toArg === \"\" || to.pathname === \"\";\n  let toPathname = isEmptyPath ? \"/\" : to.pathname;\n\n  let from: string;\n\n  // Routing is relative to the current pathname if explicitly requested.\n  //\n  // If a pathname is explicitly provided in `to`, it should be relative to the\n  // route context. This is explained in `Note on `<Link to>` values` in our\n  // migration guide from v5 as a means of disambiguation between `to` values\n  // that begin with `/` and those that do not. However, this is problematic for\n  // `to` values that do not provide a pathname. `to` can simply be a search or\n  // hash string, in which case we should assume that the navigation is relative\n  // to the current location's pathname and *not* the route pathname.\n  if (toPathname == null) {\n    from = locationPathname;\n  } else {\n    let routePathnameIndex = routePathnames.length - 1;\n\n    // With relative=\"route\" (the default), each leading .. segment means\n    // \"go up one route\" instead of \"go up one URL segment\".  This is a key\n    // difference from how <a href> works and a major reason we call this a\n    // \"to\" value instead of a \"href\".\n    if (!isPathRelative && toPathname.startsWith(\"..\")) {\n      let toSegments = toPathname.split(\"/\");\n\n      while (toSegments[0] === \"..\") {\n        toSegments.shift();\n        routePathnameIndex -= 1;\n      }\n\n      to.pathname = toSegments.join(\"/\");\n    }\n\n    from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n  }\n\n  let path = resolvePath(to, from);\n\n  // Ensure the pathname has a trailing slash if the original \"to\" had one\n  let hasExplicitTrailingSlash =\n    toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\");\n  // Or if this was a link to the current path which has a trailing slash\n  let hasCurrentTrailingSlash =\n    (isEmptyPath || toPathname === \".\") && locationPathname.endsWith(\"/\");\n  if (\n    !path.pathname.endsWith(\"/\") &&\n    (hasExplicitTrailingSlash || hasCurrentTrailingSlash)\n  ) {\n    path.pathname += \"/\";\n  }\n\n  return path;\n}\n\n/**\n * @private\n */\nexport function getToPathname(to: To): string | undefined {\n  // Empty strings should be treated the same as / paths\n  return to === \"\" || (to as Path).pathname === \"\"\n    ? \"/\"\n    : typeof to === \"string\"\n    ? parsePath(to).pathname\n    : to.pathname;\n}\n\n/**\n * @private\n */\nexport const joinPaths = (paths: string[]): string =>\n  paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\n\n/**\n * @private\n */\nexport const normalizePathname = (pathname: string): string =>\n  pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\n\n/**\n * @private\n */\nexport const normalizeSearch = (search: string): string =>\n  !search || search === \"?\"\n    ? \"\"\n    : search.startsWith(\"?\")\n    ? search\n    : \"?\" + search;\n\n/**\n * @private\n */\nexport const normalizeHash = (hash: string): string =>\n  !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\n\nexport type JsonFunction = <Data>(\n  data: Data,\n  init?: number | ResponseInit\n) => Response;\n\n/**\n * This is a shortcut for creating `application/json` responses. Converts `data`\n * to JSON and sets the `Content-Type` header.\n */\nexport const json: JsonFunction = (data, init = {}) => {\n  let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n  let headers = new Headers(responseInit.headers);\n  if (!headers.has(\"Content-Type\")) {\n    headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n  }\n\n  return new Response(JSON.stringify(data), {\n    ...responseInit,\n    headers,\n  });\n};\n\nexport interface TrackedPromise extends Promise<any> {\n  _tracked?: boolean;\n  _data?: any;\n  _error?: any;\n}\n\nexport class AbortedDeferredError extends Error {}\n\nexport class DeferredData {\n  private pendingKeysSet: Set<string> = new Set<string>();\n  private controller: AbortController;\n  private abortPromise: Promise<void>;\n  private unlistenAbortSignal: () => void;\n  private subscribers: Set<(aborted: boolean, settledKey?: string) => void> =\n    new Set();\n  data: Record<string, unknown>;\n  init?: ResponseInit;\n  deferredKeys: string[] = [];\n\n  constructor(data: Record<string, unknown>, responseInit?: ResponseInit) {\n    invariant(\n      data && typeof data === \"object\" && !Array.isArray(data),\n      \"defer() only accepts plain objects\"\n    );\n\n    // Set up an AbortController + Promise we can race against to exit early\n    // cancellation\n    let reject: (e: AbortedDeferredError) => void;\n    this.abortPromise = new Promise((_, r) => (reject = r));\n    this.controller = new AbortController();\n    let onAbort = () =>\n      reject(new AbortedDeferredError(\"Deferred data aborted\"));\n    this.unlistenAbortSignal = () =>\n      this.controller.signal.removeEventListener(\"abort\", onAbort);\n    this.controller.signal.addEventListener(\"abort\", onAbort);\n\n    this.data = Object.entries(data).reduce(\n      (acc, [key, value]) =>\n        Object.assign(acc, {\n          [key]: this.trackPromise(key, value),\n        }),\n      {}\n    );\n\n    if (this.done) {\n      // All incoming values were resolved\n      this.unlistenAbortSignal();\n    }\n\n    this.init = responseInit;\n  }\n\n  private trackPromise(\n    key: string,\n    value: Promise<unknown> | unknown\n  ): TrackedPromise | unknown {\n    if (!(value instanceof Promise)) {\n      return value;\n    }\n\n    this.deferredKeys.push(key);\n    this.pendingKeysSet.add(key);\n\n    // We store a little wrapper promise that will be extended with\n    // _data/_error props upon resolve/reject\n    let promise: TrackedPromise = Promise.race([value, this.abortPromise]).then(\n      (data) => this.onSettle(promise, key, undefined, data as unknown),\n      (error) => this.onSettle(promise, key, error as unknown)\n    );\n\n    // Register rejection listeners to avoid uncaught promise rejections on\n    // errors or aborted deferred values\n    promise.catch(() => {});\n\n    Object.defineProperty(promise, \"_tracked\", { get: () => true });\n    return promise;\n  }\n\n  private onSettle(\n    promise: TrackedPromise,\n    key: string,\n    error: unknown,\n    data?: unknown\n  ): unknown {\n    if (\n      this.controller.signal.aborted &&\n      error instanceof AbortedDeferredError\n    ) {\n      this.unlistenAbortSignal();\n      Object.defineProperty(promise, \"_error\", { get: () => error });\n      return Promise.reject(error);\n    }\n\n    this.pendingKeysSet.delete(key);\n\n    if (this.done) {\n      // Nothing left to abort!\n      this.unlistenAbortSignal();\n    }\n\n    // If the promise was resolved/rejected with undefined, we'll throw an error as you\n    // should always resolve with a value or null\n    if (error === undefined && data === undefined) {\n      let undefinedError = new Error(\n        `Deferred data for key \"${key}\" resolved/rejected with \\`undefined\\`, ` +\n          `you must resolve/reject with a value or \\`null\\`.`\n      );\n      Object.defineProperty(promise, \"_error\", { get: () => undefinedError });\n      this.emit(false, key);\n      return Promise.reject(undefinedError);\n    }\n\n    if (data === undefined) {\n      Object.defineProperty(promise, \"_error\", { get: () => error });\n      this.emit(false, key);\n      return Promise.reject(error);\n    }\n\n    Object.defineProperty(promise, \"_data\", { get: () => data });\n    this.emit(false, key);\n    return data;\n  }\n\n  private emit(aborted: boolean, settledKey?: string) {\n    this.subscribers.forEach((subscriber) => subscriber(aborted, settledKey));\n  }\n\n  subscribe(fn: (aborted: boolean, settledKey?: string) => void) {\n    this.subscribers.add(fn);\n    return () => this.subscribers.delete(fn);\n  }\n\n  cancel() {\n    this.controller.abort();\n    this.pendingKeysSet.forEach((v, k) => this.pendingKeysSet.delete(k));\n    this.emit(true);\n  }\n\n  async resolveData(signal: AbortSignal) {\n    let aborted = false;\n    if (!this.done) {\n      let onAbort = () => this.cancel();\n      signal.addEventListener(\"abort\", onAbort);\n      aborted = await new Promise((resolve) => {\n        this.subscribe((aborted) => {\n          signal.removeEventListener(\"abort\", onAbort);\n          if (aborted || this.done) {\n            resolve(aborted);\n          }\n        });\n      });\n    }\n    return aborted;\n  }\n\n  get done() {\n    return this.pendingKeysSet.size === 0;\n  }\n\n  get unwrappedData() {\n    invariant(\n      this.data !== null && this.done,\n      \"Can only unwrap data on initialized and settled deferreds\"\n    );\n\n    return Object.entries(this.data).reduce(\n      (acc, [key, value]) =>\n        Object.assign(acc, {\n          [key]: unwrapTrackedPromise(value),\n        }),\n      {}\n    );\n  }\n\n  get pendingKeys() {\n    return Array.from(this.pendingKeysSet);\n  }\n}\n\nfunction isTrackedPromise(value: any): value is TrackedPromise {\n  return (\n    value instanceof Promise && (value as TrackedPromise)._tracked === true\n  );\n}\n\nfunction unwrapTrackedPromise(value: any) {\n  if (!isTrackedPromise(value)) {\n    return value;\n  }\n\n  if (value._error) {\n    throw value._error;\n  }\n  return value._data;\n}\n\nexport type DeferFunction = (\n  data: Record<string, unknown>,\n  init?: number | ResponseInit\n) => DeferredData;\n\nexport const defer: DeferFunction = (data, init = {}) => {\n  let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n  return new DeferredData(data, responseInit);\n};\n\nexport type RedirectFunction = (\n  url: string,\n  init?: number | ResponseInit\n) => Response;\n\n/**\n * A redirect response. Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirect: RedirectFunction = (url, init = 302) => {\n  let responseInit = init;\n  if (typeof responseInit === \"number\") {\n    responseInit = { status: responseInit };\n  } else if (typeof responseInit.status === \"undefined\") {\n    responseInit.status = 302;\n  }\n\n  let headers = new Headers(responseInit.headers);\n  headers.set(\"Location\", url);\n\n  return new Response(null, {\n    ...responseInit,\n    headers,\n  });\n};\n\n/**\n * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirectDocument: RedirectFunction = (url, init) => {\n  let response = redirect(url, init);\n  response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n  return response;\n};\n\nexport type ErrorResponse = {\n  status: number;\n  statusText: string;\n  data: any;\n};\n\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n *\n * We don't export the class for public use since it's an implementation\n * detail, but we export the interface above so folks can build their own\n * abstractions around instances via isRouteErrorResponse()\n */\nexport class ErrorResponseImpl implements ErrorResponse {\n  status: number;\n  statusText: string;\n  data: any;\n  private error?: Error;\n  private internal: boolean;\n\n  constructor(\n    status: number,\n    statusText: string | undefined,\n    data: any,\n    internal = false\n  ) {\n    this.status = status;\n    this.statusText = statusText || \"\";\n    this.internal = internal;\n    if (data instanceof Error) {\n      this.data = data.toString();\n      this.error = data;\n    } else {\n      this.data = data;\n    }\n  }\n}\n\n/**\n * Check if the given error is an ErrorResponse generated from a 4xx/5xx\n * Response thrown from an action/loader\n */\nexport function isRouteErrorResponse(error: any): error is ErrorResponse {\n  return (\n    error != null &&\n    typeof error.status === \"number\" &&\n    typeof error.statusText === \"string\" &&\n    typeof error.internal === \"boolean\" &&\n    \"data\" in error\n  );\n}\n","import type { History, Location, Path, To } from \"./history\";\nimport {\n  Action as HistoryAction,\n  createLocation,\n  createPath,\n  invariant,\n  parsePath,\n  warning,\n} from \"./history\";\nimport type {\n  AgnosticDataRouteMatch,\n  AgnosticDataRouteObject,\n  DataStrategyMatch,\n  AgnosticRouteObject,\n  DataResult,\n  DataStrategyFunction,\n  DataStrategyFunctionArgs,\n  DeferredData,\n  DeferredResult,\n  DetectErrorBoundaryFunction,\n  ErrorResult,\n  FormEncType,\n  FormMethod,\n  HTMLFormMethod,\n  HandlerResult,\n  ImmutableRouteKey,\n  MapRoutePropertiesFunction,\n  MutationFormMethod,\n  RedirectResult,\n  RouteData,\n  RouteManifest,\n  ShouldRevalidateFunctionArgs,\n  Submission,\n  SuccessResult,\n  UIMatch,\n  V7_FormMethod,\n  V7_MutationFormMethod,\n} from \"./utils\";\nimport {\n  ErrorResponseImpl,\n  ResultType,\n  convertRouteMatchToUiMatch,\n  convertRoutesToDataRoutes,\n  getPathContributingMatches,\n  getResolveToMatches,\n  immutableRouteKeys,\n  isRouteErrorResponse,\n  joinPaths,\n  matchRoutes,\n  resolveTo,\n  stripBasename,\n} from \"./utils\";\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A Router instance manages all navigation and data loading/mutations\n */\nexport interface Router {\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Return the basename for the router\n   */\n  get basename(): RouterInit[\"basename\"];\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Return the future config for the router\n   */\n  get future(): FutureConfig;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Return the current state of the router\n   */\n  get state(): RouterState;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Return the routes for this router instance\n   */\n  get routes(): AgnosticDataRouteObject[];\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Return the window associated with the router\n   */\n  get window(): RouterInit[\"window\"];\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Initialize the router, including adding history listeners and kicking off\n   * initial data fetches.  Returns a function to cleanup listeners and abort\n   * any in-progress loads\n   */\n  initialize(): Router;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Subscribe to router.state updates\n   *\n   * @param fn function to call with the new state\n   */\n  subscribe(fn: RouterSubscriber): () => void;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Enable scroll restoration behavior in the router\n   *\n   * @param savedScrollPositions Object that will manage positions, in case\n   *                             it's being restored from sessionStorage\n   * @param getScrollPosition    Function to get the active Y scroll position\n   * @param getKey               Function to get the key to use for restoration\n   */\n  enableScrollRestoration(\n    savedScrollPositions: Record<string, number>,\n    getScrollPosition: GetScrollPositionFunction,\n    getKey?: GetScrollRestorationKeyFunction\n  ): () => void;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Navigate forward/backward in the history stack\n   * @param to Delta to move in the history stack\n   */\n  navigate(to: number): Promise<void>;\n\n  /**\n   * Navigate to the given path\n   * @param to Path to navigate to\n   * @param opts Navigation options (method, submission, etc.)\n   */\n  navigate(to: To | null, opts?: RouterNavigateOptions): Promise<void>;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Trigger a fetcher load/submission\n   *\n   * @param key     Fetcher key\n   * @param routeId Route that owns the fetcher\n   * @param href    href to fetch\n   * @param opts    Fetcher options, (method, submission, etc.)\n   */\n  fetch(\n    key: string,\n    routeId: string,\n    href: string | null,\n    opts?: RouterFetchOptions\n  ): void;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Trigger a revalidation of all current route loaders and fetcher loads\n   */\n  revalidate(): void;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Utility function to create an href for the given location\n   * @param location\n   */\n  createHref(location: Location | URL): string;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Utility function to URL encode a destination path according to the internal\n   * history implementation\n   * @param to\n   */\n  encodeLocation(to: To): Path;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Get/create a fetcher for the given key\n   * @param key\n   */\n  getFetcher<TData = any>(key: string): Fetcher<TData>;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Delete the fetcher for a given key\n   * @param key\n   */\n  deleteFetcher(key: string): void;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Cleanup listeners and abort any in-progress loads\n   */\n  dispose(): void;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Get a navigation blocker\n   * @param key The identifier for the blocker\n   * @param fn The blocker function implementation\n   */\n  getBlocker(key: string, fn: BlockerFunction): Blocker;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Delete a navigation blocker\n   * @param key The identifier for the blocker\n   */\n  deleteBlocker(key: string): void;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * HMR needs to pass in-flight route updates to React Router\n   * TODO: Replace this with granular route update APIs (addRoute, updateRoute, deleteRoute)\n   */\n  _internalSetRoutes(routes: AgnosticRouteObject[]): void;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Internal fetch AbortControllers accessed by unit tests\n   */\n  _internalFetchControllers: Map<string, AbortController>;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Internal pending DeferredData instances accessed by unit tests\n   */\n  _internalActiveDeferreds: Map<string, DeferredData>;\n}\n\n/**\n * State maintained internally by the router.  During a navigation, all states\n * reflect the the \"old\" location unless otherwise noted.\n */\nexport interface RouterState {\n  /**\n   * The action of the most recent navigation\n   */\n  historyAction: HistoryAction;\n\n  /**\n   * The current location reflected by the router\n   */\n  location: Location;\n\n  /**\n   * The current set of route matches\n   */\n  matches: AgnosticDataRouteMatch[];\n\n  /**\n   * Tracks whether we've completed our initial data load\n   */\n  initialized: boolean;\n\n  /**\n   * Current scroll position we should start at for a new view\n   *  - number -> scroll position to restore to\n   *  - false -> do not restore scroll at all (used during submissions)\n   *  - null -> don't have a saved position, scroll to hash or top of page\n   */\n  restoreScrollPosition: number | false | null;\n\n  /**\n   * Indicate whether this navigation should skip resetting the scroll position\n   * if we are unable to restore the scroll position\n   */\n  preventScrollReset: boolean;\n\n  /**\n   * Tracks the state of the current navigation\n   */\n  navigation: Navigation;\n\n  /**\n   * Tracks any in-progress revalidations\n   */\n  revalidation: RevalidationState;\n\n  /**\n   * Data from the loaders for the current matches\n   */\n  loaderData: RouteData;\n\n  /**\n   * Data from the action for the current matches\n   */\n  actionData: RouteData | null;\n\n  /**\n   * Errors caught from loaders for the current matches\n   */\n  errors: RouteData | null;\n\n  /**\n   * Map of current fetchers\n   */\n  fetchers: Map<string, Fetcher>;\n\n  /**\n   * Map of current blockers\n   */\n  blockers: Map<string, Blocker>;\n}\n\n/**\n * Data that can be passed into hydrate a Router from SSR\n */\nexport type HydrationState = Partial<\n  Pick<RouterState, \"loaderData\" | \"actionData\" | \"errors\">\n>;\n\n/**\n * Future flags to toggle new feature behavior\n */\nexport interface FutureConfig {\n  v7_fetcherPersist: boolean;\n  v7_normalizeFormMethod: boolean;\n  v7_partialHydration: boolean;\n  v7_prependBasename: boolean;\n  v7_relativeSplatPath: boolean;\n  unstable_skipActionErrorRevalidation: boolean;\n}\n\n/**\n * Initialization options for createRouter\n */\nexport interface RouterInit {\n  routes: AgnosticRouteObject[];\n  history: History;\n  basename?: string;\n  /**\n   * @deprecated Use `mapRouteProperties` instead\n   */\n  detectErrorBoundary?: DetectErrorBoundaryFunction;\n  mapRouteProperties?: MapRoutePropertiesFunction;\n  future?: Partial<FutureConfig>;\n  hydrationData?: HydrationState;\n  window?: Window;\n  unstable_dataStrategy?: DataStrategyFunction;\n}\n\n/**\n * State returned from a server-side query() call\n */\nexport interface StaticHandlerContext {\n  basename: Router[\"basename\"];\n  location: RouterState[\"location\"];\n  matches: RouterState[\"matches\"];\n  loaderData: RouterState[\"loaderData\"];\n  actionData: RouterState[\"actionData\"];\n  errors: RouterState[\"errors\"];\n  statusCode: number;\n  loaderHeaders: Record<string, Headers>;\n  actionHeaders: Record<string, Headers>;\n  activeDeferreds: Record<string, DeferredData> | null;\n  _deepestRenderedBoundaryId?: string | null;\n}\n\n/**\n * A StaticHandler instance manages a singular SSR navigation/fetch event\n */\nexport interface StaticHandler {\n  dataRoutes: AgnosticDataRouteObject[];\n  query(\n    request: Request,\n    opts?: {\n      requestContext?: unknown;\n      skipLoaderErrorBubbling?: boolean;\n      unstable_dataStrategy?: DataStrategyFunction;\n    }\n  ): Promise<StaticHandlerContext | Response>;\n  queryRoute(\n    request: Request,\n    opts?: {\n      routeId?: string;\n      requestContext?: unknown;\n      unstable_dataStrategy?: DataStrategyFunction;\n    }\n  ): Promise<any>;\n}\n\ntype ViewTransitionOpts = {\n  currentLocation: Location;\n  nextLocation: Location;\n};\n\n/**\n * Subscriber function signature for changes to router state\n */\nexport interface RouterSubscriber {\n  (\n    state: RouterState,\n    opts: {\n      deletedFetchers: string[];\n      unstable_viewTransitionOpts?: ViewTransitionOpts;\n      unstable_flushSync: boolean;\n    }\n  ): void;\n}\n\n/**\n * Function signature for determining the key to be used in scroll restoration\n * for a given location\n */\nexport interface GetScrollRestorationKeyFunction {\n  (location: Location, matches: UIMatch[]): string | null;\n}\n\n/**\n * Function signature for determining the current scroll position\n */\nexport interface GetScrollPositionFunction {\n  (): number;\n}\n\nexport type RelativeRoutingType = \"route\" | \"path\";\n\n// Allowed for any navigation or fetch\ntype BaseNavigateOrFetchOptions = {\n  preventScrollReset?: boolean;\n  relative?: RelativeRoutingType;\n  unstable_flushSync?: boolean;\n};\n\n// Only allowed for navigations\ntype BaseNavigateOptions = BaseNavigateOrFetchOptions & {\n  replace?: boolean;\n  state?: any;\n  fromRouteId?: string;\n  unstable_viewTransition?: boolean;\n};\n\n// Only allowed for submission navigations\ntype BaseSubmissionOptions = {\n  formMethod?: HTMLFormMethod;\n  formEncType?: FormEncType;\n} & (\n  | { formData: FormData; body?: undefined }\n  | { formData?: undefined; body: any }\n);\n\n/**\n * Options for a navigate() call for a normal (non-submission) navigation\n */\ntype LinkNavigateOptions = BaseNavigateOptions;\n\n/**\n * Options for a navigate() call for a submission navigation\n */\ntype SubmissionNavigateOptions = BaseNavigateOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to navigate() for a navigation\n */\nexport type RouterNavigateOptions =\n  | LinkNavigateOptions\n  | SubmissionNavigateOptions;\n\n/**\n * Options for a fetch() load\n */\ntype LoadFetchOptions = BaseNavigateOrFetchOptions;\n\n/**\n * Options for a fetch() submission\n */\ntype SubmitFetchOptions = BaseNavigateOrFetchOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to fetch()\n */\nexport type RouterFetchOptions = LoadFetchOptions | SubmitFetchOptions;\n\n/**\n * Potential states for state.navigation\n */\nexport type NavigationStates = {\n  Idle: {\n    state: \"idle\";\n    location: undefined;\n    formMethod: undefined;\n    formAction: undefined;\n    formEncType: undefined;\n    formData: undefined;\n    json: undefined;\n    text: undefined;\n  };\n  Loading: {\n    state: \"loading\";\n    location: Location;\n    formMethod: Submission[\"formMethod\"] | undefined;\n    formAction: Submission[\"formAction\"] | undefined;\n    formEncType: Submission[\"formEncType\"] | undefined;\n    formData: Submission[\"formData\"] | undefined;\n    json: Submission[\"json\"] | undefined;\n    text: Submission[\"text\"] | undefined;\n  };\n  Submitting: {\n    state: \"submitting\";\n    location: Location;\n    formMethod: Submission[\"formMethod\"];\n    formAction: Submission[\"formAction\"];\n    formEncType: Submission[\"formEncType\"];\n    formData: Submission[\"formData\"];\n    json: Submission[\"json\"];\n    text: Submission[\"text\"];\n  };\n};\n\nexport type Navigation = NavigationStates[keyof NavigationStates];\n\nexport type RevalidationState = \"idle\" | \"loading\";\n\n/**\n * Potential states for fetchers\n */\ntype FetcherStates<TData = any> = {\n  Idle: {\n    state: \"idle\";\n    formMethod: undefined;\n    formAction: undefined;\n    formEncType: undefined;\n    text: undefined;\n    formData: undefined;\n    json: undefined;\n    data: TData | undefined;\n  };\n  Loading: {\n    state: \"loading\";\n    formMethod: Submission[\"formMethod\"] | undefined;\n    formAction: Submission[\"formAction\"] | undefined;\n    formEncType: Submission[\"formEncType\"] | undefined;\n    text: Submission[\"text\"] | undefined;\n    formData: Submission[\"formData\"] | undefined;\n    json: Submission[\"json\"] | undefined;\n    data: TData | undefined;\n  };\n  Submitting: {\n    state: \"submitting\";\n    formMethod: Submission[\"formMethod\"];\n    formAction: Submission[\"formAction\"];\n    formEncType: Submission[\"formEncType\"];\n    text: Submission[\"text\"];\n    formData: Submission[\"formData\"];\n    json: Submission[\"json\"];\n    data: TData | undefined;\n  };\n};\n\nexport type Fetcher<TData = any> =\n  FetcherStates<TData>[keyof FetcherStates<TData>];\n\ninterface BlockerBlocked {\n  state: \"blocked\";\n  reset(): void;\n  proceed(): void;\n  location: Location;\n}\n\ninterface BlockerUnblocked {\n  state: \"unblocked\";\n  reset: undefined;\n  proceed: undefined;\n  location: undefined;\n}\n\ninterface BlockerProceeding {\n  state: \"proceeding\";\n  reset: undefined;\n  proceed: undefined;\n  location: Location;\n}\n\nexport type Blocker = BlockerUnblocked | BlockerBlocked | BlockerProceeding;\n\nexport type BlockerFunction = (args: {\n  currentLocation: Location;\n  nextLocation: Location;\n  historyAction: HistoryAction;\n}) => boolean;\n\ninterface ShortCircuitable {\n  /**\n   * startNavigation does not need to complete the navigation because we\n   * redirected or got interrupted\n   */\n  shortCircuited?: boolean;\n}\n\ntype PendingActionResult = [string, SuccessResult | ErrorResult];\n\ninterface HandleActionResult extends ShortCircuitable {\n  /**\n   * Tuple for the returned or thrown value from the current action.  The routeId\n   * is the action route for success and the bubbled boundary route for errors.\n   */\n  pendingActionResult?: PendingActionResult;\n}\n\ninterface HandleLoadersResult extends ShortCircuitable {\n  /**\n   * loaderData returned from the current set of loaders\n   */\n  loaderData?: RouterState[\"loaderData\"];\n  /**\n   * errors thrown from the current set of loaders\n   */\n  errors?: RouterState[\"errors\"];\n}\n\n/**\n * Cached info for active fetcher.load() instances so they can participate\n * in revalidation\n */\ninterface FetchLoadMatch {\n  routeId: string;\n  path: string;\n}\n\n/**\n * Identified fetcher.load() calls that need to be revalidated\n */\ninterface RevalidatingFetcher extends FetchLoadMatch {\n  key: string;\n  match: AgnosticDataRouteMatch | null;\n  matches: AgnosticDataRouteMatch[] | null;\n  controller: AbortController | null;\n}\n\nconst validMutationMethodsArr: MutationFormMethod[] = [\n  \"post\",\n  \"put\",\n  \"patch\",\n  \"delete\",\n];\nconst validMutationMethods = new Set<MutationFormMethod>(\n  validMutationMethodsArr\n);\n\nconst validRequestMethodsArr: FormMethod[] = [\n  \"get\",\n  ...validMutationMethodsArr,\n];\nconst validRequestMethods = new Set<FormMethod>(validRequestMethodsArr);\n\nconst redirectStatusCodes = new Set([301, 302, 303, 307, 308]);\nconst redirectPreserveMethodStatusCodes = new Set([307, 308]);\n\nexport const IDLE_NAVIGATION: NavigationStates[\"Idle\"] = {\n  state: \"idle\",\n  location: undefined,\n  formMethod: undefined,\n  formAction: undefined,\n  formEncType: undefined,\n  formData: undefined,\n  json: undefined,\n  text: undefined,\n};\n\nexport const IDLE_FETCHER: FetcherStates[\"Idle\"] = {\n  state: \"idle\",\n  data: undefined,\n  formMethod: undefined,\n  formAction: undefined,\n  formEncType: undefined,\n  formData: undefined,\n  json: undefined,\n  text: undefined,\n};\n\nexport const IDLE_BLOCKER: BlockerUnblocked = {\n  state: \"unblocked\",\n  proceed: undefined,\n  reset: undefined,\n  location: undefined,\n};\n\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n\nconst defaultMapRouteProperties: MapRoutePropertiesFunction = (route) => ({\n  hasErrorBoundary: Boolean(route.hasErrorBoundary),\n});\n\nconst TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createRouter\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Create a router and listen to history POP navigations\n */\nexport function createRouter(init: RouterInit): Router {\n  const routerWindow = init.window\n    ? init.window\n    : typeof window !== \"undefined\"\n    ? window\n    : undefined;\n  const isBrowser =\n    typeof routerWindow !== \"undefined\" &&\n    typeof routerWindow.document !== \"undefined\" &&\n    typeof routerWindow.document.createElement !== \"undefined\";\n  const isServer = !isBrowser;\n\n  invariant(\n    init.routes.length > 0,\n    \"You must provide a non-empty routes array to createRouter\"\n  );\n\n  let mapRouteProperties: MapRoutePropertiesFunction;\n  if (init.mapRouteProperties) {\n    mapRouteProperties = init.mapRouteProperties;\n  } else if (init.detectErrorBoundary) {\n    // If they are still using the deprecated version, wrap it with the new API\n    let detectErrorBoundary = init.detectErrorBoundary;\n    mapRouteProperties = (route) => ({\n      hasErrorBoundary: detectErrorBoundary(route),\n    });\n  } else {\n    mapRouteProperties = defaultMapRouteProperties;\n  }\n\n  // Routes keyed by ID\n  let manifest: RouteManifest = {};\n  // Routes in tree format for matching\n  let dataRoutes = convertRoutesToDataRoutes(\n    init.routes,\n    mapRouteProperties,\n    undefined,\n    manifest\n  );\n  let inFlightDataRoutes: AgnosticDataRouteObject[] | undefined;\n  let basename = init.basename || \"/\";\n  let dataStrategyImpl = init.unstable_dataStrategy || defaultDataStrategy;\n  // Config driven behavior flags\n  let future: FutureConfig = {\n    v7_fetcherPersist: false,\n    v7_normalizeFormMethod: false,\n    v7_partialHydration: false,\n    v7_prependBasename: false,\n    v7_relativeSplatPath: false,\n    unstable_skipActionErrorRevalidation: false,\n    ...init.future,\n  };\n  // Cleanup function for history\n  let unlistenHistory: (() => void) | null = null;\n  // Externally-provided functions to call on all state changes\n  let subscribers = new Set<RouterSubscriber>();\n  // Externally-provided object to hold scroll restoration locations during routing\n  let savedScrollPositions: Record<string, number> | null = null;\n  // Externally-provided function to get scroll restoration keys\n  let getScrollRestorationKey: GetScrollRestorationKeyFunction | null = null;\n  // Externally-provided function to get current scroll position\n  let getScrollPosition: GetScrollPositionFunction | null = null;\n  // One-time flag to control the initial hydration scroll restoration.  Because\n  // we don't get the saved positions from <ScrollRestoration /> until _after_\n  // the initial render, we need to manually trigger a separate updateState to\n  // send along the restoreScrollPosition\n  // Set to true if we have `hydrationData` since we assume we were SSR'd and that\n  // SSR did the initial scroll restoration.\n  let initialScrollRestored = init.hydrationData != null;\n\n  let initialMatches = matchRoutes(dataRoutes, init.history.location, basename);\n  let initialErrors: RouteData | null = null;\n\n  if (initialMatches == null) {\n    // If we do not match a user-provided-route, fall back to the root\n    // to allow the error boundary to take over\n    let error = getInternalRouterError(404, {\n      pathname: init.history.location.pathname,\n    });\n    let { matches, route } = getShortCircuitMatches(dataRoutes);\n    initialMatches = matches;\n    initialErrors = { [route.id]: error };\n  }\n\n  let initialized: boolean;\n  let hasLazyRoutes = initialMatches.some((m) => m.route.lazy);\n  let hasLoaders = initialMatches.some((m) => m.route.loader);\n  if (hasLazyRoutes) {\n    // All initialMatches need to be loaded before we're ready.  If we have lazy\n    // functions around still then we'll need to run them in initialize()\n    initialized = false;\n  } else if (!hasLoaders) {\n    // If we've got no loaders to run, then we're good to go\n    initialized = true;\n  } else if (future.v7_partialHydration) {\n    // If partial hydration is enabled, we're initialized so long as we were\n    // provided with hydrationData for every route with a loader, and no loaders\n    // were marked for explicit hydration\n    let loaderData = init.hydrationData ? init.hydrationData.loaderData : null;\n    let errors = init.hydrationData ? init.hydrationData.errors : null;\n    let isRouteInitialized = (m: AgnosticDataRouteMatch) => {\n      // No loader, nothing to initialize\n      if (!m.route.loader) {\n        return true;\n      }\n      // Explicitly opting-in to running on hydration\n      if (\n        typeof m.route.loader === \"function\" &&\n        m.route.loader.hydrate === true\n      ) {\n        return false;\n      }\n      // Otherwise, initialized if hydrated with data or an error\n      return (\n        (loaderData && loaderData[m.route.id] !== undefined) ||\n        (errors && errors[m.route.id] !== undefined)\n      );\n    };\n\n    // If errors exist, don't consider routes below the boundary\n    if (errors) {\n      let idx = initialMatches.findIndex(\n        (m) => errors![m.route.id] !== undefined\n      );\n      initialized = initialMatches.slice(0, idx + 1).every(isRouteInitialized);\n    } else {\n      initialized = initialMatches.every(isRouteInitialized);\n    }\n  } else {\n    // Without partial hydration - we're initialized if we were provided any\n    // hydrationData - which is expected to be complete\n    initialized = init.hydrationData != null;\n  }\n\n  let router: Router;\n  let state: RouterState = {\n    historyAction: init.history.action,\n    location: init.history.location,\n    matches: initialMatches,\n    initialized,\n    navigation: IDLE_NAVIGATION,\n    // Don't restore on initial updateState() if we were SSR'd\n    restoreScrollPosition: init.hydrationData != null ? false : null,\n    preventScrollReset: false,\n    revalidation: \"idle\",\n    loaderData: (init.hydrationData && init.hydrationData.loaderData) || {},\n    actionData: (init.hydrationData && init.hydrationData.actionData) || null,\n    errors: (init.hydrationData && init.hydrationData.errors) || initialErrors,\n    fetchers: new Map(),\n    blockers: new Map(),\n  };\n\n  // -- Stateful internal variables to manage navigations --\n  // Current navigation in progress (to be committed in completeNavigation)\n  let pendingAction: HistoryAction = HistoryAction.Pop;\n\n  // Should the current navigation prevent the scroll reset if scroll cannot\n  // be restored?\n  let pendingPreventScrollReset = false;\n\n  // AbortController for the active navigation\n  let pendingNavigationController: AbortController | null;\n\n  // Should the current navigation enable document.startViewTransition?\n  let pendingViewTransitionEnabled = false;\n\n  // Store applied view transitions so we can apply them on POP\n  let appliedViewTransitions: Map<string, Set<string>> = new Map<\n    string,\n    Set<string>\n  >();\n\n  // Cleanup function for persisting applied transitions to sessionStorage\n  let removePageHideEventListener: (() => void) | null = null;\n\n  // We use this to avoid touching history in completeNavigation if a\n  // revalidation is entirely uninterrupted\n  let isUninterruptedRevalidation = false;\n\n  // Use this internal flag to force revalidation of all loaders:\n  //  - submissions (completed or interrupted)\n  //  - useRevalidator()\n  //  - X-Remix-Revalidate (from redirect)\n  let isRevalidationRequired = false;\n\n  // Use this internal array to capture routes that require revalidation due\n  // to a cancelled deferred on action submission\n  let cancelledDeferredRoutes: string[] = [];\n\n  // Use this internal array to capture fetcher loads that were cancelled by an\n  // action navigation and require revalidation\n  let cancelledFetcherLoads: string[] = [];\n\n  // AbortControllers for any in-flight fetchers\n  let fetchControllers = new Map<string, AbortController>();\n\n  // Track loads based on the order in which they started\n  let incrementingLoadId = 0;\n\n  // Track the outstanding pending navigation data load to be compared against\n  // the globally incrementing load when a fetcher load lands after a completed\n  // navigation\n  let pendingNavigationLoadId = -1;\n\n  // Fetchers that triggered data reloads as a result of their actions\n  let fetchReloadIds = new Map<string, number>();\n\n  // Fetchers that triggered redirect navigations\n  let fetchRedirectIds = new Set<string>();\n\n  // Most recent href/match for fetcher.load calls for fetchers\n  let fetchLoadMatches = new Map<string, FetchLoadMatch>();\n\n  // Ref-count mounted fetchers so we know when it's ok to clean them up\n  let activeFetchers = new Map<string, number>();\n\n  // Fetchers that have requested a delete when using v7_fetcherPersist,\n  // they'll be officially removed after they return to idle\n  let deletedFetchers = new Set<string>();\n\n  // Store DeferredData instances for active route matches.  When a\n  // route loader returns defer() we stick one in here.  Then, when a nested\n  // promise resolves we update loaderData.  If a new navigation starts we\n  // cancel active deferreds for eliminated routes.\n  let activeDeferreds = new Map<string, DeferredData>();\n\n  // Store blocker functions in a separate Map outside of router state since\n  // we don't need to update UI state if they change\n  let blockerFunctions = new Map<string, BlockerFunction>();\n\n  // Flag to ignore the next history update, so we can revert the URL change on\n  // a POP navigation that was blocked by the user without touching router state\n  let ignoreNextHistoryUpdate = false;\n\n  // Initialize the router, all side effects should be kicked off from here.\n  // Implemented as a Fluent API for ease of:\n  //   let router = createRouter(init).initialize();\n  function initialize() {\n    // If history informs us of a POP navigation, start the navigation but do not update\n    // state.  We'll update our own state once the navigation completes\n    unlistenHistory = init.history.listen(\n      ({ action: historyAction, location, delta }) => {\n        // Ignore this event if it was just us resetting the URL from a\n        // blocked POP navigation\n        if (ignoreNextHistoryUpdate) {\n          ignoreNextHistoryUpdate = false;\n          return;\n        }\n\n        warning(\n          blockerFunctions.size === 0 || delta != null,\n          \"You are trying to use a blocker on a POP navigation to a location \" +\n            \"that was not created by @remix-run/router. This will fail silently in \" +\n            \"production. This can happen if you are navigating outside the router \" +\n            \"via `window.history.pushState`/`window.location.hash` instead of using \" +\n            \"router navigation APIs.  This can also happen if you are using \" +\n            \"createHashRouter and the user manually changes the URL.\"\n        );\n\n        let blockerKey = shouldBlockNavigation({\n          currentLocation: state.location,\n          nextLocation: location,\n          historyAction,\n        });\n\n        if (blockerKey && delta != null) {\n          // Restore the URL to match the current UI, but don't update router state\n          ignoreNextHistoryUpdate = true;\n          init.history.go(delta * -1);\n\n          // Put the blocker into a blocked state\n          updateBlocker(blockerKey, {\n            state: \"blocked\",\n            location,\n            proceed() {\n              updateBlocker(blockerKey!, {\n                state: \"proceeding\",\n                proceed: undefined,\n                reset: undefined,\n                location,\n              });\n              // Re-do the same POP navigation we just blocked\n              init.history.go(delta);\n            },\n            reset() {\n              let blockers = new Map(state.blockers);\n              blockers.set(blockerKey!, IDLE_BLOCKER);\n              updateState({ blockers });\n            },\n          });\n          return;\n        }\n\n        return startNavigation(historyAction, location);\n      }\n    );\n\n    if (isBrowser) {\n      // FIXME: This feels gross.  How can we cleanup the lines between\n      // scrollRestoration/appliedTransitions persistance?\n      restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n      let _saveAppliedTransitions = () =>\n        persistAppliedTransitions(routerWindow, appliedViewTransitions);\n      routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n      removePageHideEventListener = () =>\n        routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n    }\n\n    // Kick off initial data load if needed.  Use Pop to avoid modifying history\n    // Note we don't do any handling of lazy here.  For SPA's it'll get handled\n    // in the normal navigation flow.  For SSR it's expected that lazy modules are\n    // resolved prior to router creation since we can't go into a fallbackElement\n    // UI for SSR'd apps\n    if (!state.initialized) {\n      startNavigation(HistoryAction.Pop, state.location, {\n        initialHydration: true,\n      });\n    }\n\n    return router;\n  }\n\n  // Clean up a router and it's side effects\n  function dispose() {\n    if (unlistenHistory) {\n      unlistenHistory();\n    }\n    if (removePageHideEventListener) {\n      removePageHideEventListener();\n    }\n    subscribers.clear();\n    pendingNavigationController && pendingNavigationController.abort();\n    state.fetchers.forEach((_, key) => deleteFetcher(key));\n    state.blockers.forEach((_, key) => deleteBlocker(key));\n  }\n\n  // Subscribe to state updates for the router\n  function subscribe(fn: RouterSubscriber) {\n    subscribers.add(fn);\n    return () => subscribers.delete(fn);\n  }\n\n  // Update our state and notify the calling context of the change\n  function updateState(\n    newState: Partial<RouterState>,\n    opts: {\n      flushSync?: boolean;\n      viewTransitionOpts?: ViewTransitionOpts;\n    } = {}\n  ): void {\n    state = {\n      ...state,\n      ...newState,\n    };\n\n    // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n    // can be removed\n    let completedFetchers: string[] = [];\n    let deletedFetchersKeys: string[] = [];\n\n    if (future.v7_fetcherPersist) {\n      state.fetchers.forEach((fetcher, key) => {\n        if (fetcher.state === \"idle\") {\n          if (deletedFetchers.has(key)) {\n            // Unmounted from the UI and can be totally removed\n            deletedFetchersKeys.push(key);\n          } else {\n            // Returned to idle but still mounted in the UI, so semi-remains for\n            // revalidations and such\n            completedFetchers.push(key);\n          }\n        }\n      });\n    }\n\n    // Iterate over a local copy so that if flushSync is used and we end up\n    // removing and adding a new subscriber due to the useCallback dependencies,\n    // we don't get ourselves into a loop calling the new subscriber immediately\n    [...subscribers].forEach((subscriber) =>\n      subscriber(state, {\n        deletedFetchers: deletedFetchersKeys,\n        unstable_viewTransitionOpts: opts.viewTransitionOpts,\n        unstable_flushSync: opts.flushSync === true,\n      })\n    );\n\n    // Remove idle fetchers from state since we only care about in-flight fetchers.\n    if (future.v7_fetcherPersist) {\n      completedFetchers.forEach((key) => state.fetchers.delete(key));\n      deletedFetchersKeys.forEach((key) => deleteFetcher(key));\n    }\n  }\n\n  // Complete a navigation returning the state.navigation back to the IDLE_NAVIGATION\n  // and setting state.[historyAction/location/matches] to the new route.\n  // - Location is a required param\n  // - Navigation will always be set to IDLE_NAVIGATION\n  // - Can pass any other state in newState\n  function completeNavigation(\n    location: Location,\n    newState: Partial<Omit<RouterState, \"action\" | \"location\" | \"navigation\">>,\n    { flushSync }: { flushSync?: boolean } = {}\n  ): void {\n    // Deduce if we're in a loading/actionReload state:\n    // - We have committed actionData in the store\n    // - The current navigation was a mutation submission\n    // - We're past the submitting state and into the loading state\n    // - The location being loaded is not the result of a redirect\n    let isActionReload =\n      state.actionData != null &&\n      state.navigation.formMethod != null &&\n      isMutationMethod(state.navigation.formMethod) &&\n      state.navigation.state === \"loading\" &&\n      location.state?._isRedirect !== true;\n\n    let actionData: RouteData | null;\n    if (newState.actionData) {\n      if (Object.keys(newState.actionData).length > 0) {\n        actionData = newState.actionData;\n      } else {\n        // Empty actionData -> clear prior actionData due to an action error\n        actionData = null;\n      }\n    } else if (isActionReload) {\n      // Keep the current data if we're wrapping up the action reload\n      actionData = state.actionData;\n    } else {\n      // Clear actionData on any other completed navigations\n      actionData = null;\n    }\n\n    // Always preserve any existing loaderData from re-used routes\n    let loaderData = newState.loaderData\n      ? mergeLoaderData(\n          state.loaderData,\n          newState.loaderData,\n          newState.matches || [],\n          newState.errors\n        )\n      : state.loaderData;\n\n    // On a successful navigation we can assume we got through all blockers\n    // so we can start fresh\n    let blockers = state.blockers;\n    if (blockers.size > 0) {\n      blockers = new Map(blockers);\n      blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\n    }\n\n    // Always respect the user flag.  Otherwise don't reset on mutation\n    // submission navigations unless they redirect\n    let preventScrollReset =\n      pendingPreventScrollReset === true ||\n      (state.navigation.formMethod != null &&\n        isMutationMethod(state.navigation.formMethod) &&\n        location.state?._isRedirect !== true);\n\n    if (inFlightDataRoutes) {\n      dataRoutes = inFlightDataRoutes;\n      inFlightDataRoutes = undefined;\n    }\n\n    if (isUninterruptedRevalidation) {\n      // If this was an uninterrupted revalidation then do not touch history\n    } else if (pendingAction === HistoryAction.Pop) {\n      // Do nothing for POP - URL has already been updated\n    } else if (pendingAction === HistoryAction.Push) {\n      init.history.push(location, location.state);\n    } else if (pendingAction === HistoryAction.Replace) {\n      init.history.replace(location, location.state);\n    }\n\n    let viewTransitionOpts: ViewTransitionOpts | undefined;\n\n    // On POP, enable transitions if they were enabled on the original navigation\n    if (pendingAction === HistoryAction.Pop) {\n      // Forward takes precedence so they behave like the original navigation\n      let priorPaths = appliedViewTransitions.get(state.location.pathname);\n      if (priorPaths && priorPaths.has(location.pathname)) {\n        viewTransitionOpts = {\n          currentLocation: state.location,\n          nextLocation: location,\n        };\n      } else if (appliedViewTransitions.has(location.pathname)) {\n        // If we don't have a previous forward nav, assume we're popping back to\n        // the new location and enable if that location previously enabled\n        viewTransitionOpts = {\n          currentLocation: location,\n          nextLocation: state.location,\n        };\n      }\n    } else if (pendingViewTransitionEnabled) {\n      // Store the applied transition on PUSH/REPLACE\n      let toPaths = appliedViewTransitions.get(state.location.pathname);\n      if (toPaths) {\n        toPaths.add(location.pathname);\n      } else {\n        toPaths = new Set<string>([location.pathname]);\n        appliedViewTransitions.set(state.location.pathname, toPaths);\n      }\n      viewTransitionOpts = {\n        currentLocation: state.location,\n        nextLocation: location,\n      };\n    }\n\n    updateState(\n      {\n        ...newState, // matches, errors, fetchers go through as-is\n        actionData,\n        loaderData,\n        historyAction: pendingAction,\n        location,\n        initialized: true,\n        navigation: IDLE_NAVIGATION,\n        revalidation: \"idle\",\n        restoreScrollPosition: getSavedScrollPosition(\n          location,\n          newState.matches || state.matches\n        ),\n        preventScrollReset,\n        blockers,\n      },\n      {\n        viewTransitionOpts,\n        flushSync: flushSync === true,\n      }\n    );\n\n    // Reset stateful navigation vars\n    pendingAction = HistoryAction.Pop;\n    pendingPreventScrollReset = false;\n    pendingViewTransitionEnabled = false;\n    isUninterruptedRevalidation = false;\n    isRevalidationRequired = false;\n    cancelledDeferredRoutes = [];\n    cancelledFetcherLoads = [];\n  }\n\n  // Trigger a navigation event, which can either be a numerical POP or a PUSH\n  // replace with an optional submission\n  async function navigate(\n    to: number | To | null,\n    opts?: RouterNavigateOptions\n  ): Promise<void> {\n    if (typeof to === \"number\") {\n      init.history.go(to);\n      return;\n    }\n\n    let normalizedPath = normalizeTo(\n      state.location,\n      state.matches,\n      basename,\n      future.v7_prependBasename,\n      to,\n      future.v7_relativeSplatPath,\n      opts?.fromRouteId,\n      opts?.relative\n    );\n    let { path, submission, error } = normalizeNavigateOptions(\n      future.v7_normalizeFormMethod,\n      false,\n      normalizedPath,\n      opts\n    );\n\n    let currentLocation = state.location;\n    let nextLocation = createLocation(state.location, path, opts && opts.state);\n\n    // When using navigate as a PUSH/REPLACE we aren't reading an already-encoded\n    // URL from window.location, so we need to encode it here so the behavior\n    // remains the same as POP and non-data-router usages.  new URL() does all\n    // the same encoding we'd get from a history.pushState/window.location read\n    // without having to touch history\n    nextLocation = {\n      ...nextLocation,\n      ...init.history.encodeLocation(nextLocation),\n    };\n\n    let userReplace = opts && opts.replace != null ? opts.replace : undefined;\n\n    let historyAction = HistoryAction.Push;\n\n    if (userReplace === true) {\n      historyAction = HistoryAction.Replace;\n    } else if (userReplace === false) {\n      // no-op\n    } else if (\n      submission != null &&\n      isMutationMethod(submission.formMethod) &&\n      submission.formAction === state.location.pathname + state.location.search\n    ) {\n      // By default on submissions to the current location we REPLACE so that\n      // users don't have to double-click the back button to get to the prior\n      // location.  If the user redirects to a different location from the\n      // action/loader this will be ignored and the redirect will be a PUSH\n      historyAction = HistoryAction.Replace;\n    }\n\n    let preventScrollReset =\n      opts && \"preventScrollReset\" in opts\n        ? opts.preventScrollReset === true\n        : undefined;\n\n    let flushSync = (opts && opts.unstable_flushSync) === true;\n\n    let blockerKey = shouldBlockNavigation({\n      currentLocation,\n      nextLocation,\n      historyAction,\n    });\n\n    if (blockerKey) {\n      // Put the blocker into a blocked state\n      updateBlocker(blockerKey, {\n        state: \"blocked\",\n        location: nextLocation,\n        proceed() {\n          updateBlocker(blockerKey!, {\n            state: \"proceeding\",\n            proceed: undefined,\n            reset: undefined,\n            location: nextLocation,\n          });\n          // Send the same navigation through\n          navigate(to, opts);\n        },\n        reset() {\n          let blockers = new Map(state.blockers);\n          blockers.set(blockerKey!, IDLE_BLOCKER);\n          updateState({ blockers });\n        },\n      });\n      return;\n    }\n\n    return await startNavigation(historyAction, nextLocation, {\n      submission,\n      // Send through the formData serialization error if we have one so we can\n      // render at the right error boundary after we match routes\n      pendingError: error,\n      preventScrollReset,\n      replace: opts && opts.replace,\n      enableViewTransition: opts && opts.unstable_viewTransition,\n      flushSync,\n    });\n  }\n\n  // Revalidate all current loaders.  If a navigation is in progress or if this\n  // is interrupted by a navigation, allow this to \"succeed\" by calling all\n  // loaders during the next loader round\n  function revalidate() {\n    interruptActiveLoads();\n    updateState({ revalidation: \"loading\" });\n\n    // If we're currently submitting an action, we don't need to start a new\n    // navigation, we'll just let the follow up loader execution call all loaders\n    if (state.navigation.state === \"submitting\") {\n      return;\n    }\n\n    // If we're currently in an idle state, start a new navigation for the current\n    // action/location and mark it as uninterrupted, which will skip the history\n    // update in completeNavigation\n    if (state.navigation.state === \"idle\") {\n      startNavigation(state.historyAction, state.location, {\n        startUninterruptedRevalidation: true,\n      });\n      return;\n    }\n\n    // Otherwise, if we're currently in a loading state, just start a new\n    // navigation to the navigation.location but do not trigger an uninterrupted\n    // revalidation so that history correctly updates once the navigation completes\n    startNavigation(\n      pendingAction || state.historyAction,\n      state.navigation.location,\n      { overrideNavigation: state.navigation }\n    );\n  }\n\n  // Start a navigation to the given action/location.  Can optionally provide a\n  // overrideNavigation which will override the normalLoad in the case of a redirect\n  // navigation\n  async function startNavigation(\n    historyAction: HistoryAction,\n    location: Location,\n    opts?: {\n      initialHydration?: boolean;\n      submission?: Submission;\n      fetcherSubmission?: Submission;\n      overrideNavigation?: Navigation;\n      pendingError?: ErrorResponseImpl;\n      startUninterruptedRevalidation?: boolean;\n      preventScrollReset?: boolean;\n      replace?: boolean;\n      enableViewTransition?: boolean;\n      flushSync?: boolean;\n    }\n  ): Promise<void> {\n    // Abort any in-progress navigations and start a new one. Unset any ongoing\n    // uninterrupted revalidations unless told otherwise, since we want this\n    // new navigation to update history normally\n    pendingNavigationController && pendingNavigationController.abort();\n    pendingNavigationController = null;\n    pendingAction = historyAction;\n    isUninterruptedRevalidation =\n      (opts && opts.startUninterruptedRevalidation) === true;\n\n    // Save the current scroll position every time we start a new navigation,\n    // and track whether we should reset scroll on completion\n    saveScrollPosition(state.location, state.matches);\n    pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n    pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let loadingNavigation = opts && opts.overrideNavigation;\n    let matches = matchRoutes(routesToUse, location, basename);\n    let flushSync = (opts && opts.flushSync) === true;\n\n    // Short circuit with a 404 on the root error boundary if we match nothing\n    if (!matches) {\n      let error = getInternalRouterError(404, { pathname: location.pathname });\n      let { matches: notFoundMatches, route } =\n        getShortCircuitMatches(routesToUse);\n      // Cancel all pending deferred on 404s since we don't keep any routes\n      cancelActiveDeferreds();\n      completeNavigation(\n        location,\n        {\n          matches: notFoundMatches,\n          loaderData: {},\n          errors: {\n            [route.id]: error,\n          },\n        },\n        { flushSync }\n      );\n      return;\n    }\n\n    // Short circuit if it's only a hash change and not a revalidation or\n    // mutation submission.\n    //\n    // Ignore on initial page loads because since the initial load will always\n    // be \"same hash\".  For example, on /page#hash and submit a <Form method=\"post\">\n    // which will default to a navigation to /page\n    if (\n      state.initialized &&\n      !isRevalidationRequired &&\n      isHashChangeOnly(state.location, location) &&\n      !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))\n    ) {\n      completeNavigation(location, { matches }, { flushSync });\n      return;\n    }\n\n    // Create a controller/Request for this navigation\n    pendingNavigationController = new AbortController();\n    let request = createClientSideRequest(\n      init.history,\n      location,\n      pendingNavigationController.signal,\n      opts && opts.submission\n    );\n    let pendingActionResult: PendingActionResult | undefined;\n\n    if (opts && opts.pendingError) {\n      // If we have a pendingError, it means the user attempted a GET submission\n      // with binary FormData so assign here and skip to handleLoaders.  That\n      // way we handle calling loaders above the boundary etc.  It's not really\n      // different from an actionError in that sense.\n      pendingActionResult = [\n        findNearestBoundary(matches).route.id,\n        { type: ResultType.error, error: opts.pendingError },\n      ];\n    } else if (\n      opts &&\n      opts.submission &&\n      isMutationMethod(opts.submission.formMethod)\n    ) {\n      // Call action if we received an action submission\n      let actionResult = await handleAction(\n        request,\n        location,\n        opts.submission,\n        matches,\n        { replace: opts.replace, flushSync }\n      );\n\n      if (actionResult.shortCircuited) {\n        return;\n      }\n\n      pendingActionResult = actionResult.pendingActionResult;\n      loadingNavigation = getLoadingNavigation(location, opts.submission);\n      flushSync = false;\n\n      // Create a GET request for the loaders\n      request = createClientSideRequest(\n        init.history,\n        request.url,\n        request.signal\n      );\n    }\n\n    // Call loaders\n    let { shortCircuited, loaderData, errors } = await handleLoaders(\n      request,\n      location,\n      matches,\n      loadingNavigation,\n      opts && opts.submission,\n      opts && opts.fetcherSubmission,\n      opts && opts.replace,\n      opts && opts.initialHydration === true,\n      flushSync,\n      pendingActionResult\n    );\n\n    if (shortCircuited) {\n      return;\n    }\n\n    // Clean up now that the action/loaders have completed.  Don't clean up if\n    // we short circuited because pendingNavigationController will have already\n    // been assigned to a new controller for the next navigation\n    pendingNavigationController = null;\n\n    completeNavigation(location, {\n      matches,\n      ...getActionDataForCommit(pendingActionResult),\n      loaderData,\n      errors,\n    });\n  }\n\n  // Call the action matched by the leaf route for this navigation and handle\n  // redirects/errors\n  async function handleAction(\n    request: Request,\n    location: Location,\n    submission: Submission,\n    matches: AgnosticDataRouteMatch[],\n    opts: { replace?: boolean; flushSync?: boolean } = {}\n  ): Promise<HandleActionResult> {\n    interruptActiveLoads();\n\n    // Put us in a submitting state\n    let navigation = getSubmittingNavigation(location, submission);\n    updateState({ navigation }, { flushSync: opts.flushSync === true });\n\n    // Call our action and get the result\n    let result: DataResult;\n    let actionMatch = getTargetMatch(matches, location);\n\n    if (!actionMatch.route.action && !actionMatch.route.lazy) {\n      result = {\n        type: ResultType.error,\n        error: getInternalRouterError(405, {\n          method: request.method,\n          pathname: location.pathname,\n          routeId: actionMatch.route.id,\n        }),\n      };\n    } else {\n      let results = await callDataStrategy(\n        \"action\",\n        request,\n        [actionMatch],\n        matches\n      );\n      result = results[0];\n\n      if (request.signal.aborted) {\n        return { shortCircuited: true };\n      }\n    }\n\n    if (isRedirectResult(result)) {\n      let replace: boolean;\n      if (opts && opts.replace != null) {\n        replace = opts.replace;\n      } else {\n        // If the user didn't explicity indicate replace behavior, replace if\n        // we redirected to the exact same location we're currently at to avoid\n        // double back-buttons\n        let location = normalizeRedirectLocation(\n          result.response.headers.get(\"Location\")!,\n          new URL(request.url),\n          basename\n        );\n        replace = location === state.location.pathname + state.location.search;\n      }\n      await startRedirectNavigation(request, result, {\n        submission,\n        replace,\n      });\n      return { shortCircuited: true };\n    }\n\n    if (isDeferredResult(result)) {\n      throw getInternalRouterError(400, { type: \"defer-action\" });\n    }\n\n    if (isErrorResult(result)) {\n      // Store off the pending error - we use it to determine which loaders\n      // to call and will commit it when we complete the navigation\n      let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n\n      // By default, all submissions are REPLACE navigations, but if the\n      // action threw an error that'll be rendered in an errorElement, we fall\n      // back to PUSH so that the user can use the back button to get back to\n      // the pre-submission form location to try again\n      if ((opts && opts.replace) !== true) {\n        pendingAction = HistoryAction.Push;\n      }\n\n      return {\n        pendingActionResult: [boundaryMatch.route.id, result],\n      };\n    }\n\n    return {\n      pendingActionResult: [actionMatch.route.id, result],\n    };\n  }\n\n  // Call all applicable loaders for the given matches, handling redirects,\n  // errors, etc.\n  async function handleLoaders(\n    request: Request,\n    location: Location,\n    matches: AgnosticDataRouteMatch[],\n    overrideNavigation?: Navigation,\n    submission?: Submission,\n    fetcherSubmission?: Submission,\n    replace?: boolean,\n    initialHydration?: boolean,\n    flushSync?: boolean,\n    pendingActionResult?: PendingActionResult\n  ): Promise<HandleLoadersResult> {\n    // Figure out the right navigation we want to use for data loading\n    let loadingNavigation =\n      overrideNavigation || getLoadingNavigation(location, submission);\n\n    // If this was a redirect from an action we don't have a \"submission\" but\n    // we have it on the loading navigation so use that if available\n    let activeSubmission =\n      submission ||\n      fetcherSubmission ||\n      getSubmissionFromNavigation(loadingNavigation);\n\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n      init.history,\n      state,\n      matches,\n      activeSubmission,\n      location,\n      future.v7_partialHydration && initialHydration === true,\n      future.unstable_skipActionErrorRevalidation,\n      isRevalidationRequired,\n      cancelledDeferredRoutes,\n      cancelledFetcherLoads,\n      deletedFetchers,\n      fetchLoadMatches,\n      fetchRedirectIds,\n      routesToUse,\n      basename,\n      pendingActionResult\n    );\n\n    // Cancel pending deferreds for no-longer-matched routes or routes we're\n    // about to reload.  Note that if this is an action reload we would have\n    // already cancelled all pending deferreds so this would be a no-op\n    cancelActiveDeferreds(\n      (routeId) =>\n        !(matches && matches.some((m) => m.route.id === routeId)) ||\n        (matchesToLoad && matchesToLoad.some((m) => m.route.id === routeId))\n    );\n\n    pendingNavigationLoadId = ++incrementingLoadId;\n\n    // Short circuit if we have no loaders to run\n    if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n      let updatedFetchers = markFetchRedirectsDone();\n      completeNavigation(\n        location,\n        {\n          matches,\n          loaderData: {},\n          // Commit pending error if we're short circuiting\n          errors:\n            pendingActionResult && isErrorResult(pendingActionResult[1])\n              ? { [pendingActionResult[0]]: pendingActionResult[1].error }\n              : null,\n          ...getActionDataForCommit(pendingActionResult),\n          ...(updatedFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n        },\n        { flushSync }\n      );\n      return { shortCircuited: true };\n    }\n\n    // If this is an uninterrupted revalidation, we remain in our current idle\n    // state.  If not, we need to switch to our loading state and load data,\n    // preserving any new action data or existing action data (in the case of\n    // a revalidation interrupting an actionReload)\n    // If we have partialHydration enabled, then don't update the state for the\n    // initial data load since it's not a \"navigation\"\n    if (\n      !isUninterruptedRevalidation &&\n      (!future.v7_partialHydration || !initialHydration)\n    ) {\n      revalidatingFetchers.forEach((rf) => {\n        let fetcher = state.fetchers.get(rf.key);\n        let revalidatingFetcher = getLoadingFetcher(\n          undefined,\n          fetcher ? fetcher.data : undefined\n        );\n        state.fetchers.set(rf.key, revalidatingFetcher);\n      });\n\n      let actionData: Record<string, RouteData> | null | undefined;\n      if (pendingActionResult && !isErrorResult(pendingActionResult[1])) {\n        // This is cast to `any` currently because `RouteData`uses any and it\n        // would be a breaking change to use any.\n        // TODO: v7 - change `RouteData` to use `unknown` instead of `any`\n        actionData = {\n          [pendingActionResult[0]]: pendingActionResult[1].data as any,\n        };\n      } else if (state.actionData) {\n        if (Object.keys(state.actionData).length === 0) {\n          actionData = null;\n        } else {\n          actionData = state.actionData;\n        }\n      }\n\n      updateState(\n        {\n          navigation: loadingNavigation,\n          ...(actionData !== undefined ? { actionData } : {}),\n          ...(revalidatingFetchers.length > 0\n            ? { fetchers: new Map(state.fetchers) }\n            : {}),\n        },\n        {\n          flushSync,\n        }\n      );\n    }\n\n    revalidatingFetchers.forEach((rf) => {\n      if (fetchControllers.has(rf.key)) {\n        abortFetcher(rf.key);\n      }\n      if (rf.controller) {\n        // Fetchers use an independent AbortController so that aborting a fetcher\n        // (via deleteFetcher) does not abort the triggering navigation that\n        // triggered the revalidation\n        fetchControllers.set(rf.key, rf.controller);\n      }\n    });\n\n    // Proxy navigation abort through to revalidation fetchers\n    let abortPendingFetchRevalidations = () =>\n      revalidatingFetchers.forEach((f) => abortFetcher(f.key));\n    if (pendingNavigationController) {\n      pendingNavigationController.signal.addEventListener(\n        \"abort\",\n        abortPendingFetchRevalidations\n      );\n    }\n\n    let { loaderResults, fetcherResults } =\n      await callLoadersAndMaybeResolveData(\n        state.matches,\n        matches,\n        matchesToLoad,\n        revalidatingFetchers,\n        request\n      );\n\n    if (request.signal.aborted) {\n      return { shortCircuited: true };\n    }\n\n    // Clean up _after_ loaders have completed.  Don't clean up if we short\n    // circuited because fetchControllers would have been aborted and\n    // reassigned to new controllers for the next navigation\n    if (pendingNavigationController) {\n      pendingNavigationController.signal.removeEventListener(\n        \"abort\",\n        abortPendingFetchRevalidations\n      );\n    }\n    revalidatingFetchers.forEach((rf) => fetchControllers.delete(rf.key));\n\n    // If any loaders returned a redirect Response, start a new REPLACE navigation\n    let redirect = findRedirect([...loaderResults, ...fetcherResults]);\n    if (redirect) {\n      if (redirect.idx >= matchesToLoad.length) {\n        // If this redirect came from a fetcher make sure we mark it in\n        // fetchRedirectIds so it doesn't get revalidated on the next set of\n        // loader executions\n        let fetcherKey =\n          revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n        fetchRedirectIds.add(fetcherKey);\n      }\n      await startRedirectNavigation(request, redirect.result, {\n        replace,\n      });\n      return { shortCircuited: true };\n    }\n\n    // Process and commit output from loaders\n    let { loaderData, errors } = processLoaderData(\n      state,\n      matches,\n      matchesToLoad,\n      loaderResults,\n      pendingActionResult,\n      revalidatingFetchers,\n      fetcherResults,\n      activeDeferreds\n    );\n\n    // Wire up subscribers to update loaderData as promises settle\n    activeDeferreds.forEach((deferredData, routeId) => {\n      deferredData.subscribe((aborted) => {\n        // Note: No need to updateState here since the TrackedPromise on\n        // loaderData is stable across resolve/reject\n        // Remove this instance if we were aborted or if promises have settled\n        if (aborted || deferredData.done) {\n          activeDeferreds.delete(routeId);\n        }\n      });\n    });\n\n    // During partial hydration, preserve SSR errors for routes that don't re-run\n    if (future.v7_partialHydration && initialHydration && state.errors) {\n      Object.entries(state.errors)\n        .filter(([id]) => !matchesToLoad.some((m) => m.route.id === id))\n        .forEach(([routeId, error]) => {\n          errors = Object.assign(errors || {}, { [routeId]: error });\n        });\n    }\n\n    let updatedFetchers = markFetchRedirectsDone();\n    let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n    let shouldUpdateFetchers =\n      updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n\n    return {\n      loaderData,\n      errors,\n      ...(shouldUpdateFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n    };\n  }\n\n  // Trigger a fetcher load/submit for the given fetcher key\n  function fetch(\n    key: string,\n    routeId: string,\n    href: string | null,\n    opts?: RouterFetchOptions\n  ) {\n    if (isServer) {\n      throw new Error(\n        \"router.fetch() was called during the server render, but it shouldn't be. \" +\n          \"You are likely calling a useFetcher() method in the body of your component. \" +\n          \"Try moving it to a useEffect or a callback.\"\n      );\n    }\n\n    if (fetchControllers.has(key)) abortFetcher(key);\n    let flushSync = (opts && opts.unstable_flushSync) === true;\n\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let normalizedPath = normalizeTo(\n      state.location,\n      state.matches,\n      basename,\n      future.v7_prependBasename,\n      href,\n      future.v7_relativeSplatPath,\n      routeId,\n      opts?.relative\n    );\n    let matches = matchRoutes(routesToUse, normalizedPath, basename);\n\n    if (!matches) {\n      setFetcherError(\n        key,\n        routeId,\n        getInternalRouterError(404, { pathname: normalizedPath }),\n        { flushSync }\n      );\n      return;\n    }\n\n    let { path, submission, error } = normalizeNavigateOptions(\n      future.v7_normalizeFormMethod,\n      true,\n      normalizedPath,\n      opts\n    );\n\n    if (error) {\n      setFetcherError(key, routeId, error, { flushSync });\n      return;\n    }\n\n    let match = getTargetMatch(matches, path);\n\n    pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n    if (submission && isMutationMethod(submission.formMethod)) {\n      handleFetcherAction(\n        key,\n        routeId,\n        path,\n        match,\n        matches,\n        flushSync,\n        submission\n      );\n      return;\n    }\n\n    // Store off the match so we can call it's shouldRevalidate on subsequent\n    // revalidations\n    fetchLoadMatches.set(key, { routeId, path });\n    handleFetcherLoader(\n      key,\n      routeId,\n      path,\n      match,\n      matches,\n      flushSync,\n      submission\n    );\n  }\n\n  // Call the action for the matched fetcher.submit(), and then handle redirects,\n  // errors, and revalidation\n  async function handleFetcherAction(\n    key: string,\n    routeId: string,\n    path: string,\n    match: AgnosticDataRouteMatch,\n    requestMatches: AgnosticDataRouteMatch[],\n    flushSync: boolean,\n    submission: Submission\n  ) {\n    interruptActiveLoads();\n    fetchLoadMatches.delete(key);\n\n    if (!match.route.action && !match.route.lazy) {\n      let error = getInternalRouterError(405, {\n        method: submission.formMethod,\n        pathname: path,\n        routeId: routeId,\n      });\n      setFetcherError(key, routeId, error, { flushSync });\n      return;\n    }\n\n    // Put this fetcher into it's submitting state\n    let existingFetcher = state.fetchers.get(key);\n    updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n      flushSync,\n    });\n\n    // Call the action for the fetcher\n    let abortController = new AbortController();\n    let fetchRequest = createClientSideRequest(\n      init.history,\n      path,\n      abortController.signal,\n      submission\n    );\n    fetchControllers.set(key, abortController);\n\n    let originatingLoadId = incrementingLoadId;\n    let actionResults = await callDataStrategy(\n      \"action\",\n      fetchRequest,\n      [match],\n      requestMatches\n    );\n    let actionResult = actionResults[0];\n\n    if (fetchRequest.signal.aborted) {\n      // We can delete this so long as we weren't aborted by our own fetcher\n      // re-submit which would have put _new_ controller is in fetchControllers\n      if (fetchControllers.get(key) === abortController) {\n        fetchControllers.delete(key);\n      }\n      return;\n    }\n\n    // When using v7_fetcherPersist, we don't want errors bubbling up to the UI\n    // or redirects processed for unmounted fetchers so we just revert them to\n    // idle\n    if (future.v7_fetcherPersist && deletedFetchers.has(key)) {\n      if (isRedirectResult(actionResult) || isErrorResult(actionResult)) {\n        updateFetcherState(key, getDoneFetcher(undefined));\n        return;\n      }\n      // Let SuccessResult's fall through for revalidation\n    } else {\n      if (isRedirectResult(actionResult)) {\n        fetchControllers.delete(key);\n        if (pendingNavigationLoadId > originatingLoadId) {\n          // A new navigation was kicked off after our action started, so that\n          // should take precedence over this redirect navigation.  We already\n          // set isRevalidationRequired so all loaders for the new route should\n          // fire unless opted out via shouldRevalidate\n          updateFetcherState(key, getDoneFetcher(undefined));\n          return;\n        } else {\n          fetchRedirectIds.add(key);\n          updateFetcherState(key, getLoadingFetcher(submission));\n          return startRedirectNavigation(fetchRequest, actionResult, {\n            fetcherSubmission: submission,\n          });\n        }\n      }\n\n      // Process any non-redirect errors thrown\n      if (isErrorResult(actionResult)) {\n        setFetcherError(key, routeId, actionResult.error);\n        return;\n      }\n    }\n\n    if (isDeferredResult(actionResult)) {\n      throw getInternalRouterError(400, { type: \"defer-action\" });\n    }\n\n    // Start the data load for current matches, or the next location if we're\n    // in the middle of a navigation\n    let nextLocation = state.navigation.location || state.location;\n    let revalidationRequest = createClientSideRequest(\n      init.history,\n      nextLocation,\n      abortController.signal\n    );\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let matches =\n      state.navigation.state !== \"idle\"\n        ? matchRoutes(routesToUse, state.navigation.location, basename)\n        : state.matches;\n\n    invariant(matches, \"Didn't find any matches after fetcher action\");\n\n    let loadId = ++incrementingLoadId;\n    fetchReloadIds.set(key, loadId);\n\n    let loadFetcher = getLoadingFetcher(submission, actionResult.data);\n    state.fetchers.set(key, loadFetcher);\n\n    let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n      init.history,\n      state,\n      matches,\n      submission,\n      nextLocation,\n      false,\n      future.unstable_skipActionErrorRevalidation,\n      isRevalidationRequired,\n      cancelledDeferredRoutes,\n      cancelledFetcherLoads,\n      deletedFetchers,\n      fetchLoadMatches,\n      fetchRedirectIds,\n      routesToUse,\n      basename,\n      [match.route.id, actionResult]\n    );\n\n    // Put all revalidating fetchers into the loading state, except for the\n    // current fetcher which we want to keep in it's current loading state which\n    // contains it's action submission info + action data\n    revalidatingFetchers\n      .filter((rf) => rf.key !== key)\n      .forEach((rf) => {\n        let staleKey = rf.key;\n        let existingFetcher = state.fetchers.get(staleKey);\n        let revalidatingFetcher = getLoadingFetcher(\n          undefined,\n          existingFetcher ? existingFetcher.data : undefined\n        );\n        state.fetchers.set(staleKey, revalidatingFetcher);\n        if (fetchControllers.has(staleKey)) {\n          abortFetcher(staleKey);\n        }\n        if (rf.controller) {\n          fetchControllers.set(staleKey, rf.controller);\n        }\n      });\n\n    updateState({ fetchers: new Map(state.fetchers) });\n\n    let abortPendingFetchRevalidations = () =>\n      revalidatingFetchers.forEach((rf) => abortFetcher(rf.key));\n\n    abortController.signal.addEventListener(\n      \"abort\",\n      abortPendingFetchRevalidations\n    );\n\n    let { loaderResults, fetcherResults } =\n      await callLoadersAndMaybeResolveData(\n        state.matches,\n        matches,\n        matchesToLoad,\n        revalidatingFetchers,\n        revalidationRequest\n      );\n\n    if (abortController.signal.aborted) {\n      return;\n    }\n\n    abortController.signal.removeEventListener(\n      \"abort\",\n      abortPendingFetchRevalidations\n    );\n\n    fetchReloadIds.delete(key);\n    fetchControllers.delete(key);\n    revalidatingFetchers.forEach((r) => fetchControllers.delete(r.key));\n\n    let redirect = findRedirect([...loaderResults, ...fetcherResults]);\n    if (redirect) {\n      if (redirect.idx >= matchesToLoad.length) {\n        // If this redirect came from a fetcher make sure we mark it in\n        // fetchRedirectIds so it doesn't get revalidated on the next set of\n        // loader executions\n        let fetcherKey =\n          revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n        fetchRedirectIds.add(fetcherKey);\n      }\n      return startRedirectNavigation(revalidationRequest, redirect.result);\n    }\n\n    // Process and commit output from loaders\n    let { loaderData, errors } = processLoaderData(\n      state,\n      state.matches,\n      matchesToLoad,\n      loaderResults,\n      undefined,\n      revalidatingFetchers,\n      fetcherResults,\n      activeDeferreds\n    );\n\n    // Since we let revalidations complete even if the submitting fetcher was\n    // deleted, only put it back to idle if it hasn't been deleted\n    if (state.fetchers.has(key)) {\n      let doneFetcher = getDoneFetcher(actionResult.data);\n      state.fetchers.set(key, doneFetcher);\n    }\n\n    abortStaleFetchLoads(loadId);\n\n    // If we are currently in a navigation loading state and this fetcher is\n    // more recent than the navigation, we want the newer data so abort the\n    // navigation and complete it with the fetcher data\n    if (\n      state.navigation.state === \"loading\" &&\n      loadId > pendingNavigationLoadId\n    ) {\n      invariant(pendingAction, \"Expected pending action\");\n      pendingNavigationController && pendingNavigationController.abort();\n\n      completeNavigation(state.navigation.location, {\n        matches,\n        loaderData,\n        errors,\n        fetchers: new Map(state.fetchers),\n      });\n    } else {\n      // otherwise just update with the fetcher data, preserving any existing\n      // loaderData for loaders that did not need to reload.  We have to\n      // manually merge here since we aren't going through completeNavigation\n      updateState({\n        errors,\n        loaderData: mergeLoaderData(\n          state.loaderData,\n          loaderData,\n          matches,\n          errors\n        ),\n        fetchers: new Map(state.fetchers),\n      });\n      isRevalidationRequired = false;\n    }\n  }\n\n  // Call the matched loader for fetcher.load(), handling redirects, errors, etc.\n  async function handleFetcherLoader(\n    key: string,\n    routeId: string,\n    path: string,\n    match: AgnosticDataRouteMatch,\n    matches: AgnosticDataRouteMatch[],\n    flushSync: boolean,\n    submission?: Submission\n  ) {\n    let existingFetcher = state.fetchers.get(key);\n    updateFetcherState(\n      key,\n      getLoadingFetcher(\n        submission,\n        existingFetcher ? existingFetcher.data : undefined\n      ),\n      { flushSync }\n    );\n\n    // Call the loader for this fetcher route match\n    let abortController = new AbortController();\n    let fetchRequest = createClientSideRequest(\n      init.history,\n      path,\n      abortController.signal\n    );\n    fetchControllers.set(key, abortController);\n\n    let originatingLoadId = incrementingLoadId;\n    let results = await callDataStrategy(\n      \"loader\",\n      fetchRequest,\n      [match],\n      matches\n    );\n    let result = results[0];\n\n    // Deferred isn't supported for fetcher loads, await everything and treat it\n    // as a normal load.  resolveDeferredData will return undefined if this\n    // fetcher gets aborted, so we just leave result untouched and short circuit\n    // below if that happens\n    if (isDeferredResult(result)) {\n      result =\n        (await resolveDeferredData(result, fetchRequest.signal, true)) ||\n        result;\n    }\n\n    // We can delete this so long as we weren't aborted by our our own fetcher\n    // re-load which would have put _new_ controller is in fetchControllers\n    if (fetchControllers.get(key) === abortController) {\n      fetchControllers.delete(key);\n    }\n\n    if (fetchRequest.signal.aborted) {\n      return;\n    }\n\n    // We don't want errors bubbling up or redirects followed for unmounted\n    // fetchers, so short circuit here if it was removed from the UI\n    if (deletedFetchers.has(key)) {\n      updateFetcherState(key, getDoneFetcher(undefined));\n      return;\n    }\n\n    // If the loader threw a redirect Response, start a new REPLACE navigation\n    if (isRedirectResult(result)) {\n      if (pendingNavigationLoadId > originatingLoadId) {\n        // A new navigation was kicked off after our loader started, so that\n        // should take precedence over this redirect navigation\n        updateFetcherState(key, getDoneFetcher(undefined));\n        return;\n      } else {\n        fetchRedirectIds.add(key);\n        await startRedirectNavigation(fetchRequest, result);\n        return;\n      }\n    }\n\n    // Process any non-redirect errors thrown\n    if (isErrorResult(result)) {\n      setFetcherError(key, routeId, result.error);\n      return;\n    }\n\n    invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n\n    // Put the fetcher back into an idle state\n    updateFetcherState(key, getDoneFetcher(result.data));\n  }\n\n  /**\n   * Utility function to handle redirects returned from an action or loader.\n   * Normally, a redirect \"replaces\" the navigation that triggered it.  So, for\n   * example:\n   *\n   *  - user is on /a\n   *  - user clicks a link to /b\n   *  - loader for /b redirects to /c\n   *\n   * In a non-JS app the browser would track the in-flight navigation to /b and\n   * then replace it with /c when it encountered the redirect response.  In\n   * the end it would only ever update the URL bar with /c.\n   *\n   * In client-side routing using pushState/replaceState, we aim to emulate\n   * this behavior and we also do not update history until the end of the\n   * navigation (including processed redirects).  This means that we never\n   * actually touch history until we've processed redirects, so we just use\n   * the history action from the original navigation (PUSH or REPLACE).\n   */\n  async function startRedirectNavigation(\n    request: Request,\n    redirect: RedirectResult,\n    {\n      submission,\n      fetcherSubmission,\n      replace,\n    }: {\n      submission?: Submission;\n      fetcherSubmission?: Submission;\n      replace?: boolean;\n    } = {}\n  ) {\n    if (redirect.response.headers.has(\"X-Remix-Revalidate\")) {\n      isRevalidationRequired = true;\n    }\n\n    let location = redirect.response.headers.get(\"Location\");\n    invariant(location, \"Expected a Location header on the redirect Response\");\n    location = normalizeRedirectLocation(\n      location,\n      new URL(request.url),\n      basename\n    );\n    let redirectLocation = createLocation(state.location, location, {\n      _isRedirect: true,\n    });\n\n    if (isBrowser) {\n      let isDocumentReload = false;\n\n      if (redirect.response.headers.has(\"X-Remix-Reload-Document\")) {\n        // Hard reload if the response contained X-Remix-Reload-Document\n        isDocumentReload = true;\n      } else if (ABSOLUTE_URL_REGEX.test(location)) {\n        const url = init.history.createURL(location);\n        isDocumentReload =\n          // Hard reload if it's an absolute URL to a new origin\n          url.origin !== routerWindow.location.origin ||\n          // Hard reload if it's an absolute URL that does not match our basename\n          stripBasename(url.pathname, basename) == null;\n      }\n\n      if (isDocumentReload) {\n        if (replace) {\n          routerWindow.location.replace(location);\n        } else {\n          routerWindow.location.assign(location);\n        }\n        return;\n      }\n    }\n\n    // There's no need to abort on redirects, since we don't detect the\n    // redirect until the action/loaders have settled\n    pendingNavigationController = null;\n\n    let redirectHistoryAction =\n      replace === true ? HistoryAction.Replace : HistoryAction.Push;\n\n    // Use the incoming submission if provided, fallback on the active one in\n    // state.navigation\n    let { formMethod, formAction, formEncType } = state.navigation;\n    if (\n      !submission &&\n      !fetcherSubmission &&\n      formMethod &&\n      formAction &&\n      formEncType\n    ) {\n      submission = getSubmissionFromNavigation(state.navigation);\n    }\n\n    // If this was a 307/308 submission we want to preserve the HTTP method and\n    // re-submit the GET/POST/PUT/PATCH/DELETE as a submission navigation to the\n    // redirected location\n    let activeSubmission = submission || fetcherSubmission;\n    if (\n      redirectPreserveMethodStatusCodes.has(redirect.response.status) &&\n      activeSubmission &&\n      isMutationMethod(activeSubmission.formMethod)\n    ) {\n      await startNavigation(redirectHistoryAction, redirectLocation, {\n        submission: {\n          ...activeSubmission,\n          formAction: location,\n        },\n        // Preserve this flag across redirects\n        preventScrollReset: pendingPreventScrollReset,\n      });\n    } else {\n      // If we have a navigation submission, we will preserve it through the\n      // redirect navigation\n      let overrideNavigation = getLoadingNavigation(\n        redirectLocation,\n        submission\n      );\n      await startNavigation(redirectHistoryAction, redirectLocation, {\n        overrideNavigation,\n        // Send fetcher submissions through for shouldRevalidate\n        fetcherSubmission,\n        // Preserve this flag across redirects\n        preventScrollReset: pendingPreventScrollReset,\n      });\n    }\n  }\n\n  // Utility wrapper for calling dataStrategy client-side without having to\n  // pass around the manifest, mapRouteProperties, etc.\n  async function callDataStrategy(\n    type: \"loader\" | \"action\",\n    request: Request,\n    matchesToLoad: AgnosticDataRouteMatch[],\n    matches: AgnosticDataRouteMatch[]\n  ): Promise<DataResult[]> {\n    try {\n      let results = await callDataStrategyImpl(\n        dataStrategyImpl,\n        type,\n        request,\n        matchesToLoad,\n        matches,\n        manifest,\n        mapRouteProperties\n      );\n\n      return await Promise.all(\n        results.map((result, i) => {\n          if (isRedirectHandlerResult(result)) {\n            let response = result.result as Response;\n            return {\n              type: ResultType.redirect,\n              response: normalizeRelativeRoutingRedirectResponse(\n                response,\n                request,\n                matchesToLoad[i].route.id,\n                matches,\n                basename,\n                future.v7_relativeSplatPath\n              ),\n            };\n          }\n\n          return convertHandlerResultToDataResult(result);\n        })\n      );\n    } catch (e) {\n      // If the outer dataStrategy method throws, just return the error for all\n      // matches - and it'll naturally bubble to the root\n      return matchesToLoad.map(() => ({\n        type: ResultType.error,\n        error: e,\n      }));\n    }\n  }\n\n  async function callLoadersAndMaybeResolveData(\n    currentMatches: AgnosticDataRouteMatch[],\n    matches: AgnosticDataRouteMatch[],\n    matchesToLoad: AgnosticDataRouteMatch[],\n    fetchersToLoad: RevalidatingFetcher[],\n    request: Request\n  ) {\n    let [loaderResults, ...fetcherResults] = await Promise.all([\n      matchesToLoad.length\n        ? callDataStrategy(\"loader\", request, matchesToLoad, matches)\n        : [],\n      ...fetchersToLoad.map((f) => {\n        if (f.matches && f.match && f.controller) {\n          let fetcherRequest = createClientSideRequest(\n            init.history,\n            f.path,\n            f.controller.signal\n          );\n          return callDataStrategy(\n            \"loader\",\n            fetcherRequest,\n            [f.match],\n            f.matches\n          ).then((r) => r[0]);\n        } else {\n          return Promise.resolve<DataResult>({\n            type: ResultType.error,\n            error: getInternalRouterError(404, {\n              pathname: f.path,\n            }),\n          });\n        }\n      }),\n    ]);\n\n    await Promise.all([\n      resolveDeferredResults(\n        currentMatches,\n        matchesToLoad,\n        loaderResults,\n        loaderResults.map(() => request.signal),\n        false,\n        state.loaderData\n      ),\n      resolveDeferredResults(\n        currentMatches,\n        fetchersToLoad.map((f) => f.match),\n        fetcherResults,\n        fetchersToLoad.map((f) => (f.controller ? f.controller.signal : null)),\n        true\n      ),\n    ]);\n\n    return {\n      loaderResults,\n      fetcherResults,\n    };\n  }\n\n  function interruptActiveLoads() {\n    // Every interruption triggers a revalidation\n    isRevalidationRequired = true;\n\n    // Cancel pending route-level deferreds and mark cancelled routes for\n    // revalidation\n    cancelledDeferredRoutes.push(...cancelActiveDeferreds());\n\n    // Abort in-flight fetcher loads\n    fetchLoadMatches.forEach((_, key) => {\n      if (fetchControllers.has(key)) {\n        cancelledFetcherLoads.push(key);\n        abortFetcher(key);\n      }\n    });\n  }\n\n  function updateFetcherState(\n    key: string,\n    fetcher: Fetcher,\n    opts: { flushSync?: boolean } = {}\n  ) {\n    state.fetchers.set(key, fetcher);\n    updateState(\n      { fetchers: new Map(state.fetchers) },\n      { flushSync: (opts && opts.flushSync) === true }\n    );\n  }\n\n  function setFetcherError(\n    key: string,\n    routeId: string,\n    error: any,\n    opts: { flushSync?: boolean } = {}\n  ) {\n    let boundaryMatch = findNearestBoundary(state.matches, routeId);\n    deleteFetcher(key);\n    updateState(\n      {\n        errors: {\n          [boundaryMatch.route.id]: error,\n        },\n        fetchers: new Map(state.fetchers),\n      },\n      { flushSync: (opts && opts.flushSync) === true }\n    );\n  }\n\n  function getFetcher<TData = any>(key: string): Fetcher<TData> {\n    if (future.v7_fetcherPersist) {\n      activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n      // If this fetcher was previously marked for deletion, unmark it since we\n      // have a new instance\n      if (deletedFetchers.has(key)) {\n        deletedFetchers.delete(key);\n      }\n    }\n    return state.fetchers.get(key) || IDLE_FETCHER;\n  }\n\n  function deleteFetcher(key: string): void {\n    let fetcher = state.fetchers.get(key);\n    // Don't abort the controller if this is a deletion of a fetcher.submit()\n    // in it's loading phase since - we don't want to abort the corresponding\n    // revalidation and want them to complete and land\n    if (\n      fetchControllers.has(key) &&\n      !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))\n    ) {\n      abortFetcher(key);\n    }\n    fetchLoadMatches.delete(key);\n    fetchReloadIds.delete(key);\n    fetchRedirectIds.delete(key);\n    deletedFetchers.delete(key);\n    state.fetchers.delete(key);\n  }\n\n  function deleteFetcherAndUpdateState(key: string): void {\n    if (future.v7_fetcherPersist) {\n      let count = (activeFetchers.get(key) || 0) - 1;\n      if (count <= 0) {\n        activeFetchers.delete(key);\n        deletedFetchers.add(key);\n      } else {\n        activeFetchers.set(key, count);\n      }\n    } else {\n      deleteFetcher(key);\n    }\n    updateState({ fetchers: new Map(state.fetchers) });\n  }\n\n  function abortFetcher(key: string) {\n    let controller = fetchControllers.get(key);\n    invariant(controller, `Expected fetch controller: ${key}`);\n    controller.abort();\n    fetchControllers.delete(key);\n  }\n\n  function markFetchersDone(keys: string[]) {\n    for (let key of keys) {\n      let fetcher = getFetcher(key);\n      let doneFetcher = getDoneFetcher(fetcher.data);\n      state.fetchers.set(key, doneFetcher);\n    }\n  }\n\n  function markFetchRedirectsDone(): boolean {\n    let doneKeys = [];\n    let updatedFetchers = false;\n    for (let key of fetchRedirectIds) {\n      let fetcher = state.fetchers.get(key);\n      invariant(fetcher, `Expected fetcher: ${key}`);\n      if (fetcher.state === \"loading\") {\n        fetchRedirectIds.delete(key);\n        doneKeys.push(key);\n        updatedFetchers = true;\n      }\n    }\n    markFetchersDone(doneKeys);\n    return updatedFetchers;\n  }\n\n  function abortStaleFetchLoads(landedId: number): boolean {\n    let yeetedKeys = [];\n    for (let [key, id] of fetchReloadIds) {\n      if (id < landedId) {\n        let fetcher = state.fetchers.get(key);\n        invariant(fetcher, `Expected fetcher: ${key}`);\n        if (fetcher.state === \"loading\") {\n          abortFetcher(key);\n          fetchReloadIds.delete(key);\n          yeetedKeys.push(key);\n        }\n      }\n    }\n    markFetchersDone(yeetedKeys);\n    return yeetedKeys.length > 0;\n  }\n\n  function getBlocker(key: string, fn: BlockerFunction) {\n    let blocker: Blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n    if (blockerFunctions.get(key) !== fn) {\n      blockerFunctions.set(key, fn);\n    }\n\n    return blocker;\n  }\n\n  function deleteBlocker(key: string) {\n    state.blockers.delete(key);\n    blockerFunctions.delete(key);\n  }\n\n  // Utility function to update blockers, ensuring valid state transitions\n  function updateBlocker(key: string, newBlocker: Blocker) {\n    let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n    // Poor mans state machine :)\n    // https://mermaid.live/edit#pako:eNqVkc9OwzAMxl8l8nnjAYrEtDIOHEBIgwvKJTReGy3_lDpIqO27k6awMG0XcrLlnz87nwdonESogKXXBuE79rq75XZO3-yHds0RJVuv70YrPlUrCEe2HfrORS3rubqZfuhtpg5C9wk5tZ4VKcRUq88q9Z8RS0-48cE1iHJkL0ugbHuFLus9L6spZy8nX9MP2CNdomVaposqu3fGayT8T8-jJQwhepo_UtpgBQaDEUom04dZhAN1aJBDlUKJBxE1ceB2Smj0Mln-IBW5AFU2dwUiktt_2Qaq2dBfaKdEup85UV7Yd-dKjlnkabl2Pvr0DTkTreM\n    invariant(\n      (blocker.state === \"unblocked\" && newBlocker.state === \"blocked\") ||\n        (blocker.state === \"blocked\" && newBlocker.state === \"blocked\") ||\n        (blocker.state === \"blocked\" && newBlocker.state === \"proceeding\") ||\n        (blocker.state === \"blocked\" && newBlocker.state === \"unblocked\") ||\n        (blocker.state === \"proceeding\" && newBlocker.state === \"unblocked\"),\n      `Invalid blocker state transition: ${blocker.state} -> ${newBlocker.state}`\n    );\n\n    let blockers = new Map(state.blockers);\n    blockers.set(key, newBlocker);\n    updateState({ blockers });\n  }\n\n  function shouldBlockNavigation({\n    currentLocation,\n    nextLocation,\n    historyAction,\n  }: {\n    currentLocation: Location;\n    nextLocation: Location;\n    historyAction: HistoryAction;\n  }): string | undefined {\n    if (blockerFunctions.size === 0) {\n      return;\n    }\n\n    // We ony support a single active blocker at the moment since we don't have\n    // any compelling use cases for multi-blocker yet\n    if (blockerFunctions.size > 1) {\n      warning(false, \"A router only supports one blocker at a time\");\n    }\n\n    let entries = Array.from(blockerFunctions.entries());\n    let [blockerKey, blockerFunction] = entries[entries.length - 1];\n    let blocker = state.blockers.get(blockerKey);\n\n    if (blocker && blocker.state === \"proceeding\") {\n      // If the blocker is currently proceeding, we don't need to re-check\n      // it and can let this navigation continue\n      return;\n    }\n\n    // At this point, we know we're unblocked/blocked so we need to check the\n    // user-provided blocker function\n    if (blockerFunction({ currentLocation, nextLocation, historyAction })) {\n      return blockerKey;\n    }\n  }\n\n  function cancelActiveDeferreds(\n    predicate?: (routeId: string) => boolean\n  ): string[] {\n    let cancelledRouteIds: string[] = [];\n    activeDeferreds.forEach((dfd, routeId) => {\n      if (!predicate || predicate(routeId)) {\n        // Cancel the deferred - but do not remove from activeDeferreds here -\n        // we rely on the subscribers to do that so our tests can assert proper\n        // cleanup via _internalActiveDeferreds\n        dfd.cancel();\n        cancelledRouteIds.push(routeId);\n        activeDeferreds.delete(routeId);\n      }\n    });\n    return cancelledRouteIds;\n  }\n\n  // Opt in to capturing and reporting scroll positions during navigations,\n  // used by the <ScrollRestoration> component\n  function enableScrollRestoration(\n    positions: Record<string, number>,\n    getPosition: GetScrollPositionFunction,\n    getKey?: GetScrollRestorationKeyFunction\n  ) {\n    savedScrollPositions = positions;\n    getScrollPosition = getPosition;\n    getScrollRestorationKey = getKey || null;\n\n    // Perform initial hydration scroll restoration, since we miss the boat on\n    // the initial updateState() because we've not yet rendered <ScrollRestoration/>\n    // and therefore have no savedScrollPositions available\n    if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {\n      initialScrollRestored = true;\n      let y = getSavedScrollPosition(state.location, state.matches);\n      if (y != null) {\n        updateState({ restoreScrollPosition: y });\n      }\n    }\n\n    return () => {\n      savedScrollPositions = null;\n      getScrollPosition = null;\n      getScrollRestorationKey = null;\n    };\n  }\n\n  function getScrollKey(location: Location, matches: AgnosticDataRouteMatch[]) {\n    if (getScrollRestorationKey) {\n      let key = getScrollRestorationKey(\n        location,\n        matches.map((m) => convertRouteMatchToUiMatch(m, state.loaderData))\n      );\n      return key || location.key;\n    }\n    return location.key;\n  }\n\n  function saveScrollPosition(\n    location: Location,\n    matches: AgnosticDataRouteMatch[]\n  ): void {\n    if (savedScrollPositions && getScrollPosition) {\n      let key = getScrollKey(location, matches);\n      savedScrollPositions[key] = getScrollPosition();\n    }\n  }\n\n  function getSavedScrollPosition(\n    location: Location,\n    matches: AgnosticDataRouteMatch[]\n  ): number | null {\n    if (savedScrollPositions) {\n      let key = getScrollKey(location, matches);\n      let y = savedScrollPositions[key];\n      if (typeof y === \"number\") {\n        return y;\n      }\n    }\n    return null;\n  }\n\n  function _internalSetRoutes(newRoutes: AgnosticDataRouteObject[]) {\n    manifest = {};\n    inFlightDataRoutes = convertRoutesToDataRoutes(\n      newRoutes,\n      mapRouteProperties,\n      undefined,\n      manifest\n    );\n  }\n\n  router = {\n    get basename() {\n      return basename;\n    },\n    get future() {\n      return future;\n    },\n    get state() {\n      return state;\n    },\n    get routes() {\n      return dataRoutes;\n    },\n    get window() {\n      return routerWindow;\n    },\n    initialize,\n    subscribe,\n    enableScrollRestoration,\n    navigate,\n    fetch,\n    revalidate,\n    // Passthrough to history-aware createHref used by useHref so we get proper\n    // hash-aware URLs in DOM paths\n    createHref: (to: To) => init.history.createHref(to),\n    encodeLocation: (to: To) => init.history.encodeLocation(to),\n    getFetcher,\n    deleteFetcher: deleteFetcherAndUpdateState,\n    dispose,\n    getBlocker,\n    deleteBlocker,\n    _internalFetchControllers: fetchControllers,\n    _internalActiveDeferreds: activeDeferreds,\n    // TODO: Remove setRoutes, it's temporary to avoid dealing with\n    // updating the tree while validating the update algorithm.\n    _internalSetRoutes,\n  };\n\n  return router;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\n\nexport const UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\n\n/**\n * Future flags to toggle new feature behavior\n */\nexport interface StaticHandlerFutureConfig {\n  v7_relativeSplatPath: boolean;\n  v7_throwAbortReason: boolean;\n}\n\nexport interface CreateStaticHandlerOptions {\n  basename?: string;\n  /**\n   * @deprecated Use `mapRouteProperties` instead\n   */\n  detectErrorBoundary?: DetectErrorBoundaryFunction;\n  mapRouteProperties?: MapRoutePropertiesFunction;\n  future?: Partial<StaticHandlerFutureConfig>;\n}\n\nexport function createStaticHandler(\n  routes: AgnosticRouteObject[],\n  opts?: CreateStaticHandlerOptions\n): StaticHandler {\n  invariant(\n    routes.length > 0,\n    \"You must provide a non-empty routes array to createStaticHandler\"\n  );\n\n  let manifest: RouteManifest = {};\n  let basename = (opts ? opts.basename : null) || \"/\";\n  let mapRouteProperties: MapRoutePropertiesFunction;\n  if (opts?.mapRouteProperties) {\n    mapRouteProperties = opts.mapRouteProperties;\n  } else if (opts?.detectErrorBoundary) {\n    // If they are still using the deprecated version, wrap it with the new API\n    let detectErrorBoundary = opts.detectErrorBoundary;\n    mapRouteProperties = (route) => ({\n      hasErrorBoundary: detectErrorBoundary(route),\n    });\n  } else {\n    mapRouteProperties = defaultMapRouteProperties;\n  }\n  // Config driven behavior flags\n  let future: StaticHandlerFutureConfig = {\n    v7_relativeSplatPath: false,\n    v7_throwAbortReason: false,\n    ...(opts ? opts.future : null),\n  };\n\n  let dataRoutes = convertRoutesToDataRoutes(\n    routes,\n    mapRouteProperties,\n    undefined,\n    manifest\n  );\n\n  /**\n   * The query() method is intended for document requests, in which we want to\n   * call an optional action and potentially multiple loaders for all nested\n   * routes.  It returns a StaticHandlerContext object, which is very similar\n   * to the router state (location, loaderData, actionData, errors, etc.) and\n   * also adds SSR-specific information such as the statusCode and headers\n   * from action/loaders Responses.\n   *\n   * It _should_ never throw and should report all errors through the\n   * returned context.errors object, properly associating errors to their error\n   * boundary.  Additionally, it tracks _deepestRenderedBoundaryId which can be\n   * used to emulate React error boundaries during SSr by performing a second\n   * pass only down to the boundaryId.\n   *\n   * The one exception where we do not return a StaticHandlerContext is when a\n   * redirect response is returned or thrown from any action/loader.  We\n   * propagate that out and return the raw Response so the HTTP server can\n   * return it directly.\n   *\n   * - `opts.requestContext` is an optional server context that will be passed\n   *   to actions/loaders in the `context` parameter\n   * - `opts.skipLoaderErrorBubbling` is an optional parameter that will prevent\n   *   the bubbling of errors which allows single-fetch-type implementations\n   *   where the client will handle the bubbling and we may need to return data\n   *   for the handling route\n   */\n  async function query(\n    request: Request,\n    {\n      requestContext,\n      skipLoaderErrorBubbling,\n      unstable_dataStrategy,\n    }: {\n      requestContext?: unknown;\n      skipLoaderErrorBubbling?: boolean;\n      unstable_dataStrategy?: DataStrategyFunction;\n    } = {}\n  ): Promise<StaticHandlerContext | Response> {\n    let url = new URL(request.url);\n    let method = request.method;\n    let location = createLocation(\"\", createPath(url), null, \"default\");\n    let matches = matchRoutes(dataRoutes, location, basename);\n\n    // SSR supports HEAD requests while SPA doesn't\n    if (!isValidMethod(method) && method !== \"HEAD\") {\n      let error = getInternalRouterError(405, { method });\n      let { matches: methodNotAllowedMatches, route } =\n        getShortCircuitMatches(dataRoutes);\n      return {\n        basename,\n        location,\n        matches: methodNotAllowedMatches,\n        loaderData: {},\n        actionData: null,\n        errors: {\n          [route.id]: error,\n        },\n        statusCode: error.status,\n        loaderHeaders: {},\n        actionHeaders: {},\n        activeDeferreds: null,\n      };\n    } else if (!matches) {\n      let error = getInternalRouterError(404, { pathname: location.pathname });\n      let { matches: notFoundMatches, route } =\n        getShortCircuitMatches(dataRoutes);\n      return {\n        basename,\n        location,\n        matches: notFoundMatches,\n        loaderData: {},\n        actionData: null,\n        errors: {\n          [route.id]: error,\n        },\n        statusCode: error.status,\n        loaderHeaders: {},\n        actionHeaders: {},\n        activeDeferreds: null,\n      };\n    }\n\n    let result = await queryImpl(\n      request,\n      location,\n      matches,\n      requestContext,\n      unstable_dataStrategy || null,\n      skipLoaderErrorBubbling === true,\n      null\n    );\n    if (isResponse(result)) {\n      return result;\n    }\n\n    // When returning StaticHandlerContext, we patch back in the location here\n    // since we need it for React Context.  But this helps keep our submit and\n    // loadRouteData operating on a Request instead of a Location\n    return { location, basename, ...result };\n  }\n\n  /**\n   * The queryRoute() method is intended for targeted route requests, either\n   * for fetch ?_data requests or resource route requests.  In this case, we\n   * are only ever calling a single action or loader, and we are returning the\n   * returned value directly.  In most cases, this will be a Response returned\n   * from the action/loader, but it may be a primitive or other value as well -\n   * and in such cases the calling context should handle that accordingly.\n   *\n   * We do respect the throw/return differentiation, so if an action/loader\n   * throws, then this method will throw the value.  This is important so we\n   * can do proper boundary identification in Remix where a thrown Response\n   * must go to the Catch Boundary but a returned Response is happy-path.\n   *\n   * One thing to note is that any Router-initiated Errors that make sense\n   * to associate with a status code will be thrown as an ErrorResponse\n   * instance which include the raw Error, such that the calling context can\n   * serialize the error as they see fit while including the proper response\n   * code.  Examples here are 404 and 405 errors that occur prior to reaching\n   * any user-defined loaders.\n   *\n   * - `opts.routeId` allows you to specify the specific route handler to call.\n   *   If not provided the handler will determine the proper route by matching\n   *   against `request.url`\n   * - `opts.requestContext` is an optional server context that will be passed\n   *    to actions/loaders in the `context` parameter\n   */\n  async function queryRoute(\n    request: Request,\n    {\n      routeId,\n      requestContext,\n      unstable_dataStrategy,\n    }: {\n      requestContext?: unknown;\n      routeId?: string;\n      unstable_dataStrategy?: DataStrategyFunction;\n    } = {}\n  ): Promise<any> {\n    let url = new URL(request.url);\n    let method = request.method;\n    let location = createLocation(\"\", createPath(url), null, \"default\");\n    let matches = matchRoutes(dataRoutes, location, basename);\n\n    // SSR supports HEAD requests while SPA doesn't\n    if (!isValidMethod(method) && method !== \"HEAD\" && method !== \"OPTIONS\") {\n      throw getInternalRouterError(405, { method });\n    } else if (!matches) {\n      throw getInternalRouterError(404, { pathname: location.pathname });\n    }\n\n    let match = routeId\n      ? matches.find((m) => m.route.id === routeId)\n      : getTargetMatch(matches, location);\n\n    if (routeId && !match) {\n      throw getInternalRouterError(403, {\n        pathname: location.pathname,\n        routeId,\n      });\n    } else if (!match) {\n      // This should never hit I don't think?\n      throw getInternalRouterError(404, { pathname: location.pathname });\n    }\n\n    let result = await queryImpl(\n      request,\n      location,\n      matches,\n      requestContext,\n      unstable_dataStrategy || null,\n      false,\n      match\n    );\n\n    if (isResponse(result)) {\n      return result;\n    }\n\n    let error = result.errors ? Object.values(result.errors)[0] : undefined;\n    if (error !== undefined) {\n      // If we got back result.errors, that means the loader/action threw\n      // _something_ that wasn't a Response, but it's not guaranteed/required\n      // to be an `instanceof Error` either, so we have to use throw here to\n      // preserve the \"error\" state outside of queryImpl.\n      throw error;\n    }\n\n    // Pick off the right state value to return\n    if (result.actionData) {\n      return Object.values(result.actionData)[0];\n    }\n\n    if (result.loaderData) {\n      let data = Object.values(result.loaderData)[0];\n      if (result.activeDeferreds?.[match.route.id]) {\n        data[UNSAFE_DEFERRED_SYMBOL] = result.activeDeferreds[match.route.id];\n      }\n      return data;\n    }\n\n    return undefined;\n  }\n\n  async function queryImpl(\n    request: Request,\n    location: Location,\n    matches: AgnosticDataRouteMatch[],\n    requestContext: unknown,\n    unstable_dataStrategy: DataStrategyFunction | null,\n    skipLoaderErrorBubbling: boolean,\n    routeMatch: AgnosticDataRouteMatch | null\n  ): Promise<Omit<StaticHandlerContext, \"location\" | \"basename\"> | Response> {\n    invariant(\n      request.signal,\n      \"query()/queryRoute() requests must contain an AbortController signal\"\n    );\n\n    try {\n      if (isMutationMethod(request.method.toLowerCase())) {\n        let result = await submit(\n          request,\n          matches,\n          routeMatch || getTargetMatch(matches, location),\n          requestContext,\n          unstable_dataStrategy,\n          skipLoaderErrorBubbling,\n          routeMatch != null\n        );\n        return result;\n      }\n\n      let result = await loadRouteData(\n        request,\n        matches,\n        requestContext,\n        unstable_dataStrategy,\n        skipLoaderErrorBubbling,\n        routeMatch\n      );\n      return isResponse(result)\n        ? result\n        : {\n            ...result,\n            actionData: null,\n            actionHeaders: {},\n          };\n    } catch (e) {\n      // If the user threw/returned a Response in callLoaderOrAction for a\n      // `queryRoute` call, we throw the `HandlerResult` to bail out early\n      // and then return or throw the raw Response here accordingly\n      if (isHandlerResult(e) && isResponse(e.result)) {\n        if (e.type === ResultType.error) {\n          throw e.result;\n        }\n        return e.result;\n      }\n      // Redirects are always returned since they don't propagate to catch\n      // boundaries\n      if (isRedirectResponse(e)) {\n        return e;\n      }\n      throw e;\n    }\n  }\n\n  async function submit(\n    request: Request,\n    matches: AgnosticDataRouteMatch[],\n    actionMatch: AgnosticDataRouteMatch,\n    requestContext: unknown,\n    unstable_dataStrategy: DataStrategyFunction | null,\n    skipLoaderErrorBubbling: boolean,\n    isRouteRequest: boolean\n  ): Promise<Omit<StaticHandlerContext, \"location\" | \"basename\"> | Response> {\n    let result: DataResult;\n\n    if (!actionMatch.route.action && !actionMatch.route.lazy) {\n      let error = getInternalRouterError(405, {\n        method: request.method,\n        pathname: new URL(request.url).pathname,\n        routeId: actionMatch.route.id,\n      });\n      if (isRouteRequest) {\n        throw error;\n      }\n      result = {\n        type: ResultType.error,\n        error,\n      };\n    } else {\n      let results = await callDataStrategy(\n        \"action\",\n        request,\n        [actionMatch],\n        matches,\n        isRouteRequest,\n        requestContext,\n        unstable_dataStrategy\n      );\n      result = results[0];\n\n      if (request.signal.aborted) {\n        throwStaticHandlerAbortedError(request, isRouteRequest, future);\n      }\n    }\n\n    if (isRedirectResult(result)) {\n      // Uhhhh - this should never happen, we should always throw these from\n      // callLoaderOrAction, but the type narrowing here keeps TS happy and we\n      // can get back on the \"throw all redirect responses\" train here should\n      // this ever happen :/\n      throw new Response(null, {\n        status: result.response.status,\n        headers: {\n          Location: result.response.headers.get(\"Location\")!,\n        },\n      });\n    }\n\n    if (isDeferredResult(result)) {\n      let error = getInternalRouterError(400, { type: \"defer-action\" });\n      if (isRouteRequest) {\n        throw error;\n      }\n      result = {\n        type: ResultType.error,\n        error,\n      };\n    }\n\n    if (isRouteRequest) {\n      // Note: This should only be non-Response values if we get here, since\n      // isRouteRequest should throw any Response received in callLoaderOrAction\n      if (isErrorResult(result)) {\n        throw result.error;\n      }\n\n      return {\n        matches: [actionMatch],\n        loaderData: {},\n        actionData: { [actionMatch.route.id]: result.data },\n        errors: null,\n        // Note: statusCode + headers are unused here since queryRoute will\n        // return the raw Response or value\n        statusCode: 200,\n        loaderHeaders: {},\n        actionHeaders: {},\n        activeDeferreds: null,\n      };\n    }\n\n    // Create a GET request for the loaders\n    let loaderRequest = new Request(request.url, {\n      headers: request.headers,\n      redirect: request.redirect,\n      signal: request.signal,\n    });\n\n    if (isErrorResult(result)) {\n      // Store off the pending error - we use it to determine which loaders\n      // to call and will commit it when we complete the navigation\n      let boundaryMatch = skipLoaderErrorBubbling\n        ? actionMatch\n        : findNearestBoundary(matches, actionMatch.route.id);\n\n      let context = await loadRouteData(\n        loaderRequest,\n        matches,\n        requestContext,\n        unstable_dataStrategy,\n        skipLoaderErrorBubbling,\n        null,\n        [boundaryMatch.route.id, result]\n      );\n\n      // action status codes take precedence over loader status codes\n      return {\n        ...context,\n        statusCode: isRouteErrorResponse(result.error)\n          ? result.error.status\n          : result.statusCode != null\n          ? result.statusCode\n          : 500,\n        actionData: null,\n        actionHeaders: {\n          ...(result.headers ? { [actionMatch.route.id]: result.headers } : {}),\n        },\n      };\n    }\n\n    let context = await loadRouteData(\n      loaderRequest,\n      matches,\n      requestContext,\n      unstable_dataStrategy,\n      skipLoaderErrorBubbling,\n      null\n    );\n\n    return {\n      ...context,\n      actionData: {\n        [actionMatch.route.id]: result.data,\n      },\n      // action status codes take precedence over loader status codes\n      ...(result.statusCode ? { statusCode: result.statusCode } : {}),\n      actionHeaders: result.headers\n        ? { [actionMatch.route.id]: result.headers }\n        : {},\n    };\n  }\n\n  async function loadRouteData(\n    request: Request,\n    matches: AgnosticDataRouteMatch[],\n    requestContext: unknown,\n    unstable_dataStrategy: DataStrategyFunction | null,\n    skipLoaderErrorBubbling: boolean,\n    routeMatch: AgnosticDataRouteMatch | null,\n    pendingActionResult?: PendingActionResult\n  ): Promise<\n    | Omit<\n        StaticHandlerContext,\n        \"location\" | \"basename\" | \"actionData\" | \"actionHeaders\"\n      >\n    | Response\n  > {\n    let isRouteRequest = routeMatch != null;\n\n    // Short circuit if we have no loaders to run (queryRoute())\n    if (\n      isRouteRequest &&\n      !routeMatch?.route.loader &&\n      !routeMatch?.route.lazy\n    ) {\n      throw getInternalRouterError(400, {\n        method: request.method,\n        pathname: new URL(request.url).pathname,\n        routeId: routeMatch?.route.id,\n      });\n    }\n\n    let requestMatches = routeMatch\n      ? [routeMatch]\n      : pendingActionResult && isErrorResult(pendingActionResult[1])\n      ? getLoaderMatchesUntilBoundary(matches, pendingActionResult[0])\n      : matches;\n    let matchesToLoad = requestMatches.filter(\n      (m) => m.route.loader || m.route.lazy\n    );\n\n    // Short circuit if we have no loaders to run (query())\n    if (matchesToLoad.length === 0) {\n      return {\n        matches,\n        // Add a null for all matched routes for proper revalidation on the client\n        loaderData: matches.reduce(\n          (acc, m) => Object.assign(acc, { [m.route.id]: null }),\n          {}\n        ),\n        errors:\n          pendingActionResult && isErrorResult(pendingActionResult[1])\n            ? {\n                [pendingActionResult[0]]: pendingActionResult[1].error,\n              }\n            : null,\n        statusCode: 200,\n        loaderHeaders: {},\n        activeDeferreds: null,\n      };\n    }\n\n    let results = await callDataStrategy(\n      \"loader\",\n      request,\n      matchesToLoad,\n      matches,\n      isRouteRequest,\n      requestContext,\n      unstable_dataStrategy\n    );\n\n    if (request.signal.aborted) {\n      throwStaticHandlerAbortedError(request, isRouteRequest, future);\n    }\n\n    // Process and commit output from loaders\n    let activeDeferreds = new Map<string, DeferredData>();\n    let context = processRouteLoaderData(\n      matches,\n      matchesToLoad,\n      results,\n      pendingActionResult,\n      activeDeferreds,\n      skipLoaderErrorBubbling\n    );\n\n    // Add a null for any non-loader matches for proper revalidation on the client\n    let executedLoaders = new Set<string>(\n      matchesToLoad.map((match) => match.route.id)\n    );\n    matches.forEach((match) => {\n      if (!executedLoaders.has(match.route.id)) {\n        context.loaderData[match.route.id] = null;\n      }\n    });\n\n    return {\n      ...context,\n      matches,\n      activeDeferreds:\n        activeDeferreds.size > 0\n          ? Object.fromEntries(activeDeferreds.entries())\n          : null,\n    };\n  }\n\n  // Utility wrapper for calling dataStrategy server-side without having to\n  // pass around the manifest, mapRouteProperties, etc.\n  async function callDataStrategy(\n    type: \"loader\" | \"action\",\n    request: Request,\n    matchesToLoad: AgnosticDataRouteMatch[],\n    matches: AgnosticDataRouteMatch[],\n    isRouteRequest: boolean,\n    requestContext: unknown,\n    unstable_dataStrategy: DataStrategyFunction | null\n  ): Promise<DataResult[]> {\n    let results = await callDataStrategyImpl(\n      unstable_dataStrategy || defaultDataStrategy,\n      type,\n      request,\n      matchesToLoad,\n      matches,\n      manifest,\n      mapRouteProperties,\n      requestContext\n    );\n\n    return await Promise.all(\n      results.map((result, i) => {\n        if (isRedirectHandlerResult(result)) {\n          let response = result.result as Response;\n          // Throw redirects and let the server handle them with an HTTP redirect\n          throw normalizeRelativeRoutingRedirectResponse(\n            response,\n            request,\n            matchesToLoad[i].route.id,\n            matches,\n            basename,\n            future.v7_relativeSplatPath\n          );\n        }\n        if (isResponse(result.result) && isRouteRequest) {\n          // For SSR single-route requests, we want to hand Responses back\n          // directly without unwrapping\n          throw result;\n        }\n\n        return convertHandlerResultToDataResult(result);\n      })\n    );\n  }\n\n  return {\n    dataRoutes,\n    query,\n    queryRoute,\n  };\n}\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Helpers\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Given an existing StaticHandlerContext and an error thrown at render time,\n * provide an updated StaticHandlerContext suitable for a second SSR render\n */\nexport function getStaticContextFromError(\n  routes: AgnosticDataRouteObject[],\n  context: StaticHandlerContext,\n  error: any\n) {\n  let newContext: StaticHandlerContext = {\n    ...context,\n    statusCode: isRouteErrorResponse(error) ? error.status : 500,\n    errors: {\n      [context._deepestRenderedBoundaryId || routes[0].id]: error,\n    },\n  };\n  return newContext;\n}\n\nfunction throwStaticHandlerAbortedError(\n  request: Request,\n  isRouteRequest: boolean,\n  future: StaticHandlerFutureConfig\n) {\n  if (future.v7_throwAbortReason && request.signal.reason !== undefined) {\n    throw request.signal.reason;\n  }\n\n  let method = isRouteRequest ? \"queryRoute\" : \"query\";\n  throw new Error(`${method}() call aborted: ${request.method} ${request.url}`);\n}\n\nfunction isSubmissionNavigation(\n  opts: BaseNavigateOrFetchOptions\n): opts is SubmissionNavigateOptions {\n  return (\n    opts != null &&\n    ((\"formData\" in opts && opts.formData != null) ||\n      (\"body\" in opts && opts.body !== undefined))\n  );\n}\n\nfunction normalizeTo(\n  location: Path,\n  matches: AgnosticDataRouteMatch[],\n  basename: string,\n  prependBasename: boolean,\n  to: To | null,\n  v7_relativeSplatPath: boolean,\n  fromRouteId?: string,\n  relative?: RelativeRoutingType\n) {\n  let contextualMatches: AgnosticDataRouteMatch[];\n  let activeRouteMatch: AgnosticDataRouteMatch | undefined;\n  if (fromRouteId) {\n    // Grab matches up to the calling route so our route-relative logic is\n    // relative to the correct source route\n    contextualMatches = [];\n    for (let match of matches) {\n      contextualMatches.push(match);\n      if (match.route.id === fromRouteId) {\n        activeRouteMatch = match;\n        break;\n      }\n    }\n  } else {\n    contextualMatches = matches;\n    activeRouteMatch = matches[matches.length - 1];\n  }\n\n  // Resolve the relative path\n  let path = resolveTo(\n    to ? to : \".\",\n    getResolveToMatches(contextualMatches, v7_relativeSplatPath),\n    stripBasename(location.pathname, basename) || location.pathname,\n    relative === \"path\"\n  );\n\n  // When `to` is not specified we inherit search/hash from the current\n  // location, unlike when to=\".\" and we just inherit the path.\n  // See https://github.com/remix-run/remix/issues/927\n  if (to == null) {\n    path.search = location.search;\n    path.hash = location.hash;\n  }\n\n  // Add an ?index param for matched index routes if we don't already have one\n  if (\n    (to == null || to === \"\" || to === \".\") &&\n    activeRouteMatch &&\n    activeRouteMatch.route.index &&\n    !hasNakedIndexQuery(path.search)\n  ) {\n    path.search = path.search\n      ? path.search.replace(/^\\?/, \"?index&\")\n      : \"?index\";\n  }\n\n  // If we're operating within a basename, prepend it to the pathname.  If\n  // this is a root navigation, then just use the raw basename which allows\n  // the basename to have full control over the presence of a trailing slash\n  // on root actions\n  if (prependBasename && basename !== \"/\") {\n    path.pathname =\n      path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n  }\n\n  return createPath(path);\n}\n\n// Normalize navigation options by converting formMethod=GET formData objects to\n// URLSearchParams so they behave identically to links with query params\nfunction normalizeNavigateOptions(\n  normalizeFormMethod: boolean,\n  isFetcher: boolean,\n  path: string,\n  opts?: BaseNavigateOrFetchOptions\n): {\n  path: string;\n  submission?: Submission;\n  error?: ErrorResponseImpl;\n} {\n  // Return location verbatim on non-submission navigations\n  if (!opts || !isSubmissionNavigation(opts)) {\n    return { path };\n  }\n\n  if (opts.formMethod && !isValidMethod(opts.formMethod)) {\n    return {\n      path,\n      error: getInternalRouterError(405, { method: opts.formMethod }),\n    };\n  }\n\n  let getInvalidBodyError = () => ({\n    path,\n    error: getInternalRouterError(400, { type: \"invalid-body\" }),\n  });\n\n  // Create a Submission on non-GET navigations\n  let rawFormMethod = opts.formMethod || \"get\";\n  let formMethod = normalizeFormMethod\n    ? (rawFormMethod.toUpperCase() as V7_FormMethod)\n    : (rawFormMethod.toLowerCase() as FormMethod);\n  let formAction = stripHashFromPath(path);\n\n  if (opts.body !== undefined) {\n    if (opts.formEncType === \"text/plain\") {\n      // text only support POST/PUT/PATCH/DELETE submissions\n      if (!isMutationMethod(formMethod)) {\n        return getInvalidBodyError();\n      }\n\n      let text =\n        typeof opts.body === \"string\"\n          ? opts.body\n          : opts.body instanceof FormData ||\n            opts.body instanceof URLSearchParams\n          ? // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n            Array.from(opts.body.entries()).reduce(\n              (acc, [name, value]) => `${acc}${name}=${value}\\n`,\n              \"\"\n            )\n          : String(opts.body);\n\n      return {\n        path,\n        submission: {\n          formMethod,\n          formAction,\n          formEncType: opts.formEncType,\n          formData: undefined,\n          json: undefined,\n          text,\n        },\n      };\n    } else if (opts.formEncType === \"application/json\") {\n      // json only supports POST/PUT/PATCH/DELETE submissions\n      if (!isMutationMethod(formMethod)) {\n        return getInvalidBodyError();\n      }\n\n      try {\n        let json =\n          typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n\n        return {\n          path,\n          submission: {\n            formMethod,\n            formAction,\n            formEncType: opts.formEncType,\n            formData: undefined,\n            json,\n            text: undefined,\n          },\n        };\n      } catch (e) {\n        return getInvalidBodyError();\n      }\n    }\n  }\n\n  invariant(\n    typeof FormData === \"function\",\n    \"FormData is not available in this environment\"\n  );\n\n  let searchParams: URLSearchParams;\n  let formData: FormData;\n\n  if (opts.formData) {\n    searchParams = convertFormDataToSearchParams(opts.formData);\n    formData = opts.formData;\n  } else if (opts.body instanceof FormData) {\n    searchParams = convertFormDataToSearchParams(opts.body);\n    formData = opts.body;\n  } else if (opts.body instanceof URLSearchParams) {\n    searchParams = opts.body;\n    formData = convertSearchParamsToFormData(searchParams);\n  } else if (opts.body == null) {\n    searchParams = new URLSearchParams();\n    formData = new FormData();\n  } else {\n    try {\n      searchParams = new URLSearchParams(opts.body);\n      formData = convertSearchParamsToFormData(searchParams);\n    } catch (e) {\n      return getInvalidBodyError();\n    }\n  }\n\n  let submission: Submission = {\n    formMethod,\n    formAction,\n    formEncType:\n      (opts && opts.formEncType) || \"application/x-www-form-urlencoded\",\n    formData,\n    json: undefined,\n    text: undefined,\n  };\n\n  if (isMutationMethod(submission.formMethod)) {\n    return { path, submission };\n  }\n\n  // Flatten submission onto URLSearchParams for GET submissions\n  let parsedPath = parsePath(path);\n  // On GET navigation submissions we can drop the ?index param from the\n  // resulting location since all loaders will run.  But fetcher GET submissions\n  // only run a single loader so we need to preserve any incoming ?index params\n  if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {\n    searchParams.append(\"index\", \"\");\n  }\n  parsedPath.search = `?${searchParams}`;\n\n  return { path: createPath(parsedPath), submission };\n}\n\n// Filter out all routes below any caught error as they aren't going to\n// render so we don't need to load them\nfunction getLoaderMatchesUntilBoundary(\n  matches: AgnosticDataRouteMatch[],\n  boundaryId: string\n) {\n  let boundaryMatches = matches;\n  if (boundaryId) {\n    let index = matches.findIndex((m) => m.route.id === boundaryId);\n    if (index >= 0) {\n      boundaryMatches = matches.slice(0, index);\n    }\n  }\n  return boundaryMatches;\n}\n\nfunction getMatchesToLoad(\n  history: History,\n  state: RouterState,\n  matches: AgnosticDataRouteMatch[],\n  submission: Submission | undefined,\n  location: Location,\n  isInitialLoad: boolean,\n  skipActionErrorRevalidation: boolean,\n  isRevalidationRequired: boolean,\n  cancelledDeferredRoutes: string[],\n  cancelledFetcherLoads: string[],\n  deletedFetchers: Set<string>,\n  fetchLoadMatches: Map<string, FetchLoadMatch>,\n  fetchRedirectIds: Set<string>,\n  routesToUse: AgnosticDataRouteObject[],\n  basename: string | undefined,\n  pendingActionResult?: PendingActionResult\n): [AgnosticDataRouteMatch[], RevalidatingFetcher[]] {\n  let actionResult = pendingActionResult\n    ? isErrorResult(pendingActionResult[1])\n      ? pendingActionResult[1].error\n      : pendingActionResult[1].data\n    : undefined;\n  let currentUrl = history.createURL(state.location);\n  let nextUrl = history.createURL(location);\n\n  // Pick navigation matches that are net-new or qualify for revalidation\n  let boundaryId =\n    pendingActionResult && isErrorResult(pendingActionResult[1])\n      ? pendingActionResult[0]\n      : undefined;\n  let boundaryMatches = boundaryId\n    ? getLoaderMatchesUntilBoundary(matches, boundaryId)\n    : matches;\n\n  // Don't revalidate loaders by default after action 4xx/5xx responses\n  // when the flag is enabled.  They can still opt-into revalidation via\n  // `shouldRevalidate` via `actionResult`\n  let actionStatus = pendingActionResult\n    ? pendingActionResult[1].statusCode\n    : undefined;\n  let shouldSkipRevalidation =\n    skipActionErrorRevalidation && actionStatus && actionStatus >= 400;\n\n  let navigationMatches = boundaryMatches.filter((match, index) => {\n    let { route } = match;\n    if (route.lazy) {\n      // We haven't loaded this route yet so we don't know if it's got a loader!\n      return true;\n    }\n\n    if (route.loader == null) {\n      return false;\n    }\n\n    if (isInitialLoad) {\n      if (typeof route.loader !== \"function\" || route.loader.hydrate) {\n        return true;\n      }\n      return (\n        state.loaderData[route.id] === undefined &&\n        // Don't re-run if the loader ran and threw an error\n        (!state.errors || state.errors[route.id] === undefined)\n      );\n    }\n\n    // Always call the loader on new route instances and pending defer cancellations\n    if (\n      isNewLoader(state.loaderData, state.matches[index], match) ||\n      cancelledDeferredRoutes.some((id) => id === match.route.id)\n    ) {\n      return true;\n    }\n\n    // This is the default implementation for when we revalidate.  If the route\n    // provides it's own implementation, then we give them full control but\n    // provide this value so they can leverage it if needed after they check\n    // their own specific use cases\n    let currentRouteMatch = state.matches[index];\n    let nextRouteMatch = match;\n\n    return shouldRevalidateLoader(match, {\n      currentUrl,\n      currentParams: currentRouteMatch.params,\n      nextUrl,\n      nextParams: nextRouteMatch.params,\n      ...submission,\n      actionResult,\n      unstable_actionStatus: actionStatus,\n      defaultShouldRevalidate: shouldSkipRevalidation\n        ? false\n        : // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n          isRevalidationRequired ||\n          currentUrl.pathname + currentUrl.search ===\n            nextUrl.pathname + nextUrl.search ||\n          // Search params affect all loaders\n          currentUrl.search !== nextUrl.search ||\n          isNewRouteInstance(currentRouteMatch, nextRouteMatch),\n    });\n  });\n\n  // Pick fetcher.loads that need to be revalidated\n  let revalidatingFetchers: RevalidatingFetcher[] = [];\n  fetchLoadMatches.forEach((f, key) => {\n    // Don't revalidate:\n    //  - on initial load (shouldn't be any fetchers then anyway)\n    //  - if fetcher won't be present in the subsequent render\n    //    - no longer matches the URL (v7_fetcherPersist=false)\n    //    - was unmounted but persisted due to v7_fetcherPersist=true\n    if (\n      isInitialLoad ||\n      !matches.some((m) => m.route.id === f.routeId) ||\n      deletedFetchers.has(key)\n    ) {\n      return;\n    }\n\n    let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n\n    // If the fetcher path no longer matches, push it in with null matches so\n    // we can trigger a 404 in callLoadersAndMaybeResolveData.  Note this is\n    // currently only a use-case for Remix HMR where the route tree can change\n    // at runtime and remove a route previously loaded via a fetcher\n    if (!fetcherMatches) {\n      revalidatingFetchers.push({\n        key,\n        routeId: f.routeId,\n        path: f.path,\n        matches: null,\n        match: null,\n        controller: null,\n      });\n      return;\n    }\n\n    // Revalidating fetchers are decoupled from the route matches since they\n    // load from a static href.  They revalidate based on explicit revalidation\n    // (submission, useRevalidator, or X-Remix-Revalidate)\n    let fetcher = state.fetchers.get(key);\n    let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n\n    let shouldRevalidate = false;\n    if (fetchRedirectIds.has(key)) {\n      // Never trigger a revalidation of an actively redirecting fetcher\n      shouldRevalidate = false;\n    } else if (cancelledFetcherLoads.includes(key)) {\n      // Always revalidate if the fetcher was cancelled\n      shouldRevalidate = true;\n    } else if (\n      fetcher &&\n      fetcher.state !== \"idle\" &&\n      fetcher.data === undefined\n    ) {\n      // If the fetcher hasn't ever completed loading yet, then this isn't a\n      // revalidation, it would just be a brand new load if an explicit\n      // revalidation is required\n      shouldRevalidate = isRevalidationRequired;\n    } else {\n      // Otherwise fall back on any user-defined shouldRevalidate, defaulting\n      // to explicit revalidations only\n      shouldRevalidate = shouldRevalidateLoader(fetcherMatch, {\n        currentUrl,\n        currentParams: state.matches[state.matches.length - 1].params,\n        nextUrl,\n        nextParams: matches[matches.length - 1].params,\n        ...submission,\n        actionResult,\n        unstable_actionStatus: actionStatus,\n        defaultShouldRevalidate: shouldSkipRevalidation\n          ? false\n          : isRevalidationRequired,\n      });\n    }\n\n    if (shouldRevalidate) {\n      revalidatingFetchers.push({\n        key,\n        routeId: f.routeId,\n        path: f.path,\n        matches: fetcherMatches,\n        match: fetcherMatch,\n        controller: new AbortController(),\n      });\n    }\n  });\n\n  return [navigationMatches, revalidatingFetchers];\n}\n\nfunction isNewLoader(\n  currentLoaderData: RouteData,\n  currentMatch: AgnosticDataRouteMatch,\n  match: AgnosticDataRouteMatch\n) {\n  let isNew =\n    // [a] -> [a, b]\n    !currentMatch ||\n    // [a, b] -> [a, c]\n    match.route.id !== currentMatch.route.id;\n\n  // Handle the case that we don't have data for a re-used route, potentially\n  // from a prior error or from a cancelled pending deferred\n  let isMissingData = currentLoaderData[match.route.id] === undefined;\n\n  // Always load if this is a net-new route or we don't yet have data\n  return isNew || isMissingData;\n}\n\nfunction isNewRouteInstance(\n  currentMatch: AgnosticDataRouteMatch,\n  match: AgnosticDataRouteMatch\n) {\n  let currentPath = currentMatch.route.path;\n  return (\n    // param change for this match, /users/123 -> /users/456\n    currentMatch.pathname !== match.pathname ||\n    // splat param changed, which is not present in match.path\n    // e.g. /files/images/avatar.jpg -> files/finances.xls\n    (currentPath != null &&\n      currentPath.endsWith(\"*\") &&\n      currentMatch.params[\"*\"] !== match.params[\"*\"])\n  );\n}\n\nfunction shouldRevalidateLoader(\n  loaderMatch: AgnosticDataRouteMatch,\n  arg: ShouldRevalidateFunctionArgs\n) {\n  if (loaderMatch.route.shouldRevalidate) {\n    let routeChoice = loaderMatch.route.shouldRevalidate(arg);\n    if (typeof routeChoice === \"boolean\") {\n      return routeChoice;\n    }\n  }\n\n  return arg.defaultShouldRevalidate;\n}\n\n/**\n * Execute route.lazy() methods to lazily load route modules (loader, action,\n * shouldRevalidate) and update the routeManifest in place which shares objects\n * with dataRoutes so those get updated as well.\n */\nasync function loadLazyRouteModule(\n  route: AgnosticDataRouteObject,\n  mapRouteProperties: MapRoutePropertiesFunction,\n  manifest: RouteManifest\n) {\n  if (!route.lazy) {\n    return;\n  }\n\n  let lazyRoute = await route.lazy();\n\n  // If the lazy route function was executed and removed by another parallel\n  // call then we can return - first lazy() to finish wins because the return\n  // value of lazy is expected to be static\n  if (!route.lazy) {\n    return;\n  }\n\n  let routeToUpdate = manifest[route.id];\n  invariant(routeToUpdate, \"No route found in manifest\");\n\n  // Update the route in place.  This should be safe because there's no way\n  // we could yet be sitting on this route as we can't get there without\n  // resolving lazy() first.\n  //\n  // This is different than the HMR \"update\" use-case where we may actively be\n  // on the route being updated.  The main concern boils down to \"does this\n  // mutation affect any ongoing navigations or any current state.matches\n  // values?\".  If not, it should be safe to update in place.\n  let routeUpdates: Record<string, any> = {};\n  for (let lazyRouteProperty in lazyRoute) {\n    let staticRouteValue =\n      routeToUpdate[lazyRouteProperty as keyof typeof routeToUpdate];\n\n    let isPropertyStaticallyDefined =\n      staticRouteValue !== undefined &&\n      // This property isn't static since it should always be updated based\n      // on the route updates\n      lazyRouteProperty !== \"hasErrorBoundary\";\n\n    warning(\n      !isPropertyStaticallyDefined,\n      `Route \"${routeToUpdate.id}\" has a static property \"${lazyRouteProperty}\" ` +\n        `defined but its lazy function is also returning a value for this property. ` +\n        `The lazy route property \"${lazyRouteProperty}\" will be ignored.`\n    );\n\n    if (\n      !isPropertyStaticallyDefined &&\n      !immutableRouteKeys.has(lazyRouteProperty as ImmutableRouteKey)\n    ) {\n      routeUpdates[lazyRouteProperty] =\n        lazyRoute[lazyRouteProperty as keyof typeof lazyRoute];\n    }\n  }\n\n  // Mutate the route with the provided updates.  Do this first so we pass\n  // the updated version to mapRouteProperties\n  Object.assign(routeToUpdate, routeUpdates);\n\n  // Mutate the `hasErrorBoundary` property on the route based on the route\n  // updates and remove the `lazy` function so we don't resolve the lazy\n  // route again.\n  Object.assign(routeToUpdate, {\n    // To keep things framework agnostic, we use the provided\n    // `mapRouteProperties` (or wrapped `detectErrorBoundary`) function to\n    // set the framework-aware properties (`element`/`hasErrorBoundary`) since\n    // the logic will differ between frameworks.\n    ...mapRouteProperties(routeToUpdate),\n    lazy: undefined,\n  });\n}\n\n// Default implementation of `dataStrategy` which fetches all loaders in parallel\nfunction defaultDataStrategy(\n  opts: DataStrategyFunctionArgs\n): ReturnType<DataStrategyFunction> {\n  return Promise.all(opts.matches.map((m) => m.resolve()));\n}\n\nasync function callDataStrategyImpl(\n  dataStrategyImpl: DataStrategyFunction,\n  type: \"loader\" | \"action\",\n  request: Request,\n  matchesToLoad: AgnosticDataRouteMatch[],\n  matches: AgnosticDataRouteMatch[],\n  manifest: RouteManifest,\n  mapRouteProperties: MapRoutePropertiesFunction,\n  requestContext?: unknown\n): Promise<HandlerResult[]> {\n  let routeIdsToLoad = matchesToLoad.reduce(\n    (acc, m) => acc.add(m.route.id),\n    new Set<string>()\n  );\n  let loadedMatches = new Set<string>();\n\n  // Send all matches here to allow for a middleware-type implementation.\n  // handler will be a no-op for unneeded routes and we filter those results\n  // back out below.\n  let results = await dataStrategyImpl({\n    matches: matches.map((match) => {\n      let shouldLoad = routeIdsToLoad.has(match.route.id);\n      // `resolve` encapsulates the route.lazy, executing the\n      // loader/action, and mapping return values/thrown errors to a\n      // HandlerResult.  Users can pass a callback to take fine-grained control\n      // over the execution of the loader/action\n      let resolve: DataStrategyMatch[\"resolve\"] = (handlerOverride) => {\n        loadedMatches.add(match.route.id);\n        return shouldLoad\n          ? callLoaderOrAction(\n              type,\n              request,\n              match,\n              manifest,\n              mapRouteProperties,\n              handlerOverride,\n              requestContext\n            )\n          : Promise.resolve({ type: ResultType.data, result: undefined });\n      };\n\n      return {\n        ...match,\n        shouldLoad,\n        resolve,\n      };\n    }),\n    request,\n    params: matches[0].params,\n    context: requestContext,\n  });\n\n  // Throw if any loadRoute implementations not called since they are what\n  // ensures a route is fully loaded\n  matches.forEach((m) =>\n    invariant(\n      loadedMatches.has(m.route.id),\n      `\\`match.resolve()\\` was not called for route id \"${m.route.id}\". ` +\n        \"You must call `match.resolve()` on every match passed to \" +\n        \"`dataStrategy` to ensure all routes are properly loaded.\"\n    )\n  );\n\n  // Filter out any middleware-only matches for which we didn't need to run handlers\n  return results.filter((_, i) => routeIdsToLoad.has(matches[i].route.id));\n}\n\n// Default logic for calling a loader/action is the user has no specified a dataStrategy\nasync function callLoaderOrAction(\n  type: \"loader\" | \"action\",\n  request: Request,\n  match: AgnosticDataRouteMatch,\n  manifest: RouteManifest,\n  mapRouteProperties: MapRoutePropertiesFunction,\n  handlerOverride: Parameters<DataStrategyMatch[\"resolve\"]>[0],\n  staticContext?: unknown\n): Promise<HandlerResult> {\n  let result: HandlerResult;\n  let onReject: (() => void) | undefined;\n\n  let runHandler = (\n    handler: AgnosticRouteObject[\"loader\"] | AgnosticRouteObject[\"action\"]\n  ): Promise<HandlerResult> => {\n    // Setup a promise we can race against so that abort signals short circuit\n    let reject: () => void;\n    // This will never resolve so safe to type it as Promise<HandlerResult> to\n    // satisfy the function return value\n    let abortPromise = new Promise<HandlerResult>((_, r) => (reject = r));\n    onReject = () => reject();\n    request.signal.addEventListener(\"abort\", onReject);\n\n    let actualHandler = (ctx?: unknown) => {\n      if (typeof handler !== \"function\") {\n        return Promise.reject(\n          new Error(\n            `You cannot call the handler for a route which defines a boolean ` +\n              `\"${type}\" [routeId: ${match.route.id}]`\n          )\n        );\n      }\n      return handler(\n        {\n          request,\n          params: match.params,\n          context: staticContext,\n        },\n        ...(ctx !== undefined ? [ctx] : [])\n      );\n    };\n\n    let handlerPromise: Promise<HandlerResult>;\n    if (handlerOverride) {\n      handlerPromise = handlerOverride((ctx: unknown) => actualHandler(ctx));\n    } else {\n      handlerPromise = (async () => {\n        try {\n          let val = await actualHandler();\n          return { type: \"data\", result: val };\n        } catch (e) {\n          return { type: \"error\", result: e };\n        }\n      })();\n    }\n\n    return Promise.race([handlerPromise, abortPromise]);\n  };\n\n  try {\n    let handler = match.route[type];\n\n    if (match.route.lazy) {\n      if (handler) {\n        // Run statically defined handler in parallel with lazy()\n        let handlerError;\n        let [value] = await Promise.all([\n          // If the handler throws, don't let it immediately bubble out,\n          // since we need to let the lazy() execution finish so we know if this\n          // route has a boundary that can handle the error\n          runHandler(handler).catch((e) => {\n            handlerError = e;\n          }),\n          loadLazyRouteModule(match.route, mapRouteProperties, manifest),\n        ]);\n        if (handlerError !== undefined) {\n          throw handlerError;\n        }\n        result = value!;\n      } else {\n        // Load lazy route module, then run any returned handler\n        await loadLazyRouteModule(match.route, mapRouteProperties, manifest);\n\n        handler = match.route[type];\n        if (handler) {\n          // Handler still runs even if we got interrupted to maintain consistency\n          // with un-abortable behavior of handler execution on non-lazy or\n          // previously-lazy-loaded routes\n          result = await runHandler(handler);\n        } else if (type === \"action\") {\n          let url = new URL(request.url);\n          let pathname = url.pathname + url.search;\n          throw getInternalRouterError(405, {\n            method: request.method,\n            pathname,\n            routeId: match.route.id,\n          });\n        } else {\n          // lazy() route has no loader to run.  Short circuit here so we don't\n          // hit the invariant below that errors on returning undefined.\n          return { type: ResultType.data, result: undefined };\n        }\n      }\n    } else if (!handler) {\n      let url = new URL(request.url);\n      let pathname = url.pathname + url.search;\n      throw getInternalRouterError(404, {\n        pathname,\n      });\n    } else {\n      result = await runHandler(handler);\n    }\n\n    invariant(\n      result.result !== undefined,\n      `You defined ${type === \"action\" ? \"an action\" : \"a loader\"} for route ` +\n        `\"${match.route.id}\" but didn't return anything from your \\`${type}\\` ` +\n        `function. Please return a value or \\`null\\`.`\n    );\n  } catch (e) {\n    // We should already be catching and converting normal handler executions to\n    // HandlerResults and returning them, so anything that throws here is an\n    // unexpected error we still need to wrap\n    return { type: ResultType.error, result: e };\n  } finally {\n    if (onReject) {\n      request.signal.removeEventListener(\"abort\", onReject);\n    }\n  }\n\n  return result;\n}\n\nasync function convertHandlerResultToDataResult(\n  handlerResult: HandlerResult\n): Promise<DataResult> {\n  let { result, type, status } = handlerResult;\n\n  if (isResponse(result)) {\n    let data: any;\n\n    try {\n      let contentType = result.headers.get(\"Content-Type\");\n      // Check between word boundaries instead of startsWith() due to the last\n      // paragraph of https://httpwg.org/specs/rfc9110.html#field.content-type\n      if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n        if (result.body == null) {\n          data = null;\n        } else {\n          data = await result.json();\n        }\n      } else {\n        data = await result.text();\n      }\n    } catch (e) {\n      return { type: ResultType.error, error: e };\n    }\n\n    if (type === ResultType.error) {\n      return {\n        type: ResultType.error,\n        error: new ErrorResponseImpl(result.status, result.statusText, data),\n        statusCode: result.status,\n        headers: result.headers,\n      };\n    }\n\n    return {\n      type: ResultType.data,\n      data,\n      statusCode: result.status,\n      headers: result.headers,\n    };\n  }\n\n  if (type === ResultType.error) {\n    return {\n      type: ResultType.error,\n      error: result,\n      statusCode: isRouteErrorResponse(result) ? result.status : status,\n    };\n  }\n\n  if (isDeferredData(result)) {\n    return {\n      type: ResultType.deferred,\n      deferredData: result,\n      statusCode: result.init?.status,\n      headers: result.init?.headers && new Headers(result.init.headers),\n    };\n  }\n\n  return { type: ResultType.data, data: result, statusCode: status };\n}\n\n// Support relative routing in internal redirects\nfunction normalizeRelativeRoutingRedirectResponse(\n  response: Response,\n  request: Request,\n  routeId: string,\n  matches: AgnosticDataRouteMatch[],\n  basename: string,\n  v7_relativeSplatPath: boolean\n) {\n  let location = response.headers.get(\"Location\");\n  invariant(\n    location,\n    \"Redirects returned/thrown from loaders/actions must have a Location header\"\n  );\n\n  if (!ABSOLUTE_URL_REGEX.test(location)) {\n    let trimmedMatches = matches.slice(\n      0,\n      matches.findIndex((m) => m.route.id === routeId) + 1\n    );\n    location = normalizeTo(\n      new URL(request.url),\n      trimmedMatches,\n      basename,\n      true,\n      location,\n      v7_relativeSplatPath\n    );\n    response.headers.set(\"Location\", location);\n  }\n\n  return response;\n}\n\nfunction normalizeRedirectLocation(\n  location: string,\n  currentUrl: URL,\n  basename: string\n): string {\n  if (ABSOLUTE_URL_REGEX.test(location)) {\n    // Strip off the protocol+origin for same-origin + same-basename absolute redirects\n    let normalizedLocation = location;\n    let url = normalizedLocation.startsWith(\"//\")\n      ? new URL(currentUrl.protocol + normalizedLocation)\n      : new URL(normalizedLocation);\n    let isSameBasename = stripBasename(url.pathname, basename) != null;\n    if (url.origin === currentUrl.origin && isSameBasename) {\n      return url.pathname + url.search + url.hash;\n    }\n  }\n  return location;\n}\n\n// Utility method for creating the Request instances for loaders/actions during\n// client-side navigations and fetches.  During SSR we will always have a\n// Request instance from the static handler (query/queryRoute)\nfunction createClientSideRequest(\n  history: History,\n  location: string | Location,\n  signal: AbortSignal,\n  submission?: Submission\n): Request {\n  let url = history.createURL(stripHashFromPath(location)).toString();\n  let init: RequestInit = { signal };\n\n  if (submission && isMutationMethod(submission.formMethod)) {\n    let { formMethod, formEncType } = submission;\n    // Didn't think we needed this but it turns out unlike other methods, patch\n    // won't be properly normalized to uppercase and results in a 405 error.\n    // See: https://fetch.spec.whatwg.org/#concept-method\n    init.method = formMethod.toUpperCase();\n\n    if (formEncType === \"application/json\") {\n      init.headers = new Headers({ \"Content-Type\": formEncType });\n      init.body = JSON.stringify(submission.json);\n    } else if (formEncType === \"text/plain\") {\n      // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n      init.body = submission.text;\n    } else if (\n      formEncType === \"application/x-www-form-urlencoded\" &&\n      submission.formData\n    ) {\n      // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n      init.body = convertFormDataToSearchParams(submission.formData);\n    } else {\n      // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n      init.body = submission.formData;\n    }\n  }\n\n  return new Request(url, init);\n}\n\nfunction convertFormDataToSearchParams(formData: FormData): URLSearchParams {\n  let searchParams = new URLSearchParams();\n\n  for (let [key, value] of formData.entries()) {\n    // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#converting-an-entry-list-to-a-list-of-name-value-pairs\n    searchParams.append(key, typeof value === \"string\" ? value : value.name);\n  }\n\n  return searchParams;\n}\n\nfunction convertSearchParamsToFormData(\n  searchParams: URLSearchParams\n): FormData {\n  let formData = new FormData();\n  for (let [key, value] of searchParams.entries()) {\n    formData.append(key, value);\n  }\n  return formData;\n}\n\nfunction processRouteLoaderData(\n  matches: AgnosticDataRouteMatch[],\n  matchesToLoad: AgnosticDataRouteMatch[],\n  results: DataResult[],\n  pendingActionResult: PendingActionResult | undefined,\n  activeDeferreds: Map<string, DeferredData>,\n  skipLoaderErrorBubbling: boolean\n): {\n  loaderData: RouterState[\"loaderData\"];\n  errors: RouterState[\"errors\"] | null;\n  statusCode: number;\n  loaderHeaders: Record<string, Headers>;\n} {\n  // Fill in loaderData/errors from our loaders\n  let loaderData: RouterState[\"loaderData\"] = {};\n  let errors: RouterState[\"errors\"] | null = null;\n  let statusCode: number | undefined;\n  let foundError = false;\n  let loaderHeaders: Record<string, Headers> = {};\n  let pendingError =\n    pendingActionResult && isErrorResult(pendingActionResult[1])\n      ? pendingActionResult[1].error\n      : undefined;\n\n  // Process loader results into state.loaderData/state.errors\n  results.forEach((result, index) => {\n    let id = matchesToLoad[index].route.id;\n    invariant(\n      !isRedirectResult(result),\n      \"Cannot handle redirect results in processLoaderData\"\n    );\n    if (isErrorResult(result)) {\n      let error = result.error;\n      // If we have a pending action error, we report it at the highest-route\n      // that throws a loader error, and then clear it out to indicate that\n      // it was consumed\n      if (pendingError !== undefined) {\n        error = pendingError;\n        pendingError = undefined;\n      }\n\n      errors = errors || {};\n\n      if (skipLoaderErrorBubbling) {\n        errors[id] = error;\n      } else {\n        // Look upwards from the matched route for the closest ancestor error\n        // boundary, defaulting to the root match.  Prefer higher error values\n        // if lower errors bubble to the same boundary\n        let boundaryMatch = findNearestBoundary(matches, id);\n        if (errors[boundaryMatch.route.id] == null) {\n          errors[boundaryMatch.route.id] = error;\n        }\n      }\n\n      // Clear our any prior loaderData for the throwing route\n      loaderData[id] = undefined;\n\n      // Once we find our first (highest) error, we set the status code and\n      // prevent deeper status codes from overriding\n      if (!foundError) {\n        foundError = true;\n        statusCode = isRouteErrorResponse(result.error)\n          ? result.error.status\n          : 500;\n      }\n      if (result.headers) {\n        loaderHeaders[id] = result.headers;\n      }\n    } else {\n      if (isDeferredResult(result)) {\n        activeDeferreds.set(id, result.deferredData);\n        loaderData[id] = result.deferredData.data;\n        // Error status codes always override success status codes, but if all\n        // loaders are successful we take the deepest status code.\n        if (\n          result.statusCode != null &&\n          result.statusCode !== 200 &&\n          !foundError\n        ) {\n          statusCode = result.statusCode;\n        }\n        if (result.headers) {\n          loaderHeaders[id] = result.headers;\n        }\n      } else {\n        loaderData[id] = result.data;\n        // Error status codes always override success status codes, but if all\n        // loaders are successful we take the deepest status code.\n        if (result.statusCode && result.statusCode !== 200 && !foundError) {\n          statusCode = result.statusCode;\n        }\n        if (result.headers) {\n          loaderHeaders[id] = result.headers;\n        }\n      }\n    }\n  });\n\n  // If we didn't consume the pending action error (i.e., all loaders\n  // resolved), then consume it here.  Also clear out any loaderData for the\n  // throwing route\n  if (pendingError !== undefined && pendingActionResult) {\n    errors = { [pendingActionResult[0]]: pendingError };\n    loaderData[pendingActionResult[0]] = undefined;\n  }\n\n  return {\n    loaderData,\n    errors,\n    statusCode: statusCode || 200,\n    loaderHeaders,\n  };\n}\n\nfunction processLoaderData(\n  state: RouterState,\n  matches: AgnosticDataRouteMatch[],\n  matchesToLoad: AgnosticDataRouteMatch[],\n  results: DataResult[],\n  pendingActionResult: PendingActionResult | undefined,\n  revalidatingFetchers: RevalidatingFetcher[],\n  fetcherResults: DataResult[],\n  activeDeferreds: Map<string, DeferredData>\n): {\n  loaderData: RouterState[\"loaderData\"];\n  errors?: RouterState[\"errors\"];\n} {\n  let { loaderData, errors } = processRouteLoaderData(\n    matches,\n    matchesToLoad,\n    results,\n    pendingActionResult,\n    activeDeferreds,\n    false // This method is only called client side so we always want to bubble\n  );\n\n  // Process results from our revalidating fetchers\n  for (let index = 0; index < revalidatingFetchers.length; index++) {\n    let { key, match, controller } = revalidatingFetchers[index];\n    invariant(\n      fetcherResults !== undefined && fetcherResults[index] !== undefined,\n      \"Did not find corresponding fetcher result\"\n    );\n    let result = fetcherResults[index];\n\n    // Process fetcher non-redirect errors\n    if (controller && controller.signal.aborted) {\n      // Nothing to do for aborted fetchers\n      continue;\n    } else if (isErrorResult(result)) {\n      let boundaryMatch = findNearestBoundary(state.matches, match?.route.id);\n      if (!(errors && errors[boundaryMatch.route.id])) {\n        errors = {\n          ...errors,\n          [boundaryMatch.route.id]: result.error,\n        };\n      }\n      state.fetchers.delete(key);\n    } else if (isRedirectResult(result)) {\n      // Should never get here, redirects should get processed above, but we\n      // keep this to type narrow to a success result in the else\n      invariant(false, \"Unhandled fetcher revalidation redirect\");\n    } else if (isDeferredResult(result)) {\n      // Should never get here, deferred data should be awaited for fetchers\n      // in resolveDeferredResults\n      invariant(false, \"Unhandled fetcher deferred data\");\n    } else {\n      let doneFetcher = getDoneFetcher(result.data);\n      state.fetchers.set(key, doneFetcher);\n    }\n  }\n\n  return { loaderData, errors };\n}\n\nfunction mergeLoaderData(\n  loaderData: RouteData,\n  newLoaderData: RouteData,\n  matches: AgnosticDataRouteMatch[],\n  errors: RouteData | null | undefined\n): RouteData {\n  let mergedLoaderData = { ...newLoaderData };\n  for (let match of matches) {\n    let id = match.route.id;\n    if (newLoaderData.hasOwnProperty(id)) {\n      if (newLoaderData[id] !== undefined) {\n        mergedLoaderData[id] = newLoaderData[id];\n      } else {\n        // No-op - this is so we ignore existing data if we have a key in the\n        // incoming object with an undefined value, which is how we unset a prior\n        // loaderData if we encounter a loader error\n      }\n    } else if (loaderData[id] !== undefined && match.route.loader) {\n      // Preserve existing keys not included in newLoaderData and where a loader\n      // wasn't removed by HMR\n      mergedLoaderData[id] = loaderData[id];\n    }\n\n    if (errors && errors.hasOwnProperty(id)) {\n      // Don't keep any loader data below the boundary\n      break;\n    }\n  }\n  return mergedLoaderData;\n}\n\nfunction getActionDataForCommit(\n  pendingActionResult: PendingActionResult | undefined\n) {\n  if (!pendingActionResult) {\n    return {};\n  }\n  return isErrorResult(pendingActionResult[1])\n    ? {\n        // Clear out prior actionData on errors\n        actionData: {},\n      }\n    : {\n        actionData: {\n          [pendingActionResult[0]]: pendingActionResult[1].data,\n        },\n      };\n}\n\n// Find the nearest error boundary, looking upwards from the leaf route (or the\n// route specified by routeId) for the closest ancestor error boundary,\n// defaulting to the root match\nfunction findNearestBoundary(\n  matches: AgnosticDataRouteMatch[],\n  routeId?: string\n): AgnosticDataRouteMatch {\n  let eligibleMatches = routeId\n    ? matches.slice(0, matches.findIndex((m) => m.route.id === routeId) + 1)\n    : [...matches];\n  return (\n    eligibleMatches.reverse().find((m) => m.route.hasErrorBoundary === true) ||\n    matches[0]\n  );\n}\n\nfunction getShortCircuitMatches(routes: AgnosticDataRouteObject[]): {\n  matches: AgnosticDataRouteMatch[];\n  route: AgnosticDataRouteObject;\n} {\n  // Prefer a root layout route if present, otherwise shim in a route object\n  let route =\n    routes.length === 1\n      ? routes[0]\n      : routes.find((r) => r.index || !r.path || r.path === \"/\") || {\n          id: `__shim-error-route__`,\n        };\n\n  return {\n    matches: [\n      {\n        params: {},\n        pathname: \"\",\n        pathnameBase: \"\",\n        route,\n      },\n    ],\n    route,\n  };\n}\n\nfunction getInternalRouterError(\n  status: number,\n  {\n    pathname,\n    routeId,\n    method,\n    type,\n  }: {\n    pathname?: string;\n    routeId?: string;\n    method?: string;\n    type?: \"defer-action\" | \"invalid-body\";\n  } = {}\n) {\n  let statusText = \"Unknown Server Error\";\n  let errorMessage = \"Unknown @remix-run/router error\";\n\n  if (status === 400) {\n    statusText = \"Bad Request\";\n    if (method && pathname && routeId) {\n      errorMessage =\n        `You made a ${method} request to \"${pathname}\" but ` +\n        `did not provide a \\`loader\\` for route \"${routeId}\", ` +\n        `so there is no way to handle the request.`;\n    } else if (type === \"defer-action\") {\n      errorMessage = \"defer() is not supported in actions\";\n    } else if (type === \"invalid-body\") {\n      errorMessage = \"Unable to encode submission body\";\n    }\n  } else if (status === 403) {\n    statusText = \"Forbidden\";\n    errorMessage = `Route \"${routeId}\" does not match URL \"${pathname}\"`;\n  } else if (status === 404) {\n    statusText = \"Not Found\";\n    errorMessage = `No route matches URL \"${pathname}\"`;\n  } else if (status === 405) {\n    statusText = \"Method Not Allowed\";\n    if (method && pathname && routeId) {\n      errorMessage =\n        `You made a ${method.toUpperCase()} request to \"${pathname}\" but ` +\n        `did not provide an \\`action\\` for route \"${routeId}\", ` +\n        `so there is no way to handle the request.`;\n    } else if (method) {\n      errorMessage = `Invalid request method \"${method.toUpperCase()}\"`;\n    }\n  }\n\n  return new ErrorResponseImpl(\n    status || 500,\n    statusText,\n    new Error(errorMessage),\n    true\n  );\n}\n\n// Find any returned redirect errors, starting from the lowest match\nfunction findRedirect(\n  results: DataResult[]\n): { result: RedirectResult; idx: number } | undefined {\n  for (let i = results.length - 1; i >= 0; i--) {\n    let result = results[i];\n    if (isRedirectResult(result)) {\n      return { result, idx: i };\n    }\n  }\n}\n\nfunction stripHashFromPath(path: To) {\n  let parsedPath = typeof path === \"string\" ? parsePath(path) : path;\n  return createPath({ ...parsedPath, hash: \"\" });\n}\n\nfunction isHashChangeOnly(a: Location, b: Location): boolean {\n  if (a.pathname !== b.pathname || a.search !== b.search) {\n    return false;\n  }\n\n  if (a.hash === \"\") {\n    // /page -> /page#hash\n    return b.hash !== \"\";\n  } else if (a.hash === b.hash) {\n    // /page#hash -> /page#hash\n    return true;\n  } else if (b.hash !== \"\") {\n    // /page#hash -> /page#other\n    return true;\n  }\n\n  // If the hash is removed the browser will re-perform a request to the server\n  // /page#hash -> /page\n  return false;\n}\n\nfunction isHandlerResult(result: unknown): result is HandlerResult {\n  return (\n    result != null &&\n    typeof result === \"object\" &&\n    \"type\" in result &&\n    \"result\" in result &&\n    (result.type === ResultType.data || result.type === ResultType.error)\n  );\n}\n\nfunction isRedirectHandlerResult(result: HandlerResult) {\n  return (\n    isResponse(result.result) && redirectStatusCodes.has(result.result.status)\n  );\n}\n\nfunction isDeferredResult(result: DataResult): result is DeferredResult {\n  return result.type === ResultType.deferred;\n}\n\nfunction isErrorResult(result: DataResult): result is ErrorResult {\n  return result.type === ResultType.error;\n}\n\nfunction isRedirectResult(result?: DataResult): result is RedirectResult {\n  return (result && result.type) === ResultType.redirect;\n}\n\nexport function isDeferredData(value: any): value is DeferredData {\n  let deferred: DeferredData = value;\n  return (\n    deferred &&\n    typeof deferred === \"object\" &&\n    typeof deferred.data === \"object\" &&\n    typeof deferred.subscribe === \"function\" &&\n    typeof deferred.cancel === \"function\" &&\n    typeof deferred.resolveData === \"function\"\n  );\n}\n\nfunction isResponse(value: any): value is Response {\n  return (\n    value != null &&\n    typeof value.status === \"number\" &&\n    typeof value.statusText === \"string\" &&\n    typeof value.headers === \"object\" &&\n    typeof value.body !== \"undefined\"\n  );\n}\n\nfunction isRedirectResponse(result: any): result is Response {\n  if (!isResponse(result)) {\n    return false;\n  }\n\n  let status = result.status;\n  let location = result.headers.get(\"Location\");\n  return status >= 300 && status <= 399 && location != null;\n}\n\nfunction isValidMethod(method: string): method is FormMethod | V7_FormMethod {\n  return validRequestMethods.has(method.toLowerCase() as FormMethod);\n}\n\nfunction isMutationMethod(\n  method: string\n): method is MutationFormMethod | V7_MutationFormMethod {\n  return validMutationMethods.has(method.toLowerCase() as MutationFormMethod);\n}\n\nasync function resolveDeferredResults(\n  currentMatches: AgnosticDataRouteMatch[],\n  matchesToLoad: (AgnosticDataRouteMatch | null)[],\n  results: DataResult[],\n  signals: (AbortSignal | null)[],\n  isFetcher: boolean,\n  currentLoaderData?: RouteData\n) {\n  for (let index = 0; index < results.length; index++) {\n    let result = results[index];\n    let match = matchesToLoad[index];\n    // If we don't have a match, then we can have a deferred result to do\n    // anything with.  This is for revalidating fetchers where the route was\n    // removed during HMR\n    if (!match) {\n      continue;\n    }\n\n    let currentMatch = currentMatches.find(\n      (m) => m.route.id === match!.route.id\n    );\n    let isRevalidatingLoader =\n      currentMatch != null &&\n      !isNewRouteInstance(currentMatch, match) &&\n      (currentLoaderData && currentLoaderData[match.route.id]) !== undefined;\n\n    if (isDeferredResult(result) && (isFetcher || isRevalidatingLoader)) {\n      // Note: we do not have to touch activeDeferreds here since we race them\n      // against the signal in resolveDeferredData and they'll get aborted\n      // there if needed\n      let signal = signals[index];\n      invariant(\n        signal,\n        \"Expected an AbortSignal for revalidating fetcher deferred result\"\n      );\n      await resolveDeferredData(result, signal, isFetcher).then((result) => {\n        if (result) {\n          results[index] = result || results[index];\n        }\n      });\n    }\n  }\n}\n\nasync function resolveDeferredData(\n  result: DeferredResult,\n  signal: AbortSignal,\n  unwrap = false\n): Promise<SuccessResult | ErrorResult | undefined> {\n  let aborted = await result.deferredData.resolveData(signal);\n  if (aborted) {\n    return;\n  }\n\n  if (unwrap) {\n    try {\n      return {\n        type: ResultType.data,\n        data: result.deferredData.unwrappedData,\n      };\n    } catch (e) {\n      // Handle any TrackedPromise._error values encountered while unwrapping\n      return {\n        type: ResultType.error,\n        error: e,\n      };\n    }\n  }\n\n  return {\n    type: ResultType.data,\n    data: result.deferredData.data,\n  };\n}\n\nfunction hasNakedIndexQuery(search: string): boolean {\n  return new URLSearchParams(search).getAll(\"index\").some((v) => v === \"\");\n}\n\nfunction getTargetMatch(\n  matches: AgnosticDataRouteMatch[],\n  location: Location | string\n) {\n  let search =\n    typeof location === \"string\" ? parsePath(location).search : location.search;\n  if (\n    matches[matches.length - 1].route.index &&\n    hasNakedIndexQuery(search || \"\")\n  ) {\n    // Return the leaf index route when index is present\n    return matches[matches.length - 1];\n  }\n  // Otherwise grab the deepest \"path contributing\" match (ignoring index and\n  // pathless layout routes)\n  let pathMatches = getPathContributingMatches(matches);\n  return pathMatches[pathMatches.length - 1];\n}\n\nfunction getSubmissionFromNavigation(\n  navigation: Navigation\n): Submission | undefined {\n  let { formMethod, formAction, formEncType, text, formData, json } =\n    navigation;\n  if (!formMethod || !formAction || !formEncType) {\n    return;\n  }\n\n  if (text != null) {\n    return {\n      formMethod,\n      formAction,\n      formEncType,\n      formData: undefined,\n      json: undefined,\n      text,\n    };\n  } else if (formData != null) {\n    return {\n      formMethod,\n      formAction,\n      formEncType,\n      formData,\n      json: undefined,\n      text: undefined,\n    };\n  } else if (json !== undefined) {\n    return {\n      formMethod,\n      formAction,\n      formEncType,\n      formData: undefined,\n      json,\n      text: undefined,\n    };\n  }\n}\n\nfunction getLoadingNavigation(\n  location: Location,\n  submission?: Submission\n): NavigationStates[\"Loading\"] {\n  if (submission) {\n    let navigation: NavigationStates[\"Loading\"] = {\n      state: \"loading\",\n      location,\n      formMethod: submission.formMethod,\n      formAction: submission.formAction,\n      formEncType: submission.formEncType,\n      formData: submission.formData,\n      json: submission.json,\n      text: submission.text,\n    };\n    return navigation;\n  } else {\n    let navigation: NavigationStates[\"Loading\"] = {\n      state: \"loading\",\n      location,\n      formMethod: undefined,\n      formAction: undefined,\n      formEncType: undefined,\n      formData: undefined,\n      json: undefined,\n      text: undefined,\n    };\n    return navigation;\n  }\n}\n\nfunction getSubmittingNavigation(\n  location: Location,\n  submission: Submission\n): NavigationStates[\"Submitting\"] {\n  let navigation: NavigationStates[\"Submitting\"] = {\n    state: \"submitting\",\n    location,\n    formMethod: submission.formMethod,\n    formAction: submission.formAction,\n    formEncType: submission.formEncType,\n    formData: submission.formData,\n    json: submission.json,\n    text: submission.text,\n  };\n  return navigation;\n}\n\nfunction getLoadingFetcher(\n  submission?: Submission,\n  data?: Fetcher[\"data\"]\n): FetcherStates[\"Loading\"] {\n  if (submission) {\n    let fetcher: FetcherStates[\"Loading\"] = {\n      state: \"loading\",\n      formMethod: submission.formMethod,\n      formAction: submission.formAction,\n      formEncType: submission.formEncType,\n      formData: submission.formData,\n      json: submission.json,\n      text: submission.text,\n      data,\n    };\n    return fetcher;\n  } else {\n    let fetcher: FetcherStates[\"Loading\"] = {\n      state: \"loading\",\n      formMethod: undefined,\n      formAction: undefined,\n      formEncType: undefined,\n      formData: undefined,\n      json: undefined,\n      text: undefined,\n      data,\n    };\n    return fetcher;\n  }\n}\n\nfunction getSubmittingFetcher(\n  submission: Submission,\n  existingFetcher?: Fetcher\n): FetcherStates[\"Submitting\"] {\n  let fetcher: FetcherStates[\"Submitting\"] = {\n    state: \"submitting\",\n    formMethod: submission.formMethod,\n    formAction: submission.formAction,\n    formEncType: submission.formEncType,\n    formData: submission.formData,\n    json: submission.json,\n    text: submission.text,\n    data: existingFetcher ? existingFetcher.data : undefined,\n  };\n  return fetcher;\n}\n\nfunction getDoneFetcher(data: Fetcher[\"data\"]): FetcherStates[\"Idle\"] {\n  let fetcher: FetcherStates[\"Idle\"] = {\n    state: \"idle\",\n    formMethod: undefined,\n    formAction: undefined,\n    formEncType: undefined,\n    formData: undefined,\n    json: undefined,\n    text: undefined,\n    data,\n  };\n  return fetcher;\n}\n\nfunction restoreAppliedTransitions(\n  _window: Window,\n  transitions: Map<string, Set<string>>\n) {\n  try {\n    let sessionPositions = _window.sessionStorage.getItem(\n      TRANSITIONS_STORAGE_KEY\n    );\n    if (sessionPositions) {\n      let json = JSON.parse(sessionPositions);\n      for (let [k, v] of Object.entries(json || {})) {\n        if (v && Array.isArray(v)) {\n          transitions.set(k, new Set(v || []));\n        }\n      }\n    }\n  } catch (e) {\n    // no-op, use default empty object\n  }\n}\n\nfunction persistAppliedTransitions(\n  _window: Window,\n  transitions: Map<string, Set<string>>\n) {\n  if (transitions.size > 0) {\n    let json: Record<string, string[]> = {};\n    for (let [k, v] of transitions) {\n      json[k] = [...v];\n    }\n    try {\n      _window.sessionStorage.setItem(\n        TRANSITIONS_STORAGE_KEY,\n        JSON.stringify(json)\n      );\n    } catch (error) {\n      warning(\n        false,\n        `Failed to save applied view transitions in sessionStorage (${error}).`\n      );\n    }\n  }\n}\n\n//#endregion\n","import * as React from \"react\";\nimport type {\n  AgnosticIndexRouteObject,\n  AgnosticNonIndexRouteObject,\n  AgnosticRouteMatch,\n  History,\n  LazyRouteFunction,\n  Location,\n  Action as NavigationType,\n  RelativeRoutingType,\n  Router,\n  StaticHandlerContext,\n  To,\n  TrackedPromise,\n} from \"@remix-run/router\";\n\n// Create react-specific types from the agnostic types in @remix-run/router to\n// export from react-router\nexport interface IndexRouteObject {\n  caseSensitive?: AgnosticIndexRouteObject[\"caseSensitive\"];\n  path?: AgnosticIndexRouteObject[\"path\"];\n  id?: AgnosticIndexRouteObject[\"id\"];\n  loader?: AgnosticIndexRouteObject[\"loader\"];\n  action?: AgnosticIndexRouteObject[\"action\"];\n  hasErrorBoundary?: AgnosticIndexRouteObject[\"hasErrorBoundary\"];\n  shouldRevalidate?: AgnosticIndexRouteObject[\"shouldRevalidate\"];\n  handle?: AgnosticIndexRouteObject[\"handle\"];\n  index: true;\n  children?: undefined;\n  element?: React.ReactNode | null;\n  hydrateFallbackElement?: React.ReactNode | null;\n  errorElement?: React.ReactNode | null;\n  Component?: React.ComponentType | null;\n  HydrateFallback?: React.ComponentType | null;\n  ErrorBoundary?: React.ComponentType | null;\n  lazy?: LazyRouteFunction<RouteObject>;\n}\n\nexport interface NonIndexRouteObject {\n  caseSensitive?: AgnosticNonIndexRouteObject[\"caseSensitive\"];\n  path?: AgnosticNonIndexRouteObject[\"path\"];\n  id?: AgnosticNonIndexRouteObject[\"id\"];\n  loader?: AgnosticNonIndexRouteObject[\"loader\"];\n  action?: AgnosticNonIndexRouteObject[\"action\"];\n  hasErrorBoundary?: AgnosticNonIndexRouteObject[\"hasErrorBoundary\"];\n  shouldRevalidate?: AgnosticNonIndexRouteObject[\"shouldRevalidate\"];\n  handle?: AgnosticNonIndexRouteObject[\"handle\"];\n  index?: false;\n  children?: RouteObject[];\n  element?: React.ReactNode | null;\n  hydrateFallbackElement?: React.ReactNode | null;\n  errorElement?: React.ReactNode | null;\n  Component?: React.ComponentType | null;\n  HydrateFallback?: React.ComponentType | null;\n  ErrorBoundary?: React.ComponentType | null;\n  lazy?: LazyRouteFunction<RouteObject>;\n}\n\nexport type RouteObject = IndexRouteObject | NonIndexRouteObject;\n\nexport type DataRouteObject = RouteObject & {\n  children?: DataRouteObject[];\n  id: string;\n};\n\nexport interface RouteMatch<\n  ParamKey extends string = string,\n  RouteObjectType extends RouteObject = RouteObject\n> extends AgnosticRouteMatch<ParamKey, RouteObjectType> {}\n\nexport interface DataRouteMatch extends RouteMatch<string, DataRouteObject> {}\n\nexport interface DataRouterContextObject\n  // Omit `future` since those can be pulled from the `router`\n  // `NavigationContext` needs future since it doesn't have a `router` in all cases\n  extends Omit<NavigationContextObject, \"future\"> {\n  router: Router;\n  staticContext?: StaticHandlerContext;\n}\n\nexport const DataRouterContext =\n  React.createContext<DataRouterContextObject | null>(null);\nif (__DEV__) {\n  DataRouterContext.displayName = \"DataRouter\";\n}\n\nexport const DataRouterStateContext = React.createContext<\n  Router[\"state\"] | null\n>(null);\nif (__DEV__) {\n  DataRouterStateContext.displayName = \"DataRouterState\";\n}\n\nexport const AwaitContext = React.createContext<TrackedPromise | null>(null);\nif (__DEV__) {\n  AwaitContext.displayName = \"Await\";\n}\n\nexport interface NavigateOptions {\n  replace?: boolean;\n  state?: any;\n  preventScrollReset?: boolean;\n  relative?: RelativeRoutingType;\n  unstable_flushSync?: boolean;\n  unstable_viewTransition?: boolean;\n}\n\n/**\n * A Navigator is a \"location changer\"; it's how you get to different locations.\n *\n * Every history instance conforms to the Navigator interface, but the\n * distinction is useful primarily when it comes to the low-level `<Router>` API\n * where both the location and a navigator must be provided separately in order\n * to avoid \"tearing\" that may occur in a suspense-enabled app if the action\n * and/or location were to be read directly from the history instance.\n */\nexport interface Navigator {\n  createHref: History[\"createHref\"];\n  // Optional for backwards-compat with Router/HistoryRouter usage (edge case)\n  encodeLocation?: History[\"encodeLocation\"];\n  go: History[\"go\"];\n  push(to: To, state?: any, opts?: NavigateOptions): void;\n  replace(to: To, state?: any, opts?: NavigateOptions): void;\n}\n\ninterface NavigationContextObject {\n  basename: string;\n  navigator: Navigator;\n  static: boolean;\n  future: {\n    v7_relativeSplatPath: boolean;\n  };\n}\n\nexport const NavigationContext = React.createContext<NavigationContextObject>(\n  null!\n);\n\nif (__DEV__) {\n  NavigationContext.displayName = \"Navigation\";\n}\n\ninterface LocationContextObject {\n  location: Location;\n  navigationType: NavigationType;\n}\n\nexport const LocationContext = React.createContext<LocationContextObject>(\n  null!\n);\n\nif (__DEV__) {\n  LocationContext.displayName = \"Location\";\n}\n\nexport interface RouteContextObject {\n  outlet: React.ReactElement | null;\n  matches: RouteMatch[];\n  isDataRoute: boolean;\n}\n\nexport const RouteContext = React.createContext<RouteContextObject>({\n  outlet: null,\n  matches: [],\n  isDataRoute: false,\n});\n\nif (__DEV__) {\n  RouteContext.displayName = \"Route\";\n}\n\nexport const RouteErrorContext = React.createContext<any>(null);\n\nif (__DEV__) {\n  RouteErrorContext.displayName = \"RouteError\";\n}\n","import * as React from \"react\";\nimport type {\n  Blocker,\n  BlockerFunction,\n  Location,\n  ParamParseKey,\n  Params,\n  Path,\n  PathMatch,\n  PathPattern,\n  RelativeRoutingType,\n  Router as RemixRouter,\n  RevalidationState,\n  To,\n  UIMatch,\n} from \"@remix-run/router\";\nimport {\n  IDLE_BLOCKER,\n  Action as NavigationType,\n  UNSAFE_convertRouteMatchToUiMatch as convertRouteMatchToUiMatch,\n  UNSAFE_getResolveToMatches as getResolveToMatches,\n  UNSAFE_invariant as invariant,\n  isRouteErrorResponse,\n  joinPaths,\n  matchPath,\n  matchRoutes,\n  parsePath,\n  resolveTo,\n  stripBasename,\n  UNSAFE_warning as warning,\n} from \"@remix-run/router\";\n\nimport type {\n  DataRouteMatch,\n  NavigateOptions,\n  RouteContextObject,\n  RouteMatch,\n  RouteObject,\n} from \"./context\";\nimport {\n  AwaitContext,\n  DataRouterContext,\n  DataRouterStateContext,\n  LocationContext,\n  NavigationContext,\n  RouteContext,\n  RouteErrorContext,\n} from \"./context\";\n\n/**\n * Returns the full href for the given \"to\" value. This is useful for building\n * custom links that are also accessible and preserve right-click behavior.\n *\n * @see https://reactrouter.com/hooks/use-href\n */\nexport function useHref(\n  to: To,\n  { relative }: { relative?: RelativeRoutingType } = {}\n): string {\n  invariant(\n    useInRouterContext(),\n    // TODO: This error is probably because they somehow have 2 versions of the\n    // router loaded. We can help them understand how to avoid that.\n    `useHref() may be used only in the context of a <Router> component.`\n  );\n\n  let { basename, navigator } = React.useContext(NavigationContext);\n  let { hash, pathname, search } = useResolvedPath(to, { relative });\n\n  let joinedPathname = pathname;\n\n  // If we're operating within a basename, prepend it to the pathname prior\n  // to creating the href.  If this is a root navigation, then just use the raw\n  // basename which allows the basename to have full control over the presence\n  // of a trailing slash on root links\n  if (basename !== \"/\") {\n    joinedPathname =\n      pathname === \"/\" ? basename : joinPaths([basename, pathname]);\n  }\n\n  return navigator.createHref({ pathname: joinedPathname, search, hash });\n}\n\n/**\n * Returns true if this component is a descendant of a `<Router>`.\n *\n * @see https://reactrouter.com/hooks/use-in-router-context\n */\nexport function useInRouterContext(): boolean {\n  return React.useContext(LocationContext) != null;\n}\n\n/**\n * Returns the current location object, which represents the current URL in web\n * browsers.\n *\n * Note: If you're using this it may mean you're doing some of your own\n * \"routing\" in your app, and we'd like to know what your use case is. We may\n * be able to provide something higher-level to better suit your needs.\n *\n * @see https://reactrouter.com/hooks/use-location\n */\nexport function useLocation(): Location {\n  invariant(\n    useInRouterContext(),\n    // TODO: This error is probably because they somehow have 2 versions of the\n    // router loaded. We can help them understand how to avoid that.\n    `useLocation() may be used only in the context of a <Router> component.`\n  );\n\n  return React.useContext(LocationContext).location;\n}\n\n/**\n * Returns the current navigation action which describes how the router came to\n * the current location, either by a pop, push, or replace on the history stack.\n *\n * @see https://reactrouter.com/hooks/use-navigation-type\n */\nexport function useNavigationType(): NavigationType {\n  return React.useContext(LocationContext).navigationType;\n}\n\n/**\n * Returns a PathMatch object if the given pattern matches the current URL.\n * This is useful for components that need to know \"active\" state, e.g.\n * `<NavLink>`.\n *\n * @see https://reactrouter.com/hooks/use-match\n */\nexport function useMatch<\n  ParamKey extends ParamParseKey<Path>,\n  Path extends string\n>(pattern: PathPattern<Path> | Path): PathMatch<ParamKey> | null {\n  invariant(\n    useInRouterContext(),\n    // TODO: This error is probably because they somehow have 2 versions of the\n    // router loaded. We can help them understand how to avoid that.\n    `useMatch() may be used only in the context of a <Router> component.`\n  );\n\n  let { pathname } = useLocation();\n  return React.useMemo(\n    () => matchPath<ParamKey, Path>(pattern, pathname),\n    [pathname, pattern]\n  );\n}\n\n/**\n * The interface for the navigate() function returned from useNavigate().\n */\nexport interface NavigateFunction {\n  (to: To, options?: NavigateOptions): void;\n  (delta: number): void;\n}\n\nconst navigateEffectWarning =\n  `You should call navigate() in a React.useEffect(), not when ` +\n  `your component is first rendered.`;\n\n// Mute warnings for calls to useNavigate in SSR environments\nfunction useIsomorphicLayoutEffect(\n  cb: Parameters<typeof React.useLayoutEffect>[0]\n) {\n  let isStatic = React.useContext(NavigationContext).static;\n  if (!isStatic) {\n    // We should be able to get rid of this once react 18.3 is released\n    // See: https://github.com/facebook/react/pull/26395\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useLayoutEffect(cb);\n  }\n}\n\n/**\n * Returns an imperative method for changing the location. Used by `<Link>`s, but\n * may also be used by other elements to change the location.\n *\n * @see https://reactrouter.com/hooks/use-navigate\n */\nexport function useNavigate(): NavigateFunction {\n  let { isDataRoute } = React.useContext(RouteContext);\n  // Conditional usage is OK here because the usage of a data router is static\n  // eslint-disable-next-line react-hooks/rules-of-hooks\n  return isDataRoute ? useNavigateStable() : useNavigateUnstable();\n}\n\nfunction useNavigateUnstable(): NavigateFunction {\n  invariant(\n    useInRouterContext(),\n    // TODO: This error is probably because they somehow have 2 versions of the\n    // router loaded. We can help them understand how to avoid that.\n    `useNavigate() may be used only in the context of a <Router> component.`\n  );\n\n  let dataRouterContext = React.useContext(DataRouterContext);\n  let { basename, future, navigator } = React.useContext(NavigationContext);\n  let { matches } = React.useContext(RouteContext);\n  let { pathname: locationPathname } = useLocation();\n\n  let routePathnamesJson = JSON.stringify(\n    getResolveToMatches(matches, future.v7_relativeSplatPath)\n  );\n\n  let activeRef = React.useRef(false);\n  useIsomorphicLayoutEffect(() => {\n    activeRef.current = true;\n  });\n\n  let navigate: NavigateFunction = React.useCallback(\n    (to: To | number, options: NavigateOptions = {}) => {\n      warning(activeRef.current, navigateEffectWarning);\n\n      // Short circuit here since if this happens on first render the navigate\n      // is useless because we haven't wired up our history listener yet\n      if (!activeRef.current) return;\n\n      if (typeof to === \"number\") {\n        navigator.go(to);\n        return;\n      }\n\n      let path = resolveTo(\n        to,\n        JSON.parse(routePathnamesJson),\n        locationPathname,\n        options.relative === \"path\"\n      );\n\n      // If we're operating within a basename, prepend it to the pathname prior\n      // to handing off to history (but only if we're not in a data router,\n      // otherwise it'll prepend the basename inside of the router).\n      // If this is a root navigation, then we navigate to the raw basename\n      // which allows the basename to have full control over the presence of a\n      // trailing slash on root links\n      if (dataRouterContext == null && basename !== \"/\") {\n        path.pathname =\n          path.pathname === \"/\"\n            ? basename\n            : joinPaths([basename, path.pathname]);\n      }\n\n      (!!options.replace ? navigator.replace : navigator.push)(\n        path,\n        options.state,\n        options\n      );\n    },\n    [\n      basename,\n      navigator,\n      routePathnamesJson,\n      locationPathname,\n      dataRouterContext,\n    ]\n  );\n\n  return navigate;\n}\n\nconst OutletContext = React.createContext<unknown>(null);\n\n/**\n * Returns the context (if provided) for the child route at this level of the route\n * hierarchy.\n * @see https://reactrouter.com/hooks/use-outlet-context\n */\nexport function useOutletContext<Context = unknown>(): Context {\n  return React.useContext(OutletContext) as Context;\n}\n\n/**\n * Returns the element for the child route at this level of the route\n * hierarchy. Used internally by `<Outlet>` to render child routes.\n *\n * @see https://reactrouter.com/hooks/use-outlet\n */\nexport function useOutlet(context?: unknown): React.ReactElement | null {\n  let outlet = React.useContext(RouteContext).outlet;\n  if (outlet) {\n    return (\n      <OutletContext.Provider value={context}>{outlet}</OutletContext.Provider>\n    );\n  }\n  return outlet;\n}\n\n/**\n * Returns an object of key/value pairs of the dynamic params from the current\n * URL that were matched by the route path.\n *\n * @see https://reactrouter.com/hooks/use-params\n */\nexport function useParams<\n  ParamsOrKey extends string | Record<string, string | undefined> = string\n>(): Readonly<\n  [ParamsOrKey] extends [string] ? Params<ParamsOrKey> : Partial<ParamsOrKey>\n> {\n  let { matches } = React.useContext(RouteContext);\n  let routeMatch = matches[matches.length - 1];\n  return routeMatch ? (routeMatch.params as any) : {};\n}\n\n/**\n * Resolves the pathname of the given `to` value against the current location.\n *\n * @see https://reactrouter.com/hooks/use-resolved-path\n */\nexport function useResolvedPath(\n  to: To,\n  { relative }: { relative?: RelativeRoutingType } = {}\n): Path {\n  let { future } = React.useContext(NavigationContext);\n  let { matches } = React.useContext(RouteContext);\n  let { pathname: locationPathname } = useLocation();\n  let routePathnamesJson = JSON.stringify(\n    getResolveToMatches(matches, future.v7_relativeSplatPath)\n  );\n\n  return React.useMemo(\n    () =>\n      resolveTo(\n        to,\n        JSON.parse(routePathnamesJson),\n        locationPathname,\n        relative === \"path\"\n      ),\n    [to, routePathnamesJson, locationPathname, relative]\n  );\n}\n\n/**\n * Returns the element of the route that matched the current location, prepared\n * with the correct context to render the remainder of the route tree. Route\n * elements in the tree must render an `<Outlet>` to render their child route's\n * element.\n *\n * @see https://reactrouter.com/hooks/use-routes\n */\nexport function useRoutes(\n  routes: RouteObject[],\n  locationArg?: Partial<Location> | string\n): React.ReactElement | null {\n  return useRoutesImpl(routes, locationArg);\n}\n\n// Internal implementation with accept optional param for RouterProvider usage\nexport function useRoutesImpl(\n  routes: RouteObject[],\n  locationArg?: Partial<Location> | string,\n  dataRouterState?: RemixRouter[\"state\"],\n  future?: RemixRouter[\"future\"]\n): React.ReactElement | null {\n  invariant(\n    useInRouterContext(),\n    // TODO: This error is probably because they somehow have 2 versions of the\n    // router loaded. We can help them understand how to avoid that.\n    `useRoutes() may be used only in the context of a <Router> component.`\n  );\n\n  let { navigator } = React.useContext(NavigationContext);\n  let { matches: parentMatches } = React.useContext(RouteContext);\n  let routeMatch = parentMatches[parentMatches.length - 1];\n  let parentParams = routeMatch ? routeMatch.params : {};\n  let parentPathname = routeMatch ? routeMatch.pathname : \"/\";\n  let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : \"/\";\n  let parentRoute = routeMatch && routeMatch.route;\n\n  if (__DEV__) {\n    // You won't get a warning about 2 different <Routes> under a <Route>\n    // without a trailing *, but this is a best-effort warning anyway since we\n    // cannot even give the warning unless they land at the parent route.\n    //\n    // Example:\n    //\n    // <Routes>\n    //   {/* This route path MUST end with /* because otherwise\n    //       it will never match /blog/post/123 */}\n    //   <Route path=\"blog\" element={<Blog />} />\n    //   <Route path=\"blog/feed\" element={<BlogFeed />} />\n    // </Routes>\n    //\n    // function Blog() {\n    //   return (\n    //     <Routes>\n    //       <Route path=\"post/:id\" element={<Post />} />\n    //     </Routes>\n    //   );\n    // }\n    let parentPath = (parentRoute && parentRoute.path) || \"\";\n    warningOnce(\n      parentPathname,\n      !parentRoute || parentPath.endsWith(\"*\"),\n      `You rendered descendant <Routes> (or called \\`useRoutes()\\`) at ` +\n        `\"${parentPathname}\" (under <Route path=\"${parentPath}\">) but the ` +\n        `parent route path has no trailing \"*\". This means if you navigate ` +\n        `deeper, the parent won't match anymore and therefore the child ` +\n        `routes will never render.\\n\\n` +\n        `Please change the parent <Route path=\"${parentPath}\"> to <Route ` +\n        `path=\"${parentPath === \"/\" ? \"*\" : `${parentPath}/*`}\">.`\n    );\n  }\n\n  let locationFromContext = useLocation();\n\n  let location;\n  if (locationArg) {\n    let parsedLocationArg =\n      typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n    invariant(\n      parentPathnameBase === \"/\" ||\n        parsedLocationArg.pathname?.startsWith(parentPathnameBase),\n      `When overriding the location using \\`<Routes location>\\` or \\`useRoutes(routes, location)\\`, ` +\n        `the location pathname must begin with the portion of the URL pathname that was ` +\n        `matched by all parent routes. The current pathname base is \"${parentPathnameBase}\" ` +\n        `but pathname \"${parsedLocationArg.pathname}\" was given in the \\`location\\` prop.`\n    );\n\n    location = parsedLocationArg;\n  } else {\n    location = locationFromContext;\n  }\n\n  let pathname = location.pathname || \"/\";\n\n  let remainingPathname = pathname;\n  if (parentPathnameBase !== \"/\") {\n    // Determine the remaining pathname by removing the # of URL segments the\n    // parentPathnameBase has, instead of removing based on character count.\n    // This is because we can't guarantee that incoming/outgoing encodings/\n    // decodings will match exactly.\n    // We decode paths before matching on a per-segment basis with\n    // decodeURIComponent(), but we re-encode pathnames via `new URL()` so they\n    // match what `window.location.pathname` would reflect.  Those don't 100%\n    // align when it comes to encoded URI characters such as % and &.\n    //\n    // So we may end up with:\n    //   pathname:           \"/descendant/a%25b/match\"\n    //   parentPathnameBase: \"/descendant/a%b\"\n    //\n    // And the direct substring removal approach won't work :/\n    let parentSegments = parentPathnameBase.replace(/^\\//, \"\").split(\"/\");\n    let segments = pathname.replace(/^\\//, \"\").split(\"/\");\n    remainingPathname = \"/\" + segments.slice(parentSegments.length).join(\"/\");\n  }\n\n  let matches = matchRoutes(routes, { pathname: remainingPathname });\n\n  if (__DEV__) {\n    warning(\n      parentRoute || matches != null,\n      `No routes matched location \"${location.pathname}${location.search}${location.hash}\" `\n    );\n\n    warning(\n      matches == null ||\n        matches[matches.length - 1].route.element !== undefined ||\n        matches[matches.length - 1].route.Component !== undefined ||\n        matches[matches.length - 1].route.lazy !== undefined,\n      `Matched leaf route at location \"${location.pathname}${location.search}${location.hash}\" ` +\n        `does not have an element or Component. This means it will render an <Outlet /> with a ` +\n        `null value by default resulting in an \"empty\" page.`\n    );\n  }\n\n  let renderedMatches = _renderMatches(\n    matches &&\n      matches.map((match) =>\n        Object.assign({}, match, {\n          params: Object.assign({}, parentParams, match.params),\n          pathname: joinPaths([\n            parentPathnameBase,\n            // Re-encode pathnames that were decoded inside matchRoutes\n            navigator.encodeLocation\n              ? navigator.encodeLocation(match.pathname).pathname\n              : match.pathname,\n          ]),\n          pathnameBase:\n            match.pathnameBase === \"/\"\n              ? parentPathnameBase\n              : joinPaths([\n                  parentPathnameBase,\n                  // Re-encode pathnames that were decoded inside matchRoutes\n                  navigator.encodeLocation\n                    ? navigator.encodeLocation(match.pathnameBase).pathname\n                    : match.pathnameBase,\n                ]),\n        })\n      ),\n    parentMatches,\n    dataRouterState,\n    future\n  );\n\n  // When a user passes in a `locationArg`, the associated routes need to\n  // be wrapped in a new `LocationContext.Provider` in order for `useLocation`\n  // to use the scoped location instead of the global location.\n  if (locationArg && renderedMatches) {\n    return (\n      <LocationContext.Provider\n        value={{\n          location: {\n            pathname: \"/\",\n            search: \"\",\n            hash: \"\",\n            state: null,\n            key: \"default\",\n            ...location,\n          },\n          navigationType: NavigationType.Pop,\n        }}\n      >\n        {renderedMatches}\n      </LocationContext.Provider>\n    );\n  }\n\n  return renderedMatches;\n}\n\nfunction DefaultErrorComponent() {\n  let error = useRouteError();\n  let message = isRouteErrorResponse(error)\n    ? `${error.status} ${error.statusText}`\n    : error instanceof Error\n    ? error.message\n    : JSON.stringify(error);\n  let stack = error instanceof Error ? error.stack : null;\n  let lightgrey = \"rgba(200,200,200, 0.5)\";\n  let preStyles = { padding: \"0.5rem\", backgroundColor: lightgrey };\n  let codeStyles = { padding: \"2px 4px\", backgroundColor: lightgrey };\n\n  let devInfo = null;\n  if (__DEV__) {\n    console.error(\n      \"Error handled by React Router default ErrorBoundary:\",\n      error\n    );\n\n    devInfo = (\n      <>\n        <p>💿 Hey developer 👋</p>\n        <p>\n          You can provide a way better UX than this when your app throws errors\n          by providing your own <code style={codeStyles}>ErrorBoundary</code> or{\" \"}\n          <code style={codeStyles}>errorElement</code> prop on your route.\n        </p>\n      </>\n    );\n  }\n\n  return (\n    <>\n      <h2>Unexpected Application Error!</h2>\n      <h3 style={{ fontStyle: \"italic\" }}>{message}</h3>\n      {stack ? <pre style={preStyles}>{stack}</pre> : null}\n      {devInfo}\n    </>\n  );\n}\n\nconst defaultErrorElement = <DefaultErrorComponent />;\n\ntype RenderErrorBoundaryProps = React.PropsWithChildren<{\n  location: Location;\n  revalidation: RevalidationState;\n  error: any;\n  component: React.ReactNode;\n  routeContext: RouteContextObject;\n}>;\n\ntype RenderErrorBoundaryState = {\n  location: Location;\n  revalidation: RevalidationState;\n  error: any;\n};\n\nexport class RenderErrorBoundary extends React.Component<\n  RenderErrorBoundaryProps,\n  RenderErrorBoundaryState\n> {\n  constructor(props: RenderErrorBoundaryProps) {\n    super(props);\n    this.state = {\n      location: props.location,\n      revalidation: props.revalidation,\n      error: props.error,\n    };\n  }\n\n  static getDerivedStateFromError(error: any) {\n    return { error: error };\n  }\n\n  static getDerivedStateFromProps(\n    props: RenderErrorBoundaryProps,\n    state: RenderErrorBoundaryState\n  ) {\n    // When we get into an error state, the user will likely click \"back\" to the\n    // previous page that didn't have an error. Because this wraps the entire\n    // application, that will have no effect--the error page continues to display.\n    // This gives us a mechanism to recover from the error when the location changes.\n    //\n    // Whether we're in an error state or not, we update the location in state\n    // so that when we are in an error state, it gets reset when a new location\n    // comes in and the user recovers from the error.\n    if (\n      state.location !== props.location ||\n      (state.revalidation !== \"idle\" && props.revalidation === \"idle\")\n    ) {\n      return {\n        error: props.error,\n        location: props.location,\n        revalidation: props.revalidation,\n      };\n    }\n\n    // If we're not changing locations, preserve the location but still surface\n    // any new errors that may come through. We retain the existing error, we do\n    // this because the error provided from the app state may be cleared without\n    // the location changing.\n    return {\n      error: props.error !== undefined ? props.error : state.error,\n      location: state.location,\n      revalidation: props.revalidation || state.revalidation,\n    };\n  }\n\n  componentDidCatch(error: any, errorInfo: any) {\n    console.error(\n      \"React Router caught the following error during render\",\n      error,\n      errorInfo\n    );\n  }\n\n  render() {\n    return this.state.error !== undefined ? (\n      <RouteContext.Provider value={this.props.routeContext}>\n        <RouteErrorContext.Provider\n          value={this.state.error}\n          children={this.props.component}\n        />\n      </RouteContext.Provider>\n    ) : (\n      this.props.children\n    );\n  }\n}\n\ninterface RenderedRouteProps {\n  routeContext: RouteContextObject;\n  match: RouteMatch<string, RouteObject>;\n  children: React.ReactNode | null;\n}\n\nfunction RenderedRoute({ routeContext, match, children }: RenderedRouteProps) {\n  let dataRouterContext = React.useContext(DataRouterContext);\n\n  // Track how deep we got in our render pass to emulate SSR componentDidCatch\n  // in a DataStaticRouter\n  if (\n    dataRouterContext &&\n    dataRouterContext.static &&\n    dataRouterContext.staticContext &&\n    (match.route.errorElement || match.route.ErrorBoundary)\n  ) {\n    dataRouterContext.staticContext._deepestRenderedBoundaryId = match.route.id;\n  }\n\n  return (\n    <RouteContext.Provider value={routeContext}>\n      {children}\n    </RouteContext.Provider>\n  );\n}\n\nexport function _renderMatches(\n  matches: RouteMatch[] | null,\n  parentMatches: RouteMatch[] = [],\n  dataRouterState: RemixRouter[\"state\"] | null = null,\n  future: RemixRouter[\"future\"] | null = null\n): React.ReactElement | null {\n  if (matches == null) {\n    if (dataRouterState?.errors) {\n      // Don't bail if we have data router errors so we can render them in the\n      // boundary.  Use the pre-matched (or shimmed) matches\n      matches = dataRouterState.matches as DataRouteMatch[];\n    } else {\n      return null;\n    }\n  }\n\n  let renderedMatches = matches;\n\n  // If we have data errors, trim matches to the highest error boundary\n  let errors = dataRouterState?.errors;\n  if (errors != null) {\n    let errorIndex = renderedMatches.findIndex(\n      (m) => m.route.id && errors?.[m.route.id] !== undefined\n    );\n    invariant(\n      errorIndex >= 0,\n      `Could not find a matching route for errors on route IDs: ${Object.keys(\n        errors\n      ).join(\",\")}`\n    );\n    renderedMatches = renderedMatches.slice(\n      0,\n      Math.min(renderedMatches.length, errorIndex + 1)\n    );\n  }\n\n  // If we're in a partial hydration mode, detect if we need to render down to\n  // a given HydrateFallback while we load the rest of the hydration data\n  let renderFallback = false;\n  let fallbackIndex = -1;\n  if (dataRouterState && future && future.v7_partialHydration) {\n    for (let i = 0; i < renderedMatches.length; i++) {\n      let match = renderedMatches[i];\n      // Track the deepest fallback up until the first route without data\n      if (match.route.HydrateFallback || match.route.hydrateFallbackElement) {\n        fallbackIndex = i;\n      }\n\n      if (match.route.id) {\n        let { loaderData, errors } = dataRouterState;\n        let needsToRunLoader =\n          match.route.loader &&\n          loaderData[match.route.id] === undefined &&\n          (!errors || errors[match.route.id] === undefined);\n        if (match.route.lazy || needsToRunLoader) {\n          // We found the first route that's not ready to render (waiting on\n          // lazy, or has a loader that hasn't run yet).  Flag that we need to\n          // render a fallback and render up until the appropriate fallback\n          renderFallback = true;\n          if (fallbackIndex >= 0) {\n            renderedMatches = renderedMatches.slice(0, fallbackIndex + 1);\n          } else {\n            renderedMatches = [renderedMatches[0]];\n          }\n          break;\n        }\n      }\n    }\n  }\n\n  return renderedMatches.reduceRight((outlet, match, index) => {\n    // Only data routers handle errors/fallbacks\n    let error: any;\n    let shouldRenderHydrateFallback = false;\n    let errorElement: React.ReactNode | null = null;\n    let hydrateFallbackElement: React.ReactNode | null = null;\n    if (dataRouterState) {\n      error = errors && match.route.id ? errors[match.route.id] : undefined;\n      errorElement = match.route.errorElement || defaultErrorElement;\n\n      if (renderFallback) {\n        if (fallbackIndex < 0 && index === 0) {\n          warningOnce(\n            \"route-fallback\",\n            false,\n            \"No `HydrateFallback` element provided to render during initial hydration\"\n          );\n          shouldRenderHydrateFallback = true;\n          hydrateFallbackElement = null;\n        } else if (fallbackIndex === index) {\n          shouldRenderHydrateFallback = true;\n          hydrateFallbackElement = match.route.hydrateFallbackElement || null;\n        }\n      }\n    }\n\n    let matches = parentMatches.concat(renderedMatches.slice(0, index + 1));\n    let getChildren = () => {\n      let children: React.ReactNode;\n      if (error) {\n        children = errorElement;\n      } else if (shouldRenderHydrateFallback) {\n        children = hydrateFallbackElement;\n      } else if (match.route.Component) {\n        // Note: This is a de-optimized path since React won't re-use the\n        // ReactElement since it's identity changes with each new\n        // React.createElement call.  We keep this so folks can use\n        // `<Route Component={...}>` in `<Routes>` but generally `Component`\n        // usage is only advised in `RouterProvider` when we can convert it to\n        // `element` ahead of time.\n        children = <match.route.Component />;\n      } else if (match.route.element) {\n        children = match.route.element;\n      } else {\n        children = outlet;\n      }\n      return (\n        <RenderedRoute\n          match={match}\n          routeContext={{\n            outlet,\n            matches,\n            isDataRoute: dataRouterState != null,\n          }}\n          children={children}\n        />\n      );\n    };\n    // Only wrap in an error boundary within data router usages when we have an\n    // ErrorBoundary/errorElement on this route.  Otherwise let it bubble up to\n    // an ancestor ErrorBoundary/errorElement\n    return dataRouterState &&\n      (match.route.ErrorBoundary || match.route.errorElement || index === 0) ? (\n      <RenderErrorBoundary\n        location={dataRouterState.location}\n        revalidation={dataRouterState.revalidation}\n        component={errorElement}\n        error={error}\n        children={getChildren()}\n        routeContext={{ outlet: null, matches, isDataRoute: true }}\n      />\n    ) : (\n      getChildren()\n    );\n  }, null as React.ReactElement | null);\n}\n\nenum DataRouterHook {\n  UseBlocker = \"useBlocker\",\n  UseRevalidator = \"useRevalidator\",\n  UseNavigateStable = \"useNavigate\",\n}\n\nenum DataRouterStateHook {\n  UseBlocker = \"useBlocker\",\n  UseLoaderData = \"useLoaderData\",\n  UseActionData = \"useActionData\",\n  UseRouteError = \"useRouteError\",\n  UseNavigation = \"useNavigation\",\n  UseRouteLoaderData = \"useRouteLoaderData\",\n  UseMatches = \"useMatches\",\n  UseRevalidator = \"useRevalidator\",\n  UseNavigateStable = \"useNavigate\",\n  UseRouteId = \"useRouteId\",\n}\n\nfunction getDataRouterConsoleError(\n  hookName: DataRouterHook | DataRouterStateHook\n) {\n  return `${hookName} must be used within a data router.  See https://reactrouter.com/routers/picking-a-router.`;\n}\n\nfunction useDataRouterContext(hookName: DataRouterHook) {\n  let ctx = React.useContext(DataRouterContext);\n  invariant(ctx, getDataRouterConsoleError(hookName));\n  return ctx;\n}\n\nfunction useDataRouterState(hookName: DataRouterStateHook) {\n  let state = React.useContext(DataRouterStateContext);\n  invariant(state, getDataRouterConsoleError(hookName));\n  return state;\n}\n\nfunction useRouteContext(hookName: DataRouterStateHook) {\n  let route = React.useContext(RouteContext);\n  invariant(route, getDataRouterConsoleError(hookName));\n  return route;\n}\n\n// Internal version with hookName-aware debugging\nfunction useCurrentRouteId(hookName: DataRouterStateHook) {\n  let route = useRouteContext(hookName);\n  let thisRoute = route.matches[route.matches.length - 1];\n  invariant(\n    thisRoute.route.id,\n    `${hookName} can only be used on routes that contain a unique \"id\"`\n  );\n  return thisRoute.route.id;\n}\n\n/**\n * Returns the ID for the nearest contextual route\n */\nexport function useRouteId() {\n  return useCurrentRouteId(DataRouterStateHook.UseRouteId);\n}\n\n/**\n * Returns the current navigation, defaulting to an \"idle\" navigation when\n * no navigation is in progress\n */\nexport function useNavigation() {\n  let state = useDataRouterState(DataRouterStateHook.UseNavigation);\n  return state.navigation;\n}\n\n/**\n * Returns a revalidate function for manually triggering revalidation, as well\n * as the current state of any manual revalidations\n */\nexport function useRevalidator() {\n  let dataRouterContext = useDataRouterContext(DataRouterHook.UseRevalidator);\n  let state = useDataRouterState(DataRouterStateHook.UseRevalidator);\n  return React.useMemo(\n    () => ({\n      revalidate: dataRouterContext.router.revalidate,\n      state: state.revalidation,\n    }),\n    [dataRouterContext.router.revalidate, state.revalidation]\n  );\n}\n\n/**\n * Returns the active route matches, useful for accessing loaderData for\n * parent/child routes or the route \"handle\" property\n */\nexport function useMatches(): UIMatch[] {\n  let { matches, loaderData } = useDataRouterState(\n    DataRouterStateHook.UseMatches\n  );\n  return React.useMemo(\n    () => matches.map((m) => convertRouteMatchToUiMatch(m, loaderData)),\n    [matches, loaderData]\n  );\n}\n\n/**\n * Returns the loader data for the nearest ancestor Route loader\n */\nexport function useLoaderData(): unknown {\n  let state = useDataRouterState(DataRouterStateHook.UseLoaderData);\n  let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n\n  if (state.errors && state.errors[routeId] != null) {\n    console.error(\n      `You cannot \\`useLoaderData\\` in an errorElement (routeId: ${routeId})`\n    );\n    return undefined;\n  }\n  return state.loaderData[routeId];\n}\n\n/**\n * Returns the loaderData for the given routeId\n */\nexport function useRouteLoaderData(routeId: string): unknown {\n  let state = useDataRouterState(DataRouterStateHook.UseRouteLoaderData);\n  return state.loaderData[routeId];\n}\n\n/**\n * Returns the action data for the nearest ancestor Route action\n */\nexport function useActionData(): unknown {\n  let state = useDataRouterState(DataRouterStateHook.UseActionData);\n  let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n  return state.actionData ? state.actionData[routeId] : undefined;\n}\n\n/**\n * Returns the nearest ancestor Route error, which could be a loader/action\n * error or a render error.  This is intended to be called from your\n * ErrorBoundary/errorElement to display a proper error message.\n */\nexport function useRouteError(): unknown {\n  let error = React.useContext(RouteErrorContext);\n  let state = useDataRouterState(DataRouterStateHook.UseRouteError);\n  let routeId = useCurrentRouteId(DataRouterStateHook.UseRouteError);\n\n  // If this was a render error, we put it in a RouteError context inside\n  // of RenderErrorBoundary\n  if (error !== undefined) {\n    return error;\n  }\n\n  // Otherwise look for errors from our data router state\n  return state.errors?.[routeId];\n}\n\n/**\n * Returns the happy-path data from the nearest ancestor `<Await />` value\n */\nexport function useAsyncValue(): unknown {\n  let value = React.useContext(AwaitContext);\n  return value?._data;\n}\n\n/**\n * Returns the error from the nearest ancestor `<Await />` value\n */\nexport function useAsyncError(): unknown {\n  let value = React.useContext(AwaitContext);\n  return value?._error;\n}\n\nlet blockerId = 0;\n\n/**\n * Allow the application to block navigations within the SPA and present the\n * user a confirmation dialog to confirm the navigation.  Mostly used to avoid\n * using half-filled form data.  This does not handle hard-reloads or\n * cross-origin navigations.\n */\nexport function useBlocker(shouldBlock: boolean | BlockerFunction): Blocker {\n  let { router, basename } = useDataRouterContext(DataRouterHook.UseBlocker);\n  let state = useDataRouterState(DataRouterStateHook.UseBlocker);\n\n  let [blockerKey, setBlockerKey] = React.useState(\"\");\n  let blockerFunction = React.useCallback<BlockerFunction>(\n    (arg) => {\n      if (typeof shouldBlock !== \"function\") {\n        return !!shouldBlock;\n      }\n      if (basename === \"/\") {\n        return shouldBlock(arg);\n      }\n\n      // If they provided us a function and we've got an active basename, strip\n      // it from the locations we expose to the user to match the behavior of\n      // useLocation\n      let { currentLocation, nextLocation, historyAction } = arg;\n      return shouldBlock({\n        currentLocation: {\n          ...currentLocation,\n          pathname:\n            stripBasename(currentLocation.pathname, basename) ||\n            currentLocation.pathname,\n        },\n        nextLocation: {\n          ...nextLocation,\n          pathname:\n            stripBasename(nextLocation.pathname, basename) ||\n            nextLocation.pathname,\n        },\n        historyAction,\n      });\n    },\n    [basename, shouldBlock]\n  );\n\n  // This effect is in charge of blocker key assignment and deletion (which is\n  // tightly coupled to the key)\n  React.useEffect(() => {\n    let key = String(++blockerId);\n    setBlockerKey(key);\n    return () => router.deleteBlocker(key);\n  }, [router]);\n\n  // This effect handles assigning the blockerFunction.  This is to handle\n  // unstable blocker function identities, and happens only after the prior\n  // effect so we don't get an orphaned blockerFunction in the router with a\n  // key of \"\".  Until then we just have the IDLE_BLOCKER.\n  React.useEffect(() => {\n    if (blockerKey !== \"\") {\n      router.getBlocker(blockerKey, blockerFunction);\n    }\n  }, [router, blockerKey, blockerFunction]);\n\n  // Prefer the blocker from `state` not `router.state` since DataRouterContext\n  // is memoized so this ensures we update on blocker state updates\n  return blockerKey && state.blockers.has(blockerKey)\n    ? state.blockers.get(blockerKey)!\n    : IDLE_BLOCKER;\n}\n\n/**\n * Stable version of useNavigate that is used when we are in the context of\n * a RouterProvider.\n */\nfunction useNavigateStable(): NavigateFunction {\n  let { router } = useDataRouterContext(DataRouterHook.UseNavigateStable);\n  let id = useCurrentRouteId(DataRouterStateHook.UseNavigateStable);\n\n  let activeRef = React.useRef(false);\n  useIsomorphicLayoutEffect(() => {\n    activeRef.current = true;\n  });\n\n  let navigate: NavigateFunction = React.useCallback(\n    (to: To | number, options: NavigateOptions = {}) => {\n      warning(activeRef.current, navigateEffectWarning);\n\n      // Short circuit here since if this happens on first render the navigate\n      // is useless because we haven't wired up our router subscriber yet\n      if (!activeRef.current) return;\n\n      if (typeof to === \"number\") {\n        router.navigate(to);\n      } else {\n        router.navigate(to, { fromRouteId: id, ...options });\n      }\n    },\n    [router, id]\n  );\n\n  return navigate;\n}\n\nconst alreadyWarned: Record<string, boolean> = {};\n\nfunction warningOnce(key: string, cond: boolean, message: string) {\n  if (!cond && !alreadyWarned[key]) {\n    alreadyWarned[key] = true;\n    warning(false, message);\n  }\n}\n","import type {\n  InitialEntry,\n  LazyRouteFunction,\n  Location,\n  MemoryHistory,\n  RelativeRoutingType,\n  Router as RemixRouter,\n  RouterState,\n  RouterSubscriber,\n  To,\n  TrackedPromise,\n} from \"@remix-run/router\";\nimport {\n  AbortedDeferredError,\n  Action as NavigationType,\n  createMemoryHistory,\n  UNSAFE_getResolveToMatches as getResolveToMatches,\n  UNSAFE_invariant as invariant,\n  parsePath,\n  resolveTo,\n  stripBasename,\n  UNSAFE_warning as warning,\n} from \"@remix-run/router\";\nimport * as React from \"react\";\n\nimport type {\n  DataRouteObject,\n  IndexRouteObject,\n  Navigator,\n  NonIndexRouteObject,\n  RouteMatch,\n  RouteObject,\n} from \"./context\";\nimport {\n  AwaitContext,\n  DataRouterContext,\n  DataRouterStateContext,\n  LocationContext,\n  NavigationContext,\n  RouteContext,\n} from \"./context\";\nimport {\n  _renderMatches,\n  useAsyncValue,\n  useInRouterContext,\n  useLocation,\n  useNavigate,\n  useOutlet,\n  useRoutes,\n  useRoutesImpl,\n} from \"./hooks\";\n\nexport interface FutureConfig {\n  v7_relativeSplatPath: boolean;\n  v7_startTransition: boolean;\n}\n\nexport interface RouterProviderProps {\n  fallbackElement?: React.ReactNode;\n  router: RemixRouter;\n  // Only accept future flags relevant to rendering behavior\n  // routing flags should be accessed via router.future\n  future?: Partial<Pick<FutureConfig, \"v7_startTransition\">>;\n}\n\n/**\n  Webpack + React 17 fails to compile on any of the following because webpack\n  complains that `startTransition` doesn't exist in `React`:\n  * import { startTransition } from \"react\"\n  * import * as React from from \"react\";\n    \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n  * import * as React from from \"react\";\n    \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n  Moving it to a constant such as the following solves the Webpack/React 17 issue:\n  * import * as React from from \"react\";\n    const START_TRANSITION = \"startTransition\";\n    START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n  However, that introduces webpack/terser minification issues in production builds\n  in React 18 where minification/obfuscation ends up removing the call of\n  React.startTransition entirely from the first half of the ternary.  Grabbing\n  this exported reference once up front resolves that issue.\n\n  See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\n\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nexport function RouterProvider({\n  fallbackElement,\n  router,\n  future,\n}: RouterProviderProps): React.ReactElement {\n  let [state, setStateImpl] = React.useState(router.state);\n  let { v7_startTransition } = future || {};\n\n  let setState = React.useCallback<RouterSubscriber>(\n    (newState: RouterState) => {\n      if (v7_startTransition && startTransitionImpl) {\n        startTransitionImpl(() => setStateImpl(newState));\n      } else {\n        setStateImpl(newState);\n      }\n    },\n    [setStateImpl, v7_startTransition]\n  );\n\n  // Need to use a layout effect here so we are subscribed early enough to\n  // pick up on any render-driven redirects/navigations (useEffect/<Navigate>)\n  React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n\n  React.useEffect(() => {\n    warning(\n      fallbackElement == null || !router.future.v7_partialHydration,\n      \"`<RouterProvider fallbackElement>` is deprecated when using \" +\n        \"`v7_partialHydration`, use a `HydrateFallback` component instead\"\n    );\n    // Only log this once on initial mount\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  let navigator = React.useMemo((): Navigator => {\n    return {\n      createHref: router.createHref,\n      encodeLocation: router.encodeLocation,\n      go: (n) => router.navigate(n),\n      push: (to, state, opts) =>\n        router.navigate(to, {\n          state,\n          preventScrollReset: opts?.preventScrollReset,\n        }),\n      replace: (to, state, opts) =>\n        router.navigate(to, {\n          replace: true,\n          state,\n          preventScrollReset: opts?.preventScrollReset,\n        }),\n    };\n  }, [router]);\n\n  let basename = router.basename || \"/\";\n\n  let dataRouterContext = React.useMemo(\n    () => ({\n      router,\n      navigator,\n      static: false,\n      basename,\n    }),\n    [router, navigator, basename]\n  );\n\n  // The fragment and {null} here are important!  We need them to keep React 18's\n  // useId happy when we are server-rendering since we may have a <script> here\n  // containing the hydrated server-side staticContext (from StaticRouterProvider).\n  // useId relies on the component tree structure to generate deterministic id's\n  // so we need to ensure it remains the same on the client even though\n  // we don't need the <script> tag\n  return (\n    <>\n      <DataRouterContext.Provider value={dataRouterContext}>\n        <DataRouterStateContext.Provider value={state}>\n          <Router\n            basename={basename}\n            location={state.location}\n            navigationType={state.historyAction}\n            navigator={navigator}\n            future={{\n              v7_relativeSplatPath: router.future.v7_relativeSplatPath,\n            }}\n          >\n            {state.initialized || router.future.v7_partialHydration ? (\n              <DataRoutes\n                routes={router.routes}\n                future={router.future}\n                state={state}\n              />\n            ) : (\n              fallbackElement\n            )}\n          </Router>\n        </DataRouterStateContext.Provider>\n      </DataRouterContext.Provider>\n      {null}\n    </>\n  );\n}\n\nfunction DataRoutes({\n  routes,\n  future,\n  state,\n}: {\n  routes: DataRouteObject[];\n  future: RemixRouter[\"future\"];\n  state: RouterState;\n}): React.ReactElement | null {\n  return useRoutesImpl(routes, undefined, state, future);\n}\n\nexport interface MemoryRouterProps {\n  basename?: string;\n  children?: React.ReactNode;\n  initialEntries?: InitialEntry[];\n  initialIndex?: number;\n  future?: Partial<FutureConfig>;\n}\n\n/**\n * A `<Router>` that stores all entries in memory.\n *\n * @see https://reactrouter.com/router-components/memory-router\n */\nexport function MemoryRouter({\n  basename,\n  children,\n  initialEntries,\n  initialIndex,\n  future,\n}: MemoryRouterProps): React.ReactElement {\n  let historyRef = React.useRef<MemoryHistory>();\n  if (historyRef.current == null) {\n    historyRef.current = createMemoryHistory({\n      initialEntries,\n      initialIndex,\n      v5Compat: true,\n    });\n  }\n\n  let history = historyRef.current;\n  let [state, setStateImpl] = React.useState({\n    action: history.action,\n    location: history.location,\n  });\n  let { v7_startTransition } = future || {};\n  let setState = React.useCallback(\n    (newState: { action: NavigationType; location: Location }) => {\n      v7_startTransition && startTransitionImpl\n        ? startTransitionImpl(() => setStateImpl(newState))\n        : setStateImpl(newState);\n    },\n    [setStateImpl, v7_startTransition]\n  );\n\n  React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n\n  return (\n    <Router\n      basename={basename}\n      children={children}\n      location={state.location}\n      navigationType={state.action}\n      navigator={history}\n      future={future}\n    />\n  );\n}\n\nexport interface NavigateProps {\n  to: To;\n  replace?: boolean;\n  state?: any;\n  relative?: RelativeRoutingType;\n}\n\n/**\n * Changes the current location.\n *\n * Note: This API is mostly useful in React.Component subclasses that are not\n * able to use hooks. In functional components, we recommend you use the\n * `useNavigate` hook instead.\n *\n * @see https://reactrouter.com/components/navigate\n */\nexport function Navigate({\n  to,\n  replace,\n  state,\n  relative,\n}: NavigateProps): null {\n  invariant(\n    useInRouterContext(),\n    // TODO: This error is probably because they somehow have 2 versions of\n    // the router loaded. We can help them understand how to avoid that.\n    `<Navigate> may be used only in the context of a <Router> component.`\n  );\n\n  let { future, static: isStatic } = React.useContext(NavigationContext);\n\n  warning(\n    !isStatic,\n    `<Navigate> must not be used on the initial render in a <StaticRouter>. ` +\n      `This is a no-op, but you should modify your code so the <Navigate> is ` +\n      `only ever rendered in response to some user interaction or state change.`\n  );\n\n  let { matches } = React.useContext(RouteContext);\n  let { pathname: locationPathname } = useLocation();\n  let navigate = useNavigate();\n\n  // Resolve the path outside of the effect so that when effects run twice in\n  // StrictMode they navigate to the same place\n  let path = resolveTo(\n    to,\n    getResolveToMatches(matches, future.v7_relativeSplatPath),\n    locationPathname,\n    relative === \"path\"\n  );\n  let jsonPath = JSON.stringify(path);\n\n  React.useEffect(\n    () => navigate(JSON.parse(jsonPath), { replace, state, relative }),\n    [navigate, jsonPath, relative, replace, state]\n  );\n\n  return null;\n}\n\nexport interface OutletProps {\n  context?: unknown;\n}\n\n/**\n * Renders the child route's element, if there is one.\n *\n * @see https://reactrouter.com/components/outlet\n */\nexport function Outlet(props: OutletProps): React.ReactElement | null {\n  return useOutlet(props.context);\n}\n\nexport interface PathRouteProps {\n  caseSensitive?: NonIndexRouteObject[\"caseSensitive\"];\n  path?: NonIndexRouteObject[\"path\"];\n  id?: NonIndexRouteObject[\"id\"];\n  lazy?: LazyRouteFunction<NonIndexRouteObject>;\n  loader?: NonIndexRouteObject[\"loader\"];\n  action?: NonIndexRouteObject[\"action\"];\n  hasErrorBoundary?: NonIndexRouteObject[\"hasErrorBoundary\"];\n  shouldRevalidate?: NonIndexRouteObject[\"shouldRevalidate\"];\n  handle?: NonIndexRouteObject[\"handle\"];\n  index?: false;\n  children?: React.ReactNode;\n  element?: React.ReactNode | null;\n  hydrateFallbackElement?: React.ReactNode | null;\n  errorElement?: React.ReactNode | null;\n  Component?: React.ComponentType | null;\n  HydrateFallback?: React.ComponentType | null;\n  ErrorBoundary?: React.ComponentType | null;\n}\n\nexport interface LayoutRouteProps extends PathRouteProps {}\n\nexport interface IndexRouteProps {\n  caseSensitive?: IndexRouteObject[\"caseSensitive\"];\n  path?: IndexRouteObject[\"path\"];\n  id?: IndexRouteObject[\"id\"];\n  lazy?: LazyRouteFunction<IndexRouteObject>;\n  loader?: IndexRouteObject[\"loader\"];\n  action?: IndexRouteObject[\"action\"];\n  hasErrorBoundary?: IndexRouteObject[\"hasErrorBoundary\"];\n  shouldRevalidate?: IndexRouteObject[\"shouldRevalidate\"];\n  handle?: IndexRouteObject[\"handle\"];\n  index: true;\n  children?: undefined;\n  element?: React.ReactNode | null;\n  hydrateFallbackElement?: React.ReactNode | null;\n  errorElement?: React.ReactNode | null;\n  Component?: React.ComponentType | null;\n  HydrateFallback?: React.ComponentType | null;\n  ErrorBoundary?: React.ComponentType | null;\n}\n\nexport type RouteProps = PathRouteProps | LayoutRouteProps | IndexRouteProps;\n\n/**\n * Declares an element that should be rendered at a certain URL path.\n *\n * @see https://reactrouter.com/components/route\n */\nexport function Route(_props: RouteProps): React.ReactElement | null {\n  invariant(\n    false,\n    `A <Route> is only ever to be used as the child of <Routes> element, ` +\n      `never rendered directly. Please wrap your <Route> in a <Routes>.`\n  );\n}\n\nexport interface RouterProps {\n  basename?: string;\n  children?: React.ReactNode;\n  location: Partial<Location> | string;\n  navigationType?: NavigationType;\n  navigator: Navigator;\n  static?: boolean;\n  future?: Partial<Pick<FutureConfig, \"v7_relativeSplatPath\">>;\n}\n\n/**\n * Provides location context for the rest of the app.\n *\n * Note: You usually won't render a `<Router>` directly. Instead, you'll render a\n * router that is more specific to your environment such as a `<BrowserRouter>`\n * in web browsers or a `<StaticRouter>` for server rendering.\n *\n * @see https://reactrouter.com/router-components/router\n */\nexport function Router({\n  basename: basenameProp = \"/\",\n  children = null,\n  location: locationProp,\n  navigationType = NavigationType.Pop,\n  navigator,\n  static: staticProp = false,\n  future,\n}: RouterProps): React.ReactElement | null {\n  invariant(\n    !useInRouterContext(),\n    `You cannot render a <Router> inside another <Router>.` +\n      ` You should never have more than one in your app.`\n  );\n\n  // Preserve trailing slashes on basename, so we can let the user control\n  // the enforcement of trailing slashes throughout the app\n  let basename = basenameProp.replace(/^\\/*/, \"/\");\n  let navigationContext = React.useMemo(\n    () => ({\n      basename,\n      navigator,\n      static: staticProp,\n      future: {\n        v7_relativeSplatPath: false,\n        ...future,\n      },\n    }),\n    [basename, future, navigator, staticProp]\n  );\n\n  if (typeof locationProp === \"string\") {\n    locationProp = parsePath(locationProp);\n  }\n\n  let {\n    pathname = \"/\",\n    search = \"\",\n    hash = \"\",\n    state = null,\n    key = \"default\",\n  } = locationProp;\n\n  let locationContext = React.useMemo(() => {\n    let trailingPathname = stripBasename(pathname, basename);\n\n    if (trailingPathname == null) {\n      return null;\n    }\n\n    return {\n      location: {\n        pathname: trailingPathname,\n        search,\n        hash,\n        state,\n        key,\n      },\n      navigationType,\n    };\n  }, [basename, pathname, search, hash, state, key, navigationType]);\n\n  warning(\n    locationContext != null,\n    `<Router basename=\"${basename}\"> is not able to match the URL ` +\n      `\"${pathname}${search}${hash}\" because it does not start with the ` +\n      `basename, so the <Router> won't render anything.`\n  );\n\n  if (locationContext == null) {\n    return null;\n  }\n\n  return (\n    <NavigationContext.Provider value={navigationContext}>\n      <LocationContext.Provider children={children} value={locationContext} />\n    </NavigationContext.Provider>\n  );\n}\n\nexport interface RoutesProps {\n  children?: React.ReactNode;\n  location?: Partial<Location> | string;\n}\n\n/**\n * A container for a nested tree of `<Route>` elements that renders the branch\n * that best matches the current location.\n *\n * @see https://reactrouter.com/components/routes\n */\nexport function Routes({\n  children,\n  location,\n}: RoutesProps): React.ReactElement | null {\n  return useRoutes(createRoutesFromChildren(children), location);\n}\n\nexport interface AwaitResolveRenderFunction {\n  (data: Awaited<any>): React.ReactNode;\n}\n\nexport interface AwaitProps {\n  children: React.ReactNode | AwaitResolveRenderFunction;\n  errorElement?: React.ReactNode;\n  resolve: TrackedPromise | any;\n}\n\n/**\n * Component to use for rendering lazily loaded data from returning defer()\n * in a loader function\n */\nexport function Await({ children, errorElement, resolve }: AwaitProps) {\n  return (\n    <AwaitErrorBoundary resolve={resolve} errorElement={errorElement}>\n      <ResolveAwait>{children}</ResolveAwait>\n    </AwaitErrorBoundary>\n  );\n}\n\ntype AwaitErrorBoundaryProps = React.PropsWithChildren<{\n  errorElement?: React.ReactNode;\n  resolve: TrackedPromise | any;\n}>;\n\ntype AwaitErrorBoundaryState = {\n  error: any;\n};\n\nenum AwaitRenderStatus {\n  pending,\n  success,\n  error,\n}\n\nconst neverSettledPromise = new Promise(() => {});\n\nclass AwaitErrorBoundary extends React.Component<\n  AwaitErrorBoundaryProps,\n  AwaitErrorBoundaryState\n> {\n  constructor(props: AwaitErrorBoundaryProps) {\n    super(props);\n    this.state = { error: null };\n  }\n\n  static getDerivedStateFromError(error: any) {\n    return { error };\n  }\n\n  componentDidCatch(error: any, errorInfo: any) {\n    console.error(\n      \"<Await> caught the following error during render\",\n      error,\n      errorInfo\n    );\n  }\n\n  render() {\n    let { children, errorElement, resolve } = this.props;\n\n    let promise: TrackedPromise | null = null;\n    let status: AwaitRenderStatus = AwaitRenderStatus.pending;\n\n    if (!(resolve instanceof Promise)) {\n      // Didn't get a promise - provide as a resolved promise\n      status = AwaitRenderStatus.success;\n      promise = Promise.resolve();\n      Object.defineProperty(promise, \"_tracked\", { get: () => true });\n      Object.defineProperty(promise, \"_data\", { get: () => resolve });\n    } else if (this.state.error) {\n      // Caught a render error, provide it as a rejected promise\n      status = AwaitRenderStatus.error;\n      let renderError = this.state.error;\n      promise = Promise.reject().catch(() => {}); // Avoid unhandled rejection warnings\n      Object.defineProperty(promise, \"_tracked\", { get: () => true });\n      Object.defineProperty(promise, \"_error\", { get: () => renderError });\n    } else if ((resolve as TrackedPromise)._tracked) {\n      // Already tracked promise - check contents\n      promise = resolve;\n      status =\n        \"_error\" in promise\n          ? AwaitRenderStatus.error\n          : \"_data\" in promise\n          ? AwaitRenderStatus.success\n          : AwaitRenderStatus.pending;\n    } else {\n      // Raw (untracked) promise - track it\n      status = AwaitRenderStatus.pending;\n      Object.defineProperty(resolve, \"_tracked\", { get: () => true });\n      promise = resolve.then(\n        (data: any) =>\n          Object.defineProperty(resolve, \"_data\", { get: () => data }),\n        (error: any) =>\n          Object.defineProperty(resolve, \"_error\", { get: () => error })\n      );\n    }\n\n    if (\n      status === AwaitRenderStatus.error &&\n      promise._error instanceof AbortedDeferredError\n    ) {\n      // Freeze the UI by throwing a never resolved promise\n      throw neverSettledPromise;\n    }\n\n    if (status === AwaitRenderStatus.error && !errorElement) {\n      // No errorElement, throw to the nearest route-level error boundary\n      throw promise._error;\n    }\n\n    if (status === AwaitRenderStatus.error) {\n      // Render via our errorElement\n      return <AwaitContext.Provider value={promise} children={errorElement} />;\n    }\n\n    if (status === AwaitRenderStatus.success) {\n      // Render children with resolved value\n      return <AwaitContext.Provider value={promise} children={children} />;\n    }\n\n    // Throw to the suspense boundary\n    throw promise;\n  }\n}\n\n/**\n * @private\n * Indirection to leverage useAsyncValue for a render-prop API on `<Await>`\n */\nfunction ResolveAwait({\n  children,\n}: {\n  children: React.ReactNode | AwaitResolveRenderFunction;\n}) {\n  let data = useAsyncValue();\n  let toRender = typeof children === \"function\" ? children(data) : children;\n  return <>{toRender}</>;\n}\n\n///////////////////////////////////////////////////////////////////////////////\n// UTILS\n///////////////////////////////////////////////////////////////////////////////\n\n/**\n * Creates a route config from a React \"children\" object, which is usually\n * either a `<Route>` element or an array of them. Used internally by\n * `<Routes>` to create a route config from its children.\n *\n * @see https://reactrouter.com/utils/create-routes-from-children\n */\nexport function createRoutesFromChildren(\n  children: React.ReactNode,\n  parentPath: number[] = []\n): RouteObject[] {\n  let routes: RouteObject[] = [];\n\n  React.Children.forEach(children, (element, index) => {\n    if (!React.isValidElement(element)) {\n      // Ignore non-elements. This allows people to more easily inline\n      // conditionals in their route config.\n      return;\n    }\n\n    let treePath = [...parentPath, index];\n\n    if (element.type === React.Fragment) {\n      // Transparently support React.Fragment and its children.\n      routes.push.apply(\n        routes,\n        createRoutesFromChildren(element.props.children, treePath)\n      );\n      return;\n    }\n\n    invariant(\n      element.type === Route,\n      `[${\n        typeof element.type === \"string\" ? element.type : element.type.name\n      }] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>`\n    );\n\n    invariant(\n      !element.props.index || !element.props.children,\n      \"An index route cannot have child routes.\"\n    );\n\n    let route: RouteObject = {\n      id: element.props.id || treePath.join(\"-\"),\n      caseSensitive: element.props.caseSensitive,\n      element: element.props.element,\n      Component: element.props.Component,\n      index: element.props.index,\n      path: element.props.path,\n      loader: element.props.loader,\n      action: element.props.action,\n      errorElement: element.props.errorElement,\n      ErrorBoundary: element.props.ErrorBoundary,\n      hasErrorBoundary:\n        element.props.ErrorBoundary != null ||\n        element.props.errorElement != null,\n      shouldRevalidate: element.props.shouldRevalidate,\n      handle: element.props.handle,\n      lazy: element.props.lazy,\n    };\n\n    if (element.props.children) {\n      route.children = createRoutesFromChildren(\n        element.props.children,\n        treePath\n      );\n    }\n\n    routes.push(route);\n  });\n\n  return routes;\n}\n\n/**\n * Renders the result of `matchRoutes()` into a React element.\n */\nexport function renderMatches(\n  matches: RouteMatch[] | null\n): React.ReactElement | null {\n  return _renderMatches(matches);\n}\n","import type {\n  FormEncType,\n  HTMLFormMethod,\n  RelativeRoutingType,\n} from \"@remix-run/router\";\nimport { stripBasename, UNSAFE_warning as warning } from \"@remix-run/router\";\n\nexport const defaultMethod: HTMLFormMethod = \"get\";\nconst defaultEncType: FormEncType = \"application/x-www-form-urlencoded\";\n\nexport function isHtmlElement(object: any): object is HTMLElement {\n  return object != null && typeof object.tagName === \"string\";\n}\n\nexport function isButtonElement(object: any): object is HTMLButtonElement {\n  return isHtmlElement(object) && object.tagName.toLowerCase() === \"button\";\n}\n\nexport function isFormElement(object: any): object is HTMLFormElement {\n  return isHtmlElement(object) && object.tagName.toLowerCase() === \"form\";\n}\n\nexport function isInputElement(object: any): object is HTMLInputElement {\n  return isHtmlElement(object) && object.tagName.toLowerCase() === \"input\";\n}\n\ntype LimitedMouseEvent = Pick<\n  MouseEvent,\n  \"button\" | \"metaKey\" | \"altKey\" | \"ctrlKey\" | \"shiftKey\"\n>;\n\nfunction isModifiedEvent(event: LimitedMouseEvent) {\n  return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\n\nexport function shouldProcessLinkClick(\n  event: LimitedMouseEvent,\n  target?: string\n) {\n  return (\n    event.button === 0 && // Ignore everything but left clicks\n    (!target || target === \"_self\") && // Let browser handle \"target=_blank\" etc.\n    !isModifiedEvent(event) // Ignore clicks with modifier keys\n  );\n}\n\nexport type ParamKeyValuePair = [string, string];\n\nexport type URLSearchParamsInit =\n  | string\n  | ParamKeyValuePair[]\n  | Record<string, string | string[]>\n  | URLSearchParams;\n\n/**\n * Creates a URLSearchParams object using the given initializer.\n *\n * This is identical to `new URLSearchParams(init)` except it also\n * supports arrays as values in the object form of the initializer\n * instead of just strings. This is convenient when you need multiple\n * values for a given key, but don't want to use an array initializer.\n *\n * For example, instead of:\n *\n *   let searchParams = new URLSearchParams([\n *     ['sort', 'name'],\n *     ['sort', 'price']\n *   ]);\n *\n * you can do:\n *\n *   let searchParams = createSearchParams({\n *     sort: ['name', 'price']\n *   });\n */\nexport function createSearchParams(\n  init: URLSearchParamsInit = \"\"\n): URLSearchParams {\n  return new URLSearchParams(\n    typeof init === \"string\" ||\n    Array.isArray(init) ||\n    init instanceof URLSearchParams\n      ? init\n      : Object.keys(init).reduce((memo, key) => {\n          let value = init[key];\n          return memo.concat(\n            Array.isArray(value) ? value.map((v) => [key, v]) : [[key, value]]\n          );\n        }, [] as ParamKeyValuePair[])\n  );\n}\n\nexport function getSearchParamsForLocation(\n  locationSearch: string,\n  defaultSearchParams: URLSearchParams | null\n) {\n  let searchParams = createSearchParams(locationSearch);\n\n  if (defaultSearchParams) {\n    // Use `defaultSearchParams.forEach(...)` here instead of iterating of\n    // `defaultSearchParams.keys()` to work-around a bug in Firefox related to\n    // web extensions. Relevant Bugzilla tickets:\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=1414602\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=1023984\n    defaultSearchParams.forEach((_, key) => {\n      if (!searchParams.has(key)) {\n        defaultSearchParams.getAll(key).forEach((value) => {\n          searchParams.append(key, value);\n        });\n      }\n    });\n  }\n\n  return searchParams;\n}\n\n// Thanks https://github.com/sindresorhus/type-fest!\ntype JsonObject = { [Key in string]: JsonValue } & {\n  [Key in string]?: JsonValue | undefined;\n};\ntype JsonArray = JsonValue[] | readonly JsonValue[];\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\nexport type SubmitTarget =\n  | HTMLFormElement\n  | HTMLButtonElement\n  | HTMLInputElement\n  | FormData\n  | URLSearchParams\n  | JsonValue\n  | null;\n\n// One-time check for submitter support\nlet _formDataSupportsSubmitter: boolean | null = null;\n\nfunction isFormDataSubmitterSupported() {\n  if (_formDataSupportsSubmitter === null) {\n    try {\n      new FormData(\n        document.createElement(\"form\"),\n        // @ts-expect-error if FormData supports the submitter parameter, this will throw\n        0\n      );\n      _formDataSupportsSubmitter = false;\n    } catch (e) {\n      _formDataSupportsSubmitter = true;\n    }\n  }\n  return _formDataSupportsSubmitter;\n}\n\nexport interface SubmitOptions {\n  /**\n   * The HTTP method used to submit the form. Overrides `<form method>`.\n   * Defaults to \"GET\".\n   */\n  method?: HTMLFormMethod;\n\n  /**\n   * The action URL path used to submit the form. Overrides `<form action>`.\n   * Defaults to the path of the current route.\n   */\n  action?: string;\n\n  /**\n   * The encoding used to submit the form. Overrides `<form encType>`.\n   * Defaults to \"application/x-www-form-urlencoded\".\n   */\n  encType?: FormEncType;\n\n  /**\n   * Indicate a specific fetcherKey to use when using navigate=false\n   */\n  fetcherKey?: string;\n\n  /**\n   * navigate=false will use a fetcher instead of a navigation\n   */\n  navigate?: boolean;\n\n  /**\n   * Set `true` to replace the current entry in the browser's history stack\n   * instead of creating a new one (i.e. stay on \"the same page\"). Defaults\n   * to `false`.\n   */\n  replace?: boolean;\n\n  /**\n   * State object to add to the history stack entry for this navigation\n   */\n  state?: any;\n\n  /**\n   * Determines whether the form action is relative to the route hierarchy or\n   * the pathname.  Use this if you want to opt out of navigating the route\n   * hierarchy and want to instead route based on /-delimited URL segments\n   */\n  relative?: RelativeRoutingType;\n\n  /**\n   * In browser-based environments, prevent resetting scroll after this\n   * navigation when using the <ScrollRestoration> component\n   */\n  preventScrollReset?: boolean;\n\n  /**\n   * Enable flushSync for this navigation's state updates\n   */\n  unstable_flushSync?: boolean;\n\n  /**\n   * Enable view transitions on this submission navigation\n   */\n  unstable_viewTransition?: boolean;\n}\n\nconst supportedFormEncTypes: Set<FormEncType> = new Set([\n  \"application/x-www-form-urlencoded\",\n  \"multipart/form-data\",\n  \"text/plain\",\n]);\n\nfunction getFormEncType(encType: string | null) {\n  if (encType != null && !supportedFormEncTypes.has(encType as FormEncType)) {\n    warning(\n      false,\n      `\"${encType}\" is not a valid \\`encType\\` for \\`<Form>\\`/\\`<fetcher.Form>\\` ` +\n        `and will default to \"${defaultEncType}\"`\n    );\n\n    return null;\n  }\n  return encType;\n}\n\nexport function getFormSubmissionInfo(\n  target: SubmitTarget,\n  basename: string\n): {\n  action: string | null;\n  method: string;\n  encType: string;\n  formData: FormData | undefined;\n  body: any;\n} {\n  let method: string;\n  let action: string | null;\n  let encType: string;\n  let formData: FormData | undefined;\n  let body: any;\n\n  if (isFormElement(target)) {\n    // When grabbing the action from the element, it will have had the basename\n    // prefixed to ensure non-JS scenarios work, so strip it since we'll\n    // re-prefix in the router\n    let attr = target.getAttribute(\"action\");\n    action = attr ? stripBasename(attr, basename) : null;\n    method = target.getAttribute(\"method\") || defaultMethod;\n    encType = getFormEncType(target.getAttribute(\"enctype\")) || defaultEncType;\n\n    formData = new FormData(target);\n  } else if (\n    isButtonElement(target) ||\n    (isInputElement(target) &&\n      (target.type === \"submit\" || target.type === \"image\"))\n  ) {\n    let form = target.form;\n\n    if (form == null) {\n      throw new Error(\n        `Cannot submit a <button> or <input type=\"submit\"> without a <form>`\n      );\n    }\n\n    // <button>/<input type=\"submit\"> may override attributes of <form>\n\n    // When grabbing the action from the element, it will have had the basename\n    // prefixed to ensure non-JS scenarios work, so strip it since we'll\n    // re-prefix in the router\n    let attr = target.getAttribute(\"formaction\") || form.getAttribute(\"action\");\n    action = attr ? stripBasename(attr, basename) : null;\n\n    method =\n      target.getAttribute(\"formmethod\") ||\n      form.getAttribute(\"method\") ||\n      defaultMethod;\n    encType =\n      getFormEncType(target.getAttribute(\"formenctype\")) ||\n      getFormEncType(form.getAttribute(\"enctype\")) ||\n      defaultEncType;\n\n    // Build a FormData object populated from a form and submitter\n    formData = new FormData(form, target);\n\n    // If this browser doesn't support the `FormData(el, submitter)` format,\n    // then tack on the submitter value at the end.  This is a lightweight\n    // solution that is not 100% spec compliant.  For complete support in older\n    // browsers, consider using the `formdata-submitter-polyfill` package\n    if (!isFormDataSubmitterSupported()) {\n      let { name, type, value } = target;\n      if (type === \"image\") {\n        let prefix = name ? `${name}.` : \"\";\n        formData.append(`${prefix}x`, \"0\");\n        formData.append(`${prefix}y`, \"0\");\n      } else if (name) {\n        formData.append(name, value);\n      }\n    }\n  } else if (isHtmlElement(target)) {\n    throw new Error(\n      `Cannot submit element that is not <form>, <button>, or ` +\n        `<input type=\"submit|image\">`\n    );\n  } else {\n    method = defaultMethod;\n    action = null;\n    encType = defaultEncType;\n    body = target;\n  }\n\n  // Send body for <Form encType=\"text/plain\" so we encode it into text\n  if (formData && encType === \"text/plain\") {\n    body = formData;\n    formData = undefined;\n  }\n\n  return { action, method: method.toLowerCase(), encType, formData, body };\n}\n","/**\n * NOTE: If you refactor this to split up the modules into separate files,\n * you'll need to update the rollup config for react-router-dom-v5-compat.\n */\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport type {\n  DataRouteObject,\n  FutureConfig,\n  Location,\n  NavigateOptions,\n  NavigationType,\n  Navigator,\n  RelativeRoutingType,\n  RouteObject,\n  RouterProviderProps,\n  To,\n} from \"react-router\";\nimport {\n  Router,\n  createPath,\n  useHref,\n  useLocation,\n  useMatches,\n  useNavigate,\n  useNavigation,\n  useResolvedPath,\n  useBlocker,\n  UNSAFE_DataRouterContext as DataRouterContext,\n  UNSAFE_DataRouterStateContext as DataRouterStateContext,\n  UNSAFE_NavigationContext as NavigationContext,\n  UNSAFE_RouteContext as RouteContext,\n  UNSAFE_mapRouteProperties as mapRouteProperties,\n  UNSAFE_useRouteId as useRouteId,\n  UNSAFE_useRoutesImpl as useRoutesImpl,\n} from \"react-router\";\nimport type {\n  BrowserHistory,\n  unstable_DataStrategyFunction,\n  unstable_DataStrategyFunctionArgs,\n  unstable_DataStrategyMatch,\n  Fetcher,\n  FormEncType,\n  FormMethod,\n  FutureConfig as RouterFutureConfig,\n  GetScrollRestorationKeyFunction,\n  HashHistory,\n  History,\n  HTMLFormMethod,\n  HydrationState,\n  Router as RemixRouter,\n  V7_FormMethod,\n  RouterState,\n  RouterSubscriber,\n  BlockerFunction,\n} from \"@remix-run/router\";\nimport {\n  createRouter,\n  createBrowserHistory,\n  createHashHistory,\n  joinPaths,\n  stripBasename,\n  UNSAFE_ErrorResponseImpl as ErrorResponseImpl,\n  UNSAFE_invariant as invariant,\n  UNSAFE_warning as warning,\n  matchPath,\n  IDLE_FETCHER,\n} from \"@remix-run/router\";\n\nimport type {\n  SubmitOptions,\n  ParamKeyValuePair,\n  URLSearchParamsInit,\n  SubmitTarget,\n} from \"./dom\";\nimport {\n  createSearchParams,\n  defaultMethod,\n  getFormSubmissionInfo,\n  getSearchParamsForLocation,\n  shouldProcessLinkClick,\n} from \"./dom\";\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Re-exports\n////////////////////////////////////////////////////////////////////////////////\n\nexport type {\n  unstable_DataStrategyFunction,\n  unstable_DataStrategyFunctionArgs,\n  unstable_DataStrategyMatch,\n  FormEncType,\n  FormMethod,\n  GetScrollRestorationKeyFunction,\n  ParamKeyValuePair,\n  SubmitOptions,\n  URLSearchParamsInit,\n  V7_FormMethod,\n};\nexport { createSearchParams, ErrorResponseImpl as UNSAFE_ErrorResponseImpl };\n\n// Note: Keep in sync with react-router exports!\nexport type {\n  ActionFunction,\n  ActionFunctionArgs,\n  AwaitProps,\n  Blocker,\n  BlockerFunction,\n  DataRouteMatch,\n  DataRouteObject,\n  ErrorResponse,\n  Fetcher,\n  FutureConfig,\n  Hash,\n  IndexRouteObject,\n  IndexRouteProps,\n  JsonFunction,\n  LazyRouteFunction,\n  LayoutRouteProps,\n  LoaderFunction,\n  LoaderFunctionArgs,\n  Location,\n  MemoryRouterProps,\n  NavigateFunction,\n  NavigateOptions,\n  NavigateProps,\n  Navigation,\n  Navigator,\n  NonIndexRouteObject,\n  OutletProps,\n  Params,\n  ParamParseKey,\n  Path,\n  PathMatch,\n  Pathname,\n  PathParam,\n  PathPattern,\n  PathRouteProps,\n  RedirectFunction,\n  RelativeRoutingType,\n  RouteMatch,\n  RouteObject,\n  RouteProps,\n  RouterProps,\n  RouterProviderProps,\n  RoutesProps,\n  Search,\n  ShouldRevalidateFunction,\n  ShouldRevalidateFunctionArgs,\n  To,\n  UIMatch,\n  unstable_HandlerResult,\n} from \"react-router\";\nexport {\n  AbortedDeferredError,\n  Await,\n  MemoryRouter,\n  Navigate,\n  NavigationType,\n  Outlet,\n  Route,\n  Router,\n  Routes,\n  createMemoryRouter,\n  createPath,\n  createRoutesFromChildren,\n  createRoutesFromElements,\n  defer,\n  isRouteErrorResponse,\n  generatePath,\n  json,\n  matchPath,\n  matchRoutes,\n  parsePath,\n  redirect,\n  redirectDocument,\n  renderMatches,\n  resolvePath,\n  useActionData,\n  useAsyncError,\n  useAsyncValue,\n  useBlocker,\n  useHref,\n  useInRouterContext,\n  useLoaderData,\n  useLocation,\n  useMatch,\n  useMatches,\n  useNavigate,\n  useNavigation,\n  useNavigationType,\n  useOutlet,\n  useOutletContext,\n  useParams,\n  useResolvedPath,\n  useRevalidator,\n  useRouteError,\n  useRouteLoaderData,\n  useRoutes,\n} from \"react-router\";\n\n///////////////////////////////////////////////////////////////////////////////\n// DANGER! PLEASE READ ME!\n// We provide these exports as an escape hatch in the event that you need any\n// routing data that we don't provide an explicit API for. With that said, we\n// want to cover your use case if we can, so if you feel the need to use these\n// we want to hear from you. Let us know what you're building and we'll do our\n// best to make sure we can support you!\n//\n// We consider these exports an implementation detail and do not guarantee\n// against any breaking changes, regardless of the semver release. Use with\n// extreme caution and only if you understand the consequences. Godspeed.\n///////////////////////////////////////////////////////////////////////////////\n\n/** @internal */\nexport {\n  UNSAFE_DataRouterContext,\n  UNSAFE_DataRouterStateContext,\n  UNSAFE_NavigationContext,\n  UNSAFE_LocationContext,\n  UNSAFE_RouteContext,\n  UNSAFE_useRouteId,\n} from \"react-router\";\n//#endregion\n\ndeclare global {\n  var __staticRouterHydrationData: HydrationState | undefined;\n  var __reactRouterVersion: string;\n  interface Document {\n    startViewTransition(cb: () => Promise<void> | void): ViewTransition;\n  }\n}\n\n// HEY YOU! DON'T TOUCH THIS VARIABLE!\n//\n// It is replaced with the proper version at build time via a babel plugin in\n// the rollup config.\n//\n// Export a global property onto the window for React Router detection by the\n// Core Web Vitals Technology Report.  This way they can configure the `wappalyzer`\n// to detect and properly classify live websites as being built with React Router:\n// https://github.com/HTTPArchive/wappalyzer/blob/main/src/technologies/r.json\nconst REACT_ROUTER_VERSION = \"0\";\ntry {\n  window.__reactRouterVersion = REACT_ROUTER_VERSION;\n} catch (e) {\n  // no-op\n}\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Routers\n////////////////////////////////////////////////////////////////////////////////\n\ninterface DOMRouterOpts {\n  basename?: string;\n  future?: Partial<Omit<RouterFutureConfig, \"v7_prependBasename\">>;\n  hydrationData?: HydrationState;\n  unstable_dataStrategy?: unstable_DataStrategyFunction;\n  window?: Window;\n}\n\nexport function createBrowserRouter(\n  routes: RouteObject[],\n  opts?: DOMRouterOpts\n): RemixRouter {\n  return createRouter({\n    basename: opts?.basename,\n    future: {\n      ...opts?.future,\n      v7_prependBasename: true,\n    },\n    history: createBrowserHistory({ window: opts?.window }),\n    hydrationData: opts?.hydrationData || parseHydrationData(),\n    routes,\n    mapRouteProperties,\n    unstable_dataStrategy: opts?.unstable_dataStrategy,\n    window: opts?.window,\n  }).initialize();\n}\n\nexport function createHashRouter(\n  routes: RouteObject[],\n  opts?: DOMRouterOpts\n): RemixRouter {\n  return createRouter({\n    basename: opts?.basename,\n    future: {\n      ...opts?.future,\n      v7_prependBasename: true,\n    },\n    history: createHashHistory({ window: opts?.window }),\n    hydrationData: opts?.hydrationData || parseHydrationData(),\n    routes,\n    mapRouteProperties,\n    unstable_dataStrategy: opts?.unstable_dataStrategy,\n    window: opts?.window,\n  }).initialize();\n}\n\nfunction parseHydrationData(): HydrationState | undefined {\n  let state = window?.__staticRouterHydrationData;\n  if (state && state.errors) {\n    state = {\n      ...state,\n      errors: deserializeErrors(state.errors),\n    };\n  }\n  return state;\n}\n\nfunction deserializeErrors(\n  errors: RemixRouter[\"state\"][\"errors\"]\n): RemixRouter[\"state\"][\"errors\"] {\n  if (!errors) return null;\n  let entries = Object.entries(errors);\n  let serialized: RemixRouter[\"state\"][\"errors\"] = {};\n  for (let [key, val] of entries) {\n    // Hey you!  If you change this, please change the corresponding logic in\n    // serializeErrors in react-router-dom/server.tsx :)\n    if (val && val.__type === \"RouteErrorResponse\") {\n      serialized[key] = new ErrorResponseImpl(\n        val.status,\n        val.statusText,\n        val.data,\n        val.internal === true\n      );\n    } else if (val && val.__type === \"Error\") {\n      // Attempt to reconstruct the right type of Error (i.e., ReferenceError)\n      if (val.__subType) {\n        let ErrorConstructor = window[val.__subType];\n        if (typeof ErrorConstructor === \"function\") {\n          try {\n            // @ts-expect-error\n            let error = new ErrorConstructor(val.message);\n            // Wipe away the client-side stack trace.  Nothing to fill it in with\n            // because we don't serialize SSR stack traces for security reasons\n            error.stack = \"\";\n            serialized[key] = error;\n          } catch (e) {\n            // no-op - fall through and create a normal Error\n          }\n        }\n      }\n\n      if (serialized[key] == null) {\n        let error = new Error(val.message);\n        // Wipe away the client-side stack trace.  Nothing to fill it in with\n        // because we don't serialize SSR stack traces for security reasons\n        error.stack = \"\";\n        serialized[key] = error;\n      }\n    } else {\n      serialized[key] = val;\n    }\n  }\n  return serialized;\n}\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Contexts\n////////////////////////////////////////////////////////////////////////////////\n\ntype ViewTransitionContextObject =\n  | {\n      isTransitioning: false;\n    }\n  | {\n      isTransitioning: true;\n      flushSync: boolean;\n      currentLocation: Location;\n      nextLocation: Location;\n    };\n\nconst ViewTransitionContext = React.createContext<ViewTransitionContextObject>({\n  isTransitioning: false,\n});\nif (__DEV__) {\n  ViewTransitionContext.displayName = \"ViewTransition\";\n}\n\nexport { ViewTransitionContext as UNSAFE_ViewTransitionContext };\n\n// TODO: (v7) Change the useFetcher data from `any` to `unknown`\ntype FetchersContextObject = Map<string, any>;\n\nconst FetchersContext = React.createContext<FetchersContextObject>(new Map());\nif (__DEV__) {\n  FetchersContext.displayName = \"Fetchers\";\n}\n\nexport { FetchersContext as UNSAFE_FetchersContext };\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Components\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n  Webpack + React 17 fails to compile on any of the following because webpack\n  complains that `startTransition` doesn't exist in `React`:\n  * import { startTransition } from \"react\"\n  * import * as React from from \"react\";\n    \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n  * import * as React from from \"react\";\n    \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n  Moving it to a constant such as the following solves the Webpack/React 17 issue:\n  * import * as React from from \"react\";\n    const START_TRANSITION = \"startTransition\";\n    START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n  However, that introduces webpack/terser minification issues in production builds\n  in React 18 where minification/obfuscation ends up removing the call of\n  React.startTransition entirely from the first half of the ternary.  Grabbing\n  this exported reference once up front resolves that issue.\n\n  See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\nconst FLUSH_SYNC = \"flushSync\";\nconst flushSyncImpl = ReactDOM[FLUSH_SYNC];\nconst USE_ID = \"useId\";\nconst useIdImpl = React[USE_ID];\n\nfunction startTransitionSafe(cb: () => void) {\n  if (startTransitionImpl) {\n    startTransitionImpl(cb);\n  } else {\n    cb();\n  }\n}\n\nfunction flushSyncSafe(cb: () => void) {\n  if (flushSyncImpl) {\n    flushSyncImpl(cb);\n  } else {\n    cb();\n  }\n}\n\ninterface ViewTransition {\n  finished: Promise<void>;\n  ready: Promise<void>;\n  updateCallbackDone: Promise<void>;\n  skipTransition(): void;\n}\n\nclass Deferred<T> {\n  status: \"pending\" | \"resolved\" | \"rejected\" = \"pending\";\n  promise: Promise<T>;\n  // @ts-expect-error - no initializer\n  resolve: (value: T) => void;\n  // @ts-expect-error - no initializer\n  reject: (reason?: unknown) => void;\n  constructor() {\n    this.promise = new Promise((resolve, reject) => {\n      this.resolve = (value) => {\n        if (this.status === \"pending\") {\n          this.status = \"resolved\";\n          resolve(value);\n        }\n      };\n      this.reject = (reason) => {\n        if (this.status === \"pending\") {\n          this.status = \"rejected\";\n          reject(reason);\n        }\n      };\n    });\n  }\n}\n\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nexport function RouterProvider({\n  fallbackElement,\n  router,\n  future,\n}: RouterProviderProps): React.ReactElement {\n  let [state, setStateImpl] = React.useState(router.state);\n  let [pendingState, setPendingState] = React.useState<RouterState>();\n  let [vtContext, setVtContext] = React.useState<ViewTransitionContextObject>({\n    isTransitioning: false,\n  });\n  let [renderDfd, setRenderDfd] = React.useState<Deferred<void>>();\n  let [transition, setTransition] = React.useState<ViewTransition>();\n  let [interruption, setInterruption] = React.useState<{\n    state: RouterState;\n    currentLocation: Location;\n    nextLocation: Location;\n  }>();\n  let fetcherData = React.useRef<Map<string, any>>(new Map());\n  let { v7_startTransition } = future || {};\n\n  let optInStartTransition = React.useCallback(\n    (cb: () => void) => {\n      if (v7_startTransition) {\n        startTransitionSafe(cb);\n      } else {\n        cb();\n      }\n    },\n    [v7_startTransition]\n  );\n\n  let setState = React.useCallback<RouterSubscriber>(\n    (\n      newState: RouterState,\n      {\n        deletedFetchers,\n        unstable_flushSync: flushSync,\n        unstable_viewTransitionOpts: viewTransitionOpts,\n      }\n    ) => {\n      deletedFetchers.forEach((key) => fetcherData.current.delete(key));\n      newState.fetchers.forEach((fetcher, key) => {\n        if (fetcher.data !== undefined) {\n          fetcherData.current.set(key, fetcher.data);\n        }\n      });\n\n      let isViewTransitionUnavailable =\n        router.window == null ||\n        router.window.document == null ||\n        typeof router.window.document.startViewTransition !== \"function\";\n\n      // If this isn't a view transition or it's not available in this browser,\n      // just update and be done with it\n      if (!viewTransitionOpts || isViewTransitionUnavailable) {\n        if (flushSync) {\n          flushSyncSafe(() => setStateImpl(newState));\n        } else {\n          optInStartTransition(() => setStateImpl(newState));\n        }\n        return;\n      }\n\n      // flushSync + startViewTransition\n      if (flushSync) {\n        // Flush through the context to mark DOM elements as transition=ing\n        flushSyncSafe(() => {\n          // Cancel any pending transitions\n          if (transition) {\n            renderDfd && renderDfd.resolve();\n            transition.skipTransition();\n          }\n          setVtContext({\n            isTransitioning: true,\n            flushSync: true,\n            currentLocation: viewTransitionOpts.currentLocation,\n            nextLocation: viewTransitionOpts.nextLocation,\n          });\n        });\n\n        // Update the DOM\n        let t = router.window!.document.startViewTransition(() => {\n          flushSyncSafe(() => setStateImpl(newState));\n        });\n\n        // Clean up after the animation completes\n        t.finished.finally(() => {\n          flushSyncSafe(() => {\n            setRenderDfd(undefined);\n            setTransition(undefined);\n            setPendingState(undefined);\n            setVtContext({ isTransitioning: false });\n          });\n        });\n\n        flushSyncSafe(() => setTransition(t));\n        return;\n      }\n\n      // startTransition + startViewTransition\n      if (transition) {\n        // Interrupting an in-progress transition, cancel and let everything flush\n        // out, and then kick off a new transition from the interruption state\n        renderDfd && renderDfd.resolve();\n        transition.skipTransition();\n        setInterruption({\n          state: newState,\n          currentLocation: viewTransitionOpts.currentLocation,\n          nextLocation: viewTransitionOpts.nextLocation,\n        });\n      } else {\n        // Completed navigation update with opted-in view transitions, let 'er rip\n        setPendingState(newState);\n        setVtContext({\n          isTransitioning: true,\n          flushSync: false,\n          currentLocation: viewTransitionOpts.currentLocation,\n          nextLocation: viewTransitionOpts.nextLocation,\n        });\n      }\n    },\n    [router.window, transition, renderDfd, fetcherData, optInStartTransition]\n  );\n\n  // Need to use a layout effect here so we are subscribed early enough to\n  // pick up on any render-driven redirects/navigations (useEffect/<Navigate>)\n  React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n\n  // When we start a view transition, create a Deferred we can use for the\n  // eventual \"completed\" render\n  React.useEffect(() => {\n    if (vtContext.isTransitioning && !vtContext.flushSync) {\n      setRenderDfd(new Deferred<void>());\n    }\n  }, [vtContext]);\n\n  // Once the deferred is created, kick off startViewTransition() to update the\n  // DOM and then wait on the Deferred to resolve (indicating the DOM update has\n  // happened)\n  React.useEffect(() => {\n    if (renderDfd && pendingState && router.window) {\n      let newState = pendingState;\n      let renderPromise = renderDfd.promise;\n      let transition = router.window.document.startViewTransition(async () => {\n        optInStartTransition(() => setStateImpl(newState));\n        await renderPromise;\n      });\n      transition.finished.finally(() => {\n        setRenderDfd(undefined);\n        setTransition(undefined);\n        setPendingState(undefined);\n        setVtContext({ isTransitioning: false });\n      });\n      setTransition(transition);\n    }\n  }, [optInStartTransition, pendingState, renderDfd, router.window]);\n\n  // When the new location finally renders and is committed to the DOM, this\n  // effect will run to resolve the transition\n  React.useEffect(() => {\n    if (\n      renderDfd &&\n      pendingState &&\n      state.location.key === pendingState.location.key\n    ) {\n      renderDfd.resolve();\n    }\n  }, [renderDfd, transition, state.location, pendingState]);\n\n  // If we get interrupted with a new navigation during a transition, we skip\n  // the active transition, let it cleanup, then kick it off again here\n  React.useEffect(() => {\n    if (!vtContext.isTransitioning && interruption) {\n      setPendingState(interruption.state);\n      setVtContext({\n        isTransitioning: true,\n        flushSync: false,\n        currentLocation: interruption.currentLocation,\n        nextLocation: interruption.nextLocation,\n      });\n      setInterruption(undefined);\n    }\n  }, [vtContext.isTransitioning, interruption]);\n\n  React.useEffect(() => {\n    warning(\n      fallbackElement == null || !router.future.v7_partialHydration,\n      \"`<RouterProvider fallbackElement>` is deprecated when using \" +\n        \"`v7_partialHydration`, use a `HydrateFallback` component instead\"\n    );\n    // Only log this once on initial mount\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  let navigator = React.useMemo((): Navigator => {\n    return {\n      createHref: router.createHref,\n      encodeLocation: router.encodeLocation,\n      go: (n) => router.navigate(n),\n      push: (to, state, opts) =>\n        router.navigate(to, {\n          state,\n          preventScrollReset: opts?.preventScrollReset,\n        }),\n      replace: (to, state, opts) =>\n        router.navigate(to, {\n          replace: true,\n          state,\n          preventScrollReset: opts?.preventScrollReset,\n        }),\n    };\n  }, [router]);\n\n  let basename = router.basename || \"/\";\n\n  let dataRouterContext = React.useMemo(\n    () => ({\n      router,\n      navigator,\n      static: false,\n      basename,\n    }),\n    [router, navigator, basename]\n  );\n\n  // The fragment and {null} here are important!  We need them to keep React 18's\n  // useId happy when we are server-rendering since we may have a <script> here\n  // containing the hydrated server-side staticContext (from StaticRouterProvider).\n  // useId relies on the component tree structure to generate deterministic id's\n  // so we need to ensure it remains the same on the client even though\n  // we don't need the <script> tag\n  return (\n    <>\n      <DataRouterContext.Provider value={dataRouterContext}>\n        <DataRouterStateContext.Provider value={state}>\n          <FetchersContext.Provider value={fetcherData.current}>\n            <ViewTransitionContext.Provider value={vtContext}>\n              <Router\n                basename={basename}\n                location={state.location}\n                navigationType={state.historyAction}\n                navigator={navigator}\n                future={{\n                  v7_relativeSplatPath: router.future.v7_relativeSplatPath,\n                }}\n              >\n                {state.initialized || router.future.v7_partialHydration ? (\n                  <DataRoutes\n                    routes={router.routes}\n                    future={router.future}\n                    state={state}\n                  />\n                ) : (\n                  fallbackElement\n                )}\n              </Router>\n            </ViewTransitionContext.Provider>\n          </FetchersContext.Provider>\n        </DataRouterStateContext.Provider>\n      </DataRouterContext.Provider>\n      {null}\n    </>\n  );\n}\n\nfunction DataRoutes({\n  routes,\n  future,\n  state,\n}: {\n  routes: DataRouteObject[];\n  future: RemixRouter[\"future\"];\n  state: RouterState;\n}): React.ReactElement | null {\n  return useRoutesImpl(routes, undefined, state, future);\n}\n\nexport interface BrowserRouterProps {\n  basename?: string;\n  children?: React.ReactNode;\n  future?: Partial<FutureConfig>;\n  window?: Window;\n}\n\n/**\n * A `<Router>` for use in web browsers. Provides the cleanest URLs.\n */\nexport function BrowserRouter({\n  basename,\n  children,\n  future,\n  window,\n}: BrowserRouterProps) {\n  let historyRef = React.useRef<BrowserHistory>();\n  if (historyRef.current == null) {\n    historyRef.current = createBrowserHistory({ window, v5Compat: true });\n  }\n\n  let history = historyRef.current;\n  let [state, setStateImpl] = React.useState({\n    action: history.action,\n    location: history.location,\n  });\n  let { v7_startTransition } = future || {};\n  let setState = React.useCallback(\n    (newState: { action: NavigationType; location: Location }) => {\n      v7_startTransition && startTransitionImpl\n        ? startTransitionImpl(() => setStateImpl(newState))\n        : setStateImpl(newState);\n    },\n    [setStateImpl, v7_startTransition]\n  );\n\n  React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n\n  return (\n    <Router\n      basename={basename}\n      children={children}\n      location={state.location}\n      navigationType={state.action}\n      navigator={history}\n      future={future}\n    />\n  );\n}\n\nexport interface HashRouterProps {\n  basename?: string;\n  children?: React.ReactNode;\n  future?: Partial<FutureConfig>;\n  window?: Window;\n}\n\n/**\n * A `<Router>` for use in web browsers. Stores the location in the hash\n * portion of the URL so it is not sent to the server.\n */\nexport function HashRouter({\n  basename,\n  children,\n  future,\n  window,\n}: HashRouterProps) {\n  let historyRef = React.useRef<HashHistory>();\n  if (historyRef.current == null) {\n    historyRef.current = createHashHistory({ window, v5Compat: true });\n  }\n\n  let history = historyRef.current;\n  let [state, setStateImpl] = React.useState({\n    action: history.action,\n    location: history.location,\n  });\n  let { v7_startTransition } = future || {};\n  let setState = React.useCallback(\n    (newState: { action: NavigationType; location: Location }) => {\n      v7_startTransition && startTransitionImpl\n        ? startTransitionImpl(() => setStateImpl(newState))\n        : setStateImpl(newState);\n    },\n    [setStateImpl, v7_startTransition]\n  );\n\n  React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n\n  return (\n    <Router\n      basename={basename}\n      children={children}\n      location={state.location}\n      navigationType={state.action}\n      navigator={history}\n      future={future}\n    />\n  );\n}\n\nexport interface HistoryRouterProps {\n  basename?: string;\n  children?: React.ReactNode;\n  future?: FutureConfig;\n  history: History;\n}\n\n/**\n * A `<Router>` that accepts a pre-instantiated history object. It's important\n * to note that using your own history object is highly discouraged and may add\n * two versions of the history library to your bundles unless you use the same\n * version of the history library that React Router uses internally.\n */\nfunction HistoryRouter({\n  basename,\n  children,\n  future,\n  history,\n}: HistoryRouterProps) {\n  let [state, setStateImpl] = React.useState({\n    action: history.action,\n    location: history.location,\n  });\n  let { v7_startTransition } = future || {};\n  let setState = React.useCallback(\n    (newState: { action: NavigationType; location: Location }) => {\n      v7_startTransition && startTransitionImpl\n        ? startTransitionImpl(() => setStateImpl(newState))\n        : setStateImpl(newState);\n    },\n    [setStateImpl, v7_startTransition]\n  );\n\n  React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n\n  return (\n    <Router\n      basename={basename}\n      children={children}\n      location={state.location}\n      navigationType={state.action}\n      navigator={history}\n      future={future}\n    />\n  );\n}\n\nif (__DEV__) {\n  HistoryRouter.displayName = \"unstable_HistoryRouter\";\n}\n\nexport { HistoryRouter as unstable_HistoryRouter };\n\nexport interface LinkProps\n  extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, \"href\"> {\n  reloadDocument?: boolean;\n  replace?: boolean;\n  state?: any;\n  preventScrollReset?: boolean;\n  relative?: RelativeRoutingType;\n  to: To;\n  unstable_viewTransition?: boolean;\n}\n\nconst isBrowser =\n  typeof window !== \"undefined\" &&\n  typeof window.document !== \"undefined\" &&\n  typeof window.document.createElement !== \"undefined\";\n\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n\n/**\n * The public API for rendering a history-aware `<a>`.\n */\nexport const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(\n  function LinkWithRef(\n    {\n      onClick,\n      relative,\n      reloadDocument,\n      replace,\n      state,\n      target,\n      to,\n      preventScrollReset,\n      unstable_viewTransition,\n      ...rest\n    },\n    ref\n  ) {\n    let { basename } = React.useContext(NavigationContext);\n\n    // Rendered into <a href> for absolute URLs\n    let absoluteHref;\n    let isExternal = false;\n\n    if (typeof to === \"string\" && ABSOLUTE_URL_REGEX.test(to)) {\n      // Render the absolute href server- and client-side\n      absoluteHref = to;\n\n      // Only check for external origins client-side\n      if (isBrowser) {\n        try {\n          let currentUrl = new URL(window.location.href);\n          let targetUrl = to.startsWith(\"//\")\n            ? new URL(currentUrl.protocol + to)\n            : new URL(to);\n          let path = stripBasename(targetUrl.pathname, basename);\n\n          if (targetUrl.origin === currentUrl.origin && path != null) {\n            // Strip the protocol/origin/basename for same-origin absolute URLs\n            to = path + targetUrl.search + targetUrl.hash;\n          } else {\n            isExternal = true;\n          }\n        } catch (e) {\n          // We can't do external URL detection without a valid URL\n          warning(\n            false,\n            `<Link to=\"${to}\"> contains an invalid URL which will probably break ` +\n              `when clicked - please update to a valid URL path.`\n          );\n        }\n      }\n    }\n\n    // Rendered into <a href> for relative URLs\n    let href = useHref(to, { relative });\n\n    let internalOnClick = useLinkClickHandler(to, {\n      replace,\n      state,\n      target,\n      preventScrollReset,\n      relative,\n      unstable_viewTransition,\n    });\n    function handleClick(\n      event: React.MouseEvent<HTMLAnchorElement, MouseEvent>\n    ) {\n      if (onClick) onClick(event);\n      if (!event.defaultPrevented) {\n        internalOnClick(event);\n      }\n    }\n\n    return (\n      // eslint-disable-next-line jsx-a11y/anchor-has-content\n      <a\n        {...rest}\n        href={absoluteHref || href}\n        onClick={isExternal || reloadDocument ? onClick : handleClick}\n        ref={ref}\n        target={target}\n      />\n    );\n  }\n);\n\nif (__DEV__) {\n  Link.displayName = \"Link\";\n}\n\ntype NavLinkRenderProps = {\n  isActive: boolean;\n  isPending: boolean;\n  isTransitioning: boolean;\n};\n\nexport interface NavLinkProps\n  extends Omit<LinkProps, \"className\" | \"style\" | \"children\"> {\n  children?: React.ReactNode | ((props: NavLinkRenderProps) => React.ReactNode);\n  caseSensitive?: boolean;\n  className?: string | ((props: NavLinkRenderProps) => string | undefined);\n  end?: boolean;\n  style?:\n    | React.CSSProperties\n    | ((props: NavLinkRenderProps) => React.CSSProperties | undefined);\n}\n\n/**\n * A `<Link>` wrapper that knows if it's \"active\" or not.\n */\nexport const NavLink = React.forwardRef<HTMLAnchorElement, NavLinkProps>(\n  function NavLinkWithRef(\n    {\n      \"aria-current\": ariaCurrentProp = \"page\",\n      caseSensitive = false,\n      className: classNameProp = \"\",\n      end = false,\n      style: styleProp,\n      to,\n      unstable_viewTransition,\n      children,\n      ...rest\n    },\n    ref\n  ) {\n    let path = useResolvedPath(to, { relative: rest.relative });\n    let location = useLocation();\n    let routerState = React.useContext(DataRouterStateContext);\n    let { navigator, basename } = React.useContext(NavigationContext);\n    let isTransitioning =\n      routerState != null &&\n      // Conditional usage is OK here because the usage of a data router is static\n      // eslint-disable-next-line react-hooks/rules-of-hooks\n      useViewTransitionState(path) &&\n      unstable_viewTransition === true;\n\n    let toPathname = navigator.encodeLocation\n      ? navigator.encodeLocation(path).pathname\n      : path.pathname;\n    let locationPathname = location.pathname;\n    let nextLocationPathname =\n      routerState && routerState.navigation && routerState.navigation.location\n        ? routerState.navigation.location.pathname\n        : null;\n\n    if (!caseSensitive) {\n      locationPathname = locationPathname.toLowerCase();\n      nextLocationPathname = nextLocationPathname\n        ? nextLocationPathname.toLowerCase()\n        : null;\n      toPathname = toPathname.toLowerCase();\n    }\n\n    if (nextLocationPathname && basename) {\n      nextLocationPathname =\n        stripBasename(nextLocationPathname, basename) || nextLocationPathname;\n    }\n\n    // If the `to` has a trailing slash, look at that exact spot.  Otherwise,\n    // we're looking for a slash _after_ what's in `to`.  For example:\n    //\n    // <NavLink to=\"/users\"> and <NavLink to=\"/users/\">\n    // both want to look for a / at index 6 to match URL `/users/matt`\n    const endSlashPosition =\n      toPathname !== \"/\" && toPathname.endsWith(\"/\")\n        ? toPathname.length - 1\n        : toPathname.length;\n    let isActive =\n      locationPathname === toPathname ||\n      (!end &&\n        locationPathname.startsWith(toPathname) &&\n        locationPathname.charAt(endSlashPosition) === \"/\");\n\n    let isPending =\n      nextLocationPathname != null &&\n      (nextLocationPathname === toPathname ||\n        (!end &&\n          nextLocationPathname.startsWith(toPathname) &&\n          nextLocationPathname.charAt(toPathname.length) === \"/\"));\n\n    let renderProps = {\n      isActive,\n      isPending,\n      isTransitioning,\n    };\n\n    let ariaCurrent = isActive ? ariaCurrentProp : undefined;\n\n    let className: string | undefined;\n    if (typeof classNameProp === \"function\") {\n      className = classNameProp(renderProps);\n    } else {\n      // If the className prop is not a function, we use a default `active`\n      // class for <NavLink />s that are active. In v5 `active` was the default\n      // value for `activeClassName`, but we are removing that API and can still\n      // use the old default behavior for a cleaner upgrade path and keep the\n      // simple styling rules working as they currently do.\n      className = [\n        classNameProp,\n        isActive ? \"active\" : null,\n        isPending ? \"pending\" : null,\n        isTransitioning ? \"transitioning\" : null,\n      ]\n        .filter(Boolean)\n        .join(\" \");\n    }\n\n    let style =\n      typeof styleProp === \"function\" ? styleProp(renderProps) : styleProp;\n\n    return (\n      <Link\n        {...rest}\n        aria-current={ariaCurrent}\n        className={className}\n        ref={ref}\n        style={style}\n        to={to}\n        unstable_viewTransition={unstable_viewTransition}\n      >\n        {typeof children === \"function\" ? children(renderProps) : children}\n      </Link>\n    );\n  }\n);\n\nif (__DEV__) {\n  NavLink.displayName = \"NavLink\";\n}\n\nexport interface FetcherFormProps\n  extends React.FormHTMLAttributes<HTMLFormElement> {\n  /**\n   * The HTTP verb to use when the form is submit. Supports \"get\", \"post\",\n   * \"put\", \"delete\", \"patch\".\n   */\n  method?: HTMLFormMethod;\n\n  /**\n   * `<form encType>` - enhancing beyond the normal string type and limiting\n   * to the built-in browser supported values\n   */\n  encType?:\n    | \"application/x-www-form-urlencoded\"\n    | \"multipart/form-data\"\n    | \"text/plain\";\n\n  /**\n   * Normal `<form action>` but supports React Router's relative paths.\n   */\n  action?: string;\n\n  /**\n   * Determines whether the form action is relative to the route hierarchy or\n   * the pathname.  Use this if you want to opt out of navigating the route\n   * hierarchy and want to instead route based on /-delimited URL segments\n   */\n  relative?: RelativeRoutingType;\n\n  /**\n   * Prevent the scroll position from resetting to the top of the viewport on\n   * completion of the navigation when using the <ScrollRestoration> component\n   */\n  preventScrollReset?: boolean;\n\n  /**\n   * A function to call when the form is submitted. If you call\n   * `event.preventDefault()` then this form will not do anything.\n   */\n  onSubmit?: React.FormEventHandler<HTMLFormElement>;\n}\n\nexport interface FormProps extends FetcherFormProps {\n  /**\n   * Indicate a specific fetcherKey to use when using navigate=false\n   */\n  fetcherKey?: string;\n\n  /**\n   * navigate=false will use a fetcher instead of a navigation\n   */\n  navigate?: boolean;\n\n  /**\n   * Forces a full document navigation instead of a fetch.\n   */\n  reloadDocument?: boolean;\n\n  /**\n   * Replaces the current entry in the browser history stack when the form\n   * navigates. Use this if you don't want the user to be able to click \"back\"\n   * to the page with the form on it.\n   */\n  replace?: boolean;\n\n  /**\n   * State object to add to the history stack entry for this navigation\n   */\n  state?: any;\n\n  /**\n   * Enable view transitions on this Form navigation\n   */\n  unstable_viewTransition?: boolean;\n}\n\ntype HTMLSubmitEvent = React.BaseSyntheticEvent<\n  SubmitEvent,\n  Event,\n  HTMLFormElement\n>;\n\ntype HTMLFormSubmitter = HTMLButtonElement | HTMLInputElement;\n\n/**\n * A `@remix-run/router`-aware `<form>`. It behaves like a normal form except\n * that the interaction with the server is with `fetch` instead of new document\n * requests, allowing components to add nicer UX to the page as the form is\n * submitted and returns with data.\n */\nexport const Form = React.forwardRef<HTMLFormElement, FormProps>(\n  (\n    {\n      fetcherKey,\n      navigate,\n      reloadDocument,\n      replace,\n      state,\n      method = defaultMethod,\n      action,\n      onSubmit,\n      relative,\n      preventScrollReset,\n      unstable_viewTransition,\n      ...props\n    },\n    forwardedRef\n  ) => {\n    let submit = useSubmit();\n    let formAction = useFormAction(action, { relative });\n    let formMethod: HTMLFormMethod =\n      method.toLowerCase() === \"get\" ? \"get\" : \"post\";\n\n    let submitHandler: React.FormEventHandler<HTMLFormElement> = (event) => {\n      onSubmit && onSubmit(event);\n      if (event.defaultPrevented) return;\n      event.preventDefault();\n\n      let submitter = (event as unknown as HTMLSubmitEvent).nativeEvent\n        .submitter as HTMLFormSubmitter | null;\n\n      let submitMethod =\n        (submitter?.getAttribute(\"formmethod\") as HTMLFormMethod | undefined) ||\n        method;\n\n      submit(submitter || event.currentTarget, {\n        fetcherKey,\n        method: submitMethod,\n        navigate,\n        replace,\n        state,\n        relative,\n        preventScrollReset,\n        unstable_viewTransition,\n      });\n    };\n\n    return (\n      <form\n        ref={forwardedRef}\n        method={formMethod}\n        action={formAction}\n        onSubmit={reloadDocument ? onSubmit : submitHandler}\n        {...props}\n      />\n    );\n  }\n);\n\nif (__DEV__) {\n  Form.displayName = \"Form\";\n}\n\nexport interface ScrollRestorationProps {\n  getKey?: GetScrollRestorationKeyFunction;\n  storageKey?: string;\n}\n\n/**\n * This component will emulate the browser's scroll restoration on location\n * changes.\n */\nexport function ScrollRestoration({\n  getKey,\n  storageKey,\n}: ScrollRestorationProps) {\n  useScrollRestoration({ getKey, storageKey });\n  return null;\n}\n\nif (__DEV__) {\n  ScrollRestoration.displayName = \"ScrollRestoration\";\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Hooks\n////////////////////////////////////////////////////////////////////////////////\n\nenum DataRouterHook {\n  UseScrollRestoration = \"useScrollRestoration\",\n  UseSubmit = \"useSubmit\",\n  UseSubmitFetcher = \"useSubmitFetcher\",\n  UseFetcher = \"useFetcher\",\n  useViewTransitionState = \"useViewTransitionState\",\n}\n\nenum DataRouterStateHook {\n  UseFetcher = \"useFetcher\",\n  UseFetchers = \"useFetchers\",\n  UseScrollRestoration = \"useScrollRestoration\",\n}\n\n// Internal hooks\n\nfunction getDataRouterConsoleError(\n  hookName: DataRouterHook | DataRouterStateHook\n) {\n  return `${hookName} must be used within a data router.  See https://reactrouter.com/routers/picking-a-router.`;\n}\n\nfunction useDataRouterContext(hookName: DataRouterHook) {\n  let ctx = React.useContext(DataRouterContext);\n  invariant(ctx, getDataRouterConsoleError(hookName));\n  return ctx;\n}\n\nfunction useDataRouterState(hookName: DataRouterStateHook) {\n  let state = React.useContext(DataRouterStateContext);\n  invariant(state, getDataRouterConsoleError(hookName));\n  return state;\n}\n\n// External hooks\n\n/**\n * Handles the click behavior for router `<Link>` components. This is useful if\n * you need to create custom `<Link>` components with the same click behavior we\n * use in our exported `<Link>`.\n */\nexport function useLinkClickHandler<E extends Element = HTMLAnchorElement>(\n  to: To,\n  {\n    target,\n    replace: replaceProp,\n    state,\n    preventScrollReset,\n    relative,\n    unstable_viewTransition,\n  }: {\n    target?: React.HTMLAttributeAnchorTarget;\n    replace?: boolean;\n    state?: any;\n    preventScrollReset?: boolean;\n    relative?: RelativeRoutingType;\n    unstable_viewTransition?: boolean;\n  } = {}\n): (event: React.MouseEvent<E, MouseEvent>) => void {\n  let navigate = useNavigate();\n  let location = useLocation();\n  let path = useResolvedPath(to, { relative });\n\n  return React.useCallback(\n    (event: React.MouseEvent<E, MouseEvent>) => {\n      if (shouldProcessLinkClick(event, target)) {\n        event.preventDefault();\n\n        // If the URL hasn't changed, a regular <a> will do a replace instead of\n        // a push, so do the same here unless the replace prop is explicitly set\n        let replace =\n          replaceProp !== undefined\n            ? replaceProp\n            : createPath(location) === createPath(path);\n\n        navigate(to, {\n          replace,\n          state,\n          preventScrollReset,\n          relative,\n          unstable_viewTransition,\n        });\n      }\n    },\n    [\n      location,\n      navigate,\n      path,\n      replaceProp,\n      state,\n      target,\n      to,\n      preventScrollReset,\n      relative,\n      unstable_viewTransition,\n    ]\n  );\n}\n\n/**\n * A convenient wrapper for reading and writing search parameters via the\n * URLSearchParams interface.\n */\nexport function useSearchParams(\n  defaultInit?: URLSearchParamsInit\n): [URLSearchParams, SetURLSearchParams] {\n  warning(\n    typeof URLSearchParams !== \"undefined\",\n    `You cannot use the \\`useSearchParams\\` hook in a browser that does not ` +\n      `support the URLSearchParams API. If you need to support Internet ` +\n      `Explorer 11, we recommend you load a polyfill such as ` +\n      `https://github.com/ungap/url-search-params\\n\\n` +\n      `If you're unsure how to load polyfills, we recommend you check out ` +\n      `https://polyfill.io/v3/ which provides some recommendations about how ` +\n      `to load polyfills only for users that need them, instead of for every ` +\n      `user.`\n  );\n\n  let defaultSearchParamsRef = React.useRef(createSearchParams(defaultInit));\n  let hasSetSearchParamsRef = React.useRef(false);\n\n  let location = useLocation();\n  let searchParams = React.useMemo(\n    () =>\n      // Only merge in the defaults if we haven't yet called setSearchParams.\n      // Once we call that we want those to take precedence, otherwise you can't\n      // remove a param with setSearchParams({}) if it has an initial value\n      getSearchParamsForLocation(\n        location.search,\n        hasSetSearchParamsRef.current ? null : defaultSearchParamsRef.current\n      ),\n    [location.search]\n  );\n\n  let navigate = useNavigate();\n  let setSearchParams = React.useCallback<SetURLSearchParams>(\n    (nextInit, navigateOptions) => {\n      const newSearchParams = createSearchParams(\n        typeof nextInit === \"function\" ? nextInit(searchParams) : nextInit\n      );\n      hasSetSearchParamsRef.current = true;\n      navigate(\"?\" + newSearchParams, navigateOptions);\n    },\n    [navigate, searchParams]\n  );\n\n  return [searchParams, setSearchParams];\n}\n\nexport type SetURLSearchParams = (\n  nextInit?:\n    | URLSearchParamsInit\n    | ((prev: URLSearchParams) => URLSearchParamsInit),\n  navigateOpts?: NavigateOptions\n) => void;\n\n/**\n * Submits a HTML `<form>` to the server without reloading the page.\n */\nexport interface SubmitFunction {\n  (\n    /**\n     * Specifies the `<form>` to be submitted to the server, a specific\n     * `<button>` or `<input type=\"submit\">` to use to submit the form, or some\n     * arbitrary data to submit.\n     *\n     * Note: When using a `<button>` its `name` and `value` will also be\n     * included in the form data that is submitted.\n     */\n    target: SubmitTarget,\n\n    /**\n     * Options that override the `<form>`'s own attributes. Required when\n     * submitting arbitrary data without a backing `<form>`.\n     */\n    options?: SubmitOptions\n  ): void;\n}\n\n/**\n * Submits a fetcher `<form>` to the server without reloading the page.\n */\nexport interface FetcherSubmitFunction {\n  (\n    target: SubmitTarget,\n    // Fetchers cannot replace or set state because they are not navigation events\n    options?: Omit<SubmitOptions, \"replace\" | \"state\">\n  ): void;\n}\n\nfunction validateClientSideSubmission() {\n  if (typeof document === \"undefined\") {\n    throw new Error(\n      \"You are calling submit during the server render. \" +\n        \"Try calling submit within a `useEffect` or callback instead.\"\n    );\n  }\n}\n\nlet fetcherId = 0;\nlet getUniqueFetcherId = () => `__${String(++fetcherId)}__`;\n\n/**\n * Returns a function that may be used to programmatically submit a form (or\n * some arbitrary data) to the server.\n */\nexport function useSubmit(): SubmitFunction {\n  let { router } = useDataRouterContext(DataRouterHook.UseSubmit);\n  let { basename } = React.useContext(NavigationContext);\n  let currentRouteId = useRouteId();\n\n  return React.useCallback<SubmitFunction>(\n    (target, options = {}) => {\n      validateClientSideSubmission();\n\n      let { action, method, encType, formData, body } = getFormSubmissionInfo(\n        target,\n        basename\n      );\n\n      if (options.navigate === false) {\n        let key = options.fetcherKey || getUniqueFetcherId();\n        router.fetch(key, currentRouteId, options.action || action, {\n          preventScrollReset: options.preventScrollReset,\n          formData,\n          body,\n          formMethod: options.method || (method as HTMLFormMethod),\n          formEncType: options.encType || (encType as FormEncType),\n          unstable_flushSync: options.unstable_flushSync,\n        });\n      } else {\n        router.navigate(options.action || action, {\n          preventScrollReset: options.preventScrollReset,\n          formData,\n          body,\n          formMethod: options.method || (method as HTMLFormMethod),\n          formEncType: options.encType || (encType as FormEncType),\n          replace: options.replace,\n          state: options.state,\n          fromRouteId: currentRouteId,\n          unstable_flushSync: options.unstable_flushSync,\n          unstable_viewTransition: options.unstable_viewTransition,\n        });\n      }\n    },\n    [router, basename, currentRouteId]\n  );\n}\n\n// v7: Eventually we should deprecate this entirely in favor of using the\n// router method directly?\nexport function useFormAction(\n  action?: string,\n  { relative }: { relative?: RelativeRoutingType } = {}\n): string {\n  let { basename } = React.useContext(NavigationContext);\n  let routeContext = React.useContext(RouteContext);\n  invariant(routeContext, \"useFormAction must be used inside a RouteContext\");\n\n  let [match] = routeContext.matches.slice(-1);\n  // Shallow clone path so we can modify it below, otherwise we modify the\n  // object referenced by useMemo inside useResolvedPath\n  let path = { ...useResolvedPath(action ? action : \".\", { relative }) };\n\n  // If no action was specified, browsers will persist current search params\n  // when determining the path, so match that behavior\n  // https://github.com/remix-run/remix/issues/927\n  let location = useLocation();\n  if (action == null) {\n    // Safe to write to this directly here since if action was undefined, we\n    // would have called useResolvedPath(\".\") which will never include a search\n    path.search = location.search;\n\n    // When grabbing search params from the URL, remove any included ?index param\n    // since it might not apply to our contextual route.  We add it back based\n    // on match.route.index below\n    let params = new URLSearchParams(path.search);\n    if (params.has(\"index\") && params.get(\"index\") === \"\") {\n      params.delete(\"index\");\n      path.search = params.toString() ? `?${params.toString()}` : \"\";\n    }\n  }\n\n  if ((!action || action === \".\") && match.route.index) {\n    path.search = path.search\n      ? path.search.replace(/^\\?/, \"?index&\")\n      : \"?index\";\n  }\n\n  // If we're operating within a basename, prepend it to the pathname prior\n  // to creating the form action.  If this is a root navigation, then just use\n  // the raw basename which allows the basename to have full control over the\n  // presence of a trailing slash on root actions\n  if (basename !== \"/\") {\n    path.pathname =\n      path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n  }\n\n  return createPath(path);\n}\n\nexport type FetcherWithComponents<TData> = Fetcher<TData> & {\n  Form: React.ForwardRefExoticComponent<\n    FetcherFormProps & React.RefAttributes<HTMLFormElement>\n  >;\n  submit: FetcherSubmitFunction;\n  load: (href: string, opts?: { unstable_flushSync?: boolean }) => void;\n};\n\n// TODO: (v7) Change the useFetcher generic default from `any` to `unknown`\n\n/**\n * Interacts with route loaders and actions without causing a navigation. Great\n * for any interaction that stays on the same page.\n */\nexport function useFetcher<TData = any>({\n  key,\n}: { key?: string } = {}): FetcherWithComponents<TData> {\n  let { router } = useDataRouterContext(DataRouterHook.UseFetcher);\n  let state = useDataRouterState(DataRouterStateHook.UseFetcher);\n  let fetcherData = React.useContext(FetchersContext);\n  let route = React.useContext(RouteContext);\n  let routeId = route.matches[route.matches.length - 1]?.route.id;\n\n  invariant(fetcherData, `useFetcher must be used inside a FetchersContext`);\n  invariant(route, `useFetcher must be used inside a RouteContext`);\n  invariant(\n    routeId != null,\n    `useFetcher can only be used on routes that contain a unique \"id\"`\n  );\n\n  // Fetcher key handling\n  // OK to call conditionally to feature detect `useId`\n  // eslint-disable-next-line react-hooks/rules-of-hooks\n  let defaultKey = useIdImpl ? useIdImpl() : \"\";\n  let [fetcherKey, setFetcherKey] = React.useState<string>(key || defaultKey);\n  if (key && key !== fetcherKey) {\n    setFetcherKey(key);\n  } else if (!fetcherKey) {\n    // We will only fall through here when `useId` is not available\n    setFetcherKey(getUniqueFetcherId());\n  }\n\n  // Registration/cleanup\n  React.useEffect(() => {\n    router.getFetcher(fetcherKey);\n    return () => {\n      // Tell the router we've unmounted - if v7_fetcherPersist is enabled this\n      // will not delete immediately but instead queue up a delete after the\n      // fetcher returns to an `idle` state\n      router.deleteFetcher(fetcherKey);\n    };\n  }, [router, fetcherKey]);\n\n  // Fetcher additions\n  let load = React.useCallback(\n    (href: string, opts?: { unstable_flushSync?: boolean }) => {\n      invariant(routeId, \"No routeId available for fetcher.load()\");\n      router.fetch(fetcherKey, routeId, href, opts);\n    },\n    [fetcherKey, routeId, router]\n  );\n\n  let submitImpl = useSubmit();\n  let submit = React.useCallback<FetcherSubmitFunction>(\n    (target, opts) => {\n      submitImpl(target, {\n        ...opts,\n        navigate: false,\n        fetcherKey,\n      });\n    },\n    [fetcherKey, submitImpl]\n  );\n\n  let FetcherForm = React.useMemo(() => {\n    let FetcherForm = React.forwardRef<HTMLFormElement, FetcherFormProps>(\n      (props, ref) => {\n        return (\n          <Form {...props} navigate={false} fetcherKey={fetcherKey} ref={ref} />\n        );\n      }\n    );\n    if (__DEV__) {\n      FetcherForm.displayName = \"fetcher.Form\";\n    }\n    return FetcherForm;\n  }, [fetcherKey]);\n\n  // Exposed FetcherWithComponents\n  let fetcher = state.fetchers.get(fetcherKey) || IDLE_FETCHER;\n  let data = fetcherData.get(fetcherKey);\n  let fetcherWithComponents = React.useMemo(\n    () => ({\n      Form: FetcherForm,\n      submit,\n      load,\n      ...fetcher,\n      data,\n    }),\n    [FetcherForm, submit, load, fetcher, data]\n  );\n\n  return fetcherWithComponents;\n}\n\n/**\n * Provides all fetchers currently on the page. Useful for layouts and parent\n * routes that need to provide pending/optimistic UI regarding the fetch.\n */\nexport function useFetchers(): (Fetcher & { key: string })[] {\n  let state = useDataRouterState(DataRouterStateHook.UseFetchers);\n  return Array.from(state.fetchers.entries()).map(([key, fetcher]) => ({\n    ...fetcher,\n    key,\n  }));\n}\n\nconst SCROLL_RESTORATION_STORAGE_KEY = \"react-router-scroll-positions\";\nlet savedScrollPositions: Record<string, number> = {};\n\n/**\n * When rendered inside a RouterProvider, will restore scroll positions on navigations\n */\nfunction useScrollRestoration({\n  getKey,\n  storageKey,\n}: {\n  getKey?: GetScrollRestorationKeyFunction;\n  storageKey?: string;\n} = {}) {\n  let { router } = useDataRouterContext(DataRouterHook.UseScrollRestoration);\n  let { restoreScrollPosition, preventScrollReset } = useDataRouterState(\n    DataRouterStateHook.UseScrollRestoration\n  );\n  let { basename } = React.useContext(NavigationContext);\n  let location = useLocation();\n  let matches = useMatches();\n  let navigation = useNavigation();\n\n  // Trigger manual scroll restoration while we're active\n  React.useEffect(() => {\n    window.history.scrollRestoration = \"manual\";\n    return () => {\n      window.history.scrollRestoration = \"auto\";\n    };\n  }, []);\n\n  // Save positions on pagehide\n  usePageHide(\n    React.useCallback(() => {\n      if (navigation.state === \"idle\") {\n        let key = (getKey ? getKey(location, matches) : null) || location.key;\n        savedScrollPositions[key] = window.scrollY;\n      }\n      try {\n        sessionStorage.setItem(\n          storageKey || SCROLL_RESTORATION_STORAGE_KEY,\n          JSON.stringify(savedScrollPositions)\n        );\n      } catch (error) {\n        warning(\n          false,\n          `Failed to save scroll positions in sessionStorage, <ScrollRestoration /> will not work properly (${error}).`\n        );\n      }\n      window.history.scrollRestoration = \"auto\";\n    }, [storageKey, getKey, navigation.state, location, matches])\n  );\n\n  // Read in any saved scroll locations\n  if (typeof document !== \"undefined\") {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useLayoutEffect(() => {\n      try {\n        let sessionPositions = sessionStorage.getItem(\n          storageKey || SCROLL_RESTORATION_STORAGE_KEY\n        );\n        if (sessionPositions) {\n          savedScrollPositions = JSON.parse(sessionPositions);\n        }\n      } catch (e) {\n        // no-op, use default empty object\n      }\n    }, [storageKey]);\n\n    // Enable scroll restoration in the router\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useLayoutEffect(() => {\n      let getKeyWithoutBasename: GetScrollRestorationKeyFunction | undefined =\n        getKey && basename !== \"/\"\n          ? (location, matches) =>\n              getKey(\n                // Strip the basename to match useLocation()\n                {\n                  ...location,\n                  pathname:\n                    stripBasename(location.pathname, basename) ||\n                    location.pathname,\n                },\n                matches\n              )\n          : getKey;\n      let disableScrollRestoration = router?.enableScrollRestoration(\n        savedScrollPositions,\n        () => window.scrollY,\n        getKeyWithoutBasename\n      );\n      return () => disableScrollRestoration && disableScrollRestoration();\n    }, [router, basename, getKey]);\n\n    // Restore scrolling when state.restoreScrollPosition changes\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useLayoutEffect(() => {\n      // Explicit false means don't do anything (used for submissions)\n      if (restoreScrollPosition === false) {\n        return;\n      }\n\n      // been here before, scroll to it\n      if (typeof restoreScrollPosition === \"number\") {\n        window.scrollTo(0, restoreScrollPosition);\n        return;\n      }\n\n      // try to scroll to the hash\n      if (location.hash) {\n        let el = document.getElementById(\n          decodeURIComponent(location.hash.slice(1))\n        );\n        if (el) {\n          el.scrollIntoView();\n          return;\n        }\n      }\n\n      // Don't reset if this navigation opted out\n      if (preventScrollReset === true) {\n        return;\n      }\n\n      // otherwise go to the top on new locations\n      window.scrollTo(0, 0);\n    }, [location, restoreScrollPosition, preventScrollReset]);\n  }\n}\n\nexport { useScrollRestoration as UNSAFE_useScrollRestoration };\n\n/**\n * Setup a callback to be fired on the window's `beforeunload` event. This is\n * useful for saving some data to `window.localStorage` just before the page\n * refreshes.\n *\n * Note: The `callback` argument should be a function created with\n * `React.useCallback()`.\n */\nexport function useBeforeUnload(\n  callback: (event: BeforeUnloadEvent) => any,\n  options?: { capture?: boolean }\n): void {\n  let { capture } = options || {};\n  React.useEffect(() => {\n    let opts = capture != null ? { capture } : undefined;\n    window.addEventListener(\"beforeunload\", callback, opts);\n    return () => {\n      window.removeEventListener(\"beforeunload\", callback, opts);\n    };\n  }, [callback, capture]);\n}\n\n/**\n * Setup a callback to be fired on the window's `pagehide` event. This is\n * useful for saving some data to `window.localStorage` just before the page\n * refreshes.  This event is better supported than beforeunload across browsers.\n *\n * Note: The `callback` argument should be a function created with\n * `React.useCallback()`.\n */\nfunction usePageHide(\n  callback: (event: PageTransitionEvent) => any,\n  options?: { capture?: boolean }\n): void {\n  let { capture } = options || {};\n  React.useEffect(() => {\n    let opts = capture != null ? { capture } : undefined;\n    window.addEventListener(\"pagehide\", callback, opts);\n    return () => {\n      window.removeEventListener(\"pagehide\", callback, opts);\n    };\n  }, [callback, capture]);\n}\n\n/**\n * Wrapper around useBlocker to show a window.confirm prompt to users instead\n * of building a custom UI with useBlocker.\n *\n * Warning: This has *a lot of rough edges* and behaves very differently (and\n * very incorrectly in some cases) across browsers if user click addition\n * back/forward navigations while the confirm is open.  Use at your own risk.\n */\nfunction usePrompt({\n  when,\n  message,\n}: {\n  when: boolean | BlockerFunction;\n  message: string;\n}) {\n  let blocker = useBlocker(when);\n\n  React.useEffect(() => {\n    if (blocker.state === \"blocked\") {\n      let proceed = window.confirm(message);\n      if (proceed) {\n        // This timeout is needed to avoid a weird \"race\" on POP navigations\n        // between the `window.history` revert navigation and the result of\n        // `window.confirm`\n        setTimeout(blocker.proceed, 0);\n      } else {\n        blocker.reset();\n      }\n    }\n  }, [blocker, message]);\n\n  React.useEffect(() => {\n    if (blocker.state === \"blocked\" && !when) {\n      blocker.reset();\n    }\n  }, [blocker, when]);\n}\n\nexport { usePrompt as unstable_usePrompt };\n\n/**\n * Return a boolean indicating if there is an active view transition to the\n * given href.  You can use this value to render CSS classes or viewTransitionName\n * styles onto your elements\n *\n * @param href The destination href\n * @param [opts.relative] Relative routing type (\"route\" | \"path\")\n */\nfunction useViewTransitionState(\n  to: To,\n  opts: { relative?: RelativeRoutingType } = {}\n) {\n  let vtContext = React.useContext(ViewTransitionContext);\n\n  invariant(\n    vtContext != null,\n    \"`unstable_useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`.  \" +\n      \"Did you accidentally import `RouterProvider` from `react-router`?\"\n  );\n\n  let { basename } = useDataRouterContext(\n    DataRouterHook.useViewTransitionState\n  );\n  let path = useResolvedPath(to, { relative: opts.relative });\n  if (!vtContext.isTransitioning) {\n    return false;\n  }\n\n  let currentPath =\n    stripBasename(vtContext.currentLocation.pathname, basename) ||\n    vtContext.currentLocation.pathname;\n  let nextPath =\n    stripBasename(vtContext.nextLocation.pathname, basename) ||\n    vtContext.nextLocation.pathname;\n\n  // Transition is active if we're going to or coming from the indicated\n  // destination.  This ensures that other PUSH navigations that reverse\n  // an indicated transition apply.  I.e., on the list view you have:\n  //\n  //   <NavLink to=\"/details/1\" unstable_viewTransition>\n  //\n  // If you click the breadcrumb back to the list view:\n  //\n  //   <NavLink to=\"/list\" unstable_viewTransition>\n  //\n  // We should apply the transition because it's indicated as active going\n  // from /list -> /details/1 and therefore should be active on the reverse\n  // (even though this isn't strictly a POP reverse)\n  return (\n    matchPath(path.pathname, nextPath) != null ||\n    matchPath(path.pathname, currentPath) != null\n  );\n}\n\nexport { useViewTransitionState as unstable_useViewTransitionState };\n\n//#endregion\n","function _taggedTemplateLiteral(e, t) {\n  return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, {\n    raw: {\n      value: Object.freeze(t)\n    }\n  }));\n}\nexport { _taggedTemplateLiteral as default };","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf ||\n      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n  return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null)\n      throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() { this.constructor = d; }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n  __assign = Object.assign || function __assign(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n      return t;\n  }\n  return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n              t[p[i]] = s[p[i]];\n      }\n  return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n  return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n  function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n  var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n  var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n  var _, done = false;\n  for (var i = decorators.length - 1; i >= 0; i--) {\n      var context = {};\n      for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n      for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n      context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n      var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n      if (kind === \"accessor\") {\n          if (result === void 0) continue;\n          if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n          if (_ = accept(result.get)) descriptor.get = _;\n          if (_ = accept(result.set)) descriptor.set = _;\n          if (_ = accept(result.init)) initializers.unshift(_);\n      }\n      else if (_ = accept(result)) {\n          if (kind === \"field\") initializers.unshift(_);\n          else descriptor[key] = _;\n      }\n  }\n  if (target) Object.defineProperty(target, contextIn.name, descriptor);\n  done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n  var useValue = arguments.length > 2;\n  for (var i = 0; i < initializers.length; i++) {\n      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n  }\n  return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n  return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n  if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n  return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n  return new (P || (P = Promise))(function (resolve, reject) {\n      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n      function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n      step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\n\nexport function __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n  return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n  function verb(n) { return function (v) { return step([n, v]); }; }\n  function step(op) {\n      if (f) throw new TypeError(\"Generator is already executing.\");\n      while (g && (g = 0, op[0] && (_ = 0)), _) try {\n          if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n              case 0: case 1: t = op; break;\n              case 4: _.label++; return { value: op[1], done: false };\n              case 5: _.label++; y = op[1]; op = [0]; continue;\n              case 7: op = _.ops.pop(); _.trys.pop(); continue;\n              default:\n                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                  if (t[2]) _.ops.pop();\n                  _.trys.pop(); continue;\n          }\n          op = body.call(thisArg, _);\n      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  var desc = Object.getOwnPropertyDescriptor(m, k);\n  if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n  }\n  Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n      next: function () {\n          if (o && i >= o.length) o = void 0;\n          return { value: o && o[i++], done: !o };\n      }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  }\n  catch (error) { e = { error: error }; }\n  finally {\n      try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n      }\n      finally { if (e) throw e.error; }\n  }\n  return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++)\n      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n          r[k] = a[j];\n  return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n      if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n      }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []), i, q = [];\n  return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n  function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n  function fulfill(value) { resume(\"next\", value); }\n  function reject(value) { resume(\"throw\", value); }\n  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator], i;\n  return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n  return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n  Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n  o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n  __setModuleDefault(result, mod);\n  return result;\n}\n\nexport function __importDefault(mod) {\n  return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n  return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n  if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n  return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n  if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n  return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n  if (value !== null && value !== void 0) {\n    if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n    var dispose;\n    if (async) {\n        if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n        dispose = value[Symbol.asyncDispose];\n    }\n    if (dispose === void 0) {\n        if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n        dispose = value[Symbol.dispose];\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    env.stack.push({ value: value, dispose: dispose, async: async });\n  }\n  else if (async) {\n    env.stack.push({ async: true });\n  }\n  return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n  function fail(e) {\n    env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n    env.hasError = true;\n  }\n  function next() {\n    while (env.stack.length) {\n      var rec = env.stack.pop();\n      try {\n        var result = rec.dispose && rec.dispose.call(rec.value);\n        if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n      }\n      catch (e) {\n          fail(e);\n      }\n    }\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\n\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __metadata,\n  __awaiter,\n  __generator,\n  __createBinding,\n  __exportStar,\n  __values,\n  __read,\n  __spread,\n  __spreadArrays,\n  __spreadArray,\n  __await,\n  __asyncGenerator,\n  __asyncDelegator,\n  __asyncValues,\n  __makeTemplateObject,\n  __importStar,\n  __importDefault,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __classPrivateFieldIn,\n  __addDisposableResource,\n  __disposeResources,\n};\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\nexport var LAYER = '@layer'\nexport var SCOPE = '@scope'\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @param {number} position\n * @return {number}\n */\nexport function indexof (value, search, position) {\n\treturn value.indexOf(search, position)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n\n/**\n * @param {string[]} array\n * @param {RegExp} pattern\n * @return {string[]}\n */\nexport function filter (array, pattern) {\n\treturn array.filter(function (value) { return !match(value, pattern) })\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {object[]} siblings\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length, siblings) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: '', siblings: siblings}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0, root.siblings), root, {length: -root.length}, props)\n}\n\n/**\n * @param {object} root\n */\nexport function lift (root) {\n\twhile (root.root)\n\t\troot = copy(root.root, {children: [root]})\n\n\tappend(root, root.siblings)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","import {IMPORT, LAYER, COMMENT, RULESET, DECLARATION, KEYFRAMES} from './Enum.js'\nimport {strlen} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\n\tfor (var i = 0; i < children.length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase LAYER: if (element.children.length) break\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: if (!strlen(element.value = element.props.join(','))) return ''\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {MS, MOZ, WEBKIT} from './Enum.js'\nimport {hash, charat, strlen, indexof, replace, substr, match} from './Utility.js'\n\n/**\n * @param {string} value\n * @param {number} length\n * @param {object[]} children\n * @return {string}\n */\nexport function prefix (value, length, children) {\n\tswitch (hash(value, length)) {\n\t\t// color-adjust\n\t\tcase 5103:\n\t\t\treturn WEBKIT + 'print-' + value + value\n\t\t// animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\t\tcase 5737: case 4201: case 3177: case 3433: case 1641: case 4457: case 2921:\n\t\t// text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\t\tcase 5572: case 6356: case 5844: case 3191: case 6645: case 3005:\n\t\t// mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\t\tcase 6391: case 5879: case 5623: case 6135: case 4599: case 4855:\n\t\t// background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\t\tcase 4215: case 6389: case 5109: case 5365: case 5621: case 3829:\n\t\t\treturn WEBKIT + value + value\n\t\t// tab-size\n\t\tcase 4789:\n\t\t\treturn MOZ + value + value\n\t\t// appearance, user-select, transform, hyphens, text-size-adjust\n\t\tcase 5349: case 4246: case 4810: case 6968: case 2756:\n\t\t\treturn WEBKIT + value + MOZ + value + MS + value + value\n\t\t// writing-mode\n\t\tcase 5936:\n\t\t\tswitch (charat(value, length + 11)) {\n\t\t\t\t// vertical-l(r)\n\t\t\t\tcase 114:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value\n\t\t\t\t// vertical-r(l)\n\t\t\t\tcase 108:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value\n\t\t\t\t// horizontal(-)tb\n\t\t\t\tcase 45:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value\n\t\t\t\t// default: fallthrough to below\n\t\t\t}\n\t\t// flex, flex-direction, scroll-snap-type, writing-mode\n\t\tcase 6828: case 4268: case 2903:\n\t\t\treturn WEBKIT + value + MS + value + value\n\t\t// order\n\t\tcase 6165:\n\t\t\treturn WEBKIT + value + MS + 'flex-' + value + value\n\t\t// align-items\n\t\tcase 5187:\n\t\t\treturn WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value\n\t\t// align-self\n\t\tcase 5443:\n\t\t\treturn WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/g, '') + (!match(value, /flex-|baseline/) ? MS + 'grid-row-' + replace(value, /flex-|-self/g, '') : '') + value\n\t\t// align-content\n\t\tcase 4675:\n\t\t\treturn WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/g, '') + value\n\t\t// flex-shrink\n\t\tcase 5548:\n\t\t\treturn WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value\n\t\t// flex-basis\n\t\tcase 5292:\n\t\t\treturn WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value\n\t\t// flex-grow\n\t\tcase 6060:\n\t\t\treturn WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value\n\t\t// transition\n\t\tcase 4554:\n\t\t\treturn WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value\n\t\t// cursor\n\t\tcase 6187:\n\t\t\treturn replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value\n\t\t// background, background-image\n\t\tcase 5495: case 3959:\n\t\t\treturn replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1')\n\t\t// justify-content\n\t\tcase 4968:\n\t\t\treturn replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value\n\t\t// justify-self\n\t\tcase 4200:\n\t\t\tif (!match(value, /flex-|baseline/)) return MS + 'grid-column-align' + substr(value, length) + value\n\t\t\tbreak\n\t\t// grid-template-(columns|rows)\n\t\tcase 2592: case 3360:\n\t\t\treturn MS + replace(value, 'template-', '') + value\n\t\t// grid-(row|column)-start\n\t\tcase 4384: case 3616:\n\t\t\tif (children && children.some(function (element, index) { return length = index, match(element.props, /grid-\\w+-end/) })) {\n\t\t\t\treturn ~indexof(value + (children = children[length].value), 'span', 0) ? value : (MS + replace(value, '-start', '') + value + MS + 'grid-row-span:' + (~indexof(children, 'span', 0) ? match(children, /\\d+/) : +match(children, /\\d+/) - +match(value, /\\d+/)) + ';')\n\t\t\t}\n\t\t\treturn MS + replace(value, '-start', '') + value\n\t\t// grid-(row|column)-end\n\t\tcase 4896: case 4128:\n\t\t\treturn (children && children.some(function (element) { return match(element.props, /grid-\\w+-start/) })) ? value : MS + replace(replace(value, '-end', '-span'), 'span ', '') + value\n\t\t// (margin|padding)-inline-(start|end)\n\t\tcase 4095: case 3583: case 4068: case 2532:\n\t\t\treturn replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value\n\t\t// (min|max)?(width|height|inline-size|block-size)\n\t\tcase 8116: case 7059: case 5753: case 5535:\n\t\tcase 5445: case 5701: case 4933: case 4677:\n\t\tcase 5533: case 5789: case 5021: case 4765:\n\t\t\t// stretch, max-content, min-content, fill-available\n\t\t\tif (strlen(value) - 1 - length > 6)\n\t\t\t\tswitch (charat(value, length + 1)) {\n\t\t\t\t\t// (m)ax-content, (m)in-content\n\t\t\t\t\tcase 109:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (charat(value, length + 4) !== 45)\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t// (f)ill-available, (f)it-content\n\t\t\t\t\tcase 102:\n\t\t\t\t\t\treturn replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value\n\t\t\t\t\t// (s)tretch\n\t\t\t\t\tcase 115:\n\t\t\t\t\t\treturn ~indexof(value, 'stretch', 0) ? prefix(replace(value, 'stretch', 'fill-available'), length, children) + value : value\n\t\t\t\t}\n\t\t\tbreak\n\t\t// grid-(column|row)\n\t\tcase 5152: case 5920:\n\t\t\treturn replace(value, /(.+?):(\\d+)(\\s*\\/\\s*(span)?\\s*(\\d+))?(.*)/, function (_, a, b, c, d, e, f) { return (MS + a + ':' + b + f) + (c ? (MS + a + '-span:' + (d ? e : +e - +b)) + f : '') + value })\n\t\t// position: sticky\n\t\tcase 4949:\n\t\t\t// stick(y)?\n\t\t\tif (charat(value, length + 6) === 121)\n\t\t\t\treturn replace(value, ':', ':' + WEBKIT) + value\n\t\t\tbreak\n\t\t// display: (flex|inline-flex|grid|inline-grid)\n\t\tcase 6444:\n\t\t\tswitch (charat(value, charat(value, 14) === 45 ? 18 : 11)) {\n\t\t\t\t// (inline-)?fle(x)\n\t\t\t\tcase 120:\n\t\t\t\t\treturn replace(value, /(.+:)([^;\\s!]+)(;|(\\s+)?!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value\n\t\t\t\t// (inline-)?gri(d)\n\t\t\t\tcase 100:\n\t\t\t\t\treturn replace(value, ':', ':' + MS) + value\n\t\t\t}\n\t\t\tbreak\n\t\t// scroll-margin, scroll-margin-(top|right|bottom|left)\n\t\tcase 5719: case 2647: case 2135: case 3927: case 2391:\n\t\t\treturn replace(value, 'scroll-', 'scroll-snap-') + value\n\t}\n\n\treturn value\n}\n","import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'\nimport {match, charat, substr, strlen, sizeof, replace, combine, filter, assign} from './Utility.js'\nimport {copy, lift, tokenize} from './Tokenizer.js'\nimport {serialize} from './Serializer.js'\nimport {prefix} from './Prefixer.js'\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nexport function middleware (collection) {\n\tvar length = sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nexport function rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nexport function prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length, children)\n\t\t\t\t\treturn\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(children = element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, callback = /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [value]}))\n\t\t\t\t\t\t\t\t\tassign(element, {props: filter(children, callback)})\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [value]}))\n\t\t\t\t\t\t\t\t\tassign(element, {props: filter(children, callback)})\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nexport function namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f', abs(index ? points[index - 1] : 0)) != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent, declarations), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset: if (ampersand == -1) characters = replace(characters, /\\f/g, '')\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1, declarations) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2, declarations), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length, rulesets), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule === 99 && charat(characters, 3) === 110 ? 100 : atrule) {\n\t\t\t\t\t\t\t\t\t// d l m s\n\t\t\t\t\t\t\t\t\tcase 100: case 108: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length, children), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @param {object[]} siblings\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length, siblings) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length, siblings)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @param {object[]} siblings\n * @return {object}\n */\nexport function comment (value, root, parent, siblings) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0, siblings)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @param {object[]} siblings\n * @return {object}\n */\nexport function declaration (value, root, parent, length, siblings) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length, siblings)\n}\n","var unitlessKeys = {\n  animationIterationCount: 1,\n  aspectRatio: 1,\n  borderImageOutset: 1,\n  borderImageSlice: 1,\n  borderImageWidth: 1,\n  boxFlex: 1,\n  boxFlexGroup: 1,\n  boxOrdinalGroup: 1,\n  columnCount: 1,\n  columns: 1,\n  flex: 1,\n  flexGrow: 1,\n  flexPositive: 1,\n  flexShrink: 1,\n  flexNegative: 1,\n  flexOrder: 1,\n  gridRow: 1,\n  gridRowEnd: 1,\n  gridRowSpan: 1,\n  gridRowStart: 1,\n  gridColumn: 1,\n  gridColumnEnd: 1,\n  gridColumnSpan: 1,\n  gridColumnStart: 1,\n  msGridRow: 1,\n  msGridRowSpan: 1,\n  msGridColumn: 1,\n  msGridColumnSpan: 1,\n  fontWeight: 1,\n  lineHeight: 1,\n  opacity: 1,\n  order: 1,\n  orphans: 1,\n  tabSize: 1,\n  widows: 1,\n  zIndex: 1,\n  zoom: 1,\n  WebkitLineClamp: 1,\n  // SVG-related properties\n  fillOpacity: 1,\n  floodOpacity: 1,\n  stopOpacity: 1,\n  strokeDasharray: 1,\n  strokeDashoffset: 1,\n  strokeMiterlimit: 1,\n  strokeOpacity: 1,\n  strokeWidth: 1\n};\n\nexport { unitlessKeys as default };\n","declare let SC_DISABLE_SPEEDY: boolean | null | undefined;\ndeclare let __VERSION__: string;\n\nexport const SC_ATTR: string =\n  (typeof process !== 'undefined' &&\n    typeof process.env !== 'undefined' &&\n    (process.env.REACT_APP_SC_ATTR || process.env.SC_ATTR)) ||\n  'data-styled';\n\nexport const SC_ATTR_ACTIVE = 'active';\nexport const SC_ATTR_VERSION = 'data-styled-version';\nexport const SC_VERSION = __VERSION__;\nexport const SPLITTER = '/*!sc*/\\n';\n\nexport const IS_BROWSER = typeof window !== 'undefined' && 'HTMLElement' in window;\n\nexport const DISABLE_SPEEDY = Boolean(\n  typeof SC_DISABLE_SPEEDY === 'boolean'\n    ? SC_DISABLE_SPEEDY\n    : typeof process !== 'undefined' &&\n        typeof process.env !== 'undefined' &&\n        typeof process.env.REACT_APP_SC_DISABLE_SPEEDY !== 'undefined' &&\n        process.env.REACT_APP_SC_DISABLE_SPEEDY !== ''\n      ? process.env.REACT_APP_SC_DISABLE_SPEEDY === 'false'\n        ? false\n        : process.env.REACT_APP_SC_DISABLE_SPEEDY\n      : typeof process !== 'undefined' &&\n          typeof process.env !== 'undefined' &&\n          typeof process.env.SC_DISABLE_SPEEDY !== 'undefined' &&\n          process.env.SC_DISABLE_SPEEDY !== ''\n        ? process.env.SC_DISABLE_SPEEDY === 'false'\n          ? false\n          : process.env.SC_DISABLE_SPEEDY\n        : process.env.NODE_ENV !== 'production'\n);\n\n// Shared empty execution context when generating static styles\nexport const STATIC_EXECUTION_CONTEXT = {};\n","import { Dict } from '../types';\n\nexport const EMPTY_ARRAY = Object.freeze([]) as Readonly<any[]>;\nexport const EMPTY_OBJECT = Object.freeze({}) as Readonly<Dict<any>>;\n","import { useRef } from 'react';\n\nconst invalidHookCallRe = /invalid hook call/i;\nconst seen = new Set();\n\nexport const checkDynamicCreation = (displayName: string, componentId?: string | undefined) => {\n  if (process.env.NODE_ENV !== 'production') {\n    const parsedIdString = componentId ? ` with the id of \"${componentId}\"` : '';\n    const message =\n      `The component ${displayName}${parsedIdString} has been created dynamically.\\n` +\n      \"You may see this warning because you've called styled inside another component.\\n\" +\n      'To resolve this only create new StyledComponents outside of any render method and function component.';\n\n    // If a hook is called outside of a component:\n    // React 17 and earlier throw an error\n    // React 18 and above use console.error\n\n    const originalConsoleError = console.error;\n    try {\n      let didNotCallInvalidHook = true;\n      console.error = (consoleErrorMessage, ...consoleErrorArgs) => {\n        // The error here is expected, since we're expecting anything that uses `checkDynamicCreation` to\n        // be called outside of a React component.\n        if (invalidHookCallRe.test(consoleErrorMessage)) {\n          didNotCallInvalidHook = false;\n          // This shouldn't happen, but resets `warningSeen` if we had this error happen intermittently\n          seen.delete(message);\n        } else {\n          originalConsoleError(consoleErrorMessage, ...consoleErrorArgs);\n        }\n      };\n      // We purposefully call `useRef` outside of a component and expect it to throw\n      // If it doesn't, then we're inside another component.\n      useRef();\n\n      if (didNotCallInvalidHook && !seen.has(message)) {\n        console.warn(message);\n        seen.add(message);\n      }\n    } catch (error) {\n      // The error here is expected, since we're expecting anything that uses `checkDynamicCreation` to\n      // be called outside of a React component.\n      if (invalidHookCallRe.test((error as Error).message)) {\n        // This shouldn't happen, but resets `warningSeen` if we had this error happen intermittently\n        seen.delete(message);\n      }\n    } finally {\n      console.error = originalConsoleError;\n    }\n  }\n};\n","import { DefaultTheme, ExecutionProps } from '../types';\nimport { EMPTY_OBJECT } from './empties';\n\nexport default function determineTheme(\n  props: ExecutionProps,\n  providedTheme?: DefaultTheme | undefined,\n  defaultProps: { theme?: DefaultTheme | undefined } = EMPTY_OBJECT\n): DefaultTheme | undefined {\n  return (props.theme !== defaultProps.theme && props.theme) || providedTheme || defaultProps.theme;\n}\n","// Thanks to ReactDOMFactories for this handy list!\n\nconst elements = [\n  'a',\n  'abbr',\n  'address',\n  'area',\n  'article',\n  'aside',\n  'audio',\n  'b',\n  'base',\n  'bdi',\n  'bdo',\n  'big',\n  'blockquote',\n  'body',\n  'br',\n  'button',\n  'canvas',\n  'caption',\n  'cite',\n  'code',\n  'col',\n  'colgroup',\n  'data',\n  'datalist',\n  'dd',\n  'del',\n  'details',\n  'dfn',\n  'dialog',\n  'div',\n  'dl',\n  'dt',\n  'em',\n  'embed',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'header',\n  'hgroup',\n  'hr',\n  'html',\n  'i',\n  'iframe',\n  'img',\n  'input',\n  'ins',\n  'kbd',\n  'keygen',\n  'label',\n  'legend',\n  'li',\n  'link',\n  'main',\n  'map',\n  'mark',\n  'menu',\n  'menuitem',\n  'meta',\n  'meter',\n  'nav',\n  'noscript',\n  'object',\n  'ol',\n  'optgroup',\n  'option',\n  'output',\n  'p',\n  'param',\n  'picture',\n  'pre',\n  'progress',\n  'q',\n  'rp',\n  'rt',\n  'ruby',\n  's',\n  'samp',\n  'script',\n  'section',\n  'select',\n  'small',\n  'source',\n  'span',\n  'strong',\n  'style',\n  'sub',\n  'summary',\n  'sup',\n  'table',\n  'tbody',\n  'td',\n  'textarea',\n  'tfoot',\n  'th',\n  'thead',\n  'time',\n  'tr',\n  'track',\n  'u',\n  'ul',\n  'use',\n  'var',\n  'video',\n  'wbr', // SVG\n  'circle',\n  'clipPath',\n  'defs',\n  'ellipse',\n  'foreignObject',\n  'g',\n  'image',\n  'line',\n  'linearGradient',\n  'marker',\n  'mask',\n  'path',\n  'pattern',\n  'polygon',\n  'polyline',\n  'radialGradient',\n  'rect',\n  'stop',\n  'svg',\n  'text',\n  'tspan',\n] as const;\n\nexport default new Set(elements);\nexport type SupportedHTMLElements = (typeof elements)[number];\n","// Source: https://www.w3.org/TR/cssom-1/#serialize-an-identifier\n// Control characters and non-letter first symbols are not supported\nconst escapeRegex = /[!\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~-]+/g;\n\nconst dashesAtEnds = /(^-|-$)/g;\n\n/**\n * TODO: Explore using CSS.escape when it becomes more available\n * in evergreen browsers.\n */\nexport default function escape(str: string) {\n  return str // Replace all possible CSS selectors\n    .replace(escapeRegex, '-') // Remove extraneous hyphens at the start and end\n    .replace(dashesAtEnds, '');\n}\n","const AD_REPLACER_R = /(a)(d)/gi;\n\n/* This is the \"capacity\" of our alphabet i.e. 2x26 for all letters plus their capitalised\n * counterparts */\nconst charsLength = 52;\n\n/* start at 75 for 'a' until 'z' (25) and then start at 65 for capitalised letters */\nconst getAlphabeticChar = (code: number) => String.fromCharCode(code + (code > 25 ? 39 : 97));\n\n/* input a number, usually a hash and convert it to base-52 */\nexport default function generateAlphabeticName(code: number) {\n  let name = '';\n  let x;\n\n  /* get a char and divide by alphabet-length */\n  for (x = Math.abs(code); x > charsLength; x = (x / charsLength) | 0) {\n    name = getAlphabeticChar(x % charsLength) + name;\n  }\n\n  return (getAlphabeticChar(x % charsLength) + name).replace(AD_REPLACER_R, '$1-$2');\n}\n","export const SEED = 5381;\n\n// When we have separate strings it's useful to run a progressive\n// version of djb2 where we pretend that we're still looping over\n// the same string\nexport const phash = (h: number, x: string) => {\n  let i = x.length;\n\n  while (i) {\n    h = (h * 33) ^ x.charCodeAt(--i);\n  }\n\n  return h;\n};\n\n// This is a djb2 hashing function\nexport const hash = (x: string) => {\n  return phash(SEED, x);\n};\n","import generateAlphabeticName from './generateAlphabeticName';\nimport { hash } from './hash';\n\nexport default function generateComponentId(str: string) {\n  return generateAlphabeticName(hash(str) >>> 0);\n}\n","import { StyledTarget } from '../types';\n\nexport default function getComponentName(target: StyledTarget<any>) {\n  return (\n    (process.env.NODE_ENV !== 'production' ? typeof target === 'string' && target : false) ||\n    (target as Exclude<StyledTarget<any>, string>).displayName ||\n    (target as Function).name ||\n    'Component'\n  );\n}\n","import { StyledTarget } from '../types';\n\nexport default function isTag(target: StyledTarget<'web'>): target is string {\n  return (\n    typeof target === 'string' &&\n    (process.env.NODE_ENV !== 'production'\n      ? target.charAt(0) === target.charAt(0).toLowerCase()\n      : true)\n  );\n}\n","import React from 'react';\nimport { AnyComponent } from '../types';\n\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for;\n\n// copied from react-is\nconst REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nconst REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\n\n/**\n * Adapted from hoist-non-react-statics to avoid the react-is dependency.\n */\nconst REACT_STATICS = {\n  childContextTypes: true,\n  contextType: true,\n  contextTypes: true,\n  defaultProps: true,\n  displayName: true,\n  getDefaultProps: true,\n  getDerivedStateFromError: true,\n  getDerivedStateFromProps: true,\n  mixins: true,\n  propTypes: true,\n  type: true,\n};\n\nconst KNOWN_STATICS = {\n  name: true,\n  length: true,\n  prototype: true,\n  caller: true,\n  callee: true,\n  arguments: true,\n  arity: true,\n};\n\nconst FORWARD_REF_STATICS = {\n  $$typeof: true,\n  render: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true,\n};\n\nconst MEMO_STATICS = {\n  $$typeof: true,\n  compare: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true,\n  type: true,\n};\n\nconst TYPE_STATICS = {\n  [REACT_FORWARD_REF_TYPE]: FORWARD_REF_STATICS,\n  [REACT_MEMO_TYPE]: MEMO_STATICS,\n};\n\ntype OmniComponent = AnyComponent;\n\n// adapted from react-is\nfunction isMemo(\n  object: OmniComponent | React.MemoExoticComponent<any>\n): object is React.MemoExoticComponent<any> {\n  const $$typeofType = 'type' in object && object.type.$$typeof;\n\n  return $$typeofType === REACT_MEMO_TYPE;\n}\n\nfunction getStatics(component: OmniComponent) {\n  // React v16.11 and below\n  if (isMemo(component)) {\n    return MEMO_STATICS;\n  }\n\n  // React v16.12 and above\n  return '$$typeof' in component\n    ? TYPE_STATICS[component['$$typeof'] as unknown as string]\n    : REACT_STATICS;\n}\n\nconst defineProperty = Object.defineProperty;\nconst getOwnPropertyNames = Object.getOwnPropertyNames;\nconst getOwnPropertySymbols = Object.getOwnPropertySymbols;\nconst getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nconst getPrototypeOf = Object.getPrototypeOf;\nconst objectPrototype = Object.prototype;\n\ntype ExcludeList = {\n  [key: string]: true;\n};\n\ntype NonReactStatics<S extends OmniComponent, C extends ExcludeList = {}> = {\n  [key in Exclude<\n    keyof S,\n    S extends React.MemoExoticComponent<any>\n      ? keyof typeof MEMO_STATICS | keyof C\n      : S extends React.ForwardRefExoticComponent<any>\n        ? keyof typeof FORWARD_REF_STATICS | keyof C\n        : keyof typeof REACT_STATICS | keyof typeof KNOWN_STATICS | keyof C\n  >]: S[key];\n};\n\nexport default function hoistNonReactStatics<\n  T extends OmniComponent,\n  S extends OmniComponent,\n  C extends ExcludeList = {},\n>(targetComponent: T, sourceComponent: S, excludelist?: C | undefined) {\n  if (typeof sourceComponent !== 'string') {\n    // don't hoist over string (html) components\n\n    if (objectPrototype) {\n      const inheritedComponent = getPrototypeOf(sourceComponent);\n      if (inheritedComponent && inheritedComponent !== objectPrototype) {\n        hoistNonReactStatics(targetComponent, inheritedComponent, excludelist);\n      }\n    }\n\n    let keys: (String | Symbol)[] = getOwnPropertyNames(sourceComponent);\n\n    if (getOwnPropertySymbols) {\n      keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n    }\n\n    const targetStatics = getStatics(targetComponent);\n    const sourceStatics = getStatics(sourceComponent);\n\n    for (let i = 0; i < keys.length; ++i) {\n      const key = keys[i] as unknown as string;\n      if (\n        !(key in KNOWN_STATICS) &&\n        !(excludelist && excludelist[key]) &&\n        !(sourceStatics && key in sourceStatics) &&\n        !(targetStatics && key in targetStatics)\n      ) {\n        const descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n        try {\n          // Avoid failures from read-only properties\n          defineProperty(targetComponent, key, descriptor!);\n        } catch (e) {\n          /* ignore */\n        }\n      }\n    }\n  }\n\n  return targetComponent as T & NonReactStatics<S, C>;\n}\n","export default function isFunction(test: any): test is Function {\n  return typeof test === 'function';\n}\n","import { StyledComponentBrand } from '../types';\n\nexport default function isStyledComponent(target: any): target is StyledComponentBrand {\n  return typeof target === 'object' && 'styledComponentId' in target;\n}\n","/**\n * Convenience function for joining strings to form className chains\n */\nexport function joinStrings(a?: string | undefined, b?: string | undefined): string {\n  return a && b ? `${a} ${b}` : a || b || '';\n}\n\nexport function joinStringArray(arr: string[], sep?: string | undefined): string {\n  if (arr.length === 0) {\n    return '';\n  }\n\n  let result = arr[0];\n  for (let i = 1; i < arr.length; i++) {\n    result += sep ? sep + arr[i] : arr[i];\n  }\n  return result;\n}\n","export default function isPlainObject(x: any): x is Record<any, any> {\n  return (\n    x !== null &&\n    typeof x === 'object' &&\n    x.constructor.name === Object.name &&\n    /* check for reasonable markers that the object isn't an element for react & preact/compat */\n    !('props' in x && x.$$typeof)\n  );\n}\n","import isPlainObject from './isPlainObject';\n\nfunction mixinRecursively(target: any, source: any, forceMerge = false) {\n  /* only merge into POJOs, Arrays, but for top level objects only\n   * allow to merge into anything by passing forceMerge = true */\n  if (!forceMerge && !isPlainObject(target) && !Array.isArray(target)) {\n    return source;\n  }\n\n  if (Array.isArray(source)) {\n    for (let key = 0; key < source.length; key++) {\n      target[key] = mixinRecursively(target[key], source[key]);\n    }\n  } else if (isPlainObject(source)) {\n    for (const key in source) {\n      target[key] = mixinRecursively(target[key], source[key]);\n    }\n  }\n\n  return target;\n}\n\n/**\n * Arrays & POJOs merged recursively, other objects and value types are overridden\n * If target is not a POJO or an Array, it will get source properties injected via shallow merge\n * Source objects applied left to right.  Mutates & returns target.  Similar to lodash merge.\n */\nexport default function mixinDeep(target: any, ...sources: any[]) {\n  for (const source of sources) {\n    mixinRecursively(target, source, true);\n  }\n\n  return target;\n}\n","/**\n * If the Object prototype is frozen, the \"toString\" property is non-writable. This means that any objects which inherit this property\n * cannot have the property changed using a \"=\" assignment operator. If using strict mode, attempting that will cause an error. If not using\n * strict mode, attempting that will be silently ignored.\n *\n * If the Object prototype is frozen, inherited non-writable properties can still be shadowed using one of two mechanisms:\n *\n *  1. ES6 class methods: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes#methods\n *  2. Using the `Object.defineProperty()` static method:\n *     https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty\n *\n * However, this project uses Babel to transpile ES6 classes, and transforms ES6 class methods to use the assignment operator instead:\n * https://babeljs.io/docs/babel-plugin-transform-class-properties#options\n *\n * Therefore, the most compatible way to shadow the prototype's \"toString\" property is to define a new \"toString\" property on this object.\n */\nexport function setToString(object: object, toStringFn: () => string) {\n  Object.defineProperty(object, 'toString', { value: toStringFn });\n}\n","import { Dict } from '../types';\nimport errorMap from './errors';\n\nconst ERRORS: Dict<any> = process.env.NODE_ENV !== 'production' ? errorMap : {};\n\n/**\n * super basic version of sprintf\n */\nfunction format(...args: [string, ...any]) {\n  let a = args[0];\n  const b = [];\n\n  for (let c = 1, len = args.length; c < len; c += 1) {\n    b.push(args[c]);\n  }\n\n  b.forEach(d => {\n    a = a.replace(/%[a-z]/, d);\n  });\n\n  return a;\n}\n\n/**\n * Create an error file out of errors.md for development and a simple web link to the full errors\n * in production mode.\n */\nexport default function throwStyledComponentsError(\n  code: string | number,\n  ...interpolations: any[]\n) {\n  if (process.env.NODE_ENV === 'production') {\n    return new Error(\n      `An error occurred. See https://github.com/styled-components/styled-components/blob/main/packages/styled-components/src/utils/errors.md#${code} for more information.${\n        interpolations.length > 0 ? ` Args: ${interpolations.join(', ')}` : ''\n      }`\n    );\n  } else {\n    return new Error(format(ERRORS[code], ...interpolations).trim());\n  }\n}\n","import { SPLITTER } from '../constants';\nimport styledError from '../utils/error';\nimport { GroupedTag, Tag } from './types';\n\n/** Create a GroupedTag with an underlying Tag implementation */\nexport const makeGroupedTag = (tag: Tag) => {\n  return new DefaultGroupedTag(tag);\n};\n\nconst BASE_SIZE = 1 << 9;\n\nconst DefaultGroupedTag = class DefaultGroupedTag implements GroupedTag {\n  groupSizes: Uint32Array;\n  length: number;\n  tag: Tag;\n\n  constructor(tag: Tag) {\n    this.groupSizes = new Uint32Array(BASE_SIZE);\n    this.length = BASE_SIZE;\n    this.tag = tag;\n  }\n\n  indexOfGroup(group: number) {\n    let index = 0;\n    for (let i = 0; i < group; i++) {\n      index += this.groupSizes[i];\n    }\n\n    return index;\n  }\n\n  insertRules(group: number, rules: string[]) {\n    if (group >= this.groupSizes.length) {\n      const oldBuffer = this.groupSizes;\n      const oldSize = oldBuffer.length;\n\n      let newSize = oldSize;\n      while (group >= newSize) {\n        newSize <<= 1;\n        if (newSize < 0) {\n          throw styledError(16, `${group}`);\n        }\n      }\n\n      this.groupSizes = new Uint32Array(newSize);\n      this.groupSizes.set(oldBuffer);\n      this.length = newSize;\n\n      for (let i = oldSize; i < newSize; i++) {\n        this.groupSizes[i] = 0;\n      }\n    }\n\n    let ruleIndex = this.indexOfGroup(group + 1);\n\n    for (let i = 0, l = rules.length; i < l; i++) {\n      if (this.tag.insertRule(ruleIndex, rules[i])) {\n        this.groupSizes[group]++;\n        ruleIndex++;\n      }\n    }\n  }\n\n  clearGroup(group: number) {\n    if (group < this.length) {\n      const length = this.groupSizes[group];\n      const startIndex = this.indexOfGroup(group);\n      const endIndex = startIndex + length;\n\n      this.groupSizes[group] = 0;\n\n      for (let i = startIndex; i < endIndex; i++) {\n        this.tag.deleteRule(startIndex);\n      }\n    }\n  }\n\n  getGroup(group: number) {\n    let css = '';\n    if (group >= this.length || this.groupSizes[group] === 0) {\n      return css;\n    }\n\n    const length = this.groupSizes[group];\n    const startIndex = this.indexOfGroup(group);\n    const endIndex = startIndex + length;\n\n    for (let i = startIndex; i < endIndex; i++) {\n      css += `${this.tag.getRule(i)}${SPLITTER}`;\n    }\n\n    return css;\n  }\n};\n","import styledError from '../utils/error';\n\nconst MAX_SMI = 1 << (31 - 1);\n\nlet groupIDRegister: Map<string, number> = new Map();\nlet reverseRegister: Map<number, string> = new Map();\nlet nextFreeGroup = 1;\n\nexport const resetGroupIds = () => {\n  groupIDRegister = new Map();\n  reverseRegister = new Map();\n  nextFreeGroup = 1;\n};\n\nexport const getGroupForId = (id: string): number => {\n  if (groupIDRegister.has(id)) {\n    return groupIDRegister.get(id) as any;\n  }\n\n  while (reverseRegister.has(nextFreeGroup)) {\n    nextFreeGroup++;\n  }\n\n  const group = nextFreeGroup++;\n\n  if (process.env.NODE_ENV !== 'production' && ((group | 0) < 0 || group > MAX_SMI)) {\n    throw styledError(16, `${group}`);\n  }\n\n  groupIDRegister.set(id, group);\n  reverseRegister.set(group, id);\n  return group;\n};\n\nexport const getIdForGroup = (group: number): void | string => {\n  return reverseRegister.get(group);\n};\n\nexport const setGroupForId = (id: string, group: number) => {\n  // move pointer\n  nextFreeGroup = group + 1;\n\n  groupIDRegister.set(id, group);\n  reverseRegister.set(group, id);\n};\n","import { SC_ATTR, SC_ATTR_ACTIVE, SC_ATTR_VERSION, SC_VERSION, SPLITTER } from '../constants';\nimport { getIdForGroup, setGroupForId } from './GroupIDAllocator';\nimport { Sheet } from './types';\n\nconst SELECTOR = `style[${SC_ATTR}][${SC_ATTR_VERSION}=\"${SC_VERSION}\"]`;\nconst MARKER_RE = new RegExp(`^${SC_ATTR}\\\\.g(\\\\d+)\\\\[id=\"([\\\\w\\\\d-]+)\"\\\\].*?\"([^\"]*)`);\n\nexport const outputSheet = (sheet: Sheet) => {\n  const tag = sheet.getTag();\n  const { length } = tag;\n\n  let css = '';\n  for (let group = 0; group < length; group++) {\n    const id = getIdForGroup(group);\n    if (id === undefined) continue;\n\n    const names = sheet.names.get(id);\n    const rules = tag.getGroup(group);\n    if (names === undefined || rules.length === 0) continue;\n\n    const selector = `${SC_ATTR}.g${group}[id=\"${id}\"]`;\n\n    let content = '';\n    if (names !== undefined) {\n      names.forEach(name => {\n        if (name.length > 0) {\n          content += `${name},`;\n        }\n      });\n    }\n\n    // NOTE: It's easier to collect rules and have the marker\n    // after the actual rules to simplify the rehydration\n    css += `${rules}${selector}{content:\"${content}\"}${SPLITTER}`;\n  }\n\n  return css;\n};\n\nconst rehydrateNamesFromContent = (sheet: Sheet, id: string, content: string) => {\n  const names = content.split(',');\n  let name;\n\n  for (let i = 0, l = names.length; i < l; i++) {\n    if ((name = names[i])) {\n      sheet.registerName(id, name);\n    }\n  }\n};\n\nconst rehydrateSheetFromTag = (sheet: Sheet, style: HTMLStyleElement) => {\n  const parts = (style.textContent ?? '').split(SPLITTER);\n  const rules: string[] = [];\n\n  for (let i = 0, l = parts.length; i < l; i++) {\n    const part = parts[i].trim();\n    if (!part) continue;\n\n    const marker = part.match(MARKER_RE);\n\n    if (marker) {\n      const group = parseInt(marker[1], 10) | 0;\n      const id = marker[2];\n\n      if (group !== 0) {\n        // Rehydrate componentId to group index mapping\n        setGroupForId(id, group);\n        // Rehydrate names and rules\n        // looks like: data-styled.g11[id=\"idA\"]{content:\"nameA,\"}\n        rehydrateNamesFromContent(sheet, id, marker[3]);\n        sheet.getTag().insertRules(group, rules);\n      }\n\n      rules.length = 0;\n    } else {\n      rules.push(part);\n    }\n  }\n};\n\nexport const rehydrateSheet = (sheet: Sheet) => {\n  const nodes = document.querySelectorAll(SELECTOR);\n\n  for (let i = 0, l = nodes.length; i < l; i++) {\n    const node = nodes[i] as any as HTMLStyleElement;\n    if (node && node.getAttribute(SC_ATTR) !== SC_ATTR_ACTIVE) {\n      rehydrateSheetFromTag(sheet, node);\n\n      if (node.parentNode) {\n        node.parentNode.removeChild(node);\n      }\n    }\n  }\n};\n","declare let __webpack_nonce__: string;\n\nexport default function getNonce() {\n  return typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;\n}\n","import { SC_ATTR, SC_ATTR_ACTIVE, SC_ATTR_VERSION, SC_VERSION } from '../constants';\nimport styledError from '../utils/error';\nimport getNonce from '../utils/nonce';\n\n/** Find last style element if any inside target */\nconst findLastStyleTag = (target: HTMLElement): void | HTMLStyleElement => {\n  const arr = Array.from(target.querySelectorAll<HTMLStyleElement>(`style[${SC_ATTR}]`));\n\n  return arr[arr.length - 1];\n};\n\n/** Create a style element inside `target` or <head> after the last */\nexport const makeStyleTag = (target?: HTMLElement | undefined): HTMLStyleElement => {\n  const head = document.head;\n  const parent = target || head;\n  const style = document.createElement('style');\n  const prevStyle = findLastStyleTag(parent);\n  const nextSibling = prevStyle !== undefined ? prevStyle.nextSibling : null;\n\n  style.setAttribute(SC_ATTR, SC_ATTR_ACTIVE);\n  style.setAttribute(SC_ATTR_VERSION, SC_VERSION);\n\n  const nonce = getNonce();\n\n  if (nonce) style.setAttribute('nonce', nonce);\n\n  parent.insertBefore(style, nextSibling);\n\n  return style;\n};\n\n/** Get the CSSStyleSheet instance for a given style element */\nexport const getSheet = (tag: HTMLStyleElement): CSSStyleSheet => {\n  if (tag.sheet) {\n    return tag.sheet as any as CSSStyleSheet;\n  }\n\n  // Avoid Firefox quirk where the style element might not have a sheet property\n  const { styleSheets } = document;\n  for (let i = 0, l = styleSheets.length; i < l; i++) {\n    const sheet = styleSheets[i];\n    if (sheet.ownerNode === tag) {\n      return sheet as any as CSSStyleSheet;\n    }\n  }\n\n  throw styledError(17);\n};\n","import { getSheet, makeStyleTag } from './dom';\nimport { SheetOptions, Tag } from './types';\n\n/** Create a CSSStyleSheet-like tag depending on the environment */\nexport const makeTag = ({ isServer, useCSSOMInjection, target }: SheetOptions) => {\n  if (isServer) {\n    return new VirtualTag(target);\n  } else if (useCSSOMInjection) {\n    return new CSSOMTag(target);\n  } else {\n    return new TextTag(target);\n  }\n};\n\nexport const CSSOMTag = class CSSOMTag implements Tag {\n  element: HTMLStyleElement;\n\n  sheet: CSSStyleSheet;\n\n  length: number;\n\n  constructor(target?: HTMLElement | undefined) {\n    this.element = makeStyleTag(target);\n\n    // Avoid Edge bug where empty style elements don't create sheets\n    this.element.appendChild(document.createTextNode(''));\n\n    this.sheet = getSheet(this.element);\n    this.length = 0;\n  }\n\n  insertRule(index: number, rule: string): boolean {\n    try {\n      this.sheet.insertRule(rule, index);\n      this.length++;\n      return true;\n    } catch (_error) {\n      return false;\n    }\n  }\n\n  deleteRule(index: number): void {\n    this.sheet.deleteRule(index);\n    this.length--;\n  }\n\n  getRule(index: number): string {\n    const rule = this.sheet.cssRules[index];\n\n    // Avoid IE11 quirk where cssText is inaccessible on some invalid rules\n    if (rule && rule.cssText) {\n      return rule.cssText;\n    } else {\n      return '';\n    }\n  }\n};\n\n/** A Tag that emulates the CSSStyleSheet API but uses text nodes */\nexport const TextTag = class TextTag implements Tag {\n  element: HTMLStyleElement;\n  nodes: NodeListOf<Node>;\n  length: number;\n\n  constructor(target?: HTMLElement | undefined) {\n    this.element = makeStyleTag(target);\n    this.nodes = this.element.childNodes;\n    this.length = 0;\n  }\n\n  insertRule(index: number, rule: string) {\n    if (index <= this.length && index >= 0) {\n      const node = document.createTextNode(rule);\n      const refNode = this.nodes[index];\n      this.element.insertBefore(node, refNode || null);\n      this.length++;\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  deleteRule(index: number) {\n    this.element.removeChild(this.nodes[index]);\n    this.length--;\n  }\n\n  getRule(index: number) {\n    if (index < this.length) {\n      return this.nodes[index].textContent as string;\n    } else {\n      return '';\n    }\n  }\n};\n\n/** A completely virtual (server-side) Tag that doesn't manipulate the DOM */\nexport const VirtualTag = class VirtualTag implements Tag {\n  rules: string[];\n\n  length: number;\n\n  constructor(_target?: HTMLElement | undefined) {\n    this.rules = [];\n    this.length = 0;\n  }\n\n  insertRule(index: number, rule: string) {\n    if (index <= this.length) {\n      this.rules.splice(index, 0, rule);\n      this.length++;\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  deleteRule(index: number) {\n    this.rules.splice(index, 1);\n    this.length--;\n  }\n\n  getRule(index: number) {\n    if (index < this.length) {\n      return this.rules[index];\n    } else {\n      return '';\n    }\n  }\n};\n","import { DISABLE_SPEEDY, IS_BROWSER } from '../constants';\nimport { EMPTY_OBJECT } from '../utils/empties';\nimport { setToString } from '../utils/setToString';\nimport { makeGroupedTag } from './GroupedTag';\nimport { getGroupForId } from './GroupIDAllocator';\nimport { outputSheet, rehydrateSheet } from './Rehydration';\nimport { makeTag } from './Tag';\nimport { GroupedTag, Sheet, SheetOptions } from './types';\n\nlet SHOULD_REHYDRATE = IS_BROWSER;\n\ntype SheetConstructorArgs = {\n  isServer?: boolean;\n  useCSSOMInjection?: boolean;\n  target?: HTMLElement | undefined;\n};\n\ntype GlobalStylesAllocationMap = {\n  [key: string]: number;\n};\ntype NamesAllocationMap = Map<string, Set<string>>;\n\nconst defaultOptions: SheetOptions = {\n  isServer: !IS_BROWSER,\n  useCSSOMInjection: !DISABLE_SPEEDY,\n};\n\n/** Contains the main stylesheet logic for stringification and caching */\nexport default class StyleSheet implements Sheet {\n  gs: GlobalStylesAllocationMap;\n  names: NamesAllocationMap;\n  options: SheetOptions;\n  server: boolean;\n  tag?: GroupedTag | undefined;\n\n  /** Register a group ID to give it an index */\n  static registerId(id: string): number {\n    return getGroupForId(id);\n  }\n\n  constructor(\n    options: SheetConstructorArgs = EMPTY_OBJECT as Object,\n    globalStyles: GlobalStylesAllocationMap = {},\n    names?: NamesAllocationMap | undefined\n  ) {\n    this.options = {\n      ...defaultOptions,\n      ...options,\n    };\n\n    this.gs = globalStyles;\n    this.names = new Map(names as NamesAllocationMap);\n    this.server = !!options.isServer;\n\n    // We rehydrate only once and use the sheet that is created first\n    if (!this.server && IS_BROWSER && SHOULD_REHYDRATE) {\n      SHOULD_REHYDRATE = false;\n      rehydrateSheet(this);\n    }\n\n    setToString(this, () => outputSheet(this));\n  }\n\n  reconstructWithOptions(options: SheetConstructorArgs, withNames = true) {\n    return new StyleSheet(\n      { ...this.options, ...options },\n      this.gs,\n      (withNames && this.names) || undefined\n    );\n  }\n\n  allocateGSInstance(id: string) {\n    return (this.gs[id] = (this.gs[id] || 0) + 1);\n  }\n\n  /** Lazily initialises a GroupedTag for when it's actually needed */\n  getTag() {\n    return this.tag || (this.tag = makeGroupedTag(makeTag(this.options)));\n  }\n\n  /** Check whether a name is known for caching */\n  hasNameForId(id: string, name: string): boolean {\n    return this.names.has(id) && (this.names.get(id) as any).has(name);\n  }\n\n  /** Mark a group's name as known for caching */\n  registerName(id: string, name: string) {\n    getGroupForId(id);\n\n    if (!this.names.has(id)) {\n      const groupNames = new Set<string>();\n      groupNames.add(name);\n      this.names.set(id, groupNames);\n    } else {\n      (this.names.get(id) as any).add(name);\n    }\n  }\n\n  /** Insert new rules which also marks the name as known */\n  insertRules(id: string, name: string, rules: string | string[]) {\n    this.registerName(id, name);\n    this.getTag().insertRules(getGroupForId(id), rules);\n  }\n\n  /** Clears all cached names for a given group ID */\n  clearNames(id: string) {\n    if (this.names.has(id)) {\n      (this.names.get(id) as any).clear();\n    }\n  }\n\n  /** Clears all rules for a given group ID */\n  clearRules(id: string) {\n    this.getTag().clearGroup(getGroupForId(id));\n    this.clearNames(id);\n  }\n\n  /** Clears the entire tag which deletes all rules but not its names */\n  clearTag() {\n    // NOTE: This does not clear the names, since it's only used during SSR\n    // so that we can continuously output only new rules\n    this.tag = undefined;\n  }\n}\n","import * as stylis from 'stylis';\nimport { Stringifier } from '../types';\nimport { EMPTY_ARRAY, EMPTY_OBJECT } from './empties';\nimport throwStyledError from './error';\nimport { SEED, phash } from './hash';\n\nconst AMP_REGEX = /&/g;\nconst COMMENT_REGEX = /^\\s*\\/\\/.*$/gm;\n\nexport type ICreateStylisInstance = {\n  options?: { namespace?: string | undefined; prefix?: boolean | undefined } | undefined;\n  plugins?: stylis.Middleware[] | undefined;\n};\n\n/**\n * Takes an element and recurses through it's rules added the namespace to the start of each selector.\n * Takes into account media queries by recursing through child rules if they are present.\n */\nfunction recursivelySetNamepace(compiled: stylis.Element[], namespace: String): stylis.Element[] {\n  return compiled.map(rule => {\n    if (rule.type === 'rule') {\n      // add the namespace to the start\n      rule.value = `${namespace} ${rule.value}`;\n      // add the namespace after each comma for subsequent selectors.\n      rule.value = rule.value.replaceAll(',', `,${namespace} `);\n      rule.props = (rule.props as string[]).map(prop => {\n        return `${namespace} ${prop}`;\n      });\n    }\n\n    if (Array.isArray(rule.children) && rule.type !== '@keyframes') {\n      rule.children = recursivelySetNamepace(rule.children, namespace);\n    }\n    return rule;\n  });\n}\n\nexport default function createStylisInstance(\n  {\n    options = EMPTY_OBJECT as object,\n    plugins = EMPTY_ARRAY as unknown as stylis.Middleware[],\n  }: ICreateStylisInstance = EMPTY_OBJECT as object\n) {\n  let _componentId: string;\n  let _selector: string;\n  let _selectorRegexp: RegExp;\n\n  const selfReferenceReplacer = (match: string, offset: number, string: string) => {\n    if (\n      /**\n       * We only want to refer to the static class directly if the selector is part of a\n       * self-reference selector `& + & { color: red; }`\n       */\n      string.startsWith(_selector) &&\n      string.endsWith(_selector) &&\n      string.replaceAll(_selector, '').length > 0\n    ) {\n      return `.${_componentId}`;\n    }\n\n    return match;\n  };\n\n  /**\n   * When writing a style like\n   *\n   * & + & {\n   *   color: red;\n   * }\n   *\n   * The second ampersand should be a reference to the static component class. stylis\n   * has no knowledge of static class so we have to intelligently replace the base selector.\n   *\n   * https://github.com/thysultan/stylis.js/tree/v4.0.2#abstract-syntax-structure\n   */\n  const selfReferenceReplacementPlugin: stylis.Middleware = element => {\n    if (element.type === stylis.RULESET && element.value.includes('&')) {\n      (element.props as string[])[0] = element.props[0]\n        // catch any hanging references that stylis missed\n        .replace(AMP_REGEX, _selector)\n        .replace(_selectorRegexp, selfReferenceReplacer);\n    }\n  };\n\n  const middlewares = plugins.slice();\n\n  middlewares.push(selfReferenceReplacementPlugin);\n\n  /**\n   * Enables automatic vendor-prefixing for styles.\n   */\n  if (options.prefix) {\n    middlewares.push(stylis.prefixer);\n  }\n\n  middlewares.push(stylis.stringify);\n\n  const stringifyRules: Stringifier = (\n    css: string,\n    selector = '',\n    /**\n     * This \"prefix\" referes to a _selector_ prefix.\n     */\n    prefix = '',\n    componentId = '&'\n  ) => {\n    // stylis has no concept of state to be passed to plugins\n    // but since JS is single-threaded, we can rely on that to ensure\n    // these properties stay in sync with the current stylis run\n    _componentId = componentId;\n    _selector = selector;\n    _selectorRegexp = new RegExp(`\\\\${_selector}\\\\b`, 'g');\n\n    const flatCSS = css.replace(COMMENT_REGEX, '');\n    let compiled = stylis.compile(\n      prefix || selector ? `${prefix} ${selector} { ${flatCSS} }` : flatCSS\n    );\n\n    if (options.namespace) {\n      compiled = recursivelySetNamepace(compiled, options.namespace);\n    }\n\n    const stack: string[] = [];\n\n    stylis.serialize(\n      compiled,\n      stylis.middleware(middlewares.concat(stylis.rulesheet(value => stack.push(value))))\n    );\n\n    return stack;\n  };\n\n  stringifyRules.hash = plugins.length\n    ? plugins\n        .reduce((acc, plugin) => {\n          if (!plugin.name) {\n            throwStyledError(15);\n          }\n\n          return phash(acc, plugin.name);\n        }, SEED)\n        .toString()\n    : '';\n\n  return stringifyRules;\n}\n","import React, { useContext, useEffect, useMemo, useState } from 'react';\nimport shallowequal from 'shallowequal';\nimport type stylis from 'stylis';\nimport StyleSheet from '../sheet';\nimport { ShouldForwardProp, Stringifier } from '../types';\nimport createStylisInstance from '../utils/stylis';\n\nexport const mainSheet: StyleSheet = new StyleSheet();\nexport const mainStylis: Stringifier = createStylisInstance();\n\nexport type IStyleSheetContext = {\n  shouldForwardProp?: ShouldForwardProp<'web'> | undefined;\n  styleSheet: StyleSheet;\n  stylis: Stringifier;\n};\n\nexport const StyleSheetContext = React.createContext<IStyleSheetContext>({\n  shouldForwardProp: undefined,\n  styleSheet: mainSheet,\n  stylis: mainStylis,\n});\n\nexport const StyleSheetConsumer = StyleSheetContext.Consumer;\n\nexport type IStylisContext = Stringifier | void;\nexport const StylisContext = React.createContext<IStylisContext>(undefined);\nexport const StylisConsumer = StylisContext.Consumer;\n\nexport function useStyleSheetContext() {\n  return useContext(StyleSheetContext);\n}\n\nexport type IStyleSheetManager = React.PropsWithChildren<{\n  /**\n   * If desired, you can pass this prop to disable \"speedy\" insertion mode, which\n   * uses the browser [CSSOM APIs](https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet).\n   * When disabled, rules are inserted as simple text into style blocks.\n   */\n  disableCSSOMInjection?: undefined | boolean;\n  /**\n   * If you are working exclusively with modern browsers, vendor prefixes can often be omitted\n   * to reduce the weight of CSS on the page.\n   */\n  enableVendorPrefixes?: undefined | boolean;\n  /**\n   * Provide an optional selector to be prepended to all generated style rules.\n   */\n  namespace?: undefined | string;\n  /**\n   * Create and provide your own `StyleSheet` if necessary for advanced SSR scenarios.\n   */\n  sheet?: undefined | StyleSheet;\n  /**\n   * Starting in v6, styled-components no longer does its own prop validation\n   * and recommends use of transient props \"$prop\" to pass style-only props to\n   * components. If for some reason you are not able to use transient props, a\n   * prop validation function can be provided via `StyleSheetManager`, such as\n   * `@emotion/is-prop-valid`.\n   *\n   * When the return value is `true`, props will be forwarded to the DOM/underlying\n   * component. If return value is `false`, the prop will be discarded after styles\n   * are calculated.\n   *\n   * Manually composing `styled.{element}.withConfig({shouldForwardProp})` will\n   * override this default.\n   */\n  shouldForwardProp?: undefined | IStyleSheetContext['shouldForwardProp'];\n  /**\n   * An array of plugins to be run by stylis (style processor) during compilation.\n   * Check out [what's available on npm*](https://www.npmjs.com/search?q=keywords%3Astylis).\n   *\n   * \\* The plugin(s) must be compatible with stylis v4 or above.\n   */\n  stylisPlugins?: undefined | stylis.Middleware[];\n  /**\n   * Provide an alternate DOM node to host generated styles; useful for iframes.\n   */\n  target?: undefined | HTMLElement;\n}>;\n\nexport function StyleSheetManager(props: IStyleSheetManager): JSX.Element {\n  const [plugins, setPlugins] = useState(props.stylisPlugins);\n  const { styleSheet } = useStyleSheetContext();\n\n  const resolvedStyleSheet = useMemo(() => {\n    let sheet = styleSheet;\n\n    if (props.sheet) {\n      sheet = props.sheet;\n    } else if (props.target) {\n      sheet = sheet.reconstructWithOptions({ target: props.target }, false);\n    }\n\n    if (props.disableCSSOMInjection) {\n      sheet = sheet.reconstructWithOptions({ useCSSOMInjection: false });\n    }\n\n    return sheet;\n  }, [props.disableCSSOMInjection, props.sheet, props.target, styleSheet]);\n\n  const stylis = useMemo(\n    () =>\n      createStylisInstance({\n        options: { namespace: props.namespace, prefix: props.enableVendorPrefixes },\n        plugins,\n      }),\n    [props.enableVendorPrefixes, props.namespace, plugins]\n  );\n\n  useEffect(() => {\n    if (!shallowequal(plugins, props.stylisPlugins)) setPlugins(props.stylisPlugins);\n  }, [props.stylisPlugins]);\n\n  const styleSheetContextValue = useMemo(\n    () => ({\n      shouldForwardProp: props.shouldForwardProp,\n      styleSheet: resolvedStyleSheet,\n      stylis,\n    }),\n    [props.shouldForwardProp, resolvedStyleSheet, stylis]\n  );\n\n  return (\n    <StyleSheetContext.Provider value={styleSheetContextValue}>\n      <StylisContext.Provider value={stylis}>{props.children}</StylisContext.Provider>\n    </StyleSheetContext.Provider>\n  );\n}\n","import StyleSheet from '../sheet';\nimport { Keyframes as KeyframesType, Stringifier } from '../types';\nimport styledError from '../utils/error';\nimport { setToString } from '../utils/setToString';\nimport { mainStylis } from './StyleSheetManager';\n\nexport default class Keyframes implements KeyframesType {\n  id: string;\n  name: string;\n  rules: string;\n\n  constructor(name: string, rules: string) {\n    this.name = name;\n    this.id = `sc-keyframes-${name}`;\n    this.rules = rules;\n\n    setToString(this, () => {\n      throw styledError(12, String(this.name));\n    });\n  }\n\n  inject = (styleSheet: StyleSheet, stylisInstance: Stringifier = mainStylis): void => {\n    const resolvedName = this.name + stylisInstance.hash;\n\n    if (!styleSheet.hasNameForId(this.id, resolvedName)) {\n      styleSheet.insertRules(\n        this.id,\n        resolvedName,\n        stylisInstance(this.rules, resolvedName, '@keyframes')\n      );\n    }\n  };\n\n  getName(stylisInstance: Stringifier = mainStylis): string {\n    return this.name + stylisInstance.hash;\n  }\n}\n","const isUpper = (c: string) => c >= 'A' && c <= 'Z';\n\n/**\n * Hyphenates a camelcased CSS property name, for example:\n *\n *   > hyphenateStyleName('backgroundColor')\n *   < \"background-color\"\n *   > hyphenateStyleName('MozTransition')\n *   < \"-moz-transition\"\n *   > hyphenateStyleName('msTransition')\n *   < \"-ms-transition\"\n *\n * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix\n * is converted to `-ms-`.\n */\nexport default function hyphenateStyleName(string: string): string {\n  let output = '';\n\n  for (let i = 0; i < string.length; i++) {\n    const c = string[i];\n    // Check for CSS variable prefix\n    if (i === 1 && c === '-' && string[0] === '-') {\n      return string;\n    }\n\n    if (isUpper(c)) {\n      output += '-' + c.toLowerCase();\n    } else {\n      output += c;\n    }\n  }\n\n  return output.startsWith('ms-') ? '-' + output : output;\n}\n","import Keyframes from '../models/Keyframes';\nimport StyleSheet from '../sheet';\nimport {\n  AnyComponent,\n  Dict,\n  ExecutionContext,\n  Interpolation,\n  IStyledComponent,\n  RuleSet,\n  Stringifier,\n  StyledObject,\n} from '../types';\nimport addUnitIfNeeded from './addUnitIfNeeded';\nimport { EMPTY_ARRAY } from './empties';\nimport getComponentName from './getComponentName';\nimport hyphenate from './hyphenateStyleName';\nimport isFunction from './isFunction';\nimport isPlainObject from './isPlainObject';\nimport isStatelessFunction from './isStatelessFunction';\nimport isStyledComponent from './isStyledComponent';\n\n/**\n * It's falsish not falsy because 0 is allowed.\n */\nconst isFalsish = (chunk: any): chunk is undefined | null | false | '' =>\n  chunk === undefined || chunk === null || chunk === false || chunk === '';\n\nexport const objToCssArray = (obj: Dict<any>): string[] => {\n  const rules = [];\n\n  for (const key in obj) {\n    const val = obj[key];\n    if (!obj.hasOwnProperty(key) || isFalsish(val)) continue;\n\n    // @ts-expect-error Property 'isCss' does not exist on type 'any[]'\n    if ((Array.isArray(val) && val.isCss) || isFunction(val)) {\n      rules.push(`${hyphenate(key)}:`, val, ';');\n    } else if (isPlainObject(val)) {\n      rules.push(`${key} {`, ...objToCssArray(val), '}');\n    } else {\n      rules.push(`${hyphenate(key)}: ${addUnitIfNeeded(key, val)};`);\n    }\n  }\n\n  return rules;\n};\n\nexport default function flatten<Props extends object>(\n  chunk: Interpolation<object>,\n  executionContext?: (ExecutionContext & Props) | undefined,\n  styleSheet?: StyleSheet | undefined,\n  stylisInstance?: Stringifier | undefined\n): RuleSet<Props> {\n  if (isFalsish(chunk)) {\n    return [];\n  }\n\n  /* Handle other components */\n  if (isStyledComponent(chunk)) {\n    return [`.${(chunk as unknown as IStyledComponent<'web', any>).styledComponentId}`];\n  }\n\n  /* Either execute or defer the function */\n  if (isFunction(chunk)) {\n    if (isStatelessFunction(chunk) && executionContext) {\n      const result = chunk(executionContext);\n\n      if (\n        process.env.NODE_ENV !== 'production' &&\n        typeof result === 'object' &&\n        !Array.isArray(result) &&\n        !(result instanceof Keyframes) &&\n        !isPlainObject(result) &&\n        result !== null\n      ) {\n        console.error(\n          `${getComponentName(\n            chunk as AnyComponent\n          )} is not a styled component and cannot be referred to via component selector. See https://www.styled-components.com/docs/advanced#referring-to-other-components for more details.`\n        );\n      }\n\n      return flatten<Props>(result, executionContext, styleSheet, stylisInstance);\n    } else {\n      return [chunk as unknown as IStyledComponent<'web'>];\n    }\n  }\n\n  if (chunk instanceof Keyframes) {\n    if (styleSheet) {\n      chunk.inject(styleSheet, stylisInstance);\n      return [chunk.getName(stylisInstance)];\n    } else {\n      return [chunk];\n    }\n  }\n\n  /* Handle objects */\n  if (isPlainObject(chunk)) {\n    return objToCssArray(chunk as StyledObject<Props>);\n  }\n\n  if (!Array.isArray(chunk)) {\n    return [chunk.toString()];\n  }\n\n  return flatMap(chunk, chunklet =>\n    flatten<Props>(chunklet, executionContext, styleSheet, stylisInstance)\n  );\n}\n\nfunction flatMap<T, U>(array: T[], transform: (value: T, index: number, array: T[]) => U[]): U[] {\n  return Array.prototype.concat.apply(EMPTY_ARRAY, array.map(transform));\n}\n","import unitless from '@emotion/unitless';\n\n// Taken from https://github.com/facebook/react/blob/b87aabdfe1b7461e7331abb3601d9e6bb27544bc/packages/react-dom/src/shared/dangerousStyleValue.js\nexport default function addUnitIfNeeded(name: string, value: any) {\n  // https://github.com/amilajack/eslint-plugin-flowtype-errors/issues/133\n  if (value == null || typeof value === 'boolean' || value === '') {\n    return '';\n  }\n\n  if (typeof value === 'number' && value !== 0 && !(name in unitless) && !name.startsWith('--')) {\n    return `${value}px`; // Presumes implicit 'px' suffix for unitless numbers except for CSS variables\n  }\n\n  return String(value).trim();\n}\n","import isFunction from './isFunction';\n\nexport default function isStatelessFunction(test: any): test is Function {\n  return isFunction(test) && !(test.prototype && test.prototype.isReactComponent);\n}\n","import { RuleSet } from '../types';\nimport isFunction from './isFunction';\nimport isStyledComponent from './isStyledComponent';\n\nexport default function isStaticRules<Props extends object>(rules: RuleSet<Props>) {\n  for (let i = 0; i < rules.length; i += 1) {\n    const rule = rules[i];\n\n    if (isFunction(rule) && !isStyledComponent(rule)) {\n      // functions are allowed to be static if they're just being\n      // used to get the classname of a nested styled component\n      return false;\n    }\n  }\n\n  return true;\n}\n","import { SC_VERSION } from '../constants';\nimport StyleSheet from '../sheet';\nimport { ExecutionContext, RuleSet, Stringifier } from '../types';\nimport flatten from '../utils/flatten';\nimport generateName from '../utils/generateAlphabeticName';\nimport { hash, phash } from '../utils/hash';\nimport isStaticRules from '../utils/isStaticRules';\nimport { joinStringArray, joinStrings } from '../utils/joinStrings';\n\nconst SEED = hash(SC_VERSION);\n\n/**\n * ComponentStyle is all the CSS-specific stuff, not the React-specific stuff.\n */\nexport default class ComponentStyle {\n  baseHash: number;\n  baseStyle: ComponentStyle | null | undefined;\n  componentId: string;\n  isStatic: boolean;\n  rules: RuleSet<any>;\n  staticRulesId: string;\n\n  constructor(rules: RuleSet<any>, componentId: string, baseStyle?: ComponentStyle | undefined) {\n    this.rules = rules;\n    this.staticRulesId = '';\n    this.isStatic =\n      process.env.NODE_ENV === 'production' &&\n      (baseStyle === undefined || baseStyle.isStatic) &&\n      isStaticRules(rules);\n    this.componentId = componentId;\n    this.baseHash = phash(SEED, componentId);\n    this.baseStyle = baseStyle;\n\n    // NOTE: This registers the componentId, which ensures a consistent order\n    // for this component's styles compared to others\n    StyleSheet.registerId(componentId);\n  }\n\n  generateAndInjectStyles(\n    executionContext: ExecutionContext,\n    styleSheet: StyleSheet,\n    stylis: Stringifier\n  ): string {\n    let names = this.baseStyle\n      ? this.baseStyle.generateAndInjectStyles(executionContext, styleSheet, stylis)\n      : '';\n\n    // force dynamic classnames if user-supplied stylis plugins are in use\n    if (this.isStatic && !stylis.hash) {\n      if (this.staticRulesId && styleSheet.hasNameForId(this.componentId, this.staticRulesId)) {\n        names = joinStrings(names, this.staticRulesId);\n      } else {\n        const cssStatic = joinStringArray(\n          flatten(this.rules, executionContext, styleSheet, stylis) as string[]\n        );\n        const name = generateName(phash(this.baseHash, cssStatic) >>> 0);\n\n        if (!styleSheet.hasNameForId(this.componentId, name)) {\n          const cssStaticFormatted = stylis(cssStatic, `.${name}`, undefined, this.componentId);\n          styleSheet.insertRules(this.componentId, name, cssStaticFormatted);\n        }\n\n        names = joinStrings(names, name);\n        this.staticRulesId = name;\n      }\n    } else {\n      let dynamicHash = phash(this.baseHash, stylis.hash);\n      let css = '';\n\n      for (let i = 0; i < this.rules.length; i++) {\n        const partRule = this.rules[i];\n\n        if (typeof partRule === 'string') {\n          css += partRule;\n\n          if (process.env.NODE_ENV !== 'production') dynamicHash = phash(dynamicHash, partRule);\n        } else if (partRule) {\n          const partString = joinStringArray(\n            flatten(partRule, executionContext, styleSheet, stylis) as string[]\n          );\n          // The same value can switch positions in the array, so we include \"i\" in the hash.\n          dynamicHash = phash(dynamicHash, partString + i);\n          css += partString;\n        }\n      }\n\n      if (css) {\n        const name = generateName(dynamicHash >>> 0);\n\n        if (!styleSheet.hasNameForId(this.componentId, name)) {\n          styleSheet.insertRules(\n            this.componentId,\n            name,\n            stylis(css, `.${name}`, undefined, this.componentId)\n          );\n        }\n\n        names = joinStrings(names, name);\n      }\n    }\n\n    return names;\n  }\n}\n","import React, { useContext, useMemo } from 'react';\nimport styledError from '../utils/error';\nimport isFunction from '../utils/isFunction';\n\n/**\n * Override DefaultTheme to get accurate typings for your project.\n *\n * ```\n * // create styled-components.d.ts in your project source\n * // if it isn't being picked up, check tsconfig compilerOptions.types\n * import type { CSSProp } from \"styled-components\";\n * import Theme from './theme';\n *\n * type ThemeType = typeof Theme;\n *\n * declare module \"styled-components\" {\n *  export interface DefaultTheme extends ThemeType {}\n * }\n *\n * declare module \"react\" {\n *  interface DOMAttributes<T> {\n *    css?: CSSProp;\n *  }\n * }\n * ```\n */\nexport interface DefaultTheme {\n  [key: string]: any;\n}\n\ntype ThemeFn = (outerTheme?: DefaultTheme | undefined) => DefaultTheme;\ntype ThemeArgument = DefaultTheme | ThemeFn;\n\ntype Props = {\n  children?: React.ReactNode;\n  theme: ThemeArgument;\n};\n\nexport const ThemeContext = React.createContext<DefaultTheme | undefined>(undefined);\n\nexport const ThemeConsumer = ThemeContext.Consumer;\n\nfunction mergeTheme(theme: ThemeArgument, outerTheme?: DefaultTheme | undefined): DefaultTheme {\n  if (!theme) {\n    throw styledError(14);\n  }\n\n  if (isFunction(theme)) {\n    const themeFn = theme as ThemeFn;\n    const mergedTheme = themeFn(outerTheme);\n\n    if (\n      process.env.NODE_ENV !== 'production' &&\n      (mergedTheme === null || Array.isArray(mergedTheme) || typeof mergedTheme !== 'object')\n    ) {\n      throw styledError(7);\n    }\n\n    return mergedTheme;\n  }\n\n  if (Array.isArray(theme) || typeof theme !== 'object') {\n    throw styledError(8);\n  }\n\n  return outerTheme ? { ...outerTheme, ...theme } : theme;\n}\n\n/**\n * Returns the current theme (as provided by the closest ancestor `ThemeProvider`.)\n *\n * If no `ThemeProvider` is found, the function will error. If you need access to the theme in an\n * uncertain composition scenario, `React.useContext(ThemeContext)` will not emit an error if there\n * is no `ThemeProvider` ancestor.\n */\nexport function useTheme(): DefaultTheme {\n  const theme = useContext(ThemeContext);\n\n  if (!theme) {\n    throw styledError(18);\n  }\n\n  return theme;\n}\n\n/**\n * Provide a theme to an entire react component tree via context\n */\nexport default function ThemeProvider(props: Props): JSX.Element | null {\n  const outerTheme = React.useContext(ThemeContext);\n  const themeContext = useMemo(\n    () => mergeTheme(props.theme, outerTheme),\n    [props.theme, outerTheme]\n  );\n\n  if (!props.children) {\n    return null;\n  }\n\n  return <ThemeContext.Provider value={themeContext}>{props.children}</ThemeContext.Provider>;\n}\n","import isPropValid from '@emotion/is-prop-valid';\nimport React, { createElement, Ref, useDebugValue } from 'react';\nimport { SC_VERSION } from '../constants';\nimport type {\n  AnyComponent,\n  Attrs,\n  BaseObject,\n  Dict,\n  ExecutionContext,\n  ExecutionProps,\n  IStyledComponent,\n  IStyledComponentFactory,\n  IStyledStatics,\n  OmitNever,\n  RuleSet,\n  StyledOptions,\n  WebTarget,\n} from '../types';\nimport { checkDynamicCreation } from '../utils/checkDynamicCreation';\nimport createWarnTooManyClasses from '../utils/createWarnTooManyClasses';\nimport determineTheme from '../utils/determineTheme';\nimport domElements from '../utils/domElements';\nimport { EMPTY_ARRAY, EMPTY_OBJECT } from '../utils/empties';\nimport escape from '../utils/escape';\nimport generateComponentId from '../utils/generateComponentId';\nimport generateDisplayName from '../utils/generateDisplayName';\nimport hoist from '../utils/hoist';\nimport isFunction from '../utils/isFunction';\nimport isStyledComponent from '../utils/isStyledComponent';\nimport isTag from '../utils/isTag';\nimport { joinStrings } from '../utils/joinStrings';\nimport merge from '../utils/mixinDeep';\nimport { setToString } from '../utils/setToString';\nimport ComponentStyle from './ComponentStyle';\nimport { useStyleSheetContext } from './StyleSheetManager';\nimport { DefaultTheme, ThemeContext } from './ThemeProvider';\n\nconst identifiers: { [key: string]: number } = {};\n\n/* We depend on components having unique IDs */\nfunction generateId(\n  displayName?: string | undefined,\n  parentComponentId?: string | undefined\n): string {\n  const name = typeof displayName !== 'string' ? 'sc' : escape(displayName);\n  // Ensure that no displayName can lead to duplicate componentIds\n  identifiers[name] = (identifiers[name] || 0) + 1;\n\n  const componentId = `${name}-${generateComponentId(\n    // SC_VERSION gives us isolation between multiple runtimes on the page at once\n    // this is improved further with use of the babel plugin \"namespace\" feature\n    SC_VERSION + name + identifiers[name]\n  )}`;\n\n  return parentComponentId ? `${parentComponentId}-${componentId}` : componentId;\n}\n\nfunction useInjectedStyle<T extends ExecutionContext>(\n  componentStyle: ComponentStyle,\n  resolvedAttrs: T\n) {\n  const ssc = useStyleSheetContext();\n\n  const className = componentStyle.generateAndInjectStyles(\n    resolvedAttrs,\n    ssc.styleSheet,\n    ssc.stylis\n  );\n\n  if (process.env.NODE_ENV !== 'production') useDebugValue(className);\n\n  return className;\n}\n\nfunction resolveContext<Props extends object>(\n  attrs: Attrs<React.HTMLAttributes<Element> & Props>[],\n  props: React.HTMLAttributes<Element> & ExecutionProps & Props,\n  theme: DefaultTheme\n) {\n  const context: React.HTMLAttributes<Element> &\n    ExecutionContext &\n    Props & { [key: string]: any; class?: string; ref?: React.Ref<any> } = {\n    ...props,\n    // unset, add `props.className` back at the end so props always \"wins\"\n    className: undefined,\n    theme,\n  };\n  let attrDef;\n\n  for (let i = 0; i < attrs.length; i += 1) {\n    attrDef = attrs[i];\n    const resolvedAttrDef = isFunction(attrDef) ? attrDef(context) : attrDef;\n\n    for (const key in resolvedAttrDef) {\n      context[key as keyof typeof context] =\n        key === 'className'\n          ? joinStrings(context[key] as string | undefined, resolvedAttrDef[key] as string)\n          : key === 'style'\n            ? { ...context[key], ...resolvedAttrDef[key] }\n            : resolvedAttrDef[key as keyof typeof resolvedAttrDef];\n    }\n  }\n\n  if (props.className) {\n    context.className = joinStrings(context.className, props.className);\n  }\n\n  return context;\n}\n\nlet seenUnknownProps = new Set();\n\nfunction useStyledComponentImpl<Props extends object>(\n  forwardedComponent: IStyledComponent<'web', Props>,\n  props: ExecutionProps & Props,\n  forwardedRef: Ref<Element>\n) {\n  const {\n    attrs: componentAttrs,\n    componentStyle,\n    defaultProps,\n    foldedComponentIds,\n    styledComponentId,\n    target,\n  } = forwardedComponent;\n\n  const contextTheme = React.useContext(ThemeContext);\n  const ssc = useStyleSheetContext();\n  const shouldForwardProp = forwardedComponent.shouldForwardProp || ssc.shouldForwardProp;\n\n  if (process.env.NODE_ENV !== 'production') useDebugValue(styledComponentId);\n\n  // NOTE: the non-hooks version only subscribes to this when !componentStyle.isStatic,\n  // but that'd be against the rules-of-hooks. We could be naughty and do it anyway as it\n  // should be an immutable value, but behave for now.\n  const theme = determineTheme(props, contextTheme, defaultProps) || EMPTY_OBJECT;\n\n  const context = resolveContext<Props>(componentAttrs, props, theme);\n  const elementToBeCreated: WebTarget = context.as || target;\n  const propsForElement: Dict<any> = {};\n\n  for (const key in context) {\n    if (context[key] === undefined) {\n      // Omit undefined values from props passed to wrapped element.\n      // This enables using .attrs() to remove props, for example.\n    } else if (key[0] === '$' || key === 'as' || (key === 'theme' && context.theme === theme)) {\n      // Omit transient props and execution props.\n    } else if (key === 'forwardedAs') {\n      propsForElement.as = context.forwardedAs;\n    } else if (!shouldForwardProp || shouldForwardProp(key, elementToBeCreated)) {\n      propsForElement[key] = context[key];\n\n      if (\n        !shouldForwardProp &&\n        process.env.NODE_ENV === 'development' &&\n        !isPropValid(key) &&\n        !seenUnknownProps.has(key) &&\n        // Only warn on DOM Element.\n        domElements.has(elementToBeCreated as any)\n      ) {\n        seenUnknownProps.add(key);\n        console.warn(\n          `styled-components: it looks like an unknown prop \"${key}\" is being sent through to the DOM, which will likely trigger a React console error. If you would like automatic filtering of unknown props, you can opt-into that behavior via \\`<StyleSheetManager shouldForwardProp={...}>\\` (connect an API like \\`@emotion/is-prop-valid\\`) or consider using transient props (\\`$\\` prefix for automatic filtering.)`\n        );\n      }\n    }\n  }\n\n  const generatedClassName = useInjectedStyle(componentStyle, context);\n\n  if (process.env.NODE_ENV !== 'production' && forwardedComponent.warnTooManyClasses) {\n    forwardedComponent.warnTooManyClasses(generatedClassName);\n  }\n\n  let classString = joinStrings(foldedComponentIds, styledComponentId);\n  if (generatedClassName) {\n    classString += ' ' + generatedClassName;\n  }\n  if (context.className) {\n    classString += ' ' + context.className;\n  }\n\n  propsForElement[\n    // handle custom elements which React doesn't properly alias\n    isTag(elementToBeCreated) &&\n    !domElements.has(elementToBeCreated as Extract<typeof domElements, string>)\n      ? 'class'\n      : 'className'\n  ] = classString;\n\n  propsForElement.ref = forwardedRef;\n\n  return createElement(elementToBeCreated, propsForElement);\n}\n\nfunction createStyledComponent<\n  Target extends WebTarget,\n  OuterProps extends object,\n  Statics extends object = BaseObject,\n>(\n  target: Target,\n  options: StyledOptions<'web', OuterProps>,\n  rules: RuleSet<OuterProps>\n): ReturnType<IStyledComponentFactory<'web', Target, OuterProps, Statics>> {\n  const isTargetStyledComp = isStyledComponent(target);\n  const styledComponentTarget = target as IStyledComponent<'web', OuterProps>;\n  const isCompositeComponent = !isTag(target);\n\n  const {\n    attrs = EMPTY_ARRAY,\n    componentId = generateId(options.displayName, options.parentComponentId),\n    displayName = generateDisplayName(target),\n  } = options;\n\n  const styledComponentId =\n    options.displayName && options.componentId\n      ? `${escape(options.displayName)}-${options.componentId}`\n      : options.componentId || componentId;\n\n  // fold the underlying StyledComponent attrs up (implicit extend)\n  const finalAttrs =\n    isTargetStyledComp && styledComponentTarget.attrs\n      ? styledComponentTarget.attrs.concat(attrs as unknown as Attrs<OuterProps>[]).filter(Boolean)\n      : (attrs as Attrs<OuterProps>[]);\n\n  let { shouldForwardProp } = options;\n\n  if (isTargetStyledComp && styledComponentTarget.shouldForwardProp) {\n    const shouldForwardPropFn = styledComponentTarget.shouldForwardProp;\n\n    if (options.shouldForwardProp) {\n      const passedShouldForwardPropFn = options.shouldForwardProp;\n\n      // compose nested shouldForwardProp calls\n      shouldForwardProp = (prop, elementToBeCreated) =>\n        shouldForwardPropFn(prop, elementToBeCreated) &&\n        passedShouldForwardPropFn(prop, elementToBeCreated);\n    } else {\n      shouldForwardProp = shouldForwardPropFn;\n    }\n  }\n\n  const componentStyle = new ComponentStyle(\n    rules,\n    styledComponentId,\n    isTargetStyledComp ? (styledComponentTarget.componentStyle as ComponentStyle) : undefined\n  );\n\n  function forwardRefRender(props: ExecutionProps & OuterProps, ref: Ref<Element>) {\n    return useStyledComponentImpl<OuterProps>(WrappedStyledComponent, props, ref);\n  }\n\n  forwardRefRender.displayName = displayName;\n\n  /**\n   * forwardRef creates a new interim component, which we'll take advantage of\n   * instead of extending ParentComponent to create _another_ interim class\n   */\n  let WrappedStyledComponent = React.forwardRef(forwardRefRender) as unknown as IStyledComponent<\n    'web',\n    any\n  > &\n    Statics;\n  WrappedStyledComponent.attrs = finalAttrs;\n  WrappedStyledComponent.componentStyle = componentStyle;\n  WrappedStyledComponent.displayName = displayName;\n  WrappedStyledComponent.shouldForwardProp = shouldForwardProp;\n\n  // this static is used to preserve the cascade of static classes for component selector\n  // purposes; this is especially important with usage of the css prop\n  WrappedStyledComponent.foldedComponentIds = isTargetStyledComp\n    ? joinStrings(styledComponentTarget.foldedComponentIds, styledComponentTarget.styledComponentId)\n    : '';\n\n  WrappedStyledComponent.styledComponentId = styledComponentId;\n\n  // fold the underlying StyledComponent target up since we folded the styles\n  WrappedStyledComponent.target = isTargetStyledComp ? styledComponentTarget.target : target;\n\n  Object.defineProperty(WrappedStyledComponent, 'defaultProps', {\n    get() {\n      return this._foldedDefaultProps;\n    },\n\n    set(obj) {\n      this._foldedDefaultProps = isTargetStyledComp\n        ? merge({}, styledComponentTarget.defaultProps, obj)\n        : obj;\n    },\n  });\n\n  if (process.env.NODE_ENV !== 'production') {\n    checkDynamicCreation(displayName, styledComponentId);\n\n    WrappedStyledComponent.warnTooManyClasses = createWarnTooManyClasses(\n      displayName,\n      styledComponentId\n    );\n  }\n\n  setToString(WrappedStyledComponent, () => `.${WrappedStyledComponent.styledComponentId}`);\n\n  if (isCompositeComponent) {\n    const compositeComponentTarget = target as AnyComponent;\n\n    hoist<typeof WrappedStyledComponent, typeof compositeComponentTarget>(\n      WrappedStyledComponent,\n      compositeComponentTarget,\n      {\n        // all SC-specific things should not be hoisted\n        attrs: true,\n        componentStyle: true,\n        displayName: true,\n        foldedComponentIds: true,\n        shouldForwardProp: true,\n        styledComponentId: true,\n        target: true,\n      } as { [key in keyof OmitNever<IStyledStatics<'web', OuterProps>>]: true }\n    );\n  }\n\n  return WrappedStyledComponent;\n}\n\nexport default createStyledComponent;\n","import { StyledTarget } from '../types';\nimport getComponentName from './getComponentName';\nimport isTag from './isTag';\n\nexport default function generateDisplayName(target: StyledTarget<any>) {\n  return isTag(target) ? `styled.${target}` : `Styled(${getComponentName(target)})`;\n}\n","import { Interpolation } from '../types';\n\nexport default function interleave<Props extends object>(\n  strings: readonly string[],\n  interpolations: Interpolation<Props>[]\n): Interpolation<Props>[] {\n  const result: Interpolation<Props>[] = [strings[0]];\n\n  for (let i = 0, len = interpolations.length; i < len; i += 1) {\n    result.push(interpolations[i], strings[i + 1]);\n  }\n\n  return result;\n}\n","import {\n  BaseObject,\n  Interpolation,\n  NoInfer,\n  RuleSet,\n  StyledObject,\n  StyleFunction,\n  Styles,\n} from '../types';\nimport { EMPTY_ARRAY } from '../utils/empties';\nimport flatten from '../utils/flatten';\nimport interleave from '../utils/interleave';\nimport isFunction from '../utils/isFunction';\nimport isPlainObject from '../utils/isPlainObject';\n\n/**\n * Used when flattening object styles to determine if we should\n * expand an array of styles.\n */\nconst addTag = <T extends RuleSet<any>>(arg: T): T & { isCss: true } =>\n  Object.assign(arg, { isCss: true } as const);\n\nfunction css(styles: Styles<object>, ...interpolations: Interpolation<object>[]): RuleSet<object>;\nfunction css<Props extends object>(\n  styles: Styles<NoInfer<Props>>,\n  ...interpolations: Interpolation<NoInfer<Props>>[]\n): RuleSet<NoInfer<Props>>;\nfunction css<Props extends object = BaseObject>(\n  styles: Styles<NoInfer<Props>>,\n  ...interpolations: Interpolation<NoInfer<Props>>[]\n): RuleSet<NoInfer<Props>> {\n  if (isFunction(styles) || isPlainObject(styles)) {\n    const styleFunctionOrObject = styles as StyleFunction<Props> | StyledObject<Props>;\n\n    return addTag(\n      flatten<Props>(\n        interleave<Props>(EMPTY_ARRAY, [\n          styleFunctionOrObject,\n          ...interpolations,\n        ]) as Interpolation<object>\n      )\n    );\n  }\n\n  const styleStringArray = styles as TemplateStringsArray;\n\n  if (\n    interpolations.length === 0 &&\n    styleStringArray.length === 1 &&\n    typeof styleStringArray[0] === 'string'\n  ) {\n    return flatten<Props>(styleStringArray);\n  }\n\n  return addTag(\n    flatten<Props>(interleave<Props>(styleStringArray, interpolations) as Interpolation<object>)\n  );\n}\n\nexport default css;\n","import {\n  Attrs,\n  BaseObject,\n  ExecutionProps,\n  Interpolation,\n  IStyledComponent,\n  IStyledComponentFactory,\n  KnownTarget,\n  NoInfer,\n  Runtime,\n  StyledOptions,\n  StyledTarget,\n  Styles,\n  Substitute,\n} from '../types';\nimport { EMPTY_OBJECT } from '../utils/empties';\nimport styledError from '../utils/error';\nimport css from './css';\n\ntype AttrsResult<T extends Attrs<any>> = T extends (...args: any) => infer P\n  ? P extends object\n    ? P\n    : never\n  : T extends object\n    ? T\n    : never;\n\n/**\n * Based on Attrs being a simple object or function that returns\n * a prop object, inspect the attrs result and attempt to extract\n * any \"as\" prop usage to modify the runtime target.\n */\ntype AttrsTarget<\n  R extends Runtime,\n  T extends Attrs<any>,\n  FallbackTarget extends StyledTarget<R>,\n  Result extends ExecutionProps = AttrsResult<T>,\n> = Result extends { as: infer RuntimeTarget }\n  ? RuntimeTarget extends KnownTarget\n    ? RuntimeTarget\n    : FallbackTarget\n  : FallbackTarget;\n\nexport interface Styled<\n  R extends Runtime,\n  Target extends StyledTarget<R>,\n  OuterProps extends object,\n  OuterStatics extends object = BaseObject,\n> {\n  <Props extends object = BaseObject, Statics extends object = BaseObject>(\n    initialStyles: Styles<Substitute<OuterProps, NoInfer<Props>>>,\n    ...interpolations: Interpolation<Substitute<OuterProps, NoInfer<Props>>>[]\n  ): IStyledComponent<R, Substitute<OuterProps, Props>> &\n    OuterStatics &\n    Statics &\n    (R extends 'web'\n      ? Target extends string\n        ? {}\n        : Omit<Target, keyof React.Component<any>>\n      : {});\n\n  attrs: <\n    Props extends object = BaseObject,\n    PrivateMergedProps extends object = Substitute<OuterProps, Props>,\n    PrivateAttrsArg extends Attrs<PrivateMergedProps> = Attrs<PrivateMergedProps>,\n    PrivateResolvedTarget extends StyledTarget<R> = AttrsTarget<R, PrivateAttrsArg, Target>,\n  >(\n    attrs: PrivateAttrsArg\n  ) => Styled<\n    R,\n    PrivateResolvedTarget,\n    PrivateResolvedTarget extends KnownTarget\n      ? Substitute<\n          Substitute<OuterProps, React.ComponentPropsWithRef<PrivateResolvedTarget>>,\n          Props\n        >\n      : PrivateMergedProps,\n    OuterStatics\n  >;\n\n  withConfig: (config: StyledOptions<R, OuterProps>) => Styled<R, Target, OuterProps, OuterStatics>;\n}\n\nexport default function constructWithOptions<\n  R extends Runtime,\n  Target extends StyledTarget<R>,\n  OuterProps extends object = Target extends KnownTarget\n    ? React.ComponentPropsWithRef<Target>\n    : BaseObject,\n  OuterStatics extends object = BaseObject,\n>(\n  componentConstructor: IStyledComponentFactory<R, StyledTarget<R>, object, any>,\n  tag: StyledTarget<R>,\n  options: StyledOptions<R, OuterProps> = EMPTY_OBJECT\n): Styled<R, Target, OuterProps, OuterStatics> {\n  /**\n   * We trust that the tag is a valid component as long as it isn't\n   * falsish. Typically the tag here is a string or function (i.e.\n   * class or pure function component), however a component may also be\n   * an object if it uses another utility, e.g. React.memo. React will\n   * output an appropriate warning however if the `tag` isn't valid.\n   */\n  if (!tag) {\n    throw styledError(1, tag);\n  }\n\n  /* This is callable directly as a template function */\n  const templateFunction = <Props extends object = BaseObject, Statics extends object = BaseObject>(\n    initialStyles: Styles<Substitute<OuterProps, Props>>,\n    ...interpolations: Interpolation<Substitute<OuterProps, Props>>[]\n  ) =>\n    componentConstructor<Substitute<OuterProps, Props>, Statics>(\n      tag,\n      options as StyledOptions<R, Substitute<OuterProps, Props>>,\n      css<Substitute<OuterProps, Props>>(initialStyles, ...interpolations)\n    );\n\n  /**\n   * Attrs allows for accomplishing two goals:\n   *\n   * 1. Backfilling props at runtime more expressively than defaultProps\n   * 2. Amending the prop interface of a wrapped styled component\n   */\n  templateFunction.attrs = <\n    Props extends object = BaseObject,\n    PrivateMergedProps extends object = Substitute<OuterProps, Props>,\n    PrivateAttrsArg extends Attrs<PrivateMergedProps> = Attrs<PrivateMergedProps>,\n    PrivateResolvedTarget extends StyledTarget<R> = AttrsTarget<R, PrivateAttrsArg, Target>,\n  >(\n    attrs: PrivateAttrsArg\n  ) =>\n    constructWithOptions<\n      R,\n      PrivateResolvedTarget,\n      PrivateResolvedTarget extends KnownTarget\n        ? Substitute<\n            Substitute<OuterProps, React.ComponentPropsWithRef<PrivateResolvedTarget>>,\n            Props\n          >\n        : PrivateMergedProps,\n      OuterStatics\n    >(componentConstructor, tag, {\n      ...options,\n      attrs: Array.prototype.concat(options.attrs, attrs).filter(Boolean),\n    });\n\n  /**\n   * If config methods are called, wrap up a new template function\n   * and merge options.\n   */\n  templateFunction.withConfig = (config: StyledOptions<R, OuterProps>) =>\n    constructWithOptions<R, Target, OuterProps, OuterStatics>(componentConstructor, tag, {\n      ...options,\n      ...config,\n    });\n\n  return templateFunction;\n}\n","import { ComponentPropsWithRef } from 'react';\nimport createStyledComponent from '../models/StyledComponent';\nimport { BaseObject, KnownTarget, WebTarget } from '../types';\nimport domElements, { SupportedHTMLElements } from '../utils/domElements';\nimport constructWithOptions, { Styled as StyledInstance } from './constructWithOptions';\n\nconst baseStyled = <Target extends WebTarget, InjectedProps extends object = BaseObject>(\n  tag: Target\n) =>\n  constructWithOptions<\n    'web',\n    Target,\n    Target extends KnownTarget ? ComponentPropsWithRef<Target> & InjectedProps : InjectedProps\n  >(createStyledComponent, tag);\n\nconst styled = baseStyled as typeof baseStyled & {\n  [E in SupportedHTMLElements]: StyledInstance<'web', E, JSX.IntrinsicElements[E]>;\n};\n\n// Shorthands for all valid HTML Elements\ndomElements.forEach(domElement => {\n  // @ts-expect-error some react typing bs\n  styled[domElement] = baseStyled<typeof domElement>(domElement);\n});\n\nexport default styled;\nexport { StyledInstance };\n\n/**\n * This is the type of the `styled` HOC.\n */\nexport type Styled = typeof styled;\n\n/**\n * Use this higher-order type for scenarios where you are wrapping `styled`\n * and providing extra props as a third-party library.\n */\nexport type LibraryStyled<LibraryProps extends object = BaseObject> = <Target extends WebTarget>(\n  tag: Target\n) => typeof baseStyled<Target, LibraryProps>;\n","import StyleSheet from '../sheet';\nimport { ExecutionContext, RuleSet, Stringifier } from '../types';\nimport flatten from '../utils/flatten';\nimport isStaticRules from '../utils/isStaticRules';\nimport { joinStringArray } from '../utils/joinStrings';\n\nexport default class GlobalStyle<Props extends object> {\n  componentId: string;\n  isStatic: boolean;\n  rules: RuleSet<Props>;\n\n  constructor(rules: RuleSet<Props>, componentId: string) {\n    this.rules = rules;\n    this.componentId = componentId;\n    this.isStatic = isStaticRules(rules);\n\n    // pre-register the first instance to ensure global styles\n    // load before component ones\n    StyleSheet.registerId(this.componentId + 1);\n  }\n\n  createStyles(\n    instance: number,\n    executionContext: ExecutionContext & Props,\n    styleSheet: StyleSheet,\n    stylis: Stringifier\n  ): void {\n    const flatCSS = joinStringArray(\n      flatten(this.rules as RuleSet<object>, executionContext, styleSheet, stylis) as string[]\n    );\n    const css = stylis(flatCSS, '');\n    const id = this.componentId + instance;\n\n    // NOTE: We use the id as a name as well, since these rules never change\n    styleSheet.insertRules(id, id, css);\n  }\n\n  removeStyles(instance: number, styleSheet: StyleSheet): void {\n    styleSheet.clearRules(this.componentId + instance);\n  }\n\n  renderStyles(\n    instance: number,\n    executionContext: ExecutionContext & Props,\n    styleSheet: StyleSheet,\n    stylis: Stringifier\n  ): void {\n    if (instance > 2) StyleSheet.registerId(this.componentId + instance);\n\n    // NOTE: Remove old styles, then inject the new ones\n    this.removeStyles(instance, styleSheet);\n    this.createStyles(instance, executionContext, styleSheet, stylis);\n  }\n}\n","import Keyframes from '../models/Keyframes';\nimport { Interpolation, Styles } from '../types';\nimport generateComponentId from '../utils/generateComponentId';\nimport { joinStringArray } from '../utils/joinStrings';\nimport css from './css';\n\nexport default function keyframes<Props extends object = {}>(\n  strings: Styles<Props>,\n  ...interpolations: Array<Interpolation<Props>>\n): Keyframes {\n  /* Warning if you've used keyframes on React Native */\n  if (\n    process.env.NODE_ENV !== 'production' &&\n    typeof navigator !== 'undefined' &&\n    navigator.product === 'ReactNative'\n  ) {\n    console.warn(\n      '`keyframes` cannot be used on ReactNative, only on the web. To do animation in ReactNative please use Animated.'\n    );\n  }\n\n  const rules = joinStringArray(css<Props>(strings, ...interpolations) as string[]);\n  const name = generateComponentId(rules);\n  return new Keyframes(name, rules);\n}\n","import React from 'react';\nimport type * as streamInternal from 'stream';\nimport { Readable } from 'stream';\nimport { IS_BROWSER, SC_ATTR, SC_ATTR_VERSION, SC_VERSION } from '../constants';\nimport StyleSheet from '../sheet';\nimport styledError from '../utils/error';\nimport { joinStringArray } from '../utils/joinStrings';\nimport getNonce from '../utils/nonce';\nimport { StyleSheetManager } from './StyleSheetManager';\n\ndeclare const __SERVER__: boolean;\n\nconst CLOSING_TAG_R = /^\\s*<\\/[a-z]/i;\n\nexport default class ServerStyleSheet {\n  instance: StyleSheet;\n  sealed: boolean;\n\n  constructor() {\n    this.instance = new StyleSheet({ isServer: true });\n    this.sealed = false;\n  }\n\n  _emitSheetCSS = (): string => {\n    const css = this.instance.toString();\n    const nonce = getNonce();\n    const attrs = [\n      nonce && `nonce=\"${nonce}\"`,\n      `${SC_ATTR}=\"true\"`,\n      `${SC_ATTR_VERSION}=\"${SC_VERSION}\"`,\n    ];\n    const htmlAttr = joinStringArray(attrs.filter(Boolean) as string[], ' ');\n\n    return `<style ${htmlAttr}>${css}</style>`;\n  };\n\n  collectStyles(children: any): JSX.Element {\n    if (this.sealed) {\n      throw styledError(2);\n    }\n\n    return <StyleSheetManager sheet={this.instance}>{children}</StyleSheetManager>;\n  }\n\n  getStyleTags = (): string => {\n    if (this.sealed) {\n      throw styledError(2);\n    }\n\n    return this._emitSheetCSS();\n  };\n\n  getStyleElement = () => {\n    if (this.sealed) {\n      throw styledError(2);\n    }\n\n    const props = {\n      [SC_ATTR]: '',\n      [SC_ATTR_VERSION]: SC_VERSION,\n      dangerouslySetInnerHTML: {\n        __html: this.instance.toString(),\n      },\n    };\n\n    const nonce = getNonce();\n    if (nonce) {\n      (props as any).nonce = nonce;\n    }\n\n    // v4 returned an array for this fn, so we'll do the same for v5 for backward compat\n    return [<style {...props} key=\"sc-0-0\" />];\n  };\n\n  // @ts-expect-error alternate return types are not possible due to code transformation\n  interleaveWithNodeStream(input: Readable): streamInternal.Transform {\n    if (!__SERVER__ || IS_BROWSER) {\n      throw styledError(3);\n    } else if (this.sealed) {\n      throw styledError(2);\n    }\n\n    if (__SERVER__) {\n      this.seal();\n\n      const { Transform } = require('stream');\n\n      const readableStream: Readable = input;\n      const { instance: sheet, _emitSheetCSS } = this;\n\n      const transformer: streamInternal.Transform = new Transform({\n        transform: function appendStyleChunks(\n          chunk: string,\n          /* encoding */\n          _: string,\n          callback: Function\n        ) {\n          // Get the chunk and retrieve the sheet's CSS as an HTML chunk,\n          // then reset its rules so we get only new ones for the next chunk\n          const renderedHtml = chunk.toString();\n          const html = _emitSheetCSS();\n\n          sheet.clearTag();\n\n          // prepend style html to chunk, unless the start of the chunk is a\n          // closing tag in which case append right after that\n          if (CLOSING_TAG_R.test(renderedHtml)) {\n            const endOfClosingTag = renderedHtml.indexOf('>') + 1;\n            const before = renderedHtml.slice(0, endOfClosingTag);\n            const after = renderedHtml.slice(endOfClosingTag);\n\n            this.push(before + html + after);\n          } else {\n            this.push(html + renderedHtml);\n          }\n\n          callback();\n        },\n      });\n\n      readableStream.on('error', err => {\n        // forward the error to the transform stream\n        transformer.emit('error', err);\n      });\n\n      return readableStream.pipe(transformer);\n    }\n  }\n\n  seal = (): void => {\n    this.sealed = true;\n  };\n}\n","/* Import singletons */\nimport { SC_ATTR, SC_VERSION } from './constants';\nimport createGlobalStyle from './constructors/createGlobalStyle';\nimport css from './constructors/css';\nimport keyframes from './constructors/keyframes';\n/* Import Higher Order Components */\nimport withTheme from './hoc/withTheme';\n/* Import hooks */\nimport ServerStyleSheet from './models/ServerStyleSheet';\nimport {\n  IStyleSheetContext,\n  IStyleSheetManager,\n  IStylisContext,\n  StyleSheetConsumer,\n  StyleSheetContext,\n  StyleSheetManager,\n} from './models/StyleSheetManager';\n/* Import components */\nimport ThemeProvider, { ThemeConsumer, ThemeContext, useTheme } from './models/ThemeProvider';\nimport isStyledComponent from './utils/isStyledComponent';\n\n/* Warning if you've imported this file on React Native */\nif (\n  process.env.NODE_ENV !== 'production' &&\n  typeof navigator !== 'undefined' &&\n  navigator.product === 'ReactNative'\n) {\n  console.warn(\n    `It looks like you've imported 'styled-components' on React Native.\\nPerhaps you're looking to import 'styled-components/native'?\\nRead more about this at https://www.styled-components.com/docs/basics#react-native`\n  );\n}\n\nconst windowGlobalKey = `__sc-${SC_ATTR}__`;\n\n/* Warning if there are several instances of styled-components */\nif (\n  process.env.NODE_ENV !== 'production' &&\n  process.env.NODE_ENV !== 'test' &&\n  typeof window !== 'undefined'\n) {\n  // @ts-expect-error dynamic key not in window object\n  window[windowGlobalKey] ||= 0;\n\n  // @ts-expect-error dynamic key not in window object\n  if (window[windowGlobalKey] === 1) {\n    console.warn(\n      `It looks like there are several instances of 'styled-components' initialized in this application. This may cause dynamic styles to not render properly, errors during the rehydration process, a missing theme prop, and makes your application bigger without good reason.\\n\\nSee https://s-c.sh/2BAXzed for more info.`\n    );\n  }\n\n  // @ts-expect-error dynamic key not in window object\n  window[windowGlobalKey] += 1;\n}\n\n/* Export everything */\nexport * from './secretInternals';\nexport { Attrs, DefaultTheme, ShouldForwardProp } from './types';\nexport {\n  IStyleSheetContext,\n  IStyleSheetManager,\n  IStylisContext,\n  ServerStyleSheet,\n  StyleSheetConsumer,\n  StyleSheetContext,\n  StyleSheetManager,\n  ThemeConsumer,\n  ThemeContext,\n  ThemeProvider,\n  createGlobalStyle,\n  css,\n  isStyledComponent,\n  keyframes,\n  useTheme,\n  SC_VERSION as version,\n  withTheme,\n};\n","// src/components/Navbar/Navbar.styles.ts\nimport styled from 'styled-components';\n\n\nexport const NavbarContainer = styled.nav`\n  width: 100%;\n  background-color: #333;\n  padding: 27px 30px; /* Adjust padding to maintain overall height */\n  position: fixed;\n  top: 0;\n  left: 0;\n  border-bottom: 3px solid black; \n  box-shadow: inset 0 -3px 0 0 orange;\n  z-index: 1000;\n`;\n\nexport const NavLink = styled.a`\n  color: #fff;\n  text-decoration: none;\n  font-size: 16px;\n  margin: 0 15px;\n  transition: color 0.3s ease;\n  display: inline-block; /* Inline-block to avoid flexbox */\n\n  &:hover {\n    color: orange;\n  }\n`;\n","// src/components/Navbar/Navbar.tsx\nimport React from 'react';\nimport { NavbarContainer, NavLink } from './Navbar.styles';\n\nconst Navbar: React.FC = () => {\n  return (\n    <NavbarContainer>\n      <NavLink href=\"/\">Home</NavLink>\n      <NavLink href=\"/tasks\">Tasks</NavLink>\n    </NavbarContainer>\n  );\n};\n\nexport default Navbar;\n","// src/pages/HomePage/HomePage.styles.ts\nimport styled from 'styled-components';\nimport heroImage from '../../assets/heroimages/hero_image_2.webp';\n\nexport const HomePageContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  background-image: url(${heroImage});\n  background-size: cover;\n  background-position: center;\n  width: 100%;\n  height: 100vh;\n  margin-top: 40px; /* Add top margin to move the page down */\n`;\n\nexport const MainContent = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: flex-start; /* Align items to the top */\n  width: 100%;\n  height: 80%;\n  box-sizing: border-box;\n  padding: 20px;\n`;\n\nexport const SideSection = styled.div`\n  width: 15%;\n  height: 75%;\n  background-color: rgba(255, 255, 255, 1); /* Light background for readability */\n  padding: 20px;\n  border-radius: 8px;\n  border: 2px solid black;\n  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n  margin-top: 90px; /* Move the section up */\n`;\n\nexport const Button = styled.button`\n  padding: 16px 32px;\n  margin: 0 20px;\n  background-color: orange;\n  border: 2px solid black;\n  border-radius: 5px;\n  cursor: pointer;\n  font-size: 18px;\n  color: black;\n  transition: background-color 0.3s ease, transform 0.2s ease;\n\n  &:hover {\n    background-color: #e08e0b;\n    transform: translateY(-2px);\n  }\n`;\n\nexport const ButtonContainer = styled.div`\n  width: 100%;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 0 20px;\n`;\n\nexport const Title = styled.h1`\n  font-size: 2.5rem;\n  color: #fff; /* Change text color to white for better contrast */\n  margin-bottom: 20px;\n  @media (max-width: 768px) {\n    font-size: 2rem;\n  }\n`;\n\nexport const SectionTitle = styled.h2`\n  font-size: 1.8rem;\n  color: #333;\n  margin-bottom: 10px;\n  @media (max-width: 768px) {\n    font-size: 1.5rem;\n  }\n`;\n\nexport const SectionContent = styled.p`\n  font-size: 1rem;\n  color: black;\n  text-align: left;\n  @media (max-width: 768px) {\n    font-size: 0.9rem;\n  }\n`;\n\nexport const Footer = styled.div`\n  width: 100%;\n  position: absolute;\n  bottom: 20px;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 0 20px;\n  @media (max-width: 768px) {\n    bottom: 10px;\n    padding-right: 10px;\n  }\n`;\n","// src/pages/HomePage/HomePage.tsx\nimport React from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport Navbar from '../../components/Navbar/Navbar';\nimport { HomePageContainer, MainContent, SideSection, Button, SectionTitle, SectionContent, Footer, ButtonContainer } from './HomePage.styles';\n\nconst HomePage: React.FC = () => {\n  const navigate = useNavigate();\n\n  return (\n    <HomePageContainer>\n      <Navbar />\n      <MainContent>\n        <SideSection>\n          <SectionTitle>Generative AI for Everyone</SectionTitle>\n          <SectionContent>\n            This application demonstrates the power of Generative Artificial Intelligence (AI) as described in the article. It allows users to specify desired outcomes through detailed prompts instead of traditional commands, making AI accessible to non-developers.\n          </SectionContent>\n        </SideSection>\n        <SideSection>\n          <SectionTitle>The Card Model and Workflows</SectionTitle>\n          <SectionContent>\n            Utilizing the structured framework known as the &quot;Card Model,&quot; this application helps define and organize generative AI tasks. This approach outlines the structure, components, and relationships involved in generating content, providing a clear understanding of prompt engineering.\n          </SectionContent>\n        </SideSection>\n      </MainContent>\n      <Footer>\n        <ButtonContainer>\n          <Button onClick={() => window.open('https://techcommunity.microsoft.com/t5/educator-developer-blog/exploring-generative-ai-a-hands-on-course-on-prompt-engineering/ba-p/4148577', '_blank')}>\n            Read More\n          </Button>\n          <Button onClick={() => navigate('/tasks')}>\n            Get Started\n          </Button>\n        </ButtonContainer>\n      </Footer>\n    </HomePageContainer>\n  );\n};\n\nexport default HomePage;\n","'use strict';\n\nexport default function bind(fn, thisArg) {\n  return function wrap() {\n    return fn.apply(thisArg, arguments);\n  };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\n\nconst kindOf = (cache => thing => {\n    const str = toString.call(thing);\n    return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n  type = type.toLowerCase();\n  return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n  return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n    && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n  let result;\n  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n    result = ArrayBuffer.isView(val);\n  } else {\n    result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n  }\n  return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n  if (kindOf(val) !== 'object') {\n    return false;\n  }\n\n  const prototype = getPrototypeOf(val);\n  return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n  let kind;\n  return thing && (\n    (typeof FormData === 'function' && thing instanceof FormData) || (\n      isFunction(thing.append) && (\n        (kind = kindOf(thing)) === 'formdata' ||\n        // detect form-data instance\n        (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n      )\n    )\n  )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n  str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n  // Don't bother if no value provided\n  if (obj === null || typeof obj === 'undefined') {\n    return;\n  }\n\n  let i;\n  let l;\n\n  // Force an array if not already something iterable\n  if (typeof obj !== 'object') {\n    /*eslint no-param-reassign:0*/\n    obj = [obj];\n  }\n\n  if (isArray(obj)) {\n    // Iterate over array values\n    for (i = 0, l = obj.length; i < l; i++) {\n      fn.call(null, obj[i], i, obj);\n    }\n  } else {\n    // Iterate over object keys\n    const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n    const len = keys.length;\n    let key;\n\n    for (i = 0; i < len; i++) {\n      key = keys[i];\n      fn.call(null, obj[key], key, obj);\n    }\n  }\n}\n\nfunction findKey(obj, key) {\n  key = key.toLowerCase();\n  const keys = Object.keys(obj);\n  let i = keys.length;\n  let _key;\n  while (i-- > 0) {\n    _key = keys[i];\n    if (key === _key.toLowerCase()) {\n      return _key;\n    }\n  }\n  return null;\n}\n\nconst _global = (() => {\n  /*eslint no-undef:0*/\n  if (typeof globalThis !== \"undefined\") return globalThis;\n  return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n  const {caseless} = isContextDefined(this) && this || {};\n  const result = {};\n  const assignValue = (val, key) => {\n    const targetKey = caseless && findKey(result, key) || key;\n    if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n      result[targetKey] = merge(result[targetKey], val);\n    } else if (isPlainObject(val)) {\n      result[targetKey] = merge({}, val);\n    } else if (isArray(val)) {\n      result[targetKey] = val.slice();\n    } else {\n      result[targetKey] = val;\n    }\n  }\n\n  for (let i = 0, l = arguments.length; i < l; i++) {\n    arguments[i] && forEach(arguments[i], assignValue);\n  }\n  return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n  forEach(b, (val, key) => {\n    if (thisArg && isFunction(val)) {\n      a[key] = bind(val, thisArg);\n    } else {\n      a[key] = val;\n    }\n  }, {allOwnKeys});\n  return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n  if (content.charCodeAt(0) === 0xFEFF) {\n    content = content.slice(1);\n  }\n  return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n  constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n  constructor.prototype.constructor = constructor;\n  Object.defineProperty(constructor, 'super', {\n    value: superConstructor.prototype\n  });\n  props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n  let props;\n  let i;\n  let prop;\n  const merged = {};\n\n  destObj = destObj || {};\n  // eslint-disable-next-line no-eq-null,eqeqeq\n  if (sourceObj == null) return destObj;\n\n  do {\n    props = Object.getOwnPropertyNames(sourceObj);\n    i = props.length;\n    while (i-- > 0) {\n      prop = props[i];\n      if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n        destObj[prop] = sourceObj[prop];\n        merged[prop] = true;\n      }\n    }\n    sourceObj = filter !== false && getPrototypeOf(sourceObj);\n  } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n  return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n  str = String(str);\n  if (position === undefined || position > str.length) {\n    position = str.length;\n  }\n  position -= searchString.length;\n  const lastIndex = str.indexOf(searchString, position);\n  return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n  if (!thing) return null;\n  if (isArray(thing)) return thing;\n  let i = thing.length;\n  if (!isNumber(i)) return null;\n  const arr = new Array(i);\n  while (i-- > 0) {\n    arr[i] = thing[i];\n  }\n  return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n  // eslint-disable-next-line func-names\n  return thing => {\n    return TypedArray && thing instanceof TypedArray;\n  };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n  const generator = obj && obj[Symbol.iterator];\n\n  const iterator = generator.call(obj);\n\n  let result;\n\n  while ((result = iterator.next()) && !result.done) {\n    const pair = result.value;\n    fn.call(obj, pair[0], pair[1]);\n  }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n  let matches;\n  const arr = [];\n\n  while ((matches = regExp.exec(str)) !== null) {\n    arr.push(matches);\n  }\n\n  return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n  return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n    function replacer(m, p1, p2) {\n      return p1.toUpperCase() + p2;\n    }\n  );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n  const descriptors = Object.getOwnPropertyDescriptors(obj);\n  const reducedDescriptors = {};\n\n  forEach(descriptors, (descriptor, name) => {\n    let ret;\n    if ((ret = reducer(descriptor, name, obj)) !== false) {\n      reducedDescriptors[name] = ret || descriptor;\n    }\n  });\n\n  Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n  reduceDescriptors(obj, (descriptor, name) => {\n    // skip restricted props in strict mode\n    if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n      return false;\n    }\n\n    const value = obj[name];\n\n    if (!isFunction(value)) return;\n\n    descriptor.enumerable = false;\n\n    if ('writable' in descriptor) {\n      descriptor.writable = false;\n      return;\n    }\n\n    if (!descriptor.set) {\n      descriptor.set = () => {\n        throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n      };\n    }\n  });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n  const obj = {};\n\n  const define = (arr) => {\n    arr.forEach(value => {\n      obj[value] = true;\n    });\n  }\n\n  isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n  return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n  return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz'\n\nconst DIGIT = '0123456789';\n\nconst ALPHABET = {\n  DIGIT,\n  ALPHA,\n  ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT\n}\n\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n  let str = '';\n  const {length} = alphabet;\n  while (size--) {\n    str += alphabet[Math.random() * length|0]\n  }\n\n  return str;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n  return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\n\nconst toJSONObject = (obj) => {\n  const stack = new Array(10);\n\n  const visit = (source, i) => {\n\n    if (isObject(source)) {\n      if (stack.indexOf(source) >= 0) {\n        return;\n      }\n\n      if(!('toJSON' in source)) {\n        stack[i] = source;\n        const target = isArray(source) ? [] : {};\n\n        forEach(source, (value, key) => {\n          const reducedValue = visit(value, i + 1);\n          !isUndefined(reducedValue) && (target[key] = reducedValue);\n        });\n\n        stack[i] = undefined;\n\n        return target;\n      }\n    }\n\n    return source;\n  }\n\n  return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n  thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\nexport default {\n  isArray,\n  isArrayBuffer,\n  isBuffer,\n  isFormData,\n  isArrayBufferView,\n  isString,\n  isNumber,\n  isBoolean,\n  isObject,\n  isPlainObject,\n  isReadableStream,\n  isRequest,\n  isResponse,\n  isHeaders,\n  isUndefined,\n  isDate,\n  isFile,\n  isBlob,\n  isRegExp,\n  isFunction,\n  isStream,\n  isURLSearchParams,\n  isTypedArray,\n  isFileList,\n  forEach,\n  merge,\n  extend,\n  trim,\n  stripBOM,\n  inherits,\n  toFlatObject,\n  kindOf,\n  kindOfTest,\n  endsWith,\n  toArray,\n  forEachEntry,\n  matchAll,\n  isHTMLForm,\n  hasOwnProperty,\n  hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n  reduceDescriptors,\n  freezeMethods,\n  toObjectSet,\n  toCamelCase,\n  noop,\n  toFiniteNumber,\n  findKey,\n  global: _global,\n  isContextDefined,\n  ALPHABET,\n  generateString,\n  isSpecCompliantForm,\n  toJSONObject,\n  isAsyncFn,\n  isThenable\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n  Error.call(this);\n\n  if (Error.captureStackTrace) {\n    Error.captureStackTrace(this, this.constructor);\n  } else {\n    this.stack = (new Error()).stack;\n  }\n\n  this.message = message;\n  this.name = 'AxiosError';\n  code && (this.code = code);\n  config && (this.config = config);\n  request && (this.request = request);\n  response && (this.response = response);\n}\n\nutils.inherits(AxiosError, Error, {\n  toJSON: function toJSON() {\n    return {\n      // Standard\n      message: this.message,\n      name: this.name,\n      // Microsoft\n      description: this.description,\n      number: this.number,\n      // Mozilla\n      fileName: this.fileName,\n      lineNumber: this.lineNumber,\n      columnNumber: this.columnNumber,\n      stack: this.stack,\n      // Axios\n      config: utils.toJSONObject(this.config),\n      code: this.code,\n      status: this.response && this.response.status ? this.response.status : null\n    };\n  }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n  'ERR_BAD_OPTION_VALUE',\n  'ERR_BAD_OPTION',\n  'ECONNABORTED',\n  'ETIMEDOUT',\n  'ERR_NETWORK',\n  'ERR_FR_TOO_MANY_REDIRECTS',\n  'ERR_DEPRECATED',\n  'ERR_BAD_RESPONSE',\n  'ERR_BAD_REQUEST',\n  'ERR_CANCELED',\n  'ERR_NOT_SUPPORT',\n  'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n  descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n  const axiosError = Object.create(prototype);\n\n  utils.toFlatObject(error, axiosError, function filter(obj) {\n    return obj !== Error.prototype;\n  }, prop => {\n    return prop !== 'isAxiosError';\n  });\n\n  AxiosError.call(axiosError, error.message, code, config, request, response);\n\n  axiosError.cause = error;\n\n  axiosError.name = error.name;\n\n  customProps && Object.assign(axiosError, customProps);\n\n  return axiosError;\n};\n\nexport default AxiosError;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n  return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n  return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n  if (!path) return key;\n  return path.concat(key).map(function each(token, i) {\n    // eslint-disable-next-line no-param-reassign\n    token = removeBrackets(token);\n    return !dots && i ? '[' + token + ']' : token;\n  }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n  return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n  return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n  if (!utils.isObject(obj)) {\n    throw new TypeError('target must be an object');\n  }\n\n  // eslint-disable-next-line no-param-reassign\n  formData = formData || new (PlatformFormData || FormData)();\n\n  // eslint-disable-next-line no-param-reassign\n  options = utils.toFlatObject(options, {\n    metaTokens: true,\n    dots: false,\n    indexes: false\n  }, false, function defined(option, source) {\n    // eslint-disable-next-line no-eq-null,eqeqeq\n    return !utils.isUndefined(source[option]);\n  });\n\n  const metaTokens = options.metaTokens;\n  // eslint-disable-next-line no-use-before-define\n  const visitor = options.visitor || defaultVisitor;\n  const dots = options.dots;\n  const indexes = options.indexes;\n  const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n  const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n  if (!utils.isFunction(visitor)) {\n    throw new TypeError('visitor must be a function');\n  }\n\n  function convertValue(value) {\n    if (value === null) return '';\n\n    if (utils.isDate(value)) {\n      return value.toISOString();\n    }\n\n    if (!useBlob && utils.isBlob(value)) {\n      throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n    }\n\n    if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n      return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n    }\n\n    return value;\n  }\n\n  /**\n   * Default visitor.\n   *\n   * @param {*} value\n   * @param {String|Number} key\n   * @param {Array<String|Number>} path\n   * @this {FormData}\n   *\n   * @returns {boolean} return true to visit the each prop of the value recursively\n   */\n  function defaultVisitor(value, key, path) {\n    let arr = value;\n\n    if (value && !path && typeof value === 'object') {\n      if (utils.endsWith(key, '{}')) {\n        // eslint-disable-next-line no-param-reassign\n        key = metaTokens ? key : key.slice(0, -2);\n        // eslint-disable-next-line no-param-reassign\n        value = JSON.stringify(value);\n      } else if (\n        (utils.isArray(value) && isFlatArray(value)) ||\n        ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n        )) {\n        // eslint-disable-next-line no-param-reassign\n        key = removeBrackets(key);\n\n        arr.forEach(function each(el, index) {\n          !(utils.isUndefined(el) || el === null) && formData.append(\n            // eslint-disable-next-line no-nested-ternary\n            indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n            convertValue(el)\n          );\n        });\n        return false;\n      }\n    }\n\n    if (isVisitable(value)) {\n      return true;\n    }\n\n    formData.append(renderKey(path, key, dots), convertValue(value));\n\n    return false;\n  }\n\n  const stack = [];\n\n  const exposedHelpers = Object.assign(predicates, {\n    defaultVisitor,\n    convertValue,\n    isVisitable\n  });\n\n  function build(value, path) {\n    if (utils.isUndefined(value)) return;\n\n    if (stack.indexOf(value) !== -1) {\n      throw Error('Circular reference detected in ' + path.join('.'));\n    }\n\n    stack.push(value);\n\n    utils.forEach(value, function each(el, key) {\n      const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n        formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n      );\n\n      if (result === true) {\n        build(el, path ? path.concat(key) : [key]);\n      }\n    });\n\n    stack.pop();\n  }\n\n  if (!utils.isObject(obj)) {\n    throw new TypeError('data must be an object');\n  }\n\n  build(obj);\n\n  return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n  const charMap = {\n    '!': '%21',\n    \"'\": '%27',\n    '(': '%28',\n    ')': '%29',\n    '~': '%7E',\n    '%20': '+',\n    '%00': '\\x00'\n  };\n  return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n    return charMap[match];\n  });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n  this._pairs = [];\n\n  params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n  this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n  const _encode = encoder ? function(value) {\n    return encoder.call(this, value, encode);\n  } : encode;\n\n  return this._pairs.map(function each(pair) {\n    return _encode(pair[0]) + '=' + _encode(pair[1]);\n  }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n  return encodeURIComponent(val).\n    replace(/%3A/gi, ':').\n    replace(/%24/g, '$').\n    replace(/%2C/gi, ',').\n    replace(/%20/g, '+').\n    replace(/%5B/gi, '[').\n    replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?object} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n  /*eslint no-param-reassign:0*/\n  if (!params) {\n    return url;\n  }\n  \n  const _encode = options && options.encode || encode;\n\n  const serializeFn = options && options.serialize;\n\n  let serializedParams;\n\n  if (serializeFn) {\n    serializedParams = serializeFn(params, options);\n  } else {\n    serializedParams = utils.isURLSearchParams(params) ?\n      params.toString() :\n      new AxiosURLSearchParams(params, options).toString(_encode);\n  }\n\n  if (serializedParams) {\n    const hashmarkIndex = url.indexOf(\"#\");\n\n    if (hashmarkIndex !== -1) {\n      url = url.slice(0, hashmarkIndex);\n    }\n    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n  }\n\n  return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n  constructor() {\n    this.handlers = [];\n  }\n\n  /**\n   * Add a new interceptor to the stack\n   *\n   * @param {Function} fulfilled The function to handle `then` for a `Promise`\n   * @param {Function} rejected The function to handle `reject` for a `Promise`\n   *\n   * @return {Number} An ID used to remove interceptor later\n   */\n  use(fulfilled, rejected, options) {\n    this.handlers.push({\n      fulfilled,\n      rejected,\n      synchronous: options ? options.synchronous : false,\n      runWhen: options ? options.runWhen : null\n    });\n    return this.handlers.length - 1;\n  }\n\n  /**\n   * Remove an interceptor from the stack\n   *\n   * @param {Number} id The ID that was returned by `use`\n   *\n   * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n   */\n  eject(id) {\n    if (this.handlers[id]) {\n      this.handlers[id] = null;\n    }\n  }\n\n  /**\n   * Clear all interceptors from the stack\n   *\n   * @returns {void}\n   */\n  clear() {\n    if (this.handlers) {\n      this.handlers = [];\n    }\n  }\n\n  /**\n   * Iterate over all the registered interceptors\n   *\n   * This method is particularly useful for skipping over any\n   * interceptors that may have become `null` calling `eject`.\n   *\n   * @param {Function} fn The function to call for each interceptor\n   *\n   * @returns {void}\n   */\n  forEach(fn) {\n    utils.forEach(this.handlers, function forEachHandler(h) {\n      if (h !== null) {\n        fn(h);\n      }\n    });\n  }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n  silentJSONParsing: true,\n  forcedJSONParsing: true,\n  clarifyTimeoutError: false\n};\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n  isBrowser: true,\n  classes: {\n    URLSearchParams,\n    FormData,\n    Blob\n  },\n  protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n *  typeof window -> undefined\n *  typeof document -> undefined\n *\n * react-native:\n *  navigator.product -> 'ReactNative'\n * nativescript\n *  navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = (\n  (product) => {\n    return hasBrowserEnv && ['ReactNative', 'NativeScript', 'NS'].indexOf(product) < 0\n  })(typeof navigator !== 'undefined' && navigator.product);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n  return (\n    typeof WorkerGlobalScope !== 'undefined' &&\n    // eslint-disable-next-line no-undef\n    self instanceof WorkerGlobalScope &&\n    typeof self.importScripts === 'function'\n  );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n  hasBrowserEnv,\n  hasStandardBrowserWebWorkerEnv,\n  hasStandardBrowserEnv,\n  origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n  ...utils,\n  ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n  // foo[x][y][z]\n  // foo.x.y.z\n  // foo-x-y-z\n  // foo x y z\n  return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n    return match[0] === '[]' ? '' : match[1] || match[0];\n  });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n  const obj = {};\n  const keys = Object.keys(arr);\n  let i;\n  const len = keys.length;\n  let key;\n  for (i = 0; i < len; i++) {\n    key = keys[i];\n    obj[key] = arr[key];\n  }\n  return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n  function buildPath(path, value, target, index) {\n    let name = path[index++];\n\n    if (name === '__proto__') return true;\n\n    const isNumericKey = Number.isFinite(+name);\n    const isLast = index >= path.length;\n    name = !name && utils.isArray(target) ? target.length : name;\n\n    if (isLast) {\n      if (utils.hasOwnProp(target, name)) {\n        target[name] = [target[name], value];\n      } else {\n        target[name] = value;\n      }\n\n      return !isNumericKey;\n    }\n\n    if (!target[name] || !utils.isObject(target[name])) {\n      target[name] = [];\n    }\n\n    const result = buildPath(path, value, target[name], index);\n\n    if (result && utils.isArray(target[name])) {\n      target[name] = arrayToObject(target[name]);\n    }\n\n    return !isNumericKey;\n  }\n\n  if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n    const obj = {};\n\n    utils.forEachEntry(formData, (name, value) => {\n      buildPath(parsePropPath(name), value, obj, 0);\n    });\n\n    return obj;\n  }\n\n  return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n  if (utils.isString(rawValue)) {\n    try {\n      (parser || JSON.parse)(rawValue);\n      return utils.trim(rawValue);\n    } catch (e) {\n      if (e.name !== 'SyntaxError') {\n        throw e;\n      }\n    }\n  }\n\n  return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n  transitional: transitionalDefaults,\n\n  adapter: ['xhr', 'http', 'fetch'],\n\n  transformRequest: [function transformRequest(data, headers) {\n    const contentType = headers.getContentType() || '';\n    const hasJSONContentType = contentType.indexOf('application/json') > -1;\n    const isObjectPayload = utils.isObject(data);\n\n    if (isObjectPayload && utils.isHTMLForm(data)) {\n      data = new FormData(data);\n    }\n\n    const isFormData = utils.isFormData(data);\n\n    if (isFormData) {\n      return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n    }\n\n    if (utils.isArrayBuffer(data) ||\n      utils.isBuffer(data) ||\n      utils.isStream(data) ||\n      utils.isFile(data) ||\n      utils.isBlob(data) ||\n      utils.isReadableStream(data)\n    ) {\n      return data;\n    }\n    if (utils.isArrayBufferView(data)) {\n      return data.buffer;\n    }\n    if (utils.isURLSearchParams(data)) {\n      headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n      return data.toString();\n    }\n\n    let isFileList;\n\n    if (isObjectPayload) {\n      if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n        return toURLEncodedForm(data, this.formSerializer).toString();\n      }\n\n      if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n        const _FormData = this.env && this.env.FormData;\n\n        return toFormData(\n          isFileList ? {'files[]': data} : data,\n          _FormData && new _FormData(),\n          this.formSerializer\n        );\n      }\n    }\n\n    if (isObjectPayload || hasJSONContentType ) {\n      headers.setContentType('application/json', false);\n      return stringifySafely(data);\n    }\n\n    return data;\n  }],\n\n  transformResponse: [function transformResponse(data) {\n    const transitional = this.transitional || defaults.transitional;\n    const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n    const JSONRequested = this.responseType === 'json';\n\n    if (utils.isResponse(data) || utils.isReadableStream(data)) {\n      return data;\n    }\n\n    if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n      const silentJSONParsing = transitional && transitional.silentJSONParsing;\n      const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n      try {\n        return JSON.parse(data);\n      } catch (e) {\n        if (strictJSONParsing) {\n          if (e.name === 'SyntaxError') {\n            throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n          }\n          throw e;\n        }\n      }\n    }\n\n    return data;\n  }],\n\n  /**\n   * A timeout in milliseconds to abort a request. If set to 0 (default) a\n   * timeout is not created.\n   */\n  timeout: 0,\n\n  xsrfCookieName: 'XSRF-TOKEN',\n  xsrfHeaderName: 'X-XSRF-TOKEN',\n\n  maxContentLength: -1,\n  maxBodyLength: -1,\n\n  env: {\n    FormData: platform.classes.FormData,\n    Blob: platform.classes.Blob\n  },\n\n  validateStatus: function validateStatus(status) {\n    return status >= 200 && status < 300;\n  },\n\n  headers: {\n    common: {\n      'Accept': 'application/json, text/plain, */*',\n      'Content-Type': undefined\n    }\n  }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n  defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n  return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n    visitor: function(value, key, path, helpers) {\n      if (platform.isNode && utils.isBuffer(value)) {\n        this.append(key, value.toString('base64'));\n        return false;\n      }\n\n      return helpers.defaultVisitor.apply(this, arguments);\n    }\n  }, options));\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n  'age', 'authorization', 'content-length', 'content-type', 'etag',\n  'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n  'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n  'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n  const parsed = {};\n  let key;\n  let val;\n  let i;\n\n  rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n    i = line.indexOf(':');\n    key = line.substring(0, i).trim().toLowerCase();\n    val = line.substring(i + 1).trim();\n\n    if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n      return;\n    }\n\n    if (key === 'set-cookie') {\n      if (parsed[key]) {\n        parsed[key].push(val);\n      } else {\n        parsed[key] = [val];\n      }\n    } else {\n      parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n    }\n  });\n\n  return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n  return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n  if (value === false || value == null) {\n    return value;\n  }\n\n  return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n  const tokens = Object.create(null);\n  const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n  let match;\n\n  while ((match = tokensRE.exec(str))) {\n    tokens[match[1]] = match[2];\n  }\n\n  return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n  if (utils.isFunction(filter)) {\n    return filter.call(this, value, header);\n  }\n\n  if (isHeaderNameFilter) {\n    value = header;\n  }\n\n  if (!utils.isString(value)) return;\n\n  if (utils.isString(filter)) {\n    return value.indexOf(filter) !== -1;\n  }\n\n  if (utils.isRegExp(filter)) {\n    return filter.test(value);\n  }\n}\n\nfunction formatHeader(header) {\n  return header.trim()\n    .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n      return char.toUpperCase() + str;\n    });\n}\n\nfunction buildAccessors(obj, header) {\n  const accessorName = utils.toCamelCase(' ' + header);\n\n  ['get', 'set', 'has'].forEach(methodName => {\n    Object.defineProperty(obj, methodName + accessorName, {\n      value: function(arg1, arg2, arg3) {\n        return this[methodName].call(this, header, arg1, arg2, arg3);\n      },\n      configurable: true\n    });\n  });\n}\n\nclass AxiosHeaders {\n  constructor(headers) {\n    headers && this.set(headers);\n  }\n\n  set(header, valueOrRewrite, rewrite) {\n    const self = this;\n\n    function setHeader(_value, _header, _rewrite) {\n      const lHeader = normalizeHeader(_header);\n\n      if (!lHeader) {\n        throw new Error('header name must be a non-empty string');\n      }\n\n      const key = utils.findKey(self, lHeader);\n\n      if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n        self[key || _header] = normalizeValue(_value);\n      }\n    }\n\n    const setHeaders = (headers, _rewrite) =>\n      utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n    if (utils.isPlainObject(header) || header instanceof this.constructor) {\n      setHeaders(header, valueOrRewrite)\n    } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n      setHeaders(parseHeaders(header), valueOrRewrite);\n    } else if (utils.isHeaders(header)) {\n      for (const [key, value] of header.entries()) {\n        setHeader(value, key, rewrite);\n      }\n    } else {\n      header != null && setHeader(valueOrRewrite, header, rewrite);\n    }\n\n    return this;\n  }\n\n  get(header, parser) {\n    header = normalizeHeader(header);\n\n    if (header) {\n      const key = utils.findKey(this, header);\n\n      if (key) {\n        const value = this[key];\n\n        if (!parser) {\n          return value;\n        }\n\n        if (parser === true) {\n          return parseTokens(value);\n        }\n\n        if (utils.isFunction(parser)) {\n          return parser.call(this, value, key);\n        }\n\n        if (utils.isRegExp(parser)) {\n          return parser.exec(value);\n        }\n\n        throw new TypeError('parser must be boolean|regexp|function');\n      }\n    }\n  }\n\n  has(header, matcher) {\n    header = normalizeHeader(header);\n\n    if (header) {\n      const key = utils.findKey(this, header);\n\n      return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n    }\n\n    return false;\n  }\n\n  delete(header, matcher) {\n    const self = this;\n    let deleted = false;\n\n    function deleteHeader(_header) {\n      _header = normalizeHeader(_header);\n\n      if (_header) {\n        const key = utils.findKey(self, _header);\n\n        if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n          delete self[key];\n\n          deleted = true;\n        }\n      }\n    }\n\n    if (utils.isArray(header)) {\n      header.forEach(deleteHeader);\n    } else {\n      deleteHeader(header);\n    }\n\n    return deleted;\n  }\n\n  clear(matcher) {\n    const keys = Object.keys(this);\n    let i = keys.length;\n    let deleted = false;\n\n    while (i--) {\n      const key = keys[i];\n      if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n        delete this[key];\n        deleted = true;\n      }\n    }\n\n    return deleted;\n  }\n\n  normalize(format) {\n    const self = this;\n    const headers = {};\n\n    utils.forEach(this, (value, header) => {\n      const key = utils.findKey(headers, header);\n\n      if (key) {\n        self[key] = normalizeValue(value);\n        delete self[header];\n        return;\n      }\n\n      const normalized = format ? formatHeader(header) : String(header).trim();\n\n      if (normalized !== header) {\n        delete self[header];\n      }\n\n      self[normalized] = normalizeValue(value);\n\n      headers[normalized] = true;\n    });\n\n    return this;\n  }\n\n  concat(...targets) {\n    return this.constructor.concat(this, ...targets);\n  }\n\n  toJSON(asStrings) {\n    const obj = Object.create(null);\n\n    utils.forEach(this, (value, header) => {\n      value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n    });\n\n    return obj;\n  }\n\n  [Symbol.iterator]() {\n    return Object.entries(this.toJSON())[Symbol.iterator]();\n  }\n\n  toString() {\n    return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'AxiosHeaders';\n  }\n\n  static from(thing) {\n    return thing instanceof this ? thing : new this(thing);\n  }\n\n  static concat(first, ...targets) {\n    const computed = new this(first);\n\n    targets.forEach((target) => computed.set(target));\n\n    return computed;\n  }\n\n  static accessor(header) {\n    const internals = this[$internals] = (this[$internals] = {\n      accessors: {}\n    });\n\n    const accessors = internals.accessors;\n    const prototype = this.prototype;\n\n    function defineAccessor(_header) {\n      const lHeader = normalizeHeader(_header);\n\n      if (!accessors[lHeader]) {\n        buildAccessors(prototype, _header);\n        accessors[lHeader] = true;\n      }\n    }\n\n    utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n    return this;\n  }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n  let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n  return {\n    get: () => value,\n    set(headerValue) {\n      this[mapped] = headerValue;\n    }\n  }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n  const config = this || defaults;\n  const context = response || config;\n  const headers = AxiosHeaders.from(context.headers);\n  let data = context.data;\n\n  utils.forEach(fns, function transform(fn) {\n    data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n  });\n\n  headers.normalize();\n\n  return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n  return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n  // eslint-disable-next-line no-eq-null,eqeqeq\n  AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n  this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n  __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n  const validateStatus = response.config.validateStatus;\n  if (!response.status || !validateStatus || validateStatus(response.status)) {\n    resolve(response);\n  } else {\n    reject(new AxiosError(\n      'Request failed with status code ' + response.status,\n      [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n      response.config,\n      response.request,\n      response\n    ));\n  }\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n  samplesCount = samplesCount || 10;\n  const bytes = new Array(samplesCount);\n  const timestamps = new Array(samplesCount);\n  let head = 0;\n  let tail = 0;\n  let firstSampleTS;\n\n  min = min !== undefined ? min : 1000;\n\n  return function push(chunkLength) {\n    const now = Date.now();\n\n    const startedAt = timestamps[tail];\n\n    if (!firstSampleTS) {\n      firstSampleTS = now;\n    }\n\n    bytes[head] = chunkLength;\n    timestamps[head] = now;\n\n    let i = tail;\n    let bytesCount = 0;\n\n    while (i !== head) {\n      bytesCount += bytes[i++];\n      i = i % samplesCount;\n    }\n\n    head = (head + 1) % samplesCount;\n\n    if (head === tail) {\n      tail = (tail + 1) % samplesCount;\n    }\n\n    if (now - firstSampleTS < min) {\n      return;\n    }\n\n    const passed = startedAt && now - startedAt;\n\n    return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n  };\n}\n\nexport default speedometer;\n","'use strict';\n\n/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n  let timestamp = 0;\n  const threshold = 1000 / freq;\n  let timer = null;\n  return function throttled() {\n    const force = this === true;\n\n    const now = Date.now();\n    if (force || now - timestamp > threshold) {\n      if (timer) {\n        clearTimeout(timer);\n        timer = null;\n      }\n      timestamp = now;\n      return fn.apply(null, arguments);\n    }\n    if (!timer) {\n      timer = setTimeout(() => {\n        timer = null;\n        timestamp = Date.now();\n        return fn.apply(null, arguments);\n      }, threshold - (now - timestamp));\n    }\n  };\n}\n\nexport default throttle;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\n\nexport default (listener, isDownloadStream, freq = 3) => {\n  let bytesNotified = 0;\n  const _speedometer = speedometer(50, 250);\n\n  return throttle(e => {\n    const loaded = e.loaded;\n    const total = e.lengthComputable ? e.total : undefined;\n    const progressBytes = loaded - bytesNotified;\n    const rate = _speedometer(progressBytes);\n    const inRange = loaded <= total;\n\n    bytesNotified = loaded;\n\n    const data = {\n      loaded,\n      total,\n      progress: total ? (loaded / total) : undefined,\n      bytes: progressBytes,\n      rate: rate ? rate : undefined,\n      estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n      event: e,\n      lengthComputable: total != null\n    };\n\n    data[isDownloadStream ? 'download' : 'upload'] = true;\n\n    listener(data);\n  }, freq);\n}\n","'use strict';\n\nimport utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n// Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\n  (function standardBrowserEnv() {\n    const msie = /(msie|trident)/i.test(navigator.userAgent);\n    const urlParsingNode = document.createElement('a');\n    let originURL;\n\n    /**\n    * Parse a URL to discover its components\n    *\n    * @param {String} url The URL to be parsed\n    * @returns {Object}\n    */\n    function resolveURL(url) {\n      let href = url;\n\n      if (msie) {\n        // IE needs attribute set twice to normalize properties\n        urlParsingNode.setAttribute('href', href);\n        href = urlParsingNode.href;\n      }\n\n      urlParsingNode.setAttribute('href', href);\n\n      // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n      return {\n        href: urlParsingNode.href,\n        protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n        host: urlParsingNode.host,\n        search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n        hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n        hostname: urlParsingNode.hostname,\n        port: urlParsingNode.port,\n        pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n          urlParsingNode.pathname :\n          '/' + urlParsingNode.pathname\n      };\n    }\n\n    originURL = resolveURL(window.location.href);\n\n    /**\n    * Determine if a URL shares the same origin as the current location\n    *\n    * @param {String} requestURL The URL to test\n    * @returns {boolean} True if URL shares the same origin, otherwise false\n    */\n    return function isURLSameOrigin(requestURL) {\n      const parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n      return (parsed.protocol === originURL.protocol &&\n          parsed.host === originURL.host);\n    };\n  })() :\n\n  // Non standard browser envs (web workers, react-native) lack needed support.\n  (function nonStandardBrowserEnv() {\n    return function isURLSameOrigin() {\n      return true;\n    };\n  })();\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n  // Standard browser envs support document.cookie\n  {\n    write(name, value, expires, path, domain, secure) {\n      const cookie = [name + '=' + encodeURIComponent(value)];\n\n      utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n      utils.isString(path) && cookie.push('path=' + path);\n\n      utils.isString(domain) && cookie.push('domain=' + domain);\n\n      secure === true && cookie.push('secure');\n\n      document.cookie = cookie.join('; ');\n    },\n\n    read(name) {\n      const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n      return (match ? decodeURIComponent(match[3]) : null);\n    },\n\n    remove(name) {\n      this.write(name, '', Date.now() - 86400000);\n    }\n  }\n\n  :\n\n  // Non-standard browser env (web workers, react-native) lack needed support.\n  {\n    write() {},\n    read() {\n      return null;\n    },\n    remove() {}\n  };\n\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL) {\n  if (baseURL && !isAbsoluteURL(requestedURL)) {\n    return combineURLs(baseURL, requestedURL);\n  }\n  return requestedURL;\n}\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n  // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n  // by any combination of letters, digits, plus, period, or hyphen.\n  return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n  return relativeURL\n    ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n    : baseURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n  // eslint-disable-next-line no-param-reassign\n  config2 = config2 || {};\n  const config = {};\n\n  function getMergedValue(target, source, caseless) {\n    if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n      return utils.merge.call({caseless}, target, source);\n    } else if (utils.isPlainObject(source)) {\n      return utils.merge({}, source);\n    } else if (utils.isArray(source)) {\n      return source.slice();\n    }\n    return source;\n  }\n\n  // eslint-disable-next-line consistent-return\n  function mergeDeepProperties(a, b, caseless) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(a, b, caseless);\n    } else if (!utils.isUndefined(a)) {\n      return getMergedValue(undefined, a, caseless);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function valueFromConfig2(a, b) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(undefined, b);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function defaultToConfig2(a, b) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(undefined, b);\n    } else if (!utils.isUndefined(a)) {\n      return getMergedValue(undefined, a);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function mergeDirectKeys(a, b, prop) {\n    if (prop in config2) {\n      return getMergedValue(a, b);\n    } else if (prop in config1) {\n      return getMergedValue(undefined, a);\n    }\n  }\n\n  const mergeMap = {\n    url: valueFromConfig2,\n    method: valueFromConfig2,\n    data: valueFromConfig2,\n    baseURL: defaultToConfig2,\n    transformRequest: defaultToConfig2,\n    transformResponse: defaultToConfig2,\n    paramsSerializer: defaultToConfig2,\n    timeout: defaultToConfig2,\n    timeoutMessage: defaultToConfig2,\n    withCredentials: defaultToConfig2,\n    withXSRFToken: defaultToConfig2,\n    adapter: defaultToConfig2,\n    responseType: defaultToConfig2,\n    xsrfCookieName: defaultToConfig2,\n    xsrfHeaderName: defaultToConfig2,\n    onUploadProgress: defaultToConfig2,\n    onDownloadProgress: defaultToConfig2,\n    decompress: defaultToConfig2,\n    maxContentLength: defaultToConfig2,\n    maxBodyLength: defaultToConfig2,\n    beforeRedirect: defaultToConfig2,\n    transport: defaultToConfig2,\n    httpAgent: defaultToConfig2,\n    httpsAgent: defaultToConfig2,\n    cancelToken: defaultToConfig2,\n    socketPath: defaultToConfig2,\n    responseEncoding: defaultToConfig2,\n    validateStatus: mergeDirectKeys,\n    headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true)\n  };\n\n  utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n    const merge = mergeMap[prop] || mergeDeepProperties;\n    const configValue = merge(config1[prop], config2[prop], prop);\n    (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n  });\n\n  return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n  const newConfig = mergeConfig({}, config);\n\n  let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig;\n\n  newConfig.headers = headers = AxiosHeaders.from(headers);\n\n  newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url), config.params, config.paramsSerializer);\n\n  // HTTP basic authentication\n  if (auth) {\n    headers.set('Authorization', 'Basic ' +\n      btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n    );\n  }\n\n  let contentType;\n\n  if (utils.isFormData(data)) {\n    if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n      headers.setContentType(undefined); // Let the browser set it\n    } else if ((contentType = headers.getContentType()) !== false) {\n      // fix semicolon duplication issue for ReactNative FormData implementation\n      const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n      headers.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n    }\n  }\n\n  // Add xsrf header\n  // This is only done if running in a standard browser environment.\n  // Specifically not if we're in a web worker, or react-native.\n\n  if (platform.hasStandardBrowserEnv) {\n    withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n    if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n      // Add xsrf header\n      const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n      if (xsrfValue) {\n        headers.set(xsrfHeaderName, xsrfValue);\n      }\n    }\n  }\n\n  return newConfig;\n}\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport progressEventReducer from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n  return new Promise(function dispatchXhrRequest(resolve, reject) {\n    const _config = resolveConfig(config);\n    let requestData = _config.data;\n    const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n    let {responseType} = _config;\n    let onCanceled;\n    function done() {\n      if (_config.cancelToken) {\n        _config.cancelToken.unsubscribe(onCanceled);\n      }\n\n      if (_config.signal) {\n        _config.signal.removeEventListener('abort', onCanceled);\n      }\n    }\n\n    let request = new XMLHttpRequest();\n\n    request.open(_config.method.toUpperCase(), _config.url, true);\n\n    // Set the request timeout in MS\n    request.timeout = _config.timeout;\n\n    function onloadend() {\n      if (!request) {\n        return;\n      }\n      // Prepare the response\n      const responseHeaders = AxiosHeaders.from(\n        'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n      );\n      const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n        request.responseText : request.response;\n      const response = {\n        data: responseData,\n        status: request.status,\n        statusText: request.statusText,\n        headers: responseHeaders,\n        config,\n        request\n      };\n\n      settle(function _resolve(value) {\n        resolve(value);\n        done();\n      }, function _reject(err) {\n        reject(err);\n        done();\n      }, response);\n\n      // Clean up request\n      request = null;\n    }\n\n    if ('onloadend' in request) {\n      // Use onloadend if available\n      request.onloadend = onloadend;\n    } else {\n      // Listen for ready state to emulate onloadend\n      request.onreadystatechange = function handleLoad() {\n        if (!request || request.readyState !== 4) {\n          return;\n        }\n\n        // The request errored out and we didn't get a response, this will be\n        // handled by onerror instead\n        // With one exception: request that using file: protocol, most browsers\n        // will return status as 0 even though it's a successful request\n        if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n          return;\n        }\n        // readystate handler is calling before onerror or ontimeout handlers,\n        // so we should call onloadend on the next 'tick'\n        setTimeout(onloadend);\n      };\n    }\n\n    // Handle browser request cancellation (as opposed to a manual cancellation)\n    request.onabort = function handleAbort() {\n      if (!request) {\n        return;\n      }\n\n      reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, _config, request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle low level network errors\n    request.onerror = function handleError() {\n      // Real errors are hidden from us by the browser\n      // onerror should only fire if it's a network error\n      reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, _config, request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle timeout\n    request.ontimeout = function handleTimeout() {\n      let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n      const transitional = _config.transitional || transitionalDefaults;\n      if (_config.timeoutErrorMessage) {\n        timeoutErrorMessage = _config.timeoutErrorMessage;\n      }\n      reject(new AxiosError(\n        timeoutErrorMessage,\n        transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n        _config,\n        request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Remove Content-Type if data is undefined\n    requestData === undefined && requestHeaders.setContentType(null);\n\n    // Add headers to the request\n    if ('setRequestHeader' in request) {\n      utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n        request.setRequestHeader(key, val);\n      });\n    }\n\n    // Add withCredentials to request if needed\n    if (!utils.isUndefined(_config.withCredentials)) {\n      request.withCredentials = !!_config.withCredentials;\n    }\n\n    // Add responseType to request if needed\n    if (responseType && responseType !== 'json') {\n      request.responseType = _config.responseType;\n    }\n\n    // Handle progress if needed\n    if (typeof _config.onDownloadProgress === 'function') {\n      request.addEventListener('progress', progressEventReducer(_config.onDownloadProgress, true));\n    }\n\n    // Not all browsers support upload events\n    if (typeof _config.onUploadProgress === 'function' && request.upload) {\n      request.upload.addEventListener('progress', progressEventReducer(_config.onUploadProgress));\n    }\n\n    if (_config.cancelToken || _config.signal) {\n      // Handle cancellation\n      // eslint-disable-next-line func-names\n      onCanceled = cancel => {\n        if (!request) {\n          return;\n        }\n        reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n        request.abort();\n        request = null;\n      };\n\n      _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n      if (_config.signal) {\n        _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n      }\n    }\n\n    const protocol = parseProtocol(_config.url);\n\n    if (protocol && platform.protocols.indexOf(protocol) === -1) {\n      reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n      return;\n    }\n\n\n    // Send the request\n    request.send(requestData || null);\n  });\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n  const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n  return match && match[1] || '';\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst composeSignals = (signals, timeout) => {\n  let controller = new AbortController();\n\n  let aborted;\n\n  const onabort = function (cancel) {\n    if (!aborted) {\n      aborted = true;\n      unsubscribe();\n      const err = cancel instanceof Error ? cancel : this.reason;\n      controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n    }\n  }\n\n  let timer = timeout && setTimeout(() => {\n    onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n  }, timeout)\n\n  const unsubscribe = () => {\n    if (signals) {\n      timer && clearTimeout(timer);\n      timer = null;\n      signals.forEach(signal => {\n        signal &&\n        (signal.removeEventListener ? signal.removeEventListener('abort', onabort) : signal.unsubscribe(onabort));\n      });\n      signals = null;\n    }\n  }\n\n  signals.forEach((signal) => signal && signal.addEventListener && signal.addEventListener('abort', onabort));\n\n  const {signal} = controller;\n\n  signal.unsubscribe = unsubscribe;\n\n  return [signal, () => {\n    timer && clearTimeout(timer);\n    timer = null;\n  }];\n}\n\nexport default composeSignals;\n","\n\nexport const streamChunk = function* (chunk, chunkSize) {\n  let len = chunk.byteLength;\n\n  if (!chunkSize || len < chunkSize) {\n    yield chunk;\n    return;\n  }\n\n  let pos = 0;\n  let end;\n\n  while (pos < len) {\n    end = pos + chunkSize;\n    yield chunk.slice(pos, end);\n    pos = end;\n  }\n}\n\nexport const readBytes = async function* (iterable, chunkSize, encode) {\n  for await (const chunk of iterable) {\n    yield* streamChunk(ArrayBuffer.isView(chunk) ? chunk : (await encode(String(chunk))), chunkSize);\n  }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish, encode) => {\n  const iterator = readBytes(stream, chunkSize, encode);\n\n  let bytes = 0;\n\n  return new ReadableStream({\n    type: 'bytes',\n\n    async pull(controller) {\n      const {done, value} = await iterator.next();\n\n      if (done) {\n        controller.close();\n        onFinish();\n        return;\n      }\n\n      let len = value.byteLength;\n      onProgress && onProgress(bytes += len);\n      controller.enqueue(new Uint8Array(value));\n    },\n    cancel(reason) {\n      onFinish(reason);\n      return iterator.return();\n    }\n  }, {\n    highWaterMark: 2\n  })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport progressEventReducer from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst fetchProgressDecorator = (total, fn) => {\n  const lengthComputable = total != null;\n  return (loaded) => setTimeout(() => fn({\n    lengthComputable,\n    total,\n    loaded\n  }));\n}\n\nconst isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function';\nconst isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function';\n\n// used only inside the fetch adapter\nconst encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n    ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n    async (str) => new Uint8Array(await new Response(str).arrayBuffer())\n);\n\nconst supportsRequestStream = isReadableStreamSupported && (() => {\n  let duplexAccessed = false;\n\n  const hasContentType = new Request(platform.origin, {\n    body: new ReadableStream(),\n    method: 'POST',\n    get duplex() {\n      duplexAccessed = true;\n      return 'half';\n    },\n  }).headers.has('Content-Type');\n\n  return duplexAccessed && !hasContentType;\n})();\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst supportsResponseStream = isReadableStreamSupported && !!(()=> {\n  try {\n    return utils.isReadableStream(new Response('').body);\n  } catch(err) {\n    // return undefined\n  }\n})();\n\nconst resolvers = {\n  stream: supportsResponseStream && ((res) => res.body)\n};\n\nisFetchSupported && (((res) => {\n  ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n    !resolvers[type] && (resolvers[type] = utils.isFunction(res[type]) ? (res) => res[type]() :\n      (_, config) => {\n        throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n      })\n  });\n})(new Response));\n\nconst getBodyLength = async (body) => {\n  if (body == null) {\n    return 0;\n  }\n\n  if(utils.isBlob(body)) {\n    return body.size;\n  }\n\n  if(utils.isSpecCompliantForm(body)) {\n    return (await new Request(body).arrayBuffer()).byteLength;\n  }\n\n  if(utils.isArrayBufferView(body)) {\n    return body.byteLength;\n  }\n\n  if(utils.isURLSearchParams(body)) {\n    body = body + '';\n  }\n\n  if(utils.isString(body)) {\n    return (await encodeText(body)).byteLength;\n  }\n}\n\nconst resolveBodyLength = async (headers, body) => {\n  const length = utils.toFiniteNumber(headers.getContentLength());\n\n  return length == null ? getBodyLength(body) : length;\n}\n\nexport default isFetchSupported && (async (config) => {\n  let {\n    url,\n    method,\n    data,\n    signal,\n    cancelToken,\n    timeout,\n    onDownloadProgress,\n    onUploadProgress,\n    responseType,\n    headers,\n    withCredentials = 'same-origin',\n    fetchOptions\n  } = resolveConfig(config);\n\n  responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n  let [composedSignal, stopTimeout] = (signal || cancelToken || timeout) ?\n    composeSignals([signal, cancelToken], timeout) : [];\n\n  let finished, request;\n\n  const onFinish = () => {\n    !finished && setTimeout(() => {\n      composedSignal && composedSignal.unsubscribe();\n    });\n\n    finished = true;\n  }\n\n  let requestContentLength;\n\n  try {\n    if (\n      onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n      (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n    ) {\n      let _request = new Request(url, {\n        method: 'POST',\n        body: data,\n        duplex: \"half\"\n      });\n\n      let contentTypeHeader;\n\n      if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n        headers.setContentType(contentTypeHeader)\n      }\n\n      if (_request.body) {\n        data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, fetchProgressDecorator(\n          requestContentLength,\n          progressEventReducer(onUploadProgress)\n        ), null, encodeText);\n      }\n    }\n\n    if (!utils.isString(withCredentials)) {\n      withCredentials = withCredentials ? 'cors' : 'omit';\n    }\n\n    request = new Request(url, {\n      ...fetchOptions,\n      signal: composedSignal,\n      method: method.toUpperCase(),\n      headers: headers.normalize().toJSON(),\n      body: data,\n      duplex: \"half\",\n      withCredentials\n    });\n\n    let response = await fetch(request);\n\n    const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n    if (supportsResponseStream && (onDownloadProgress || isStreamResponse)) {\n      const options = {};\n\n      ['status', 'statusText', 'headers'].forEach(prop => {\n        options[prop] = response[prop];\n      });\n\n      const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n      response = new Response(\n        trackStream(response.body, DEFAULT_CHUNK_SIZE, onDownloadProgress && fetchProgressDecorator(\n          responseContentLength,\n          progressEventReducer(onDownloadProgress, true)\n        ), isStreamResponse && onFinish, encodeText),\n        options\n      );\n    }\n\n    responseType = responseType || 'text';\n\n    let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n    !isStreamResponse && onFinish();\n\n    stopTimeout && stopTimeout();\n\n    return await new Promise((resolve, reject) => {\n      settle(resolve, reject, {\n        data: responseData,\n        headers: AxiosHeaders.from(response.headers),\n        status: response.status,\n        statusText: response.statusText,\n        config,\n        request\n      })\n    })\n  } catch (err) {\n    onFinish();\n\n    if (err && err.name === 'TypeError' && /fetch/i.test(err.message)) {\n      throw Object.assign(\n        new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n        {\n          cause: err.cause || err\n        }\n      )\n    }\n\n    throw AxiosError.from(err, err && err.code, config, request);\n  }\n});\n\n\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n  http: httpAdapter,\n  xhr: xhrAdapter,\n  fetch: fetchAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n  if (fn) {\n    try {\n      Object.defineProperty(fn, 'name', {value});\n    } catch (e) {\n      // eslint-disable-next-line no-empty\n    }\n    Object.defineProperty(fn, 'adapterName', {value});\n  }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n  getAdapter: (adapters) => {\n    adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n    const {length} = adapters;\n    let nameOrAdapter;\n    let adapter;\n\n    const rejectedReasons = {};\n\n    for (let i = 0; i < length; i++) {\n      nameOrAdapter = adapters[i];\n      let id;\n\n      adapter = nameOrAdapter;\n\n      if (!isResolvedHandle(nameOrAdapter)) {\n        adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n        if (adapter === undefined) {\n          throw new AxiosError(`Unknown adapter '${id}'`);\n        }\n      }\n\n      if (adapter) {\n        break;\n      }\n\n      rejectedReasons[id || '#' + i] = adapter;\n    }\n\n    if (!adapter) {\n\n      const reasons = Object.entries(rejectedReasons)\n        .map(([id, state]) => `adapter ${id} ` +\n          (state === false ? 'is not supported by the environment' : 'is not available in the build')\n        );\n\n      let s = length ?\n        (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n        'as no adapter specified';\n\n      throw new AxiosError(\n        `There is no suitable adapter to dispatch the request ` + s,\n        'ERR_NOT_SUPPORT'\n      );\n    }\n\n    return adapter;\n  },\n  adapters: knownAdapters\n}\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n  if (config.cancelToken) {\n    config.cancelToken.throwIfRequested();\n  }\n\n  if (config.signal && config.signal.aborted) {\n    throw new CanceledError(null, config);\n  }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n  throwIfCancellationRequested(config);\n\n  config.headers = AxiosHeaders.from(config.headers);\n\n  // Transform request data\n  config.data = transformData.call(\n    config,\n    config.transformRequest\n  );\n\n  if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n    config.headers.setContentType('application/x-www-form-urlencoded', false);\n  }\n\n  const adapter = adapters.getAdapter(config.adapter || defaults.adapter);\n\n  return adapter(config).then(function onAdapterResolution(response) {\n    throwIfCancellationRequested(config);\n\n    // Transform response data\n    response.data = transformData.call(\n      config,\n      config.transformResponse,\n      response\n    );\n\n    response.headers = AxiosHeaders.from(response.headers);\n\n    return response;\n  }, function onAdapterRejection(reason) {\n    if (!isCancel(reason)) {\n      throwIfCancellationRequested(config);\n\n      // Transform response data\n      if (reason && reason.response) {\n        reason.response.data = transformData.call(\n          config,\n          config.transformResponse,\n          reason.response\n        );\n        reason.response.headers = AxiosHeaders.from(reason.response.headers);\n      }\n    }\n\n    return Promise.reject(reason);\n  });\n}\n","export const VERSION = \"1.7.2\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n  validators[type] = function validator(thing) {\n    return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n  };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n  function formatMessage(opt, desc) {\n    return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n  }\n\n  // eslint-disable-next-line func-names\n  return (value, opt, opts) => {\n    if (validator === false) {\n      throw new AxiosError(\n        formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n        AxiosError.ERR_DEPRECATED\n      );\n    }\n\n    if (version && !deprecatedWarnings[opt]) {\n      deprecatedWarnings[opt] = true;\n      // eslint-disable-next-line no-console\n      console.warn(\n        formatMessage(\n          opt,\n          ' has been deprecated since v' + version + ' and will be removed in the near future'\n        )\n      );\n    }\n\n    return validator ? validator(value, opt, opts) : true;\n  };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n  if (typeof options !== 'object') {\n    throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n  }\n  const keys = Object.keys(options);\n  let i = keys.length;\n  while (i-- > 0) {\n    const opt = keys[i];\n    const validator = schema[opt];\n    if (validator) {\n      const value = options[opt];\n      const result = value === undefined || validator(value, opt, options);\n      if (result !== true) {\n        throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n      }\n      continue;\n    }\n    if (allowUnknown !== true) {\n      throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n    }\n  }\n}\n\nexport default {\n  assertOptions,\n  validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n  constructor(instanceConfig) {\n    this.defaults = instanceConfig;\n    this.interceptors = {\n      request: new InterceptorManager(),\n      response: new InterceptorManager()\n    };\n  }\n\n  /**\n   * Dispatch a request\n   *\n   * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n   * @param {?Object} config\n   *\n   * @returns {Promise} The Promise to be fulfilled\n   */\n  async request(configOrUrl, config) {\n    try {\n      return await this._request(configOrUrl, config);\n    } catch (err) {\n      if (err instanceof Error) {\n        let dummy;\n\n        Error.captureStackTrace ? Error.captureStackTrace(dummy = {}) : (dummy = new Error());\n\n        // slice off the Error: ... line\n        const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n        try {\n          if (!err.stack) {\n            err.stack = stack;\n            // match without the 2 top stack lines\n          } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n            err.stack += '\\n' + stack\n          }\n        } catch (e) {\n          // ignore the case where \"stack\" is an un-writable property\n        }\n      }\n\n      throw err;\n    }\n  }\n\n  _request(configOrUrl, config) {\n    /*eslint no-param-reassign:0*/\n    // Allow for axios('example/url'[, config]) a la fetch API\n    if (typeof configOrUrl === 'string') {\n      config = config || {};\n      config.url = configOrUrl;\n    } else {\n      config = configOrUrl || {};\n    }\n\n    config = mergeConfig(this.defaults, config);\n\n    const {transitional, paramsSerializer, headers} = config;\n\n    if (transitional !== undefined) {\n      validator.assertOptions(transitional, {\n        silentJSONParsing: validators.transitional(validators.boolean),\n        forcedJSONParsing: validators.transitional(validators.boolean),\n        clarifyTimeoutError: validators.transitional(validators.boolean)\n      }, false);\n    }\n\n    if (paramsSerializer != null) {\n      if (utils.isFunction(paramsSerializer)) {\n        config.paramsSerializer = {\n          serialize: paramsSerializer\n        }\n      } else {\n        validator.assertOptions(paramsSerializer, {\n          encode: validators.function,\n          serialize: validators.function\n        }, true);\n      }\n    }\n\n    // Set config.method\n    config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n    // Flatten headers\n    let contextHeaders = headers && utils.merge(\n      headers.common,\n      headers[config.method]\n    );\n\n    headers && utils.forEach(\n      ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n      (method) => {\n        delete headers[method];\n      }\n    );\n\n    config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n    // filter out skipped interceptors\n    const requestInterceptorChain = [];\n    let synchronousRequestInterceptors = true;\n    this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n      if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n        return;\n      }\n\n      synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n      requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n    });\n\n    const responseInterceptorChain = [];\n    this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n      responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n    });\n\n    let promise;\n    let i = 0;\n    let len;\n\n    if (!synchronousRequestInterceptors) {\n      const chain = [dispatchRequest.bind(this), undefined];\n      chain.unshift.apply(chain, requestInterceptorChain);\n      chain.push.apply(chain, responseInterceptorChain);\n      len = chain.length;\n\n      promise = Promise.resolve(config);\n\n      while (i < len) {\n        promise = promise.then(chain[i++], chain[i++]);\n      }\n\n      return promise;\n    }\n\n    len = requestInterceptorChain.length;\n\n    let newConfig = config;\n\n    i = 0;\n\n    while (i < len) {\n      const onFulfilled = requestInterceptorChain[i++];\n      const onRejected = requestInterceptorChain[i++];\n      try {\n        newConfig = onFulfilled(newConfig);\n      } catch (error) {\n        onRejected.call(this, error);\n        break;\n      }\n    }\n\n    try {\n      promise = dispatchRequest.call(this, newConfig);\n    } catch (error) {\n      return Promise.reject(error);\n    }\n\n    i = 0;\n    len = responseInterceptorChain.length;\n\n    while (i < len) {\n      promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n    }\n\n    return promise;\n  }\n\n  getUri(config) {\n    config = mergeConfig(this.defaults, config);\n    const fullPath = buildFullPath(config.baseURL, config.url);\n    return buildURL(fullPath, config.params, config.paramsSerializer);\n  }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, config) {\n    return this.request(mergeConfig(config || {}, {\n      method,\n      url,\n      data: (config || {}).data\n    }));\n  };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  /*eslint func-names:0*/\n\n  function generateHTTPMethod(isForm) {\n    return function httpMethod(url, data, config) {\n      return this.request(mergeConfig(config || {}, {\n        method,\n        headers: isForm ? {\n          'Content-Type': 'multipart/form-data'\n        } : {},\n        url,\n        data\n      }));\n    };\n  }\n\n  Axios.prototype[method] = generateHTTPMethod();\n\n  Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n  constructor(executor) {\n    if (typeof executor !== 'function') {\n      throw new TypeError('executor must be a function.');\n    }\n\n    let resolvePromise;\n\n    this.promise = new Promise(function promiseExecutor(resolve) {\n      resolvePromise = resolve;\n    });\n\n    const token = this;\n\n    // eslint-disable-next-line func-names\n    this.promise.then(cancel => {\n      if (!token._listeners) return;\n\n      let i = token._listeners.length;\n\n      while (i-- > 0) {\n        token._listeners[i](cancel);\n      }\n      token._listeners = null;\n    });\n\n    // eslint-disable-next-line func-names\n    this.promise.then = onfulfilled => {\n      let _resolve;\n      // eslint-disable-next-line func-names\n      const promise = new Promise(resolve => {\n        token.subscribe(resolve);\n        _resolve = resolve;\n      }).then(onfulfilled);\n\n      promise.cancel = function reject() {\n        token.unsubscribe(_resolve);\n      };\n\n      return promise;\n    };\n\n    executor(function cancel(message, config, request) {\n      if (token.reason) {\n        // Cancellation has already been requested\n        return;\n      }\n\n      token.reason = new CanceledError(message, config, request);\n      resolvePromise(token.reason);\n    });\n  }\n\n  /**\n   * Throws a `CanceledError` if cancellation has been requested.\n   */\n  throwIfRequested() {\n    if (this.reason) {\n      throw this.reason;\n    }\n  }\n\n  /**\n   * Subscribe to the cancel signal\n   */\n\n  subscribe(listener) {\n    if (this.reason) {\n      listener(this.reason);\n      return;\n    }\n\n    if (this._listeners) {\n      this._listeners.push(listener);\n    } else {\n      this._listeners = [listener];\n    }\n  }\n\n  /**\n   * Unsubscribe from the cancel signal\n   */\n\n  unsubscribe(listener) {\n    if (!this._listeners) {\n      return;\n    }\n    const index = this._listeners.indexOf(listener);\n    if (index !== -1) {\n      this._listeners.splice(index, 1);\n    }\n  }\n\n  /**\n   * Returns an object that contains a new `CancelToken` and a function that, when called,\n   * cancels the `CancelToken`.\n   */\n  static source() {\n    let cancel;\n    const token = new CancelToken(function executor(c) {\n      cancel = c;\n    });\n    return {\n      token,\n      cancel\n    };\n  }\n}\n\nexport default CancelToken;\n","const HttpStatusCode = {\n  Continue: 100,\n  SwitchingProtocols: 101,\n  Processing: 102,\n  EarlyHints: 103,\n  Ok: 200,\n  Created: 201,\n  Accepted: 202,\n  NonAuthoritativeInformation: 203,\n  NoContent: 204,\n  ResetContent: 205,\n  PartialContent: 206,\n  MultiStatus: 207,\n  AlreadyReported: 208,\n  ImUsed: 226,\n  MultipleChoices: 300,\n  MovedPermanently: 301,\n  Found: 302,\n  SeeOther: 303,\n  NotModified: 304,\n  UseProxy: 305,\n  Unused: 306,\n  TemporaryRedirect: 307,\n  PermanentRedirect: 308,\n  BadRequest: 400,\n  Unauthorized: 401,\n  PaymentRequired: 402,\n  Forbidden: 403,\n  NotFound: 404,\n  MethodNotAllowed: 405,\n  NotAcceptable: 406,\n  ProxyAuthenticationRequired: 407,\n  RequestTimeout: 408,\n  Conflict: 409,\n  Gone: 410,\n  LengthRequired: 411,\n  PreconditionFailed: 412,\n  PayloadTooLarge: 413,\n  UriTooLong: 414,\n  UnsupportedMediaType: 415,\n  RangeNotSatisfiable: 416,\n  ExpectationFailed: 417,\n  ImATeapot: 418,\n  MisdirectedRequest: 421,\n  UnprocessableEntity: 422,\n  Locked: 423,\n  FailedDependency: 424,\n  TooEarly: 425,\n  UpgradeRequired: 426,\n  PreconditionRequired: 428,\n  TooManyRequests: 429,\n  RequestHeaderFieldsTooLarge: 431,\n  UnavailableForLegalReasons: 451,\n  InternalServerError: 500,\n  NotImplemented: 501,\n  BadGateway: 502,\n  ServiceUnavailable: 503,\n  GatewayTimeout: 504,\n  HttpVersionNotSupported: 505,\n  VariantAlsoNegotiates: 506,\n  InsufficientStorage: 507,\n  LoopDetected: 508,\n  NotExtended: 510,\n  NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n  HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n  const context = new Axios(defaultConfig);\n  const instance = bind(Axios.prototype.request, context);\n\n  // Copy axios.prototype to instance\n  utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n  // Copy context to instance\n  utils.extend(instance, context, null, {allOwnKeys: true});\n\n  // Factory for creating new instances\n  instance.create = function create(instanceConfig) {\n    return createInstance(mergeConfig(defaultConfig, instanceConfig));\n  };\n\n  return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n  return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n *  ```js\n *  function f(x, y, z) {}\n *  var args = [1, 2, 3];\n *  f.apply(null, args);\n *  ```\n *\n * With `spread` this example can be re-written.\n *\n *  ```js\n *  spread(function(x, y, z) {})([1, 2, 3]);\n *  ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n  return function wrap(arr) {\n    return callback.apply(null, arr);\n  };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n  return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","// src/services/api.ts\n\nimport axios from 'axios';\n\n\nconst API_URL = process.env.REACT_APP_API_URL || 'http://localhost:5000/api';\n\nexport const fetchTasks = async () => {\n    try {\n        const response = await axios.get(`${API_URL}/tasks`);\n        return response.data;\n    } catch (error) {\n        console.error('Error fetching tasks:', error);\n        throw error;\n    }\n};\n\nexport const fetchTaskById = async (id: string) => {\n    try {\n        const response = await axios.get(`${API_URL}/tasks/${id}`);\n        return response.data;\n    } catch (error) {\n        console.error(`Error fetching task with id ${id}:`, error);\n        throw error;\n    }\n};\n\nexport const fetchCardById = async (id: string) => {\n    try {\n        const response = await axios.get(`${API_URL}/cards/${id}`);\n        return response.data;\n    } catch (error) {\n        console.error(`Error fetching card with id ${id}:`, error);\n        throw error;\n    }\n};\n\nexport const fetchPreviousCardsOutputs = async (cardId: string) => {\n    try {\n        const response = await axios.get(`${API_URL}/cards/previous-cards-outputs/${cardId}`);\n        return response.data;\n    } catch (error) {\n        console.error(`Error fetching previous cards outputs for card with id ${cardId}:`, error);\n        throw error;\n    }\n};\n\nexport const createCard = async (card: any) => {\n    try {\n        const response = await axios.post(`${API_URL}/cards`, card);\n        return response.data;\n    } catch (error) {\n        console.error('Error creating card:', error);\n        throw error;\n    }\n};\n\nexport const setNextCard = async (currentCardId: string, nextCardIds: string[]) => {\n    try {\n        const response = await axios.put(`${API_URL}/cards/set-next/${currentCardId}`, { nextCardIds });\n        return response.data;\n    } catch (error) {\n        console.error('Error setting next card:', error);\n        throw error;\n    }\n};\n\nexport const executeCard = async (cardId: string) => {\n    try {\n        const response = await axios.post(`${API_URL}/cards/execute/${cardId}`);\n        return response.data;\n    } catch (error) {\n        console.error('Error executing card:', error);\n        throw error;\n    }\n};\n\nexport const evaluateCard = async (cardId: string) => {\n    try {\n        const response = await axios.post(`${API_URL}/cards/evaluate/${cardId}`);\n        return response.data;\n    } catch (error) {\n        console.error('Error evaluating card:', error);\n        throw error;\n    }\n};\n\nexport const deleteCard = async (cardId: string, taskId?: string) => {\n    try {\n        const response = await axios.delete(`${API_URL}/cards/${cardId}`, {\n            data: { taskId }\n        });\n        return response.data;\n    } catch (error) {\n        console.error(`Error deleting card with id ${cardId}:`, error);\n        throw error;\n    }\n};\n\nexport const updateCard = async (card: any) => {\n    try {\n        const response = await axios.put(`${API_URL}/cards/${card._id}`, card);\n        return response.data;\n    } catch (error) {\n        console.error('Error updating card:', error);\n        throw error;\n    }\n};\n\nexport const updateCardOutput = async (cardId: string, output: any) => {\n    try {\n        const response = await axios.put(`${API_URL}/cards/${cardId}/output`, output);\n        return response.data;\n    } catch (error) {\n        console.error('Error updating card output:', error);\n        throw error;\n    }\n}\n\nexport const createTask = async (task: any) => {\n    try {\n        const response = await axios.post(`${API_URL}/tasks`, task);\n        return response.data;\n    } catch (error) {\n        console.error('Error creating task:', error);\n        throw error;\n    }\n};\n\nexport const removeNextCard = async (currentCardId: string, nextCardId: string) => {\n    try {\n        const response = await axios.put(`${API_URL}/cards/remove-next/${currentCardId}`, { nextCardId });\n        return response.data;\n    } catch (error) {\n        console.error('Error removing next card:', error);\n        throw error;\n    }\n};\n\nexport const deleteTask = async (id: string) => {\n    try {\n        const response = await axios.delete(`${API_URL}/tasks/${id}`);\n        return response.data;\n    } catch (error) {\n        console.error(`Error deleting task with id ${id}:`, error);\n        throw error;\n    }\n};\n\nexport const fetchPlugins = async () => {\n    try {\n        const response = await axios.get(`${API_URL}/plugins`);\n        return response.data.plugins;\n    } catch (error) {\n        console.error('Error fetching plugins:', error);\n        throw error;\n    }\n};\n\nexport const executePlugin = async (pluginName: string, params: any) => {\n    try {\n        const response = await axios.post(`${API_URL}/plugins/${pluginName}/execute`, params);\n        return response.data;\n    } catch (error) {\n        console.error(`Error executing ${pluginName} plugin:`, error);\n        throw error;\n    }\n};\n\nexport const addPluginToCard = async (cardId: string, plugin: string) => {\n    try {\n        const response = await axios.put(`${API_URL}/cards/${cardId}/plugin`, { plugin });\n        return response.data;\n    } catch (error) {\n        console.error('Error adding plugin to card:', error);\n        throw error;\n    }\n};\n\nexport const removePluginFromCard = async (cardId: string, plugin: string) => {\n    try {\n        const response = await axios.put(`${API_URL}/cards/${cardId}/remove-plugin`, { plugin });\n        return response.data;\n    } catch (error) {\n        console.error(`Error removing plugin to card with id ${cardId}:`, error);\n        throw error;\n    }\n};","import { useReducer, useRef, useDebugValue, useEffect, useLayoutEffect } from 'react';\n\nfunction createStore(createState) {\n  let state;\n  const listeners = /* @__PURE__ */ new Set();\n  const setState = (partial, replace) => {\n    const nextState = typeof partial === \"function\" ? partial(state) : partial;\n    if (nextState !== state) {\n      const previousState = state;\n      state = replace ? nextState : Object.assign({}, state, nextState);\n      listeners.forEach((listener) => listener(state, previousState));\n    }\n  };\n  const getState = () => state;\n  const subscribeWithSelector = (listener, selector = getState, equalityFn = Object.is) => {\n    console.warn(\"[DEPRECATED] Please use `subscribeWithSelector` middleware\");\n    let currentSlice = selector(state);\n    function listenerToAdd() {\n      const nextSlice = selector(state);\n      if (!equalityFn(currentSlice, nextSlice)) {\n        const previousSlice = currentSlice;\n        listener(currentSlice = nextSlice, previousSlice);\n      }\n    }\n    listeners.add(listenerToAdd);\n    return () => listeners.delete(listenerToAdd);\n  };\n  const subscribe = (listener, selector, equalityFn) => {\n    if (selector || equalityFn) {\n      return subscribeWithSelector(listener, selector, equalityFn);\n    }\n    listeners.add(listener);\n    return () => listeners.delete(listener);\n  };\n  const destroy = () => listeners.clear();\n  const api = { setState, getState, subscribe, destroy };\n  state = createState(setState, getState, api);\n  return api;\n}\n\nconst isSSR = typeof window === \"undefined\" || !window.navigator || /ServerSideRendering|^Deno\\//.test(window.navigator.userAgent);\nconst useIsomorphicLayoutEffect = isSSR ? useEffect : useLayoutEffect;\nfunction create(createState) {\n  const api = typeof createState === \"function\" ? createStore(createState) : createState;\n  const useStore = (selector = api.getState, equalityFn = Object.is) => {\n    const [, forceUpdate] = useReducer((c) => c + 1, 0);\n    const state = api.getState();\n    const stateRef = useRef(state);\n    const selectorRef = useRef(selector);\n    const equalityFnRef = useRef(equalityFn);\n    const erroredRef = useRef(false);\n    const currentSliceRef = useRef();\n    if (currentSliceRef.current === void 0) {\n      currentSliceRef.current = selector(state);\n    }\n    let newStateSlice;\n    let hasNewStateSlice = false;\n    if (stateRef.current !== state || selectorRef.current !== selector || equalityFnRef.current !== equalityFn || erroredRef.current) {\n      newStateSlice = selector(state);\n      hasNewStateSlice = !equalityFn(currentSliceRef.current, newStateSlice);\n    }\n    useIsomorphicLayoutEffect(() => {\n      if (hasNewStateSlice) {\n        currentSliceRef.current = newStateSlice;\n      }\n      stateRef.current = state;\n      selectorRef.current = selector;\n      equalityFnRef.current = equalityFn;\n      erroredRef.current = false;\n    });\n    const stateBeforeSubscriptionRef = useRef(state);\n    useIsomorphicLayoutEffect(() => {\n      const listener = () => {\n        try {\n          const nextState = api.getState();\n          const nextStateSlice = selectorRef.current(nextState);\n          if (!equalityFnRef.current(currentSliceRef.current, nextStateSlice)) {\n            stateRef.current = nextState;\n            currentSliceRef.current = nextStateSlice;\n            forceUpdate();\n          }\n        } catch (error) {\n          erroredRef.current = true;\n          forceUpdate();\n        }\n      };\n      const unsubscribe = api.subscribe(listener);\n      if (api.getState() !== stateBeforeSubscriptionRef.current) {\n        listener();\n      }\n      return unsubscribe;\n    }, []);\n    const sliceToReturn = hasNewStateSlice ? newStateSlice : currentSliceRef.current;\n    useDebugValue(sliceToReturn);\n    return sliceToReturn;\n  };\n  Object.assign(useStore, api);\n  useStore[Symbol.iterator] = function() {\n    console.warn(\"[useStore, api] = create() is deprecated and will be removed in v4\");\n    const items = [useStore, api];\n    return {\n      next() {\n        const done = items.length <= 0;\n        return { value: items.shift(), done };\n      }\n    };\n  };\n  return useStore;\n}\n\nexport { create as default };\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n  for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n    if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n    _[t] = [];\n  }\n  return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n  this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n    return {type: t, name: name};\n  });\n}\n\nDispatch.prototype = dispatch.prototype = {\n  constructor: Dispatch,\n  on: function(typename, callback) {\n    var _ = this._,\n        T = parseTypenames(typename + \"\", _),\n        t,\n        i = -1,\n        n = T.length;\n\n    // If no callback was specified, return the callback of the given type and name.\n    if (arguments.length < 2) {\n      while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n      return;\n    }\n\n    // If a type was specified, set the callback for the given type and name.\n    // Otherwise, if a null callback was specified, remove callbacks of the given name.\n    if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n    while (++i < n) {\n      if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n      else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n    }\n\n    return this;\n  },\n  copy: function() {\n    var copy = {}, _ = this._;\n    for (var t in _) copy[t] = _[t].slice();\n    return new Dispatch(copy);\n  },\n  call: function(type, that) {\n    if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  },\n  apply: function(type, that, args) {\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  }\n};\n\nfunction get(type, name) {\n  for (var i = 0, n = type.length, c; i < n; ++i) {\n    if ((c = type[i]).name === name) {\n      return c.value;\n    }\n  }\n}\n\nfunction set(type, name, callback) {\n  for (var i = 0, n = type.length; i < n; ++i) {\n    if (type[i].name === name) {\n      type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n      break;\n    }\n  }\n  if (callback != null) type.push({name: name, value: callback});\n  return type;\n}\n\nexport default dispatch;\n","function none() {}\n\nexport default function(selector) {\n  return selector == null ? none : function() {\n    return this.querySelector(selector);\n  };\n}\n","function empty() {\n  return [];\n}\n\nexport default function(selector) {\n  return selector == null ? empty : function() {\n    return this.querySelectorAll(selector);\n  };\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n  return function() {\n    return array(select.apply(this, arguments));\n  };\n}\n\nexport default function(select) {\n  if (typeof select === \"function\") select = arrayAll(select);\n  else select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        subgroups.push(select.call(node, node.__data__, i, group));\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, parents);\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n  return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","export default function(selector) {\n  return function() {\n    return this.matches(selector);\n  };\n}\n\nexport function childMatcher(selector) {\n  return function(node) {\n    return node.matches(selector);\n  };\n}\n\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n  return function() {\n    return find.call(this.children, match);\n  };\n}\n\nfunction childFirst() {\n  return this.firstElementChild;\n}\n\nexport default function(match) {\n  return this.select(match == null ? childFirst\n      : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n  return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n  return function() {\n    return filter.call(this.children, match);\n  };\n}\n\nexport default function(match) {\n  return this.selectAll(match == null ? children\n      : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","export default function(update) {\n  return new Array(update.length);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n  return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n  this.ownerDocument = parent.ownerDocument;\n  this.namespaceURI = parent.namespaceURI;\n  this._next = null;\n  this._parent = parent;\n  this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n  constructor: EnterNode,\n  appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n  insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n  querySelector: function(selector) { return this._parent.querySelector(selector); },\n  querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n  var i = 0,\n      node,\n      groupLength = group.length,\n      dataLength = data.length;\n\n  // Put any non-null nodes that fit into update.\n  // Put any null nodes into enter.\n  // Put any remaining data into enter.\n  for (; i < dataLength; ++i) {\n    if (node = group[i]) {\n      node.__data__ = data[i];\n      update[i] = node;\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Put any non-null nodes that don’t fit into exit.\n  for (; i < groupLength; ++i) {\n    if (node = group[i]) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n  var i,\n      node,\n      nodeByKeyValue = new Map,\n      groupLength = group.length,\n      dataLength = data.length,\n      keyValues = new Array(groupLength),\n      keyValue;\n\n  // Compute the key for each node.\n  // If multiple nodes have the same key, the duplicates are added to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if (node = group[i]) {\n      keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n      if (nodeByKeyValue.has(keyValue)) {\n        exit[i] = node;\n      } else {\n        nodeByKeyValue.set(keyValue, node);\n      }\n    }\n  }\n\n  // Compute the key for each datum.\n  // If there a node associated with this key, join and add it to update.\n  // If there is not (or the key is a duplicate), add it to enter.\n  for (i = 0; i < dataLength; ++i) {\n    keyValue = key.call(parent, data[i], i, data) + \"\";\n    if (node = nodeByKeyValue.get(keyValue)) {\n      update[i] = node;\n      node.__data__ = data[i];\n      nodeByKeyValue.delete(keyValue);\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Add any remaining nodes that were not bound to data to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction datum(node) {\n  return node.__data__;\n}\n\nexport default function(value, key) {\n  if (!arguments.length) return Array.from(this, datum);\n\n  var bind = key ? bindKey : bindIndex,\n      parents = this._parents,\n      groups = this._groups;\n\n  if (typeof value !== \"function\") value = constant(value);\n\n  for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n    var parent = parents[j],\n        group = groups[j],\n        groupLength = group.length,\n        data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n        dataLength = data.length,\n        enterGroup = enter[j] = new Array(dataLength),\n        updateGroup = update[j] = new Array(dataLength),\n        exitGroup = exit[j] = new Array(groupLength);\n\n    bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n    // Now connect the enter nodes to their following update node, such that\n    // appendChild can insert the materialized enter node before this node,\n    // rather than at the end of the parent node.\n    for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n      if (previous = enterGroup[i0]) {\n        if (i0 >= i1) i1 = i0 + 1;\n        while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n        previous._next = next || null;\n      }\n    }\n  }\n\n  update = new Selection(update, parents);\n  update._enter = enter;\n  update._exit = exit;\n  return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n  return typeof data === \"object\" && \"length\" in data\n    ? data // Array, TypedArray, NodeList, array-like\n    : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n  if (!compare) compare = ascending;\n\n  function compareNode(a, b) {\n    return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n  }\n\n  for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        sortgroup[i] = node;\n      }\n    }\n    sortgroup.sort(compareNode);\n  }\n\n  return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n  svg: \"http://www.w3.org/2000/svg\",\n  xhtml: xhtml,\n  xlink: \"http://www.w3.org/1999/xlink\",\n  xml: \"http://www.w3.org/XML/1998/namespace\",\n  xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n  var prefix = name += \"\", i = prefix.indexOf(\":\");\n  if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n  return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, value) {\n  return function() {\n    this.setAttribute(name, value);\n  };\n}\n\nfunction attrConstantNS(fullname, value) {\n  return function() {\n    this.setAttributeNS(fullname.space, fullname.local, value);\n  };\n}\n\nfunction attrFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttribute(name);\n    else this.setAttribute(name, v);\n  };\n}\n\nfunction attrFunctionNS(fullname, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n    else this.setAttributeNS(fullname.space, fullname.local, v);\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name);\n\n  if (arguments.length < 2) {\n    var node = this.node();\n    return fullname.local\n        ? node.getAttributeNS(fullname.space, fullname.local)\n        : node.getAttribute(fullname);\n  }\n\n  return this.each((value == null\n      ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)\n      : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n  return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n      || (node.document && node) // node is a Window\n      || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, value, priority) {\n  return function() {\n    this.style.setProperty(name, value, priority);\n  };\n}\n\nfunction styleFunction(name, value, priority) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.style.removeProperty(name);\n    else this.style.setProperty(name, v, priority);\n  };\n}\n\nexport default function(name, value, priority) {\n  return arguments.length > 1\n      ? this.each((value == null\n            ? styleRemove : typeof value === \"function\"\n            ? styleFunction\n            : styleConstant)(name, value, priority == null ? \"\" : priority))\n      : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n  return node.style.getPropertyValue(name)\n      || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n  return function() {\n    delete this[name];\n  };\n}\n\nfunction propertyConstant(name, value) {\n  return function() {\n    this[name] = value;\n  };\n}\n\nfunction propertyFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) delete this[name];\n    else this[name] = v;\n  };\n}\n\nexport default function(name, value) {\n  return arguments.length > 1\n      ? this.each((value == null\n          ? propertyRemove : typeof value === \"function\"\n          ? propertyFunction\n          : propertyConstant)(name, value))\n      : this.node()[name];\n}\n","function classArray(string) {\n  return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n  return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n  this._node = node;\n  this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n  add: function(name) {\n    var i = this._names.indexOf(name);\n    if (i < 0) {\n      this._names.push(name);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  remove: function(name) {\n    var i = this._names.indexOf(name);\n    if (i >= 0) {\n      this._names.splice(i, 1);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  contains: function(name) {\n    return this._names.indexOf(name) >= 0;\n  }\n};\n\nfunction classedAdd(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n  return function() {\n    classedAdd(this, names);\n  };\n}\n\nfunction classedFalse(names) {\n  return function() {\n    classedRemove(this, names);\n  };\n}\n\nfunction classedFunction(names, value) {\n  return function() {\n    (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n  };\n}\n\nexport default function(name, value) {\n  var names = classArray(name + \"\");\n\n  if (arguments.length < 2) {\n    var list = classList(this.node()), i = -1, n = names.length;\n    while (++i < n) if (!list.contains(names[i])) return false;\n    return true;\n  }\n\n  return this.each((typeof value === \"function\"\n      ? classedFunction : value\n      ? classedTrue\n      : classedFalse)(names, value));\n}\n","function textRemove() {\n  this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.textContent = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? textRemove : (typeof value === \"function\"\n          ? textFunction\n          : textConstant)(value))\n      : this.node().textContent;\n}\n","function htmlRemove() {\n  this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n  return function() {\n    this.innerHTML = value;\n  };\n}\n\nfunction htmlFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.innerHTML = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? htmlRemove : (typeof value === \"function\"\n          ? htmlFunction\n          : htmlConstant)(value))\n      : this.node().innerHTML;\n}\n","function raise() {\n  if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n  return this.each(raise);\n}\n","function lower() {\n  if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n  return this.each(lower);\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n  return function() {\n    var document = this.ownerDocument,\n        uri = this.namespaceURI;\n    return uri === xhtml && document.documentElement.namespaceURI === xhtml\n        ? document.createElement(name)\n        : document.createElementNS(uri, name);\n  };\n}\n\nfunction creatorFixed(fullname) {\n  return function() {\n    return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n  };\n}\n\nexport default function(name) {\n  var fullname = namespace(name);\n  return (fullname.local\n      ? creatorFixed\n      : creatorInherit)(fullname);\n}\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n  return null;\n}\n\nexport default function(name, before) {\n  var create = typeof name === \"function\" ? name : creator(name),\n      select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n  return this.select(function() {\n    return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n  });\n}\n","function remove() {\n  var parent = this.parentNode;\n  if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n  return this.each(remove);\n}\n","function selection_cloneShallow() {\n  var clone = this.cloneNode(false), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n  var clone = this.cloneNode(true), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n  return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","function contextListener(listener) {\n  return function(event) {\n    listener.call(this, event, this.__data__);\n  };\n}\n\nfunction parseTypenames(typenames) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    return {type: t, name: name};\n  });\n}\n\nfunction onRemove(typename) {\n  return function() {\n    var on = this.__on;\n    if (!on) return;\n    for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n      if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.options);\n      } else {\n        on[++i] = o;\n      }\n    }\n    if (++i) on.length = i;\n    else delete this.__on;\n  };\n}\n\nfunction onAdd(typename, value, options) {\n  return function() {\n    var on = this.__on, o, listener = contextListener(value);\n    if (on) for (var j = 0, m = on.length; j < m; ++j) {\n      if ((o = on[j]).type === typename.type && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.options);\n        this.addEventListener(o.type, o.listener = listener, o.options = options);\n        o.value = value;\n        return;\n      }\n    }\n    this.addEventListener(typename.type, listener, options);\n    o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n    if (!on) this.__on = [o];\n    else on.push(o);\n  };\n}\n\nexport default function(typename, value, options) {\n  var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n  if (arguments.length < 2) {\n    var on = this.node().__on;\n    if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n      for (i = 0, o = on[j]; i < n; ++i) {\n        if ((t = typenames[i]).type === o.type && t.name === o.name) {\n          return o.value;\n        }\n      }\n    }\n    return;\n  }\n\n  on = value ? onAdd : onRemove;\n  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n  return this;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n  var window = defaultView(node),\n      event = window.CustomEvent;\n\n  if (typeof event === \"function\") {\n    event = new event(type, params);\n  } else {\n    event = window.document.createEvent(\"Event\");\n    if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n    else event.initEvent(type, false, false);\n  }\n\n  node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params);\n  };\n}\n\nfunction dispatchFunction(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params.apply(this, arguments));\n  };\n}\n\nexport default function(type, params) {\n  return this.each((typeof params === \"function\"\n      ? dispatchFunction\n      : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n  this._groups = groups;\n  this._parents = parents;\n}\n\nfunction selection() {\n  return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n  return this;\n}\n\nSelection.prototype = selection.prototype = {\n  constructor: Selection,\n  select: selection_select,\n  selectAll: selection_selectAll,\n  selectChild: selection_selectChild,\n  selectChildren: selection_selectChildren,\n  filter: selection_filter,\n  data: selection_data,\n  enter: selection_enter,\n  exit: selection_exit,\n  join: selection_join,\n  merge: selection_merge,\n  selection: selection_selection,\n  order: selection_order,\n  sort: selection_sort,\n  call: selection_call,\n  nodes: selection_nodes,\n  node: selection_node,\n  size: selection_size,\n  empty: selection_empty,\n  each: selection_each,\n  attr: selection_attr,\n  style: selection_style,\n  property: selection_property,\n  classed: selection_classed,\n  text: selection_text,\n  html: selection_html,\n  raise: selection_raise,\n  lower: selection_lower,\n  append: selection_append,\n  insert: selection_insert,\n  remove: selection_remove,\n  clone: selection_clone,\n  datum: selection_datum,\n  on: selection_on,\n  dispatch: selection_dispatch,\n  [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n  return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n  var enter = this.enter(), update = this, exit = this.exit();\n  if (typeof onenter === \"function\") {\n    enter = onenter(enter);\n    if (enter) enter = enter.selection();\n  } else {\n    enter = enter.append(onenter + \"\");\n  }\n  if (onupdate != null) {\n    update = onupdate(update);\n    if (update) update = update.selection();\n  }\n  if (onexit == null) exit.remove(); else onexit(exit);\n  return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n  var selection = context.selection ? context.selection() : context;\n\n  for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Selection(merges, this._parents);\n}\n","export default function() {\n\n  for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n    for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n      if (node = group[i]) {\n        if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n        next = node;\n      }\n    }\n  }\n\n  return this;\n}\n","export default function() {\n  var callback = arguments[0];\n  arguments[0] = this;\n  callback.apply(null, arguments);\n  return this;\n}\n","export default function() {\n  return Array.from(this);\n}\n","export default function() {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n      var node = group[i];\n      if (node) return node;\n    }\n  }\n\n  return null;\n}\n","export default function() {\n  let size = 0;\n  for (const node of this) ++size; // eslint-disable-line no-unused-vars\n  return size;\n}\n","export default function() {\n  return !this.node();\n}\n","export default function(callback) {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) callback.call(node, node.__data__, i, group);\n    }\n  }\n\n  return this;\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n  var create = typeof name === \"function\" ? name : creator(name);\n  return this.select(function() {\n    return this.appendChild(create.apply(this, arguments));\n  });\n}\n","export default function(value) {\n  return arguments.length\n      ? this.property(\"__data__\", value)\n      : this.node().__data__;\n}\n","export default function*() {\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) yield node;\n    }\n  }\n}\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n  return typeof selector === \"string\"\n      ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n      : new Selection([[selector]], root);\n}\n","// These are typically used in conjunction with noevent to ensure that we can\n// preventDefault on the event.\nexport const nonpassive = {passive: false};\nexport const nonpassivecapture = {capture: true, passive: false};\n\nexport function nopropagation(event) {\n  event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent, {nonpassivecapture} from \"./noevent.js\";\n\nexport default function(view) {\n  var root = view.document.documentElement,\n      selection = select(view).on(\"dragstart.drag\", noevent, nonpassivecapture);\n  if (\"onselectstart\" in root) {\n    selection.on(\"selectstart.drag\", noevent, nonpassivecapture);\n  } else {\n    root.__noselect = root.style.MozUserSelect;\n    root.style.MozUserSelect = \"none\";\n  }\n}\n\nexport function yesdrag(view, noclick) {\n  var root = view.document.documentElement,\n      selection = select(view).on(\"dragstart.drag\", null);\n  if (noclick) {\n    selection.on(\"click.drag\", noevent, nonpassivecapture);\n    setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n  }\n  if (\"onselectstart\" in root) {\n    selection.on(\"selectstart.drag\", null);\n  } else {\n    root.style.MozUserSelect = root.__noselect;\n    delete root.__noselect;\n  }\n}\n","var epsilon2 = 1e-12;\n\nfunction cosh(x) {\n  return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n  return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n  return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\nexport default (function zoomRho(rho, rho2, rho4) {\n\n  // p0 = [ux0, uy0, w0]\n  // p1 = [ux1, uy1, w1]\n  function zoom(p0, p1) {\n    var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n        ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n        dx = ux1 - ux0,\n        dy = uy1 - uy0,\n        d2 = dx * dx + dy * dy,\n        i,\n        S;\n\n    // Special case for u0 ≅ u1.\n    if (d2 < epsilon2) {\n      S = Math.log(w1 / w0) / rho;\n      i = function(t) {\n        return [\n          ux0 + t * dx,\n          uy0 + t * dy,\n          w0 * Math.exp(rho * t * S)\n        ];\n      }\n    }\n\n    // General case.\n    else {\n      var d1 = Math.sqrt(d2),\n          b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n          b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n          r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n          r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n      S = (r1 - r0) / rho;\n      i = function(t) {\n        var s = t * S,\n            coshr0 = cosh(r0),\n            u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n        return [\n          ux0 + u * dx,\n          uy0 + u * dy,\n          w0 * coshr0 / cosh(rho * s + r0)\n        ];\n      }\n    }\n\n    i.duration = S * 1000 * rho / Math.SQRT2;\n\n    return i;\n  }\n\n  zoom.rho = function(_) {\n    var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n    return zoomRho(_1, _2, _4);\n  };\n\n  return zoom;\n})(Math.SQRT2, 2, 4);\n","import sourceEvent from \"./sourceEvent.js\";\n\nexport default function(event, node) {\n  event = sourceEvent(event);\n  if (node === undefined) node = event.currentTarget;\n  if (node) {\n    var svg = node.ownerSVGElement || node;\n    if (svg.createSVGPoint) {\n      var point = svg.createSVGPoint();\n      point.x = event.clientX, point.y = event.clientY;\n      point = point.matrixTransform(node.getScreenCTM().inverse());\n      return [point.x, point.y];\n    }\n    if (node.getBoundingClientRect) {\n      var rect = node.getBoundingClientRect();\n      return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n    }\n  }\n  return [event.pageX, event.pageY];\n}\n","export default function(event) {\n  let sourceEvent;\n  while (sourceEvent = event.sourceEvent) event = sourceEvent;\n  return event;\n}\n","var frame = 0, // is an animation frame pending?\n    timeout = 0, // is a timeout pending?\n    interval = 0, // are any timers active?\n    pokeDelay = 1000, // how frequently we check for clock skew\n    taskHead,\n    taskTail,\n    clockLast = 0,\n    clockNow = 0,\n    clockSkew = 0,\n    clock = typeof performance === \"object\" && performance.now ? performance : Date,\n    setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n  clockNow = 0;\n}\n\nexport function Timer() {\n  this._call =\n  this._time =\n  this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n  constructor: Timer,\n  restart: function(callback, delay, time) {\n    if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n    if (!this._next && taskTail !== this) {\n      if (taskTail) taskTail._next = this;\n      else taskHead = this;\n      taskTail = this;\n    }\n    this._call = callback;\n    this._time = time;\n    sleep();\n  },\n  stop: function() {\n    if (this._call) {\n      this._call = null;\n      this._time = Infinity;\n      sleep();\n    }\n  }\n};\n\nexport function timer(callback, delay, time) {\n  var t = new Timer;\n  t.restart(callback, delay, time);\n  return t;\n}\n\nexport function timerFlush() {\n  now(); // Get the current time, if not already set.\n  ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n  var t = taskHead, e;\n  while (t) {\n    if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n    t = t._next;\n  }\n  --frame;\n}\n\nfunction wake() {\n  clockNow = (clockLast = clock.now()) + clockSkew;\n  frame = timeout = 0;\n  try {\n    timerFlush();\n  } finally {\n    frame = 0;\n    nap();\n    clockNow = 0;\n  }\n}\n\nfunction poke() {\n  var now = clock.now(), delay = now - clockLast;\n  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n  var t0, t1 = taskHead, t2, time = Infinity;\n  while (t1) {\n    if (t1._call) {\n      if (time > t1._time) time = t1._time;\n      t0 = t1, t1 = t1._next;\n    } else {\n      t2 = t1._next, t1._next = null;\n      t1 = t0 ? t0._next = t2 : taskHead = t2;\n    }\n  }\n  taskTail = t0;\n  sleep(time);\n}\n\nfunction sleep(time) {\n  if (frame) return; // Soonest alarm already set, or will be.\n  if (timeout) timeout = clearTimeout(timeout);\n  var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n  if (delay > 24) {\n    if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n    if (interval) interval = clearInterval(interval);\n  } else {\n    if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n    frame = 1, setFrame(wake);\n  }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n  var t = new Timer;\n  delay = delay == null ? 0 : +delay;\n  t.restart(elapsed => {\n    t.stop();\n    callback(elapsed + delay);\n  }, delay, time);\n  return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n  var schedules = node.__transition;\n  if (!schedules) node.__transition = {};\n  else if (id in schedules) return;\n  create(node, id, {\n    name: name,\n    index: index, // For context during callback.\n    group: group, // For context during callback.\n    on: emptyOn,\n    tween: emptyTween,\n    time: timing.time,\n    delay: timing.delay,\n    duration: timing.duration,\n    ease: timing.ease,\n    timer: null,\n    state: CREATED\n  });\n}\n\nexport function init(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n  return schedule;\n}\n\nexport function set(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n  return schedule;\n}\n\nexport function get(node, id) {\n  var schedule = node.__transition;\n  if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n  return schedule;\n}\n\nfunction create(node, id, self) {\n  var schedules = node.__transition,\n      tween;\n\n  // Initialize the self timer when the transition is created.\n  // Note the actual delay is not known until the first callback!\n  schedules[id] = self;\n  self.timer = timer(schedule, 0, self.time);\n\n  function schedule(elapsed) {\n    self.state = SCHEDULED;\n    self.timer.restart(start, self.delay, self.time);\n\n    // If the elapsed delay is less than our first sleep, start immediately.\n    if (self.delay <= elapsed) start(elapsed - self.delay);\n  }\n\n  function start(elapsed) {\n    var i, j, n, o;\n\n    // If the state is not SCHEDULED, then we previously errored on start.\n    if (self.state !== SCHEDULED) return stop();\n\n    for (i in schedules) {\n      o = schedules[i];\n      if (o.name !== self.name) continue;\n\n      // While this element already has a starting transition during this frame,\n      // defer starting an interrupting transition until that transition has a\n      // chance to tick (and possibly end); see d3/d3-transition#54!\n      if (o.state === STARTED) return timeout(start);\n\n      // Interrupt the active transition, if any.\n      if (o.state === RUNNING) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n\n      // Cancel any pre-empted transitions.\n      else if (+i < id) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n    }\n\n    // Defer the first tick to end of the current frame; see d3/d3#1576.\n    // Note the transition may be canceled after start and before the first tick!\n    // Note this must be scheduled before the start event; see d3/d3-transition#16!\n    // Assuming this is successful, subsequent callbacks go straight to tick.\n    timeout(function() {\n      if (self.state === STARTED) {\n        self.state = RUNNING;\n        self.timer.restart(tick, self.delay, self.time);\n        tick(elapsed);\n      }\n    });\n\n    // Dispatch the start event.\n    // Note this must be done before the tween are initialized.\n    self.state = STARTING;\n    self.on.call(\"start\", node, node.__data__, self.index, self.group);\n    if (self.state !== STARTING) return; // interrupted\n    self.state = STARTED;\n\n    // Initialize the tween, deleting null tween.\n    tween = new Array(n = self.tween.length);\n    for (i = 0, j = -1; i < n; ++i) {\n      if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n        tween[++j] = o;\n      }\n    }\n    tween.length = j + 1;\n  }\n\n  function tick(elapsed) {\n    var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n        i = -1,\n        n = tween.length;\n\n    while (++i < n) {\n      tween[i].call(node, t);\n    }\n\n    // Dispatch the end event.\n    if (self.state === ENDING) {\n      self.on.call(\"end\", node, node.__data__, self.index, self.group);\n      stop();\n    }\n  }\n\n  function stop() {\n    self.state = ENDED;\n    self.timer.stop();\n    delete schedules[id];\n    for (var i in schedules) return; // eslint-disable-line no-unused-vars\n    delete node.__transition;\n  }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n  var schedules = node.__transition,\n      schedule,\n      active,\n      empty = true,\n      i;\n\n  if (!schedules) return;\n\n  name = name == null ? null : name + \"\";\n\n  for (i in schedules) {\n    if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n    active = schedule.state > STARTING && schedule.state < ENDING;\n    schedule.state = ENDED;\n    schedule.timer.stop();\n    schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n    delete schedules[i];\n  }\n\n  if (empty) delete node.__transition;\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return a * (1 - t) + b * t;\n  };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n  translateX: 0,\n  translateY: 0,\n  rotate: 0,\n  skewX: 0,\n  scaleX: 1,\n  scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n  var scaleX, scaleY, skewX;\n  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n  return {\n    translateX: e,\n    translateY: f,\n    rotate: Math.atan2(b, a) * degrees,\n    skewX: Math.atan(skewX) * degrees,\n    scaleX: scaleX,\n    scaleY: scaleY\n  };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n  const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n  return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n  if (value == null) return identity;\n  if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n  svgNode.setAttribute(\"transform\", value);\n  if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n  value = value.matrix;\n  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n  function pop(s) {\n    return s.length ? s.pop() + \" \" : \"\";\n  }\n\n  function translate(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb || yb) {\n      s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n    }\n  }\n\n  function rotate(a, b, s, q) {\n    if (a !== b) {\n      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n      q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"rotate(\" + b + degParen);\n    }\n  }\n\n  function skewX(a, b, s, q) {\n    if (a !== b) {\n      q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"skewX(\" + b + degParen);\n    }\n  }\n\n  function scale(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb !== 1 || yb !== 1) {\n      s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n    }\n  }\n\n  return function(a, b) {\n    var s = [], // string constants and placeholders\n        q = []; // number interpolators\n    a = parse(a), b = parse(b);\n    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n    rotate(a.rotate, b.rotate, s, q);\n    skewX(a.skewX, b.skewX, s, q);\n    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n    a = b = null; // gc\n    return function(t) {\n      var i = -1, n = q.length, o;\n      while (++i < n) s[(o = q[i]).i] = o.x(t);\n      return s.join(\"\");\n    };\n  };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n  var tween0, tween1;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we’re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = tween0 = tween;\n      for (var i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1 = tween1.slice();\n          tween1.splice(i, 1);\n          break;\n        }\n      }\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nfunction tweenFunction(id, name, value) {\n  var tween0, tween1;\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we’re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = (tween0 = tween).slice();\n      for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1[i] = t;\n          break;\n        }\n      }\n      if (i === n) tween1.push(t);\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nexport default function(name, value) {\n  var id = this._id;\n\n  name += \"\";\n\n  if (arguments.length < 2) {\n    var tween = get(this.node(), id).tween;\n    for (var i = 0, n = tween.length, t; i < n; ++i) {\n      if ((t = tween[i]).name === name) {\n        return t.value;\n      }\n    }\n    return null;\n  }\n\n  return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n  var id = transition._id;\n\n  transition.each(function() {\n    var schedule = set(this, id);\n    (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n  });\n\n  return function(node) {\n    return get(node, id).value[name];\n  };\n}\n","export default function(constructor, factory, prototype) {\n  constructor.prototype = factory.prototype = prototype;\n  prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n  var prototype = Object.create(parent.prototype);\n  for (var key in definition) prototype[key] = definition[key];\n  return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n    reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n    reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n    reHex = /^#([0-9a-f]{3,8})$/,\n    reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n    reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n    reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n    reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n    reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n    reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n  aliceblue: 0xf0f8ff,\n  antiquewhite: 0xfaebd7,\n  aqua: 0x00ffff,\n  aquamarine: 0x7fffd4,\n  azure: 0xf0ffff,\n  beige: 0xf5f5dc,\n  bisque: 0xffe4c4,\n  black: 0x000000,\n  blanchedalmond: 0xffebcd,\n  blue: 0x0000ff,\n  blueviolet: 0x8a2be2,\n  brown: 0xa52a2a,\n  burlywood: 0xdeb887,\n  cadetblue: 0x5f9ea0,\n  chartreuse: 0x7fff00,\n  chocolate: 0xd2691e,\n  coral: 0xff7f50,\n  cornflowerblue: 0x6495ed,\n  cornsilk: 0xfff8dc,\n  crimson: 0xdc143c,\n  cyan: 0x00ffff,\n  darkblue: 0x00008b,\n  darkcyan: 0x008b8b,\n  darkgoldenrod: 0xb8860b,\n  darkgray: 0xa9a9a9,\n  darkgreen: 0x006400,\n  darkgrey: 0xa9a9a9,\n  darkkhaki: 0xbdb76b,\n  darkmagenta: 0x8b008b,\n  darkolivegreen: 0x556b2f,\n  darkorange: 0xff8c00,\n  darkorchid: 0x9932cc,\n  darkred: 0x8b0000,\n  darksalmon: 0xe9967a,\n  darkseagreen: 0x8fbc8f,\n  darkslateblue: 0x483d8b,\n  darkslategray: 0x2f4f4f,\n  darkslategrey: 0x2f4f4f,\n  darkturquoise: 0x00ced1,\n  darkviolet: 0x9400d3,\n  deeppink: 0xff1493,\n  deepskyblue: 0x00bfff,\n  dimgray: 0x696969,\n  dimgrey: 0x696969,\n  dodgerblue: 0x1e90ff,\n  firebrick: 0xb22222,\n  floralwhite: 0xfffaf0,\n  forestgreen: 0x228b22,\n  fuchsia: 0xff00ff,\n  gainsboro: 0xdcdcdc,\n  ghostwhite: 0xf8f8ff,\n  gold: 0xffd700,\n  goldenrod: 0xdaa520,\n  gray: 0x808080,\n  green: 0x008000,\n  greenyellow: 0xadff2f,\n  grey: 0x808080,\n  honeydew: 0xf0fff0,\n  hotpink: 0xff69b4,\n  indianred: 0xcd5c5c,\n  indigo: 0x4b0082,\n  ivory: 0xfffff0,\n  khaki: 0xf0e68c,\n  lavender: 0xe6e6fa,\n  lavenderblush: 0xfff0f5,\n  lawngreen: 0x7cfc00,\n  lemonchiffon: 0xfffacd,\n  lightblue: 0xadd8e6,\n  lightcoral: 0xf08080,\n  lightcyan: 0xe0ffff,\n  lightgoldenrodyellow: 0xfafad2,\n  lightgray: 0xd3d3d3,\n  lightgreen: 0x90ee90,\n  lightgrey: 0xd3d3d3,\n  lightpink: 0xffb6c1,\n  lightsalmon: 0xffa07a,\n  lightseagreen: 0x20b2aa,\n  lightskyblue: 0x87cefa,\n  lightslategray: 0x778899,\n  lightslategrey: 0x778899,\n  lightsteelblue: 0xb0c4de,\n  lightyellow: 0xffffe0,\n  lime: 0x00ff00,\n  limegreen: 0x32cd32,\n  linen: 0xfaf0e6,\n  magenta: 0xff00ff,\n  maroon: 0x800000,\n  mediumaquamarine: 0x66cdaa,\n  mediumblue: 0x0000cd,\n  mediumorchid: 0xba55d3,\n  mediumpurple: 0x9370db,\n  mediumseagreen: 0x3cb371,\n  mediumslateblue: 0x7b68ee,\n  mediumspringgreen: 0x00fa9a,\n  mediumturquoise: 0x48d1cc,\n  mediumvioletred: 0xc71585,\n  midnightblue: 0x191970,\n  mintcream: 0xf5fffa,\n  mistyrose: 0xffe4e1,\n  moccasin: 0xffe4b5,\n  navajowhite: 0xffdead,\n  navy: 0x000080,\n  oldlace: 0xfdf5e6,\n  olive: 0x808000,\n  olivedrab: 0x6b8e23,\n  orange: 0xffa500,\n  orangered: 0xff4500,\n  orchid: 0xda70d6,\n  palegoldenrod: 0xeee8aa,\n  palegreen: 0x98fb98,\n  paleturquoise: 0xafeeee,\n  palevioletred: 0xdb7093,\n  papayawhip: 0xffefd5,\n  peachpuff: 0xffdab9,\n  peru: 0xcd853f,\n  pink: 0xffc0cb,\n  plum: 0xdda0dd,\n  powderblue: 0xb0e0e6,\n  purple: 0x800080,\n  rebeccapurple: 0x663399,\n  red: 0xff0000,\n  rosybrown: 0xbc8f8f,\n  royalblue: 0x4169e1,\n  saddlebrown: 0x8b4513,\n  salmon: 0xfa8072,\n  sandybrown: 0xf4a460,\n  seagreen: 0x2e8b57,\n  seashell: 0xfff5ee,\n  sienna: 0xa0522d,\n  silver: 0xc0c0c0,\n  skyblue: 0x87ceeb,\n  slateblue: 0x6a5acd,\n  slategray: 0x708090,\n  slategrey: 0x708090,\n  snow: 0xfffafa,\n  springgreen: 0x00ff7f,\n  steelblue: 0x4682b4,\n  tan: 0xd2b48c,\n  teal: 0x008080,\n  thistle: 0xd8bfd8,\n  tomato: 0xff6347,\n  turquoise: 0x40e0d0,\n  violet: 0xee82ee,\n  wheat: 0xf5deb3,\n  white: 0xffffff,\n  whitesmoke: 0xf5f5f5,\n  yellow: 0xffff00,\n  yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n  copy(channels) {\n    return Object.assign(new this.constructor, this, channels);\n  },\n  displayable() {\n    return this.rgb().displayable();\n  },\n  hex: color_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: color_formatHex,\n  formatHex8: color_formatHex8,\n  formatHsl: color_formatHsl,\n  formatRgb: color_formatRgb,\n  toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n  return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n  return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n  return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n  return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n  var m, l;\n  format = (format + \"\").trim().toLowerCase();\n  return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n      : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n      : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n      : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n      : null) // invalid hex\n      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n      : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n      : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n      : null;\n}\n\nfunction rgbn(n) {\n  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n  if (a <= 0) r = g = b = NaN;\n  return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Rgb;\n  o = o.rgb();\n  return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n  this.r = +r;\n  this.g = +g;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  rgb() {\n    return this;\n  },\n  clamp() {\n    return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n  },\n  displayable() {\n    return (-0.5 <= this.r && this.r < 255.5)\n        && (-0.5 <= this.g && this.g < 255.5)\n        && (-0.5 <= this.b && this.b < 255.5)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: rgb_formatHex,\n  formatHex8: rgb_formatHex8,\n  formatRgb: rgb_formatRgb,\n  toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n  const a = clampa(this.opacity);\n  return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n  return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n  return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n  value = clampi(value);\n  return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n  if (a <= 0) h = s = l = NaN;\n  else if (l <= 0 || l >= 1) h = s = NaN;\n  else if (s <= 0) h = NaN;\n  return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Hsl;\n  if (o instanceof Hsl) return o;\n  o = o.rgb();\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      min = Math.min(r, g, b),\n      max = Math.max(r, g, b),\n      h = NaN,\n      s = max - min,\n      l = (max + min) / 2;\n  if (s) {\n    if (r === max) h = (g - b) / s + (g < b) * 6;\n    else if (g === max) h = (b - r) / s + 2;\n    else h = (r - g) / s + 4;\n    s /= l < 0.5 ? max + min : 2 - max - min;\n    h *= 60;\n  } else {\n    s = l > 0 && l < 1 ? 0 : h;\n  }\n  return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb() {\n    var h = this.h % 360 + (this.h < 0) * 360,\n        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n        l = this.l,\n        m2 = l + (l < 0.5 ? l : 1 - l) * s,\n        m1 = 2 * l - m2;\n    return new Rgb(\n      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n      hsl2rgb(h, m1, m2),\n      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n      this.opacity\n    );\n  },\n  clamp() {\n    return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n  },\n  displayable() {\n    return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n        && (0 <= this.l && this.l <= 1)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  formatHsl() {\n    const a = clampa(this.opacity);\n    return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n  }\n}));\n\nfunction clamph(value) {\n  value = (value || 0) % 360;\n  return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n  return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n  return (h < 60 ? m1 + (m2 - m1) * h / 60\n      : h < 180 ? m2\n      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n      : m1) * 255;\n}\n","export function basis(t1, v0, v1, v2, v3) {\n  var t2 = t1 * t1, t3 = t2 * t1;\n  return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n      + (4 - 6 * t2 + 3 * t3) * v1\n      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n      + t3 * v3) / 6;\n}\n\nexport default function(values) {\n  var n = values.length - 1;\n  return function(t) {\n    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n        v1 = values[i],\n        v2 = values[i + 1],\n        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n  return function(t) {\n    return a + t * d;\n  };\n}\n\nfunction exponential(a, b, y) {\n  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n    return Math.pow(a + t * b, y);\n  };\n}\n\nexport function hue(a, b) {\n  var d = b - a;\n  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n  return (y = +y) === 1 ? nogamma : function(a, b) {\n    return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n  };\n}\n\nexport default function nogamma(a, b) {\n  var d = b - a;\n  return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n  var color = gamma(y);\n\n  function rgb(start, end) {\n    var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n        g = color(start.g, end.g),\n        b = color(start.b, end.b),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.r = r(t);\n      start.g = g(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  rgb.gamma = rgbGamma;\n\n  return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n  return function(colors) {\n    var n = colors.length,\n        r = new Array(n),\n        g = new Array(n),\n        b = new Array(n),\n        i, color;\n    for (i = 0; i < n; ++i) {\n      color = colorRgb(colors[i]);\n      r[i] = color.r || 0;\n      g[i] = color.g || 0;\n      b[i] = color.b || 0;\n    }\n    r = spline(r);\n    g = spline(g);\n    b = spline(b);\n    color.opacity = 1;\n    return function(t) {\n      color.r = r(t);\n      color.g = g(t);\n      color.b = b(t);\n      return color + \"\";\n    };\n  };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n  var n = values.length;\n  return function(t) {\n    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n        v0 = values[(i + n - 1) % n],\n        v1 = values[i % n],\n        v2 = values[(i + 1) % n],\n        v3 = values[(i + 2) % n];\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n    reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n  return function() {\n    return b;\n  };\n}\n\nfunction one(b) {\n  return function(t) {\n    return b(t) + \"\";\n  };\n}\n\nexport default function(a, b) {\n  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n      am, // current match in a\n      bm, // current match in b\n      bs, // string preceding current number in b, if any\n      i = -1, // index in s\n      s = [], // string constants and placeholders\n      q = []; // number interpolators\n\n  // Coerce inputs to strings.\n  a = a + \"\", b = b + \"\";\n\n  // Interpolate pairs of numbers in a & b.\n  while ((am = reA.exec(a))\n      && (bm = reB.exec(b))) {\n    if ((bs = bm.index) > bi) { // a string precedes the next number in b\n      bs = b.slice(bi, bs);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n      if (s[i]) s[i] += bm; // coalesce with previous string\n      else s[++i] = bm;\n    } else { // interpolate non-matching numbers\n      s[++i] = null;\n      q.push({i: i, x: number(am, bm)});\n    }\n    bi = reB.lastIndex;\n  }\n\n  // Add remains of b.\n  if (bi < b.length) {\n    bs = b.slice(bi);\n    if (s[i]) s[i] += bs; // coalesce with previous string\n    else s[++i] = bs;\n  }\n\n  // Special optimization for only a single match.\n  // Otherwise, interpolate each of the numbers and rejoin the string.\n  return s.length < 2 ? (q[0]\n      ? one(q[0].x)\n      : zero(b))\n      : (b = q.length, function(t) {\n          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n          return s.join(\"\");\n        });\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n  var c;\n  return (typeof b === \"number\" ? interpolateNumber\n      : b instanceof color ? interpolateRgb\n      : (c = color(b)) ? (b = c, interpolateRgb)\n      : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttribute(name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttributeNS(fullname.space, fullname.local);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttribute(name);\n    string0 = this.getAttribute(name);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n    string0 = this.getAttributeNS(fullname.space, fullname.local);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n  return this.attrTween(name, typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n      : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n      : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n  return function(t) {\n    this.setAttribute(name, i.call(this, t));\n  };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n  return function(t) {\n    this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n  };\n}\n\nfunction attrTweenNS(fullname, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nfunction attrTween(name, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value) {\n  var key = \"attr.\" + name;\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  var fullname = namespace(name);\n  return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n  return function() {\n    init(this, id).delay = +value.apply(this, arguments);\n  };\n}\n\nfunction delayConstant(id, value) {\n  return value = +value, function() {\n    init(this, id).delay = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? delayFunction\n          : delayConstant)(id, value))\n      : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n  return function() {\n    set(this, id).duration = +value.apply(this, arguments);\n  };\n}\n\nfunction durationConstant(id, value) {\n  return value = +value, function() {\n    set(this, id).duration = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? durationFunction\n          : durationConstant)(id, value))\n      : get(this.node(), id).duration;\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n  return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        string1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, string10 = string1);\n  };\n}\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = style(this, name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction styleFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        value1 = value(this),\n        string1 = value1 + \"\";\n    if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction styleMaybeRemove(id, name) {\n  var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n  return function() {\n    var schedule = set(this, id),\n        on = schedule.on,\n        listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we’re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, value, priority) {\n  var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n  return value == null ? this\n      .styleTween(name, styleNull(name, i))\n      .on(\"end.style.\" + name, styleRemove(name))\n    : typeof value === \"function\" ? this\n      .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n      .each(styleMaybeRemove(this._id, name))\n    : this\n      .styleTween(name, styleConstant(name, i, value), priority)\n      .on(\"end.style.\" + name, null);\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n  this._groups = groups;\n  this._parents = parents;\n  this._name = name;\n  this._id = id;\n}\n\nexport default function transition(name) {\n  return selection().transition(name);\n}\n\nexport function newId() {\n  return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n  constructor: Transition,\n  select: transition_select,\n  selectAll: transition_selectAll,\n  selectChild: selection_prototype.selectChild,\n  selectChildren: selection_prototype.selectChildren,\n  filter: transition_filter,\n  merge: transition_merge,\n  selection: transition_selection,\n  transition: transition_transition,\n  call: selection_prototype.call,\n  nodes: selection_prototype.nodes,\n  node: selection_prototype.node,\n  size: selection_prototype.size,\n  empty: selection_prototype.empty,\n  each: selection_prototype.each,\n  on: transition_on,\n  attr: transition_attr,\n  attrTween: transition_attrTween,\n  style: transition_style,\n  styleTween: transition_styleTween,\n  text: transition_text,\n  textTween: transition_textTween,\n  remove: transition_remove,\n  tween: transition_tween,\n  delay: transition_delay,\n  duration: transition_duration,\n  ease: transition_ease,\n  easeVarying: transition_easeVarying,\n  end: transition_end,\n  [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n        schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n          if (child = children[k]) {\n            schedule(child, name, id, k, children, inherit);\n          }\n        }\n        subgroups.push(children);\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n  if (transition._id !== this._id) throw new Error;\n\n  for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n  var name = this._name,\n      id0 = this._id,\n      id1 = newId();\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        var inherit = get(node, id0);\n        schedule(node, name, id1, i, group, {\n          time: inherit.time + inherit.delay + inherit.duration,\n          delay: 0,\n          duration: inherit.duration,\n          ease: inherit.ease\n        });\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id1);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n  return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n    var i = t.indexOf(\".\");\n    if (i >= 0) t = t.slice(0, i);\n    return !t || t === \"start\";\n  });\n}\n\nfunction onFunction(id, name, listener) {\n  var on0, on1, sit = start(name) ? init : set;\n  return function() {\n    var schedule = sit(this, id),\n        on = schedule.on;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we’re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, listener) {\n  var id = this._id;\n\n  return arguments.length < 2\n      ? get(this.node(), id).on.on(name)\n      : this.each(onFunction(id, name, listener));\n}\n","function styleInterpolate(name, i, priority) {\n  return function(t) {\n    this.style.setProperty(name, i.call(this, t), priority);\n  };\n}\n\nfunction styleTween(name, value, priority) {\n  var t, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n    return t;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value, priority) {\n  var key = \"style.\" + (name += \"\");\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var value1 = value(this);\n    this.textContent = value1 == null ? \"\" : value1;\n  };\n}\n\nexport default function(value) {\n  return this.tween(\"text\", typeof value === \"function\"\n      ? textFunction(tweenValue(this, \"text\", value))\n      : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function textInterpolate(i) {\n  return function(t) {\n    this.textContent = i.call(this, t);\n  };\n}\n\nfunction textTween(value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(value) {\n  var key = \"text\";\n  if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, textTween(value));\n}\n","function removeFunction(id) {\n  return function() {\n    var parent = this.parentNode;\n    for (var i in this.__transition) if (+i !== id) return;\n    if (parent) parent.removeChild(this);\n  };\n}\n\nexport default function() {\n  return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    set(this, id).ease = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each(easeConstant(id, value))\n      : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (typeof v !== \"function\") throw new Error;\n    set(this, id).ease = v;\n  };\n}\n\nexport default function(value) {\n  if (typeof value !== \"function\") throw new Error;\n  return this.each(easeVarying(this._id, value));\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n  var on0, on1, that = this, id = that._id, size = that.size();\n  return new Promise(function(resolve, reject) {\n    var cancel = {value: reject},\n        end = {value: function() { if (--size === 0) resolve(); }};\n\n    that.each(function() {\n      var schedule = set(this, id),\n          on = schedule.on;\n\n      // If this node shared a dispatch with the previous node,\n      // just assign the updated shared dispatch and we’re done!\n      // Otherwise, copy-on-write.\n      if (on !== on0) {\n        on1 = (on0 = on).copy();\n        on1._.cancel.push(cancel);\n        on1._.interrupt.push(cancel);\n        on1._.end.push(end);\n      }\n\n      schedule.on = on1;\n    });\n\n    // The selection was empty, resolve end immediately\n    if (size === 0) resolve();\n  });\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n  time: null, // Set on use.\n  delay: 0,\n  duration: 250,\n  ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n  var timing;\n  while (!(timing = node.__transition) || !(timing = timing[id])) {\n    if (!(node = node.parentNode)) {\n      throw new Error(`transition ${id} not found`);\n    }\n  }\n  return timing;\n}\n\nexport default function(name) {\n  var id,\n      timing;\n\n  if (name instanceof Transition) {\n    id = name._id, name = name._name;\n  } else {\n    id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n  }\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        schedule(node, name, id, i, group, timing || inherit(node, id));\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id);\n}\n","export function cubicIn(t) {\n  return t * t * t;\n}\n\nexport function cubicOut(t) {\n  return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n  return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n  return this.each(function() {\n    interrupt(this, name);\n  });\n}\n","export default x => () => x;\n","export default function ZoomEvent(type, {\n  sourceEvent,\n  target,\n  transform,\n  dispatch\n}) {\n  Object.defineProperties(this, {\n    type: {value: type, enumerable: true, configurable: true},\n    sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n    target: {value: target, enumerable: true, configurable: true},\n    transform: {value: transform, enumerable: true, configurable: true},\n    _: {value: dispatch}\n  });\n}\n","export function Transform(k, x, y) {\n  this.k = k;\n  this.x = x;\n  this.y = y;\n}\n\nTransform.prototype = {\n  constructor: Transform,\n  scale: function(k) {\n    return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n  },\n  translate: function(x, y) {\n    return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n  },\n  apply: function(point) {\n    return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n  },\n  applyX: function(x) {\n    return x * this.k + this.x;\n  },\n  applyY: function(y) {\n    return y * this.k + this.y;\n  },\n  invert: function(location) {\n    return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n  },\n  invertX: function(x) {\n    return (x - this.x) / this.k;\n  },\n  invertY: function(y) {\n    return (y - this.y) / this.k;\n  },\n  rescaleX: function(x) {\n    return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n  },\n  rescaleY: function(y) {\n    return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n  },\n  toString: function() {\n    return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n  }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n  while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n  return node.__zoom;\n}\n","export function nopropagation(event) {\n  event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolateZoom} from \"d3-interpolate\";\nimport {select, pointer} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport ZoomEvent from \"./event.js\";\nimport {Transform, identity} from \"./transform.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\n// Ignore right-click, since that should open the context menu.\n// except for pinch-to-zoom, which is sent as a wheel+ctrlKey event\nfunction defaultFilter(event) {\n  return (!event.ctrlKey || event.type === 'wheel') && !event.button;\n}\n\nfunction defaultExtent() {\n  var e = this;\n  if (e instanceof SVGElement) {\n    e = e.ownerSVGElement || e;\n    if (e.hasAttribute(\"viewBox\")) {\n      e = e.viewBox.baseVal;\n      return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\n    }\n    return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\n  }\n  return [[0, 0], [e.clientWidth, e.clientHeight]];\n}\n\nfunction defaultTransform() {\n  return this.__zoom || identity;\n}\n\nfunction defaultWheelDelta(event) {\n  return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1);\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n  var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n      dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n      dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n      dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n  return transform.translate(\n    dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n    dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n  );\n}\n\nexport default function() {\n  var filter = defaultFilter,\n      extent = defaultExtent,\n      constrain = defaultConstrain,\n      wheelDelta = defaultWheelDelta,\n      touchable = defaultTouchable,\n      scaleExtent = [0, Infinity],\n      translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n      duration = 250,\n      interpolate = interpolateZoom,\n      listeners = dispatch(\"start\", \"zoom\", \"end\"),\n      touchstarting,\n      touchfirst,\n      touchending,\n      touchDelay = 500,\n      wheelDelay = 150,\n      clickDistance2 = 0,\n      tapDistance = 10;\n\n  function zoom(selection) {\n    selection\n        .property(\"__zoom\", defaultTransform)\n        .on(\"wheel.zoom\", wheeled, {passive: false})\n        .on(\"mousedown.zoom\", mousedowned)\n        .on(\"dblclick.zoom\", dblclicked)\n      .filter(touchable)\n        .on(\"touchstart.zoom\", touchstarted)\n        .on(\"touchmove.zoom\", touchmoved)\n        .on(\"touchend.zoom touchcancel.zoom\", touchended)\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  zoom.transform = function(collection, transform, point, event) {\n    var selection = collection.selection ? collection.selection() : collection;\n    selection.property(\"__zoom\", defaultTransform);\n    if (collection !== selection) {\n      schedule(collection, transform, point, event);\n    } else {\n      selection.interrupt().each(function() {\n        gesture(this, arguments)\n          .event(event)\n          .start()\n          .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n          .end();\n      });\n    }\n  };\n\n  zoom.scaleBy = function(selection, k, p, event) {\n    zoom.scaleTo(selection, function() {\n      var k0 = this.__zoom.k,\n          k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n      return k0 * k1;\n    }, p, event);\n  };\n\n  zoom.scaleTo = function(selection, k, p, event) {\n    zoom.transform(selection, function() {\n      var e = extent.apply(this, arguments),\n          t0 = this.__zoom,\n          p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p,\n          p1 = t0.invert(p0),\n          k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n      return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n    }, p, event);\n  };\n\n  zoom.translateBy = function(selection, x, y, event) {\n    zoom.transform(selection, function() {\n      return constrain(this.__zoom.translate(\n        typeof x === \"function\" ? x.apply(this, arguments) : x,\n        typeof y === \"function\" ? y.apply(this, arguments) : y\n      ), extent.apply(this, arguments), translateExtent);\n    }, null, event);\n  };\n\n  zoom.translateTo = function(selection, x, y, p, event) {\n    zoom.transform(selection, function() {\n      var e = extent.apply(this, arguments),\n          t = this.__zoom,\n          p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p;\n      return constrain(identity.translate(p0[0], p0[1]).scale(t.k).translate(\n        typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n        typeof y === \"function\" ? -y.apply(this, arguments) : -y\n      ), e, translateExtent);\n    }, p, event);\n  };\n\n  function scale(transform, k) {\n    k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n    return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n  }\n\n  function translate(transform, p0, p1) {\n    var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n    return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n  }\n\n  function centroid(extent) {\n    return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n  }\n\n  function schedule(transition, transform, point, event) {\n    transition\n        .on(\"start.zoom\", function() { gesture(this, arguments).event(event).start(); })\n        .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).event(event).end(); })\n        .tween(\"zoom\", function() {\n          var that = this,\n              args = arguments,\n              g = gesture(that, args).event(event),\n              e = extent.apply(that, args),\n              p = point == null ? centroid(e) : typeof point === \"function\" ? point.apply(that, args) : point,\n              w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n              a = that.__zoom,\n              b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n              i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n          return function(t) {\n            if (t === 1) t = b; // Avoid rounding error on end.\n            else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n            g.zoom(null, t);\n          };\n        });\n  }\n\n  function gesture(that, args, clean) {\n    return (!clean && that.__zooming) || new Gesture(that, args);\n  }\n\n  function Gesture(that, args) {\n    this.that = that;\n    this.args = args;\n    this.active = 0;\n    this.sourceEvent = null;\n    this.extent = extent.apply(that, args);\n    this.taps = 0;\n  }\n\n  Gesture.prototype = {\n    event: function(event) {\n      if (event) this.sourceEvent = event;\n      return this;\n    },\n    start: function() {\n      if (++this.active === 1) {\n        this.that.__zooming = this;\n        this.emit(\"start\");\n      }\n      return this;\n    },\n    zoom: function(key, transform) {\n      if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n      if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n      if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n      this.that.__zoom = transform;\n      this.emit(\"zoom\");\n      return this;\n    },\n    end: function() {\n      if (--this.active === 0) {\n        delete this.that.__zooming;\n        this.emit(\"end\");\n      }\n      return this;\n    },\n    emit: function(type) {\n      var d = select(this.that).datum();\n      listeners.call(\n        type,\n        this.that,\n        new ZoomEvent(type, {\n          sourceEvent: this.sourceEvent,\n          target: zoom,\n          type,\n          transform: this.that.__zoom,\n          dispatch: listeners\n        }),\n        d\n      );\n    }\n  };\n\n  function wheeled(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var g = gesture(this, args).event(event),\n        t = this.__zoom,\n        k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n        p = pointer(event);\n\n    // If the mouse is in the same location as before, reuse it.\n    // If there were recent wheel events, reset the wheel idle timeout.\n    if (g.wheel) {\n      if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n        g.mouse[1] = t.invert(g.mouse[0] = p);\n      }\n      clearTimeout(g.wheel);\n    }\n\n    // If this wheel event won’t trigger a transform change, ignore it.\n    else if (t.k === k) return;\n\n    // Otherwise, capture the mouse point and location at the start.\n    else {\n      g.mouse = [p, t.invert(p)];\n      interrupt(this);\n      g.start();\n    }\n\n    noevent(event);\n    g.wheel = setTimeout(wheelidled, wheelDelay);\n    g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n    function wheelidled() {\n      g.wheel = null;\n      g.end();\n    }\n  }\n\n  function mousedowned(event, ...args) {\n    if (touchending || !filter.apply(this, arguments)) return;\n    var currentTarget = event.currentTarget,\n        g = gesture(this, args, true).event(event),\n        v = select(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n        p = pointer(event, currentTarget),\n        x0 = event.clientX,\n        y0 = event.clientY;\n\n    dragDisable(event.view);\n    nopropagation(event);\n    g.mouse = [p, this.__zoom.invert(p)];\n    interrupt(this);\n    g.start();\n\n    function mousemoved(event) {\n      noevent(event);\n      if (!g.moved) {\n        var dx = event.clientX - x0, dy = event.clientY - y0;\n        g.moved = dx * dx + dy * dy > clickDistance2;\n      }\n      g.event(event)\n       .zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = pointer(event, currentTarget), g.mouse[1]), g.extent, translateExtent));\n    }\n\n    function mouseupped(event) {\n      v.on(\"mousemove.zoom mouseup.zoom\", null);\n      dragEnable(event.view, g.moved);\n      noevent(event);\n      g.event(event).end();\n    }\n  }\n\n  function dblclicked(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var t0 = this.__zoom,\n        p0 = pointer(event.changedTouches ? event.changedTouches[0] : event, this),\n        p1 = t0.invert(p0),\n        k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n        t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent);\n\n    noevent(event);\n    if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0, event);\n    else select(this).call(zoom.transform, t1, p0, event);\n  }\n\n  function touchstarted(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var touches = event.touches,\n        n = touches.length,\n        g = gesture(this, args, event.changedTouches.length === n).event(event),\n        started, i, t, p;\n\n    nopropagation(event);\n    for (i = 0; i < n; ++i) {\n      t = touches[i], p = pointer(t, this);\n      p = [p, this.__zoom.invert(p), t.identifier];\n      if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;\n      else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\n    }\n\n    if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\n    if (started) {\n      if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n      interrupt(this);\n      g.start();\n    }\n  }\n\n  function touchmoved(event, ...args) {\n    if (!this.__zooming) return;\n    var g = gesture(this, args).event(event),\n        touches = event.changedTouches,\n        n = touches.length, i, t, p, l;\n\n    noevent(event);\n    for (i = 0; i < n; ++i) {\n      t = touches[i], p = pointer(t, this);\n      if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n      else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n    }\n    t = g.that.__zoom;\n    if (g.touch1) {\n      var p0 = g.touch0[0], l0 = g.touch0[1],\n          p1 = g.touch1[0], l1 = g.touch1[1],\n          dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n          dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n      t = scale(t, Math.sqrt(dp / dl));\n      p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n      l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n    }\n    else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n    else return;\n\n    g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n  }\n\n  function touchended(event, ...args) {\n    if (!this.__zooming) return;\n    var g = gesture(this, args).event(event),\n        touches = event.changedTouches,\n        n = touches.length, i, t;\n\n    nopropagation(event);\n    if (touchending) clearTimeout(touchending);\n    touchending = setTimeout(function() { touchending = null; }, touchDelay);\n    for (i = 0; i < n; ++i) {\n      t = touches[i];\n      if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n      else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n    }\n    if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n    if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n    else {\n      g.end();\n      // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\n      if (g.taps === 2) {\n        t = pointer(t, this);\n        if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {\n          var p = select(this).on(\"dblclick.zoom\");\n          if (p) p.apply(this, arguments);\n        }\n      }\n    }\n  }\n\n  zoom.wheelDelta = function(_) {\n    return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : constant(+_), zoom) : wheelDelta;\n  };\n\n  zoom.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), zoom) : filter;\n  };\n\n  zoom.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), zoom) : touchable;\n  };\n\n  zoom.extent = function(_) {\n    return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n  };\n\n  zoom.scaleExtent = function(_) {\n    return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n  };\n\n  zoom.translateExtent = function(_) {\n    return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n  };\n\n  zoom.constrain = function(_) {\n    return arguments.length ? (constrain = _, zoom) : constrain;\n  };\n\n  zoom.duration = function(_) {\n    return arguments.length ? (duration = +_, zoom) : duration;\n  };\n\n  zoom.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, zoom) : interpolate;\n  };\n\n  zoom.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? zoom : value;\n  };\n\n  zoom.clickDistance = function(_) {\n    return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n  };\n\n  zoom.tapDistance = function(_) {\n    return arguments.length ? (tapDistance = +_, zoom) : tapDistance;\n  };\n\n  return zoom;\n}\n","export default function _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}","export default function _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) {\n    arr2[i] = arr[i];\n  }\n\n  return arr2;\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _slicedToArray(arr, i) {\n  return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n  var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n  if (_i == null) return;\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n\n  var _s, _e;\n\n  try {\n    for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n\n      if (i && _arr.length === i) break;\n    }\n  } catch (err) {\n    _d = true;\n    _e = err;\n  } finally {\n    try {\n      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n    } finally {\n      if (_d) throw _e;\n    }\n  }\n\n  return _arr;\n}","export default function _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import { createContext as createContext$1, useRef, createElement, useContext, useMemo } from 'react';\n\nfunction createContext() {\n  const ZustandContext = createContext$1(void 0);\n  const Provider = ({\n    initialStore,\n    createStore,\n    children\n  }) => {\n    const storeRef = useRef();\n    if (!storeRef.current) {\n      if (initialStore) {\n        console.warn(\"Provider initialStore is deprecated and will be removed in the next version.\");\n        if (!createStore) {\n          createStore = () => initialStore;\n        }\n      }\n      storeRef.current = createStore();\n    }\n    return createElement(ZustandContext.Provider, { value: storeRef.current }, children);\n  };\n  const useStore = (selector, equalityFn = Object.is) => {\n    const useProviderStore = useContext(ZustandContext);\n    if (!useProviderStore) {\n      throw new Error(\"Seems like you have not used zustand provider as an ancestor.\");\n    }\n    return useProviderStore(selector, equalityFn);\n  };\n  const useStoreApi = () => {\n    const useProviderStore = useContext(ZustandContext);\n    if (!useProviderStore) {\n      throw new Error(\"Seems like you have not used zustand provider as an ancestor.\");\n    }\n    return useMemo(() => ({\n      getState: useProviderStore.getState,\n      setState: useProviderStore.setState,\n      subscribe: useProviderStore.subscribe,\n      destroy: useProviderStore.destroy\n    }), [useProviderStore]);\n  };\n  return {\n    Provider,\n    useStore,\n    useStoreApi\n  };\n}\n\nexport { createContext as default };\n","export default function cc(names) {\n  if (typeof names === \"string\" || typeof names === \"number\") return \"\" + names\n\n  let out = \"\"\n\n  if (Array.isArray(names)) {\n    for (let i = 0, tmp; i < names.length; i++) {\n      if ((tmp = cc(names[i])) !== \"\") {\n        out += (out && \" \") + tmp\n      }\n    }\n  } else {\n    for (let k in names) {\n      if (names[k]) out += (out && \" \") + k\n    }\n  }\n\n  return out\n}\n","function shallow(objA, objB) {\n  if (Object.is(objA, objB)) {\n    return true;\n  }\n  if (typeof objA !== \"object\" || objA === null || typeof objB !== \"object\" || objB === null) {\n    return false;\n  }\n  const keysA = Object.keys(objA);\n  if (keysA.length !== Object.keys(objB).length) {\n    return false;\n  }\n  for (let i = 0; i < keysA.length; i++) {\n    if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]])) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport { shallow as default };\n","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n  return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","export default function _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nexport default function _objectWithoutProperties(source, excluded) {\n  if (source == null) return {};\n  var target = objectWithoutPropertiesLoose(source, excluded);\n  var key, i;\n\n  if (Object.getOwnPropertySymbols) {\n    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n    for (i = 0; i < sourceSymbolKeys.length; i++) {\n      key = sourceSymbolKeys[i];\n      if (excluded.indexOf(key) >= 0) continue;\n      if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n      target[key] = source[key];\n    }\n  }\n\n  return target;\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n\n  return target;\n}","export default x => () => x;\n","export default function DragEvent(type, {\n  sourceEvent,\n  subject,\n  target,\n  identifier,\n  active,\n  x, y, dx, dy,\n  dispatch\n}) {\n  Object.defineProperties(this, {\n    type: {value: type, enumerable: true, configurable: true},\n    sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n    subject: {value: subject, enumerable: true, configurable: true},\n    target: {value: target, enumerable: true, configurable: true},\n    identifier: {value: identifier, enumerable: true, configurable: true},\n    active: {value: active, enumerable: true, configurable: true},\n    x: {value: x, enumerable: true, configurable: true},\n    y: {value: y, enumerable: true, configurable: true},\n    dx: {value: dx, enumerable: true, configurable: true},\n    dy: {value: dy, enumerable: true, configurable: true},\n    _: {value: dispatch}\n  });\n}\n\nDragEvent.prototype.on = function() {\n  var value = this._.on.apply(this._, arguments);\n  return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {select, pointer} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag.js\";\nimport noevent, {nonpassive, nonpassivecapture, nopropagation} from \"./noevent.js\";\nimport constant from \"./constant.js\";\nimport DragEvent from \"./event.js\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n  return !event.ctrlKey && !event.button;\n}\n\nfunction defaultContainer() {\n  return this.parentNode;\n}\n\nfunction defaultSubject(event, d) {\n  return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nexport default function() {\n  var filter = defaultFilter,\n      container = defaultContainer,\n      subject = defaultSubject,\n      touchable = defaultTouchable,\n      gestures = {},\n      listeners = dispatch(\"start\", \"drag\", \"end\"),\n      active = 0,\n      mousedownx,\n      mousedowny,\n      mousemoving,\n      touchending,\n      clickDistance2 = 0;\n\n  function drag(selection) {\n    selection\n        .on(\"mousedown.drag\", mousedowned)\n      .filter(touchable)\n        .on(\"touchstart.drag\", touchstarted)\n        .on(\"touchmove.drag\", touchmoved, nonpassive)\n        .on(\"touchend.drag touchcancel.drag\", touchended)\n        .style(\"touch-action\", \"none\")\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  function mousedowned(event, d) {\n    if (touchending || !filter.call(this, event, d)) return;\n    var gesture = beforestart(this, container.call(this, event, d), event, d, \"mouse\");\n    if (!gesture) return;\n    select(event.view)\n      .on(\"mousemove.drag\", mousemoved, nonpassivecapture)\n      .on(\"mouseup.drag\", mouseupped, nonpassivecapture);\n    nodrag(event.view);\n    nopropagation(event);\n    mousemoving = false;\n    mousedownx = event.clientX;\n    mousedowny = event.clientY;\n    gesture(\"start\", event);\n  }\n\n  function mousemoved(event) {\n    noevent(event);\n    if (!mousemoving) {\n      var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n      mousemoving = dx * dx + dy * dy > clickDistance2;\n    }\n    gestures.mouse(\"drag\", event);\n  }\n\n  function mouseupped(event) {\n    select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n    yesdrag(event.view, mousemoving);\n    noevent(event);\n    gestures.mouse(\"end\", event);\n  }\n\n  function touchstarted(event, d) {\n    if (!filter.call(this, event, d)) return;\n    var touches = event.changedTouches,\n        c = container.call(this, event, d),\n        n = touches.length, i, gesture;\n\n    for (i = 0; i < n; ++i) {\n      if (gesture = beforestart(this, c, event, d, touches[i].identifier, touches[i])) {\n        nopropagation(event);\n        gesture(\"start\", event, touches[i]);\n      }\n    }\n  }\n\n  function touchmoved(event) {\n    var touches = event.changedTouches,\n        n = touches.length, i, gesture;\n\n    for (i = 0; i < n; ++i) {\n      if (gesture = gestures[touches[i].identifier]) {\n        noevent(event);\n        gesture(\"drag\", event, touches[i]);\n      }\n    }\n  }\n\n  function touchended(event) {\n    var touches = event.changedTouches,\n        n = touches.length, i, gesture;\n\n    if (touchending) clearTimeout(touchending);\n    touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n    for (i = 0; i < n; ++i) {\n      if (gesture = gestures[touches[i].identifier]) {\n        nopropagation(event);\n        gesture(\"end\", event, touches[i]);\n      }\n    }\n  }\n\n  function beforestart(that, container, event, d, identifier, touch) {\n    var dispatch = listeners.copy(),\n        p = pointer(touch || event, container), dx, dy,\n        s;\n\n    if ((s = subject.call(that, new DragEvent(\"beforestart\", {\n        sourceEvent: event,\n        target: drag,\n        identifier,\n        active,\n        x: p[0],\n        y: p[1],\n        dx: 0,\n        dy: 0,\n        dispatch\n      }), d)) == null) return;\n\n    dx = s.x - p[0] || 0;\n    dy = s.y - p[1] || 0;\n\n    return function gesture(type, event, touch) {\n      var p0 = p, n;\n      switch (type) {\n        case \"start\": gestures[identifier] = gesture, n = active++; break;\n        case \"end\": delete gestures[identifier], --active; // falls through\n        case \"drag\": p = pointer(touch || event, container), n = active; break;\n      }\n      dispatch.call(\n        type,\n        that,\n        new DragEvent(type, {\n          sourceEvent: event,\n          subject: s,\n          target: drag,\n          identifier,\n          active: n,\n          x: p[0] + dx,\n          y: p[1] + dy,\n          dx: p[0] - p0[0],\n          dy: p[1] - p0[1],\n          dispatch\n        }),\n        d\n      );\n    };\n  }\n\n  drag.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n  };\n\n  drag.container = function(_) {\n    return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n  };\n\n  drag.subject = function(_) {\n    return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n  };\n\n  drag.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n  };\n\n  drag.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? drag : value;\n  };\n\n  drag.clickDistance = function(_) {\n    return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n  };\n\n  return drag;\n}\n","export default function _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n    return typeof obj;\n  } : function (obj) {\n    return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n  }, _typeof(obj);\n}","import styled, { keyframes } from 'styled-components';\n\nconst spin = keyframes`\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n`;\n\nexport const CardContainer = styled.div`\n  padding: 16px 0 16px 16px;\n  border-color: black;\n  margin: 16px;\n  border-radius: 10px;\n  border: 2px solid black;\n  background-color: #fff;\n  width: 200px;\n  height: 120px;\n  position: relative;\n`;\n\nexport const TitleBand = styled.div`\n  background-color: orange;\n  width: 100%;\n  padding: 8px 0;\n  border-bottom: 2px solid black;\n  border-color: black;\n  position: absolute;\n  top: 0;\n  left: 0;\n  border-top-left-radius: 8px;\n  border-top-right-radius: 8px;\n  text-align: center;\n  font-weight: bold;\n`;\n\nexport const CardTitle = styled.h2`\n  margin: 0;\n  font-size: 16px;\n`;\n\nexport const StatusDot = styled.span<{ status: string }>`\n  height: 20px;\n  width: 20px;\n  background-color: ${({ status }) => (status === 'executed' ? 'green' : 'red')};\n  border-radius: 50%;\n  border: 2px solid black;\n  display: inline-block;\n  margin-left: 8px;\n`;\n\nexport const StatusContainer = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  transform: translateX(-50%);\n  width: 100px;\n`;\n\nexport const ExecuteButton = styled.button`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: 5px;\n  background-color: green;\n  border: 2px solid black;\n  border-radius: 5px;\n  cursor: pointer;\n  position: relative;\n  pointer-events: ${(props) => (props.disabled ? 'none' : 'auto')};\n  opacity: ${(props) => (props.disabled ? 0.5 : 1)};\n\n  &:hover {\n    background-color: darkgreen;\n  }\n\n  img {\n    filter: brightness(0);\n    width: 20px;\n    height: 20px;\n  }\n\n  &::after {\n    content: attr(data-tooltip);\n    position: absolute;\n    bottom: 100%;\n    left: 50%;\n    transform: translateX(-50%);\n    background-color: black;\n    color: white;\n    padding: 5px;\n    border-radius: 5px;\n    font-size: 12px;\n    display: none;\n    white-space: nowrap;\n  }\n\n  &:hover::after {\n    display: block;\n  }\n`;\n\nexport const LoadingIcon = styled.img`\n  animation: ${spin} 2s linear infinite;\n`;\n\nexport const LoadingMessage = styled.p`\n  margin: 0 0 8px 0;\n  font-size: 14px;\n  color: #000;\n  text-align: center;\n`;\n\nexport const CloseButton = styled.button`\n  position: absolute;\n  top: 5px;\n  right: 5px;\n  background: transparent;\n  border: none;\n  font-size: 16px;\n  cursor: pointer;\n  &:hover {\n    color: red;\n  }\n`;\n\nexport const WarningIcon = styled.img`\n  position: absolute;\n  border: 2px solid black;\n  border-radius: 5px;\n  top: 4px;\n  left: 6px;\n  width: 24px;\n  height: 24px;\n  filter: brightness(0);\n`;\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgAdd(_ref, svgRef) {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    height: \"24px\",\n    viewBox: \"0 -960 960 960\",\n    width: \"24px\",\n    fill: \"#5f6368\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M440-440H200v-80h240v-240h80v240h240v80H520v240h-80v-240Z\"\n  })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgAdd);\nexport default __webpack_public_path__ + \"static/media/add.af3b66aebbb2d4b249a2998dcb11b982.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgClose(_ref, svgRef) {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    height: \"24px\",\n    viewBox: \"0 -960 960 960\",\n    width: \"24px\",\n    fill: \"#000000\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"m256-200-56-56 224-224-224-224 56-56 224 224 224-224 56 56-224 224 224 224-56 56-224-224-224 224Z\"\n  })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgClose);\nexport default __webpack_public_path__ + \"static/media/close.30508a6d00696f2dc5c6347d3462a2ee.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgCopy(_ref, svgRef) {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    height: \"24px\",\n    viewBox: \"0 -960 960 960\",\n    width: \"24px\",\n    fill: \"#000000\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M360-240q-33 0-56.5-23.5T280-320v-480q0-33 23.5-56.5T360-880h360q33 0 56.5 23.5T800-800v480q0 33-23.5 56.5T720-240H360Zm0-80h360v-480H360v480ZM200-80q-33 0-56.5-23.5T120-160v-560h80v560h440v80H200Zm160-240v-480 480Z\"\n  })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgCopy);\nexport default __webpack_public_path__ + \"static/media/copy.ef751cb0d30cfd25d50f3fd00fb7ebf3.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgDelete(_ref, svgRef) {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    height: \"24px\",\n    viewBox: \"0 -960 960 960\",\n    width: \"24px\",\n    fill: \"#000000\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M280-120q-33 0-56.5-23.5T200-200v-520h-40v-80h200v-40h240v40h200v80h-40v520q0 33-23.5 56.5T680-120H280Zm400-600H280v520h400v-520ZM360-280h80v-360h-80v360Zm160 0h80v-360h-80v360ZM280-720v520-520Z\"\n  })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgDelete);\nexport default __webpack_public_path__ + \"static/media/delete.66d3958d6b48a544d1bea3644f8db8fb.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgDone(_ref, svgRef) {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    height: \"24px\",\n    viewBox: \"0 -960 960 960\",\n    width: \"24px\",\n    fill: \"#000000\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\n  })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgDone);\nexport default __webpack_public_path__ + \"static/media/done.14ef6b5f03f1276e855936235c6b5d58.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgEdit(_ref, svgRef) {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    height: \"24px\",\n    viewBox: \"0 -960 960 960\",\n    width: \"24px\",\n    fill: \"#000000\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M200-200h57l391-391-57-57-391 391v57Zm-80 80v-170l528-527q12-11 26.5-17t30.5-6q16 0 31 6t26 18l55 56q12 11 17.5 26t5.5 30q0 16-5.5 30.5T817-647L290-120H120Zm640-584-56-56 56 56Zm-141 85-28-29 57 57-29-28Z\"\n  })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgEdit);\nexport default __webpack_public_path__ + \"static/media/edit.c65aac74a59c835b9c29d23eb94baff2.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgEvaluate(_ref, svgRef) {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    height: \"24px\",\n    viewBox: \"0 -960 960 960\",\n    width: \"24px\",\n    fill: \"#000000\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M80-120v-80h360v-447q-26-9-45-28t-28-45H240l120 280q0 50-41 85t-99 35q-58 0-99-35t-41-85l120-280h-80v-80h247q12-35 43-57.5t70-22.5q39 0 70 22.5t43 57.5h247v80h-80l120 280q0 50-41 85t-99 35q-58 0-99-35t-41-85l120-280H593q-9 26-28 45t-45 28v447h360v80H80Zm585-320h150l-75-174-75 174Zm-520 0h150l-75-174-75 174Zm335-280q17 0 28.5-11.5T520-760q0-17-11.5-28.5T480-800q-17 0-28.5 11.5T440-760q0 17 11.5 28.5T480-720Z\"\n  })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgEvaluate);\nexport default __webpack_public_path__ + \"static/media/evaluate.79f87d11f0ea64e36d362027304b54f0.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgExecute(_ref, svgRef) {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    height: \"24px\",\n    viewBox: \"0 -960 960 960\",\n    width: \"24px\",\n    fill: \"#000000\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M383-480 200-664l56-56 240 240-240 240-56-56 183-184Zm264 0L464-664l56-56 240 240-240 240-56-56 183-184Z\"\n  })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgExecute);\nexport default __webpack_public_path__ + \"static/media/execute.1f03632fcdca67ce643600b9842124d6.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgLoading(_ref, svgRef) {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    height: \"24px\",\n    viewBox: \"0 -960 960 960\",\n    width: \"24px\",\n    fill: \"#5f6368\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M480-80q-82 0-155-31.5t-127.5-86Q143-252 111.5-325T80-480q0-83 31.5-155.5t86-127Q252-817 325-848.5T480-880q17 0 28.5 11.5T520-840q0 17-11.5 28.5T480-800q-133 0-226.5 93.5T160-480q0 133 93.5 226.5T480-160q133 0 226.5-93.5T800-480q0-17 11.5-28.5T840-520q17 0 28.5 11.5T880-480q0 82-31.5 155t-86 127.5q-54.5 54.5-127 86T480-80Z\"\n  })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgLoading);\nexport default __webpack_public_path__ + \"static/media/loading.23247dd86f0504f25ce0731e9c34a538.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgOpenNew(_ref, svgRef) {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    height: \"24px\",\n    viewBox: \"0 -960 960 960\",\n    width: \"24px\",\n    fill: \"#000000\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h280v80H200v560h560v-280h80v280q0 33-23.5 56.5T760-120H200Zm188-212-56-56 372-372H560v-80h280v280h-80v-144L388-332Z\"\n  })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgOpenNew);\nexport default __webpack_public_path__ + \"static/media/open_new.55be3768177e9c1e0aedea039bb56041.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgRefresh(_ref, svgRef) {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    height: \"24px\",\n    viewBox: \"0 -960 960 960\",\n    width: \"24px\",\n    fill: \"#000000\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M480-160q-134 0-227-93t-93-227q0-134 93-227t227-93q69 0 132 28.5T720-690v-110h80v280H520v-80h168q-32-56-87.5-88T480-720q-100 0-170 70t-70 170q0 100 70 170t170 70q77 0 139-44t87-116h84q-28 106-114 173t-196 67Z\"\n  })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgRefresh);\nexport default __webpack_public_path__ + \"static/media/refresh.e0cb96cc459d08b98eddf3ccf2be3e0d.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgReview(_ref, svgRef) {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    height: \"24px\",\n    viewBox: \"0 -960 960 960\",\n    width: \"24px\",\n    fill: \"#000000\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"m438-240 226-226-58-58-169 169-84-84-57 57 142 142ZM240-80q-33 0-56.5-23.5T160-160v-640q0-33 23.5-56.5T240-880h320l240 240v480q0 33-23.5 56.5T720-80H240Zm280-520v-200H240v640h480v-440H520ZM240-800v200-200 640-640Z\"\n  })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgReview);\nexport default __webpack_public_path__ + \"static/media/review.f7d3961590133019516c030ab7ba9ecc.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgWarning(_ref, svgRef) {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    height: \"24px\",\n    viewBox: \"0 -960 960 960\",\n    width: \"24px\",\n    fill: \"#000000\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"m40-120 440-760 440 760H40Zm138-80h604L480-720 178-200Zm302-40q17 0 28.5-11.5T520-280q0-17-11.5-28.5T480-320q-17 0-28.5 11.5T440-280q0 17 11.5 28.5T480-240Zm-40-120h80v-200h-80v200Zm40-100Z\"\n  })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgWarning);\nexport default __webpack_public_path__ + \"static/media/warning.e3ccf00231e57759f1fe2c9a86ef11cd.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgPlay(_ref, svgRef) {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    height: \"24px\",\n    viewBox: \"0 -960 960 960\",\n    width: \"24px\",\n    fill: \"#000000\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M320-200v-560l440 280-440 280Zm80-280Zm0 134 210-134-210-134v268Z\"\n  })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgPlay);\nexport default __webpack_public_path__ + \"static/media/play.9e2a0e9374bb48711ee395096371aa5d.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgPause(_ref, svgRef) {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    height: \"24px\",\n    viewBox: \"0 -960 960 960\",\n    width: \"24px\",\n    fill: \"#000000\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M520-200v-560h240v560H520Zm-320 0v-560h240v560H200Zm400-80h80v-400h-80v400Zm-320 0h80v-400h-80v400Zm0-400v400-400Zm320 0v400-400Z\"\n  })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgPause);\nexport default __webpack_public_path__ + \"static/media/pause.a2928433ed5cc7648de3c090594ae911.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgDownload(_ref, svgRef) {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    height: \"24px\",\n    viewBox: \"0 -960 960 960\",\n    width: \"24px\",\n    fill: \"#000000\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M480-320 280-520l56-58 104 104v-326h80v326l104-104 56 58-200 200ZM240-160q-33 0-56.5-23.5T160-240v-120h80v120h480v-120h80v120q0 33-23.5 56.5T720-160H240Z\"\n  })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgDownload);\nexport default __webpack_public_path__ + \"static/media/download.01c22ee44fdee223b7131237ab3db32a.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgExecuteDown(_ref, svgRef) {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    height: \"24px\",\n    viewBox: \"0 -960 960 960\",\n    width: \"24px\",\n    fill: \"#000000\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M480-200 240-440l56-56 184 183 184-183 56 56-240 240Zm0-240L240-680l56-56 184 183 184-183 56 56-240 240Z\"\n  })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgExecuteDown);\nexport default __webpack_public_path__ + \"static/media/execute_down.c10e9f8e4b8f820f92895e991d47a402.svg\";\nexport { ForwardRef as ReactComponent };","// src/components/CardNode/CardNode.tsx\n\nimport React, { useState } from 'react';\nimport { Handle, Position } from 'react-flow-renderer';\nimport { CardContainer, TitleBand, StatusDot, ExecuteButton, StatusContainer, LoadingIcon, CloseButton, WarningIcon } from './CardNode.styles';\nimport { executeIcon, warningIcon, loadingIcon } from '../../assets';\nimport { executeCard, deleteCard } from '../../services/api';\n\ninterface CardNodeProps {\n  data: {\n    id: string;\n    title: string;\n    executed: boolean;\n    inconsistent: boolean;\n    onExecute: (id: string) => void;\n    onUpdate: (updatedCard: any) => void;\n    onDelete: (id: string) => void;\n    taskId: string;\n  };\n}\n\nconst CardNode: React.FC<CardNodeProps> = ({ data }) => {\n  const [isExecuting, setIsExecuting] = useState(false);\n\n  const handleExecute = async (event: React.MouseEvent) => {\n    event.stopPropagation();\n    setIsExecuting(true);\n    try {\n      const updatedCard = await executeCard(data.id);\n      data.onUpdate(updatedCard);\n    } catch (error) {\n      console.error('Error executing card:', error);\n    } finally {\n      setIsExecuting(false);\n    }\n  };\n\n  const handleDelete = async (event: React.MouseEvent) => {\n    event.stopPropagation();\n    const confirmed = window.confirm('Are you sure you want to delete this card?');\n    if (confirmed) {\n      try {\n        await deleteCard(data.id, data.taskId);\n        data.onDelete(data.id);\n      } catch (error) {\n        console.error('Error deleting card:', error);\n      }\n    }\n  };\n\n  return (\n    <CardContainer>\n      <TitleBand>{data.title}</TitleBand>\n      <CloseButton onClick={handleDelete}>×</CloseButton>\n      {data.inconsistent && <WarningIcon src={warningIcon} alt=\"Inconsistent\" />}\n      <StatusContainer>\n        <ExecuteButton onClick={handleExecute} data-tooltip=\"Execute Card\" disabled={isExecuting}>\n          {isExecuting ? <LoadingIcon src={loadingIcon} alt=\"Loading\" /> : <img src={executeIcon} alt=\"Execute\" />}\n        </ExecuteButton>\n        <StatusDot status={data.executed ? 'executed' : 'not-executed'} />\n      </StatusContainer>\n      <Handle type=\"target\" position={Position.Left} />\n      <Handle type=\"source\" position={Position.Right} />\n    </CardContainer>\n  );\n};\n\nexport default CardNode;\n","// src/components/CardEdge/CardEdge.styles.ts\n\nimport styled, { keyframes } from 'styled-components';\n\nconst dashAnimation = keyframes`\n  to {\n    stroke-dashoffset: 0;\n  }\n`;\n\nexport const EdgeButton = styled.img`\n  cursor: pointer;\n  border: 2px solid black;\n  border-radius: 50%;\n  background-color: red;\n`;\n\nexport const EdgePath = styled.path`\n  stroke: #000000;\n  stroke-width: 2;\n  stroke-dasharray: 10;\n  stroke-dashoffset: 20;\n  animation: ${dashAnimation} 2s linear infinite;\n`;\n\nexport const PopoverContainer = styled.div`\n  position: absolute;\n  background: white;\n  border: 2px solid black;\n  border-radius: 10px;\n  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n  padding: 10px;\n  z-index: 1000;\n`;\n","// src/components/CardEdge/CardEdge.tsx\n\nimport React, { MouseEvent } from 'react';\nimport { EdgeProps, getBezierPath } from 'react-flow-renderer';\nimport { EdgeButton, EdgePath } from './CardEdge.styles';\nimport closeIcon from '../../assets/close.svg';\n\nconst CardEdge = ({\n  id,\n  sourceX,\n  sourceY,\n  targetX,\n  targetY,\n  sourcePosition,\n  targetPosition,\n  data,\n}: EdgeProps) => {\n  const edgePath = getBezierPath({\n    sourceX,\n    sourceY,\n    sourcePosition,\n    targetX,\n    targetY,\n    targetPosition,\n  });\n\n  const onEdgeClick = (event: MouseEvent<HTMLImageElement>) => {\n    event.stopPropagation();\n    if (window.confirm('Do you want to delete this edge?')) {\n      data.onRemove(id);\n    }\n  };\n\n  return (\n    <>\n      <EdgePath id={id} className=\"react-flow__edge-path\" d={edgePath} />\n      <foreignObject\n        width={10}\n        height={10}\n        x={(sourceX + targetX) / 2 - 8}\n        y={(sourceY + targetY) / 2 - 8}\n        style={{ overflow: 'visible' }}\n      >\n        <EdgeButton\n          src={closeIcon}\n          onClick={onEdgeClick}\n          width={10}\n          height={10}\n        />\n      </foreignObject>\n    </>\n  );\n};\n\nexport default CardEdge;\n","// src/components/Flow/Flow.styles.ts\n\nimport styled from 'styled-components';\n\nexport const FlowContainer = styled.div`\n  position: relative;\n  flex: 1; /* Use flex to take up the remaining space */\n  width: 100%;\n  overflow: hidden;\n`;\n","// src/components/Flow/Flow.tsx\n\nimport React, { useCallback, useEffect } from 'react';\nimport ReactFlow, {\n  Background,\n  Controls,\n  MiniMap,\n  Node,\n  Edge,\n  useNodesState,\n  useEdgesState,\n  addEdge,\n  Connection,\n  OnEdgesDelete,\n  OnConnect\n} from 'react-flow-renderer';\nimport dagre from 'dagre';\nimport { setNextCard, removeNextCard } from '../../services/api';\nimport CardNode from './CardNode';\nimport CardEdge from '../CardEdge/CardEdge';\nimport { FlowContainer } from './Flow.styles';\n\ninterface FlowProps {\n  initialNodes: Node[];\n  initialEdges: Edge[];\n  onNodeClick: (event: React.MouseEvent, node: Node) => void;\n  onExecute: (id: string) => void;\n}\n\nconst nodeWidth = 172;\nconst nodeHeight = 36;\n\nconst dagreGraph = new dagre.graphlib.Graph();\ndagreGraph.setDefaultEdgeLabel(() => ({}));\ndagreGraph.setGraph({ rankdir: 'LR', nodesep: 100, ranksep: 100 });\n\nconst nodeTypes = {\n  cardNode: CardNode,\n};\n\nconst edgeTypes = {\n  card: CardEdge,\n};\n\nconst Flow: React.FC<FlowProps> = ({ initialNodes, initialEdges, onNodeClick, onExecute }) => {\n  const [nodes, setNodes, onNodesChange] = useNodesState(initialNodes);\n  const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges);\n\n  const onConnect: OnConnect = useCallback(async (params: Edge | Connection) => {\n    const newEdge = { ...params, type: 'card', data: { onRemove: handleDeleteEdge } };\n    setEdges((eds) => addEdge(newEdge, eds));\n\n    const { source, target } = params;\n\n    if (source && target) {\n      try {\n        await setNextCard(source, [target]);\n      } catch (error) {\n        console.error('Error setting card links:', error);\n      }\n    }\n  }, [setEdges]);\n\n  useEffect(() => {\n    initialNodes.forEach((node) => {\n      dagreGraph.setNode(node.id, { width: nodeWidth, height: nodeHeight });\n    });\n\n    initialEdges.forEach((edge) => {\n      dagreGraph.setEdge(edge.source, edge.target);\n    });\n\n    dagre.layout(dagreGraph);\n\n    const layoutedNodes = initialNodes.map((node) => {\n      const nodeWithPosition = dagreGraph.node(node.id);\n      node.position = {\n        x: nodeWithPosition.x - nodeWidth / 2,\n        y: nodeWithPosition.y - nodeHeight / 2,\n      };\n      node.type = 'cardNode';\n      node.data = { ...node.data, onExecute, onDelete };\n      return node;\n    });\n\n    setNodes(layoutedNodes);\n  }, [initialNodes, initialEdges]);\n\n  const onDelete = (id: string) => {\n    setNodes((nds) => nds.filter((node) => node.id !== id));\n    setEdges((eds) => eds.filter((edge) => edge.source !== id && edge.target !== id));\n  };\n\n  const onEdgesDelete: OnEdgesDelete = useCallback(async (edgesToDelete: Edge[]) => {\n    for (const edge of edgesToDelete) {\n      const { source, target } = edge;\n      try {\n        await removeNextCard(source, target);\n        setEdges((eds) => eds.filter((e) => e.id !== edge.id));\n      } catch (error) {\n        console.error('Error removing edge:', error);\n      }\n    }\n  }, [setEdges]);\n\n  const handleDeleteEdge = async (id: string) => {\n    const edge = edges.find((e) => e.id === id);\n    if (edge) {\n      const { source, target } = edge;\n      try {\n        await removeNextCard(source, target);\n        setEdges((eds) => eds.filter((e) => e.id !== id));\n      } catch (error) {\n        console.error('Error removing edge:', error);\n      }\n    }\n  };\n\n  return (\n    <FlowContainer>\n      <ReactFlow\n        nodes={nodes}\n        edges={edges.map(edge => ({ ...edge, type: 'card', data: { onRemove: handleDeleteEdge } }))}\n        onNodesChange={onNodesChange}\n        onEdgesChange={onEdgesChange}\n        onEdgesDelete={onEdgesDelete}\n        onConnect={onConnect}\n        onNodeClick={onNodeClick}\n        edgeTypes={edgeTypes}\n        fitView\n        fitViewOptions={{ padding: 0.2 }}\n        defaultZoom={0.8}\n        nodeTypes={nodeTypes}\n      >\n        <Controls />\n        <Background />\n      </ReactFlow>\n    </FlowContainer>\n  );\n};\n\nexport default Flow;\n","import styled from 'styled-components';\n\nexport const FormContainer = styled.div`\n  position: absolute;\n  width: 30%;\n  height: 80%; /* Set height to 80% of the page */\n  padding: 60px 20px 20px 20px; /* Add padding at the top to account for the title bar */\n  background: #fff;\n  box-sizing: border-box;\n  overflow-y: auto;\n  z-index: 1001; /* Higher z-index to ensure it's on top of the flow */\n  border: 2px solid #333; /* Optional: border for better visibility */\n  border-radius: 10px; /* Optional: rounded corners */\n  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); /* Optional: shadow for depth */\n\n  /* Hide scrollbar for Webkit browsers */\n  &::-webkit-scrollbar {\n    display: none;\n  }\n\n  /* Hide scrollbar for other browsers */\n  -ms-overflow-style: none;  /* IE and Edge */\n  scrollbar-width: none;  /* Firefox */\n`;\n\nexport const FormLabel = styled.label`\n  display: block;\n  margin: 10px 0 5px;\n`;\n\nexport const FormInput = styled.input`\n  width: 100%;\n  padding: 8px;\n  margin-bottom: 10px;\n  box-sizing: border-box;\n`;\n\nexport const FormTextArea = styled.textarea`\n  width: 100%;\n  height: 150px; /* Increased height */\n  padding: 8px;\n  margin-bottom: 10px;\n  box-sizing: border-box;\n  resize: none; /* Make text areas non-resizable */\n`;\n\nexport const FormButton = styled.button`\n  padding: 10px 20px;\n  background-color: orange; /* Orange background color */\n  border: 2px solid black; /* Black border */\n  border-radius: 5px;\n  cursor: pointer;\n  font-size: 16px;\n  color: #000;\n  margin: 0 auto; /* Center align the button */\n  display: block; /* Ensure the button takes only the necessary space */\n\n  &:hover {\n    background-color: #e08e0b; /* Darker orange on hover */\n  }\n`;\n\nexport const CloseButton = styled.button`\n  position: absolute;\n  top: 10px;\n  right: 10px;\n  background: transparent;\n  border: none;\n  font-size: 24px;\n  cursor: pointer;\n\n  &:hover {\n    color: #ff0000;\n  }\n`;\n\nexport const DropdownSelect = styled.select`\n  width: 100%;\n  padding: 8px;\n  margin-bottom: 10px;\n  box-sizing: border-box;\n  height: auto;\n`;\n\nexport const DropdownButton = styled.button`\n  width: 100%;\n  padding: 8px;\n  margin-bottom: 10px;\n  box-sizing: border-box;\n  cursor: pointer;\n  background-color: #61dafb;\n  border: none;\n  border-radius: 5px;\n  color: #fff;\n\n  &:hover {\n    background-color: #21a1f1;\n  }\n`;\n\nexport const DropdownContainer = styled.div`\n  position: relative;\n`;\n\ninterface DropdownMenuProps {\n  show: boolean;\n}\n\nexport const DropdownMenu = styled.div<DropdownMenuProps>`\n  position: absolute;\n  top: 40px;\n  left: 0;\n  width: 100%;\n  max-height: 200px;\n  overflow-y: auto;\n  background-color: #fff;\n  border: 1px solid #ccc;\n  z-index: 1002; /* Ensure dropdown is above other elements */\n  display: ${props => (props.show ? 'block' : 'none')};\n`;\n\nexport const TitleBand = styled.div`\n  background-color: orange;\n  width: 100%;\n  height: 40px; /* Adjust height if needed */\n  padding: 8px 0;\n  border-bottom: 2px solid black;\n  border-color: black;\n  position: absolute;\n  top: 0;\n  left: 0;\n  border-top-left-radius: 8px;\n  border-top-right-radius: 8px;\n  text-align: center;\n  font-weight: bold;\n  line-height: 40px; /* Center align text vertically */\n  cursor: grab;\n  \n`;\n","// src/config/config.ts\nexport const GENERATIVE_MODELS = [\n    { value: 'GPT_3_5_TURBO', label: 'GPT-3.5 Turbo' },\n    { value: 'GPT_4', label: 'GPT-4' },\n];\nexport const MUSIC_INSTRUMENTS = [\n    \"AcousticGrandPiano\",\n    \"ElectricGrandPiano\",\n    \"ElectricPiano1\",\n    \"AcousticGuitarNylon\",\n    \"ElectricGuitarClean\",\n    \"OverdrivenGuitar\",\n    \"AcousticBass\",\n    \"ElectricBassFinger\",\n    \"Violin\",\n    \"Cello\",\n    \"OrchestralHarp\",\n    \"StringEnsemble1\",\n    \"SynthStrings1\",\n    \"ChoirAahs\",\n    \"Trumpet\",\n    \"Trombone\",\n    \"FrenchHorn\",\n    \"AltoSax\",\n    \"TenorSax\",\n    \"Flute\",\n    \"PanFlute\",\n    \"Lead1Square\",\n    \"Lead2Sawtooth\",\n    \"TinkleBell\",\n    \"SteelDrums\",\n];\n","import React, { useState } from 'react';\nimport Draggable from 'react-draggable';\nimport {\n  FormContainer,\n  FormLabel,\n  FormInput,\n  FormTextArea,\n  FormButton,\n  CloseButton,\n  TitleBand,\n} from './AddCardPopover.styles';\nimport { createCard } from '../../services/api';\nimport { GENERATIVE_MODELS } from '../../config/config';\n\ninterface AddCardPopoverProps {\n  isOpen: boolean;\n  onRequestClose: () => void;\n  taskId: string;\n  currentCards: any[];\n  onCardCreated: () => void;\n}\n\nconst AddCardPopover: React.FC<AddCardPopoverProps> = ({\n  isOpen,\n  onRequestClose,\n  taskId,\n  onCardCreated,\n}) => {\n  const [title, setTitle] = useState('');\n  const [objective, setObjective] = useState('');\n  const [prompt, setPrompt] = useState('');\n  const [context, setContext] = useState('');\n  const [exampleOutput, setExampleOutput] = useState('');\n  const [generativeModel, setGenerativeModel] = useState(GENERATIVE_MODELS[0].value);\n\n  const handleSubmit = async (event: React.FormEvent) => {\n    event.preventDefault();\n\n    const newCard = {\n      title,\n      objective,\n      generativeModel,\n      prompt,\n      context,\n      exampleOutput,\n      taskId,\n    };\n\n    try {\n      await createCard(newCard);\n      onCardCreated();\n      onRequestClose();\n    } catch (error) {\n      console.error('Error creating card:', error);\n    }\n  };\n\n  if (!isOpen) {\n    return null;\n  }\n\n  return (\n    <Draggable handle=\".draggable-handle\" bounds=\"parent\">\n      <FormContainer style={{ top: '10%', left: '10%' }}>\n        <TitleBand className=\"draggable-handle\">Create New Card</TitleBand>\n        <CloseButton onClick={onRequestClose}>×</CloseButton>\n        <form onSubmit={handleSubmit}>\n          <FormLabel>\n            Title:\n            <FormInput type=\"text\" value={title} onChange={(e) => setTitle(e.target.value)} required />\n          </FormLabel>\n          <FormLabel>\n            Objective:\n            <FormInput type=\"text\" value={objective} onChange={(e) => setObjective(e.target.value)} required />\n          </FormLabel>\n          <FormLabel>\n            Generative Model:\n            <FormInput as=\"select\" value={generativeModel} onChange={(e) => setGenerativeModel(e.target.value)}>\n              {GENERATIVE_MODELS.map(model => (\n                <option key={model.value} value={model.value}>{model.label}</option>\n              ))}\n            </FormInput>\n          </FormLabel>\n          <FormLabel>\n            Prompt:\n            <FormTextArea value={prompt} onChange={(e) => setPrompt(e.target.value)} required></FormTextArea>\n          </FormLabel>\n          <FormLabel>\n            Context:\n            <FormTextArea value={context} onChange={(e) => setContext(e.target.value)}></FormTextArea>\n          </FormLabel>\n          <FormLabel>\n            Example Output:\n            <FormTextArea value={exampleOutput} onChange={(e) => setExampleOutput(e.target.value)}></FormTextArea>\n          </FormLabel>\n          <FormButton type=\"submit\">Create Card</FormButton>\n        </form>\n      </FormContainer>\n    </Draggable>\n  );\n};\n\nexport default AddCardPopover;\n","// src/pages/TaskDetailPage/TaskDetailPage.styles.ts\nimport styled from 'styled-components';\n\nexport const PageContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  height: 100vh;\n  overflow: hidden;\n  box-sizing: border-box;\n  background-color: #fff; /* White background */\n`;\nexport const TaskInfoContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  align-items: flex-start;\n  width: 100%;\n  box-sizing: border-box;\n  position: absolute;\n  top: 60px; /* Position it below the OptionsBar */\n  z-index: 1; /* Ensure it is above the Flow component */\n`;\n\nexport const TaskInfoBox = styled.div`\n  background-color: #f9f9f9;\n  border: 2px solid black;\n  border-bottom-right-radius: 20px;\n  padding: 20px;\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n  box-sizing: border-box;\n  z-index: 1; /* Ensure it is above the Flow component */\n  background-color: #333; /* Add background color */\n  box-shadow: inset 0 -3px 0 0 orange, inset -3px 0 0 0 orange, 0 2px 10px rgba(0, 0, 0, 0.1);\n`;\n\nexport const TaskInfo = styled.div`\n  display: flex;\n  flex-direction: column;\n\n  h1 {\n    margin: 0;\n    font-size: 24px;\n    color: #fff;\n  }\n\n  p {\n    margin: 0;\n    font-size: 14px;\n    color: #fff\n  }\n`;\n\nexport const ButtonsBox = styled.div`\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  background-color: white;\n  border-bottom: 2px solid black;\n  border-left: 2px solid black;\n  border-bottom-left-radius: 20px;\n  padding: 10px;\n  margin-top: 10px; /* Adjust to ensure visibility */\n  width: auto; /* Adjust width as needed */\n  box-shadow: inset 0 -3px 0 0 orange, inset 3px 0 0 0 orange, 0 2px 10px rgba(0, 0, 0, 0.1);\n  box-sizing: border-box;\n  z-index: 2; /* Ensure it is above the TaskInfoBox and Flow component */\n  background-color: #333; /* Add background color */\n`;\n\nexport const RoundButton = styled.button`\n  background-color: orange;\n  border: 2px solid black;\n  border-radius: 50%;\n  width: 60px;\n  height: 60px;\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 18px;\n  color: black;\n\n  &:hover {\n    background-color: #e08e0b;\n  }\n\n  .icon {\n    fill: black; /* Ensure the SVG icon is black */\n    width: 24px; /* Adjust size as needed */\n    height: 24px; /* Adjust size as needed */\n  }\n`;\n\nexport const ContentContainer = styled.div`\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n  overflow: hidden;\n  height: calc(100vh - 60px); /* Adjust based on the height of the OptionsBar */\n  box-sizing: border-box;\n  margin-top: 20px; /* Ensure it doesn't overlap with the TaskInfoContainer */\n  z-index: 0; /* Ensure it is below the TaskInfoContainer and ButtonsBox */\n`;\n","/**\n * @typedef Options\n *   Configuration.\n * @property {boolean | null | undefined} [jsx=false]\n *   Support JSX identifiers (default: `false`).\n */\n\nconst startRe = /[$_\\p{ID_Start}]/u\nconst contRe = /[$_\\u{200C}\\u{200D}\\p{ID_Continue}]/u\nconst contReJsx = /[-$_\\u{200C}\\u{200D}\\p{ID_Continue}]/u\nconst nameRe = /^[$_\\p{ID_Start}][$_\\u{200C}\\u{200D}\\p{ID_Continue}]*$/u\nconst nameReJsx = /^[$_\\p{ID_Start}][-$_\\u{200C}\\u{200D}\\p{ID_Continue}]*$/u\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Checks if the given code point can start an identifier.\n *\n * @param {number | undefined} code\n *   Code point to check.\n * @returns {boolean}\n *   Whether `code` can start an identifier.\n */\n// Note: `undefined` is supported so you can pass the result from `''.codePointAt`.\nexport function start(code) {\n  return code ? startRe.test(String.fromCodePoint(code)) : false\n}\n\n/**\n * Checks if the given code point can continue an identifier.\n *\n * @param {number | undefined} code\n *   Code point to check.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {boolean}\n *   Whether `code` can continue an identifier.\n */\n// Note: `undefined` is supported so you can pass the result from `''.codePointAt`.\nexport function cont(code, options) {\n  const settings = options || emptyOptions\n  const re = settings.jsx ? contReJsx : contRe\n  return code ? re.test(String.fromCodePoint(code)) : false\n}\n\n/**\n * Checks if the given value is a valid identifier name.\n *\n * @param {string} name\n *   Identifier to check.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {boolean}\n *   Whether `name` can be an identifier.\n */\nexport function name(name, options) {\n  const settings = options || emptyOptions\n  const re = settings.jsx ? nameReJsx : nameRe\n  return re.test(name)\n}\n","/**\n * @typedef {import('hast').Nodes} Nodes\n */\n\n// HTML whitespace expression.\n// See <https://infra.spec.whatwg.org/#ascii-whitespace>.\nconst re = /[ \\t\\n\\f\\r]/g\n\n/**\n * Check if the given value is *inter-element whitespace*.\n *\n * @param {Nodes | string} thing\n *   Thing to check (`Node` or `string`).\n * @returns {boolean}\n *   Whether the `value` is inter-element whitespace (`boolean`): consisting of\n *   zero or more of space, tab (`\\t`), line feed (`\\n`), carriage return\n *   (`\\r`), or form feed (`\\f`); if a node is passed it must be a `Text` node,\n *   whose `value` field is checked.\n */\nexport function whitespace(thing) {\n  return typeof thing === 'object'\n    ? thing.type === 'text'\n      ? empty(thing.value)\n      : false\n    : empty(thing)\n}\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nfunction empty(value) {\n  return value.replace(re, '') === ''\n}\n","/**\n * @typedef {import('./info.js').Info} Info\n * @typedef {Record<string, Info>} Properties\n * @typedef {Record<string, string>} Normal\n */\n\nexport class Schema {\n  /**\n   * @constructor\n   * @param {Properties} property\n   * @param {Normal} normal\n   * @param {string} [space]\n   */\n  constructor(property, normal, space) {\n    this.property = property\n    this.normal = normal\n    if (space) {\n      this.space = space\n    }\n  }\n}\n\n/** @type {Properties} */\nSchema.prototype.property = {}\n/** @type {Normal} */\nSchema.prototype.normal = {}\n/** @type {string|null} */\nSchema.prototype.space = null\n","/**\n * @typedef {import('./schema.js').Properties} Properties\n * @typedef {import('./schema.js').Normal} Normal\n */\n\nimport {Schema} from './schema.js'\n\n/**\n * @param {Schema[]} definitions\n * @param {string} [space]\n * @returns {Schema}\n */\nexport function merge(definitions, space) {\n  /** @type {Properties} */\n  const property = {}\n  /** @type {Normal} */\n  const normal = {}\n  let index = -1\n\n  while (++index < definitions.length) {\n    Object.assign(property, definitions[index].property)\n    Object.assign(normal, definitions[index].normal)\n  }\n\n  return new Schema(property, normal, space)\n}\n","/**\n * @param {string} value\n * @returns {string}\n */\nexport function normalize(value) {\n  return value.toLowerCase()\n}\n","export class Info {\n  /**\n   * @constructor\n   * @param {string} property\n   * @param {string} attribute\n   */\n  constructor(property, attribute) {\n    /** @type {string} */\n    this.property = property\n    /** @type {string} */\n    this.attribute = attribute\n  }\n}\n\n/** @type {string|null} */\nInfo.prototype.space = null\nInfo.prototype.boolean = false\nInfo.prototype.booleanish = false\nInfo.prototype.overloadedBoolean = false\nInfo.prototype.number = false\nInfo.prototype.commaSeparated = false\nInfo.prototype.spaceSeparated = false\nInfo.prototype.commaOrSpaceSeparated = false\nInfo.prototype.mustUseProperty = false\nInfo.prototype.defined = false\n","let powers = 0\n\nexport const boolean = increment()\nexport const booleanish = increment()\nexport const overloadedBoolean = increment()\nexport const number = increment()\nexport const spaceSeparated = increment()\nexport const commaSeparated = increment()\nexport const commaOrSpaceSeparated = increment()\n\nfunction increment() {\n  return 2 ** ++powers\n}\n","import {Info} from './info.js'\nimport * as types from './types.js'\n\n/** @type {Array<keyof types>} */\n// @ts-expect-error: hush.\nconst checks = Object.keys(types)\n\nexport class DefinedInfo extends Info {\n  /**\n   * @constructor\n   * @param {string} property\n   * @param {string} attribute\n   * @param {number|null} [mask]\n   * @param {string} [space]\n   */\n  constructor(property, attribute, mask, space) {\n    let index = -1\n\n    super(property, attribute)\n\n    mark(this, 'space', space)\n\n    if (typeof mask === 'number') {\n      while (++index < checks.length) {\n        const check = checks[index]\n        mark(this, checks[index], (mask & types[check]) === types[check])\n      }\n    }\n  }\n}\n\nDefinedInfo.prototype.defined = true\n\n/**\n * @param {DefinedInfo} values\n * @param {string} key\n * @param {unknown} value\n */\nfunction mark(values, key, value) {\n  if (value) {\n    // @ts-expect-error: assume `value` matches the expected value of `key`.\n    values[key] = value\n  }\n}\n","/**\n * @typedef {import('./schema.js').Properties} Properties\n * @typedef {import('./schema.js').Normal} Normal\n *\n * @typedef {Record<string, string>} Attributes\n *\n * @typedef {Object} Definition\n * @property {Record<string, number|null>} properties\n * @property {(attributes: Attributes, property: string) => string} transform\n * @property {string} [space]\n * @property {Attributes} [attributes]\n * @property {Array<string>} [mustUseProperty]\n */\n\nimport {normalize} from '../normalize.js'\nimport {Schema} from './schema.js'\nimport {DefinedInfo} from './defined-info.js'\n\nconst own = {}.hasOwnProperty\n\n/**\n * @param {Definition} definition\n * @returns {Schema}\n */\nexport function create(definition) {\n  /** @type {Properties} */\n  const property = {}\n  /** @type {Normal} */\n  const normal = {}\n  /** @type {string} */\n  let prop\n\n  for (prop in definition.properties) {\n    if (own.call(definition.properties, prop)) {\n      const value = definition.properties[prop]\n      const info = new DefinedInfo(\n        prop,\n        definition.transform(definition.attributes || {}, prop),\n        value,\n        definition.space\n      )\n\n      if (\n        definition.mustUseProperty &&\n        definition.mustUseProperty.includes(prop)\n      ) {\n        info.mustUseProperty = true\n      }\n\n      property[prop] = info\n\n      normal[normalize(prop)] = prop\n      normal[normalize(info.attribute)] = prop\n    }\n  }\n\n  return new Schema(property, normal, definition.space)\n}\n","import {create} from './util/create.js'\n\nexport const xlink = create({\n  space: 'xlink',\n  transform(_, prop) {\n    return 'xlink:' + prop.slice(5).toLowerCase()\n  },\n  properties: {\n    xLinkActuate: null,\n    xLinkArcRole: null,\n    xLinkHref: null,\n    xLinkRole: null,\n    xLinkShow: null,\n    xLinkTitle: null,\n    xLinkType: null\n  }\n})\n","import {create} from './util/create.js'\n\nexport const xml = create({\n  space: 'xml',\n  transform(_, prop) {\n    return 'xml:' + prop.slice(3).toLowerCase()\n  },\n  properties: {xmlLang: null, xmlBase: null, xmlSpace: null}\n})\n","/**\n * @param {Record<string, string>} attributes\n * @param {string} attribute\n * @returns {string}\n */\nexport function caseSensitiveTransform(attributes, attribute) {\n  return attribute in attributes ? attributes[attribute] : attribute\n}\n","import {caseSensitiveTransform} from './case-sensitive-transform.js'\n\n/**\n * @param {Record<string, string>} attributes\n * @param {string} property\n * @returns {string}\n */\nexport function caseInsensitiveTransform(attributes, property) {\n  return caseSensitiveTransform(attributes, property.toLowerCase())\n}\n","import {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const xmlns = create({\n  space: 'xmlns',\n  attributes: {xmlnsxlink: 'xmlns:xlink'},\n  transform: caseInsensitiveTransform,\n  properties: {xmlns: null, xmlnsXLink: null}\n})\n","import {booleanish, number, spaceSeparated} from './util/types.js'\nimport {create} from './util/create.js'\n\nexport const aria = create({\n  transform(_, prop) {\n    return prop === 'role' ? prop : 'aria-' + prop.slice(4).toLowerCase()\n  },\n  properties: {\n    ariaActiveDescendant: null,\n    ariaAtomic: booleanish,\n    ariaAutoComplete: null,\n    ariaBusy: booleanish,\n    ariaChecked: booleanish,\n    ariaColCount: number,\n    ariaColIndex: number,\n    ariaColSpan: number,\n    ariaControls: spaceSeparated,\n    ariaCurrent: null,\n    ariaDescribedBy: spaceSeparated,\n    ariaDetails: null,\n    ariaDisabled: booleanish,\n    ariaDropEffect: spaceSeparated,\n    ariaErrorMessage: null,\n    ariaExpanded: booleanish,\n    ariaFlowTo: spaceSeparated,\n    ariaGrabbed: booleanish,\n    ariaHasPopup: null,\n    ariaHidden: booleanish,\n    ariaInvalid: null,\n    ariaKeyShortcuts: null,\n    ariaLabel: null,\n    ariaLabelledBy: spaceSeparated,\n    ariaLevel: number,\n    ariaLive: null,\n    ariaModal: booleanish,\n    ariaMultiLine: booleanish,\n    ariaMultiSelectable: booleanish,\n    ariaOrientation: null,\n    ariaOwns: spaceSeparated,\n    ariaPlaceholder: null,\n    ariaPosInSet: number,\n    ariaPressed: booleanish,\n    ariaReadOnly: booleanish,\n    ariaRelevant: null,\n    ariaRequired: booleanish,\n    ariaRoleDescription: spaceSeparated,\n    ariaRowCount: number,\n    ariaRowIndex: number,\n    ariaRowSpan: number,\n    ariaSelected: booleanish,\n    ariaSetSize: number,\n    ariaSort: null,\n    ariaValueMax: number,\n    ariaValueMin: number,\n    ariaValueNow: number,\n    ariaValueText: null,\n    role: null\n  }\n})\n","import {\n  boolean,\n  overloadedBoolean,\n  booleanish,\n  number,\n  spaceSeparated,\n  commaSeparated\n} from './util/types.js'\nimport {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const html = create({\n  space: 'html',\n  attributes: {\n    acceptcharset: 'accept-charset',\n    classname: 'class',\n    htmlfor: 'for',\n    httpequiv: 'http-equiv'\n  },\n  transform: caseInsensitiveTransform,\n  mustUseProperty: ['checked', 'multiple', 'muted', 'selected'],\n  properties: {\n    // Standard Properties.\n    abbr: null,\n    accept: commaSeparated,\n    acceptCharset: spaceSeparated,\n    accessKey: spaceSeparated,\n    action: null,\n    allow: null,\n    allowFullScreen: boolean,\n    allowPaymentRequest: boolean,\n    allowUserMedia: boolean,\n    alt: null,\n    as: null,\n    async: boolean,\n    autoCapitalize: null,\n    autoComplete: spaceSeparated,\n    autoFocus: boolean,\n    autoPlay: boolean,\n    blocking: spaceSeparated,\n    capture: null,\n    charSet: null,\n    checked: boolean,\n    cite: null,\n    className: spaceSeparated,\n    cols: number,\n    colSpan: null,\n    content: null,\n    contentEditable: booleanish,\n    controls: boolean,\n    controlsList: spaceSeparated,\n    coords: number | commaSeparated,\n    crossOrigin: null,\n    data: null,\n    dateTime: null,\n    decoding: null,\n    default: boolean,\n    defer: boolean,\n    dir: null,\n    dirName: null,\n    disabled: boolean,\n    download: overloadedBoolean,\n    draggable: booleanish,\n    encType: null,\n    enterKeyHint: null,\n    fetchPriority: null,\n    form: null,\n    formAction: null,\n    formEncType: null,\n    formMethod: null,\n    formNoValidate: boolean,\n    formTarget: null,\n    headers: spaceSeparated,\n    height: number,\n    hidden: boolean,\n    high: number,\n    href: null,\n    hrefLang: null,\n    htmlFor: spaceSeparated,\n    httpEquiv: spaceSeparated,\n    id: null,\n    imageSizes: null,\n    imageSrcSet: null,\n    inert: boolean,\n    inputMode: null,\n    integrity: null,\n    is: null,\n    isMap: boolean,\n    itemId: null,\n    itemProp: spaceSeparated,\n    itemRef: spaceSeparated,\n    itemScope: boolean,\n    itemType: spaceSeparated,\n    kind: null,\n    label: null,\n    lang: null,\n    language: null,\n    list: null,\n    loading: null,\n    loop: boolean,\n    low: number,\n    manifest: null,\n    max: null,\n    maxLength: number,\n    media: null,\n    method: null,\n    min: null,\n    minLength: number,\n    multiple: boolean,\n    muted: boolean,\n    name: null,\n    nonce: null,\n    noModule: boolean,\n    noValidate: boolean,\n    onAbort: null,\n    onAfterPrint: null,\n    onAuxClick: null,\n    onBeforeMatch: null,\n    onBeforePrint: null,\n    onBeforeToggle: null,\n    onBeforeUnload: null,\n    onBlur: null,\n    onCancel: null,\n    onCanPlay: null,\n    onCanPlayThrough: null,\n    onChange: null,\n    onClick: null,\n    onClose: null,\n    onContextLost: null,\n    onContextMenu: null,\n    onContextRestored: null,\n    onCopy: null,\n    onCueChange: null,\n    onCut: null,\n    onDblClick: null,\n    onDrag: null,\n    onDragEnd: null,\n    onDragEnter: null,\n    onDragExit: null,\n    onDragLeave: null,\n    onDragOver: null,\n    onDragStart: null,\n    onDrop: null,\n    onDurationChange: null,\n    onEmptied: null,\n    onEnded: null,\n    onError: null,\n    onFocus: null,\n    onFormData: null,\n    onHashChange: null,\n    onInput: null,\n    onInvalid: null,\n    onKeyDown: null,\n    onKeyPress: null,\n    onKeyUp: null,\n    onLanguageChange: null,\n    onLoad: null,\n    onLoadedData: null,\n    onLoadedMetadata: null,\n    onLoadEnd: null,\n    onLoadStart: null,\n    onMessage: null,\n    onMessageError: null,\n    onMouseDown: null,\n    onMouseEnter: null,\n    onMouseLeave: null,\n    onMouseMove: null,\n    onMouseOut: null,\n    onMouseOver: null,\n    onMouseUp: null,\n    onOffline: null,\n    onOnline: null,\n    onPageHide: null,\n    onPageShow: null,\n    onPaste: null,\n    onPause: null,\n    onPlay: null,\n    onPlaying: null,\n    onPopState: null,\n    onProgress: null,\n    onRateChange: null,\n    onRejectionHandled: null,\n    onReset: null,\n    onResize: null,\n    onScroll: null,\n    onScrollEnd: null,\n    onSecurityPolicyViolation: null,\n    onSeeked: null,\n    onSeeking: null,\n    onSelect: null,\n    onSlotChange: null,\n    onStalled: null,\n    onStorage: null,\n    onSubmit: null,\n    onSuspend: null,\n    onTimeUpdate: null,\n    onToggle: null,\n    onUnhandledRejection: null,\n    onUnload: null,\n    onVolumeChange: null,\n    onWaiting: null,\n    onWheel: null,\n    open: boolean,\n    optimum: number,\n    pattern: null,\n    ping: spaceSeparated,\n    placeholder: null,\n    playsInline: boolean,\n    popover: null,\n    popoverTarget: null,\n    popoverTargetAction: null,\n    poster: null,\n    preload: null,\n    readOnly: boolean,\n    referrerPolicy: null,\n    rel: spaceSeparated,\n    required: boolean,\n    reversed: boolean,\n    rows: number,\n    rowSpan: number,\n    sandbox: spaceSeparated,\n    scope: null,\n    scoped: boolean,\n    seamless: boolean,\n    selected: boolean,\n    shadowRootClonable: boolean,\n    shadowRootDelegatesFocus: boolean,\n    shadowRootMode: null,\n    shape: null,\n    size: number,\n    sizes: null,\n    slot: null,\n    span: number,\n    spellCheck: booleanish,\n    src: null,\n    srcDoc: null,\n    srcLang: null,\n    srcSet: null,\n    start: number,\n    step: null,\n    style: null,\n    tabIndex: number,\n    target: null,\n    title: null,\n    translate: null,\n    type: null,\n    typeMustMatch: boolean,\n    useMap: null,\n    value: booleanish,\n    width: number,\n    wrap: null,\n    writingSuggestions: null,\n\n    // Legacy.\n    // See: https://html.spec.whatwg.org/#other-elements,-attributes-and-apis\n    align: null, // Several. Use CSS `text-align` instead,\n    aLink: null, // `<body>`. Use CSS `a:active {color}` instead\n    archive: spaceSeparated, // `<object>`. List of URIs to archives\n    axis: null, // `<td>` and `<th>`. Use `scope` on `<th>`\n    background: null, // `<body>`. Use CSS `background-image` instead\n    bgColor: null, // `<body>` and table elements. Use CSS `background-color` instead\n    border: number, // `<table>`. Use CSS `border-width` instead,\n    borderColor: null, // `<table>`. Use CSS `border-color` instead,\n    bottomMargin: number, // `<body>`\n    cellPadding: null, // `<table>`\n    cellSpacing: null, // `<table>`\n    char: null, // Several table elements. When `align=char`, sets the character to align on\n    charOff: null, // Several table elements. When `char`, offsets the alignment\n    classId: null, // `<object>`\n    clear: null, // `<br>`. Use CSS `clear` instead\n    code: null, // `<object>`\n    codeBase: null, // `<object>`\n    codeType: null, // `<object>`\n    color: null, // `<font>` and `<hr>`. Use CSS instead\n    compact: boolean, // Lists. Use CSS to reduce space between items instead\n    declare: boolean, // `<object>`\n    event: null, // `<script>`\n    face: null, // `<font>`. Use CSS instead\n    frame: null, // `<table>`\n    frameBorder: null, // `<iframe>`. Use CSS `border` instead\n    hSpace: number, // `<img>` and `<object>`\n    leftMargin: number, // `<body>`\n    link: null, // `<body>`. Use CSS `a:link {color: *}` instead\n    longDesc: null, // `<frame>`, `<iframe>`, and `<img>`. Use an `<a>`\n    lowSrc: null, // `<img>`. Use a `<picture>`\n    marginHeight: number, // `<body>`\n    marginWidth: number, // `<body>`\n    noResize: boolean, // `<frame>`\n    noHref: boolean, // `<area>`. Use no href instead of an explicit `nohref`\n    noShade: boolean, // `<hr>`. Use background-color and height instead of borders\n    noWrap: boolean, // `<td>` and `<th>`\n    object: null, // `<applet>`\n    profile: null, // `<head>`\n    prompt: null, // `<isindex>`\n    rev: null, // `<link>`\n    rightMargin: number, // `<body>`\n    rules: null, // `<table>`\n    scheme: null, // `<meta>`\n    scrolling: booleanish, // `<frame>`. Use overflow in the child context\n    standby: null, // `<object>`\n    summary: null, // `<table>`\n    text: null, // `<body>`. Use CSS `color` instead\n    topMargin: number, // `<body>`\n    valueType: null, // `<param>`\n    version: null, // `<html>`. Use a doctype.\n    vAlign: null, // Several. Use CSS `vertical-align` instead\n    vLink: null, // `<body>`. Use CSS `a:visited {color}` instead\n    vSpace: number, // `<img>` and `<object>`\n\n    // Non-standard Properties.\n    allowTransparency: null,\n    autoCorrect: null,\n    autoSave: null,\n    disablePictureInPicture: boolean,\n    disableRemotePlayback: boolean,\n    prefix: null,\n    property: null,\n    results: number,\n    security: null,\n    unselectable: null\n  }\n})\n","import {\n  boolean,\n  number,\n  spaceSeparated,\n  commaSeparated,\n  commaOrSpaceSeparated\n} from './util/types.js'\nimport {create} from './util/create.js'\nimport {caseSensitiveTransform} from './util/case-sensitive-transform.js'\n\nexport const svg = create({\n  space: 'svg',\n  attributes: {\n    accentHeight: 'accent-height',\n    alignmentBaseline: 'alignment-baseline',\n    arabicForm: 'arabic-form',\n    baselineShift: 'baseline-shift',\n    capHeight: 'cap-height',\n    className: 'class',\n    clipPath: 'clip-path',\n    clipRule: 'clip-rule',\n    colorInterpolation: 'color-interpolation',\n    colorInterpolationFilters: 'color-interpolation-filters',\n    colorProfile: 'color-profile',\n    colorRendering: 'color-rendering',\n    crossOrigin: 'crossorigin',\n    dataType: 'datatype',\n    dominantBaseline: 'dominant-baseline',\n    enableBackground: 'enable-background',\n    fillOpacity: 'fill-opacity',\n    fillRule: 'fill-rule',\n    floodColor: 'flood-color',\n    floodOpacity: 'flood-opacity',\n    fontFamily: 'font-family',\n    fontSize: 'font-size',\n    fontSizeAdjust: 'font-size-adjust',\n    fontStretch: 'font-stretch',\n    fontStyle: 'font-style',\n    fontVariant: 'font-variant',\n    fontWeight: 'font-weight',\n    glyphName: 'glyph-name',\n    glyphOrientationHorizontal: 'glyph-orientation-horizontal',\n    glyphOrientationVertical: 'glyph-orientation-vertical',\n    hrefLang: 'hreflang',\n    horizAdvX: 'horiz-adv-x',\n    horizOriginX: 'horiz-origin-x',\n    horizOriginY: 'horiz-origin-y',\n    imageRendering: 'image-rendering',\n    letterSpacing: 'letter-spacing',\n    lightingColor: 'lighting-color',\n    markerEnd: 'marker-end',\n    markerMid: 'marker-mid',\n    markerStart: 'marker-start',\n    navDown: 'nav-down',\n    navDownLeft: 'nav-down-left',\n    navDownRight: 'nav-down-right',\n    navLeft: 'nav-left',\n    navNext: 'nav-next',\n    navPrev: 'nav-prev',\n    navRight: 'nav-right',\n    navUp: 'nav-up',\n    navUpLeft: 'nav-up-left',\n    navUpRight: 'nav-up-right',\n    onAbort: 'onabort',\n    onActivate: 'onactivate',\n    onAfterPrint: 'onafterprint',\n    onBeforePrint: 'onbeforeprint',\n    onBegin: 'onbegin',\n    onCancel: 'oncancel',\n    onCanPlay: 'oncanplay',\n    onCanPlayThrough: 'oncanplaythrough',\n    onChange: 'onchange',\n    onClick: 'onclick',\n    onClose: 'onclose',\n    onCopy: 'oncopy',\n    onCueChange: 'oncuechange',\n    onCut: 'oncut',\n    onDblClick: 'ondblclick',\n    onDrag: 'ondrag',\n    onDragEnd: 'ondragend',\n    onDragEnter: 'ondragenter',\n    onDragExit: 'ondragexit',\n    onDragLeave: 'ondragleave',\n    onDragOver: 'ondragover',\n    onDragStart: 'ondragstart',\n    onDrop: 'ondrop',\n    onDurationChange: 'ondurationchange',\n    onEmptied: 'onemptied',\n    onEnd: 'onend',\n    onEnded: 'onended',\n    onError: 'onerror',\n    onFocus: 'onfocus',\n    onFocusIn: 'onfocusin',\n    onFocusOut: 'onfocusout',\n    onHashChange: 'onhashchange',\n    onInput: 'oninput',\n    onInvalid: 'oninvalid',\n    onKeyDown: 'onkeydown',\n    onKeyPress: 'onkeypress',\n    onKeyUp: 'onkeyup',\n    onLoad: 'onload',\n    onLoadedData: 'onloadeddata',\n    onLoadedMetadata: 'onloadedmetadata',\n    onLoadStart: 'onloadstart',\n    onMessage: 'onmessage',\n    onMouseDown: 'onmousedown',\n    onMouseEnter: 'onmouseenter',\n    onMouseLeave: 'onmouseleave',\n    onMouseMove: 'onmousemove',\n    onMouseOut: 'onmouseout',\n    onMouseOver: 'onmouseover',\n    onMouseUp: 'onmouseup',\n    onMouseWheel: 'onmousewheel',\n    onOffline: 'onoffline',\n    onOnline: 'ononline',\n    onPageHide: 'onpagehide',\n    onPageShow: 'onpageshow',\n    onPaste: 'onpaste',\n    onPause: 'onpause',\n    onPlay: 'onplay',\n    onPlaying: 'onplaying',\n    onPopState: 'onpopstate',\n    onProgress: 'onprogress',\n    onRateChange: 'onratechange',\n    onRepeat: 'onrepeat',\n    onReset: 'onreset',\n    onResize: 'onresize',\n    onScroll: 'onscroll',\n    onSeeked: 'onseeked',\n    onSeeking: 'onseeking',\n    onSelect: 'onselect',\n    onShow: 'onshow',\n    onStalled: 'onstalled',\n    onStorage: 'onstorage',\n    onSubmit: 'onsubmit',\n    onSuspend: 'onsuspend',\n    onTimeUpdate: 'ontimeupdate',\n    onToggle: 'ontoggle',\n    onUnload: 'onunload',\n    onVolumeChange: 'onvolumechange',\n    onWaiting: 'onwaiting',\n    onZoom: 'onzoom',\n    overlinePosition: 'overline-position',\n    overlineThickness: 'overline-thickness',\n    paintOrder: 'paint-order',\n    panose1: 'panose-1',\n    pointerEvents: 'pointer-events',\n    referrerPolicy: 'referrerpolicy',\n    renderingIntent: 'rendering-intent',\n    shapeRendering: 'shape-rendering',\n    stopColor: 'stop-color',\n    stopOpacity: 'stop-opacity',\n    strikethroughPosition: 'strikethrough-position',\n    strikethroughThickness: 'strikethrough-thickness',\n    strokeDashArray: 'stroke-dasharray',\n    strokeDashOffset: 'stroke-dashoffset',\n    strokeLineCap: 'stroke-linecap',\n    strokeLineJoin: 'stroke-linejoin',\n    strokeMiterLimit: 'stroke-miterlimit',\n    strokeOpacity: 'stroke-opacity',\n    strokeWidth: 'stroke-width',\n    tabIndex: 'tabindex',\n    textAnchor: 'text-anchor',\n    textDecoration: 'text-decoration',\n    textRendering: 'text-rendering',\n    transformOrigin: 'transform-origin',\n    typeOf: 'typeof',\n    underlinePosition: 'underline-position',\n    underlineThickness: 'underline-thickness',\n    unicodeBidi: 'unicode-bidi',\n    unicodeRange: 'unicode-range',\n    unitsPerEm: 'units-per-em',\n    vAlphabetic: 'v-alphabetic',\n    vHanging: 'v-hanging',\n    vIdeographic: 'v-ideographic',\n    vMathematical: 'v-mathematical',\n    vectorEffect: 'vector-effect',\n    vertAdvY: 'vert-adv-y',\n    vertOriginX: 'vert-origin-x',\n    vertOriginY: 'vert-origin-y',\n    wordSpacing: 'word-spacing',\n    writingMode: 'writing-mode',\n    xHeight: 'x-height',\n    // These were camelcased in Tiny. Now lowercased in SVG 2\n    playbackOrder: 'playbackorder',\n    timelineBegin: 'timelinebegin'\n  },\n  transform: caseSensitiveTransform,\n  properties: {\n    about: commaOrSpaceSeparated,\n    accentHeight: number,\n    accumulate: null,\n    additive: null,\n    alignmentBaseline: null,\n    alphabetic: number,\n    amplitude: number,\n    arabicForm: null,\n    ascent: number,\n    attributeName: null,\n    attributeType: null,\n    azimuth: number,\n    bandwidth: null,\n    baselineShift: null,\n    baseFrequency: null,\n    baseProfile: null,\n    bbox: null,\n    begin: null,\n    bias: number,\n    by: null,\n    calcMode: null,\n    capHeight: number,\n    className: spaceSeparated,\n    clip: null,\n    clipPath: null,\n    clipPathUnits: null,\n    clipRule: null,\n    color: null,\n    colorInterpolation: null,\n    colorInterpolationFilters: null,\n    colorProfile: null,\n    colorRendering: null,\n    content: null,\n    contentScriptType: null,\n    contentStyleType: null,\n    crossOrigin: null,\n    cursor: null,\n    cx: null,\n    cy: null,\n    d: null,\n    dataType: null,\n    defaultAction: null,\n    descent: number,\n    diffuseConstant: number,\n    direction: null,\n    display: null,\n    dur: null,\n    divisor: number,\n    dominantBaseline: null,\n    download: boolean,\n    dx: null,\n    dy: null,\n    edgeMode: null,\n    editable: null,\n    elevation: number,\n    enableBackground: null,\n    end: null,\n    event: null,\n    exponent: number,\n    externalResourcesRequired: null,\n    fill: null,\n    fillOpacity: number,\n    fillRule: null,\n    filter: null,\n    filterRes: null,\n    filterUnits: null,\n    floodColor: null,\n    floodOpacity: null,\n    focusable: null,\n    focusHighlight: null,\n    fontFamily: null,\n    fontSize: null,\n    fontSizeAdjust: null,\n    fontStretch: null,\n    fontStyle: null,\n    fontVariant: null,\n    fontWeight: null,\n    format: null,\n    fr: null,\n    from: null,\n    fx: null,\n    fy: null,\n    g1: commaSeparated,\n    g2: commaSeparated,\n    glyphName: commaSeparated,\n    glyphOrientationHorizontal: null,\n    glyphOrientationVertical: null,\n    glyphRef: null,\n    gradientTransform: null,\n    gradientUnits: null,\n    handler: null,\n    hanging: number,\n    hatchContentUnits: null,\n    hatchUnits: null,\n    height: null,\n    href: null,\n    hrefLang: null,\n    horizAdvX: number,\n    horizOriginX: number,\n    horizOriginY: number,\n    id: null,\n    ideographic: number,\n    imageRendering: null,\n    initialVisibility: null,\n    in: null,\n    in2: null,\n    intercept: number,\n    k: number,\n    k1: number,\n    k2: number,\n    k3: number,\n    k4: number,\n    kernelMatrix: commaOrSpaceSeparated,\n    kernelUnitLength: null,\n    keyPoints: null, // SEMI_COLON_SEPARATED\n    keySplines: null, // SEMI_COLON_SEPARATED\n    keyTimes: null, // SEMI_COLON_SEPARATED\n    kerning: null,\n    lang: null,\n    lengthAdjust: null,\n    letterSpacing: null,\n    lightingColor: null,\n    limitingConeAngle: number,\n    local: null,\n    markerEnd: null,\n    markerMid: null,\n    markerStart: null,\n    markerHeight: null,\n    markerUnits: null,\n    markerWidth: null,\n    mask: null,\n    maskContentUnits: null,\n    maskUnits: null,\n    mathematical: null,\n    max: null,\n    media: null,\n    mediaCharacterEncoding: null,\n    mediaContentEncodings: null,\n    mediaSize: number,\n    mediaTime: null,\n    method: null,\n    min: null,\n    mode: null,\n    name: null,\n    navDown: null,\n    navDownLeft: null,\n    navDownRight: null,\n    navLeft: null,\n    navNext: null,\n    navPrev: null,\n    navRight: null,\n    navUp: null,\n    navUpLeft: null,\n    navUpRight: null,\n    numOctaves: null,\n    observer: null,\n    offset: null,\n    onAbort: null,\n    onActivate: null,\n    onAfterPrint: null,\n    onBeforePrint: null,\n    onBegin: null,\n    onCancel: null,\n    onCanPlay: null,\n    onCanPlayThrough: null,\n    onChange: null,\n    onClick: null,\n    onClose: null,\n    onCopy: null,\n    onCueChange: null,\n    onCut: null,\n    onDblClick: null,\n    onDrag: null,\n    onDragEnd: null,\n    onDragEnter: null,\n    onDragExit: null,\n    onDragLeave: null,\n    onDragOver: null,\n    onDragStart: null,\n    onDrop: null,\n    onDurationChange: null,\n    onEmptied: null,\n    onEnd: null,\n    onEnded: null,\n    onError: null,\n    onFocus: null,\n    onFocusIn: null,\n    onFocusOut: null,\n    onHashChange: null,\n    onInput: null,\n    onInvalid: null,\n    onKeyDown: null,\n    onKeyPress: null,\n    onKeyUp: null,\n    onLoad: null,\n    onLoadedData: null,\n    onLoadedMetadata: null,\n    onLoadStart: null,\n    onMessage: null,\n    onMouseDown: null,\n    onMouseEnter: null,\n    onMouseLeave: null,\n    onMouseMove: null,\n    onMouseOut: null,\n    onMouseOver: null,\n    onMouseUp: null,\n    onMouseWheel: null,\n    onOffline: null,\n    onOnline: null,\n    onPageHide: null,\n    onPageShow: null,\n    onPaste: null,\n    onPause: null,\n    onPlay: null,\n    onPlaying: null,\n    onPopState: null,\n    onProgress: null,\n    onRateChange: null,\n    onRepeat: null,\n    onReset: null,\n    onResize: null,\n    onScroll: null,\n    onSeeked: null,\n    onSeeking: null,\n    onSelect: null,\n    onShow: null,\n    onStalled: null,\n    onStorage: null,\n    onSubmit: null,\n    onSuspend: null,\n    onTimeUpdate: null,\n    onToggle: null,\n    onUnload: null,\n    onVolumeChange: null,\n    onWaiting: null,\n    onZoom: null,\n    opacity: null,\n    operator: null,\n    order: null,\n    orient: null,\n    orientation: null,\n    origin: null,\n    overflow: null,\n    overlay: null,\n    overlinePosition: number,\n    overlineThickness: number,\n    paintOrder: null,\n    panose1: null,\n    path: null,\n    pathLength: number,\n    patternContentUnits: null,\n    patternTransform: null,\n    patternUnits: null,\n    phase: null,\n    ping: spaceSeparated,\n    pitch: null,\n    playbackOrder: null,\n    pointerEvents: null,\n    points: null,\n    pointsAtX: number,\n    pointsAtY: number,\n    pointsAtZ: number,\n    preserveAlpha: null,\n    preserveAspectRatio: null,\n    primitiveUnits: null,\n    propagate: null,\n    property: commaOrSpaceSeparated,\n    r: null,\n    radius: null,\n    referrerPolicy: null,\n    refX: null,\n    refY: null,\n    rel: commaOrSpaceSeparated,\n    rev: commaOrSpaceSeparated,\n    renderingIntent: null,\n    repeatCount: null,\n    repeatDur: null,\n    requiredExtensions: commaOrSpaceSeparated,\n    requiredFeatures: commaOrSpaceSeparated,\n    requiredFonts: commaOrSpaceSeparated,\n    requiredFormats: commaOrSpaceSeparated,\n    resource: null,\n    restart: null,\n    result: null,\n    rotate: null,\n    rx: null,\n    ry: null,\n    scale: null,\n    seed: null,\n    shapeRendering: null,\n    side: null,\n    slope: null,\n    snapshotTime: null,\n    specularConstant: number,\n    specularExponent: number,\n    spreadMethod: null,\n    spacing: null,\n    startOffset: null,\n    stdDeviation: null,\n    stemh: null,\n    stemv: null,\n    stitchTiles: null,\n    stopColor: null,\n    stopOpacity: null,\n    strikethroughPosition: number,\n    strikethroughThickness: number,\n    string: null,\n    stroke: null,\n    strokeDashArray: commaOrSpaceSeparated,\n    strokeDashOffset: null,\n    strokeLineCap: null,\n    strokeLineJoin: null,\n    strokeMiterLimit: number,\n    strokeOpacity: number,\n    strokeWidth: null,\n    style: null,\n    surfaceScale: number,\n    syncBehavior: null,\n    syncBehaviorDefault: null,\n    syncMaster: null,\n    syncTolerance: null,\n    syncToleranceDefault: null,\n    systemLanguage: commaOrSpaceSeparated,\n    tabIndex: number,\n    tableValues: null,\n    target: null,\n    targetX: number,\n    targetY: number,\n    textAnchor: null,\n    textDecoration: null,\n    textRendering: null,\n    textLength: null,\n    timelineBegin: null,\n    title: null,\n    transformBehavior: null,\n    type: null,\n    typeOf: commaOrSpaceSeparated,\n    to: null,\n    transform: null,\n    transformOrigin: null,\n    u1: null,\n    u2: null,\n    underlinePosition: number,\n    underlineThickness: number,\n    unicode: null,\n    unicodeBidi: null,\n    unicodeRange: null,\n    unitsPerEm: number,\n    values: null,\n    vAlphabetic: number,\n    vMathematical: number,\n    vectorEffect: null,\n    vHanging: number,\n    vIdeographic: number,\n    version: null,\n    vertAdvY: number,\n    vertOriginX: number,\n    vertOriginY: number,\n    viewBox: null,\n    viewTarget: null,\n    visibility: null,\n    width: null,\n    widths: null,\n    wordSpacing: null,\n    writingMode: null,\n    x: null,\n    x1: null,\n    x2: null,\n    xChannelSelector: null,\n    xHeight: number,\n    y: null,\n    y1: null,\n    y2: null,\n    yChannelSelector: null,\n    z: null,\n    zoomAndPan: null\n  }\n})\n","/**\n * @typedef {import('./lib/util/info.js').Info} Info\n * @typedef {import('./lib/util/schema.js').Schema} Schema\n */\n\nimport {merge} from './lib/util/merge.js'\nimport {xlink} from './lib/xlink.js'\nimport {xml} from './lib/xml.js'\nimport {xmlns} from './lib/xmlns.js'\nimport {aria} from './lib/aria.js'\nimport {html as htmlBase} from './lib/html.js'\nimport {svg as svgBase} from './lib/svg.js'\n\nexport {find} from './lib/find.js'\nexport {hastToReact} from './lib/hast-to-react.js'\nexport {normalize} from './lib/normalize.js'\nexport const html = merge([xml, xlink, xmlns, aria, htmlBase], 'html')\nexport const svg = merge([xml, xlink, xmlns, aria, svgBase], 'svg')\n","/**\n * @typedef {import('./util/schema.js').Schema} Schema\n */\n\nimport {normalize} from './normalize.js'\nimport {DefinedInfo} from './util/defined-info.js'\nimport {Info} from './util/info.js'\n\nconst valid = /^data[-\\w.:]+$/i\nconst dash = /-[a-z]/g\nconst cap = /[A-Z]/g\n\n/**\n * @param {Schema} schema\n * @param {string} value\n * @returns {Info}\n */\nexport function find(schema, value) {\n  const normal = normalize(value)\n  let prop = value\n  let Type = Info\n\n  if (normal in schema.normal) {\n    return schema.property[schema.normal[normal]]\n  }\n\n  if (normal.length > 4 && normal.slice(0, 4) === 'data' && valid.test(value)) {\n    // Attribute or property.\n    if (value.charAt(4) === '-') {\n      // Turn it into a property.\n      const rest = value.slice(5).replace(dash, camelcase)\n      prop = 'data' + rest.charAt(0).toUpperCase() + rest.slice(1)\n    } else {\n      // Turn it into an attribute.\n      const rest = value.slice(4)\n\n      if (!dash.test(rest)) {\n        let dashes = rest.replace(cap, kebab)\n\n        if (dashes.charAt(0) !== '-') {\n          dashes = '-' + dashes\n        }\n\n        value = 'data' + dashes\n      }\n    }\n\n    Type = DefinedInfo\n  }\n\n  return new Type(prop, value)\n}\n\n/**\n * @param {string} $0\n * @returns {string}\n */\nfunction kebab($0) {\n  return '-' + $0.toLowerCase()\n}\n\n/**\n * @param {string} $0\n * @returns {string}\n */\nfunction camelcase($0) {\n  return $0.charAt(1).toUpperCase()\n}\n","/**\n * `hast` is close to `React`, but differs in a couple of cases.\n *\n * To get a React property from a hast property, check if it is in\n * `hastToReact`, if it is, then use the corresponding value,\n * otherwise, use the hast property.\n *\n * @type {Record<string, string>}\n */\nexport const hastToReact = {\n  classId: 'classID',\n  dataType: 'datatype',\n  itemId: 'itemID',\n  strokeDashArray: 'strokeDasharray',\n  strokeDashOffset: 'strokeDashoffset',\n  strokeLineCap: 'strokeLinecap',\n  strokeLineJoin: 'strokeLinejoin',\n  strokeMiterLimit: 'strokeMiterlimit',\n  typeOf: 'typeof',\n  xLinkActuate: 'xlinkActuate',\n  xLinkArcRole: 'xlinkArcrole',\n  xLinkHref: 'xlinkHref',\n  xLinkRole: 'xlinkRole',\n  xLinkShow: 'xlinkShow',\n  xLinkTitle: 'xlinkTitle',\n  xLinkType: 'xlinkType',\n  xmlnsXLink: 'xmlnsXlink'\n}\n","import StyleToObject from '../cjs/index.js';\n\n// ensure compatibility with rollup umd build\nexport default StyleToObject.default || StyleToObject;\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n */\n\n/**\n * Get the ending point of `node`.\n *\n * @param node\n *   Node.\n * @returns\n *   Point.\n */\nexport const pointEnd = point('end')\n\n/**\n * Get the starting point of `node`.\n *\n * @param node\n *   Node.\n * @returns\n *   Point.\n */\nexport const pointStart = point('start')\n\n/**\n * Get the positional info of `node`.\n *\n * @param {'end' | 'start'} type\n *   Side.\n * @returns\n *   Getter.\n */\nfunction point(type) {\n  return point\n\n  /**\n   * Get the point info of `node` at a bound side.\n   *\n   * @param {Node | NodeLike | null | undefined} [node]\n   * @returns {Point | undefined}\n   */\n  function point(node) {\n    const point = (node && node.position && node.position[type]) || {}\n\n    if (\n      typeof point.line === 'number' &&\n      point.line > 0 &&\n      typeof point.column === 'number' &&\n      point.column > 0\n    ) {\n      return {\n        line: point.line,\n        column: point.column,\n        offset:\n          typeof point.offset === 'number' && point.offset > -1\n            ? point.offset\n            : undefined\n      }\n    }\n  }\n}\n\n/**\n * Get the positional info of `node`.\n *\n * @param {Node | NodeLike | null | undefined} [node]\n *   Node.\n * @returns {Position | undefined}\n *   Position.\n */\nexport function position(node) {\n  const start = pointStart(node)\n  const end = pointEnd(node)\n\n  if (start && end) {\n    return {start, end}\n  }\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n */\n\n/**\n * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Point | PointLike | Position | PositionLike | null | undefined} [value]\n *   Node, position, or point.\n * @returns {string}\n *   Pretty printed positional info of a node (`string`).\n *\n *   In the format of a range `ls:cs-le:ce` (when given `node` or `position`)\n *   or a point `l:c` (when given `point`), where `l` stands for line, `c` for\n *   column, `s` for `start`, and `e` for end.\n *   An empty string (`''`) is returned if the given value is neither `node`,\n *   `position`, nor `point`.\n */\nexport function stringifyPosition(value) {\n  // Nothing.\n  if (!value || typeof value !== 'object') {\n    return ''\n  }\n\n  // Node.\n  if ('position' in value || 'type' in value) {\n    return position(value.position)\n  }\n\n  // Position.\n  if ('start' in value || 'end' in value) {\n    return position(value)\n  }\n\n  // Point.\n  if ('line' in value || 'column' in value) {\n    return point(value)\n  }\n\n  // ?\n  return ''\n}\n\n/**\n * @param {Point | PointLike | null | undefined} point\n * @returns {string}\n */\nfunction point(point) {\n  return index(point && point.line) + ':' + index(point && point.column)\n}\n\n/**\n * @param {Position | PositionLike | null | undefined} pos\n * @returns {string}\n */\nfunction position(pos) {\n  return point(pos && pos.start) + '-' + point(pos && pos.end)\n}\n\n/**\n * @param {number | null | undefined} value\n * @returns {number}\n */\nfunction index(value) {\n  return value && typeof value === 'number' ? value : 1\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n *\n * @typedef Options\n *   Configuration.\n * @property {Array<Node> | null | undefined} [ancestors]\n *   Stack of (inclusive) ancestor nodes surrounding the message (optional).\n * @property {Error | null | undefined} [cause]\n *   Original error cause of the message (optional).\n * @property {Point | Position | null | undefined} [place]\n *   Place of message (optional).\n * @property {string | null | undefined} [ruleId]\n *   Category of message (optional, example: `'my-rule'`).\n * @property {string | null | undefined} [source]\n *   Namespace of who sent the message (optional, example: `'my-package'`).\n */\n\nimport {stringifyPosition} from 'unist-util-stringify-position'\n\n/**\n * Message.\n */\nexport class VFileMessage extends Error {\n  /**\n   * Create a message for `reason`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Options | null | undefined} [options]\n   * @returns\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | Options | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns\n   *   Instance of `VFileMessage`.\n   */\n  // eslint-disable-next-line complexity\n  constructor(causeOrReason, optionsOrParentOrPlace, origin) {\n    super()\n\n    if (typeof optionsOrParentOrPlace === 'string') {\n      origin = optionsOrParentOrPlace\n      optionsOrParentOrPlace = undefined\n    }\n\n    /** @type {string} */\n    let reason = ''\n    /** @type {Options} */\n    let options = {}\n    let legacyCause = false\n\n    if (optionsOrParentOrPlace) {\n      // Point.\n      if (\n        'line' in optionsOrParentOrPlace &&\n        'column' in optionsOrParentOrPlace\n      ) {\n        options = {place: optionsOrParentOrPlace}\n      }\n      // Position.\n      else if (\n        'start' in optionsOrParentOrPlace &&\n        'end' in optionsOrParentOrPlace\n      ) {\n        options = {place: optionsOrParentOrPlace}\n      }\n      // Node.\n      else if ('type' in optionsOrParentOrPlace) {\n        options = {\n          ancestors: [optionsOrParentOrPlace],\n          place: optionsOrParentOrPlace.position\n        }\n      }\n      // Options.\n      else {\n        options = {...optionsOrParentOrPlace}\n      }\n    }\n\n    if (typeof causeOrReason === 'string') {\n      reason = causeOrReason\n    }\n    // Error.\n    else if (!options.cause && causeOrReason) {\n      legacyCause = true\n      reason = causeOrReason.message\n      options.cause = causeOrReason\n    }\n\n    if (!options.ruleId && !options.source && typeof origin === 'string') {\n      const index = origin.indexOf(':')\n\n      if (index === -1) {\n        options.ruleId = origin\n      } else {\n        options.source = origin.slice(0, index)\n        options.ruleId = origin.slice(index + 1)\n      }\n    }\n\n    if (!options.place && options.ancestors && options.ancestors) {\n      const parent = options.ancestors[options.ancestors.length - 1]\n\n      if (parent) {\n        options.place = parent.position\n      }\n    }\n\n    const start =\n      options.place && 'start' in options.place\n        ? options.place.start\n        : options.place\n\n    /* eslint-disable no-unused-expressions */\n    /**\n     * Stack of ancestor nodes surrounding the message.\n     *\n     * @type {Array<Node> | undefined}\n     */\n    this.ancestors = options.ancestors || undefined\n\n    /**\n     * Original error cause of the message.\n     *\n     * @type {Error | undefined}\n     */\n    this.cause = options.cause || undefined\n\n    /**\n     * Starting column of message.\n     *\n     * @type {number | undefined}\n     */\n    this.column = start ? start.column : undefined\n\n    /**\n     * State of problem.\n     *\n     * * `true` — error, file not usable\n     * * `false` — warning, change may be needed\n     * * `undefined` — change likely not needed\n     *\n     * @type {boolean | null | undefined}\n     */\n    this.fatal = undefined\n\n    /**\n     * Path of a file (used throughout the `VFile` ecosystem).\n     *\n     * @type {string | undefined}\n     */\n    this.file\n\n    // Field from `Error`.\n    /**\n     * Reason for message.\n     *\n     * @type {string}\n     */\n    this.message = reason\n\n    /**\n     * Starting line of error.\n     *\n     * @type {number | undefined}\n     */\n    this.line = start ? start.line : undefined\n\n    // Field from `Error`.\n    /**\n     * Serialized positional info of message.\n     *\n     * On normal errors, this would be something like `ParseError`, buit in\n     * `VFile` messages we use this space to show where an error happened.\n     */\n    this.name = stringifyPosition(options.place) || '1:1'\n\n    /**\n     * Place of message.\n     *\n     * @type {Point | Position | undefined}\n     */\n    this.place = options.place || undefined\n\n    /**\n     * Reason for message, should use markdown.\n     *\n     * @type {string}\n     */\n    this.reason = this.message\n\n    /**\n     * Category of message (example: `'my-rule'`).\n     *\n     * @type {string | undefined}\n     */\n    this.ruleId = options.ruleId || undefined\n\n    /**\n     * Namespace of message (example: `'my-package'`).\n     *\n     * @type {string | undefined}\n     */\n    this.source = options.source || undefined\n\n    // Field from `Error`.\n    /**\n     * Stack of message.\n     *\n     * This is used by normal errors to show where something happened in\n     * programming code, irrelevant for `VFile` messages,\n     *\n     * @type {string}\n     */\n    this.stack =\n      legacyCause && options.cause && typeof options.cause.stack === 'string'\n        ? options.cause.stack\n        : ''\n\n    // The following fields are “well known”.\n    // Not standard.\n    // Feel free to add other non-standard fields to your messages.\n\n    /**\n     * Specify the source value that’s being reported, which is deemed\n     * incorrect.\n     *\n     * @type {string | undefined}\n     */\n    this.actual\n\n    /**\n     * Suggest acceptable values that can be used instead of `actual`.\n     *\n     * @type {Array<string> | undefined}\n     */\n    this.expected\n\n    /**\n     * Long form description of the message (you should use markdown).\n     *\n     * @type {string | undefined}\n     */\n    this.note\n\n    /**\n     * Link to docs for the message.\n     *\n     * > 👉 **Note**: this must be an absolute URL that can be passed as `x`\n     * > to `new URL(x)`.\n     *\n     * @type {string | undefined}\n     */\n    this.url\n    /* eslint-enable no-unused-expressions */\n  }\n}\n\nVFileMessage.prototype.file = ''\nVFileMessage.prototype.name = ''\nVFileMessage.prototype.reason = ''\nVFileMessage.prototype.message = ''\nVFileMessage.prototype.stack = ''\nVFileMessage.prototype.column = undefined\nVFileMessage.prototype.line = undefined\nVFileMessage.prototype.ancestors = undefined\nVFileMessage.prototype.cause = undefined\nVFileMessage.prototype.fatal = undefined\nVFileMessage.prototype.place = undefined\nVFileMessage.prototype.ruleId = undefined\nVFileMessage.prototype.source = undefined\n","// Register MDX nodes in mdast:\n/// <reference types=\"mdast-util-mdx-expression\" />\n/// <reference types=\"mdast-util-mdx-jsx\" />\n/// <reference types=\"mdast-util-mdxjs-esm\" />\n\n/**\n * @typedef {import('estree').Identifier} Identifier\n * @typedef {import('estree').Literal} Literal\n * @typedef {import('estree').MemberExpression} MemberExpression\n * @typedef {import('estree').Expression} Expression\n * @typedef {import('estree').Program} Program\n *\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Nodes} Nodes\n * @typedef {import('hast').Parents} Parents\n * @typedef {import('hast').Root} Root\n * @typedef {import('hast').Text} Text\n *\n * @typedef {import('mdast-util-mdx-expression').MdxFlowExpressionHast} MdxFlowExpression\n * @typedef {import('mdast-util-mdx-expression').MdxTextExpressionHast} MdxTextExpression\n *\n * @typedef {import('mdast-util-mdx-jsx').MdxJsxFlowElementHast} MdxJsxFlowElement\n * @typedef {import('mdast-util-mdx-jsx').MdxJsxTextElementHast} MdxJsxTextElement\n *\n * @typedef {import('mdast-util-mdxjs-esm').MdxjsEsmHast} MdxjsEsm\n *\n * @typedef {import('property-information').Schema} Schema\n *\n * @typedef {import('unist').Position} Position\n *\n * @typedef {import('./components.js').Components} Components\n */\n\n/**\n * @typedef {JSX.Element | string | null | undefined} Child\n *   Child.\n *\n * @callback Create\n *   Create something in development or production.\n * @param {Nodes} node\n *   hast node.\n * @param {unknown} type\n *   Fragment symbol or tag name.\n * @param {Props} props\n *   Properties and children.\n * @param {string | undefined} key\n *   Key.\n * @returns {JSX.Element}\n *   Result.\n *\n * @callback CreateEvaluater\n *   Create an evaluator that turns ESTree ASTs from embedded MDX into values.\n * @returns {Evaluater}\n *   Evaluater.\n *\n * @typedef {'html' | 'react'} ElementAttributeNameCase\n *   Casing to use for attribute names.\n *\n *   HTML casing is for example `class`, `stroke-linecap`, `xml:lang`.\n *   React casing is for example `className`, `strokeLinecap`, `xmlLang`.\n *\n * @callback EvaluateExpression\n *   Turn an MDX expression into a value.\n * @param {Expression} expression\n *   ESTree expression.\n * @returns {unknown}\n *   Result of expression.\n *\n * @callback EvaluateProgram\n *   Turn an MDX program (export/import statements) into a value.\n * @param {Program} expression\n *   ESTree program.\n * @returns {unknown}\n *   Result of program;\n *   should likely be `undefined` as ESM changes the scope but doesn’t yield\n *   something.\n *\n * @typedef Evaluater\n *   Evaluator that turns ESTree ASTs from embedded MDX into values.\n * @property {EvaluateExpression} evaluateExpression\n *   Evaluate an expression.\n * @property {EvaluateProgram} evaluateProgram\n *   Evaluate a program.\n *\n * @typedef {[string, Value]} Field\n *   Property field.\n *\n * @typedef {unknown} Fragment\n *   Represent the children, typically a symbol.\n *\n * @callback Jsx\n *   Create a production element.\n * @param {unknown} type\n *   Element type: `Fragment` symbol, tag name (`string`), component.\n * @param {Props} props\n *   Element props, `children`, and maybe `node`.\n * @param {string | undefined} [key]\n *   Dynamicly generated key to use.\n * @returns {JSX.Element}\n *   Element from your framework.\n *\n * @callback JsxDev\n *   Create a development element.\n * @param {unknown} type\n *   Element type: `Fragment` symbol, tag name (`string`), component.\n * @param {Props} props\n *   Element props, `children`, and maybe `node`.\n * @param {string | undefined} key\n *   Dynamicly generated key to use.\n * @param {boolean} isStaticChildren\n *   Whether two or more children are passed (in an array), which is whether\n *   `jsxs` or `jsx` would be used.\n * @param {Source} source\n *   Info about source.\n * @param {undefined} self\n *   Nothing (this is used by frameworks that have components, we don’t).\n * @returns {JSX.Element}\n *   Element from your framework.\n *\n * @typedef {{children?: Array<Child> | Child, node?: Element | MdxJsxFlowElement | MdxJsxTextElement | undefined, [prop: string]: Array<Child> | Child | Element | MdxJsxFlowElement | MdxJsxTextElement | Value | undefined}} Props\n *   Properties and children.\n *\n * @typedef RegularFields\n *   Configuration.\n * @property {Partial<Components> | null | undefined} [components]\n *   Components to use (optional).\n * @property {CreateEvaluater | null | undefined} [createEvaluater]\n *   Create an evaluator that turns ESTree ASTs into values (optional).\n * @property {ElementAttributeNameCase | null | undefined} [elementAttributeNameCase='react']\n *   Specify casing to use for attribute names (default: `'react'`).\n * @property {string | null | undefined} [filePath]\n *   File path to the original source file (optional).\n *\n *   Passed in source info to `jsxDEV` when using the automatic runtime with\n *   `development: true`.\n * @property {boolean | null | undefined} [ignoreInvalidStyle=false]\n *   Ignore invalid CSS in `style` props (default: `false`);\n *   the default behavior is to throw an error.\n * @property {boolean | null | undefined} [passKeys=true]\n *   Generate keys to optimize frameworks that support them (default: `true`).\n *\n *   > 👉 **Note**: Solid currently fails if keys are passed.\n * @property {boolean | null | undefined} [passNode=false]\n *   Pass the hast element node to components (default: `false`).\n * @property {Space | null | undefined} [space='html']\n *   Whether `tree` is in the `'html'` or `'svg'` space (default: `'html'`).\n *\n *   When an `<svg>` element is found in the HTML space, this package already\n *   automatically switches to and from the SVG space when entering and exiting\n *   it.\n * @property {StylePropertyNameCase | null | undefined} [stylePropertyNameCase='dom']\n *   Specify casing to use for property names in `style` objects (default:\n *   `'dom'`).\n * @property {boolean | null | undefined} [tableCellAlignToStyle=true]\n *   Turn obsolete `align` props on `td` and `th` into CSS `style` props\n *   (default: `true`).\n *\n * @typedef RuntimeDevelopment\n *   Runtime fields when development is on.\n * @property {Fragment} Fragment\n *   Fragment.\n * @property {true} development\n *   Whether to use `jsxDEV` (when on) or `jsx` and `jsxs` (when off).\n * @property {Jsx | null | undefined} [jsx]\n *   Dynamic JSX (optional).\n * @property {JsxDev} jsxDEV\n *   Development JSX.\n * @property {Jsx | null | undefined} [jsxs]\n *   Static JSX (optional).\n *\n * @typedef RuntimeProduction\n *   Runtime fields when development is off.\n * @property {Fragment} Fragment\n *   Fragment.\n * @property {false | null | undefined} [development]\n *   Whether to use `jsxDEV` (when on) or `jsx` and `jsxs` (when off) (optional).\n * @property {Jsx} jsx\n *   Dynamic JSX.\n * @property {JsxDev | null | undefined} [jsxDEV]\n *   Development JSX (optional).\n * @property {Jsx} jsxs\n *   Static JSX.\n *\n * @typedef RuntimeUnknown\n *   Runtime fields when development might be on or off.\n * @property {Fragment} Fragment\n *   Fragment.\n * @property {boolean} development\n *   Whether to use `jsxDEV` (when on) or `jsx` and `jsxs` (when off).\n * @property {Jsx | null | undefined} [jsx]\n *   Dynamic JSX (optional).\n * @property {JsxDev | null | undefined} [jsxDEV]\n *   Development JSX (optional).\n * @property {Jsx | null | undefined} [jsxs]\n *   Static JSX (optional).\n *\n * @typedef Source\n *   Info about source.\n * @property {number | undefined} columnNumber\n *   Column where thing starts (0-indexed).\n * @property {string | undefined} fileName\n *   Name of source file.\n * @property {number | undefined} lineNumber\n *   Line where thing starts (1-indexed).\n *\n * @typedef {'html' | 'svg'} Space\n *   Namespace.\n *\n *   > 👉 **Note**: hast is not XML.\n *   > It supports SVG as embedded in HTML.\n *   > It does not support the features available in XML.\n *   > Passing SVG might break but fragments of modern SVG should be fine.\n *   > Use `xast` if you need to support SVG as XML.\n *\n * @typedef State\n *   Info passed around.\n * @property {unknown} Fragment\n *   Fragment symbol.\n * @property {Array<Parents>} ancestors\n *   Stack of parents.\n * @property {Partial<Components>} components\n *   Components to swap.\n * @property {Create} create\n *   Create something in development or production.\n * @property {ElementAttributeNameCase} elementAttributeNameCase\n *   Casing to use for attribute names.\n * @property {Evaluater | undefined} evaluater\n *   Evaluator that turns ESTree ASTs into values.\n * @property {string | undefined} filePath\n *   File path.\n * @property {boolean} ignoreInvalidStyle\n *   Ignore invalid CSS in `style` props.\n * @property {boolean} passKeys\n *   Generate keys to optimize frameworks that support them.\n * @property {boolean} passNode\n *   Pass `node` to components.\n * @property {Schema} schema\n *   Current schema.\n * @property {StylePropertyNameCase} stylePropertyNameCase\n *   Casing to use for property names in `style` objects.\n * @property {boolean} tableCellAlignToStyle\n *   Turn obsolete `align` props on `td` and `th` into CSS `style` props.\n *\n * @typedef {Record<string, string>} Style\n *   Style map.\n *\n * @typedef {'css' | 'dom'} StylePropertyNameCase\n *   Casing to use for property names in `style` objects.\n *\n *   CSS casing is for example `background-color` and `-webkit-line-clamp`.\n *   DOM casing is for example `backgroundColor` and `WebkitLineClamp`.\n *\n * @typedef {Style | boolean | number | string} Value\n *   Primitive property value and `Style` map.\n */\n\n/**\n * @typedef {RuntimeDevelopment & RegularFields} Development\n *   Configuration (development).\n * @typedef {Development | Production | Unknown} Options\n *   Configuration.\n * @typedef {RegularFields & RuntimeProduction} Production\n *   Configuration (production).\n * @typedef {RegularFields & RuntimeUnknown} Unknown\n *   Configuration (production or development).\n */\n\nimport {stringify as commas} from 'comma-separated-tokens'\nimport {ok as assert} from 'devlop'\nimport {name as isIdentifierName} from 'estree-util-is-identifier-name'\nimport {whitespace} from 'hast-util-whitespace'\nimport {find, hastToReact, html, svg} from 'property-information'\nimport {stringify as spaces} from 'space-separated-tokens'\nimport styleToObject from 'style-to-object'\nimport {pointStart} from 'unist-util-position'\nimport {VFileMessage} from 'vfile-message'\n\nconst own = {}.hasOwnProperty\n\n/** @type {Map<string, number>} */\nconst emptyMap = new Map()\n\nconst cap = /[A-Z]/g\nconst dashSomething = /-([a-z])/g\n\n// `react-dom` triggers a warning for *any* white space in tables.\n// To follow GFM, `mdast-util-to-hast` injects line endings between elements.\n// Other tools might do so too, but they don’t do here, so we remove all of\n// that.\n\n// See: <https://github.com/facebook/react/pull/7081>.\n// See: <https://github.com/facebook/react/pull/7515>.\n// See: <https://github.com/remarkjs/remark-react/issues/64>.\n// See: <https://github.com/rehypejs/rehype-react/pull/29>.\n// See: <https://github.com/rehypejs/rehype-react/pull/32>.\n// See: <https://github.com/rehypejs/rehype-react/pull/45>.\nconst tableElements = new Set(['table', 'tbody', 'thead', 'tfoot', 'tr'])\n\nconst tableCellElement = new Set(['td', 'th'])\n\nconst docs = 'https://github.com/syntax-tree/hast-util-to-jsx-runtime'\n\n/**\n * Transform a hast tree to preact, react, solid, svelte, vue, etc.,\n * with an automatic JSX runtime.\n *\n * @param {Nodes} tree\n *   Tree to transform.\n * @param {Options} options\n *   Configuration (required).\n * @returns {JSX.Element}\n *   JSX element.\n */\n\nexport function toJsxRuntime(tree, options) {\n  if (!options || options.Fragment === undefined) {\n    throw new TypeError('Expected `Fragment` in options')\n  }\n\n  const filePath = options.filePath || undefined\n  /** @type {Create} */\n  let create\n\n  if (options.development) {\n    if (typeof options.jsxDEV !== 'function') {\n      throw new TypeError(\n        'Expected `jsxDEV` in options when `development: true`'\n      )\n    }\n\n    create = developmentCreate(filePath, options.jsxDEV)\n  } else {\n    if (typeof options.jsx !== 'function') {\n      throw new TypeError('Expected `jsx` in production options')\n    }\n\n    if (typeof options.jsxs !== 'function') {\n      throw new TypeError('Expected `jsxs` in production options')\n    }\n\n    create = productionCreate(filePath, options.jsx, options.jsxs)\n  }\n\n  /** @type {State} */\n  const state = {\n    Fragment: options.Fragment,\n    ancestors: [],\n    components: options.components || {},\n    create,\n    elementAttributeNameCase: options.elementAttributeNameCase || 'react',\n    evaluater: options.createEvaluater ? options.createEvaluater() : undefined,\n    filePath,\n    ignoreInvalidStyle: options.ignoreInvalidStyle || false,\n    passKeys: options.passKeys !== false,\n    passNode: options.passNode || false,\n    schema: options.space === 'svg' ? svg : html,\n    stylePropertyNameCase: options.stylePropertyNameCase || 'dom',\n    tableCellAlignToStyle: options.tableCellAlignToStyle !== false\n  }\n\n  const result = one(state, tree, undefined)\n\n  // JSX element.\n  if (result && typeof result !== 'string') {\n    return result\n  }\n\n  // Text node or something that turned into nothing.\n  return state.create(\n    tree,\n    state.Fragment,\n    {children: result || undefined},\n    undefined\n  )\n}\n\n/**\n * Transform a node.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Nodes} node\n *   Current node.\n * @param {string | undefined} key\n *   Key.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction one(state, node, key) {\n  if (node.type === 'element') {\n    return element(state, node, key)\n  }\n\n  if (node.type === 'mdxFlowExpression' || node.type === 'mdxTextExpression') {\n    return mdxExpression(state, node)\n  }\n\n  if (node.type === 'mdxJsxFlowElement' || node.type === 'mdxJsxTextElement') {\n    return mdxJsxElement(state, node, key)\n  }\n\n  if (node.type === 'mdxjsEsm') {\n    return mdxEsm(state, node)\n  }\n\n  if (node.type === 'root') {\n    return root(state, node, key)\n  }\n\n  if (node.type === 'text') {\n    return text(state, node)\n  }\n}\n\n/**\n * Handle element.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Element} node\n *   Current node.\n * @param {string | undefined} key\n *   Key.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction element(state, node, key) {\n  const parentSchema = state.schema\n  let schema = parentSchema\n\n  if (node.tagName.toLowerCase() === 'svg' && parentSchema.space === 'html') {\n    schema = svg\n    state.schema = schema\n  }\n\n  state.ancestors.push(node)\n\n  const type = findComponentFromName(state, node.tagName, false)\n  const props = createElementProps(state, node)\n  let children = createChildren(state, node)\n\n  if (tableElements.has(node.tagName)) {\n    children = children.filter(function (child) {\n      return typeof child === 'string' ? !whitespace(child) : true\n    })\n  }\n\n  addNode(state, props, type, node)\n  addChildren(props, children)\n\n  // Restore.\n  state.ancestors.pop()\n  state.schema = parentSchema\n\n  return state.create(node, type, props, key)\n}\n\n/**\n * Handle MDX expression.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdxFlowExpression | MdxTextExpression} node\n *   Current node.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction mdxExpression(state, node) {\n  if (node.data && node.data.estree && state.evaluater) {\n    const program = node.data.estree\n    const expression = program.body[0]\n    assert(expression.type === 'ExpressionStatement')\n\n    // Assume result is a child.\n    return /** @type {Child | undefined} */ (\n      state.evaluater.evaluateExpression(expression.expression)\n    )\n  }\n\n  crashEstree(state, node.position)\n}\n\n/**\n * Handle MDX ESM.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdxjsEsm} node\n *   Current node.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction mdxEsm(state, node) {\n  if (node.data && node.data.estree && state.evaluater) {\n    // Assume result is a child.\n    return /** @type {Child | undefined} */ (\n      state.evaluater.evaluateProgram(node.data.estree)\n    )\n  }\n\n  crashEstree(state, node.position)\n}\n\n/**\n * Handle MDX JSX.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdxJsxFlowElement | MdxJsxTextElement} node\n *   Current node.\n * @param {string | undefined} key\n *   Key.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction mdxJsxElement(state, node, key) {\n  const parentSchema = state.schema\n  let schema = parentSchema\n\n  if (node.name === 'svg' && parentSchema.space === 'html') {\n    schema = svg\n    state.schema = schema\n  }\n\n  state.ancestors.push(node)\n\n  const type =\n    node.name === null\n      ? state.Fragment\n      : findComponentFromName(state, node.name, true)\n  const props = createJsxElementProps(state, node)\n  const children = createChildren(state, node)\n\n  addNode(state, props, type, node)\n  addChildren(props, children)\n\n  // Restore.\n  state.ancestors.pop()\n  state.schema = parentSchema\n\n  return state.create(node, type, props, key)\n}\n\n/**\n * Handle root.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Root} node\n *   Current node.\n * @param {string | undefined} key\n *   Key.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction root(state, node, key) {\n  /** @type {Props} */\n  const props = {}\n\n  addChildren(props, createChildren(state, node))\n\n  return state.create(node, state.Fragment, props, key)\n}\n\n/**\n * Handle text.\n *\n * @param {State} _\n *   Info passed around.\n * @param {Text} node\n *   Current node.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction text(_, node) {\n  return node.value\n}\n\n/**\n * Add `node` to props.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Props} props\n *   Props.\n * @param {unknown} type\n *   Type.\n * @param {Element | MdxJsxFlowElement | MdxJsxTextElement} node\n *   Node.\n * @returns {undefined}\n *   Nothing.\n */\nfunction addNode(state, props, type, node) {\n  // If this is swapped out for a component:\n  if (typeof type !== 'string' && type !== state.Fragment && state.passNode) {\n    props.node = node\n  }\n}\n\n/**\n * Add children to props.\n *\n * @param {Props} props\n *   Props.\n * @param {Array<Child>} children\n *   Children.\n * @returns {undefined}\n *   Nothing.\n */\nfunction addChildren(props, children) {\n  if (children.length > 0) {\n    const value = children.length > 1 ? children : children[0]\n\n    if (value) {\n      props.children = value\n    }\n  }\n}\n\n/**\n * @param {string | undefined} _\n *   Path to file.\n * @param {Jsx} jsx\n *   Dynamic.\n * @param {Jsx} jsxs\n *   Static.\n * @returns {Create}\n *   Create a production element.\n */\nfunction productionCreate(_, jsx, jsxs) {\n  return create\n  /** @type {Create} */\n  function create(_, type, props, key) {\n    // Only an array when there are 2 or more children.\n    const isStaticChildren = Array.isArray(props.children)\n    const fn = isStaticChildren ? jsxs : jsx\n    return key ? fn(type, props, key) : fn(type, props)\n  }\n}\n\n/**\n * @param {string | undefined} filePath\n *   Path to file.\n * @param {JsxDev} jsxDEV\n *   Development.\n * @returns {Create}\n *   Create a development element.\n */\nfunction developmentCreate(filePath, jsxDEV) {\n  return create\n  /** @type {Create} */\n  function create(node, type, props, key) {\n    // Only an array when there are 2 or more children.\n    const isStaticChildren = Array.isArray(props.children)\n    const point = pointStart(node)\n    return jsxDEV(\n      type,\n      props,\n      key,\n      isStaticChildren,\n      {\n        columnNumber: point ? point.column - 1 : undefined,\n        fileName: filePath,\n        lineNumber: point ? point.line : undefined\n      },\n      undefined\n    )\n  }\n}\n\n/**\n * Create props from an element.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Element} node\n *   Current element.\n * @returns {Props}\n *   Props.\n */\nfunction createElementProps(state, node) {\n  /** @type {Props} */\n  const props = {}\n  /** @type {string | undefined} */\n  let alignValue\n  /** @type {string} */\n  let prop\n\n  for (prop in node.properties) {\n    if (prop !== 'children' && own.call(node.properties, prop)) {\n      const result = createProperty(state, prop, node.properties[prop])\n\n      if (result) {\n        const [key, value] = result\n\n        if (\n          state.tableCellAlignToStyle &&\n          key === 'align' &&\n          typeof value === 'string' &&\n          tableCellElement.has(node.tagName)\n        ) {\n          alignValue = value\n        } else {\n          props[key] = value\n        }\n      }\n    }\n  }\n\n  if (alignValue) {\n    // Assume style is an object.\n    const style = /** @type {Style} */ (props.style || (props.style = {}))\n    style[state.stylePropertyNameCase === 'css' ? 'text-align' : 'textAlign'] =\n      alignValue\n  }\n\n  return props\n}\n\n/**\n * Create props from a JSX element.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdxJsxFlowElement | MdxJsxTextElement} node\n *   Current JSX element.\n * @returns {Props}\n *   Props.\n */\nfunction createJsxElementProps(state, node) {\n  /** @type {Props} */\n  const props = {}\n\n  for (const attribute of node.attributes) {\n    if (attribute.type === 'mdxJsxExpressionAttribute') {\n      if (attribute.data && attribute.data.estree && state.evaluater) {\n        const program = attribute.data.estree\n        const expression = program.body[0]\n        assert(expression.type === 'ExpressionStatement')\n        const objectExpression = expression.expression\n        assert(objectExpression.type === 'ObjectExpression')\n        const property = objectExpression.properties[0]\n        assert(property.type === 'SpreadElement')\n\n        Object.assign(\n          props,\n          state.evaluater.evaluateExpression(property.argument)\n        )\n      } else {\n        crashEstree(state, node.position)\n      }\n    } else {\n      // For JSX, the author is responsible of passing in the correct values.\n      const name = attribute.name\n      /** @type {unknown} */\n      let value\n\n      if (attribute.value && typeof attribute.value === 'object') {\n        if (\n          attribute.value.data &&\n          attribute.value.data.estree &&\n          state.evaluater\n        ) {\n          const program = attribute.value.data.estree\n          const expression = program.body[0]\n          assert(expression.type === 'ExpressionStatement')\n          value = state.evaluater.evaluateExpression(expression.expression)\n        } else {\n          crashEstree(state, node.position)\n        }\n      } else {\n        value = attribute.value === null ? true : attribute.value\n      }\n\n      // Assume a prop.\n      props[name] = /** @type {Props[keyof Props]} */ (value)\n    }\n  }\n\n  return props\n}\n\n/**\n * Create children.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Parents} node\n *   Current element.\n * @returns {Array<Child>}\n *   Children.\n */\nfunction createChildren(state, node) {\n  /** @type {Array<Child>} */\n  const children = []\n  let index = -1\n  /** @type {Map<string, number>} */\n  // Note: test this when Solid doesn’t want to merge my upcoming PR.\n  /* c8 ignore next */\n  const countsByName = state.passKeys ? new Map() : emptyMap\n\n  while (++index < node.children.length) {\n    const child = node.children[index]\n    /** @type {string | undefined} */\n    let key\n\n    if (state.passKeys) {\n      const name =\n        child.type === 'element'\n          ? child.tagName\n          : child.type === 'mdxJsxFlowElement' ||\n              child.type === 'mdxJsxTextElement'\n            ? child.name\n            : undefined\n\n      if (name) {\n        const count = countsByName.get(name) || 0\n        key = name + '-' + count\n        countsByName.set(name, count + 1)\n      }\n    }\n\n    const result = one(state, child, key)\n    if (result !== undefined) children.push(result)\n  }\n\n  return children\n}\n\n/**\n * Handle a property.\n *\n * @param {State} state\n *   Info passed around.\n * @param {string} prop\n *   Key.\n * @param {Array<number | string> | boolean | number | string | null | undefined} value\n *   hast property value.\n * @returns {Field | undefined}\n *   Field for runtime, optional.\n */\nfunction createProperty(state, prop, value) {\n  const info = find(state.schema, prop)\n\n  // Ignore nullish and `NaN` values.\n  if (\n    value === null ||\n    value === undefined ||\n    (typeof value === 'number' && Number.isNaN(value))\n  ) {\n    return\n  }\n\n  if (Array.isArray(value)) {\n    // Accept `array`.\n    // Most props are space-separated.\n    value = info.commaSeparated ? commas(value) : spaces(value)\n  }\n\n  // React only accepts `style` as object.\n  if (info.property === 'style') {\n    let styleObject =\n      typeof value === 'object' ? value : parseStyle(state, String(value))\n\n    if (state.stylePropertyNameCase === 'css') {\n      styleObject = transformStylesToCssCasing(styleObject)\n    }\n\n    return ['style', styleObject]\n  }\n\n  return [\n    state.elementAttributeNameCase === 'react' && info.space\n      ? hastToReact[info.property] || info.property\n      : info.attribute,\n    value\n  ]\n}\n\n/**\n * Parse a CSS declaration to an object.\n *\n * @param {State} state\n *   Info passed around.\n * @param {string} value\n *   CSS declarations.\n * @returns {Style}\n *   Properties.\n * @throws\n *   Throws `VFileMessage` when CSS cannot be parsed.\n */\nfunction parseStyle(state, value) {\n  /** @type {Style} */\n  const result = {}\n\n  try {\n    // @ts-expect-error: `style-to-object` types are broken.\n    styleToObject(value, replacer)\n  } catch (error) {\n    if (!state.ignoreInvalidStyle) {\n      const cause = /** @type {Error} */ (error)\n      const message = new VFileMessage('Cannot parse `style` attribute', {\n        ancestors: state.ancestors,\n        cause,\n        ruleId: 'style',\n        source: 'hast-util-to-jsx-runtime'\n      })\n      message.file = state.filePath || undefined\n      message.url = docs + '#cannot-parse-style-attribute'\n\n      throw message\n    }\n  }\n\n  return result\n\n  /**\n   * Add a CSS property (normal, so with dashes) to `result` as a DOM CSS\n   * property.\n   *\n   * @param {string} name\n   *   Key.\n   * @param {string} value\n   *   Value\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function replacer(name, value) {\n    let key = name\n\n    if (key.slice(0, 2) !== '--') {\n      if (key.slice(0, 4) === '-ms-') key = 'ms-' + key.slice(4)\n      key = key.replace(dashSomething, toCamel)\n    }\n\n    result[key] = value\n  }\n}\n\n/**\n * Create a JSX name from a string.\n *\n * @param {State} state\n *   To do.\n * @param {string} name\n *   Name.\n * @param {boolean} allowExpression\n *   Allow member expressions and identifiers.\n * @returns {unknown}\n *   To do.\n */\nfunction findComponentFromName(state, name, allowExpression) {\n  /** @type {Identifier | Literal | MemberExpression} */\n  let result\n\n  if (!allowExpression) {\n    result = {type: 'Literal', value: name}\n  } else if (name.includes('.')) {\n    const identifiers = name.split('.')\n    let index = -1\n    /** @type {Identifier | Literal | MemberExpression | undefined} */\n    let node\n\n    while (++index < identifiers.length) {\n      /** @type {Identifier | Literal} */\n      const prop = isIdentifierName(identifiers[index])\n        ? {type: 'Identifier', name: identifiers[index]}\n        : {type: 'Literal', value: identifiers[index]}\n      node = node\n        ? {\n            type: 'MemberExpression',\n            object: node,\n            property: prop,\n            computed: Boolean(index && prop.type === 'Literal'),\n            optional: false\n          }\n        : prop\n    }\n\n    assert(node, 'always a result')\n    result = node\n  } else {\n    result =\n      isIdentifierName(name) && !/^[a-z]/.test(name)\n        ? {type: 'Identifier', name}\n        : {type: 'Literal', value: name}\n  }\n\n  // Only literals can be passed in `components` currently.\n  // No identifiers / member expressions.\n  if (result.type === 'Literal') {\n    const name = /** @type {keyof JSX.IntrinsicElements} */ (result.value)\n\n    return own.call(state.components, name) ? state.components[name] : name\n  }\n\n  // Assume component.\n  if (state.evaluater) {\n    return state.evaluater.evaluateExpression(result)\n  }\n\n  crashEstree(state)\n}\n\n/**\n * @param {State} state\n * @param {Position | undefined} [place]\n * @returns {never}\n */\nfunction crashEstree(state, place) {\n  const message = new VFileMessage(\n    'Cannot handle MDX estrees without `createEvaluater`',\n    {\n      ancestors: state.ancestors,\n      place,\n      ruleId: 'mdx-estree',\n      source: 'hast-util-to-jsx-runtime'\n    }\n  )\n  message.file = state.filePath || undefined\n  message.url = docs + '#cannot-handle-mdx-estrees-without-createevaluater'\n\n  throw message\n}\n\n/**\n * Transform a DOM casing style object to a CSS casing style object.\n *\n * @param {Style} domCasing\n * @returns {Style}\n */\nfunction transformStylesToCssCasing(domCasing) {\n  /** @type {Style} */\n  const cssCasing = {}\n  /** @type {string} */\n  let from\n\n  for (from in domCasing) {\n    if (own.call(domCasing, from)) {\n      cssCasing[transformStyleToCssCasing(from)] = domCasing[from]\n    }\n  }\n\n  return cssCasing\n}\n\n/**\n * Transform a DOM casing style field to a CSS casing style field.\n *\n * @param {string} from\n * @returns {string}\n */\nfunction transformStyleToCssCasing(from) {\n  let to = from.replace(cap, toDash)\n  // Handle `ms-xxx` -> `-ms-xxx`.\n  if (to.slice(0, 3) === 'ms-') to = '-' + to\n  return to\n}\n\n/**\n * Make `$1` capitalized.\n *\n * @param {string} _\n *   Whatever.\n * @param {string} $1\n *   Single ASCII alphabetical.\n * @returns {string}\n *   Capitalized `$1`.\n */\nfunction toCamel(_, $1) {\n  return $1.toUpperCase()\n}\n\n/**\n * Make `$0` dash cased.\n *\n * @param {string} $0\n *   Capitalized ASCII leter.\n * @returns {string}\n *   Dash and lower letter.\n */\nfunction toDash($0) {\n  return '-' + $0.toLowerCase()\n}\n","/**\n * @typedef Options\n *   Configuration for `stringify`.\n * @property {boolean} [padLeft=true]\n *   Whether to pad a space before a token.\n * @property {boolean} [padRight=false]\n *   Whether to pad a space after a token.\n */\n\n/**\n * @typedef {Options} StringifyOptions\n *   Please use `StringifyOptions` instead.\n */\n\n/**\n * Parse comma-separated tokens to an array.\n *\n * @param {string} value\n *   Comma-separated tokens.\n * @returns {Array<string>}\n *   List of tokens.\n */\nexport function parse(value) {\n  /** @type {Array<string>} */\n  const tokens = []\n  const input = String(value || '')\n  let index = input.indexOf(',')\n  let start = 0\n  /** @type {boolean} */\n  let end = false\n\n  while (!end) {\n    if (index === -1) {\n      index = input.length\n      end = true\n    }\n\n    const token = input.slice(start, index).trim()\n\n    if (token || !end) {\n      tokens.push(token)\n    }\n\n    start = index + 1\n    index = input.indexOf(',', start)\n  }\n\n  return tokens\n}\n\n/**\n * Serialize an array of strings or numbers to comma-separated tokens.\n *\n * @param {Array<string|number>} values\n *   List of tokens.\n * @param {Options} [options]\n *   Configuration for `stringify` (optional).\n * @returns {string}\n *   Comma-separated tokens.\n */\nexport function stringify(values, options) {\n  const settings = options || {}\n\n  // Ensure the last empty entry is seen.\n  const input = values[values.length - 1] === '' ? [...values, ''] : values\n\n  return input\n    .join(\n      (settings.padRight ? ' ' : '') +\n        ',' +\n        (settings.padLeft === false ? '' : ' ')\n    )\n    .trim()\n}\n","/**\n * Parse space-separated tokens to an array of strings.\n *\n * @param {string} value\n *   Space-separated tokens.\n * @returns {Array<string>}\n *   List of tokens.\n */\nexport function parse(value) {\n  const input = String(value || '').trim()\n  return input ? input.split(/[ \\t\\n\\r\\f]+/g) : []\n}\n\n/**\n * Serialize an array of strings as space separated-tokens.\n *\n * @param {Array<string|number>} values\n *   List of tokens.\n * @returns {string}\n *   Space-separated tokens.\n */\nexport function stringify(values) {\n  return values.join(' ').trim()\n}\n","/**\n * HTML URL properties.\n *\n * Each key is a property name and each value is a list of tag names it applies\n * to or `null` if it applies to all elements.\n *\n * @type {Record<string, Array<string> | null>}\n */\nexport const urlAttributes = {\n  action: ['form'],\n  cite: ['blockquote', 'del', 'ins', 'q'],\n  data: ['object'],\n  formAction: ['button', 'input'],\n  href: ['a', 'area', 'base', 'link'],\n  icon: ['menuitem'],\n  itemId: null,\n  manifest: ['html'],\n  ping: ['a', 'area'],\n  poster: ['video'],\n  src: [\n    'audio',\n    'embed',\n    'iframe',\n    'img',\n    'input',\n    'script',\n    'source',\n    'track',\n    'video'\n  ]\n}\n","/**\n * @typedef {import('mdast').Nodes} Nodes\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [includeImageAlt=true]\n *   Whether to use `alt` for `image`s (default: `true`).\n * @property {boolean | null | undefined} [includeHtml=true]\n *   Whether to use `value` of HTML (default: `true`).\n */\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Get the text content of a node or list of nodes.\n *\n * Prefers the node’s plain-text fields, otherwise serializes its children,\n * and if the given value is an array, serialize the nodes in it.\n *\n * @param {unknown} [value]\n *   Thing to serialize, typically `Node`.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {string}\n *   Serialized `value`.\n */\nexport function toString(value, options) {\n  const settings = options || emptyOptions\n  const includeImageAlt =\n    typeof settings.includeImageAlt === 'boolean'\n      ? settings.includeImageAlt\n      : true\n  const includeHtml =\n    typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true\n\n  return one(value, includeImageAlt, includeHtml)\n}\n\n/**\n * One node or several nodes.\n *\n * @param {unknown} value\n *   Thing to serialize.\n * @param {boolean} includeImageAlt\n *   Include image `alt`s.\n * @param {boolean} includeHtml\n *   Include HTML.\n * @returns {string}\n *   Serialized node.\n */\nfunction one(value, includeImageAlt, includeHtml) {\n  if (node(value)) {\n    if ('value' in value) {\n      return value.type === 'html' && !includeHtml ? '' : value.value\n    }\n\n    if (includeImageAlt && 'alt' in value && value.alt) {\n      return value.alt\n    }\n\n    if ('children' in value) {\n      return all(value.children, includeImageAlt, includeHtml)\n    }\n  }\n\n  if (Array.isArray(value)) {\n    return all(value, includeImageAlt, includeHtml)\n  }\n\n  return ''\n}\n\n/**\n * Serialize a list of nodes.\n *\n * @param {Array<unknown>} values\n *   Thing to serialize.\n * @param {boolean} includeImageAlt\n *   Include image `alt`s.\n * @param {boolean} includeHtml\n *   Include HTML.\n * @returns {string}\n *   Serialized nodes.\n */\nfunction all(values, includeImageAlt, includeHtml) {\n  /** @type {Array<string>} */\n  const result = []\n  let index = -1\n\n  while (++index < values.length) {\n    result[index] = one(values[index], includeImageAlt, includeHtml)\n  }\n\n  return result.join('')\n}\n\n/**\n * Check if `value` looks like a node.\n *\n * @param {unknown} value\n *   Thing.\n * @returns {value is Nodes}\n *   Whether `value` is a node.\n */\nfunction node(value) {\n  return Boolean(value && typeof value === 'object')\n}\n","/**\n * Like `Array#splice`, but smarter for giant arrays.\n *\n * `Array#splice` takes all items to be inserted as individual argument which\n * causes a stack overflow in V8 when trying to insert 100k items for instance.\n *\n * Otherwise, this does not return the removed items, and takes `items` as an\n * array instead of rest parameters.\n *\n * @template {unknown} T\n *   Item type.\n * @param {Array<T>} list\n *   List to operate on.\n * @param {number} start\n *   Index to remove/insert at (can be negative).\n * @param {number} remove\n *   Number of items to remove.\n * @param {Array<T>} items\n *   Items to inject into `list`.\n * @returns {undefined}\n *   Nothing.\n */\nexport function splice(list, start, remove, items) {\n  const end = list.length\n  let chunkStart = 0\n  /** @type {Array<unknown>} */\n  let parameters\n\n  // Make start between zero and `end` (included).\n  if (start < 0) {\n    start = -start > end ? 0 : end + start\n  } else {\n    start = start > end ? end : start\n  }\n  remove = remove > 0 ? remove : 0\n\n  // No need to chunk the items if there’s only a couple (10k) items.\n  if (items.length < 10000) {\n    parameters = Array.from(items)\n    parameters.unshift(start, remove)\n    // @ts-expect-error Hush, it’s fine.\n    list.splice(...parameters)\n  } else {\n    // Delete `remove` items starting from `start`\n    if (remove) list.splice(start, remove)\n\n    // Insert the items in chunks to not cause stack overflows.\n    while (chunkStart < items.length) {\n      parameters = items.slice(chunkStart, chunkStart + 10000)\n      parameters.unshift(start, 0)\n      // @ts-expect-error Hush, it’s fine.\n      list.splice(...parameters)\n      chunkStart += 10000\n      start += 10000\n    }\n  }\n}\n\n/**\n * Append `items` (an array) at the end of `list` (another array).\n * When `list` was empty, returns `items` instead.\n *\n * This prevents a potentially expensive operation when `list` is empty,\n * and adds items in batches to prevent V8 from hanging.\n *\n * @template {unknown} T\n *   Item type.\n * @param {Array<T>} list\n *   List to operate on.\n * @param {Array<T>} items\n *   Items to add to `list`.\n * @returns {Array<T>}\n *   Either `list` or `items`.\n */\nexport function push(list, items) {\n  if (list.length > 0) {\n    splice(list, list.length, 0, items)\n    return list\n  }\n  return items\n}\n","/**\n * Some of the internal operations of micromark do lots of editing\n * operations on very large arrays. This runs into problems with two\n * properties of most circa-2020 JavaScript interpreters:\n *\n *  - Array-length modifications at the high end of an array (push/pop) are\n *    expected to be common and are implemented in (amortized) time\n *    proportional to the number of elements added or removed, whereas\n *    other operations (shift/unshift and splice) are much less efficient.\n *  - Function arguments are passed on the stack, so adding tens of thousands\n *    of elements to an array with `arr.push[...newElements]` will frequently\n *    cause stack overflows. (see <https://stackoverflow.com/questions/22123769/rangeerror-maximum-call-stack-size-exceeded-why>)\n *\n * SpliceBuffers are an implementation of gap buffers, which are a\n * generalization of the \"queue made of two stacks\" idea. The splice buffer\n * maintains a cursor, and moving the cursor has cost proportional to the\n * distance the cursor moves, but inserting, deleting, or splicing in\n * new information at the cursor is as efficient as the push/pop operation.\n * This allows for an efficient sequence of splices (or pushes, pops, shifts,\n * or unshifts) as long such edits happen at the same part of the array or\n * generally sweep through the array from the beginning to the end.\n *\n * The interface for splice buffers also supports large numbers of inputs by\n * passing a single array argument rather passing multiple arguments on the\n * function call stack.\n *\n * @template T\n *   Item type.\n */\nexport class SpliceBuffer {\n  /**\n   * @param {ReadonlyArray<T> | null | undefined} [initial]\n   *   Initial items (optional).\n   * @returns\n   *   Splice buffer.\n   */\n  constructor(initial) {\n    /** @type {Array<T>} */\n    this.left = initial ? [...initial] : [];\n    /** @type {Array<T>} */\n    this.right = [];\n  }\n\n  /**\n   * Array access;\n   * does not move the cursor.\n   *\n   * @param {number} index\n   *   Index.\n   * @return {T}\n   *   Item.\n   */\n  get(index) {\n    if (index < 0 || index >= this.left.length + this.right.length) {\n      throw new RangeError('Cannot access index `' + index + '` in a splice buffer of size `' + (this.left.length + this.right.length) + '`');\n    }\n    if (index < this.left.length) return this.left[index];\n    return this.right[this.right.length - index + this.left.length - 1];\n  }\n\n  /**\n   * The length of the splice buffer, one greater than the largest index in the\n   * array.\n   */\n  get length() {\n    return this.left.length + this.right.length;\n  }\n\n  /**\n   * Remove and return `list[0]`;\n   * moves the cursor to `0`.\n   *\n   * @returns {T | undefined}\n   *   Item, optional.\n   */\n  shift() {\n    this.setCursor(0);\n    return this.right.pop();\n  }\n\n  /**\n   * Slice the buffer to get an array;\n   * does not move the cursor.\n   *\n   * @param {number} start\n   *   Start.\n   * @param {number | null | undefined} [end]\n   *   End (optional).\n   * @returns {Array<T>}\n   *   Array of items.\n   */\n  slice(start, end) {\n    /** @type {number} */\n    const stop = end === null || end === undefined ? Number.POSITIVE_INFINITY : end;\n    if (stop < this.left.length) {\n      return this.left.slice(start, stop);\n    }\n    if (start > this.left.length) {\n      return this.right.slice(this.right.length - stop + this.left.length, this.right.length - start + this.left.length).reverse();\n    }\n    return this.left.slice(start).concat(this.right.slice(this.right.length - stop + this.left.length).reverse());\n  }\n\n  /**\n   * Mimics the behavior of Array.prototype.splice() except for the change of\n   * interface necessary to avoid segfaults when patching in very large arrays.\n   *\n   * This operation moves cursor is moved to `start` and results in the cursor\n   * placed after any inserted items.\n   *\n   * @param {number} start\n   *   Start;\n   *   zero-based index at which to start changing the array;\n   *   negative numbers count backwards from the end of the array and values\n   *   that are out-of bounds are clamped to the appropriate end of the array.\n   * @param {number | null | undefined} [deleteCount=0]\n   *   Delete count (default: `0`);\n   *   maximum number of elements to delete, starting from start.\n   * @param {Array<T> | null | undefined} [items=[]]\n   *   Items to include in place of the deleted items (default: `[]`).\n   * @return {Array<T>}\n   *   Any removed items.\n   */\n  splice(start, deleteCount, items) {\n    /** @type {number} */\n    const count = deleteCount || 0;\n    this.setCursor(Math.trunc(start));\n    const removed = this.right.splice(this.right.length - count, Number.POSITIVE_INFINITY);\n    if (items) chunkedPush(this.left, items);\n    return removed.reverse();\n  }\n\n  /**\n   * Remove and return the highest-numbered item in the array, so\n   * `list[list.length - 1]`;\n   * Moves the cursor to `length`.\n   *\n   * @returns {T | undefined}\n   *   Item, optional.\n   */\n  pop() {\n    this.setCursor(Number.POSITIVE_INFINITY);\n    return this.left.pop();\n  }\n\n  /**\n   * Inserts a single item to the high-numbered side of the array;\n   * moves the cursor to `length`.\n   *\n   * @param {T} item\n   *   Item.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  push(item) {\n    this.setCursor(Number.POSITIVE_INFINITY);\n    this.left.push(item);\n  }\n\n  /**\n   * Inserts many items to the high-numbered side of the array.\n   * Moves the cursor to `length`.\n   *\n   * @param {Array<T>} items\n   *   Items.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  pushMany(items) {\n    this.setCursor(Number.POSITIVE_INFINITY);\n    chunkedPush(this.left, items);\n  }\n\n  /**\n   * Inserts a single item to the low-numbered side of the array;\n   * Moves the cursor to `0`.\n   *\n   * @param {T} item\n   *   Item.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  unshift(item) {\n    this.setCursor(0);\n    this.right.push(item);\n  }\n\n  /**\n   * Inserts many items to the low-numbered side of the array;\n   * moves the cursor to `0`.\n   *\n   * @param {Array<T>} items\n   *   Items.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  unshiftMany(items) {\n    this.setCursor(0);\n    chunkedPush(this.right, items.reverse());\n  }\n\n  /**\n   * Move the cursor to a specific position in the array. Requires\n   * time proportional to the distance moved.\n   *\n   * If `n < 0`, the cursor will end up at the beginning.\n   * If `n > length`, the cursor will end up at the end.\n   *\n   * @param {number} n\n   *   Position.\n   * @return {undefined}\n   *   Nothing.\n   */\n  setCursor(n) {\n    if (n === this.left.length || n > this.left.length && this.right.length === 0 || n < 0 && this.left.length === 0) return;\n    if (n < this.left.length) {\n      // Move cursor to the this.left\n      const removed = this.left.splice(n, Number.POSITIVE_INFINITY);\n      chunkedPush(this.right, removed.reverse());\n    } else {\n      // Move cursor to the this.right\n      const removed = this.right.splice(this.left.length + this.right.length - n, Number.POSITIVE_INFINITY);\n      chunkedPush(this.left, removed.reverse());\n    }\n  }\n}\n\n/**\n * Avoid stack overflow by pushing items onto the stack in segments\n *\n * @template T\n *   Item type.\n * @param {Array<T>} list\n *   List to inject into.\n * @param {ReadonlyArray<T>} right\n *   Items to inject.\n * @return {undefined}\n *   Nothing.\n */\nfunction chunkedPush(list, right) {\n  /** @type {number} */\n  let chunkStart = 0;\n  if (right.length < 10000) {\n    list.push(...right);\n  } else {\n    while (chunkStart < right.length) {\n      list.push(...right.slice(chunkStart, chunkStart + 10000));\n      chunkStart += 10000;\n    }\n  }\n}","/**\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Token} Token\n */\n\nimport { splice } from 'micromark-util-chunked';\nimport { SpliceBuffer } from './lib/splice-buffer.js';\n\n// Hidden API exposed for testing.\nexport { SpliceBuffer } from './lib/splice-buffer.js';\n\n/**\n * Tokenize subcontent.\n *\n * @param {Array<Event>} eventsArray\n *   List of events.\n * @returns {boolean}\n *   Whether subtokens were found.\n */\n// eslint-disable-next-line complexity\nexport function subtokenize(eventsArray) {\n  /** @type {Record<string, number>} */\n  const jumps = {};\n  let index = -1;\n  /** @type {Event} */\n  let event;\n  /** @type {number | undefined} */\n  let lineIndex;\n  /** @type {number} */\n  let otherIndex;\n  /** @type {Event} */\n  let otherEvent;\n  /** @type {Array<Event>} */\n  let parameters;\n  /** @type {Array<Event>} */\n  let subevents;\n  /** @type {boolean | undefined} */\n  let more;\n  const events = new SpliceBuffer(eventsArray);\n  while (++index < events.length) {\n    while (index in jumps) {\n      index = jumps[index];\n    }\n    event = events.get(index);\n\n    // Add a hook for the GFM tasklist extension, which needs to know if text\n    // is in the first content of a list item.\n    if (index && event[1].type === \"chunkFlow\" && events.get(index - 1)[1].type === \"listItemPrefix\") {\n      subevents = event[1]._tokenizer.events;\n      otherIndex = 0;\n      if (otherIndex < subevents.length && subevents[otherIndex][1].type === \"lineEndingBlank\") {\n        otherIndex += 2;\n      }\n      if (otherIndex < subevents.length && subevents[otherIndex][1].type === \"content\") {\n        while (++otherIndex < subevents.length) {\n          if (subevents[otherIndex][1].type === \"content\") {\n            break;\n          }\n          if (subevents[otherIndex][1].type === \"chunkText\") {\n            subevents[otherIndex][1]._isInFirstContentOfListItem = true;\n            otherIndex++;\n          }\n        }\n      }\n    }\n\n    // Enter.\n    if (event[0] === 'enter') {\n      if (event[1].contentType) {\n        Object.assign(jumps, subcontent(events, index));\n        index = jumps[index];\n        more = true;\n      }\n    }\n    // Exit.\n    else if (event[1]._container) {\n      otherIndex = index;\n      lineIndex = undefined;\n      while (otherIndex--) {\n        otherEvent = events.get(otherIndex);\n        if (otherEvent[1].type === \"lineEnding\" || otherEvent[1].type === \"lineEndingBlank\") {\n          if (otherEvent[0] === 'enter') {\n            if (lineIndex) {\n              events.get(lineIndex)[1].type = \"lineEndingBlank\";\n            }\n            otherEvent[1].type = \"lineEnding\";\n            lineIndex = otherIndex;\n          }\n        } else {\n          break;\n        }\n      }\n      if (lineIndex) {\n        // Fix position.\n        event[1].end = Object.assign({}, events.get(lineIndex)[1].start);\n\n        // Switch container exit w/ line endings.\n        parameters = events.slice(lineIndex, index);\n        parameters.unshift(event);\n        events.splice(lineIndex, index - lineIndex + 1, parameters);\n      }\n    }\n  }\n\n  // The changes to the `events` buffer must be copied back into the eventsArray\n  splice(eventsArray, 0, Number.POSITIVE_INFINITY, events.slice(0));\n  return !more;\n}\n\n/**\n * Tokenize embedded tokens.\n *\n * @param {SpliceBuffer<Event>} events\n * @param {number} eventIndex\n * @returns {Record<string, number>}\n */\nfunction subcontent(events, eventIndex) {\n  const token = events.get(eventIndex)[1];\n  const context = events.get(eventIndex)[2];\n  let startPosition = eventIndex - 1;\n  /** @type {Array<number>} */\n  const startPositions = [];\n  const tokenizer = token._tokenizer || context.parser[token.contentType](token.start);\n  const childEvents = tokenizer.events;\n  /** @type {Array<[number, number]>} */\n  const jumps = [];\n  /** @type {Record<string, number>} */\n  const gaps = {};\n  /** @type {Array<Chunk>} */\n  let stream;\n  /** @type {Token | undefined} */\n  let previous;\n  let index = -1;\n  /** @type {Token | undefined} */\n  let current = token;\n  let adjust = 0;\n  let start = 0;\n  const breaks = [start];\n\n  // Loop forward through the linked tokens to pass them in order to the\n  // subtokenizer.\n  while (current) {\n    // Find the position of the event for this token.\n    while (events.get(++startPosition)[1] !== current) {\n      // Empty.\n    }\n    startPositions.push(startPosition);\n    if (!current._tokenizer) {\n      stream = context.sliceStream(current);\n      if (!current.next) {\n        stream.push(null);\n      }\n      if (previous) {\n        tokenizer.defineSkip(current.start);\n      }\n      if (current._isInFirstContentOfListItem) {\n        tokenizer._gfmTasklistFirstContentOfListItem = true;\n      }\n      tokenizer.write(stream);\n      if (current._isInFirstContentOfListItem) {\n        tokenizer._gfmTasklistFirstContentOfListItem = undefined;\n      }\n    }\n\n    // Unravel the next token.\n    previous = current;\n    current = current.next;\n  }\n\n  // Now, loop back through all events (and linked tokens), to figure out which\n  // parts belong where.\n  current = token;\n  while (++index < childEvents.length) {\n    if (\n    // Find a void token that includes a break.\n    childEvents[index][0] === 'exit' && childEvents[index - 1][0] === 'enter' && childEvents[index][1].type === childEvents[index - 1][1].type && childEvents[index][1].start.line !== childEvents[index][1].end.line) {\n      start = index + 1;\n      breaks.push(start);\n      // Help GC.\n      current._tokenizer = undefined;\n      current.previous = undefined;\n      current = current.next;\n    }\n  }\n\n  // Help GC.\n  tokenizer.events = [];\n\n  // If there’s one more token (which is the cases for lines that end in an\n  // EOF), that’s perfect: the last point we found starts it.\n  // If there isn’t then make sure any remaining content is added to it.\n  if (current) {\n    // Help GC.\n    current._tokenizer = undefined;\n    current.previous = undefined;\n  } else {\n    breaks.pop();\n  }\n\n  // Now splice the events from the subtokenizer into the current events,\n  // moving back to front so that splice indices aren’t affected.\n  index = breaks.length;\n  while (index--) {\n    const slice = childEvents.slice(breaks[index], breaks[index + 1]);\n    const start = startPositions.pop();\n    jumps.push([start, start + slice.length - 1]);\n    events.splice(start, 2, slice);\n  }\n  jumps.reverse();\n  index = -1;\n  while (++index < jumps.length) {\n    gaps[adjust + jumps[index][0]] = adjust + jumps[index][1];\n    adjust += jumps[index][1] - jumps[index][0] - 1;\n  }\n  return gaps;\n}","/**\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Handles} Handles\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension\n */\n\nimport {splice} from 'micromark-util-chunked'\n\nconst hasOwnProperty = {}.hasOwnProperty\n\n/**\n * Combine multiple syntax extensions into one.\n *\n * @param {Array<Extension>} extensions\n *   List of syntax extensions.\n * @returns {NormalizedExtension}\n *   A single combined extension.\n */\nexport function combineExtensions(extensions) {\n  /** @type {NormalizedExtension} */\n  const all = {}\n  let index = -1\n\n  while (++index < extensions.length) {\n    syntaxExtension(all, extensions[index])\n  }\n\n  return all\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {NormalizedExtension} all\n *   Extension to merge into.\n * @param {Extension} extension\n *   Extension to merge.\n * @returns {undefined}\n */\nfunction syntaxExtension(all, extension) {\n  /** @type {keyof Extension} */\n  let hook\n\n  for (hook in extension) {\n    const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n    /** @type {Record<string, unknown>} */\n    const left = maybe || (all[hook] = {})\n    /** @type {Record<string, unknown> | undefined} */\n    const right = extension[hook]\n    /** @type {string} */\n    let code\n\n    if (right) {\n      for (code in right) {\n        if (!hasOwnProperty.call(left, code)) left[code] = []\n        const value = right[code]\n        constructs(\n          // @ts-expect-error Looks like a list.\n          left[code],\n          Array.isArray(value) ? value : value ? [value] : []\n        )\n      }\n    }\n  }\n}\n\n/**\n * Merge `list` into `existing` (both lists of constructs).\n * Mutates `existing`.\n *\n * @param {Array<unknown>} existing\n * @param {Array<unknown>} list\n * @returns {undefined}\n */\nfunction constructs(existing, list) {\n  let index = -1\n  /** @type {Array<unknown>} */\n  const before = []\n\n  while (++index < list.length) {\n    // @ts-expect-error Looks like an object.\n    ;(list[index].add === 'after' ? existing : before).push(list[index])\n  }\n\n  splice(existing, 0, 0, before)\n}\n\n/**\n * Combine multiple HTML extensions into one.\n *\n * @param {Array<HtmlExtension>} htmlExtensions\n *   List of HTML extensions.\n * @returns {HtmlExtension}\n *   A single combined HTML extension.\n */\nexport function combineHtmlExtensions(htmlExtensions) {\n  /** @type {HtmlExtension} */\n  const handlers = {}\n  let index = -1\n\n  while (++index < htmlExtensions.length) {\n    htmlExtension(handlers, htmlExtensions[index])\n  }\n\n  return handlers\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {HtmlExtension} all\n *   Extension to merge into.\n * @param {HtmlExtension} extension\n *   Extension to merge.\n * @returns {undefined}\n */\nfunction htmlExtension(all, extension) {\n  /** @type {keyof HtmlExtension} */\n  let hook\n\n  for (hook in extension) {\n    const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n    const left = maybe || (all[hook] = {})\n    const right = extension[hook]\n    /** @type {keyof Handles} */\n    let type\n\n    if (right) {\n      for (type in right) {\n        // @ts-expect-error assume document vs regular handler are managed correctly.\n        left[type] = right[type]\n      }\n    }\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n */\n\n/**\n * Check whether the character code represents an ASCII alpha (`a` through `z`,\n * case insensitive).\n *\n * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha.\n *\n * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`)\n * to U+005A (`Z`).\n *\n * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`)\n * to U+007A (`z`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAlpha = regexCheck(/[A-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII alphanumeric (`a`\n * through `z`, case insensitive, or `0` through `9`).\n *\n * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha\n * (see `asciiAlpha`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII atext.\n *\n * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in\n * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`),\n * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F\n * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E\n * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE\n * (`{`) to U+007E TILDE (`~`).\n *\n * See:\n * **\\[RFC5322]**:\n * [Internet Message Format](https://tools.ietf.org/html/rfc5322).\n * P. Resnick.\n * IETF.\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAtext = regexCheck(/[#-'*+\\--9=?A-Z^-~]/);\n\n/**\n * Check whether a character code is an ASCII control character.\n *\n * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL)\n * to U+001F (US), or U+007F (DEL).\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function asciiControl(code) {\n  return (\n    // Special whitespace codes (which have negative values), C0 and Control\n    // character DEL\n    code !== null && (code < 32 || code === 127)\n  );\n}\n\n/**\n * Check whether the character code represents an ASCII digit (`0` through `9`).\n *\n * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to\n * U+0039 (`9`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiDigit = regexCheck(/\\d/);\n\n/**\n * Check whether the character code represents an ASCII hex digit (`a` through\n * `f`, case insensitive, or `0` through `9`).\n *\n * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex\n * digit, or an ASCII lower hex digit.\n *\n * An **ASCII upper hex digit** is a character in the inclusive range U+0041\n * (`A`) to U+0046 (`F`).\n *\n * An **ASCII lower hex digit** is a character in the inclusive range U+0061\n * (`a`) to U+0066 (`f`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiHexDigit = regexCheck(/[\\dA-Fa-f]/);\n\n/**\n * Check whether the character code represents ASCII punctuation.\n *\n * An **ASCII punctuation** is a character in the inclusive ranges U+0021\n * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT\n * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT\n * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/);\n\n/**\n * Check whether a character code is a markdown line ending.\n *\n * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN\n * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR).\n *\n * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE\n * RETURN (CR) are replaced by these virtual characters depending on whether\n * they occurred together.\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownLineEnding(code) {\n  return code !== null && code < -2;\n}\n\n/**\n * Check whether a character code is a markdown line ending (see\n * `markdownLineEnding`) or markdown space (see `markdownSpace`).\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownLineEndingOrSpace(code) {\n  return code !== null && (code < 0 || code === 32);\n}\n\n/**\n * Check whether a character code is a markdown space.\n *\n * A **markdown space** is the concrete character U+0020 SPACE (SP) and the\n * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT).\n *\n * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is\n * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL\n * SPACE (VS) characters, depending on the column at which the tab occurred.\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownSpace(code) {\n  return code === -2 || code === -1 || code === 32;\n}\n\n// Size note: removing ASCII from the regex and using `asciiPunctuation` here\n// In fact adds to the bundle size.\n/**\n * Check whether the character code represents Unicode punctuation.\n *\n * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation,\n * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf`\n * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po`\n * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII\n * punctuation (see `asciiPunctuation`).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const unicodePunctuation = regexCheck(/\\p{P}|\\p{S}/u);\n\n/**\n * Check whether the character code represents Unicode whitespace.\n *\n * Note that this does handle micromark specific markdown whitespace characters.\n * See `markdownLineEndingOrSpace` to check that.\n *\n * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator,\n * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF),\n * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\\[UNICODE]**).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const unicodeWhitespace = regexCheck(/\\s/);\n\n/**\n * Create a code check from a regex.\n *\n * @param {RegExp} regex\n * @returns {(code: Code) => boolean}\n */\nfunction regexCheck(regex) {\n  return check;\n\n  /**\n   * Check whether a code matches the bound regex.\n   *\n   * @param {Code} code\n   *   Character code.\n   * @returns {boolean}\n   *   Whether the character code matches the bound regex.\n   */\n  function check(code) {\n    return code !== null && code > -1 && regex.test(String.fromCharCode(code));\n  }\n}","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {markdownSpace} from 'micromark-util-character'\n\n// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`.\n\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * *   spaces in markdown are often optional, in which case this factory can be\n *     used and `ok` will be switched to whether spaces were found or not\n * *   one line ending or space can be detected with `markdownSpace(code)` right\n *     before using `factorySpace`\n *\n * ###### Examples\n *\n * Where `␉` represents a tab (plus how much it expands) and `␠` represents a\n * single space.\n *\n * ```markdown\n * ␉\n * ␠␠␠␠\n * ␉␠\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {TokenType} type\n *   Type (`' \\t'`).\n * @param {number | undefined} [max=Infinity]\n *   Max (exclusive).\n * @returns {State}\n *   Start state.\n */\nexport function factorySpace(effects, ok, type, max) {\n  const limit = max ? max - 1 : Number.POSITIVE_INFINITY\n  let size = 0\n  return start\n\n  /** @type {State} */\n  function start(code) {\n    if (markdownSpace(code)) {\n      effects.enter(type)\n      return prefix(code)\n    }\n    return ok(code)\n  }\n\n  /** @type {State} */\n  function prefix(code) {\n    if (markdownSpace(code) && size++ < limit) {\n      effects.consume(code)\n      return prefix\n    }\n    effects.exit(type)\n    return ok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {InitialConstruct} */\nexport const content = {\n  tokenize: initializeContent\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\nfunction initializeContent(effects) {\n  const contentStart = effects.attempt(\n    this.parser.constructs.contentInitial,\n    afterContentStartConstruct,\n    paragraphInitial\n  )\n  /** @type {Token} */\n  let previous\n  return contentStart\n\n  /** @type {State} */\n  function afterContentStartConstruct(code) {\n    if (code === null) {\n      effects.consume(code)\n      return\n    }\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return factorySpace(effects, contentStart, 'linePrefix')\n  }\n\n  /** @type {State} */\n  function paragraphInitial(code) {\n    effects.enter('paragraph')\n    return lineStart(code)\n  }\n\n  /** @type {State} */\n  function lineStart(code) {\n    const token = effects.enter('chunkText', {\n      contentType: 'text',\n      previous\n    })\n    if (previous) {\n      previous.next = token\n    }\n    previous = token\n    return data(code)\n  }\n\n  /** @type {State} */\n  function data(code) {\n    if (code === null) {\n      effects.exit('chunkText')\n      effects.exit('paragraph')\n      effects.consume(code)\n      return\n    }\n    if (markdownLineEnding(code)) {\n      effects.consume(code)\n      effects.exit('chunkText')\n      return lineStart\n    }\n\n    // Data.\n    effects.consume(code)\n    return data\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ContainerState} ContainerState\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n/**\n * @typedef {[Construct, ContainerState]} StackItem\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {splice} from 'micromark-util-chunked'\n/** @type {InitialConstruct} */\nexport const document = {\n  tokenize: initializeDocument\n}\n\n/** @type {Construct} */\nconst containerConstruct = {\n  tokenize: tokenizeContainer\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\nfunction initializeDocument(effects) {\n  const self = this\n  /** @type {Array<StackItem>} */\n  const stack = []\n  let continued = 0\n  /** @type {TokenizeContext | undefined} */\n  let childFlow\n  /** @type {Token | undefined} */\n  let childToken\n  /** @type {number} */\n  let lineStartOffset\n  return start\n\n  /** @type {State} */\n  function start(code) {\n    // First we iterate through the open blocks, starting with the root\n    // document, and descending through last children down to the last open\n    // block.\n    // Each block imposes a condition that the line must satisfy if the block is\n    // to remain open.\n    // For example, a block quote requires a `>` character.\n    // A paragraph requires a non-blank line.\n    // In this phase we may match all or just some of the open blocks.\n    // But we cannot close unmatched blocks yet, because we may have a lazy\n    // continuation line.\n    if (continued < stack.length) {\n      const item = stack[continued]\n      self.containerState = item[1]\n      return effects.attempt(\n        item[0].continuation,\n        documentContinue,\n        checkNewContainers\n      )(code)\n    }\n\n    // Done.\n    return checkNewContainers(code)\n  }\n\n  /** @type {State} */\n  function documentContinue(code) {\n    continued++\n\n    // Note: this field is called `_closeFlow` but it also closes containers.\n    // Perhaps a good idea to rename it but it’s already used in the wild by\n    // extensions.\n    if (self.containerState._closeFlow) {\n      self.containerState._closeFlow = undefined\n      if (childFlow) {\n        closeFlow()\n      }\n\n      // Note: this algorithm for moving events around is similar to the\n      // algorithm when dealing with lazy lines in `writeToChild`.\n      const indexBeforeExits = self.events.length\n      let indexBeforeFlow = indexBeforeExits\n      /** @type {Point | undefined} */\n      let point\n\n      // Find the flow chunk.\n      while (indexBeforeFlow--) {\n        if (\n          self.events[indexBeforeFlow][0] === 'exit' &&\n          self.events[indexBeforeFlow][1].type === 'chunkFlow'\n        ) {\n          point = self.events[indexBeforeFlow][1].end\n          break\n        }\n      }\n      exitContainers(continued)\n\n      // Fix positions.\n      let index = indexBeforeExits\n      while (index < self.events.length) {\n        self.events[index][1].end = Object.assign({}, point)\n        index++\n      }\n\n      // Inject the exits earlier (they’re still also at the end).\n      splice(\n        self.events,\n        indexBeforeFlow + 1,\n        0,\n        self.events.slice(indexBeforeExits)\n      )\n\n      // Discard the duplicate exits.\n      self.events.length = index\n      return checkNewContainers(code)\n    }\n    return start(code)\n  }\n\n  /** @type {State} */\n  function checkNewContainers(code) {\n    // Next, after consuming the continuation markers for existing blocks, we\n    // look for new block starts (e.g. `>` for a block quote).\n    // If we encounter a new block start, we close any blocks unmatched in\n    // step 1 before creating the new block as a child of the last matched\n    // block.\n    if (continued === stack.length) {\n      // No need to `check` whether there’s a container, of `exitContainers`\n      // would be moot.\n      // We can instead immediately `attempt` to parse one.\n      if (!childFlow) {\n        return documentContinued(code)\n      }\n\n      // If we have concrete content, such as block HTML or fenced code,\n      // we can’t have containers “pierce” into them, so we can immediately\n      // start.\n      if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) {\n        return flowStart(code)\n      }\n\n      // If we do have flow, it could still be a blank line,\n      // but we’d be interrupting it w/ a new container if there’s a current\n      // construct.\n      // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer\n      // needed in micromark-extension-gfm-table@1.0.6).\n      self.interrupt = Boolean(\n        childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack\n      )\n    }\n\n    // Check if there is a new container.\n    self.containerState = {}\n    return effects.check(\n      containerConstruct,\n      thereIsANewContainer,\n      thereIsNoNewContainer\n    )(code)\n  }\n\n  /** @type {State} */\n  function thereIsANewContainer(code) {\n    if (childFlow) closeFlow()\n    exitContainers(continued)\n    return documentContinued(code)\n  }\n\n  /** @type {State} */\n  function thereIsNoNewContainer(code) {\n    self.parser.lazy[self.now().line] = continued !== stack.length\n    lineStartOffset = self.now().offset\n    return flowStart(code)\n  }\n\n  /** @type {State} */\n  function documentContinued(code) {\n    // Try new containers.\n    self.containerState = {}\n    return effects.attempt(\n      containerConstruct,\n      containerContinue,\n      flowStart\n    )(code)\n  }\n\n  /** @type {State} */\n  function containerContinue(code) {\n    continued++\n    stack.push([self.currentConstruct, self.containerState])\n    // Try another.\n    return documentContinued(code)\n  }\n\n  /** @type {State} */\n  function flowStart(code) {\n    if (code === null) {\n      if (childFlow) closeFlow()\n      exitContainers(0)\n      effects.consume(code)\n      return\n    }\n    childFlow = childFlow || self.parser.flow(self.now())\n    effects.enter('chunkFlow', {\n      contentType: 'flow',\n      previous: childToken,\n      _tokenizer: childFlow\n    })\n    return flowContinue(code)\n  }\n\n  /** @type {State} */\n  function flowContinue(code) {\n    if (code === null) {\n      writeToChild(effects.exit('chunkFlow'), true)\n      exitContainers(0)\n      effects.consume(code)\n      return\n    }\n    if (markdownLineEnding(code)) {\n      effects.consume(code)\n      writeToChild(effects.exit('chunkFlow'))\n      // Get ready for the next line.\n      continued = 0\n      self.interrupt = undefined\n      return start\n    }\n    effects.consume(code)\n    return flowContinue\n  }\n\n  /**\n   * @param {Token} token\n   * @param {boolean | undefined} [eof]\n   * @returns {undefined}\n   */\n  function writeToChild(token, eof) {\n    const stream = self.sliceStream(token)\n    if (eof) stream.push(null)\n    token.previous = childToken\n    if (childToken) childToken.next = token\n    childToken = token\n    childFlow.defineSkip(token.start)\n    childFlow.write(stream)\n\n    // Alright, so we just added a lazy line:\n    //\n    // ```markdown\n    // > a\n    // b.\n    //\n    // Or:\n    //\n    // > ~~~c\n    // d\n    //\n    // Or:\n    //\n    // > | e |\n    // f\n    // ```\n    //\n    // The construct in the second example (fenced code) does not accept lazy\n    // lines, so it marked itself as done at the end of its first line, and\n    // then the content construct parses `d`.\n    // Most constructs in markdown match on the first line: if the first line\n    // forms a construct, a non-lazy line can’t “unmake” it.\n    //\n    // The construct in the third example is potentially a GFM table, and\n    // those are *weird*.\n    // It *could* be a table, from the first line, if the following line\n    // matches a condition.\n    // In this case, that second line is lazy, which “unmakes” the first line\n    // and turns the whole into one content block.\n    //\n    // We’ve now parsed the non-lazy and the lazy line, and can figure out\n    // whether the lazy line started a new flow block.\n    // If it did, we exit the current containers between the two flow blocks.\n    if (self.parser.lazy[token.start.line]) {\n      let index = childFlow.events.length\n      while (index--) {\n        if (\n          // The token starts before the line ending…\n          childFlow.events[index][1].start.offset < lineStartOffset &&\n          // …and either is not ended yet…\n          (!childFlow.events[index][1].end ||\n            // …or ends after it.\n            childFlow.events[index][1].end.offset > lineStartOffset)\n        ) {\n          // Exit: there’s still something open, which means it’s a lazy line\n          // part of something.\n          return\n        }\n      }\n\n      // Note: this algorithm for moving events around is similar to the\n      // algorithm when closing flow in `documentContinue`.\n      const indexBeforeExits = self.events.length\n      let indexBeforeFlow = indexBeforeExits\n      /** @type {boolean | undefined} */\n      let seen\n      /** @type {Point | undefined} */\n      let point\n\n      // Find the previous chunk (the one before the lazy line).\n      while (indexBeforeFlow--) {\n        if (\n          self.events[indexBeforeFlow][0] === 'exit' &&\n          self.events[indexBeforeFlow][1].type === 'chunkFlow'\n        ) {\n          if (seen) {\n            point = self.events[indexBeforeFlow][1].end\n            break\n          }\n          seen = true\n        }\n      }\n      exitContainers(continued)\n\n      // Fix positions.\n      index = indexBeforeExits\n      while (index < self.events.length) {\n        self.events[index][1].end = Object.assign({}, point)\n        index++\n      }\n\n      // Inject the exits earlier (they’re still also at the end).\n      splice(\n        self.events,\n        indexBeforeFlow + 1,\n        0,\n        self.events.slice(indexBeforeExits)\n      )\n\n      // Discard the duplicate exits.\n      self.events.length = index\n    }\n  }\n\n  /**\n   * @param {number} size\n   * @returns {undefined}\n   */\n  function exitContainers(size) {\n    let index = stack.length\n\n    // Exit open containers.\n    while (index-- > size) {\n      const entry = stack[index]\n      self.containerState = entry[1]\n      entry[0].exit.call(self, effects)\n    }\n    stack.length = size\n  }\n  function closeFlow() {\n    childFlow.write([null])\n    childToken = undefined\n    childFlow = undefined\n    self.containerState._closeFlow = undefined\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeContainer(effects, ok, nok) {\n  // Always populated by defaults.\n\n  return factorySpace(\n    effects,\n    effects.attempt(this.parser.constructs.document, ok, nok),\n    'linePrefix',\n    this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4\n  )\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const blankLine = {\n  tokenize: tokenizeBlankLine,\n  partial: true\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLine(effects, ok, nok) {\n  return start;\n\n  /**\n   * Start of blank line.\n   *\n   * > 👉 **Note**: `␠` represents a space character.\n   *\n   * ```markdown\n   * > | ␠␠␊\n   *     ^\n   * > | ␊\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    return markdownSpace(code) ? factorySpace(effects, after, \"linePrefix\")(code) : after(code);\n  }\n\n  /**\n   * At eof/eol, after optional whitespace.\n   *\n   * > 👉 **Note**: `␠` represents a space character.\n   *\n   * ```markdown\n   * > | ␠␠␊\n   *       ^\n   * > | ␊\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return code === null || markdownLineEnding(code) ? ok(code) : nok(code);\n  }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { subtokenize } from 'micromark-util-subtokenize';\n/**\n * No name because it must not be turned off.\n * @type {Construct}\n */\nexport const content = {\n  tokenize: tokenizeContent,\n  resolve: resolveContent\n};\n\n/** @type {Construct} */\nconst continuationConstruct = {\n  tokenize: tokenizeContinuation,\n  partial: true\n};\n\n/**\n * Content is transparent: it’s parsed right now. That way, definitions are also\n * parsed right now: before text in paragraphs (specifically, media) are parsed.\n *\n * @type {Resolver}\n */\nfunction resolveContent(events) {\n  subtokenize(events);\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeContent(effects, ok) {\n  /** @type {Token | undefined} */\n  let previous;\n  return chunkStart;\n\n  /**\n   * Before a content chunk.\n   *\n   * ```markdown\n   * > | abc\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function chunkStart(code) {\n    effects.enter(\"content\");\n    previous = effects.enter(\"chunkContent\", {\n      contentType: \"content\"\n    });\n    return chunkInside(code);\n  }\n\n  /**\n   * In a content chunk.\n   *\n   * ```markdown\n   * > | abc\n   *     ^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function chunkInside(code) {\n    if (code === null) {\n      return contentEnd(code);\n    }\n\n    // To do: in `markdown-rs`, each line is parsed on its own, and everything\n    // is stitched together resolving.\n    if (markdownLineEnding(code)) {\n      return effects.check(continuationConstruct, contentContinue, contentEnd)(code);\n    }\n\n    // Data.\n    effects.consume(code);\n    return chunkInside;\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function contentEnd(code) {\n    effects.exit(\"chunkContent\");\n    effects.exit(\"content\");\n    return ok(code);\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function contentContinue(code) {\n    effects.consume(code);\n    effects.exit(\"chunkContent\");\n    previous.next = effects.enter(\"chunkContent\", {\n      contentType: \"content\",\n      previous\n    });\n    previous = previous.next;\n    return chunkInside;\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeContinuation(effects, ok, nok) {\n  const self = this;\n  return startLookahead;\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function startLookahead(code) {\n    effects.exit(\"chunkContent\");\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return factorySpace(effects, prefixed, \"linePrefix\");\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function prefixed(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return nok(code);\n    }\n\n    // Always populated by defaults.\n\n    const tail = self.events[self.events.length - 1];\n    if (!self.parser.constructs.disable.null.includes('codeIndented') && tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4) {\n      return ok(code);\n    }\n    return effects.interrupt(self.parser.constructs.flow, nok, ok)(code);\n  }\n}","/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\nimport {blankLine, content} from 'micromark-core-commonmark'\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {InitialConstruct} */\nexport const flow = {\n  tokenize: initializeFlow\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\nfunction initializeFlow(effects) {\n  const self = this\n  const initial = effects.attempt(\n    // Try to parse a blank line.\n    blankLine,\n    atBlankEnding,\n    // Try to parse initial flow (essentially, only code).\n    effects.attempt(\n      this.parser.constructs.flowInitial,\n      afterConstruct,\n      factorySpace(\n        effects,\n        effects.attempt(\n          this.parser.constructs.flow,\n          afterConstruct,\n          effects.attempt(content, afterConstruct)\n        ),\n        'linePrefix'\n      )\n    )\n  )\n  return initial\n\n  /** @type {State} */\n  function atBlankEnding(code) {\n    if (code === null) {\n      effects.consume(code)\n      return\n    }\n    effects.enter('lineEndingBlank')\n    effects.consume(code)\n    effects.exit('lineEndingBlank')\n    self.currentConstruct = undefined\n    return initial\n  }\n\n  /** @type {State} */\n  function afterConstruct(code) {\n    if (code === null) {\n      effects.consume(code)\n      return\n    }\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    self.currentConstruct = undefined\n    return initial\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\nexport const resolver = {\n  resolveAll: createResolver()\n}\nexport const string = initializeFactory('string')\nexport const text = initializeFactory('text')\n\n/**\n * @param {'string' | 'text'} field\n * @returns {InitialConstruct}\n */\nfunction initializeFactory(field) {\n  return {\n    tokenize: initializeText,\n    resolveAll: createResolver(\n      field === 'text' ? resolveAllLineSuffixes : undefined\n    )\n  }\n\n  /**\n   * @this {TokenizeContext}\n   * @type {Initializer}\n   */\n  function initializeText(effects) {\n    const self = this\n    const constructs = this.parser.constructs[field]\n    const text = effects.attempt(constructs, start, notText)\n    return start\n\n    /** @type {State} */\n    function start(code) {\n      return atBreak(code) ? text(code) : notText(code)\n    }\n\n    /** @type {State} */\n    function notText(code) {\n      if (code === null) {\n        effects.consume(code)\n        return\n      }\n      effects.enter('data')\n      effects.consume(code)\n      return data\n    }\n\n    /** @type {State} */\n    function data(code) {\n      if (atBreak(code)) {\n        effects.exit('data')\n        return text(code)\n      }\n\n      // Data.\n      effects.consume(code)\n      return data\n    }\n\n    /**\n     * @param {Code} code\n     * @returns {boolean}\n     */\n    function atBreak(code) {\n      if (code === null) {\n        return true\n      }\n      const list = constructs[code]\n      let index = -1\n      if (list) {\n        // Always populated by defaults.\n\n        while (++index < list.length) {\n          const item = list[index]\n          if (!item.previous || item.previous.call(self, self.previous)) {\n            return true\n          }\n        }\n      }\n      return false\n    }\n  }\n}\n\n/**\n * @param {Resolver | undefined} [extraResolver]\n * @returns {Resolver}\n */\nfunction createResolver(extraResolver) {\n  return resolveAllText\n\n  /** @type {Resolver} */\n  function resolveAllText(events, context) {\n    let index = -1\n    /** @type {number | undefined} */\n    let enter\n\n    // A rather boring computation (to merge adjacent `data` events) which\n    // improves mm performance by 29%.\n    while (++index <= events.length) {\n      if (enter === undefined) {\n        if (events[index] && events[index][1].type === 'data') {\n          enter = index\n          index++\n        }\n      } else if (!events[index] || events[index][1].type !== 'data') {\n        // Don’t do anything if there is one data token.\n        if (index !== enter + 2) {\n          events[enter][1].end = events[index - 1][1].end\n          events.splice(enter + 2, index - enter - 2)\n          index = enter + 2\n        }\n        enter = undefined\n      }\n    }\n    return extraResolver ? extraResolver(events, context) : events\n  }\n}\n\n/**\n * A rather ugly set of instructions which again looks at chunks in the input\n * stream.\n * The reason to do this here is that it is *much* faster to parse in reverse.\n * And that we can’t hook into `null` to split the line suffix before an EOF.\n * To do: figure out if we can make this into a clean utility, or even in core.\n * As it will be useful for GFMs literal autolink extension (and maybe even\n * tables?)\n *\n * @type {Resolver}\n */\nfunction resolveAllLineSuffixes(events, context) {\n  let eventIndex = 0 // Skip first.\n\n  while (++eventIndex <= events.length) {\n    if (\n      (eventIndex === events.length ||\n        events[eventIndex][1].type === 'lineEnding') &&\n      events[eventIndex - 1][1].type === 'data'\n    ) {\n      const data = events[eventIndex - 1][1]\n      const chunks = context.sliceStream(data)\n      let index = chunks.length\n      let bufferIndex = -1\n      let size = 0\n      /** @type {boolean | undefined} */\n      let tabs\n      while (index--) {\n        const chunk = chunks[index]\n        if (typeof chunk === 'string') {\n          bufferIndex = chunk.length\n          while (chunk.charCodeAt(bufferIndex - 1) === 32) {\n            size++\n            bufferIndex--\n          }\n          if (bufferIndex) break\n          bufferIndex = -1\n        }\n        // Number\n        else if (chunk === -2) {\n          tabs = true\n          size++\n        } else if (chunk === -1) {\n          // Empty\n        } else {\n          // Replacement character, exit.\n          index++\n          break\n        }\n      }\n      if (size) {\n        const token = {\n          type:\n            eventIndex === events.length || tabs || size < 2\n              ? 'lineSuffix'\n              : 'hardBreakTrailing',\n          start: {\n            line: data.end.line,\n            column: data.end.column - size,\n            offset: data.end.offset - size,\n            _index: data.start._index + index,\n            _bufferIndex: index\n              ? bufferIndex\n              : data.start._bufferIndex + bufferIndex\n          },\n          end: Object.assign({}, data.end)\n        }\n        data.end = Object.assign({}, token.start)\n        if (data.start.offset === data.end.offset) {\n          Object.assign(data, token)\n        } else {\n          events.splice(\n            eventIndex,\n            0,\n            ['enter', token, context],\n            ['exit', token, context]\n          )\n          eventIndex += 2\n        }\n      }\n      eventIndex++\n    }\n  }\n  return events\n}\n","/**\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\n/**\n * Call all `resolveAll`s.\n *\n * @param {Array<{resolveAll?: Resolver | undefined}>} constructs\n *   List of constructs, optionally with `resolveAll`s.\n * @param {Array<Event>} events\n *   List of events.\n * @param {TokenizeContext} context\n *   Context used by `tokenize`.\n * @returns {Array<Event>}\n *   Changed events.\n */\nexport function resolveAll(constructs, events, context) {\n  /** @type {Array<Resolver>} */\n  const called = []\n  let index = -1\n\n  while (++index < constructs.length) {\n    const resolve = constructs[index].resolveAll\n\n    if (resolve && !called.includes(resolve)) {\n      events = resolve(events, context)\n      called.push(resolve)\n    }\n  }\n\n  return events\n}\n","/**\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').ParseContext} ParseContext\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenType} TokenType\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\n/**\n * @callback Restore\n * @returns {undefined}\n *\n * @typedef Info\n * @property {Restore} restore\n * @property {number} from\n *\n * @callback ReturnHandle\n *   Handle a successful run.\n * @param {Construct} construct\n * @param {Info} info\n * @returns {undefined}\n */\n\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {push, splice} from 'micromark-util-chunked'\nimport {resolveAll} from 'micromark-util-resolve-all'\n/**\n * Create a tokenizer.\n * Tokenizers deal with one type of data (e.g., containers, flow, text).\n * The parser is the object dealing with it all.\n * `initialize` works like other constructs, except that only its `tokenize`\n * function is used, in which case it doesn’t receive an `ok` or `nok`.\n * `from` can be given to set the point before the first character, although\n * when further lines are indented, they must be set with `defineSkip`.\n *\n * @param {ParseContext} parser\n * @param {InitialConstruct} initialize\n * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from]\n * @returns {TokenizeContext}\n */\nexport function createTokenizer(parser, initialize, from) {\n  /** @type {Point} */\n  let point = Object.assign(\n    from\n      ? Object.assign({}, from)\n      : {\n          line: 1,\n          column: 1,\n          offset: 0\n        },\n    {\n      _index: 0,\n      _bufferIndex: -1\n    }\n  )\n  /** @type {Record<string, number>} */\n  const columnStart = {}\n  /** @type {Array<Construct>} */\n  const resolveAllConstructs = []\n  /** @type {Array<Chunk>} */\n  let chunks = []\n  /** @type {Array<Token>} */\n  let stack = []\n  /** @type {boolean | undefined} */\n  let consumed = true\n\n  /**\n   * Tools used for tokenizing.\n   *\n   * @type {Effects}\n   */\n  const effects = {\n    consume,\n    enter,\n    exit,\n    attempt: constructFactory(onsuccessfulconstruct),\n    check: constructFactory(onsuccessfulcheck),\n    interrupt: constructFactory(onsuccessfulcheck, {\n      interrupt: true\n    })\n  }\n\n  /**\n   * State and tools for resolving and serializing.\n   *\n   * @type {TokenizeContext}\n   */\n  const context = {\n    previous: null,\n    code: null,\n    containerState: {},\n    events: [],\n    parser,\n    sliceStream,\n    sliceSerialize,\n    now,\n    defineSkip,\n    write\n  }\n\n  /**\n   * The state function.\n   *\n   * @type {State | undefined}\n   */\n  let state = initialize.tokenize.call(context, effects)\n\n  /**\n   * Track which character we expect to be consumed, to catch bugs.\n   *\n   * @type {Code}\n   */\n  let expectedCode\n  if (initialize.resolveAll) {\n    resolveAllConstructs.push(initialize)\n  }\n  return context\n\n  /** @type {TokenizeContext['write']} */\n  function write(slice) {\n    chunks = push(chunks, slice)\n    main()\n\n    // Exit if we’re not done, resolve might change stuff.\n    if (chunks[chunks.length - 1] !== null) {\n      return []\n    }\n    addResult(initialize, 0)\n\n    // Otherwise, resolve, and exit.\n    context.events = resolveAll(resolveAllConstructs, context.events, context)\n    return context.events\n  }\n\n  //\n  // Tools.\n  //\n\n  /** @type {TokenizeContext['sliceSerialize']} */\n  function sliceSerialize(token, expandTabs) {\n    return serializeChunks(sliceStream(token), expandTabs)\n  }\n\n  /** @type {TokenizeContext['sliceStream']} */\n  function sliceStream(token) {\n    return sliceChunks(chunks, token)\n  }\n\n  /** @type {TokenizeContext['now']} */\n  function now() {\n    // This is a hot path, so we clone manually instead of `Object.assign({}, point)`\n    const {line, column, offset, _index, _bufferIndex} = point\n    return {\n      line,\n      column,\n      offset,\n      _index,\n      _bufferIndex\n    }\n  }\n\n  /** @type {TokenizeContext['defineSkip']} */\n  function defineSkip(value) {\n    columnStart[value.line] = value.column\n    accountForPotentialSkip()\n  }\n\n  //\n  // State management.\n  //\n\n  /**\n   * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by\n   * `consume`).\n   * Here is where we walk through the chunks, which either include strings of\n   * several characters, or numerical character codes.\n   * The reason to do this in a loop instead of a call is so the stack can\n   * drain.\n   *\n   * @returns {undefined}\n   */\n  function main() {\n    /** @type {number} */\n    let chunkIndex\n    while (point._index < chunks.length) {\n      const chunk = chunks[point._index]\n\n      // If we’re in a buffer chunk, loop through it.\n      if (typeof chunk === 'string') {\n        chunkIndex = point._index\n        if (point._bufferIndex < 0) {\n          point._bufferIndex = 0\n        }\n        while (\n          point._index === chunkIndex &&\n          point._bufferIndex < chunk.length\n        ) {\n          go(chunk.charCodeAt(point._bufferIndex))\n        }\n      } else {\n        go(chunk)\n      }\n    }\n  }\n\n  /**\n   * Deal with one code.\n   *\n   * @param {Code} code\n   * @returns {undefined}\n   */\n  function go(code) {\n    consumed = undefined\n    expectedCode = code\n    state = state(code)\n  }\n\n  /** @type {Effects['consume']} */\n  function consume(code) {\n    if (markdownLineEnding(code)) {\n      point.line++\n      point.column = 1\n      point.offset += code === -3 ? 2 : 1\n      accountForPotentialSkip()\n    } else if (code !== -1) {\n      point.column++\n      point.offset++\n    }\n\n    // Not in a string chunk.\n    if (point._bufferIndex < 0) {\n      point._index++\n    } else {\n      point._bufferIndex++\n\n      // At end of string chunk.\n      // @ts-expect-error Points w/ non-negative `_bufferIndex` reference\n      // strings.\n      if (point._bufferIndex === chunks[point._index].length) {\n        point._bufferIndex = -1\n        point._index++\n      }\n    }\n\n    // Expose the previous character.\n    context.previous = code\n\n    // Mark as consumed.\n    consumed = true\n  }\n\n  /** @type {Effects['enter']} */\n  function enter(type, fields) {\n    /** @type {Token} */\n    // @ts-expect-error Patch instead of assign required fields to help GC.\n    const token = fields || {}\n    token.type = type\n    token.start = now()\n    context.events.push(['enter', token, context])\n    stack.push(token)\n    return token\n  }\n\n  /** @type {Effects['exit']} */\n  function exit(type) {\n    const token = stack.pop()\n    token.end = now()\n    context.events.push(['exit', token, context])\n    return token\n  }\n\n  /**\n   * Use results.\n   *\n   * @type {ReturnHandle}\n   */\n  function onsuccessfulconstruct(construct, info) {\n    addResult(construct, info.from)\n  }\n\n  /**\n   * Discard results.\n   *\n   * @type {ReturnHandle}\n   */\n  function onsuccessfulcheck(_, info) {\n    info.restore()\n  }\n\n  /**\n   * Factory to attempt/check/interrupt.\n   *\n   * @param {ReturnHandle} onreturn\n   * @param {{interrupt?: boolean | undefined} | undefined} [fields]\n   */\n  function constructFactory(onreturn, fields) {\n    return hook\n\n    /**\n     * Handle either an object mapping codes to constructs, a list of\n     * constructs, or a single construct.\n     *\n     * @param {Array<Construct> | Construct | ConstructRecord} constructs\n     * @param {State} returnState\n     * @param {State | undefined} [bogusState]\n     * @returns {State}\n     */\n    function hook(constructs, returnState, bogusState) {\n      /** @type {Array<Construct>} */\n      let listOfConstructs\n      /** @type {number} */\n      let constructIndex\n      /** @type {Construct} */\n      let currentConstruct\n      /** @type {Info} */\n      let info\n      return Array.isArray(constructs) /* c8 ignore next 1 */\n        ? handleListOfConstructs(constructs)\n        : 'tokenize' in constructs\n        ? // @ts-expect-error Looks like a construct.\n          handleListOfConstructs([constructs])\n        : handleMapOfConstructs(constructs)\n\n      /**\n       * Handle a list of construct.\n       *\n       * @param {ConstructRecord} map\n       * @returns {State}\n       */\n      function handleMapOfConstructs(map) {\n        return start\n\n        /** @type {State} */\n        function start(code) {\n          const def = code !== null && map[code]\n          const all = code !== null && map.null\n          const list = [\n            // To do: add more extension tests.\n            /* c8 ignore next 2 */\n            ...(Array.isArray(def) ? def : def ? [def] : []),\n            ...(Array.isArray(all) ? all : all ? [all] : [])\n          ]\n          return handleListOfConstructs(list)(code)\n        }\n      }\n\n      /**\n       * Handle a list of construct.\n       *\n       * @param {Array<Construct>} list\n       * @returns {State}\n       */\n      function handleListOfConstructs(list) {\n        listOfConstructs = list\n        constructIndex = 0\n        if (list.length === 0) {\n          return bogusState\n        }\n        return handleConstruct(list[constructIndex])\n      }\n\n      /**\n       * Handle a single construct.\n       *\n       * @param {Construct} construct\n       * @returns {State}\n       */\n      function handleConstruct(construct) {\n        return start\n\n        /** @type {State} */\n        function start(code) {\n          // To do: not needed to store if there is no bogus state, probably?\n          // Currently doesn’t work because `inspect` in document does a check\n          // w/o a bogus, which doesn’t make sense. But it does seem to help perf\n          // by not storing.\n          info = store()\n          currentConstruct = construct\n          if (!construct.partial) {\n            context.currentConstruct = construct\n          }\n\n          // Always populated by defaults.\n\n          if (\n            construct.name &&\n            context.parser.constructs.disable.null.includes(construct.name)\n          ) {\n            return nok(code)\n          }\n          return construct.tokenize.call(\n            // If we do have fields, create an object w/ `context` as its\n            // prototype.\n            // This allows a “live binding”, which is needed for `interrupt`.\n            fields ? Object.assign(Object.create(context), fields) : context,\n            effects,\n            ok,\n            nok\n          )(code)\n        }\n      }\n\n      /** @type {State} */\n      function ok(code) {\n        consumed = true\n        onreturn(currentConstruct, info)\n        return returnState\n      }\n\n      /** @type {State} */\n      function nok(code) {\n        consumed = true\n        info.restore()\n        if (++constructIndex < listOfConstructs.length) {\n          return handleConstruct(listOfConstructs[constructIndex])\n        }\n        return bogusState\n      }\n    }\n  }\n\n  /**\n   * @param {Construct} construct\n   * @param {number} from\n   * @returns {undefined}\n   */\n  function addResult(construct, from) {\n    if (construct.resolveAll && !resolveAllConstructs.includes(construct)) {\n      resolveAllConstructs.push(construct)\n    }\n    if (construct.resolve) {\n      splice(\n        context.events,\n        from,\n        context.events.length - from,\n        construct.resolve(context.events.slice(from), context)\n      )\n    }\n    if (construct.resolveTo) {\n      context.events = construct.resolveTo(context.events, context)\n    }\n  }\n\n  /**\n   * Store state.\n   *\n   * @returns {Info}\n   */\n  function store() {\n    const startPoint = now()\n    const startPrevious = context.previous\n    const startCurrentConstruct = context.currentConstruct\n    const startEventsIndex = context.events.length\n    const startStack = Array.from(stack)\n    return {\n      restore,\n      from: startEventsIndex\n    }\n\n    /**\n     * Restore state.\n     *\n     * @returns {undefined}\n     */\n    function restore() {\n      point = startPoint\n      context.previous = startPrevious\n      context.currentConstruct = startCurrentConstruct\n      context.events.length = startEventsIndex\n      stack = startStack\n      accountForPotentialSkip()\n    }\n  }\n\n  /**\n   * Move the current point a bit forward in the line when it’s on a column\n   * skip.\n   *\n   * @returns {undefined}\n   */\n  function accountForPotentialSkip() {\n    if (point.line in columnStart && point.column < 2) {\n      point.column = columnStart[point.line]\n      point.offset += columnStart[point.line] - 1\n    }\n  }\n}\n\n/**\n * Get the chunks from a slice of chunks in the range of a token.\n *\n * @param {Array<Chunk>} chunks\n * @param {Pick<Token, 'end' | 'start'>} token\n * @returns {Array<Chunk>}\n */\nfunction sliceChunks(chunks, token) {\n  const startIndex = token.start._index\n  const startBufferIndex = token.start._bufferIndex\n  const endIndex = token.end._index\n  const endBufferIndex = token.end._bufferIndex\n  /** @type {Array<Chunk>} */\n  let view\n  if (startIndex === endIndex) {\n    // @ts-expect-error `_bufferIndex` is used on string chunks.\n    view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)]\n  } else {\n    view = chunks.slice(startIndex, endIndex)\n    if (startBufferIndex > -1) {\n      const head = view[0]\n      if (typeof head === 'string') {\n        view[0] = head.slice(startBufferIndex)\n      } else {\n        view.shift()\n      }\n    }\n    if (endBufferIndex > 0) {\n      // @ts-expect-error `_bufferIndex` is used on string chunks.\n      view.push(chunks[endIndex].slice(0, endBufferIndex))\n    }\n  }\n  return view\n}\n\n/**\n * Get the string value of a slice of chunks.\n *\n * @param {Array<Chunk>} chunks\n * @param {boolean | undefined} [expandTabs=false]\n * @returns {string}\n */\nfunction serializeChunks(chunks, expandTabs) {\n  let index = -1\n  /** @type {Array<string>} */\n  const result = []\n  /** @type {boolean | undefined} */\n  let atTab\n  while (++index < chunks.length) {\n    const chunk = chunks[index]\n    /** @type {string} */\n    let value\n    if (typeof chunk === 'string') {\n      value = chunk\n    } else\n      switch (chunk) {\n        case -5: {\n          value = '\\r'\n          break\n        }\n        case -4: {\n          value = '\\n'\n          break\n        }\n        case -3: {\n          value = '\\r' + '\\n'\n          break\n        }\n        case -2: {\n          value = expandTabs ? ' ' : '\\t'\n          break\n        }\n        case -1: {\n          if (!expandTabs && atTab) continue\n          value = ' '\n          break\n        }\n        default: {\n          // Currently only replacement character.\n          value = String.fromCharCode(chunk)\n        }\n      }\n    atTab = chunk === -2\n    result.push(value)\n  }\n  return result.join('')\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const thematicBreak = {\n  name: 'thematicBreak',\n  tokenize: tokenizeThematicBreak\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeThematicBreak(effects, ok, nok) {\n  let size = 0;\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Start of thematic break.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"thematicBreak\");\n    // To do: parse indent like `markdown-rs`.\n    return before(code);\n  }\n\n  /**\n   * After optional whitespace, at marker.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    marker = code;\n    return atBreak(code);\n  }\n\n  /**\n   * After something, before something else.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === marker) {\n      effects.enter(\"thematicBreakSequence\");\n      return sequence(code);\n    }\n    if (size >= 3 && (code === null || markdownLineEnding(code))) {\n      effects.exit(\"thematicBreak\");\n      return ok(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In sequence.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequence(code) {\n    if (code === marker) {\n      effects.consume(code);\n      size++;\n      return sequence;\n    }\n    effects.exit(\"thematicBreakSequence\");\n    return markdownSpace(code) ? factorySpace(effects, atBreak, \"whitespace\")(code) : atBreak(code);\n  }\n}","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ContainerState} ContainerState\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiDigit, markdownSpace } from 'micromark-util-character';\nimport { blankLine } from './blank-line.js';\nimport { thematicBreak } from './thematic-break.js';\n\n/** @type {Construct} */\nexport const list = {\n  name: 'list',\n  tokenize: tokenizeListStart,\n  continuation: {\n    tokenize: tokenizeListContinuation\n  },\n  exit: tokenizeListEnd\n};\n\n/** @type {Construct} */\nconst listItemPrefixWhitespaceConstruct = {\n  tokenize: tokenizeListItemPrefixWhitespace,\n  partial: true\n};\n\n/** @type {Construct} */\nconst indentConstruct = {\n  tokenize: tokenizeIndent,\n  partial: true\n};\n\n// To do: `markdown-rs` parses list items on their own and later stitches them\n// together.\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeListStart(effects, ok, nok) {\n  const self = this;\n  const tail = self.events[self.events.length - 1];\n  let initialSize = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 0;\n  let size = 0;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    const kind = self.containerState.type || (code === 42 || code === 43 || code === 45 ? \"listUnordered\" : \"listOrdered\");\n    if (kind === \"listUnordered\" ? !self.containerState.marker || code === self.containerState.marker : asciiDigit(code)) {\n      if (!self.containerState.type) {\n        self.containerState.type = kind;\n        effects.enter(kind, {\n          _container: true\n        });\n      }\n      if (kind === \"listUnordered\") {\n        effects.enter(\"listItemPrefix\");\n        return code === 42 || code === 45 ? effects.check(thematicBreak, nok, atMarker)(code) : atMarker(code);\n      }\n      if (!self.interrupt || code === 49) {\n        effects.enter(\"listItemPrefix\");\n        effects.enter(\"listItemValue\");\n        return inside(code);\n      }\n    }\n    return nok(code);\n  }\n\n  /** @type {State} */\n  function inside(code) {\n    if (asciiDigit(code) && ++size < 10) {\n      effects.consume(code);\n      return inside;\n    }\n    if ((!self.interrupt || size < 2) && (self.containerState.marker ? code === self.containerState.marker : code === 41 || code === 46)) {\n      effects.exit(\"listItemValue\");\n      return atMarker(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * @type {State}\n   **/\n  function atMarker(code) {\n    effects.enter(\"listItemMarker\");\n    effects.consume(code);\n    effects.exit(\"listItemMarker\");\n    self.containerState.marker = self.containerState.marker || code;\n    return effects.check(blankLine,\n    // Can’t be empty when interrupting.\n    self.interrupt ? nok : onBlank, effects.attempt(listItemPrefixWhitespaceConstruct, endOfPrefix, otherPrefix));\n  }\n\n  /** @type {State} */\n  function onBlank(code) {\n    self.containerState.initialBlankLine = true;\n    initialSize++;\n    return endOfPrefix(code);\n  }\n\n  /** @type {State} */\n  function otherPrefix(code) {\n    if (markdownSpace(code)) {\n      effects.enter(\"listItemPrefixWhitespace\");\n      effects.consume(code);\n      effects.exit(\"listItemPrefixWhitespace\");\n      return endOfPrefix;\n    }\n    return nok(code);\n  }\n\n  /** @type {State} */\n  function endOfPrefix(code) {\n    self.containerState.size = initialSize + self.sliceSerialize(effects.exit(\"listItemPrefix\"), true).length;\n    return ok(code);\n  }\n}\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeListContinuation(effects, ok, nok) {\n  const self = this;\n  self.containerState._closeFlow = undefined;\n  return effects.check(blankLine, onBlank, notBlank);\n\n  /** @type {State} */\n  function onBlank(code) {\n    self.containerState.furtherBlankLines = self.containerState.furtherBlankLines || self.containerState.initialBlankLine;\n\n    // We have a blank line.\n    // Still, try to consume at most the items size.\n    return factorySpace(effects, ok, \"listItemIndent\", self.containerState.size + 1)(code);\n  }\n\n  /** @type {State} */\n  function notBlank(code) {\n    if (self.containerState.furtherBlankLines || !markdownSpace(code)) {\n      self.containerState.furtherBlankLines = undefined;\n      self.containerState.initialBlankLine = undefined;\n      return notInCurrentItem(code);\n    }\n    self.containerState.furtherBlankLines = undefined;\n    self.containerState.initialBlankLine = undefined;\n    return effects.attempt(indentConstruct, ok, notInCurrentItem)(code);\n  }\n\n  /** @type {State} */\n  function notInCurrentItem(code) {\n    // While we do continue, we signal that the flow should be closed.\n    self.containerState._closeFlow = true;\n    // As we’re closing flow, we’re no longer interrupting.\n    self.interrupt = undefined;\n    // Always populated by defaults.\n\n    return factorySpace(effects, effects.attempt(list, ok, nok), \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n  }\n}\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n  const self = this;\n  return factorySpace(effects, afterPrefix, \"listItemIndent\", self.containerState.size + 1);\n\n  /** @type {State} */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return tail && tail[1].type === \"listItemIndent\" && tail[2].sliceSerialize(tail[1], true).length === self.containerState.size ? ok(code) : nok(code);\n  }\n}\n\n/**\n * @type {Exiter}\n * @this {TokenizeContext}\n */\nfunction tokenizeListEnd(effects) {\n  effects.exit(this.containerState.type);\n}\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeListItemPrefixWhitespace(effects, ok, nok) {\n  const self = this;\n\n  // Always populated by defaults.\n\n  return factorySpace(effects, afterPrefix, \"listItemPrefixWhitespace\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + 1);\n\n  /** @type {State} */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return !markdownSpace(code) && tail && tail[1].type === \"listItemPrefixWhitespace\" ? ok(code) : nok(code);\n  }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const blockQuote = {\n  name: 'blockQuote',\n  tokenize: tokenizeBlockQuoteStart,\n  continuation: {\n    tokenize: tokenizeBlockQuoteContinuation\n  },\n  exit\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteStart(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of block quote.\n   *\n   * ```markdown\n   * > | > a\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 62) {\n      const state = self.containerState;\n      if (!state.open) {\n        effects.enter(\"blockQuote\", {\n          _container: true\n        });\n        state.open = true;\n      }\n      effects.enter(\"blockQuotePrefix\");\n      effects.enter(\"blockQuoteMarker\");\n      effects.consume(code);\n      effects.exit(\"blockQuoteMarker\");\n      return after;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `>`, before optional whitespace.\n   *\n   * ```markdown\n   * > | > a\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    if (markdownSpace(code)) {\n      effects.enter(\"blockQuotePrefixWhitespace\");\n      effects.consume(code);\n      effects.exit(\"blockQuotePrefixWhitespace\");\n      effects.exit(\"blockQuotePrefix\");\n      return ok;\n    }\n    effects.exit(\"blockQuotePrefix\");\n    return ok(code);\n  }\n}\n\n/**\n * Start of block quote continuation.\n *\n * ```markdown\n *   | > a\n * > | > b\n *     ^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteContinuation(effects, ok, nok) {\n  const self = this;\n  return contStart;\n\n  /**\n   * Start of block quote continuation.\n   *\n   * Also used to parse the first block quote opening.\n   *\n   * ```markdown\n   *   | > a\n   * > | > b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function contStart(code) {\n    if (markdownSpace(code)) {\n      // Always populated by defaults.\n\n      return factorySpace(effects, contBefore, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n    }\n    return contBefore(code);\n  }\n\n  /**\n   * At `>`, after optional whitespace.\n   *\n   * Also used to parse the first block quote opening.\n   *\n   * ```markdown\n   *   | > a\n   * > | > b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function contBefore(code) {\n    return effects.attempt(blockQuote, ok, nok)(code);\n  }\n}\n\n/** @type {Exiter} */\nfunction exit(effects) {\n  effects.exit(\"blockQuote\");\n}","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {\n  asciiControl,\n  markdownLineEndingOrSpace,\n  markdownLineEnding\n} from 'micromark-util-character'\n/**\n * Parse destinations.\n *\n * ###### Examples\n *\n * ```markdown\n * <a>\n * <a\\>b>\n * <a b>\n * <a)>\n * a\n * a\\)b\n * a(b)c\n * a(b)\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type for whole (`<a>` or `b`).\n * @param {TokenType} literalType\n *   Type when enclosed (`<a>`).\n * @param {TokenType} literalMarkerType\n *   Type for enclosing (`<` and `>`).\n * @param {TokenType} rawType\n *   Type when not enclosed (`b`).\n * @param {TokenType} stringType\n *   Type for the value (`a` or `b`).\n * @param {number | undefined} [max=Infinity]\n *   Depth of nested parens (inclusive).\n * @returns {State}\n *   Start state.\n */ // eslint-disable-next-line max-params\nexport function factoryDestination(\n  effects,\n  ok,\n  nok,\n  type,\n  literalType,\n  literalMarkerType,\n  rawType,\n  stringType,\n  max\n) {\n  const limit = max || Number.POSITIVE_INFINITY\n  let balance = 0\n  return start\n\n  /**\n   * Start of destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *     ^\n   * > | aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 60) {\n      effects.enter(type)\n      effects.enter(literalType)\n      effects.enter(literalMarkerType)\n      effects.consume(code)\n      effects.exit(literalMarkerType)\n      return enclosedBefore\n    }\n\n    // ASCII control, space, closing paren.\n    if (code === null || code === 32 || code === 41 || asciiControl(code)) {\n      return nok(code)\n    }\n    effects.enter(type)\n    effects.enter(rawType)\n    effects.enter(stringType)\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return raw(code)\n  }\n\n  /**\n   * After `<`, at an enclosed destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosedBefore(code) {\n    if (code === 62) {\n      effects.enter(literalMarkerType)\n      effects.consume(code)\n      effects.exit(literalMarkerType)\n      effects.exit(literalType)\n      effects.exit(type)\n      return ok\n    }\n    effects.enter(stringType)\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return enclosed(code)\n  }\n\n  /**\n   * In enclosed destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosed(code) {\n    if (code === 62) {\n      effects.exit('chunkString')\n      effects.exit(stringType)\n      return enclosedBefore(code)\n    }\n    if (code === null || code === 60 || markdownLineEnding(code)) {\n      return nok(code)\n    }\n    effects.consume(code)\n    return code === 92 ? enclosedEscape : enclosed\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | <a\\*a>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosedEscape(code) {\n    if (code === 60 || code === 62 || code === 92) {\n      effects.consume(code)\n      return enclosed\n    }\n    return enclosed(code)\n  }\n\n  /**\n   * In raw destination.\n   *\n   * ```markdown\n   * > | aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function raw(code) {\n    if (\n      !balance &&\n      (code === null || code === 41 || markdownLineEndingOrSpace(code))\n    ) {\n      effects.exit('chunkString')\n      effects.exit(stringType)\n      effects.exit(rawType)\n      effects.exit(type)\n      return ok(code)\n    }\n    if (balance < limit && code === 40) {\n      effects.consume(code)\n      balance++\n      return raw\n    }\n    if (code === 41) {\n      effects.consume(code)\n      balance--\n      return raw\n    }\n\n    // ASCII control (but *not* `\\0`) and space and `(`.\n    // Note: in `markdown-rs`, `\\0` exists in codes, in `micromark-js` it\n    // doesn’t.\n    if (code === null || code === 32 || code === 40 || asciiControl(code)) {\n      return nok(code)\n    }\n    effects.consume(code)\n    return code === 92 ? rawEscape : raw\n  }\n\n  /**\n   * After `\\`, at special character.\n   *\n   * ```markdown\n   * > | a\\*a\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function rawEscape(code) {\n    if (code === 40 || code === 41 || code === 92) {\n      effects.consume(code)\n      return raw\n    }\n    return raw(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/**\n * Parse labels.\n *\n * > 👉 **Note**: labels in markdown are capped at 999 characters in the string.\n *\n * ###### Examples\n *\n * ```markdown\n * [a]\n * [a\n * b]\n * [a\\]b]\n * ```\n *\n * @this {TokenizeContext}\n *   Tokenize context.\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type of the whole label (`[a]`).\n * @param {TokenType} markerType\n *   Type for the markers (`[` and `]`).\n * @param {TokenType} stringType\n *   Type for the identifier (`a`).\n * @returns {State}\n *   Start state.\n */ // eslint-disable-next-line max-params\nexport function factoryLabel(effects, ok, nok, type, markerType, stringType) {\n  const self = this\n  let size = 0\n  /** @type {boolean} */\n  let seen\n  return start\n\n  /**\n   * Start of label.\n   *\n   * ```markdown\n   * > | [a]\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(type)\n    effects.enter(markerType)\n    effects.consume(code)\n    effects.exit(markerType)\n    effects.enter(stringType)\n    return atBreak\n  }\n\n  /**\n   * In label, at something, before something else.\n   *\n   * ```markdown\n   * > | [a]\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (\n      size > 999 ||\n      code === null ||\n      code === 91 ||\n      (code === 93 && !seen) ||\n      // To do: remove in the future once we’ve switched from\n      // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,\n      // which doesn’t need this.\n      // Hidden footnotes hook.\n      /* c8 ignore next 3 */\n      (code === 94 &&\n        !size &&\n        '_hiddenFootnoteSupport' in self.parser.constructs)\n    ) {\n      return nok(code)\n    }\n    if (code === 93) {\n      effects.exit(stringType)\n      effects.enter(markerType)\n      effects.consume(code)\n      effects.exit(markerType)\n      effects.exit(type)\n      return ok\n    }\n\n    // To do: indent? Link chunks and EOLs together?\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return atBreak\n    }\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return labelInside(code)\n  }\n\n  /**\n   * In label, in text.\n   *\n   * ```markdown\n   * > | [a]\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelInside(code) {\n    if (\n      code === null ||\n      code === 91 ||\n      code === 93 ||\n      markdownLineEnding(code) ||\n      size++ > 999\n    ) {\n      effects.exit('chunkString')\n      return atBreak(code)\n    }\n    effects.consume(code)\n    if (!seen) seen = !markdownSpace(code)\n    return code === 92 ? labelEscape : labelInside\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | [a\\*a]\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEscape(code) {\n    if (code === 91 || code === 92 || code === 93) {\n      effects.consume(code)\n      size++\n      return labelInside\n    }\n    return labelInside(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n/**\n * Parse titles.\n *\n * ###### Examples\n *\n * ```markdown\n * \"a\"\n * 'b'\n * (c)\n * \"a\n * b\"\n * 'a\n *     b'\n * (a\\)b)\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type of the whole title (`\"a\"`, `'b'`, `(c)`).\n * @param {TokenType} markerType\n *   Type for the markers (`\"`, `'`, `(`, and `)`).\n * @param {TokenType} stringType\n *   Type for the value (`a`).\n * @returns {State}\n *   Start state.\n */ // eslint-disable-next-line max-params\nexport function factoryTitle(effects, ok, nok, type, markerType, stringType) {\n  /** @type {NonNullable<Code>} */\n  let marker\n  return start\n\n  /**\n   * Start of title.\n   *\n   * ```markdown\n   * > | \"a\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 34 || code === 39 || code === 40) {\n      effects.enter(type)\n      effects.enter(markerType)\n      effects.consume(code)\n      effects.exit(markerType)\n      marker = code === 40 ? 41 : code\n      return begin\n    }\n    return nok(code)\n  }\n\n  /**\n   * After opening marker.\n   *\n   * This is also used at the closing marker.\n   *\n   * ```markdown\n   * > | \"a\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function begin(code) {\n    if (code === marker) {\n      effects.enter(markerType)\n      effects.consume(code)\n      effects.exit(markerType)\n      effects.exit(type)\n      return ok\n    }\n    effects.enter(stringType)\n    return atBreak(code)\n  }\n\n  /**\n   * At something, before something else.\n   *\n   * ```markdown\n   * > | \"a\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === marker) {\n      effects.exit(stringType)\n      return begin(marker)\n    }\n    if (code === null) {\n      return nok(code)\n    }\n\n    // Note: blank lines can’t exist in content.\n    if (markdownLineEnding(code)) {\n      // To do: use `space_or_tab_eol_with_options`, connect.\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return factorySpace(effects, atBreak, 'linePrefix')\n    }\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return inside(code)\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker || code === null || markdownLineEnding(code)) {\n      effects.exit('chunkString')\n      return atBreak(code)\n    }\n    effects.consume(code)\n    return code === 92 ? escape : inside\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | \"a\\*b\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function escape(code) {\n    if (code === marker || code === 92) {\n      effects.consume(code)\n      return inside\n    }\n    return inside(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * *   line endings or spaces in markdown are often optional, in which case this\n *     factory can be used and `ok` will be switched to whether spaces were found\n *     or not\n * *   one line ending or space can be detected with\n *     `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace`\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @returns {State}\n *   Start state.\n */\nexport function factoryWhitespace(effects, ok) {\n  /** @type {boolean} */\n  let seen\n  return start\n\n  /** @type {State} */\n  function start(code) {\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      seen = true\n      return start\n    }\n    if (markdownSpace(code)) {\n      return factorySpace(\n        effects,\n        start,\n        seen ? 'linePrefix' : 'lineSuffix'\n      )(code)\n    }\n    return ok(code)\n  }\n}\n","/**\n * Normalize an identifier (as found in references, definitions).\n *\n * Collapses markdown whitespace, trim, and then lower- and uppercase.\n *\n * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their\n * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different\n * uppercase character (U+0398 (`Θ`)).\n * So, to get a canonical form, we perform both lower- and uppercase.\n *\n * Using uppercase last makes sure keys will never interact with default\n * prototypal values (such as `constructor`): nothing in the prototype of\n * `Object` is uppercase.\n *\n * @param {string} value\n *   Identifier to normalize.\n * @returns {string}\n *   Normalized identifier.\n */\nexport function normalizeIdentifier(value) {\n  return (\n    value\n      // Collapse markdown whitespace.\n      .replace(/[\\t\\n\\r ]+/g, ' ')\n      // Trim.\n      .replace(/^ | $/g, '')\n      // Some characters are considered “uppercase”, but if their lowercase\n      // counterpart is uppercased will result in a different uppercase\n      // character.\n      // Hence, to get that form, we perform both lower- and uppercase.\n      // Upper case makes sure keys will not interact with default prototypal\n      // methods: no method is uppercase.\n      .toLowerCase()\n      .toUpperCase()\n  )\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factoryDestination } from 'micromark-factory-destination';\nimport { factoryLabel } from 'micromark-factory-label';\nimport { factorySpace } from 'micromark-factory-space';\nimport { factoryTitle } from 'micromark-factory-title';\nimport { factoryWhitespace } from 'micromark-factory-whitespace';\nimport { markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\n/** @type {Construct} */\nexport const definition = {\n  name: 'definition',\n  tokenize: tokenizeDefinition\n};\n\n/** @type {Construct} */\nconst titleBefore = {\n  tokenize: tokenizeTitleBefore,\n  partial: true\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinition(effects, ok, nok) {\n  const self = this;\n  /** @type {string} */\n  let identifier;\n  return start;\n\n  /**\n   * At start of a definition.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // Do not interrupt paragraphs (but do follow definitions).\n    // To do: do `interrupt` the way `markdown-rs` does.\n    // To do: parse whitespace the way `markdown-rs` does.\n    effects.enter(\"definition\");\n    return before(code);\n  }\n\n  /**\n   * After optional whitespace, at `[`.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    // To do: parse whitespace the way `markdown-rs` does.\n\n    return factoryLabel.call(self, effects, labelAfter,\n    // Note: we don’t need to reset the way `markdown-rs` does.\n    nok, \"definitionLabel\", \"definitionLabelMarker\", \"definitionLabelString\")(code);\n  }\n\n  /**\n   * After label.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelAfter(code) {\n    identifier = normalizeIdentifier(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1));\n    if (code === 58) {\n      effects.enter(\"definitionMarker\");\n      effects.consume(code);\n      effects.exit(\"definitionMarker\");\n      return markerAfter;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After marker.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function markerAfter(code) {\n    // Note: whitespace is optional.\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, destinationBefore)(code) : destinationBefore(code);\n  }\n\n  /**\n   * Before destination.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function destinationBefore(code) {\n    return factoryDestination(effects, destinationAfter,\n    // Note: we don’t need to reset the way `markdown-rs` does.\n    nok, \"definitionDestination\", \"definitionDestinationLiteral\", \"definitionDestinationLiteralMarker\", \"definitionDestinationRaw\", \"definitionDestinationString\")(code);\n  }\n\n  /**\n   * After destination.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function destinationAfter(code) {\n    return effects.attempt(titleBefore, after, after)(code);\n  }\n\n  /**\n   * After definition.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return markdownSpace(code) ? factorySpace(effects, afterWhitespace, \"whitespace\")(code) : afterWhitespace(code);\n  }\n\n  /**\n   * After definition, after optional whitespace.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterWhitespace(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"definition\");\n\n      // Note: we don’t care about uniqueness.\n      // It’s likely that that doesn’t happen very frequently.\n      // It is more likely that it wastes precious time.\n      self.parser.defined.push(identifier);\n\n      // To do: `markdown-rs` interrupt.\n      // // You’d be interrupting.\n      // tokenizer.interrupt = true\n      return ok(code);\n    }\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTitleBefore(effects, ok, nok) {\n  return titleBefore;\n\n  /**\n   * After destination, at whitespace.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleBefore(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, beforeMarker)(code) : nok(code);\n  }\n\n  /**\n   * At title.\n   *\n   * ```markdown\n   *   | [a]: b\n   * > | \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeMarker(code) {\n    return factoryTitle(effects, titleAfter, nok, \"definitionTitle\", \"definitionTitleMarker\", \"definitionTitleString\")(code);\n  }\n\n  /**\n   * After title.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleAfter(code) {\n    return markdownSpace(code) ? factorySpace(effects, titleAfterOptionalWhitespace, \"whitespace\")(code) : titleAfterOptionalWhitespace(code);\n  }\n\n  /**\n   * After title, after optional whitespace.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleAfterOptionalWhitespace(code) {\n    return code === null || markdownLineEnding(code) ? ok(code) : nok(code);\n  }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const codeIndented = {\n  name: 'codeIndented',\n  tokenize: tokenizeCodeIndented\n};\n\n/** @type {Construct} */\nconst furtherStart = {\n  tokenize: tokenizeFurtherStart,\n  partial: true\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCodeIndented(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of code (indented).\n   *\n   * > **Parsing note**: it is not needed to check if this first line is a\n   * > filled line (that it has a non-whitespace character), because blank lines\n   * > are parsed already, so we never run into that.\n   *\n   * ```markdown\n   * > |     aaa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: manually check if interrupting like `markdown-rs`.\n\n    effects.enter(\"codeIndented\");\n    // To do: use an improved `space_or_tab` function like `markdown-rs`,\n    // so that we can drop the next state.\n    return factorySpace(effects, afterPrefix, \"linePrefix\", 4 + 1)(code);\n  }\n\n  /**\n   * At start, after 1 or 4 spaces.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4 ? atBreak(code) : nok(code);\n  }\n\n  /**\n   * At a break.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^  ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === null) {\n      return after(code);\n    }\n    if (markdownLineEnding(code)) {\n      return effects.attempt(furtherStart, atBreak, after)(code);\n    }\n    effects.enter(\"codeFlowValue\");\n    return inside(code);\n  }\n\n  /**\n   * In code content.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"codeFlowValue\");\n      return atBreak(code);\n    }\n    effects.consume(code);\n    return inside;\n  }\n\n  /** @type {State} */\n  function after(code) {\n    effects.exit(\"codeIndented\");\n    // To do: allow interrupting like `markdown-rs`.\n    // Feel free to interrupt.\n    // tokenizer.interrupt = false\n    return ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeFurtherStart(effects, ok, nok) {\n  const self = this;\n  return furtherStart;\n\n  /**\n   * At eol, trying to parse another indent.\n   *\n   * ```markdown\n   * > |     aaa\n   *            ^\n   *   |     bbb\n   * ```\n   *\n   * @type {State}\n   */\n  function furtherStart(code) {\n    // To do: improve `lazy` / `pierce` handling.\n    // If this is a lazy line, it can’t be code.\n    if (self.parser.lazy[self.now().line]) {\n      return nok(code);\n    }\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return furtherStart;\n    }\n\n    // To do: the code here in `micromark-js` is a bit different from\n    // `markdown-rs` because there it can attempt spaces.\n    // We can’t yet.\n    //\n    // To do: use an improved `space_or_tab` function like `markdown-rs`,\n    // so that we can drop the next state.\n    return factorySpace(effects, afterPrefix, \"linePrefix\", 4 + 1)(code);\n  }\n\n  /**\n   * At start, after 1 or 4 spaces.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4 ? ok(code) : markdownLineEnding(code) ? furtherStart(code) : nok(code);\n  }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nimport { splice } from 'micromark-util-chunked';\n/** @type {Construct} */\nexport const headingAtx = {\n  name: 'headingAtx',\n  tokenize: tokenizeHeadingAtx,\n  resolve: resolveHeadingAtx\n};\n\n/** @type {Resolver} */\nfunction resolveHeadingAtx(events, context) {\n  let contentEnd = events.length - 2;\n  let contentStart = 3;\n  /** @type {Token} */\n  let content;\n  /** @type {Token} */\n  let text;\n\n  // Prefix whitespace, part of the opening.\n  if (events[contentStart][1].type === \"whitespace\") {\n    contentStart += 2;\n  }\n\n  // Suffix whitespace, part of the closing.\n  if (contentEnd - 2 > contentStart && events[contentEnd][1].type === \"whitespace\") {\n    contentEnd -= 2;\n  }\n  if (events[contentEnd][1].type === \"atxHeadingSequence\" && (contentStart === contentEnd - 1 || contentEnd - 4 > contentStart && events[contentEnd - 2][1].type === \"whitespace\")) {\n    contentEnd -= contentStart + 1 === contentEnd ? 2 : 4;\n  }\n  if (contentEnd > contentStart) {\n    content = {\n      type: \"atxHeadingText\",\n      start: events[contentStart][1].start,\n      end: events[contentEnd][1].end\n    };\n    text = {\n      type: \"chunkText\",\n      start: events[contentStart][1].start,\n      end: events[contentEnd][1].end,\n      contentType: \"text\"\n    };\n    splice(events, contentStart, contentEnd - contentStart + 1, [['enter', content, context], ['enter', text, context], ['exit', text, context], ['exit', content, context]]);\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHeadingAtx(effects, ok, nok) {\n  let size = 0;\n  return start;\n\n  /**\n   * Start of a heading (atx).\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse indent like `markdown-rs`.\n    effects.enter(\"atxHeading\");\n    return before(code);\n  }\n\n  /**\n   * After optional whitespace, at `#`.\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter(\"atxHeadingSequence\");\n    return sequenceOpen(code);\n  }\n\n  /**\n   * In opening sequence.\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === 35 && size++ < 6) {\n      effects.consume(code);\n      return sequenceOpen;\n    }\n\n    // Always at least one `#`.\n    if (code === null || markdownLineEndingOrSpace(code)) {\n      effects.exit(\"atxHeadingSequence\");\n      return atBreak(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * After something, before something else.\n   *\n   * ```markdown\n   * > | ## aa\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === 35) {\n      effects.enter(\"atxHeadingSequence\");\n      return sequenceFurther(code);\n    }\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"atxHeading\");\n      // To do: interrupt like `markdown-rs`.\n      // // Feel free to interrupt.\n      // tokenizer.interrupt = false\n      return ok(code);\n    }\n    if (markdownSpace(code)) {\n      return factorySpace(effects, atBreak, \"whitespace\")(code);\n    }\n\n    // To do: generate `data` tokens, add the `text` token later.\n    // Needs edit map, see: `markdown.rs`.\n    effects.enter(\"atxHeadingText\");\n    return data(code);\n  }\n\n  /**\n   * In further sequence (after whitespace).\n   *\n   * Could be normal “visible” hashes in the heading or a final sequence.\n   *\n   * ```markdown\n   * > | ## aa ##\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceFurther(code) {\n    if (code === 35) {\n      effects.consume(code);\n      return sequenceFurther;\n    }\n    effects.exit(\"atxHeadingSequence\");\n    return atBreak(code);\n  }\n\n  /**\n   * In text.\n   *\n   * ```markdown\n   * > | ## aa\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function data(code) {\n    if (code === null || code === 35 || markdownLineEndingOrSpace(code)) {\n      effects.exit(\"atxHeadingText\");\n      return atBreak(code);\n    }\n    effects.consume(code);\n    return data;\n  }\n}","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const setextUnderline = {\n  name: 'setextUnderline',\n  tokenize: tokenizeSetextUnderline,\n  resolveTo: resolveToSetextUnderline\n};\n\n/** @type {Resolver} */\nfunction resolveToSetextUnderline(events, context) {\n  // To do: resolve like `markdown-rs`.\n  let index = events.length;\n  /** @type {number | undefined} */\n  let content;\n  /** @type {number | undefined} */\n  let text;\n  /** @type {number | undefined} */\n  let definition;\n\n  // Find the opening of the content.\n  // It’ll always exist: we don’t tokenize if it isn’t there.\n  while (index--) {\n    if (events[index][0] === 'enter') {\n      if (events[index][1].type === \"content\") {\n        content = index;\n        break;\n      }\n      if (events[index][1].type === \"paragraph\") {\n        text = index;\n      }\n    }\n    // Exit\n    else {\n      if (events[index][1].type === \"content\") {\n        // Remove the content end (if needed we’ll add it later)\n        events.splice(index, 1);\n      }\n      if (!definition && events[index][1].type === \"definition\") {\n        definition = index;\n      }\n    }\n  }\n  const heading = {\n    type: \"setextHeading\",\n    start: Object.assign({}, events[text][1].start),\n    end: Object.assign({}, events[events.length - 1][1].end)\n  };\n\n  // Change the paragraph to setext heading text.\n  events[text][1].type = \"setextHeadingText\";\n\n  // If we have definitions in the content, we’ll keep on having content,\n  // but we need move it.\n  if (definition) {\n    events.splice(text, 0, ['enter', heading, context]);\n    events.splice(definition + 1, 0, ['exit', events[content][1], context]);\n    events[content][1].end = Object.assign({}, events[definition][1].end);\n  } else {\n    events[content][1] = heading;\n  }\n\n  // Add the heading exit at the end.\n  events.push(['exit', heading, context]);\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeSetextUnderline(effects, ok, nok) {\n  const self = this;\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * At start of heading (setext) underline.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    let index = self.events.length;\n    /** @type {boolean | undefined} */\n    let paragraph;\n    // Find an opening.\n    while (index--) {\n      // Skip enter/exit of line ending, line prefix, and content.\n      // We can now either have a definition or a paragraph.\n      if (self.events[index][1].type !== \"lineEnding\" && self.events[index][1].type !== \"linePrefix\" && self.events[index][1].type !== \"content\") {\n        paragraph = self.events[index][1].type === \"paragraph\";\n        break;\n      }\n    }\n\n    // To do: handle lazy/pierce like `markdown-rs`.\n    // To do: parse indent like `markdown-rs`.\n    if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) {\n      effects.enter(\"setextHeadingLine\");\n      marker = code;\n      return before(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * After optional whitespace, at `-` or `=`.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter(\"setextHeadingLineSequence\");\n    return inside(code);\n  }\n\n  /**\n   * In sequence.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker) {\n      effects.consume(code);\n      return inside;\n    }\n    effects.exit(\"setextHeadingLineSequence\");\n    return markdownSpace(code) ? factorySpace(effects, after, \"lineSuffix\")(code) : after(code);\n  }\n\n  /**\n   * After sequence, after optional whitespace.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"setextHeadingLine\");\n      return ok(code);\n    }\n    return nok(code);\n  }\n}","/**\n * List of lowercase HTML “block” tag names.\n *\n * The list, when parsing HTML (flow), results in more relaxed rules (condition\n * 6).\n * Because they are known blocks, the HTML-like syntax doesn’t have to be\n * strictly parsed.\n * For tag names not in this list, a more strict algorithm (condition 7) is used\n * to detect whether the HTML-like syntax is seen as HTML (flow) or not.\n *\n * This is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > 👉 **Note**: `search` was added in `CommonMark@0.31`.\n */\nexport const htmlBlockNames = [\n  'address',\n  'article',\n  'aside',\n  'base',\n  'basefont',\n  'blockquote',\n  'body',\n  'caption',\n  'center',\n  'col',\n  'colgroup',\n  'dd',\n  'details',\n  'dialog',\n  'dir',\n  'div',\n  'dl',\n  'dt',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'frame',\n  'frameset',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'head',\n  'header',\n  'hr',\n  'html',\n  'iframe',\n  'legend',\n  'li',\n  'link',\n  'main',\n  'menu',\n  'menuitem',\n  'nav',\n  'noframes',\n  'ol',\n  'optgroup',\n  'option',\n  'p',\n  'param',\n  'search',\n  'section',\n  'summary',\n  'table',\n  'tbody',\n  'td',\n  'tfoot',\n  'th',\n  'thead',\n  'title',\n  'tr',\n  'track',\n  'ul'\n]\n\n/**\n * List of lowercase HTML “raw” tag names.\n *\n * The list, when parsing HTML (flow), results in HTML that can include lines\n * without exiting, until a closing tag also in this list is found (condition\n * 1).\n *\n * This module is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`.\n */\nexport const htmlRawNames = ['pre', 'script', 'style', 'textarea']\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { asciiAlpha, asciiAlphanumeric, markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nimport { htmlBlockNames, htmlRawNames } from 'micromark-util-html-tag-name';\nimport { blankLine } from './blank-line.js';\n\n/** @type {Construct} */\nexport const htmlFlow = {\n  name: 'htmlFlow',\n  tokenize: tokenizeHtmlFlow,\n  resolveTo: resolveToHtmlFlow,\n  concrete: true\n};\n\n/** @type {Construct} */\nconst blankLineBefore = {\n  tokenize: tokenizeBlankLineBefore,\n  partial: true\n};\nconst nonLazyContinuationStart = {\n  tokenize: tokenizeNonLazyContinuationStart,\n  partial: true\n};\n\n/** @type {Resolver} */\nfunction resolveToHtmlFlow(events) {\n  let index = events.length;\n  while (index--) {\n    if (events[index][0] === 'enter' && events[index][1].type === \"htmlFlow\") {\n      break;\n    }\n  }\n  if (index > 1 && events[index - 2][1].type === \"linePrefix\") {\n    // Add the prefix start to the HTML token.\n    events[index][1].start = events[index - 2][1].start;\n    // Add the prefix start to the HTML line token.\n    events[index + 1][1].start = events[index - 2][1].start;\n    // Remove the line prefix.\n    events.splice(index - 2, 2);\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlFlow(effects, ok, nok) {\n  const self = this;\n  /** @type {number} */\n  let marker;\n  /** @type {boolean} */\n  let closingTag;\n  /** @type {string} */\n  let buffer;\n  /** @type {number} */\n  let index;\n  /** @type {Code} */\n  let markerB;\n  return start;\n\n  /**\n   * Start of HTML (flow).\n   *\n   * ```markdown\n   * > | <x />\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse indent like `markdown-rs`.\n    return before(code);\n  }\n\n  /**\n   * At `<`, after optional whitespace.\n   *\n   * ```markdown\n   * > | <x />\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter(\"htmlFlow\");\n    effects.enter(\"htmlFlowData\");\n    effects.consume(code);\n    return open;\n  }\n\n  /**\n   * After `<`, at tag name or other stuff.\n   *\n   * ```markdown\n   * > | <x />\n   *      ^\n   * > | <!doctype>\n   *      ^\n   * > | <!--xxx-->\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 33) {\n      effects.consume(code);\n      return declarationOpen;\n    }\n    if (code === 47) {\n      effects.consume(code);\n      closingTag = true;\n      return tagCloseStart;\n    }\n    if (code === 63) {\n      effects.consume(code);\n      marker = 3;\n      // To do:\n      // tokenizer.concrete = true\n      // To do: use `markdown-rs` style interrupt.\n      // While we’re in an instruction instead of a declaration, we’re on a `?`\n      // right now, so we do need to search for `>`, similar to declarations.\n      return self.interrupt ? ok : continuationDeclarationInside;\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      // @ts-expect-error: not null.\n      buffer = String.fromCharCode(code);\n      return tagName;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<!`, at declaration, comment, or CDATA.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *       ^\n   * > | <!--xxx-->\n   *       ^\n   * > | <![CDATA[>&<]]>\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declarationOpen(code) {\n    if (code === 45) {\n      effects.consume(code);\n      marker = 2;\n      return commentOpenInside;\n    }\n    if (code === 91) {\n      effects.consume(code);\n      marker = 5;\n      index = 0;\n      return cdataOpenInside;\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      marker = 4;\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuationDeclarationInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<!-`, inside a comment, at another `-`.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentOpenInside(code) {\n    if (code === 45) {\n      effects.consume(code);\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuationDeclarationInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<![`, inside CDATA, expecting `CDATA[`.\n   *\n   * ```markdown\n   * > | <![CDATA[>&<]]>\n   *        ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataOpenInside(code) {\n    const value = \"CDATA[\";\n    if (code === value.charCodeAt(index++)) {\n      effects.consume(code);\n      if (index === value.length) {\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok : continuation;\n      }\n      return cdataOpenInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `</`, in closing tag, at tag name.\n   *\n   * ```markdown\n   * > | </x>\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseStart(code) {\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      // @ts-expect-error: not null.\n      buffer = String.fromCharCode(code);\n      return tagName;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In tag name.\n   *\n   * ```markdown\n   * > | <ab>\n   *      ^^\n   * > | </ab>\n   *       ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagName(code) {\n    if (code === null || code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      const slash = code === 47;\n      const name = buffer.toLowerCase();\n      if (!slash && !closingTag && htmlRawNames.includes(name)) {\n        marker = 1;\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok(code) : continuation(code);\n      }\n      if (htmlBlockNames.includes(buffer.toLowerCase())) {\n        marker = 6;\n        if (slash) {\n          effects.consume(code);\n          return basicSelfClosing;\n        }\n\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok(code) : continuation(code);\n      }\n      marker = 7;\n      // Do not support complete HTML when interrupting.\n      return self.interrupt && !self.parser.lazy[self.now().line] ? nok(code) : closingTag ? completeClosingTagAfter(code) : completeAttributeNameBefore(code);\n    }\n\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      buffer += String.fromCharCode(code);\n      return tagName;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After closing slash of a basic tag name.\n   *\n   * ```markdown\n   * > | <div/>\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function basicSelfClosing(code) {\n    if (code === 62) {\n      effects.consume(code);\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuation;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After closing slash of a complete tag name.\n   *\n   * ```markdown\n   * > | <x/>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeClosingTagAfter(code) {\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeClosingTagAfter;\n    }\n    return completeEnd(code);\n  }\n\n  /**\n   * At an attribute name.\n   *\n   * At first, this state is used after a complete tag name, after whitespace,\n   * where it expects optional attributes or the end of the tag.\n   * It is also reused after attributes, when expecting more optional\n   * attributes.\n   *\n   * ```markdown\n   * > | <a />\n   *        ^\n   * > | <a :b>\n   *        ^\n   * > | <a _b>\n   *        ^\n   * > | <a b>\n   *        ^\n   * > | <a >\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeNameBefore(code) {\n    if (code === 47) {\n      effects.consume(code);\n      return completeEnd;\n    }\n\n    // ASCII alphanumerical and `:` and `_`.\n    if (code === 58 || code === 95 || asciiAlpha(code)) {\n      effects.consume(code);\n      return completeAttributeName;\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAttributeNameBefore;\n    }\n    return completeEnd(code);\n  }\n\n  /**\n   * In attribute name.\n   *\n   * ```markdown\n   * > | <a :b>\n   *         ^\n   * > | <a _b>\n   *         ^\n   * > | <a b>\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeName(code) {\n    // ASCII alphanumerical and `-`, `.`, `:`, and `_`.\n    if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return completeAttributeName;\n    }\n    return completeAttributeNameAfter(code);\n  }\n\n  /**\n   * After attribute name, at an optional initializer, the end of the tag, or\n   * whitespace.\n   *\n   * ```markdown\n   * > | <a b>\n   *         ^\n   * > | <a b=c>\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeNameAfter(code) {\n    if (code === 61) {\n      effects.consume(code);\n      return completeAttributeValueBefore;\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAttributeNameAfter;\n    }\n    return completeAttributeNameBefore(code);\n  }\n\n  /**\n   * Before unquoted, double quoted, or single quoted attribute value, allowing\n   * whitespace.\n   *\n   * ```markdown\n   * > | <a b=c>\n   *          ^\n   * > | <a b=\"c\">\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueBefore(code) {\n    if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\n      return nok(code);\n    }\n    if (code === 34 || code === 39) {\n      effects.consume(code);\n      markerB = code;\n      return completeAttributeValueQuoted;\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAttributeValueBefore;\n    }\n    return completeAttributeValueUnquoted(code);\n  }\n\n  /**\n   * In double or single quoted attribute value.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *           ^\n   * > | <a b='c'>\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueQuoted(code) {\n    if (code === markerB) {\n      effects.consume(code);\n      markerB = null;\n      return completeAttributeValueQuotedAfter;\n    }\n    if (code === null || markdownLineEnding(code)) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return completeAttributeValueQuoted;\n  }\n\n  /**\n   * In unquoted attribute value.\n   *\n   * ```markdown\n   * > | <a b=c>\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueUnquoted(code) {\n    if (code === null || code === 34 || code === 39 || code === 47 || code === 60 || code === 61 || code === 62 || code === 96 || markdownLineEndingOrSpace(code)) {\n      return completeAttributeNameAfter(code);\n    }\n    effects.consume(code);\n    return completeAttributeValueUnquoted;\n  }\n\n  /**\n   * After double or single quoted attribute value, before whitespace or the\n   * end of the tag.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueQuotedAfter(code) {\n    if (code === 47 || code === 62 || markdownSpace(code)) {\n      return completeAttributeNameBefore(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In certain circumstances of a complete tag where only an `>` is allowed.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeEnd(code) {\n    if (code === 62) {\n      effects.consume(code);\n      return completeAfter;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `>` in a complete tag.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAfter(code) {\n    if (code === null || markdownLineEnding(code)) {\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return continuation(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAfter;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In continuation of any HTML kind.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuation(code) {\n    if (code === 45 && marker === 2) {\n      effects.consume(code);\n      return continuationCommentInside;\n    }\n    if (code === 60 && marker === 1) {\n      effects.consume(code);\n      return continuationRawTagOpen;\n    }\n    if (code === 62 && marker === 4) {\n      effects.consume(code);\n      return continuationClose;\n    }\n    if (code === 63 && marker === 3) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    if (code === 93 && marker === 5) {\n      effects.consume(code);\n      return continuationCdataInside;\n    }\n    if (markdownLineEnding(code) && (marker === 6 || marker === 7)) {\n      effects.exit(\"htmlFlowData\");\n      return effects.check(blankLineBefore, continuationAfter, continuationStart)(code);\n    }\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"htmlFlowData\");\n      return continuationStart(code);\n    }\n    effects.consume(code);\n    return continuation;\n  }\n\n  /**\n   * In continuation, at eol.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   *   | asd\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationStart(code) {\n    return effects.check(nonLazyContinuationStart, continuationStartNonLazy, continuationAfter)(code);\n  }\n\n  /**\n   * In continuation, at eol, before non-lazy content.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   *   | asd\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationStartNonLazy(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return continuationBefore;\n  }\n\n  /**\n   * In continuation, before non-lazy content.\n   *\n   * ```markdown\n   *   | <x>\n   * > | asd\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return continuationStart(code);\n    }\n    effects.enter(\"htmlFlowData\");\n    return continuation(code);\n  }\n\n  /**\n   * In comment continuation, after one `-`, expecting another.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationCommentInside(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In raw continuation, after `<`, at `/`.\n   *\n   * ```markdown\n   * > | <script>console.log(1)</script>\n   *                            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationRawTagOpen(code) {\n    if (code === 47) {\n      effects.consume(code);\n      buffer = '';\n      return continuationRawEndTag;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In raw continuation, after `</`, in a raw tag name.\n   *\n   * ```markdown\n   * > | <script>console.log(1)</script>\n   *                             ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationRawEndTag(code) {\n    if (code === 62) {\n      const name = buffer.toLowerCase();\n      if (htmlRawNames.includes(name)) {\n        effects.consume(code);\n        return continuationClose;\n      }\n      return continuation(code);\n    }\n    if (asciiAlpha(code) && buffer.length < 8) {\n      effects.consume(code);\n      // @ts-expect-error: not null.\n      buffer += String.fromCharCode(code);\n      return continuationRawEndTag;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In cdata continuation, after `]`, expecting `]>`.\n   *\n   * ```markdown\n   * > | <![CDATA[>&<]]>\n   *                  ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationCdataInside(code) {\n    if (code === 93) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In declaration or instruction continuation, at `>`.\n   *\n   * ```markdown\n   * > | <!-->\n   *         ^\n   * > | <?>\n   *       ^\n   * > | <!q>\n   *        ^\n   * > | <!--ab-->\n   *             ^\n   * > | <![CDATA[>&<]]>\n   *                   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationDeclarationInside(code) {\n    if (code === 62) {\n      effects.consume(code);\n      return continuationClose;\n    }\n\n    // More dashes.\n    if (code === 45 && marker === 2) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In closed continuation: everything we get until the eol/eof is part of it.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationClose(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"htmlFlowData\");\n      return continuationAfter(code);\n    }\n    effects.consume(code);\n    return continuationClose;\n  }\n\n  /**\n   * Done.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationAfter(code) {\n    effects.exit(\"htmlFlow\");\n    // // Feel free to interrupt.\n    // tokenizer.interrupt = false\n    // // No longer concrete.\n    // tokenizer.concrete = false\n    return ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuationStart(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * At eol, before continuation.\n   *\n   * ```markdown\n   * > | * ```js\n   *            ^\n   *   | b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return after;\n    }\n    return nok(code);\n  }\n\n  /**\n   * A continuation.\n   *\n   * ```markdown\n   *   | * ```js\n   * > | b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLineBefore(effects, ok, nok) {\n  return start;\n\n  /**\n   * Before eol, expecting blank line.\n   *\n   * ```markdown\n   * > | <div>\n   *          ^\n   *   |\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return effects.attempt(blankLine, ok, nok);\n  }\n}","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nconst nonLazyContinuation = {\n  tokenize: tokenizeNonLazyContinuation,\n  partial: true\n};\n\n/** @type {Construct} */\nexport const codeFenced = {\n  name: 'codeFenced',\n  tokenize: tokenizeCodeFenced,\n  concrete: true\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCodeFenced(effects, ok, nok) {\n  const self = this;\n  /** @type {Construct} */\n  const closeStart = {\n    tokenize: tokenizeCloseStart,\n    partial: true\n  };\n  let initialPrefix = 0;\n  let sizeOpen = 0;\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Start of code.\n   *\n   * ```markdown\n   * > | ~~~js\n   *     ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse whitespace like `markdown-rs`.\n    return beforeSequenceOpen(code);\n  }\n\n  /**\n   * In opening fence, after prefix, at sequence.\n   *\n   * ```markdown\n   * > | ~~~js\n   *     ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeSequenceOpen(code) {\n    const tail = self.events[self.events.length - 1];\n    initialPrefix = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 0;\n    marker = code;\n    effects.enter(\"codeFenced\");\n    effects.enter(\"codeFencedFence\");\n    effects.enter(\"codeFencedFenceSequence\");\n    return sequenceOpen(code);\n  }\n\n  /**\n   * In opening fence sequence.\n   *\n   * ```markdown\n   * > | ~~~js\n   *      ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === marker) {\n      sizeOpen++;\n      effects.consume(code);\n      return sequenceOpen;\n    }\n    if (sizeOpen < 3) {\n      return nok(code);\n    }\n    effects.exit(\"codeFencedFenceSequence\");\n    return markdownSpace(code) ? factorySpace(effects, infoBefore, \"whitespace\")(code) : infoBefore(code);\n  }\n\n  /**\n   * In opening fence, after the sequence (and optional whitespace), before info.\n   *\n   * ```markdown\n   * > | ~~~js\n   *        ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function infoBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"codeFencedFence\");\n      return self.interrupt ? ok(code) : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n    }\n    effects.enter(\"codeFencedFenceInfo\");\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return info(code);\n  }\n\n  /**\n   * In info.\n   *\n   * ```markdown\n   * > | ~~~js\n   *        ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function info(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"chunkString\");\n      effects.exit(\"codeFencedFenceInfo\");\n      return infoBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.exit(\"chunkString\");\n      effects.exit(\"codeFencedFenceInfo\");\n      return factorySpace(effects, metaBefore, \"whitespace\")(code);\n    }\n    if (code === 96 && code === marker) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return info;\n  }\n\n  /**\n   * In opening fence, after info and whitespace, before meta.\n   *\n   * ```markdown\n   * > | ~~~js eval\n   *           ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function metaBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return infoBefore(code);\n    }\n    effects.enter(\"codeFencedFenceMeta\");\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return meta(code);\n  }\n\n  /**\n   * In meta.\n   *\n   * ```markdown\n   * > | ~~~js eval\n   *           ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function meta(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"chunkString\");\n      effects.exit(\"codeFencedFenceMeta\");\n      return infoBefore(code);\n    }\n    if (code === 96 && code === marker) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return meta;\n  }\n\n  /**\n   * At eol/eof in code, before a non-lazy closing fence or content.\n   *\n   * ```markdown\n   * > | ~~~js\n   *          ^\n   * > | alert(1)\n   *             ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function atNonLazyBreak(code) {\n    return effects.attempt(closeStart, after, contentBefore)(code);\n  }\n\n  /**\n   * Before code content, not a closing fence, at eol.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *             ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentBefore(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return contentStart;\n  }\n\n  /**\n   * Before code content, not a closing fence.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentStart(code) {\n    return initialPrefix > 0 && markdownSpace(code) ? factorySpace(effects, beforeContentChunk, \"linePrefix\", initialPrefix + 1)(code) : beforeContentChunk(code);\n  }\n\n  /**\n   * Before code content, after optional prefix.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeContentChunk(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n    }\n    effects.enter(\"codeFlowValue\");\n    return contentChunk(code);\n  }\n\n  /**\n   * In code content.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^^^^^^^^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentChunk(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"codeFlowValue\");\n      return beforeContentChunk(code);\n    }\n    effects.consume(code);\n    return contentChunk;\n  }\n\n  /**\n   * After code.\n   *\n   * ```markdown\n   *   | ~~~js\n   *   | alert(1)\n   * > | ~~~\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    effects.exit(\"codeFenced\");\n    return ok(code);\n  }\n\n  /**\n   * @this {TokenizeContext}\n   * @type {Tokenizer}\n   */\n  function tokenizeCloseStart(effects, ok, nok) {\n    let size = 0;\n    return startBefore;\n\n    /**\n     *\n     *\n     * @type {State}\n     */\n    function startBefore(code) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return start;\n    }\n\n    /**\n     * Before closing fence, at optional whitespace.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function start(code) {\n      // Always populated by defaults.\n\n      // To do: `enter` here or in next state?\n      effects.enter(\"codeFencedFence\");\n      return markdownSpace(code) ? factorySpace(effects, beforeSequenceClose, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : beforeSequenceClose(code);\n    }\n\n    /**\n     * In closing fence, after optional whitespace, at sequence.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function beforeSequenceClose(code) {\n      if (code === marker) {\n        effects.enter(\"codeFencedFenceSequence\");\n        return sequenceClose(code);\n      }\n      return nok(code);\n    }\n\n    /**\n     * In closing fence sequence.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function sequenceClose(code) {\n      if (code === marker) {\n        size++;\n        effects.consume(code);\n        return sequenceClose;\n      }\n      if (size >= sizeOpen) {\n        effects.exit(\"codeFencedFenceSequence\");\n        return markdownSpace(code) ? factorySpace(effects, sequenceCloseAfter, \"whitespace\")(code) : sequenceCloseAfter(code);\n      }\n      return nok(code);\n    }\n\n    /**\n     * After closing fence sequence, after optional whitespace.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *        ^\n     * ```\n     *\n     * @type {State}\n     */\n    function sequenceCloseAfter(code) {\n      if (code === null || markdownLineEnding(code)) {\n        effects.exit(\"codeFencedFence\");\n        return ok(code);\n      }\n      return nok(code);\n    }\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuation(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return lineStart;\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function lineStart(code) {\n    return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n  }\n}","/// <reference lib=\"dom\" />\n\n/* eslint-env browser */\n\nconst element = document.createElement('i')\n\n/**\n * @param {string} value\n * @returns {string|false}\n */\nexport function decodeNamedCharacterReference(value) {\n  const characterReference = '&' + value + ';'\n  element.innerHTML = characterReference\n  const char = element.textContent\n\n  // Some named character references do not require the closing semicolon\n  // (`&not`, for instance), which leads to situations where parsing the assumed\n  // named reference of `&notit;` will result in the string `¬it;`.\n  // When we encounter a trailing semicolon after parsing, and the character\n  // reference to decode was not a semicolon (`&semi;`), we can assume that the\n  // matching was not complete.\n  // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n  // yield `null`.\n  if (char.charCodeAt(char.length - 1) === 59 /* `;` */ && value !== 'semi') {\n    return false\n  }\n\n  // If the decoded string is equal to the input, the character reference was\n  // not valid.\n  // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n  // yield `null`.\n  return char === characterReference ? false : char\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { asciiAlphanumeric, asciiDigit, asciiHexDigit } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterReference = {\n  name: 'characterReference',\n  tokenize: tokenizeCharacterReference\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterReference(effects, ok, nok) {\n  const self = this;\n  let size = 0;\n  /** @type {number} */\n  let max;\n  /** @type {(code: Code) => boolean} */\n  let test;\n  return start;\n\n  /**\n   * Start of character reference.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *      ^\n   * > | a&#123;b\n   *      ^\n   * > | a&#x9;b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"characterReference\");\n    effects.enter(\"characterReferenceMarker\");\n    effects.consume(code);\n    effects.exit(\"characterReferenceMarker\");\n    return open;\n  }\n\n  /**\n   * After `&`, at `#` for numeric references or alphanumeric for named\n   * references.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *       ^\n   * > | a&#123;b\n   *       ^\n   * > | a&#x9;b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 35) {\n      effects.enter(\"characterReferenceMarkerNumeric\");\n      effects.consume(code);\n      effects.exit(\"characterReferenceMarkerNumeric\");\n      return numeric;\n    }\n    effects.enter(\"characterReferenceValue\");\n    max = 31;\n    test = asciiAlphanumeric;\n    return value(code);\n  }\n\n  /**\n   * After `#`, at `x` for hexadecimals or digit for decimals.\n   *\n   * ```markdown\n   * > | a&#123;b\n   *        ^\n   * > | a&#x9;b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function numeric(code) {\n    if (code === 88 || code === 120) {\n      effects.enter(\"characterReferenceMarkerHexadecimal\");\n      effects.consume(code);\n      effects.exit(\"characterReferenceMarkerHexadecimal\");\n      effects.enter(\"characterReferenceValue\");\n      max = 6;\n      test = asciiHexDigit;\n      return value;\n    }\n    effects.enter(\"characterReferenceValue\");\n    max = 7;\n    test = asciiDigit;\n    return value(code);\n  }\n\n  /**\n   * After markers (`&#x`, `&#`, or `&`), in value, before `;`.\n   *\n   * The character reference kind defines what and how many characters are\n   * allowed.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *       ^^^\n   * > | a&#123;b\n   *        ^^^\n   * > | a&#x9;b\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function value(code) {\n    if (code === 59 && size) {\n      const token = effects.exit(\"characterReferenceValue\");\n      if (test === asciiAlphanumeric && !decodeNamedCharacterReference(self.sliceSerialize(token))) {\n        return nok(code);\n      }\n\n      // To do: `markdown-rs` uses a different name:\n      // `CharacterReferenceMarkerSemi`.\n      effects.enter(\"characterReferenceMarker\");\n      effects.consume(code);\n      effects.exit(\"characterReferenceMarker\");\n      effects.exit(\"characterReference\");\n      return ok;\n    }\n    if (test(code) && size++ < max) {\n      effects.consume(code);\n      return value;\n    }\n    return nok(code);\n  }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { asciiPunctuation } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterEscape = {\n  name: 'characterEscape',\n  tokenize: tokenizeCharacterEscape\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterEscape(effects, ok, nok) {\n  return start;\n\n  /**\n   * Start of character escape.\n   *\n   * ```markdown\n   * > | a\\*b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"characterEscape\");\n    effects.enter(\"escapeMarker\");\n    effects.consume(code);\n    effects.exit(\"escapeMarker\");\n    return inside;\n  }\n\n  /**\n   * After `\\`, at punctuation.\n   *\n   * ```markdown\n   * > | a\\*b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    // ASCII punctuation.\n    if (asciiPunctuation(code)) {\n      effects.enter(\"characterEscapeValue\");\n      effects.consume(code);\n      effects.exit(\"characterEscapeValue\");\n      effects.exit(\"characterEscape\");\n      return ok;\n    }\n    return nok(code);\n  }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const lineEnding = {\n  name: 'lineEnding',\n  tokenize: tokenizeLineEnding\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLineEnding(effects, ok) {\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return factorySpace(effects, ok, \"linePrefix\");\n  }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factoryDestination } from 'micromark-factory-destination';\nimport { factoryLabel } from 'micromark-factory-label';\nimport { factoryTitle } from 'micromark-factory-title';\nimport { factoryWhitespace } from 'micromark-factory-whitespace';\nimport { markdownLineEndingOrSpace } from 'micromark-util-character';\nimport { push, splice } from 'micromark-util-chunked';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const labelEnd = {\n  name: 'labelEnd',\n  tokenize: tokenizeLabelEnd,\n  resolveTo: resolveToLabelEnd,\n  resolveAll: resolveAllLabelEnd\n};\n\n/** @type {Construct} */\nconst resourceConstruct = {\n  tokenize: tokenizeResource\n};\n/** @type {Construct} */\nconst referenceFullConstruct = {\n  tokenize: tokenizeReferenceFull\n};\n/** @type {Construct} */\nconst referenceCollapsedConstruct = {\n  tokenize: tokenizeReferenceCollapsed\n};\n\n/** @type {Resolver} */\nfunction resolveAllLabelEnd(events) {\n  let index = -1;\n  while (++index < events.length) {\n    const token = events[index][1];\n    if (token.type === \"labelImage\" || token.type === \"labelLink\" || token.type === \"labelEnd\") {\n      // Remove the marker.\n      events.splice(index + 1, token.type === \"labelImage\" ? 4 : 2);\n      token.type = \"data\";\n      index++;\n    }\n  }\n  return events;\n}\n\n/** @type {Resolver} */\nfunction resolveToLabelEnd(events, context) {\n  let index = events.length;\n  let offset = 0;\n  /** @type {Token} */\n  let token;\n  /** @type {number | undefined} */\n  let open;\n  /** @type {number | undefined} */\n  let close;\n  /** @type {Array<Event>} */\n  let media;\n\n  // Find an opening.\n  while (index--) {\n    token = events[index][1];\n    if (open) {\n      // If we see another link, or inactive link label, we’ve been here before.\n      if (token.type === \"link\" || token.type === \"labelLink\" && token._inactive) {\n        break;\n      }\n\n      // Mark other link openings as inactive, as we can’t have links in\n      // links.\n      if (events[index][0] === 'enter' && token.type === \"labelLink\") {\n        token._inactive = true;\n      }\n    } else if (close) {\n      if (events[index][0] === 'enter' && (token.type === \"labelImage\" || token.type === \"labelLink\") && !token._balanced) {\n        open = index;\n        if (token.type !== \"labelLink\") {\n          offset = 2;\n          break;\n        }\n      }\n    } else if (token.type === \"labelEnd\") {\n      close = index;\n    }\n  }\n  const group = {\n    type: events[open][1].type === \"labelLink\" ? \"link\" : \"image\",\n    start: Object.assign({}, events[open][1].start),\n    end: Object.assign({}, events[events.length - 1][1].end)\n  };\n  const label = {\n    type: \"label\",\n    start: Object.assign({}, events[open][1].start),\n    end: Object.assign({}, events[close][1].end)\n  };\n  const text = {\n    type: \"labelText\",\n    start: Object.assign({}, events[open + offset + 2][1].end),\n    end: Object.assign({}, events[close - 2][1].start)\n  };\n  media = [['enter', group, context], ['enter', label, context]];\n\n  // Opening marker.\n  media = push(media, events.slice(open + 1, open + offset + 3));\n\n  // Text open.\n  media = push(media, [['enter', text, context]]);\n\n  // Always populated by defaults.\n\n  // Between.\n  media = push(media, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + offset + 4, close - 3), context));\n\n  // Text close, marker close, label close.\n  media = push(media, [['exit', text, context], events[close - 2], events[close - 1], ['exit', label, context]]);\n\n  // Reference, resource, or so.\n  media = push(media, events.slice(close + 1));\n\n  // Media close.\n  media = push(media, [['exit', group, context]]);\n  splice(events, open, events.length, media);\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelEnd(effects, ok, nok) {\n  const self = this;\n  let index = self.events.length;\n  /** @type {Token} */\n  let labelStart;\n  /** @type {boolean} */\n  let defined;\n\n  // Find an opening.\n  while (index--) {\n    if ((self.events[index][1].type === \"labelImage\" || self.events[index][1].type === \"labelLink\") && !self.events[index][1]._balanced) {\n      labelStart = self.events[index][1];\n      break;\n    }\n  }\n  return start;\n\n  /**\n   * Start of label end.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *       ^\n   * > | [a][b] c\n   *       ^\n   * > | [a][] b\n   *       ^\n   * > | [a] b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // If there is not an okay opening.\n    if (!labelStart) {\n      return nok(code);\n    }\n\n    // If the corresponding label (link) start is marked as inactive,\n    // it means we’d be wrapping a link, like this:\n    //\n    // ```markdown\n    // > | a [b [c](d) e](f) g.\n    //                  ^\n    // ```\n    //\n    // We can’t have that, so it’s just balanced brackets.\n    if (labelStart._inactive) {\n      return labelEndNok(code);\n    }\n    defined = self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize({\n      start: labelStart.end,\n      end: self.now()\n    })));\n    effects.enter(\"labelEnd\");\n    effects.enter(\"labelMarker\");\n    effects.consume(code);\n    effects.exit(\"labelMarker\");\n    effects.exit(\"labelEnd\");\n    return after;\n  }\n\n  /**\n   * After `]`.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *       ^\n   * > | [a][b] c\n   *       ^\n   * > | [a][] b\n   *       ^\n   * > | [a] b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // Note: `markdown-rs` also parses GFM footnotes here, which for us is in\n    // an extension.\n\n    // Resource (`[asd](fgh)`)?\n    if (code === 40) {\n      return effects.attempt(resourceConstruct, labelEndOk, defined ? labelEndOk : labelEndNok)(code);\n    }\n\n    // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference?\n    if (code === 91) {\n      return effects.attempt(referenceFullConstruct, labelEndOk, defined ? referenceNotFull : labelEndNok)(code);\n    }\n\n    // Shortcut (`[asd]`) reference?\n    return defined ? labelEndOk(code) : labelEndNok(code);\n  }\n\n  /**\n   * After `]`, at `[`, but not at a full reference.\n   *\n   * > 👉 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] b\n   *        ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceNotFull(code) {\n    return effects.attempt(referenceCollapsedConstruct, labelEndOk, labelEndNok)(code);\n  }\n\n  /**\n   * Done, we found something.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *           ^\n   * > | [a][b] c\n   *           ^\n   * > | [a][] b\n   *          ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEndOk(code) {\n    // Note: `markdown-rs` does a bunch of stuff here.\n    return ok(code);\n  }\n\n  /**\n   * Done, it’s nothing.\n   *\n   * There was an okay opening, but we didn’t match anything.\n   *\n   * ```markdown\n   * > | [a](b c\n   *        ^\n   * > | [a][b c\n   *        ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEndNok(code) {\n    labelStart._balanced = true;\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeResource(effects, ok, nok) {\n  return resourceStart;\n\n  /**\n   * At a resource.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceStart(code) {\n    effects.enter(\"resource\");\n    effects.enter(\"resourceMarker\");\n    effects.consume(code);\n    effects.exit(\"resourceMarker\");\n    return resourceBefore;\n  }\n\n  /**\n   * In resource, after `(`, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceBefore(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceOpen)(code) : resourceOpen(code);\n  }\n\n  /**\n   * In resource, after optional whitespace, at `)` or a destination.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceOpen(code) {\n    if (code === 41) {\n      return resourceEnd(code);\n    }\n    return factoryDestination(effects, resourceDestinationAfter, resourceDestinationMissing, \"resourceDestination\", \"resourceDestinationLiteral\", \"resourceDestinationLiteralMarker\", \"resourceDestinationRaw\", \"resourceDestinationString\", 32)(code);\n  }\n\n  /**\n   * In resource, after destination, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceDestinationAfter(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceBetween)(code) : resourceEnd(code);\n  }\n\n  /**\n   * At invalid destination.\n   *\n   * ```markdown\n   * > | [a](<<) b\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceDestinationMissing(code) {\n    return nok(code);\n  }\n\n  /**\n   * In resource, after destination and whitespace, at `(` or title.\n   *\n   * ```markdown\n   * > | [a](b ) c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceBetween(code) {\n    if (code === 34 || code === 39 || code === 40) {\n      return factoryTitle(effects, resourceTitleAfter, nok, \"resourceTitle\", \"resourceTitleMarker\", \"resourceTitleString\")(code);\n    }\n    return resourceEnd(code);\n  }\n\n  /**\n   * In resource, after title, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b \"c\") d\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceTitleAfter(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceEnd)(code) : resourceEnd(code);\n  }\n\n  /**\n   * In resource, at `)`.\n   *\n   * ```markdown\n   * > | [a](b) d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceEnd(code) {\n    if (code === 41) {\n      effects.enter(\"resourceMarker\");\n      effects.consume(code);\n      effects.exit(\"resourceMarker\");\n      effects.exit(\"resource\");\n      return ok;\n    }\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceFull(effects, ok, nok) {\n  const self = this;\n  return referenceFull;\n\n  /**\n   * In a reference (full), at the `[`.\n   *\n   * ```markdown\n   * > | [a][b] d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFull(code) {\n    return factoryLabel.call(self, effects, referenceFullAfter, referenceFullMissing, \"reference\", \"referenceMarker\", \"referenceString\")(code);\n  }\n\n  /**\n   * In a reference (full), after `]`.\n   *\n   * ```markdown\n   * > | [a][b] d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFullAfter(code) {\n    return self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1))) ? ok(code) : nok(code);\n  }\n\n  /**\n   * In reference (full) that was missing.\n   *\n   * ```markdown\n   * > | [a][b d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFullMissing(code) {\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceCollapsed(effects, ok, nok) {\n  return referenceCollapsedStart;\n\n  /**\n   * In reference (collapsed), at `[`.\n   *\n   * > 👉 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceCollapsedStart(code) {\n    // We only attempt a collapsed label if there’s a `[`.\n\n    effects.enter(\"reference\");\n    effects.enter(\"referenceMarker\");\n    effects.consume(code);\n    effects.exit(\"referenceMarker\");\n    return referenceCollapsedOpen;\n  }\n\n  /**\n   * In reference (collapsed), at `]`.\n   *\n   * > 👉 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] d\n   *         ^\n   * ```\n   *\n   *  @type {State}\n   */\n  function referenceCollapsedOpen(code) {\n    if (code === 93) {\n      effects.enter(\"referenceMarker\");\n      effects.consume(code);\n      effects.exit(\"referenceMarker\");\n      effects.exit(\"reference\");\n      return ok;\n    }\n    return nok(code);\n  }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartImage = {\n  name: 'labelStartImage',\n  tokenize: tokenizeLabelStartImage,\n  resolveAll: labelEnd.resolveAll\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartImage(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of label (image) start.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"labelImage\");\n    effects.enter(\"labelImageMarker\");\n    effects.consume(code);\n    effects.exit(\"labelImageMarker\");\n    return open;\n  }\n\n  /**\n   * After `!`, at `[`.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 91) {\n      effects.enter(\"labelMarker\");\n      effects.consume(code);\n      effects.exit(\"labelMarker\");\n      effects.exit(\"labelImage\");\n      return after;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `![`.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *         ^\n   * ```\n   *\n   * This is needed in because, when GFM footnotes are enabled, images never\n   * form when started with a `^`.\n   * Instead, links form:\n   *\n   * ```markdown\n   * ![^a](b)\n   *\n   * ![^a][b]\n   *\n   * [b]: c\n   * ```\n   *\n   * ```html\n   * <p>!<a href=\\\"b\\\">^a</a></p>\n   * <p>!<a href=\\\"c\\\">^a</a></p>\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // To do: use a new field to do this, this is still needed for\n    // `micromark-extension-gfm-footnote`, but the `label-start-link`\n    // behavior isn’t.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n  }\n}","/**\n * @typedef {import('micromark-util-types').Code} Code\n */\n\nimport {\n  markdownLineEndingOrSpace,\n  unicodePunctuation,\n  unicodeWhitespace\n} from 'micromark-util-character'\n/**\n * Classify whether a code represents whitespace, punctuation, or something\n * else.\n *\n * Used for attention (emphasis, strong), whose sequences can open or close\n * based on the class of surrounding characters.\n *\n * > 👉 **Note**: eof (`null`) is seen as whitespace.\n *\n * @param {Code} code\n *   Code.\n * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined}\n *   Group.\n */\nexport function classifyCharacter(code) {\n  if (\n    code === null ||\n    markdownLineEndingOrSpace(code) ||\n    unicodeWhitespace(code)\n  ) {\n    return 1\n  }\n  if (unicodePunctuation(code)) {\n    return 2\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { push, splice } from 'micromark-util-chunked';\nimport { classifyCharacter } from 'micromark-util-classify-character';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const attention = {\n  name: 'attention',\n  tokenize: tokenizeAttention,\n  resolveAll: resolveAllAttention\n};\n\n/**\n * Take all events and resolve attention to emphasis or strong.\n *\n * @type {Resolver}\n */\n// eslint-disable-next-line complexity\nfunction resolveAllAttention(events, context) {\n  let index = -1;\n  /** @type {number} */\n  let open;\n  /** @type {Token} */\n  let group;\n  /** @type {Token} */\n  let text;\n  /** @type {Token} */\n  let openingSequence;\n  /** @type {Token} */\n  let closingSequence;\n  /** @type {number} */\n  let use;\n  /** @type {Array<Event>} */\n  let nextEvents;\n  /** @type {number} */\n  let offset;\n\n  // Walk through all events.\n  //\n  // Note: performance of this is fine on an mb of normal markdown, but it’s\n  // a bottleneck for malicious stuff.\n  while (++index < events.length) {\n    // Find a token that can close.\n    if (events[index][0] === 'enter' && events[index][1].type === 'attentionSequence' && events[index][1]._close) {\n      open = index;\n\n      // Now walk back to find an opener.\n      while (open--) {\n        // Find a token that can open the closer.\n        if (events[open][0] === 'exit' && events[open][1].type === 'attentionSequence' && events[open][1]._open &&\n        // If the markers are the same:\n        context.sliceSerialize(events[open][1]).charCodeAt(0) === context.sliceSerialize(events[index][1]).charCodeAt(0)) {\n          // If the opening can close or the closing can open,\n          // and the close size *is not* a multiple of three,\n          // but the sum of the opening and closing size *is* multiple of three,\n          // then don’t match.\n          if ((events[open][1]._close || events[index][1]._open) && (events[index][1].end.offset - events[index][1].start.offset) % 3 && !((events[open][1].end.offset - events[open][1].start.offset + events[index][1].end.offset - events[index][1].start.offset) % 3)) {\n            continue;\n          }\n\n          // Number of markers to use from the sequence.\n          use = events[open][1].end.offset - events[open][1].start.offset > 1 && events[index][1].end.offset - events[index][1].start.offset > 1 ? 2 : 1;\n          const start = Object.assign({}, events[open][1].end);\n          const end = Object.assign({}, events[index][1].start);\n          movePoint(start, -use);\n          movePoint(end, use);\n          openingSequence = {\n            type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n            start,\n            end: Object.assign({}, events[open][1].end)\n          };\n          closingSequence = {\n            type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n            start: Object.assign({}, events[index][1].start),\n            end\n          };\n          text = {\n            type: use > 1 ? \"strongText\" : \"emphasisText\",\n            start: Object.assign({}, events[open][1].end),\n            end: Object.assign({}, events[index][1].start)\n          };\n          group = {\n            type: use > 1 ? \"strong\" : \"emphasis\",\n            start: Object.assign({}, openingSequence.start),\n            end: Object.assign({}, closingSequence.end)\n          };\n          events[open][1].end = Object.assign({}, openingSequence.start);\n          events[index][1].start = Object.assign({}, closingSequence.end);\n          nextEvents = [];\n\n          // If there are more markers in the opening, add them before.\n          if (events[open][1].end.offset - events[open][1].start.offset) {\n            nextEvents = push(nextEvents, [['enter', events[open][1], context], ['exit', events[open][1], context]]);\n          }\n\n          // Opening.\n          nextEvents = push(nextEvents, [['enter', group, context], ['enter', openingSequence, context], ['exit', openingSequence, context], ['enter', text, context]]);\n\n          // Always populated by defaults.\n\n          // Between.\n          nextEvents = push(nextEvents, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + 1, index), context));\n\n          // Closing.\n          nextEvents = push(nextEvents, [['exit', text, context], ['enter', closingSequence, context], ['exit', closingSequence, context], ['exit', group, context]]);\n\n          // If there are more markers in the closing, add them after.\n          if (events[index][1].end.offset - events[index][1].start.offset) {\n            offset = 2;\n            nextEvents = push(nextEvents, [['enter', events[index][1], context], ['exit', events[index][1], context]]);\n          } else {\n            offset = 0;\n          }\n          splice(events, open - 1, index - open + 3, nextEvents);\n          index = open + nextEvents.length - offset - 2;\n          break;\n        }\n      }\n    }\n  }\n\n  // Remove remaining sequences.\n  index = -1;\n  while (++index < events.length) {\n    if (events[index][1].type === 'attentionSequence') {\n      events[index][1].type = 'data';\n    }\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeAttention(effects, ok) {\n  const attentionMarkers = this.parser.constructs.attentionMarkers.null;\n  const previous = this.previous;\n  const before = classifyCharacter(previous);\n\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Before a sequence.\n   *\n   * ```markdown\n   * > | **\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    marker = code;\n    effects.enter('attentionSequence');\n    return inside(code);\n  }\n\n  /**\n   * In a sequence.\n   *\n   * ```markdown\n   * > | **\n   *     ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker) {\n      effects.consume(code);\n      return inside;\n    }\n    const token = effects.exit('attentionSequence');\n\n    // To do: next major: move this to resolver, just like `markdown-rs`.\n    const after = classifyCharacter(code);\n\n    // Always populated by defaults.\n\n    const open = !after || after === 2 && before || attentionMarkers.includes(code);\n    const close = !before || before === 2 && after || attentionMarkers.includes(previous);\n    token._open = Boolean(marker === 42 ? open : open && (before || !close));\n    token._close = Boolean(marker === 42 ? close : close && (after || !open));\n    return ok(code);\n  }\n}\n\n/**\n * Move a point a bit.\n *\n * Note: `move` only works inside lines! It’s not possible to move past other\n * chunks (replacement characters, tabs, or line endings).\n *\n * @param {Point} point\n * @param {number} offset\n * @returns {undefined}\n */\nfunction movePoint(point, offset) {\n  point.column += offset;\n  point.offset += offset;\n  point._bufferIndex += offset;\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { asciiAlpha, asciiAlphanumeric, asciiAtext, asciiControl } from 'micromark-util-character';\n/** @type {Construct} */\nexport const autolink = {\n  name: 'autolink',\n  tokenize: tokenizeAutolink\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeAutolink(effects, ok, nok) {\n  let size = 0;\n  return start;\n\n  /**\n   * Start of an autolink.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *      ^\n   * > | a<user@example.com>b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"autolink\");\n    effects.enter(\"autolinkMarker\");\n    effects.consume(code);\n    effects.exit(\"autolinkMarker\");\n    effects.enter(\"autolinkProtocol\");\n    return open;\n  }\n\n  /**\n   * After `<`, at protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *       ^\n   * > | a<user@example.com>b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return schemeOrEmailAtext;\n    }\n    if (code === 64) {\n      return nok(code);\n    }\n    return emailAtext(code);\n  }\n\n  /**\n   * At second byte of protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *        ^\n   * > | a<user@example.com>b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function schemeOrEmailAtext(code) {\n    // ASCII alphanumeric and `+`, `-`, and `.`.\n    if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) {\n      // Count the previous alphabetical from `open` too.\n      size = 1;\n      return schemeInsideOrEmailAtext(code);\n    }\n    return emailAtext(code);\n  }\n\n  /**\n   * In ambiguous protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *        ^\n   * > | a<user@example.com>b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function schemeInsideOrEmailAtext(code) {\n    if (code === 58) {\n      effects.consume(code);\n      size = 0;\n      return urlInside;\n    }\n\n    // ASCII alphanumeric and `+`, `-`, and `.`.\n    if ((code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && size++ < 32) {\n      effects.consume(code);\n      return schemeInsideOrEmailAtext;\n    }\n    size = 0;\n    return emailAtext(code);\n  }\n\n  /**\n   * After protocol, in URL.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function urlInside(code) {\n    if (code === 62) {\n      effects.exit(\"autolinkProtocol\");\n      effects.enter(\"autolinkMarker\");\n      effects.consume(code);\n      effects.exit(\"autolinkMarker\");\n      effects.exit(\"autolink\");\n      return ok;\n    }\n\n    // ASCII control, space, or `<`.\n    if (code === null || code === 32 || code === 60 || asciiControl(code)) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return urlInside;\n  }\n\n  /**\n   * In email atext.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailAtext(code) {\n    if (code === 64) {\n      effects.consume(code);\n      return emailAtSignOrDot;\n    }\n    if (asciiAtext(code)) {\n      effects.consume(code);\n      return emailAtext;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In label, after at-sign or dot.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *                 ^       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailAtSignOrDot(code) {\n    return asciiAlphanumeric(code) ? emailLabel(code) : nok(code);\n  }\n\n  /**\n   * In label, where `.` and `>` are allowed.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *                   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailLabel(code) {\n    if (code === 46) {\n      effects.consume(code);\n      size = 0;\n      return emailAtSignOrDot;\n    }\n    if (code === 62) {\n      // Exit, then change the token type.\n      effects.exit(\"autolinkProtocol\").type = \"autolinkEmail\";\n      effects.enter(\"autolinkMarker\");\n      effects.consume(code);\n      effects.exit(\"autolinkMarker\");\n      effects.exit(\"autolink\");\n      return ok;\n    }\n    return emailValue(code);\n  }\n\n  /**\n   * In label, where `.` and `>` are *not* allowed.\n   *\n   * Though, this is also used in `emailLabel` to parse other values.\n   *\n   * ```markdown\n   * > | a<user.name@ex-ample.com>b\n   *                    ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailValue(code) {\n    // ASCII alphanumeric or `-`.\n    if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) {\n      const next = code === 45 ? emailValue : emailLabel;\n      effects.consume(code);\n      return next;\n    }\n    return nok(code);\n  }\n}","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiAlpha, asciiAlphanumeric, markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const htmlText = {\n  name: 'htmlText',\n  tokenize: tokenizeHtmlText\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlText(effects, ok, nok) {\n  const self = this;\n  /** @type {NonNullable<Code> | undefined} */\n  let marker;\n  /** @type {number} */\n  let index;\n  /** @type {State} */\n  let returnState;\n  return start;\n\n  /**\n   * Start of HTML (text).\n   *\n   * ```markdown\n   * > | a <b> c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"htmlText\");\n    effects.enter(\"htmlTextData\");\n    effects.consume(code);\n    return open;\n  }\n\n  /**\n   * After `<`, at tag name or other stuff.\n   *\n   * ```markdown\n   * > | a <b> c\n   *        ^\n   * > | a <!doctype> c\n   *        ^\n   * > | a <!--b--> c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 33) {\n      effects.consume(code);\n      return declarationOpen;\n    }\n    if (code === 47) {\n      effects.consume(code);\n      return tagCloseStart;\n    }\n    if (code === 63) {\n      effects.consume(code);\n      return instruction;\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return tagOpen;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<!`, at declaration, comment, or CDATA.\n   *\n   * ```markdown\n   * > | a <!doctype> c\n   *         ^\n   * > | a <!--b--> c\n   *         ^\n   * > | a <![CDATA[>&<]]> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declarationOpen(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return commentOpenInside;\n    }\n    if (code === 91) {\n      effects.consume(code);\n      index = 0;\n      return cdataOpenInside;\n    }\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return declaration;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In a comment, after `<!-`, at another `-`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentOpenInside(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return commentEnd;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In comment.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function comment(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    if (code === 45) {\n      effects.consume(code);\n      return commentClose;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = comment;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return comment;\n  }\n\n  /**\n   * In comment, after `-`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentClose(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return commentEnd;\n    }\n    return comment(code);\n  }\n\n  /**\n   * In comment, after `--`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentEnd(code) {\n    return code === 62 ? end(code) : code === 45 ? commentClose(code) : comment(code);\n  }\n\n  /**\n   * After `<![`, in CDATA, expecting `CDATA[`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *          ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataOpenInside(code) {\n    const value = \"CDATA[\";\n    if (code === value.charCodeAt(index++)) {\n      effects.consume(code);\n      return index === value.length ? cdata : cdataOpenInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In CDATA.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                ^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdata(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    if (code === 93) {\n      effects.consume(code);\n      return cdataClose;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = cdata;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return cdata;\n  }\n\n  /**\n   * In CDATA, after `]`, at another `]`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                    ^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataClose(code) {\n    if (code === 93) {\n      effects.consume(code);\n      return cdataEnd;\n    }\n    return cdata(code);\n  }\n\n  /**\n   * In CDATA, after `]]`, at `>`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataEnd(code) {\n    if (code === 62) {\n      return end(code);\n    }\n    if (code === 93) {\n      effects.consume(code);\n      return cdataEnd;\n    }\n    return cdata(code);\n  }\n\n  /**\n   * In declaration.\n   *\n   * ```markdown\n   * > | a <!b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declaration(code) {\n    if (code === null || code === 62) {\n      return end(code);\n    }\n    if (markdownLineEnding(code)) {\n      returnState = declaration;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return declaration;\n  }\n\n  /**\n   * In instruction.\n   *\n   * ```markdown\n   * > | a <?b?> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function instruction(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    if (code === 63) {\n      effects.consume(code);\n      return instructionClose;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = instruction;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return instruction;\n  }\n\n  /**\n   * In instruction, after `?`, at `>`.\n   *\n   * ```markdown\n   * > | a <?b?> c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function instructionClose(code) {\n    return code === 62 ? end(code) : instruction(code);\n  }\n\n  /**\n   * After `</`, in closing tag, at tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseStart(code) {\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return tagClose;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `</x`, in a tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagClose(code) {\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return tagClose;\n    }\n    return tagCloseBetween(code);\n  }\n\n  /**\n   * In closing tag, after tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseBetween(code) {\n    if (markdownLineEnding(code)) {\n      returnState = tagCloseBetween;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagCloseBetween;\n    }\n    return end(code);\n  }\n\n  /**\n   * After `<x`, in opening tag name.\n   *\n   * ```markdown\n   * > | a <b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpen(code) {\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return tagOpen;\n    }\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In opening tag, after tag name.\n   *\n   * ```markdown\n   * > | a <b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenBetween(code) {\n    if (code === 47) {\n      effects.consume(code);\n      return end;\n    }\n\n    // ASCII alphabetical and `:` and `_`.\n    if (code === 58 || code === 95 || asciiAlpha(code)) {\n      effects.consume(code);\n      return tagOpenAttributeName;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenBetween;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagOpenBetween;\n    }\n    return end(code);\n  }\n\n  /**\n   * In attribute name.\n   *\n   * ```markdown\n   * > | a <b c> d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeName(code) {\n    // ASCII alphabetical and `-`, `.`, `:`, and `_`.\n    if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return tagOpenAttributeName;\n    }\n    return tagOpenAttributeNameAfter(code);\n  }\n\n  /**\n   * After attribute name, before initializer, the end of the tag, or\n   * whitespace.\n   *\n   * ```markdown\n   * > | a <b c> d\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeNameAfter(code) {\n    if (code === 61) {\n      effects.consume(code);\n      return tagOpenAttributeValueBefore;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeNameAfter;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagOpenAttributeNameAfter;\n    }\n    return tagOpenBetween(code);\n  }\n\n  /**\n   * Before unquoted, double quoted, or single quoted attribute value, allowing\n   * whitespace.\n   *\n   * ```markdown\n   * > | a <b c=d> e\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueBefore(code) {\n    if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\n      return nok(code);\n    }\n    if (code === 34 || code === 39) {\n      effects.consume(code);\n      marker = code;\n      return tagOpenAttributeValueQuoted;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeValueBefore;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagOpenAttributeValueBefore;\n    }\n    effects.consume(code);\n    return tagOpenAttributeValueUnquoted;\n  }\n\n  /**\n   * In double or single quoted attribute value.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueQuoted(code) {\n    if (code === marker) {\n      effects.consume(code);\n      marker = undefined;\n      return tagOpenAttributeValueQuotedAfter;\n    }\n    if (code === null) {\n      return nok(code);\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeValueQuoted;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return tagOpenAttributeValueQuoted;\n  }\n\n  /**\n   * In unquoted attribute value.\n   *\n   * ```markdown\n   * > | a <b c=d> e\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueUnquoted(code) {\n    if (code === null || code === 34 || code === 39 || code === 60 || code === 61 || code === 96) {\n      return nok(code);\n    }\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code);\n    }\n    effects.consume(code);\n    return tagOpenAttributeValueUnquoted;\n  }\n\n  /**\n   * After double or single quoted attribute value, before whitespace or the end\n   * of the tag.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueQuotedAfter(code) {\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In certain circumstances of a tag where only an `>` is allowed.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function end(code) {\n    if (code === 62) {\n      effects.consume(code);\n      effects.exit(\"htmlTextData\");\n      effects.exit(\"htmlText\");\n      return ok;\n    }\n    return nok(code);\n  }\n\n  /**\n   * At eol.\n   *\n   * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   * > | a <!--a\n   *            ^\n   *   | b-->\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingBefore(code) {\n    effects.exit(\"htmlTextData\");\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return lineEndingAfter;\n  }\n\n  /**\n   * After eol, at optional whitespace.\n   *\n   * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   *   | a <!--a\n   * > | b-->\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingAfter(code) {\n    // Always populated by defaults.\n\n    return markdownSpace(code) ? factorySpace(effects, lineEndingAfterPrefix, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : lineEndingAfterPrefix(code);\n  }\n\n  /**\n   * After eol, after optional whitespace.\n   *\n   * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   *   | a <!--a\n   * > | b-->\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingAfterPrefix(code) {\n    effects.enter(\"htmlTextData\");\n    return returnState(code);\n  }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartLink = {\n  name: 'labelStartLink',\n  tokenize: tokenizeLabelStartLink,\n  resolveAll: labelEnd.resolveAll\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartLink(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of label (link) start.\n   *\n   * ```markdown\n   * > | a [b] c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"labelLink\");\n    effects.enter(\"labelMarker\");\n    effects.consume(code);\n    effects.exit(\"labelMarker\");\n    effects.exit(\"labelLink\");\n    return after;\n  }\n\n  /** @type {State} */\n  function after(code) {\n    // To do: this isn’t needed in `micromark-extension-gfm-footnote`,\n    // remove.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n  }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const hardBreakEscape = {\n  name: 'hardBreakEscape',\n  tokenize: tokenizeHardBreakEscape\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHardBreakEscape(effects, ok, nok) {\n  return start;\n\n  /**\n   * Start of a hard break (escape).\n   *\n   * ```markdown\n   * > | a\\\n   *      ^\n   *   | b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"hardBreakEscape\");\n    effects.consume(code);\n    return after;\n  }\n\n  /**\n   * After `\\`, at eol.\n   *\n   * ```markdown\n   * > | a\\\n   *       ^\n   *   | b\n   * ```\n   *\n   *  @type {State}\n   */\n  function after(code) {\n    if (markdownLineEnding(code)) {\n      effects.exit(\"hardBreakEscape\");\n      return ok(code);\n    }\n    return nok(code);\n  }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Previous} Previous\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const codeText = {\n  name: 'codeText',\n  tokenize: tokenizeCodeText,\n  resolve: resolveCodeText,\n  previous\n};\n\n// To do: next major: don’t resolve, like `markdown-rs`.\n/** @type {Resolver} */\nfunction resolveCodeText(events) {\n  let tailExitIndex = events.length - 4;\n  let headEnterIndex = 3;\n  /** @type {number} */\n  let index;\n  /** @type {number | undefined} */\n  let enter;\n\n  // If we start and end with an EOL or a space.\n  if ((events[headEnterIndex][1].type === \"lineEnding\" || events[headEnterIndex][1].type === 'space') && (events[tailExitIndex][1].type === \"lineEnding\" || events[tailExitIndex][1].type === 'space')) {\n    index = headEnterIndex;\n\n    // And we have data.\n    while (++index < tailExitIndex) {\n      if (events[index][1].type === \"codeTextData\") {\n        // Then we have padding.\n        events[headEnterIndex][1].type = \"codeTextPadding\";\n        events[tailExitIndex][1].type = \"codeTextPadding\";\n        headEnterIndex += 2;\n        tailExitIndex -= 2;\n        break;\n      }\n    }\n  }\n\n  // Merge adjacent spaces and data.\n  index = headEnterIndex - 1;\n  tailExitIndex++;\n  while (++index <= tailExitIndex) {\n    if (enter === undefined) {\n      if (index !== tailExitIndex && events[index][1].type !== \"lineEnding\") {\n        enter = index;\n      }\n    } else if (index === tailExitIndex || events[index][1].type === \"lineEnding\") {\n      events[enter][1].type = \"codeTextData\";\n      if (index !== enter + 2) {\n        events[enter][1].end = events[index - 1][1].end;\n        events.splice(enter + 2, index - enter - 2);\n        tailExitIndex -= index - enter - 2;\n        index = enter + 2;\n      }\n      enter = undefined;\n    }\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Previous}\n */\nfunction previous(code) {\n  // If there is a previous code, there will always be a tail.\n  return code !== 96 || this.events[this.events.length - 1][1].type === \"characterEscape\";\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCodeText(effects, ok, nok) {\n  const self = this;\n  let sizeOpen = 0;\n  /** @type {number} */\n  let size;\n  /** @type {Token} */\n  let token;\n  return start;\n\n  /**\n   * Start of code (text).\n   *\n   * ```markdown\n   * > | `a`\n   *     ^\n   * > | \\`a`\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"codeText\");\n    effects.enter(\"codeTextSequence\");\n    return sequenceOpen(code);\n  }\n\n  /**\n   * In opening sequence.\n   *\n   * ```markdown\n   * > | `a`\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === 96) {\n      effects.consume(code);\n      sizeOpen++;\n      return sequenceOpen;\n    }\n    effects.exit(\"codeTextSequence\");\n    return between(code);\n  }\n\n  /**\n   * Between something and something else.\n   *\n   * ```markdown\n   * > | `a`\n   *      ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function between(code) {\n    // EOF.\n    if (code === null) {\n      return nok(code);\n    }\n\n    // To do: next major: don’t do spaces in resolve, but when compiling,\n    // like `markdown-rs`.\n    // Tabs don’t work, and virtual spaces don’t make sense.\n    if (code === 32) {\n      effects.enter('space');\n      effects.consume(code);\n      effects.exit('space');\n      return between;\n    }\n\n    // Closing fence? Could also be data.\n    if (code === 96) {\n      token = effects.enter(\"codeTextSequence\");\n      size = 0;\n      return sequenceClose(code);\n    }\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return between;\n    }\n\n    // Data.\n    effects.enter(\"codeTextData\");\n    return data(code);\n  }\n\n  /**\n   * In data.\n   *\n   * ```markdown\n   * > | `a`\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function data(code) {\n    if (code === null || code === 32 || code === 96 || markdownLineEnding(code)) {\n      effects.exit(\"codeTextData\");\n      return between(code);\n    }\n    effects.consume(code);\n    return data;\n  }\n\n  /**\n   * In closing sequence.\n   *\n   * ```markdown\n   * > | `a`\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceClose(code) {\n    // More.\n    if (code === 96) {\n      effects.consume(code);\n      size++;\n      return sequenceClose;\n    }\n\n    // Done!\n    if (size === sizeOpen) {\n      effects.exit(\"codeTextSequence\");\n      effects.exit(\"codeText\");\n      return ok(code);\n    }\n\n    // More or less accents: mark as data.\n    token.type = \"codeTextData\";\n    return data(code);\n  }\n}","/**\n * @typedef {import('micromark-util-types').Extension} Extension\n */\n\nimport {\n  attention,\n  autolink,\n  blockQuote,\n  characterEscape,\n  characterReference,\n  codeFenced,\n  codeIndented,\n  codeText,\n  definition,\n  hardBreakEscape,\n  headingAtx,\n  htmlFlow,\n  htmlText,\n  labelEnd,\n  labelStartImage,\n  labelStartLink,\n  lineEnding,\n  list,\n  setextUnderline,\n  thematicBreak\n} from 'micromark-core-commonmark'\nimport {resolver as resolveText} from './initialize/text.js'\n\n/** @satisfies {Extension['document']} */\nexport const document = {\n  [42]: list,\n  [43]: list,\n  [45]: list,\n  [48]: list,\n  [49]: list,\n  [50]: list,\n  [51]: list,\n  [52]: list,\n  [53]: list,\n  [54]: list,\n  [55]: list,\n  [56]: list,\n  [57]: list,\n  [62]: blockQuote\n}\n\n/** @satisfies {Extension['contentInitial']} */\nexport const contentInitial = {\n  [91]: definition\n}\n\n/** @satisfies {Extension['flowInitial']} */\nexport const flowInitial = {\n  [-2]: codeIndented,\n  [-1]: codeIndented,\n  [32]: codeIndented\n}\n\n/** @satisfies {Extension['flow']} */\nexport const flow = {\n  [35]: headingAtx,\n  [42]: thematicBreak,\n  [45]: [setextUnderline, thematicBreak],\n  [60]: htmlFlow,\n  [61]: setextUnderline,\n  [95]: thematicBreak,\n  [96]: codeFenced,\n  [126]: codeFenced\n}\n\n/** @satisfies {Extension['string']} */\nexport const string = {\n  [38]: characterReference,\n  [92]: characterEscape\n}\n\n/** @satisfies {Extension['text']} */\nexport const text = {\n  [-5]: lineEnding,\n  [-4]: lineEnding,\n  [-3]: lineEnding,\n  [33]: labelStartImage,\n  [38]: characterReference,\n  [42]: attention,\n  [60]: [autolink, htmlText],\n  [91]: labelStartLink,\n  [92]: [hardBreakEscape, characterEscape],\n  [93]: labelEnd,\n  [95]: attention,\n  [96]: codeText\n}\n\n/** @satisfies {Extension['insideSpan']} */\nexport const insideSpan = {\n  null: [attention, resolveText]\n}\n\n/** @satisfies {Extension['attentionMarkers']} */\nexport const attentionMarkers = {\n  null: [42, 95]\n}\n\n/** @satisfies {Extension['disable']} */\nexport const disable = {\n  null: []\n}\n","/**\n * @typedef {import('micromark-util-types').Create} Create\n * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').ParseContext} ParseContext\n * @typedef {import('micromark-util-types').ParseOptions} ParseOptions\n */\n\nimport {combineExtensions} from 'micromark-util-combine-extensions'\nimport {content} from './initialize/content.js'\nimport {document} from './initialize/document.js'\nimport {flow} from './initialize/flow.js'\nimport {string, text} from './initialize/text.js'\nimport {createTokenizer} from './create-tokenizer.js'\nimport * as defaultConstructs from './constructs.js'\n\n/**\n * @param {ParseOptions | null | undefined} [options]\n * @returns {ParseContext}\n */\nexport function parse(options) {\n  const settings = options || {}\n  const constructs =\n    /** @type {FullNormalizedExtension} */\n    combineExtensions([defaultConstructs, ...(settings.extensions || [])])\n\n  /** @type {ParseContext} */\n  const parser = {\n    defined: [],\n    lazy: {},\n    constructs,\n    content: create(content),\n    document: create(document),\n    flow: create(flow),\n    string: create(string),\n    text: create(text)\n  }\n  return parser\n\n  /**\n   * @param {InitialConstruct} initial\n   */\n  function create(initial) {\n    return creator\n    /** @type {Create} */\n    function creator(from) {\n      return createTokenizer(parser, initial, from)\n    }\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Encoding} Encoding\n * @typedef {import('micromark-util-types').Value} Value\n */\n\n/**\n * @callback Preprocessor\n * @param {Value} value\n * @param {Encoding | null | undefined} [encoding]\n * @param {boolean | null | undefined} [end=false]\n * @returns {Array<Chunk>}\n */\n\nconst search = /[\\0\\t\\n\\r]/g\n\n/**\n * @returns {Preprocessor}\n */\nexport function preprocess() {\n  let column = 1\n  let buffer = ''\n  /** @type {boolean | undefined} */\n  let start = true\n  /** @type {boolean | undefined} */\n  let atCarriageReturn\n  return preprocessor\n\n  /** @type {Preprocessor} */\n  // eslint-disable-next-line complexity\n  function preprocessor(value, encoding, end) {\n    /** @type {Array<Chunk>} */\n    const chunks = []\n    /** @type {RegExpMatchArray | null} */\n    let match\n    /** @type {number} */\n    let next\n    /** @type {number} */\n    let startPosition\n    /** @type {number} */\n    let endPosition\n    /** @type {Code} */\n    let code\n    value =\n      buffer +\n      (typeof value === 'string'\n        ? value.toString()\n        : new TextDecoder(encoding || undefined).decode(value))\n    startPosition = 0\n    buffer = ''\n    if (start) {\n      // To do: `markdown-rs` actually parses BOMs (byte order mark).\n      if (value.charCodeAt(0) === 65279) {\n        startPosition++\n      }\n      start = undefined\n    }\n    while (startPosition < value.length) {\n      search.lastIndex = startPosition\n      match = search.exec(value)\n      endPosition =\n        match && match.index !== undefined ? match.index : value.length\n      code = value.charCodeAt(endPosition)\n      if (!match) {\n        buffer = value.slice(startPosition)\n        break\n      }\n      if (code === 10 && startPosition === endPosition && atCarriageReturn) {\n        chunks.push(-3)\n        atCarriageReturn = undefined\n      } else {\n        if (atCarriageReturn) {\n          chunks.push(-5)\n          atCarriageReturn = undefined\n        }\n        if (startPosition < endPosition) {\n          chunks.push(value.slice(startPosition, endPosition))\n          column += endPosition - startPosition\n        }\n        switch (code) {\n          case 0: {\n            chunks.push(65533)\n            column++\n            break\n          }\n          case 9: {\n            next = Math.ceil(column / 4) * 4\n            chunks.push(-2)\n            while (column++ < next) chunks.push(-1)\n            break\n          }\n          case 10: {\n            chunks.push(-4)\n            column = 1\n            break\n          }\n          default: {\n            atCarriageReturn = true\n            column = 1\n          }\n        }\n      }\n      startPosition = endPosition + 1\n    }\n    if (end) {\n      if (atCarriageReturn) chunks.push(-5)\n      if (buffer) chunks.push(buffer)\n      chunks.push(null)\n    }\n    return chunks\n  }\n}\n","/**\n * Turn the number (in string form as either hexa- or plain decimal) coming from\n * a numeric character reference into a character.\n *\n * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes\n * non-characters and control characters safe.\n *\n * @param {string} value\n *   Value to decode.\n * @param {number} base\n *   Numeric base.\n * @returns {string}\n *   Character.\n */\nexport function decodeNumericCharacterReference(value, base) {\n  const code = Number.parseInt(value, base);\n  if (\n  // C0 except for HT, LF, FF, CR, space.\n  code < 9 || code === 11 || code > 13 && code < 32 ||\n  // Control character (DEL) of C0, and C1 controls.\n  code > 126 && code < 160 ||\n  // Lone high surrogates and low surrogates.\n  code > 55_295 && code < 57_344 ||\n  // Noncharacters.\n  code > 64_975 && code < 65_008 || /* eslint-disable no-bitwise */\n  (code & 65_535) === 65_535 || (code & 65_535) === 65_534 || /* eslint-enable no-bitwise */\n  // Out of range\n  code > 1_114_111) {\n    return \"\\uFFFD\";\n  }\n  return String.fromCodePoint(code);\n}","import {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {decodeNumericCharacterReference} from 'micromark-util-decode-numeric-character-reference'\nconst characterEscapeOrReference =\n  /\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi\n\n/**\n * Decode markdown strings (which occur in places such as fenced code info\n * strings, destinations, labels, and titles).\n *\n * The “string” content type allows character escapes and -references.\n * This decodes those.\n *\n * @param {string} value\n *   Value to decode.\n * @returns {string}\n *   Decoded value.\n */\nexport function decodeString(value) {\n  return value.replace(characterEscapeOrReference, decode)\n}\n\n/**\n * @param {string} $0\n * @param {string} $1\n * @param {string} $2\n * @returns {string}\n */\nfunction decode($0, $1, $2) {\n  if ($1) {\n    // Escape.\n    return $1\n  }\n\n  // Reference.\n  const head = $2.charCodeAt(0)\n  if (head === 35) {\n    const head = $2.charCodeAt(1)\n    const hex = head === 120 || head === 88\n    return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10)\n  }\n  return decodeNamedCharacterReference($2) || $0\n}\n","/**\n * @typedef {import('mdast').Break} Break\n * @typedef {import('mdast').Blockquote} Blockquote\n * @typedef {import('mdast').Code} Code\n * @typedef {import('mdast').Definition} Definition\n * @typedef {import('mdast').Emphasis} Emphasis\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('mdast').Html} Html\n * @typedef {import('mdast').Image} Image\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Link} Link\n * @typedef {import('mdast').List} List\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Nodes} Nodes\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast').Parent} Parent\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n * @typedef {import('mdast').ReferenceType} ReferenceType\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast').Strong} Strong\n * @typedef {import('mdast').Text} Text\n * @typedef {import('mdast').ThematicBreak} ThematicBreak\n *\n * @typedef {import('micromark-util-types').Encoding} Encoding\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').ParseOptions} ParseOptions\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Value} Value\n *\n * @typedef {import('unist').Point} Point\n *\n * @typedef {import('../index.js').CompileData} CompileData\n */\n\n/**\n * @typedef {Omit<Parent, 'children' | 'type'> & {type: 'fragment', children: Array<PhrasingContent>}} Fragment\n */\n\n/**\n * @callback Transform\n *   Extra transform, to change the AST afterwards.\n * @param {Root} tree\n *   Tree to transform.\n * @returns {Root | null | undefined | void}\n *   New tree or nothing (in which case the current tree is used).\n *\n * @callback Handle\n *   Handle a token.\n * @param {CompileContext} this\n *   Context.\n * @param {Token} token\n *   Current token.\n * @returns {undefined | void}\n *   Nothing.\n *\n * @typedef {Record<string, Handle>} Handles\n *   Token types mapping to handles\n *\n * @callback OnEnterError\n *   Handle the case where the `right` token is open, but it is closed (by the\n *   `left` token) or because we reached the end of the document.\n * @param {Omit<CompileContext, 'sliceSerialize'>} this\n *   Context.\n * @param {Token | undefined} left\n *   Left token.\n * @param {Token} right\n *   Right token.\n * @returns {undefined}\n *   Nothing.\n *\n * @callback OnExitError\n *   Handle the case where the `right` token is open but it is closed by\n *   exiting the `left` token.\n * @param {Omit<CompileContext, 'sliceSerialize'>} this\n *   Context.\n * @param {Token} left\n *   Left token.\n * @param {Token} right\n *   Right token.\n * @returns {undefined}\n *   Nothing.\n *\n * @typedef {[Token, OnEnterError | undefined]} TokenTuple\n *   Open token on the stack, with an optional error handler for when\n *   that token isn’t closed properly.\n */\n\n/**\n * @typedef Config\n *   Configuration.\n *\n *   We have our defaults, but extensions will add more.\n * @property {Array<string>} canContainEols\n *   Token types where line endings are used.\n * @property {Handles} enter\n *   Opening handles.\n * @property {Handles} exit\n *   Closing handles.\n * @property {Array<Transform>} transforms\n *   Tree transforms.\n *\n * @typedef {Partial<Config>} Extension\n *   Change how markdown tokens from micromark are turned into mdast.\n *\n * @typedef CompileContext\n *   mdast compiler context.\n * @property {Array<Fragment | Nodes>} stack\n *   Stack of nodes.\n * @property {Array<TokenTuple>} tokenStack\n *   Stack of tokens.\n * @property {(this: CompileContext) => undefined} buffer\n *   Capture some of the output data.\n * @property {(this: CompileContext) => string} resume\n *   Stop capturing and access the output data.\n * @property {(this: CompileContext, node: Nodes, token: Token, onError?: OnEnterError) => undefined} enter\n *   Enter a node.\n * @property {(this: CompileContext, token: Token, onError?: OnExitError) => undefined} exit\n *   Exit a node.\n * @property {TokenizeContext['sliceSerialize']} sliceSerialize\n *   Get the string value of a token.\n * @property {Config} config\n *   Configuration.\n * @property {CompileData} data\n *   Info passed around; key/value store.\n *\n * @typedef FromMarkdownOptions\n *   Configuration for how to build mdast.\n * @property {Array<Extension | Array<Extension>> | null | undefined} [mdastExtensions]\n *   Extensions for this utility to change how tokens are turned into a tree.\n *\n * @typedef {ParseOptions & FromMarkdownOptions} Options\n *   Configuration.\n */\n\nimport { toString } from 'mdast-util-to-string';\nimport { parse, postprocess, preprocess } from 'micromark';\nimport { decodeNumericCharacterReference } from 'micromark-util-decode-numeric-character-reference';\nimport { decodeString } from 'micromark-util-decode-string';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { stringifyPosition } from 'unist-util-stringify-position';\nconst own = {}.hasOwnProperty;\n\n/**\n * Turn markdown into a syntax tree.\n *\n * @overload\n * @param {Value} value\n * @param {Encoding | null | undefined} [encoding]\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @overload\n * @param {Value} value\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @param {Value} value\n *   Markdown to parse.\n * @param {Encoding | Options | null | undefined} [encoding]\n *   Character encoding for when `value` is `Buffer`.\n * @param {Options | null | undefined} [options]\n *   Configuration.\n * @returns {Root}\n *   mdast tree.\n */\nexport function fromMarkdown(value, encoding, options) {\n  if (typeof encoding !== 'string') {\n    options = encoding;\n    encoding = undefined;\n  }\n  return compiler(options)(postprocess(parse(options).document().write(preprocess()(value, encoding, true))));\n}\n\n/**\n * Note this compiler only understand complete buffering, not streaming.\n *\n * @param {Options | null | undefined} [options]\n */\nfunction compiler(options) {\n  /** @type {Config} */\n  const config = {\n    transforms: [],\n    canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'],\n    enter: {\n      autolink: opener(link),\n      autolinkProtocol: onenterdata,\n      autolinkEmail: onenterdata,\n      atxHeading: opener(heading),\n      blockQuote: opener(blockQuote),\n      characterEscape: onenterdata,\n      characterReference: onenterdata,\n      codeFenced: opener(codeFlow),\n      codeFencedFenceInfo: buffer,\n      codeFencedFenceMeta: buffer,\n      codeIndented: opener(codeFlow, buffer),\n      codeText: opener(codeText, buffer),\n      codeTextData: onenterdata,\n      data: onenterdata,\n      codeFlowValue: onenterdata,\n      definition: opener(definition),\n      definitionDestinationString: buffer,\n      definitionLabelString: buffer,\n      definitionTitleString: buffer,\n      emphasis: opener(emphasis),\n      hardBreakEscape: opener(hardBreak),\n      hardBreakTrailing: opener(hardBreak),\n      htmlFlow: opener(html, buffer),\n      htmlFlowData: onenterdata,\n      htmlText: opener(html, buffer),\n      htmlTextData: onenterdata,\n      image: opener(image),\n      label: buffer,\n      link: opener(link),\n      listItem: opener(listItem),\n      listItemValue: onenterlistitemvalue,\n      listOrdered: opener(list, onenterlistordered),\n      listUnordered: opener(list),\n      paragraph: opener(paragraph),\n      reference: onenterreference,\n      referenceString: buffer,\n      resourceDestinationString: buffer,\n      resourceTitleString: buffer,\n      setextHeading: opener(heading),\n      strong: opener(strong),\n      thematicBreak: opener(thematicBreak)\n    },\n    exit: {\n      atxHeading: closer(),\n      atxHeadingSequence: onexitatxheadingsequence,\n      autolink: closer(),\n      autolinkEmail: onexitautolinkemail,\n      autolinkProtocol: onexitautolinkprotocol,\n      blockQuote: closer(),\n      characterEscapeValue: onexitdata,\n      characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,\n      characterReferenceMarkerNumeric: onexitcharacterreferencemarker,\n      characterReferenceValue: onexitcharacterreferencevalue,\n      characterReference: onexitcharacterreference,\n      codeFenced: closer(onexitcodefenced),\n      codeFencedFence: onexitcodefencedfence,\n      codeFencedFenceInfo: onexitcodefencedfenceinfo,\n      codeFencedFenceMeta: onexitcodefencedfencemeta,\n      codeFlowValue: onexitdata,\n      codeIndented: closer(onexitcodeindented),\n      codeText: closer(onexitcodetext),\n      codeTextData: onexitdata,\n      data: onexitdata,\n      definition: closer(),\n      definitionDestinationString: onexitdefinitiondestinationstring,\n      definitionLabelString: onexitdefinitionlabelstring,\n      definitionTitleString: onexitdefinitiontitlestring,\n      emphasis: closer(),\n      hardBreakEscape: closer(onexithardbreak),\n      hardBreakTrailing: closer(onexithardbreak),\n      htmlFlow: closer(onexithtmlflow),\n      htmlFlowData: onexitdata,\n      htmlText: closer(onexithtmltext),\n      htmlTextData: onexitdata,\n      image: closer(onexitimage),\n      label: onexitlabel,\n      labelText: onexitlabeltext,\n      lineEnding: onexitlineending,\n      link: closer(onexitlink),\n      listItem: closer(),\n      listOrdered: closer(),\n      listUnordered: closer(),\n      paragraph: closer(),\n      referenceString: onexitreferencestring,\n      resourceDestinationString: onexitresourcedestinationstring,\n      resourceTitleString: onexitresourcetitlestring,\n      resource: onexitresource,\n      setextHeading: closer(onexitsetextheading),\n      setextHeadingLineSequence: onexitsetextheadinglinesequence,\n      setextHeadingText: onexitsetextheadingtext,\n      strong: closer(),\n      thematicBreak: closer()\n    }\n  };\n  configure(config, (options || {}).mdastExtensions || []);\n\n  /** @type {CompileData} */\n  const data = {};\n  return compile;\n\n  /**\n   * Turn micromark events into an mdast tree.\n   *\n   * @param {Array<Event>} events\n   *   Events.\n   * @returns {Root}\n   *   mdast tree.\n   */\n  function compile(events) {\n    /** @type {Root} */\n    let tree = {\n      type: 'root',\n      children: []\n    };\n    /** @type {Omit<CompileContext, 'sliceSerialize'>} */\n    const context = {\n      stack: [tree],\n      tokenStack: [],\n      config,\n      enter,\n      exit,\n      buffer,\n      resume,\n      data\n    };\n    /** @type {Array<number>} */\n    const listStack = [];\n    let index = -1;\n    while (++index < events.length) {\n      // We preprocess lists to add `listItem` tokens, and to infer whether\n      // items the list itself are spread out.\n      if (events[index][1].type === \"listOrdered\" || events[index][1].type === \"listUnordered\") {\n        if (events[index][0] === 'enter') {\n          listStack.push(index);\n        } else {\n          const tail = listStack.pop();\n          index = prepareList(events, tail, index);\n        }\n      }\n    }\n    index = -1;\n    while (++index < events.length) {\n      const handler = config[events[index][0]];\n      if (own.call(handler, events[index][1].type)) {\n        handler[events[index][1].type].call(Object.assign({\n          sliceSerialize: events[index][2].sliceSerialize\n        }, context), events[index][1]);\n      }\n    }\n\n    // Handle tokens still being open.\n    if (context.tokenStack.length > 0) {\n      const tail = context.tokenStack[context.tokenStack.length - 1];\n      const handler = tail[1] || defaultOnError;\n      handler.call(context, undefined, tail[0]);\n    }\n\n    // Figure out `root` position.\n    tree.position = {\n      start: point(events.length > 0 ? events[0][1].start : {\n        line: 1,\n        column: 1,\n        offset: 0\n      }),\n      end: point(events.length > 0 ? events[events.length - 2][1].end : {\n        line: 1,\n        column: 1,\n        offset: 0\n      })\n    };\n\n    // Call transforms.\n    index = -1;\n    while (++index < config.transforms.length) {\n      tree = config.transforms[index](tree) || tree;\n    }\n    return tree;\n  }\n\n  /**\n   * @param {Array<Event>} events\n   * @param {number} start\n   * @param {number} length\n   * @returns {number}\n   */\n  function prepareList(events, start, length) {\n    let index = start - 1;\n    let containerBalance = -1;\n    let listSpread = false;\n    /** @type {Token | undefined} */\n    let listItem;\n    /** @type {number | undefined} */\n    let lineIndex;\n    /** @type {number | undefined} */\n    let firstBlankLineIndex;\n    /** @type {boolean | undefined} */\n    let atMarker;\n    while (++index <= length) {\n      const event = events[index];\n      switch (event[1].type) {\n        case \"listUnordered\":\n        case \"listOrdered\":\n        case \"blockQuote\":\n          {\n            if (event[0] === 'enter') {\n              containerBalance++;\n            } else {\n              containerBalance--;\n            }\n            atMarker = undefined;\n            break;\n          }\n        case \"lineEndingBlank\":\n          {\n            if (event[0] === 'enter') {\n              if (listItem && !atMarker && !containerBalance && !firstBlankLineIndex) {\n                firstBlankLineIndex = index;\n              }\n              atMarker = undefined;\n            }\n            break;\n          }\n        case \"linePrefix\":\n        case \"listItemValue\":\n        case \"listItemMarker\":\n        case \"listItemPrefix\":\n        case \"listItemPrefixWhitespace\":\n          {\n            // Empty.\n\n            break;\n          }\n        default:\n          {\n            atMarker = undefined;\n          }\n      }\n      if (!containerBalance && event[0] === 'enter' && event[1].type === \"listItemPrefix\" || containerBalance === -1 && event[0] === 'exit' && (event[1].type === \"listUnordered\" || event[1].type === \"listOrdered\")) {\n        if (listItem) {\n          let tailIndex = index;\n          lineIndex = undefined;\n          while (tailIndex--) {\n            const tailEvent = events[tailIndex];\n            if (tailEvent[1].type === \"lineEnding\" || tailEvent[1].type === \"lineEndingBlank\") {\n              if (tailEvent[0] === 'exit') continue;\n              if (lineIndex) {\n                events[lineIndex][1].type = \"lineEndingBlank\";\n                listSpread = true;\n              }\n              tailEvent[1].type = \"lineEnding\";\n              lineIndex = tailIndex;\n            } else if (tailEvent[1].type === \"linePrefix\" || tailEvent[1].type === \"blockQuotePrefix\" || tailEvent[1].type === \"blockQuotePrefixWhitespace\" || tailEvent[1].type === \"blockQuoteMarker\" || tailEvent[1].type === \"listItemIndent\") {\n              // Empty\n            } else {\n              break;\n            }\n          }\n          if (firstBlankLineIndex && (!lineIndex || firstBlankLineIndex < lineIndex)) {\n            listItem._spread = true;\n          }\n\n          // Fix position.\n          listItem.end = Object.assign({}, lineIndex ? events[lineIndex][1].start : event[1].end);\n          events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]);\n          index++;\n          length++;\n        }\n\n        // Create a new list item.\n        if (event[1].type === \"listItemPrefix\") {\n          /** @type {Token} */\n          const item = {\n            type: 'listItem',\n            _spread: false,\n            start: Object.assign({}, event[1].start),\n            // @ts-expect-error: we’ll add `end` in a second.\n            end: undefined\n          };\n          listItem = item;\n          events.splice(index, 0, ['enter', item, event[2]]);\n          index++;\n          length++;\n          firstBlankLineIndex = undefined;\n          atMarker = true;\n        }\n      }\n    }\n    events[start][1]._spread = listSpread;\n    return length;\n  }\n\n  /**\n   * Create an opener handle.\n   *\n   * @param {(token: Token) => Nodes} create\n   *   Create a node.\n   * @param {Handle | undefined} [and]\n   *   Optional function to also run.\n   * @returns {Handle}\n   *   Handle.\n   */\n  function opener(create, and) {\n    return open;\n\n    /**\n     * @this {CompileContext}\n     * @param {Token} token\n     * @returns {undefined}\n     */\n    function open(token) {\n      enter.call(this, create(token), token);\n      if (and) and.call(this, token);\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @returns {undefined}\n   */\n  function buffer() {\n    this.stack.push({\n      type: 'fragment',\n      children: []\n    });\n  }\n\n  /**\n   * @this {CompileContext}\n   *   Context.\n   * @param {Nodes} node\n   *   Node to enter.\n   * @param {Token} token\n   *   Corresponding token.\n   * @param {OnEnterError | undefined} [errorHandler]\n   *   Handle the case where this token is open, but it is closed by something else.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function enter(node, token, errorHandler) {\n    const parent = this.stack[this.stack.length - 1];\n    /** @type {Array<Nodes>} */\n    const siblings = parent.children;\n    siblings.push(node);\n    this.stack.push(node);\n    this.tokenStack.push([token, errorHandler]);\n    node.position = {\n      start: point(token.start),\n      // @ts-expect-error: `end` will be patched later.\n      end: undefined\n    };\n  }\n\n  /**\n   * Create a closer handle.\n   *\n   * @param {Handle | undefined} [and]\n   *   Optional function to also run.\n   * @returns {Handle}\n   *   Handle.\n   */\n  function closer(and) {\n    return close;\n\n    /**\n     * @this {CompileContext}\n     * @param {Token} token\n     * @returns {undefined}\n     */\n    function close(token) {\n      if (and) and.call(this, token);\n      exit.call(this, token);\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   *   Context.\n   * @param {Token} token\n   *   Corresponding token.\n   * @param {OnExitError | undefined} [onExitError]\n   *   Handle the case where another token is open.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function exit(token, onExitError) {\n    const node = this.stack.pop();\n    const open = this.tokenStack.pop();\n    if (!open) {\n      throw new Error('Cannot close `' + token.type + '` (' + stringifyPosition({\n        start: token.start,\n        end: token.end\n      }) + '): it’s not open');\n    } else if (open[0].type !== token.type) {\n      if (onExitError) {\n        onExitError.call(this, token, open[0]);\n      } else {\n        const handler = open[1] || defaultOnError;\n        handler.call(this, token, open[0]);\n      }\n    }\n    node.position.end = point(token.end);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @returns {string}\n   */\n  function resume() {\n    return toString(this.stack.pop());\n  }\n\n  //\n  // Handlers.\n  //\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterlistordered() {\n    this.data.expectingFirstListItemValue = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterlistitemvalue(token) {\n    if (this.data.expectingFirstListItemValue) {\n      const ancestor = this.stack[this.stack.length - 2];\n      ancestor.start = Number.parseInt(this.sliceSerialize(token), 10);\n      this.data.expectingFirstListItemValue = undefined;\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfenceinfo() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.lang = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfencemeta() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.meta = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfence() {\n    // Exit if this is the closing fence.\n    if (this.data.flowCodeInside) return;\n    this.buffer();\n    this.data.flowCodeInside = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefenced() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data.replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g, '');\n    this.data.flowCodeInside = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodeindented() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data.replace(/(\\r?\\n|\\r)$/g, '');\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitionlabelstring(token) {\n    const label = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.label = label;\n    node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitiontitlestring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.title = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitiondestinationstring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.url = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitatxheadingsequence(token) {\n    const node = this.stack[this.stack.length - 1];\n    if (!node.depth) {\n      const depth = this.sliceSerialize(token).length;\n      node.depth = depth;\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheadingtext() {\n    this.data.setextHeadingSlurpLineEnding = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheadinglinesequence(token) {\n    const node = this.stack[this.stack.length - 1];\n    node.depth = this.sliceSerialize(token).codePointAt(0) === 61 ? 1 : 2;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheading() {\n    this.data.setextHeadingSlurpLineEnding = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onenterdata(token) {\n    const node = this.stack[this.stack.length - 1];\n    /** @type {Array<Nodes>} */\n    const siblings = node.children;\n    let tail = siblings[siblings.length - 1];\n    if (!tail || tail.type !== 'text') {\n      // Add a new text node.\n      tail = text();\n      tail.position = {\n        start: point(token.start),\n        // @ts-expect-error: we’ll add `end` later.\n        end: undefined\n      };\n      siblings.push(tail);\n    }\n    this.stack.push(tail);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitdata(token) {\n    const tail = this.stack.pop();\n    tail.value += this.sliceSerialize(token);\n    tail.position.end = point(token.end);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlineending(token) {\n    const context = this.stack[this.stack.length - 1];\n    // If we’re at a hard break, include the line ending in there.\n    if (this.data.atHardBreak) {\n      const tail = context.children[context.children.length - 1];\n      tail.position.end = point(token.end);\n      this.data.atHardBreak = undefined;\n      return;\n    }\n    if (!this.data.setextHeadingSlurpLineEnding && config.canContainEols.includes(context.type)) {\n      onenterdata.call(this, token);\n      onexitdata.call(this, token);\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithardbreak() {\n    this.data.atHardBreak = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithtmlflow() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithtmltext() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitcodetext() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlink() {\n    const node = this.stack[this.stack.length - 1];\n    // Note: there are also `identifier` and `label` fields on this link node!\n    // These are used / cleaned here.\n\n    // To do: clean.\n    if (this.data.inReference) {\n      /** @type {ReferenceType} */\n      const referenceType = this.data.referenceType || 'shortcut';\n      node.type += 'Reference';\n      // @ts-expect-error: mutate.\n      node.referenceType = referenceType;\n      // @ts-expect-error: mutate.\n      delete node.url;\n      delete node.title;\n    } else {\n      // @ts-expect-error: mutate.\n      delete node.identifier;\n      // @ts-expect-error: mutate.\n      delete node.label;\n    }\n    this.data.referenceType = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitimage() {\n    const node = this.stack[this.stack.length - 1];\n    // Note: there are also `identifier` and `label` fields on this link node!\n    // These are used / cleaned here.\n\n    // To do: clean.\n    if (this.data.inReference) {\n      /** @type {ReferenceType} */\n      const referenceType = this.data.referenceType || 'shortcut';\n      node.type += 'Reference';\n      // @ts-expect-error: mutate.\n      node.referenceType = referenceType;\n      // @ts-expect-error: mutate.\n      delete node.url;\n      delete node.title;\n    } else {\n      // @ts-expect-error: mutate.\n      delete node.identifier;\n      // @ts-expect-error: mutate.\n      delete node.label;\n    }\n    this.data.referenceType = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlabeltext(token) {\n    const string = this.sliceSerialize(token);\n    const ancestor = this.stack[this.stack.length - 2];\n    // @ts-expect-error: stash this on the node, as it might become a reference\n    // later.\n    ancestor.label = decodeString(string);\n    // @ts-expect-error: same as above.\n    ancestor.identifier = normalizeIdentifier(string).toLowerCase();\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlabel() {\n    const fragment = this.stack[this.stack.length - 1];\n    const value = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    // Assume a reference.\n    this.data.inReference = true;\n    if (node.type === 'link') {\n      /** @type {Array<PhrasingContent>} */\n      const children = fragment.children;\n      node.children = children;\n    } else {\n      node.alt = value;\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresourcedestinationstring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.url = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresourcetitlestring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.title = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresource() {\n    this.data.inReference = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onenterreference() {\n    this.data.referenceType = 'collapsed';\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitreferencestring(token) {\n    const label = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    // @ts-expect-error: stash this on the node, as it might become a reference\n    // later.\n    node.label = label;\n    // @ts-expect-error: same as above.\n    node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n    this.data.referenceType = 'full';\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitcharacterreferencemarker(token) {\n    this.data.characterReferenceType = token.type;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcharacterreferencevalue(token) {\n    const data = this.sliceSerialize(token);\n    const type = this.data.characterReferenceType;\n    /** @type {string} */\n    let value;\n    if (type) {\n      value = decodeNumericCharacterReference(data, type === \"characterReferenceMarkerNumeric\" ? 10 : 16);\n      this.data.characterReferenceType = undefined;\n    } else {\n      const result = decodeNamedCharacterReference(data);\n      value = result;\n    }\n    const tail = this.stack[this.stack.length - 1];\n    tail.value += value;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcharacterreference(token) {\n    const tail = this.stack.pop();\n    tail.position.end = point(token.end);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitautolinkprotocol(token) {\n    onexitdata.call(this, token);\n    const node = this.stack[this.stack.length - 1];\n    node.url = this.sliceSerialize(token);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitautolinkemail(token) {\n    onexitdata.call(this, token);\n    const node = this.stack[this.stack.length - 1];\n    node.url = 'mailto:' + this.sliceSerialize(token);\n  }\n\n  //\n  // Creaters.\n  //\n\n  /** @returns {Blockquote} */\n  function blockQuote() {\n    return {\n      type: 'blockquote',\n      children: []\n    };\n  }\n\n  /** @returns {Code} */\n  function codeFlow() {\n    return {\n      type: 'code',\n      lang: null,\n      meta: null,\n      value: ''\n    };\n  }\n\n  /** @returns {InlineCode} */\n  function codeText() {\n    return {\n      type: 'inlineCode',\n      value: ''\n    };\n  }\n\n  /** @returns {Definition} */\n  function definition() {\n    return {\n      type: 'definition',\n      identifier: '',\n      label: null,\n      title: null,\n      url: ''\n    };\n  }\n\n  /** @returns {Emphasis} */\n  function emphasis() {\n    return {\n      type: 'emphasis',\n      children: []\n    };\n  }\n\n  /** @returns {Heading} */\n  function heading() {\n    return {\n      type: 'heading',\n      // @ts-expect-error `depth` will be set later.\n      depth: 0,\n      children: []\n    };\n  }\n\n  /** @returns {Break} */\n  function hardBreak() {\n    return {\n      type: 'break'\n    };\n  }\n\n  /** @returns {Html} */\n  function html() {\n    return {\n      type: 'html',\n      value: ''\n    };\n  }\n\n  /** @returns {Image} */\n  function image() {\n    return {\n      type: 'image',\n      title: null,\n      url: '',\n      alt: null\n    };\n  }\n\n  /** @returns {Link} */\n  function link() {\n    return {\n      type: 'link',\n      title: null,\n      url: '',\n      children: []\n    };\n  }\n\n  /**\n   * @param {Token} token\n   * @returns {List}\n   */\n  function list(token) {\n    return {\n      type: 'list',\n      ordered: token.type === 'listOrdered',\n      start: null,\n      spread: token._spread,\n      children: []\n    };\n  }\n\n  /**\n   * @param {Token} token\n   * @returns {ListItem}\n   */\n  function listItem(token) {\n    return {\n      type: 'listItem',\n      spread: token._spread,\n      checked: null,\n      children: []\n    };\n  }\n\n  /** @returns {Paragraph} */\n  function paragraph() {\n    return {\n      type: 'paragraph',\n      children: []\n    };\n  }\n\n  /** @returns {Strong} */\n  function strong() {\n    return {\n      type: 'strong',\n      children: []\n    };\n  }\n\n  /** @returns {Text} */\n  function text() {\n    return {\n      type: 'text',\n      value: ''\n    };\n  }\n\n  /** @returns {ThematicBreak} */\n  function thematicBreak() {\n    return {\n      type: 'thematicBreak'\n    };\n  }\n}\n\n/**\n * Copy a point-like value.\n *\n * @param {Point} d\n *   Point-like value.\n * @returns {Point}\n *   unist point.\n */\nfunction point(d) {\n  return {\n    line: d.line,\n    column: d.column,\n    offset: d.offset\n  };\n}\n\n/**\n * @param {Config} combined\n * @param {Array<Array<Extension> | Extension>} extensions\n * @returns {undefined}\n */\nfunction configure(combined, extensions) {\n  let index = -1;\n  while (++index < extensions.length) {\n    const value = extensions[index];\n    if (Array.isArray(value)) {\n      configure(combined, value);\n    } else {\n      extension(combined, value);\n    }\n  }\n}\n\n/**\n * @param {Config} combined\n * @param {Extension} extension\n * @returns {undefined}\n */\nfunction extension(combined, extension) {\n  /** @type {keyof Extension} */\n  let key;\n  for (key in extension) {\n    if (own.call(extension, key)) {\n      switch (key) {\n        case 'canContainEols':\n          {\n            const right = extension[key];\n            if (right) {\n              combined[key].push(...right);\n            }\n            break;\n          }\n        case 'transforms':\n          {\n            const right = extension[key];\n            if (right) {\n              combined[key].push(...right);\n            }\n            break;\n          }\n        case 'enter':\n        case 'exit':\n          {\n            const right = extension[key];\n            if (right) {\n              Object.assign(combined[key], right);\n            }\n            break;\n          }\n        // No default\n      }\n    }\n  }\n}\n\n/** @type {OnEnterError} */\nfunction defaultOnError(left, right) {\n  if (left) {\n    throw new Error('Cannot close `' + left.type + '` (' + stringifyPosition({\n      start: left.start,\n      end: left.end\n    }) + '): a different token (`' + right.type + '`, ' + stringifyPosition({\n      start: right.start,\n      end: right.end\n    }) + ') is open');\n  } else {\n    throw new Error('Cannot close document, a token (`' + right.type + '`, ' + stringifyPosition({\n      start: right.start,\n      end: right.end\n    }) + ') is still open');\n  }\n}","/**\n * @typedef {import('micromark-util-types').Event} Event\n */\n\nimport {subtokenize} from 'micromark-util-subtokenize'\n\n/**\n * @param {Array<Event>} events\n * @returns {Array<Event>}\n */\nexport function postprocess(events) {\n  while (!subtokenize(events)) {\n    // Empty\n  }\n  return events\n}\n","/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-from-markdown').Options} FromMarkdownOptions\n * @typedef {import('unified').Parser<Root>} Parser\n * @typedef {import('unified').Processor<Root>} Processor\n */\n\n/**\n * @typedef {Omit<FromMarkdownOptions, 'extensions' | 'mdastExtensions'>} Options\n */\n\nimport {fromMarkdown} from 'mdast-util-from-markdown'\n\n/**\n * Aadd support for parsing from markdown.\n *\n * @param {Readonly<Options> | null | undefined} [options]\n *   Configuration (optional).\n * @returns {undefined}\n *   Nothing.\n */\nexport default function remarkParse(options) {\n  /** @type {Processor} */\n  // @ts-expect-error: TS in JSDoc generates wrong types if `this` is typed regularly.\n  const self = this\n\n  self.parser = parser\n\n  /**\n   * @type {Parser}\n   */\n  function parser(doc) {\n    return fromMarkdown(doc, {\n      ...self.data('settings'),\n      ...options,\n      // Note: these options are not in the readme.\n      // The goal is for them to be set by plugins on `data` instead of being\n      // passed by users.\n      extensions: self.data('micromarkExtensions') || [],\n      mdastExtensions: self.data('fromMarkdownExtensions') || []\n    })\n  }\n}\n","export const VOID       = -1;\nexport const PRIMITIVE  = 0;\nexport const ARRAY      = 1;\nexport const OBJECT     = 2;\nexport const DATE       = 3;\nexport const REGEXP     = 4;\nexport const MAP        = 5;\nexport const SET        = 6;\nexport const ERROR      = 7;\nexport const BIGINT     = 8;\n// export const SYMBOL = 9;\n","import {\n  VOID, PRIMITIVE,\n  ARRAY, OBJECT,\n  DATE, REGEXP, MAP, SET,\n  ERROR, BIGINT\n} from './types.js';\n\nconst env = typeof self === 'object' ? self : globalThis;\n\nconst deserializer = ($, _) => {\n  const as = (out, index) => {\n    $.set(index, out);\n    return out;\n  };\n\n  const unpair = index => {\n    if ($.has(index))\n      return $.get(index);\n\n    const [type, value] = _[index];\n    switch (type) {\n      case PRIMITIVE:\n      case VOID:\n        return as(value, index);\n      case ARRAY: {\n        const arr = as([], index);\n        for (const index of value)\n          arr.push(unpair(index));\n        return arr;\n      }\n      case OBJECT: {\n        const object = as({}, index);\n        for (const [key, index] of value)\n          object[unpair(key)] = unpair(index);\n        return object;\n      }\n      case DATE:\n        return as(new Date(value), index);\n      case REGEXP: {\n        const {source, flags} = value;\n        return as(new RegExp(source, flags), index);\n      }\n      case MAP: {\n        const map = as(new Map, index);\n        for (const [key, index] of value)\n          map.set(unpair(key), unpair(index));\n        return map;\n      }\n      case SET: {\n        const set = as(new Set, index);\n        for (const index of value)\n          set.add(unpair(index));\n        return set;\n      }\n      case ERROR: {\n        const {name, message} = value;\n        return as(new env[name](message), index);\n      }\n      case BIGINT:\n        return as(BigInt(value), index);\n      case 'BigInt':\n        return as(Object(BigInt(value)), index);\n    }\n    return as(new env[type](value), index);\n  };\n\n  return unpair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns a deserialized value from a serialized array of Records.\n * @param {Record[]} serialized a previously serialized value.\n * @returns {any}\n */\nexport const deserialize = serialized => deserializer(new Map, serialized)(0);\n","import {\n  VOID, PRIMITIVE,\n  ARRAY, OBJECT,\n  DATE, REGEXP, MAP, SET,\n  ERROR, BIGINT\n} from './types.js';\n\nconst EMPTY = '';\n\nconst {toString} = {};\nconst {keys} = Object;\n\nconst typeOf = value => {\n  const type = typeof value;\n  if (type !== 'object' || !value)\n    return [PRIMITIVE, type];\n\n  const asString = toString.call(value).slice(8, -1);\n  switch (asString) {\n    case 'Array':\n      return [ARRAY, EMPTY];\n    case 'Object':\n      return [OBJECT, EMPTY];\n    case 'Date':\n      return [DATE, EMPTY];\n    case 'RegExp':\n      return [REGEXP, EMPTY];\n    case 'Map':\n      return [MAP, EMPTY];\n    case 'Set':\n      return [SET, EMPTY];\n  }\n\n  if (asString.includes('Array'))\n    return [ARRAY, asString];\n\n  if (asString.includes('Error'))\n    return [ERROR, asString];\n\n  return [OBJECT, asString];\n};\n\nconst shouldSkip = ([TYPE, type]) => (\n  TYPE === PRIMITIVE &&\n  (type === 'function' || type === 'symbol')\n);\n\nconst serializer = (strict, json, $, _) => {\n\n  const as = (out, value) => {\n    const index = _.push(out) - 1;\n    $.set(value, index);\n    return index;\n  };\n\n  const pair = value => {\n    if ($.has(value))\n      return $.get(value);\n\n    let [TYPE, type] = typeOf(value);\n    switch (TYPE) {\n      case PRIMITIVE: {\n        let entry = value;\n        switch (type) {\n          case 'bigint':\n            TYPE = BIGINT;\n            entry = value.toString();\n            break;\n          case 'function':\n          case 'symbol':\n            if (strict)\n              throw new TypeError('unable to serialize ' + type);\n            entry = null;\n            break;\n          case 'undefined':\n            return as([VOID], value);\n        }\n        return as([TYPE, entry], value);\n      }\n      case ARRAY: {\n        if (type)\n          return as([type, [...value]], value);\n  \n        const arr = [];\n        const index = as([TYPE, arr], value);\n        for (const entry of value)\n          arr.push(pair(entry));\n        return index;\n      }\n      case OBJECT: {\n        if (type) {\n          switch (type) {\n            case 'BigInt':\n              return as([type, value.toString()], value);\n            case 'Boolean':\n            case 'Number':\n            case 'String':\n              return as([type, value.valueOf()], value);\n          }\n        }\n\n        if (json && ('toJSON' in value))\n          return pair(value.toJSON());\n\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const key of keys(value)) {\n          if (strict || !shouldSkip(typeOf(value[key])))\n            entries.push([pair(key), pair(value[key])]);\n        }\n        return index;\n      }\n      case DATE:\n        return as([TYPE, value.toISOString()], value);\n      case REGEXP: {\n        const {source, flags} = value;\n        return as([TYPE, {source, flags}], value);\n      }\n      case MAP: {\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const [key, entry] of value) {\n          if (strict || !(shouldSkip(typeOf(key)) || shouldSkip(typeOf(entry))))\n            entries.push([pair(key), pair(entry)]);\n        }\n        return index;\n      }\n      case SET: {\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const entry of value) {\n          if (strict || !shouldSkip(typeOf(entry)))\n            entries.push(pair(entry));\n        }\n        return index;\n      }\n    }\n\n    const {message} = value;\n    return as([TYPE, {name: type, message}], value);\n  };\n\n  return pair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} value a serializable value.\n * @param {{json?: boolean, lossy?: boolean}?} options an object with a `lossy` or `json` property that,\n *  if `true`, will not throw errors on incompatible types, and behave more\n *  like JSON stringify would behave. Symbol and Function will be discarded.\n * @returns {Record[]}\n */\n export const serialize = (value, {json, lossy} = {}) => {\n  const _ = [];\n  return serializer(!(json || lossy), !!json, new Map, _)(value), _;\n};\n","import {deserialize} from './deserialize.js';\nimport {serialize} from './serialize.js';\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} any a serializable value.\n * @param {{transfer?: any[], json?: boolean, lossy?: boolean}?} options an object with\n * a transfer option (ignored when polyfilled) and/or non standard fields that\n * fallback to the polyfill if present.\n * @returns {Record[]}\n */\nexport default typeof structuredClone === \"function\" ?\n  /* c8 ignore start */\n  (any, options) => (\n    options && ('json' in options || 'lossy' in options) ?\n      deserialize(serialize(any, options)) : structuredClone(any)\n  ) :\n  (any, options) => deserialize(serialize(any, options));\n  /* c8 ignore stop */\n\nexport {deserialize, serialize};\n","import {asciiAlphanumeric} from 'micromark-util-character'\nimport {encode} from 'micromark-util-encode'\n/**\n * Make a value safe for injection as a URL.\n *\n * This encodes unsafe characters with percent-encoding and skips already\n * encoded sequences (see `normalizeUri`).\n * Further unsafe characters are encoded as character references (see\n * `micromark-util-encode`).\n *\n * A regex of allowed protocols can be given, in which case the URL is\n * sanitized.\n * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or\n * `/^https?$/i` for `img[src]` (this is what `github.com` allows).\n * If the URL includes an unknown protocol (one not matched by `protocol`, such\n * as a dangerous example, `javascript:`), the value is ignored.\n *\n * @param {string | null | undefined} url\n *   URI to sanitize.\n * @param {RegExp | null | undefined} [protocol]\n *   Allowed protocols.\n * @returns {string}\n *   Sanitized URI.\n */\nexport function sanitizeUri(url, protocol) {\n  const value = encode(normalizeUri(url || ''))\n  if (!protocol) {\n    return value\n  }\n  const colon = value.indexOf(':')\n  const questionMark = value.indexOf('?')\n  const numberSign = value.indexOf('#')\n  const slash = value.indexOf('/')\n  if (\n    // If there is no protocol, it’s relative.\n    colon < 0 ||\n    // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol.\n    (slash > -1 && colon > slash) ||\n    (questionMark > -1 && colon > questionMark) ||\n    (numberSign > -1 && colon > numberSign) ||\n    // It is a protocol, it should be allowed.\n    protocol.test(value.slice(0, colon))\n  ) {\n    return value\n  }\n  return ''\n}\n\n/**\n * Normalize a URL.\n *\n * Encode unsafe characters with percent-encoding, skipping already encoded\n * sequences.\n *\n * @param {string} value\n *   URI to normalize.\n * @returns {string}\n *   Normalized URI.\n */\nexport function normalizeUri(value) {\n  /** @type {Array<string>} */\n  const result = []\n  let index = -1\n  let start = 0\n  let skip = 0\n  while (++index < value.length) {\n    const code = value.charCodeAt(index)\n    /** @type {string} */\n    let replace = ''\n\n    // A correct percent encoded value.\n    if (\n      code === 37 &&\n      asciiAlphanumeric(value.charCodeAt(index + 1)) &&\n      asciiAlphanumeric(value.charCodeAt(index + 2))\n    ) {\n      skip = 2\n    }\n    // ASCII.\n    else if (code < 128) {\n      if (!/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(code))) {\n        replace = String.fromCharCode(code)\n      }\n    }\n    // Astral.\n    else if (code > 55_295 && code < 57_344) {\n      const next = value.charCodeAt(index + 1)\n\n      // A correct surrogate pair.\n      if (code < 56_320 && next > 56_319 && next < 57_344) {\n        replace = String.fromCharCode(code, next)\n        skip = 1\n      }\n      // Lone surrogate.\n      else {\n        replace = '\\uFFFD'\n      }\n    }\n    // Unicode.\n    else {\n      replace = String.fromCharCode(code)\n    }\n    if (replace) {\n      result.push(value.slice(start, index), encodeURIComponent(replace))\n      start = index + skip + 1\n      replace = ''\n    }\n    if (skip) {\n      index += skip\n      skip = 0\n    }\n  }\n  return result.join('') + value.slice(start)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n *\n * @typedef {import('./state.js').State} State\n */\n\n/**\n * @callback FootnoteBackContentTemplate\n *   Generate content for the backreference dynamically.\n *\n *   For the following markdown:\n *\n *   ```markdown\n *   Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n *   [^remark]: things about remark\n *   [^micromark]: things about micromark\n *   ```\n *\n *   This function will be called with:\n *\n *   *  `0` and `0` for the backreference from `things about micromark` to\n *      `alpha`, as it is the first used definition, and the first call to it\n *   *  `0` and `1` for the backreference from `things about micromark` to\n *      `bravo`, as it is the first used definition, and the second call to it\n *   *  `1` and `0` for the backreference from `things about remark` to\n *      `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {Array<ElementContent> | ElementContent | string}\n *   Content for the backreference when linking back from definitions to their\n *   reference.\n *\n * @callback FootnoteBackLabelTemplate\n *   Generate a back label dynamically.\n *\n *   For the following markdown:\n *\n *   ```markdown\n *   Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n *   [^remark]: things about remark\n *   [^micromark]: things about micromark\n *   ```\n *\n *   This function will be called with:\n *\n *   *  `0` and `0` for the backreference from `things about micromark` to\n *      `alpha`, as it is the first used definition, and the first call to it\n *   *  `0` and `1` for the backreference from `things about micromark` to\n *      `bravo`, as it is the first used definition, and the second call to it\n *   *  `1` and `0` for the backreference from `things about remark` to\n *      `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {string}\n *   Back label to use when linking back from definitions to their reference.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Generate the default content that GitHub uses on backreferences.\n *\n * @param {number} _\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {Array<ElementContent>}\n *   Content.\n */\nexport function defaultFootnoteBackContent(_, rereferenceIndex) {\n  /** @type {Array<ElementContent>} */\n  const result = [{type: 'text', value: '↩'}]\n\n  if (rereferenceIndex > 1) {\n    result.push({\n      type: 'element',\n      tagName: 'sup',\n      properties: {},\n      children: [{type: 'text', value: String(rereferenceIndex)}]\n    })\n  }\n\n  return result\n}\n\n/**\n * Generate the default label that GitHub uses on backreferences.\n *\n * @param {number} referenceIndex\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {string}\n *   Label.\n */\nexport function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) {\n  return (\n    'Back to reference ' +\n    (referenceIndex + 1) +\n    (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n  )\n}\n\n/**\n * Generate a hast footer for called footnote definitions.\n *\n * @param {State} state\n *   Info passed around.\n * @returns {Element | undefined}\n *   `section` element or `undefined`.\n */\n// eslint-disable-next-line complexity\nexport function footer(state) {\n  const clobberPrefix =\n    typeof state.options.clobberPrefix === 'string'\n      ? state.options.clobberPrefix\n      : 'user-content-'\n  const footnoteBackContent =\n    state.options.footnoteBackContent || defaultFootnoteBackContent\n  const footnoteBackLabel =\n    state.options.footnoteBackLabel || defaultFootnoteBackLabel\n  const footnoteLabel = state.options.footnoteLabel || 'Footnotes'\n  const footnoteLabelTagName = state.options.footnoteLabelTagName || 'h2'\n  const footnoteLabelProperties = state.options.footnoteLabelProperties || {\n    className: ['sr-only']\n  }\n  /** @type {Array<ElementContent>} */\n  const listItems = []\n  let referenceIndex = -1\n\n  while (++referenceIndex < state.footnoteOrder.length) {\n    const definition = state.footnoteById.get(\n      state.footnoteOrder[referenceIndex]\n    )\n\n    if (!definition) {\n      continue\n    }\n\n    const content = state.all(definition)\n    const id = String(definition.identifier).toUpperCase()\n    const safeId = normalizeUri(id.toLowerCase())\n    let rereferenceIndex = 0\n    /** @type {Array<ElementContent>} */\n    const backReferences = []\n    const counts = state.footnoteCounts.get(id)\n\n    // eslint-disable-next-line no-unmodified-loop-condition\n    while (counts !== undefined && ++rereferenceIndex <= counts) {\n      if (backReferences.length > 0) {\n        backReferences.push({type: 'text', value: ' '})\n      }\n\n      let children =\n        typeof footnoteBackContent === 'string'\n          ? footnoteBackContent\n          : footnoteBackContent(referenceIndex, rereferenceIndex)\n\n      if (typeof children === 'string') {\n        children = {type: 'text', value: children}\n      }\n\n      backReferences.push({\n        type: 'element',\n        tagName: 'a',\n        properties: {\n          href:\n            '#' +\n            clobberPrefix +\n            'fnref-' +\n            safeId +\n            (rereferenceIndex > 1 ? '-' + rereferenceIndex : ''),\n          dataFootnoteBackref: '',\n          ariaLabel:\n            typeof footnoteBackLabel === 'string'\n              ? footnoteBackLabel\n              : footnoteBackLabel(referenceIndex, rereferenceIndex),\n          className: ['data-footnote-backref']\n        },\n        children: Array.isArray(children) ? children : [children]\n      })\n    }\n\n    const tail = content[content.length - 1]\n\n    if (tail && tail.type === 'element' && tail.tagName === 'p') {\n      const tailTail = tail.children[tail.children.length - 1]\n      if (tailTail && tailTail.type === 'text') {\n        tailTail.value += ' '\n      } else {\n        tail.children.push({type: 'text', value: ' '})\n      }\n\n      tail.children.push(...backReferences)\n    } else {\n      content.push(...backReferences)\n    }\n\n    /** @type {Element} */\n    const listItem = {\n      type: 'element',\n      tagName: 'li',\n      properties: {id: clobberPrefix + 'fn-' + safeId},\n      children: state.wrap(content, true)\n    }\n\n    state.patch(definition, listItem)\n\n    listItems.push(listItem)\n  }\n\n  if (listItems.length === 0) {\n    return\n  }\n\n  return {\n    type: 'element',\n    tagName: 'section',\n    properties: {dataFootnotes: true, className: ['footnotes']},\n    children: [\n      {\n        type: 'element',\n        tagName: footnoteLabelTagName,\n        properties: {\n          ...structuredClone(footnoteLabelProperties),\n          id: 'footnote-label'\n        },\n        children: [{type: 'text', value: footnoteLabel}]\n      },\n      {type: 'text', value: '\\n'},\n      {\n        type: 'element',\n        tagName: 'ol',\n        properties: {},\n        children: state.wrap(listItems, true)\n      },\n      {type: 'text', value: '\\n'}\n    ]\n  }\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Parent} Parent\n */\n\n/**\n * @template Fn\n * @template Fallback\n * @typedef {Fn extends (value: any) => value is infer Thing ? Thing : Fallback} Predicate\n */\n\n/**\n * @callback Check\n *   Check that an arbitrary value is a node.\n * @param {unknown} this\n *   The given context.\n * @param {unknown} [node]\n *   Anything (typically a node).\n * @param {number | null | undefined} [index]\n *   The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n *   The node’s parent.\n * @returns {boolean}\n *   Whether this is a node and passes a test.\n *\n * @typedef {Record<string, unknown> | Node} Props\n *   Object to check for equivalence.\n *\n *   Note: `Node` is included as it is common but is not indexable.\n *\n * @typedef {Array<Props | TestFunction | string> | Props | TestFunction | string | null | undefined} Test\n *   Check for an arbitrary node.\n *\n * @callback TestFunction\n *   Check if a node passes a test.\n * @param {unknown} this\n *   The given context.\n * @param {Node} node\n *   A node.\n * @param {number | undefined} [index]\n *   The node’s position in its parent.\n * @param {Parent | undefined} [parent]\n *   The node’s parent.\n * @returns {boolean | undefined | void}\n *   Whether this node passes the test.\n *\n *   Note: `void` is included until TS sees no return as `undefined`.\n */\n\n/**\n * Check if `node` is a `Node` and whether it passes the given test.\n *\n * @param {unknown} node\n *   Thing to check, typically `Node`.\n * @param {Test} test\n *   A check for a specific node.\n * @param {number | null | undefined} index\n *   The node’s position in its parent.\n * @param {Parent | null | undefined} parent\n *   The node’s parent.\n * @param {unknown} context\n *   Context object (`this`) to pass to `test` functions.\n * @returns {boolean}\n *   Whether `node` is a node and passes a test.\n */\nexport const is =\n  // Note: overloads in JSDoc can’t yet use different `@template`s.\n  /**\n   * @type {(\n   *   (<Condition extends string>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n   *   (<Condition extends Props>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n   *   (<Condition extends TestFunction>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n   *   ((node?: null | undefined) => false) &\n   *   ((node: unknown, test?: null | undefined, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n   *   ((node: unknown, test?: Test, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => boolean)\n   * )}\n   */\n  (\n    /**\n     * @param {unknown} [node]\n     * @param {Test} [test]\n     * @param {number | null | undefined} [index]\n     * @param {Parent | null | undefined} [parent]\n     * @param {unknown} [context]\n     * @returns {boolean}\n     */\n    // eslint-disable-next-line max-params\n    function (node, test, index, parent, context) {\n      const check = convert(test)\n\n      if (\n        index !== undefined &&\n        index !== null &&\n        (typeof index !== 'number' ||\n          index < 0 ||\n          index === Number.POSITIVE_INFINITY)\n      ) {\n        throw new Error('Expected positive finite index')\n      }\n\n      if (\n        parent !== undefined &&\n        parent !== null &&\n        (!is(parent) || !parent.children)\n      ) {\n        throw new Error('Expected parent node')\n      }\n\n      if (\n        (parent === undefined || parent === null) !==\n        (index === undefined || index === null)\n      ) {\n        throw new Error('Expected both parent and index')\n      }\n\n      return looksLikeANode(node)\n        ? check.call(context, node, index, parent)\n        : false\n    }\n  )\n\n/**\n * Generate an assertion from a test.\n *\n * Useful if you’re going to test many nodes, for example when creating a\n * utility where something else passes a compatible test.\n *\n * The created function is a bit faster because it expects valid input only:\n * a `node`, `index`, and `parent`.\n *\n * @param {Test} test\n *   *   when nullish, checks if `node` is a `Node`.\n *   *   when `string`, works like passing `(node) => node.type === test`.\n *   *   when `function` checks if function passed the node is true.\n *   *   when `object`, checks that all keys in test are in node, and that they have (strictly) equal values.\n *   *   when `array`, checks if any one of the subtests pass.\n * @returns {Check}\n *   An assertion.\n */\nexport const convert =\n  // Note: overloads in JSDoc can’t yet use different `@template`s.\n  /**\n   * @type {(\n   *   (<Condition extends string>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n   *   (<Condition extends Props>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n   *   (<Condition extends TestFunction>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n   *   ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n   *   ((test?: Test) => Check)\n   * )}\n   */\n  (\n    /**\n     * @param {Test} [test]\n     * @returns {Check}\n     */\n    function (test) {\n      if (test === null || test === undefined) {\n        return ok\n      }\n\n      if (typeof test === 'function') {\n        return castFactory(test)\n      }\n\n      if (typeof test === 'object') {\n        return Array.isArray(test) ? anyFactory(test) : propsFactory(test)\n      }\n\n      if (typeof test === 'string') {\n        return typeFactory(test)\n      }\n\n      throw new Error('Expected function, string, or object as test')\n    }\n  )\n\n/**\n * @param {Array<Props | TestFunction | string>} tests\n * @returns {Check}\n */\nfunction anyFactory(tests) {\n  /** @type {Array<Check>} */\n  const checks = []\n  let index = -1\n\n  while (++index < tests.length) {\n    checks[index] = convert(tests[index])\n  }\n\n  return castFactory(any)\n\n  /**\n   * @this {unknown}\n   * @type {TestFunction}\n   */\n  function any(...parameters) {\n    let index = -1\n\n    while (++index < checks.length) {\n      if (checks[index].apply(this, parameters)) return true\n    }\n\n    return false\n  }\n}\n\n/**\n * Turn an object into a test for a node with a certain fields.\n *\n * @param {Props} check\n * @returns {Check}\n */\nfunction propsFactory(check) {\n  const checkAsRecord = /** @type {Record<string, unknown>} */ (check)\n\n  return castFactory(all)\n\n  /**\n   * @param {Node} node\n   * @returns {boolean}\n   */\n  function all(node) {\n    const nodeAsRecord = /** @type {Record<string, unknown>} */ (\n      /** @type {unknown} */ (node)\n    )\n\n    /** @type {string} */\n    let key\n\n    for (key in check) {\n      if (nodeAsRecord[key] !== checkAsRecord[key]) return false\n    }\n\n    return true\n  }\n}\n\n/**\n * Turn a string into a test for a node with a certain type.\n *\n * @param {string} check\n * @returns {Check}\n */\nfunction typeFactory(check) {\n  return castFactory(type)\n\n  /**\n   * @param {Node} node\n   */\n  function type(node) {\n    return node && node.type === check\n  }\n}\n\n/**\n * Turn a custom test into a test for a node that passes that test.\n *\n * @param {TestFunction} testFunction\n * @returns {Check}\n */\nfunction castFactory(testFunction) {\n  return check\n\n  /**\n   * @this {unknown}\n   * @type {Check}\n   */\n  function check(value, index, parent) {\n    return Boolean(\n      looksLikeANode(value) &&\n        testFunction.call(\n          this,\n          value,\n          typeof index === 'number' ? index : undefined,\n          parent || undefined\n        )\n    )\n  }\n}\n\nfunction ok() {\n  return true\n}\n\n/**\n * @param {unknown} value\n * @returns {value is Node}\n */\nfunction looksLikeANode(value) {\n  return value !== null && typeof value === 'object' && 'type' in value\n}\n","/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n *   Test from `unist-util-is`.\n *\n *   Note: we have remove and add `undefined`, because otherwise when generating\n *   automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n *   which doesn’t work when publishing on npm.\n */\n\n/**\n * @typedef {(\n *   Fn extends (value: any) => value is infer Thing\n *   ? Thing\n *   : Fallback\n * )} Predicate\n *   Get the value of a type guard `Fn`.\n * @template Fn\n *   Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n *   Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n *   Check extends null | undefined // No test.\n *   ? Value\n *   : Value extends {type: Check} // String (type) test.\n *   ? Value\n *   : Value extends Check // Partial test.\n *   ? Value\n *   : Check extends Function // Function test.\n *   ? Predicate<Check, Value> extends Value\n *     ? Predicate<Check, Value>\n *     : never\n *   : never // Some other test?\n * )} MatchesOne\n *   Check whether a node matches a primitive check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n *   Check extends Array<any>\n *   ? MatchesOne<Value, Check[keyof Check]>\n *   : MatchesOne<Value, Check>\n * )} Matches\n *   Check whether a node matches a check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n *   Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n *   Increment a number in the type system.\n * @template {Uint} [I=0]\n *   Index.\n */\n\n/**\n * @typedef {(\n *   Node extends UnistParent\n *   ? Node extends {children: Array<infer Children>}\n *     ? Child extends Children ? Node : never\n *     : never\n *   : never\n * )} InternalParent\n *   Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n *   Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Depth extends Max\n *   ? never\n *   :\n *     | InternalParent<Node, Child>\n *     | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {InternalAncestor<InclusiveDescendant<Tree>, Child>} Ancestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Tree extends UnistParent\n *     ? Depth extends Max\n *       ? Tree\n *       : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n *     : Tree\n * )} InclusiveDescendant\n *   Collect all (inclusive) descendants of `Tree`.\n *\n *   > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n *   > recurse without actually running into an infinite loop, which the\n *   > previous version did.\n *   >\n *   > Practically, a max of `2` is typically enough assuming a `Root` is\n *   > passed, but it doesn’t improve performance.\n *   > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n *   > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n *   Tree type.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {'skip' | boolean} Action\n *   Union of the action types.\n *\n * @typedef {number} Index\n *   Move to the sibling at `index` next (after node itself is completely\n *   traversed).\n *\n *   Useful if mutating the tree, such as removing the node the visitor is\n *   currently on, or any of its previous siblings.\n *   Results less than 0 or greater than or equal to `children.length` stop\n *   traversing the parent.\n *\n * @typedef {[(Action | null | undefined | void)?, (Index | null | undefined)?]} ActionTuple\n *   List with one or two values, the first an action, the second an index.\n *\n * @typedef {Action | ActionTuple | Index | null | undefined | void} VisitorResult\n *   Any value that can be returned from a visitor.\n */\n\n/**\n * @callback Visitor\n *   Handle a node (matching `test`, if given).\n *\n *   Visitors are free to transform `node`.\n *   They can also transform the parent of node (the last of `ancestors`).\n *\n *   Replacing `node` itself, if `SKIP` is not returned, still causes its\n *   descendants to be walked (which is a bug).\n *\n *   When adding or removing previous siblings of `node` (or next siblings, in\n *   case of reverse), the `Visitor` should return a new `Index` to specify the\n *   sibling to traverse after `node` is traversed.\n *   Adding or removing next siblings of `node` (or previous siblings, in case\n *   of reverse) is handled as expected without needing to return a new `Index`.\n *\n *   Removing the children property of an ancestor still results in them being\n *   traversed.\n * @param {Visited} node\n *   Found node.\n * @param {Array<VisitedParents>} ancestors\n *   Ancestors of `node`.\n * @returns {VisitorResult}\n *   What to do next.\n *\n *   An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n *   An `Action` is treated as a tuple of `[Action]`.\n *\n *   Passing a tuple back only makes sense if the `Action` is `SKIP`.\n *   When the `Action` is `EXIT`, that action can be returned.\n *   When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n *   Visited node type.\n * @template {UnistParent} [VisitedParents=UnistParent]\n *   Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Matches<InclusiveDescendant<Tree>, Check>, Ancestor<Tree, Matches<InclusiveDescendant<Tree>, Check>>>} BuildVisitor\n *   Build a typed `Visitor` function from a tree and a test.\n *\n *   It will infer which values are passed as `node` and which as `parents`.\n * @template {UnistNode} [Tree=UnistNode]\n *   Tree type.\n * @template {Test} [Check=Test]\n *   Test type.\n */\n\nimport {convert} from 'unist-util-is'\nimport {color} from 'unist-util-visit-parents/do-not-use-color'\n\n/** @type {Readonly<ActionTuple>} */\nconst empty = []\n\n/**\n * Continue traversing as normal.\n */\nexport const CONTINUE = true\n\n/**\n * Stop traversing immediately.\n */\nexport const EXIT = false\n\n/**\n * Do not traverse this node’s children.\n */\nexport const SKIP = 'skip'\n\n/**\n * Visit nodes, with ancestral information.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n *   Tree to traverse.\n * @param {Visitor | Test} test\n *   `unist-util-is`-compatible test\n * @param {Visitor | boolean | null | undefined} [visitor]\n *   Handle each node.\n * @param {boolean | null | undefined} [reverse]\n *   Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n *   Nothing.\n *\n * @template {UnistNode} Tree\n *   Node type.\n * @template {Test} Check\n *   `unist-util-is`-compatible test.\n */\nexport function visitParents(tree, test, visitor, reverse) {\n  /** @type {Test} */\n  let check\n\n  if (typeof test === 'function' && typeof visitor !== 'function') {\n    reverse = visitor\n    // @ts-expect-error no visitor given, so `visitor` is test.\n    visitor = test\n  } else {\n    // @ts-expect-error visitor given, so `test` isn’t a visitor.\n    check = test\n  }\n\n  const is = convert(check)\n  const step = reverse ? -1 : 1\n\n  factory(tree, undefined, [])()\n\n  /**\n   * @param {UnistNode} node\n   * @param {number | undefined} index\n   * @param {Array<UnistParent>} parents\n   */\n  function factory(node, index, parents) {\n    const value = /** @type {Record<string, unknown>} */ (\n      node && typeof node === 'object' ? node : {}\n    )\n\n    if (typeof value.type === 'string') {\n      const name =\n        // `hast`\n        typeof value.tagName === 'string'\n          ? value.tagName\n          : // `xast`\n          typeof value.name === 'string'\n          ? value.name\n          : undefined\n\n      Object.defineProperty(visit, 'name', {\n        value:\n          'node (' + color(node.type + (name ? '<' + name + '>' : '')) + ')'\n      })\n    }\n\n    return visit\n\n    function visit() {\n      /** @type {Readonly<ActionTuple>} */\n      let result = empty\n      /** @type {Readonly<ActionTuple>} */\n      let subresult\n      /** @type {number} */\n      let offset\n      /** @type {Array<UnistParent>} */\n      let grandparents\n\n      if (!test || is(node, index, parents[parents.length - 1] || undefined)) {\n        // @ts-expect-error: `visitor` is now a visitor.\n        result = toResult(visitor(node, parents))\n\n        if (result[0] === EXIT) {\n          return result\n        }\n      }\n\n      if ('children' in node && node.children) {\n        const nodeAsParent = /** @type {UnistParent} */ (node)\n\n        if (nodeAsParent.children && result[0] !== SKIP) {\n          offset = (reverse ? nodeAsParent.children.length : -1) + step\n          grandparents = parents.concat(nodeAsParent)\n\n          while (offset > -1 && offset < nodeAsParent.children.length) {\n            const child = nodeAsParent.children[offset]\n\n            subresult = factory(child, offset, grandparents)()\n\n            if (subresult[0] === EXIT) {\n              return subresult\n            }\n\n            offset =\n              typeof subresult[1] === 'number' ? subresult[1] : offset + step\n          }\n        }\n      }\n\n      return result\n    }\n  }\n}\n\n/**\n * Turn a return value into a clean result.\n *\n * @param {VisitorResult} value\n *   Valid return values from visitors.\n * @returns {Readonly<ActionTuple>}\n *   Clean result.\n */\nfunction toResult(value) {\n  if (Array.isArray(value)) {\n    return value\n  }\n\n  if (typeof value === 'number') {\n    return [CONTINUE, value]\n  }\n\n  return value === null || value === undefined ? empty : [value]\n}\n","/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n *   Test from `unist-util-is`.\n *\n *   Note: we have remove and add `undefined`, because otherwise when generating\n *   automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n *   which doesn’t work when publishing on npm.\n */\n\n// To do: use types from `unist-util-visit-parents` when it’s released.\n\n/**\n * @typedef {(\n *   Fn extends (value: any) => value is infer Thing\n *   ? Thing\n *   : Fallback\n * )} Predicate\n *   Get the value of a type guard `Fn`.\n * @template Fn\n *   Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n *   Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n *   Check extends null | undefined // No test.\n *   ? Value\n *   : Value extends {type: Check} // String (type) test.\n *   ? Value\n *   : Value extends Check // Partial test.\n *   ? Value\n *   : Check extends Function // Function test.\n *   ? Predicate<Check, Value> extends Value\n *     ? Predicate<Check, Value>\n *     : never\n *   : never // Some other test?\n * )} MatchesOne\n *   Check whether a node matches a primitive check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n *   Check extends Array<any>\n *   ? MatchesOne<Value, Check[keyof Check]>\n *   : MatchesOne<Value, Check>\n * )} Matches\n *   Check whether a node matches a check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n *   Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n *   Increment a number in the type system.\n * @template {Uint} [I=0]\n *   Index.\n */\n\n/**\n * @typedef {(\n *   Node extends UnistParent\n *   ? Node extends {children: Array<infer Children>}\n *     ? Child extends Children ? Node : never\n *     : never\n *   : never\n * )} InternalParent\n *   Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n *   Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Depth extends Max\n *   ? never\n *   :\n *     | InternalParent<Node, Child>\n *     | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {(\n *   Tree extends UnistParent\n *     ? Depth extends Max\n *       ? Tree\n *       : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n *     : Tree\n * )} InclusiveDescendant\n *   Collect all (inclusive) descendants of `Tree`.\n *\n *   > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n *   > recurse without actually running into an infinite loop, which the\n *   > previous version did.\n *   >\n *   > Practically, a max of `2` is typically enough assuming a `Root` is\n *   > passed, but it doesn’t improve performance.\n *   > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n *   > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n *   Tree type.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @callback Visitor\n *   Handle a node (matching `test`, if given).\n *\n *   Visitors are free to transform `node`.\n *   They can also transform `parent`.\n *\n *   Replacing `node` itself, if `SKIP` is not returned, still causes its\n *   descendants to be walked (which is a bug).\n *\n *   When adding or removing previous siblings of `node` (or next siblings, in\n *   case of reverse), the `Visitor` should return a new `Index` to specify the\n *   sibling to traverse after `node` is traversed.\n *   Adding or removing next siblings of `node` (or previous siblings, in case\n *   of reverse) is handled as expected without needing to return a new `Index`.\n *\n *   Removing the children property of `parent` still results in them being\n *   traversed.\n * @param {Visited} node\n *   Found node.\n * @param {Visited extends UnistNode ? number | undefined : never} index\n *   Index of `node` in `parent`.\n * @param {Ancestor extends UnistParent ? Ancestor | undefined : never} parent\n *   Parent of `node`.\n * @returns {VisitorResult}\n *   What to do next.\n *\n *   An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n *   An `Action` is treated as a tuple of `[Action]`.\n *\n *   Passing a tuple back only makes sense if the `Action` is `SKIP`.\n *   When the `Action` is `EXIT`, that action can be returned.\n *   When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n *   Visited node type.\n * @template {UnistParent} [Ancestor=UnistParent]\n *   Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Visited, Parent<Ancestor, Visited>>} BuildVisitorFromMatch\n *   Build a typed `Visitor` function from a node and all possible parents.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Visited\n *   Node type.\n * @template {UnistParent} Ancestor\n *   Parent type.\n */\n\n/**\n * @typedef {(\n *   BuildVisitorFromMatch<\n *     Matches<Descendant, Check>,\n *     Extract<Descendant, UnistParent>\n *   >\n * )} BuildVisitorFromDescendants\n *   Build a typed `Visitor` function from a list of descendants and a test.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Descendant\n *   Node type.\n * @template {Test} Check\n *   Test type.\n */\n\n/**\n * @typedef {(\n *   BuildVisitorFromDescendants<\n *     InclusiveDescendant<Tree>,\n *     Check\n *   >\n * )} BuildVisitor\n *   Build a typed `Visitor` function from a tree and a test.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} [Tree=UnistNode]\n *   Node type.\n * @template {Test} [Check=Test]\n *   Test type.\n */\n\nimport {visitParents} from 'unist-util-visit-parents'\n\nexport {CONTINUE, EXIT, SKIP} from 'unist-util-visit-parents'\n\n/**\n * Visit nodes.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n *   Tree to traverse.\n * @param {Visitor | Test} testOrVisitor\n *   `unist-util-is`-compatible test (optional, omit to pass a visitor).\n * @param {Visitor | boolean | null | undefined} [visitorOrReverse]\n *   Handle each node (when test is omitted, pass `reverse`).\n * @param {boolean | null | undefined} [maybeReverse=false]\n *   Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n *   Nothing.\n *\n * @template {UnistNode} Tree\n *   Node type.\n * @template {Test} Check\n *   `unist-util-is`-compatible test.\n */\nexport function visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {\n  /** @type {boolean | null | undefined} */\n  let reverse\n  /** @type {Test} */\n  let test\n  /** @type {Visitor} */\n  let visitor\n\n  if (\n    typeof testOrVisitor === 'function' &&\n    typeof visitorOrReverse !== 'function'\n  ) {\n    test = undefined\n    visitor = testOrVisitor\n    reverse = visitorOrReverse\n  } else {\n    // @ts-expect-error: assume the overload with test was given.\n    test = testOrVisitor\n    // @ts-expect-error: assume the overload with test was given.\n    visitor = visitorOrReverse\n    reverse = maybeReverse\n  }\n\n  visitParents(tree, test, overload, reverse)\n\n  /**\n   * @param {UnistNode} node\n   * @param {Array<UnistParent>} parents\n   */\n  function overload(node, parents) {\n    const parent = parents[parents.length - 1]\n    const index = parent ? parent.children.indexOf(node) : undefined\n    return visitor(node, index, parent)\n  }\n}\n","/**\n * @typedef {import('hast').ElementContent} ElementContent\n *\n * @typedef {import('mdast').Nodes} Nodes\n * @typedef {import('mdast').Reference} Reference\n *\n * @typedef {import('./state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Return the content of a reference without definition as plain text.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Extract<Nodes, Reference>} node\n *   Reference node (image, link).\n * @returns {Array<ElementContent>}\n *   hast content.\n */\nexport function revert(state, node) {\n  const subtype = node.referenceType\n  let suffix = ']'\n\n  if (subtype === 'collapsed') {\n    suffix += '[]'\n  } else if (subtype === 'full') {\n    suffix += '[' + (node.label || node.identifier) + ']'\n  }\n\n  if (node.type === 'imageReference') {\n    return [{type: 'text', value: '![' + node.alt + suffix}]\n  }\n\n  const contents = state.all(node)\n  const head = contents[0]\n\n  if (head && head.type === 'text') {\n    head.value = '[' + head.value\n  } else {\n    contents.unshift({type: 'text', value: '['})\n  }\n\n  const tail = contents[contents.length - 1]\n\n  if (tail && tail.type === 'text') {\n    tail.value += suffix\n  } else {\n    contents.push({type: 'text', value: suffix})\n  }\n\n  return contents\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `listItem` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ListItem} node\n *   mdast node.\n * @param {Parents | undefined} parent\n *   Parent of `node`.\n * @returns {Element}\n *   hast node.\n */\nexport function listItem(state, node, parent) {\n  const results = state.all(node)\n  const loose = parent ? listLoose(parent) : listItemLoose(node)\n  /** @type {Properties} */\n  const properties = {}\n  /** @type {Array<ElementContent>} */\n  const children = []\n\n  if (typeof node.checked === 'boolean') {\n    const head = results[0]\n    /** @type {Element} */\n    let paragraph\n\n    if (head && head.type === 'element' && head.tagName === 'p') {\n      paragraph = head\n    } else {\n      paragraph = {type: 'element', tagName: 'p', properties: {}, children: []}\n      results.unshift(paragraph)\n    }\n\n    if (paragraph.children.length > 0) {\n      paragraph.children.unshift({type: 'text', value: ' '})\n    }\n\n    paragraph.children.unshift({\n      type: 'element',\n      tagName: 'input',\n      properties: {type: 'checkbox', checked: node.checked, disabled: true},\n      children: []\n    })\n\n    // According to github-markdown-css, this class hides bullet.\n    // See: <https://github.com/sindresorhus/github-markdown-css>.\n    properties.className = ['task-list-item']\n  }\n\n  let index = -1\n\n  while (++index < results.length) {\n    const child = results[index]\n\n    // Add eols before nodes, except if this is a loose, first paragraph.\n    if (\n      loose ||\n      index !== 0 ||\n      child.type !== 'element' ||\n      child.tagName !== 'p'\n    ) {\n      children.push({type: 'text', value: '\\n'})\n    }\n\n    if (child.type === 'element' && child.tagName === 'p' && !loose) {\n      children.push(...child.children)\n    } else {\n      children.push(child)\n    }\n  }\n\n  const tail = results[results.length - 1]\n\n  // Add a final eol.\n  if (tail && (loose || tail.type !== 'element' || tail.tagName !== 'p')) {\n    children.push({type: 'text', value: '\\n'})\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'li', properties, children}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n\n/**\n * @param {Parents} node\n * @return {Boolean}\n */\nfunction listLoose(node) {\n  let loose = false\n  if (node.type === 'list') {\n    loose = node.spread || false\n    const children = node.children\n    let index = -1\n\n    while (!loose && ++index < children.length) {\n      loose = listItemLoose(children[index])\n    }\n  }\n\n  return loose\n}\n\n/**\n * @param {ListItem} node\n * @return {Boolean}\n */\nfunction listItemLoose(node) {\n  const spread = node.spread\n\n  return spread === null || spread === undefined\n    ? node.children.length > 1\n    : spread\n}\n","const tab = 9 /* `\\t` */\nconst space = 32 /* ` ` */\n\n/**\n * Remove initial and final spaces and tabs at the line breaks in `value`.\n * Does not trim initial and final spaces and tabs of the value itself.\n *\n * @param {string} value\n *   Value to trim.\n * @returns {string}\n *   Trimmed value.\n */\nexport function trimLines(value) {\n  const source = String(value)\n  const search = /\\r?\\n|\\r/g\n  let match = search.exec(source)\n  let last = 0\n  /** @type {Array<string>} */\n  const lines = []\n\n  while (match) {\n    lines.push(\n      trimLine(source.slice(last, match.index), last > 0, true),\n      match[0]\n    )\n\n    last = match.index + match[0].length\n    match = search.exec(source)\n  }\n\n  lines.push(trimLine(source.slice(last), last > 0, false))\n\n  return lines.join('')\n}\n\n/**\n * @param {string} value\n *   Line to trim.\n * @param {boolean} start\n *   Whether to trim the start of the line.\n * @param {boolean} end\n *   Whether to trim the end of the line.\n * @returns {string}\n *   Trimmed line.\n */\nfunction trimLine(value, start, end) {\n  let startIndex = 0\n  let endIndex = value.length\n\n  if (start) {\n    let code = value.codePointAt(startIndex)\n\n    while (code === tab || code === space) {\n      startIndex++\n      code = value.codePointAt(startIndex)\n    }\n  }\n\n  if (end) {\n    let code = value.codePointAt(endIndex - 1)\n\n    while (code === tab || code === space) {\n      endIndex--\n      code = value.codePointAt(endIndex - 1)\n    }\n  }\n\n  return endIndex > startIndex ? value.slice(startIndex, endIndex) : ''\n}\n","import {blockquote} from './blockquote.js'\nimport {hardBreak} from './break.js'\nimport {code} from './code.js'\nimport {strikethrough} from './delete.js'\nimport {emphasis} from './emphasis.js'\nimport {footnoteReference} from './footnote-reference.js'\nimport {heading} from './heading.js'\nimport {html} from './html.js'\nimport {imageReference} from './image-reference.js'\nimport {image} from './image.js'\nimport {inlineCode} from './inline-code.js'\nimport {linkReference} from './link-reference.js'\nimport {link} from './link.js'\nimport {listItem} from './list-item.js'\nimport {list} from './list.js'\nimport {paragraph} from './paragraph.js'\nimport {root} from './root.js'\nimport {strong} from './strong.js'\nimport {table} from './table.js'\nimport {tableRow} from './table-row.js'\nimport {tableCell} from './table-cell.js'\nimport {text} from './text.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/**\n * Default handlers for nodes.\n *\n * @satisfies {import('../state.js').Handlers}\n */\nexport const handlers = {\n  blockquote,\n  break: hardBreak,\n  code,\n  delete: strikethrough,\n  emphasis,\n  footnoteReference,\n  heading,\n  html,\n  imageReference,\n  image,\n  inlineCode,\n  linkReference,\n  link,\n  listItem,\n  list,\n  paragraph,\n  // @ts-expect-error: root is different, but hard to type.\n  root,\n  strong,\n  table,\n  tableCell,\n  tableRow,\n  text,\n  thematicBreak,\n  toml: ignore,\n  yaml: ignore,\n  definition: ignore,\n  footnoteDefinition: ignore\n}\n\n// Return nothing for nodes that are ignored.\nfunction ignore() {\n  return undefined\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Blockquote} Blockquote\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `blockquote` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Blockquote} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function blockquote(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'blockquote',\n    properties: {},\n    children: state.wrap(state.all(node), true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Text} Text\n * @typedef {import('mdast').Break} Break\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `break` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Break} node\n *   mdast node.\n * @returns {Array<Element | Text>}\n *   hast element content.\n */\nexport function hardBreak(state, node) {\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'br', properties: {}, children: []}\n  state.patch(node, result)\n  return [state.applyData(node, result), {type: 'text', value: '\\n'}]\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Code} Code\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `code` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Code} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function code(state, node) {\n  const value = node.value ? node.value + '\\n' : ''\n  /** @type {Properties} */\n  const properties = {}\n\n  if (node.lang) {\n    properties.className = ['language-' + node.lang]\n  }\n\n  // Create `<code>`.\n  /** @type {Element} */\n  let result = {\n    type: 'element',\n    tagName: 'code',\n    properties,\n    children: [{type: 'text', value}]\n  }\n\n  if (node.meta) {\n    result.data = {meta: node.meta}\n  }\n\n  state.patch(node, result)\n  result = state.applyData(node, result)\n\n  // Create `<pre>`.\n  result = {type: 'element', tagName: 'pre', properties: {}, children: [result]}\n  state.patch(node, result)\n  return result\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Delete} Delete\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `delete` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Delete} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strikethrough(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'del',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Emphasis} Emphasis\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `emphasis` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Emphasis} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function emphasis(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'em',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').FootnoteReference} FootnoteReference\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `footnoteReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {FootnoteReference} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function footnoteReference(state, node) {\n  const clobberPrefix =\n    typeof state.options.clobberPrefix === 'string'\n      ? state.options.clobberPrefix\n      : 'user-content-'\n  const id = String(node.identifier).toUpperCase()\n  const safeId = normalizeUri(id.toLowerCase())\n  const index = state.footnoteOrder.indexOf(id)\n  /** @type {number} */\n  let counter\n\n  let reuseCounter = state.footnoteCounts.get(id)\n\n  if (reuseCounter === undefined) {\n    reuseCounter = 0\n    state.footnoteOrder.push(id)\n    counter = state.footnoteOrder.length\n  } else {\n    counter = index + 1\n  }\n\n  reuseCounter += 1\n  state.footnoteCounts.set(id, reuseCounter)\n\n  /** @type {Element} */\n  const link = {\n    type: 'element',\n    tagName: 'a',\n    properties: {\n      href: '#' + clobberPrefix + 'fn-' + safeId,\n      id:\n        clobberPrefix +\n        'fnref-' +\n        safeId +\n        (reuseCounter > 1 ? '-' + reuseCounter : ''),\n      dataFootnoteRef: true,\n      ariaDescribedBy: ['footnote-label']\n    },\n    children: [{type: 'text', value: String(counter)}]\n  }\n  state.patch(node, link)\n\n  /** @type {Element} */\n  const sup = {\n    type: 'element',\n    tagName: 'sup',\n    properties: {},\n    children: [link]\n  }\n  state.patch(node, sup)\n  return state.applyData(node, sup)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `heading` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Heading} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function heading(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'h' + node.depth,\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Html} Html\n * @typedef {import('../state.js').State} State\n * @typedef {import('../../index.js').Raw} Raw\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `html` node into hast (`raw` node in dangerous mode, otherwise\n * nothing).\n *\n * @param {State} state\n *   Info passed around.\n * @param {Html} node\n *   mdast node.\n * @returns {Element | Raw | undefined}\n *   hast node.\n */\nexport function html(state, node) {\n  if (state.options.allowDangerousHtml) {\n    /** @type {Raw} */\n    const result = {type: 'raw', value: node.value}\n    state.patch(node, result)\n    return state.applyData(node, result)\n  }\n\n  return undefined\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').ImageReference} ImageReference\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `imageReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ImageReference} node\n *   mdast node.\n * @returns {Array<ElementContent> | ElementContent}\n *   hast node.\n */\nexport function imageReference(state, node) {\n  const id = String(node.identifier).toUpperCase()\n  const definition = state.definitionById.get(id)\n\n  if (!definition) {\n    return revert(state, node)\n  }\n\n  /** @type {Properties} */\n  const properties = {src: normalizeUri(definition.url || ''), alt: node.alt}\n\n  if (definition.title !== null && definition.title !== undefined) {\n    properties.title = definition.title\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'img', properties, children: []}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Image} Image\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `image` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Image} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function image(state, node) {\n  /** @type {Properties} */\n  const properties = {src: normalizeUri(node.url)}\n\n  if (node.alt !== null && node.alt !== undefined) {\n    properties.alt = node.alt\n  }\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'img', properties, children: []}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Text} Text\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `inlineCode` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {InlineCode} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function inlineCode(state, node) {\n  /** @type {Text} */\n  const text = {type: 'text', value: node.value.replace(/\\r?\\n|\\r/g, ' ')}\n  state.patch(node, text)\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'code',\n    properties: {},\n    children: [text]\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').LinkReference} LinkReference\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `linkReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {LinkReference} node\n *   mdast node.\n * @returns {Array<ElementContent> | ElementContent}\n *   hast node.\n */\nexport function linkReference(state, node) {\n  const id = String(node.identifier).toUpperCase()\n  const definition = state.definitionById.get(id)\n\n  if (!definition) {\n    return revert(state, node)\n  }\n\n  /** @type {Properties} */\n  const properties = {href: normalizeUri(definition.url || '')}\n\n  if (definition.title !== null && definition.title !== undefined) {\n    properties.title = definition.title\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Link} Link\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `link` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Link} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function link(state, node) {\n  /** @type {Properties} */\n  const properties = {href: normalizeUri(node.url)}\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').List} List\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `list` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {List} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function list(state, node) {\n  /** @type {Properties} */\n  const properties = {}\n  const results = state.all(node)\n  let index = -1\n\n  if (typeof node.start === 'number' && node.start !== 1) {\n    properties.start = node.start\n  }\n\n  // Like GitHub, add a class for custom styling.\n  while (++index < results.length) {\n    const child = results[index]\n\n    if (\n      child.type === 'element' &&\n      child.tagName === 'li' &&\n      child.properties &&\n      Array.isArray(child.properties.className) &&\n      child.properties.className.includes('task-list-item')\n    ) {\n      properties.className = ['contains-task-list']\n      break\n    }\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: node.ordered ? 'ol' : 'ul',\n    properties,\n    children: state.wrap(results, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `paragraph` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Paragraph} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function paragraph(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'p',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Parents} HastParents\n * @typedef {import('hast').Root} HastRoot\n * @typedef {import('mdast').Root} MdastRoot\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `root` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastRoot} node\n *   mdast node.\n * @returns {HastParents}\n *   hast node.\n */\nexport function root(state, node) {\n  /** @type {HastRoot} */\n  const result = {type: 'root', children: state.wrap(state.all(node))}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Strong} Strong\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `strong` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Strong} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strong(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'strong',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Table} Table\n * @typedef {import('../state.js').State} State\n */\n\nimport {pointEnd, pointStart} from 'unist-util-position'\n\n/**\n * Turn an mdast `table` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Table} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function table(state, node) {\n  const rows = state.all(node)\n  const firstRow = rows.shift()\n  /** @type {Array<Element>} */\n  const tableContent = []\n\n  if (firstRow) {\n    /** @type {Element} */\n    const head = {\n      type: 'element',\n      tagName: 'thead',\n      properties: {},\n      children: state.wrap([firstRow], true)\n    }\n    state.patch(node.children[0], head)\n    tableContent.push(head)\n  }\n\n  if (rows.length > 0) {\n    /** @type {Element} */\n    const body = {\n      type: 'element',\n      tagName: 'tbody',\n      properties: {},\n      children: state.wrap(rows, true)\n    }\n\n    const start = pointStart(node.children[1])\n    const end = pointEnd(node.children[node.children.length - 1])\n    if (start && end) body.position = {start, end}\n    tableContent.push(body)\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'table',\n    properties: {},\n    children: state.wrap(tableContent, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').TableCell} TableCell\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `tableCell` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableCell} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function tableCell(state, node) {\n  // Note: this function is normally not called: see `table-row` for how rows\n  // and their cells are compiled.\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'td', // Assume body cell.\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('mdast').TableRow} TableRow\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `tableRow` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableRow} node\n *   mdast node.\n * @param {Parents | undefined} parent\n *   Parent of `node`.\n * @returns {Element}\n *   hast node.\n */\nexport function tableRow(state, node, parent) {\n  const siblings = parent ? parent.children : undefined\n  // Generate a body row when without parent.\n  const rowIndex = siblings ? siblings.indexOf(node) : 1\n  const tagName = rowIndex === 0 ? 'th' : 'td'\n  // To do: option to use `style`?\n  const align = parent && parent.type === 'table' ? parent.align : undefined\n  const length = align ? align.length : node.children.length\n  let cellIndex = -1\n  /** @type {Array<ElementContent>} */\n  const cells = []\n\n  while (++cellIndex < length) {\n    // Note: can also be undefined.\n    const cell = node.children[cellIndex]\n    /** @type {Properties} */\n    const properties = {}\n    const alignValue = align ? align[cellIndex] : undefined\n\n    if (alignValue) {\n      properties.align = alignValue\n    }\n\n    /** @type {Element} */\n    let result = {type: 'element', tagName, properties, children: []}\n\n    if (cell) {\n      result.children = state.all(cell)\n      state.patch(cell, result)\n      result = state.applyData(cell, result)\n    }\n\n    cells.push(result)\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'tr',\n    properties: {},\n    children: state.wrap(cells, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} HastElement\n * @typedef {import('hast').Text} HastText\n * @typedef {import('mdast').Text} MdastText\n * @typedef {import('../state.js').State} State\n */\n\nimport {trimLines} from 'trim-lines'\n\n/**\n * Turn an mdast `text` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastText} node\n *   mdast node.\n * @returns {HastElement | HastText}\n *   hast node.\n */\nexport function text(state, node) {\n  /** @type {HastText} */\n  const result = {type: 'text', value: trimLines(String(node.value))}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').ThematicBreak} ThematicBreak\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `thematicBreak` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ThematicBreak} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function thematicBreak(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'hr',\n    properties: {},\n    children: []\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} HastElement\n * @typedef {import('hast').ElementContent} HastElementContent\n * @typedef {import('hast').Nodes} HastNodes\n * @typedef {import('hast').Properties} HastProperties\n * @typedef {import('hast').RootContent} HastRootContent\n * @typedef {import('hast').Text} HastText\n *\n * @typedef {import('mdast').Definition} MdastDefinition\n * @typedef {import('mdast').FootnoteDefinition} MdastFootnoteDefinition\n * @typedef {import('mdast').Nodes} MdastNodes\n * @typedef {import('mdast').Parents} MdastParents\n *\n * @typedef {import('vfile').VFile} VFile\n *\n * @typedef {import('./footer.js').FootnoteBackContentTemplate} FootnoteBackContentTemplate\n * @typedef {import('./footer.js').FootnoteBackLabelTemplate} FootnoteBackLabelTemplate\n */\n\n/**\n * @callback Handler\n *   Handle a node.\n * @param {State} state\n *   Info passed around.\n * @param {any} node\n *   mdast node to handle.\n * @param {MdastParents | undefined} parent\n *   Parent of `node`.\n * @returns {Array<HastElementContent> | HastElementContent | undefined}\n *   hast node.\n *\n * @typedef {Partial<Record<MdastNodes['type'], Handler>>} Handlers\n *   Handle nodes.\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [allowDangerousHtml=false]\n *   Whether to persist raw HTML in markdown in the hast tree (default:\n *   `false`).\n * @property {string | null | undefined} [clobberPrefix='user-content-']\n *   Prefix to use before the `id` property on footnotes to prevent them from\n *   *clobbering* (default: `'user-content-'`).\n *\n *   Pass `''` for trusted markdown and when you are careful with\n *   polyfilling.\n *   You could pass a different prefix.\n *\n *   DOM clobbering is this:\n *\n *   ```html\n *   <p id=\"x\"></p>\n *   <script>alert(x) // `x` now refers to the `p#x` DOM element</script>\n *   ```\n *\n *   The above example shows that elements are made available by browsers, by\n *   their ID, on the `window` object.\n *   This is a security risk because you might be expecting some other variable\n *   at that place.\n *   It can also break polyfills.\n *   Using a prefix solves these problems.\n * @property {VFile | null | undefined} [file]\n *   Corresponding virtual file representing the input document (optional).\n * @property {FootnoteBackContentTemplate | string | null | undefined} [footnoteBackContent]\n *   Content of the backreference back to references (default: `defaultFootnoteBackContent`).\n *\n *   The default value is:\n *\n *   ```js\n *   function defaultFootnoteBackContent(_, rereferenceIndex) {\n *     const result = [{type: 'text', value: '↩'}]\n *\n *     if (rereferenceIndex > 1) {\n *       result.push({\n *         type: 'element',\n *         tagName: 'sup',\n *         properties: {},\n *         children: [{type: 'text', value: String(rereferenceIndex)}]\n *       })\n *     }\n *\n *     return result\n *   }\n *   ```\n *\n *   This content is used in the `a` element of each backreference (the `↩`\n *   links).\n * @property {FootnoteBackLabelTemplate | string | null | undefined} [footnoteBackLabel]\n *   Label to describe the backreference back to references (default:\n *   `defaultFootnoteBackLabel`).\n *\n *   The default value is:\n *\n *   ```js\n *   function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) {\n *    return (\n *      'Back to reference ' +\n *      (referenceIndex + 1) +\n *      (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n *    )\n *   }\n *   ```\n *\n *   Change it when the markdown is not in English.\n *\n *   This label is used in the `ariaLabel` property on each backreference\n *   (the `↩` links).\n *   It affects users of assistive technology.\n * @property {string | null | undefined} [footnoteLabel='Footnotes']\n *   Textual label to use for the footnotes section (default: `'Footnotes'`).\n *\n *   Change it when the markdown is not in English.\n *\n *   This label is typically hidden visually (assuming a `sr-only` CSS class\n *   is defined that does that) and so affects screen readers only.\n *   If you do have such a class, but want to show this section to everyone,\n *   pass different properties with the `footnoteLabelProperties` option.\n * @property {HastProperties | null | undefined} [footnoteLabelProperties={className: ['sr-only']}]\n *   Properties to use on the footnote label (default: `{className:\n *   ['sr-only']}`).\n *\n *   Change it to show the label and add other properties.\n *\n *   This label is typically hidden visually (assuming an `sr-only` CSS class\n *   is defined that does that) and so affects screen readers only.\n *   If you do have such a class, but want to show this section to everyone,\n *   pass an empty string.\n *   You can also add different properties.\n *\n *   > **Note**: `id: 'footnote-label'` is always added, because footnote\n *   > calls use it with `aria-describedby` to provide an accessible label.\n * @property {string | null | undefined} [footnoteLabelTagName='h2']\n *   HTML tag name to use for the footnote label element (default: `'h2'`).\n *\n *   Change it to match your document structure.\n *\n *   This label is typically hidden visually (assuming a `sr-only` CSS class\n *   is defined that does that) and so affects screen readers only.\n *   If you do have such a class, but want to show this section to everyone,\n *   pass different properties with the `footnoteLabelProperties` option.\n * @property {Handlers | null | undefined} [handlers]\n *   Extra handlers for nodes (optional).\n * @property {Array<MdastNodes['type']> | null | undefined} [passThrough]\n *   List of custom mdast node types to pass through (keep) in hast (note that\n *   the node itself is passed, but eventual children are transformed)\n *   (optional).\n * @property {Handler | null | undefined} [unknownHandler]\n *   Handler for all unknown nodes (optional).\n *\n * @typedef State\n *   Info passed around.\n * @property {(node: MdastNodes) => Array<HastElementContent>} all\n *   Transform the children of an mdast parent to hast.\n * @property {<Type extends HastNodes>(from: MdastNodes, to: Type) => HastElement | Type} applyData\n *   Honor the `data` of `from`, and generate an element instead of `node`.\n * @property {Map<string, MdastDefinition>} definitionById\n *   Definitions by their identifier.\n * @property {Map<string, MdastFootnoteDefinition>} footnoteById\n *   Footnote definitions by their identifier.\n * @property {Map<string, number>} footnoteCounts\n *   Counts for how often the same footnote was called.\n * @property {Array<string>} footnoteOrder\n *   Identifiers of order when footnote calls first appear in tree order.\n * @property {Handlers} handlers\n *   Applied handlers.\n * @property {(node: MdastNodes, parent: MdastParents | undefined) => Array<HastElementContent> | HastElementContent | undefined} one\n *   Transform an mdast node to hast.\n * @property {Options} options\n *   Configuration.\n * @property {(from: MdastNodes, node: HastNodes) => undefined} patch\n *   Copy a node’s positional info.\n * @property {<Type extends HastRootContent>(nodes: Array<Type>, loose?: boolean | undefined) => Array<HastText | Type>} wrap\n *   Wrap `nodes` with line endings between each node, adds initial/final line endings when `loose`.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {visit} from 'unist-util-visit'\nimport {position} from 'unist-util-position'\nimport {handlers as defaultHandlers} from './handlers/index.js'\n\nconst own = {}.hasOwnProperty\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Create `state` from an mdast tree.\n *\n * @param {MdastNodes} tree\n *   mdast node to transform.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {State}\n *   `state` function.\n */\nexport function createState(tree, options) {\n  const settings = options || emptyOptions\n  /** @type {Map<string, MdastDefinition>} */\n  const definitionById = new Map()\n  /** @type {Map<string, MdastFootnoteDefinition>} */\n  const footnoteById = new Map()\n  /** @type {Map<string, number>} */\n  const footnoteCounts = new Map()\n  /** @type {Handlers} */\n  // @ts-expect-error: the root handler returns a root.\n  // Hard to type.\n  const handlers = {...defaultHandlers, ...settings.handlers}\n\n  /** @type {State} */\n  const state = {\n    all,\n    applyData,\n    definitionById,\n    footnoteById,\n    footnoteCounts,\n    footnoteOrder: [],\n    handlers,\n    one,\n    options: settings,\n    patch,\n    wrap\n  }\n\n  visit(tree, function (node) {\n    if (node.type === 'definition' || node.type === 'footnoteDefinition') {\n      const map = node.type === 'definition' ? definitionById : footnoteById\n      const id = String(node.identifier).toUpperCase()\n\n      // Mimick CM behavior of link definitions.\n      // See: <https://github.com/syntax-tree/mdast-util-definitions/blob/9032189/lib/index.js#L20-L21>.\n      if (!map.has(id)) {\n        // @ts-expect-error: node type matches map.\n        map.set(id, node)\n      }\n    }\n  })\n\n  return state\n\n  /**\n   * Transform an mdast node into a hast node.\n   *\n   * @param {MdastNodes} node\n   *   mdast node.\n   * @param {MdastParents | undefined} [parent]\n   *   Parent of `node`.\n   * @returns {Array<HastElementContent> | HastElementContent | undefined}\n   *   Resulting hast node.\n   */\n  function one(node, parent) {\n    const type = node.type\n    const handle = state.handlers[type]\n\n    if (own.call(state.handlers, type) && handle) {\n      return handle(state, node, parent)\n    }\n\n    if (state.options.passThrough && state.options.passThrough.includes(type)) {\n      if ('children' in node) {\n        const {children, ...shallow} = node\n        const result = structuredClone(shallow)\n        // @ts-expect-error: TS doesn’t understand…\n        result.children = state.all(node)\n        // @ts-expect-error: TS doesn’t understand…\n        return result\n      }\n\n      // @ts-expect-error: it’s custom.\n      return structuredClone(node)\n    }\n\n    const unknown = state.options.unknownHandler || defaultUnknownHandler\n\n    return unknown(state, node, parent)\n  }\n\n  /**\n   * Transform the children of an mdast node into hast nodes.\n   *\n   * @param {MdastNodes} parent\n   *   mdast node to compile\n   * @returns {Array<HastElementContent>}\n   *   Resulting hast nodes.\n   */\n  function all(parent) {\n    /** @type {Array<HastElementContent>} */\n    const values = []\n\n    if ('children' in parent) {\n      const nodes = parent.children\n      let index = -1\n      while (++index < nodes.length) {\n        const result = state.one(nodes[index], parent)\n\n        // To do: see if we van clean this? Can we merge texts?\n        if (result) {\n          if (index && nodes[index - 1].type === 'break') {\n            if (!Array.isArray(result) && result.type === 'text') {\n              result.value = trimMarkdownSpaceStart(result.value)\n            }\n\n            if (!Array.isArray(result) && result.type === 'element') {\n              const head = result.children[0]\n\n              if (head && head.type === 'text') {\n                head.value = trimMarkdownSpaceStart(head.value)\n              }\n            }\n          }\n\n          if (Array.isArray(result)) {\n            values.push(...result)\n          } else {\n            values.push(result)\n          }\n        }\n      }\n    }\n\n    return values\n  }\n}\n\n/**\n * Copy a node’s positional info.\n *\n * @param {MdastNodes} from\n *   mdast node to copy from.\n * @param {HastNodes} to\n *   hast node to copy into.\n * @returns {undefined}\n *   Nothing.\n */\nfunction patch(from, to) {\n  if (from.position) to.position = position(from)\n}\n\n/**\n * Honor the `data` of `from` and maybe generate an element instead of `to`.\n *\n * @template {HastNodes} Type\n *   Node type.\n * @param {MdastNodes} from\n *   mdast node to use data from.\n * @param {Type} to\n *   hast node to change.\n * @returns {HastElement | Type}\n *   Nothing.\n */\nfunction applyData(from, to) {\n  /** @type {HastElement | Type} */\n  let result = to\n\n  // Handle `data.hName`, `data.hProperties, `data.hChildren`.\n  if (from && from.data) {\n    const hName = from.data.hName\n    const hChildren = from.data.hChildren\n    const hProperties = from.data.hProperties\n\n    if (typeof hName === 'string') {\n      // Transforming the node resulted in an element with a different name\n      // than wanted:\n      if (result.type === 'element') {\n        result.tagName = hName\n      }\n      // Transforming the node resulted in a non-element, which happens for\n      // raw, text, and root nodes (unless custom handlers are passed).\n      // The intent of `hName` is to create an element, but likely also to keep\n      // the content around (otherwise: pass `hChildren`).\n      else {\n        /** @type {Array<HastElementContent>} */\n        // @ts-expect-error: assume no doctypes in `root`.\n        const children = 'children' in result ? result.children : [result]\n        result = {type: 'element', tagName: hName, properties: {}, children}\n      }\n    }\n\n    if (result.type === 'element' && hProperties) {\n      Object.assign(result.properties, structuredClone(hProperties))\n    }\n\n    if (\n      'children' in result &&\n      result.children &&\n      hChildren !== null &&\n      hChildren !== undefined\n    ) {\n      result.children = hChildren\n    }\n  }\n\n  return result\n}\n\n/**\n * Transform an unknown node.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastNodes} node\n *   Unknown mdast node.\n * @returns {HastElement | HastText}\n *   Resulting hast node.\n */\nfunction defaultUnknownHandler(state, node) {\n  const data = node.data || {}\n  /** @type {HastElement | HastText} */\n  const result =\n    'value' in node &&\n    !(own.call(data, 'hProperties') || own.call(data, 'hChildren'))\n      ? {type: 'text', value: node.value}\n      : {\n          type: 'element',\n          tagName: 'div',\n          properties: {},\n          children: state.all(node)\n        }\n\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n\n/**\n * Wrap `nodes` with line endings between each node.\n *\n * @template {HastRootContent} Type\n *   Node type.\n * @param {Array<Type>} nodes\n *   List of nodes to wrap.\n * @param {boolean | undefined} [loose=false]\n *   Whether to add line endings at start and end (default: `false`).\n * @returns {Array<HastText | Type>}\n *   Wrapped nodes.\n */\nexport function wrap(nodes, loose) {\n  /** @type {Array<HastText | Type>} */\n  const result = []\n  let index = -1\n\n  if (loose) {\n    result.push({type: 'text', value: '\\n'})\n  }\n\n  while (++index < nodes.length) {\n    if (index) result.push({type: 'text', value: '\\n'})\n    result.push(nodes[index])\n  }\n\n  if (loose && nodes.length > 0) {\n    result.push({type: 'text', value: '\\n'})\n  }\n\n  return result\n}\n\n/**\n * Trim spaces and tabs at the start of `value`.\n *\n * @param {string} value\n *   Value to trim.\n * @returns {string}\n *   Result.\n */\nfunction trimMarkdownSpaceStart(value) {\n  let index = 0\n  let code = value.charCodeAt(index)\n\n  while (code === 9 || code === 32) {\n    index++\n    code = value.charCodeAt(index)\n  }\n\n  return value.slice(index)\n}\n","/**\n * @typedef {import('hast').Nodes} HastNodes\n * @typedef {import('mdast').Nodes} MdastNodes\n * @typedef {import('./state.js').Options} Options\n */\n\nimport {ok as assert} from 'devlop'\nimport {footer} from './footer.js'\nimport {createState} from './state.js'\n\n/**\n * Transform mdast to hast.\n *\n * ##### Notes\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most utilities ignore `raw` nodes but two notable ones don’t:\n *\n * *   `hast-util-to-html` also has an option `allowDangerousHtml` which will\n *     output the raw HTML.\n *     This is typically discouraged as noted by the option name but is useful\n *     if you completely trust authors\n * *   `hast-util-raw` can handle the raw embedded HTML strings by parsing them\n *     into standard hast nodes (`element`, `text`, etc).\n *     This is a heavy task as it needs a full HTML parser, but it is the only\n *     way to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark, which we follow by default.\n * They are supported by GitHub, so footnotes can be enabled in markdown with\n * `mdast-util-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes, which is hidden for sighted users but shown to\n * assistive technology.\n * When your page is not in English, you must define translated values.\n *\n * Back references use ARIA attributes, but the section label itself uses a\n * heading that is hidden with an `sr-only` class.\n * To show it to sighted users, define different attributes in\n * `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem, as it links footnote calls to footnote\n * definitions on the page through `id` attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n * <p id=x></p>\n * <script>alert(x) // `x` now refers to the DOM `p#x` element</script>\n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * Example: headings (DOM clobbering) in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * *   when the node has a `value` (and doesn’t have `data.hName`,\n *     `data.hProperties`, or `data.hChildren`, see later), create a hast `text`\n *     node\n * *   otherwise, create a `<div>` element (which could be changed with\n *     `data.hName`), with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @param {MdastNodes} tree\n *   mdast tree.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {HastNodes}\n *   hast tree.\n */\nexport function toHast(tree, options) {\n  const state = createState(tree, options)\n  const node = state.one(tree, undefined)\n  const foot = footer(state)\n  /** @type {HastNodes} */\n  const result = Array.isArray(node)\n    ? {type: 'root', children: node}\n    : node || {type: 'root', children: []}\n\n  if (foot) {\n    // If there’s a footer, there were definitions, meaning block\n    // content.\n    // So `result` is a parent node.\n    assert('children' in result)\n    result.children.push({type: 'text', value: '\\n'}, foot)\n  }\n\n  return result\n}\n","// Include `data` fields in mdast and `raw` nodes in hast.\n/// <reference types=\"mdast-util-to-hast\" />\n\n/**\n * @typedef {import('hast').Root} HastRoot\n * @typedef {import('mdast').Root} MdastRoot\n * @typedef {import('mdast-util-to-hast').Options} ToHastOptions\n * @typedef {import('unified').Processor} Processor\n * @typedef {import('vfile').VFile} VFile\n */\n\n/**\n * @typedef {Omit<ToHastOptions, 'file'>} Options\n *\n * @callback TransformBridge\n *   Bridge-mode.\n *\n *   Runs the destination with the new hast tree.\n *   Discards result.\n * @param {MdastRoot} tree\n *   Tree.\n * @param {VFile} file\n *   File.\n * @returns {Promise<undefined>}\n *   Nothing.\n *\n * @callback TransformMutate\n *  Mutate-mode.\n *\n *  Further transformers run on the hast tree.\n * @param {MdastRoot} tree\n *   Tree.\n * @param {VFile} file\n *   File.\n * @returns {HastRoot}\n *   Tree (hast).\n */\n\nimport {toHast} from 'mdast-util-to-hast'\n\n/**\n * Turn markdown into HTML.\n *\n * ##### Notes\n *\n * ###### Signature\n *\n * *   if a processor is given, runs the (rehype) plugins used on it with a\n *     hast tree, then discards the result (*bridge mode*)\n * *   otherwise, returns a hast tree, the plugins used after `remarkRehype`\n *     are rehype plugins (*mutate mode*)\n *\n * > 👉 **Note**: It’s highly unlikely that you want to pass a `processor`.\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most plugins ignore `raw` nodes but two notable ones don’t:\n *\n * *   `rehype-stringify` also has an option `allowDangerousHtml` which will\n *     output the raw HTML.\n *     This is typically discouraged as noted by the option name but is useful if\n *     you completely trust authors\n * *   `rehype-raw` can handle the raw embedded HTML strings by parsing them\n *     into standard hast nodes (`element`, `text`, etc).\n *     This is a heavy task as it needs a full HTML parser, but it is the only way\n *     to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark, which we follow by default.\n * They are supported by GitHub, so footnotes can be enabled in markdown with\n * `remark-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes, which is hidden for sighted users but shown to\n * assistive technology.\n * When your page is not in English, you must define translated values.\n *\n * Back references use ARIA attributes, but the section label itself uses a\n * heading that is hidden with an `sr-only` class.\n * To show it to sighted users, define different attributes in\n * `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem, as it links footnote calls to footnote\n * definitions on the page through `id` attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n * <p id=x></p>\n * <script>alert(x) // `x` now refers to the DOM `p#x` element</script>\n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * *Example: headings (DOM clobbering)* in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * *   when the node has a `value` (and doesn’t have `data.hName`,\n *     `data.hProperties`, or `data.hChildren`, see later), create a hast `text`\n *     node\n * *   otherwise, create a `<div>` element (which could be changed with\n *     `data.hName`), with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @overload\n * @param {Processor} processor\n * @param {Readonly<Options> | null | undefined} [options]\n * @returns {TransformBridge}\n *\n * @overload\n * @param {Readonly<Options> | null | undefined} [options]\n * @returns {TransformMutate}\n *\n * @param {Readonly<Options> | Processor | null | undefined} [destination]\n *   Processor or configuration (optional).\n * @param {Readonly<Options> | null | undefined} [options]\n *   When a processor was given, configuration (optional).\n * @returns {TransformBridge | TransformMutate}\n *   Transform.\n */\nexport default function remarkRehype(destination, options) {\n  if (destination && 'run' in destination) {\n    /**\n     * @type {TransformBridge}\n     */\n    return async function (tree, file) {\n      // Cast because root in -> root out.\n      const hastTree = /** @type {HastRoot} */ (\n        toHast(tree, {file, ...options})\n      )\n      await destination.run(hastTree, file)\n    }\n  }\n\n  /**\n   * @type {TransformMutate}\n   */\n  return function (tree, file) {\n    // Cast because root in -> root out.\n    return /** @type {HastRoot} */ (\n      toHast(tree, {file, ...(options || destination)})\n    )\n  }\n}\n","/**\n * Throw a given error.\n *\n * @param {Error|null|undefined} [error]\n *   Maybe error.\n * @returns {asserts error is null|undefined}\n */\nexport function bail(error) {\n  if (error) {\n    throw error\n  }\n}\n","export default function isPlainObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n}\n","// To do: remove `void`s\n// To do: remove `null` from output of our APIs, allow it as user APIs.\n\n/**\n * @typedef {(error?: Error | null | undefined, ...output: Array<any>) => void} Callback\n *   Callback.\n *\n * @typedef {(...input: Array<any>) => any} Middleware\n *   Ware.\n *\n * @typedef Pipeline\n *   Pipeline.\n * @property {Run} run\n *   Run the pipeline.\n * @property {Use} use\n *   Add middleware.\n *\n * @typedef {(...input: Array<any>) => void} Run\n *   Call all middleware.\n *\n *   Calls `done` on completion with either an error or the output of the\n *   last middleware.\n *\n *   > 👉 **Note**: as the length of input defines whether async functions get a\n *   > `next` function,\n *   > it’s recommended to keep `input` at one value normally.\n\n *\n * @typedef {(fn: Middleware) => Pipeline} Use\n *   Add middleware.\n */\n\n/**\n * Create new middleware.\n *\n * @returns {Pipeline}\n *   Pipeline.\n */\nexport function trough() {\n  /** @type {Array<Middleware>} */\n  const fns = []\n  /** @type {Pipeline} */\n  const pipeline = {run, use}\n\n  return pipeline\n\n  /** @type {Run} */\n  function run(...values) {\n    let middlewareIndex = -1\n    /** @type {Callback} */\n    const callback = values.pop()\n\n    if (typeof callback !== 'function') {\n      throw new TypeError('Expected function as last argument, not ' + callback)\n    }\n\n    next(null, ...values)\n\n    /**\n     * Run the next `fn`, or we’re done.\n     *\n     * @param {Error | null | undefined} error\n     * @param {Array<any>} output\n     */\n    function next(error, ...output) {\n      const fn = fns[++middlewareIndex]\n      let index = -1\n\n      if (error) {\n        callback(error)\n        return\n      }\n\n      // Copy non-nullish input into values.\n      while (++index < values.length) {\n        if (output[index] === null || output[index] === undefined) {\n          output[index] = values[index]\n        }\n      }\n\n      // Save the newly created `output` for the next call.\n      values = output\n\n      // Next or done.\n      if (fn) {\n        wrap(fn, next)(...output)\n      } else {\n        callback(null, ...output)\n      }\n    }\n  }\n\n  /** @type {Use} */\n  function use(middelware) {\n    if (typeof middelware !== 'function') {\n      throw new TypeError(\n        'Expected `middelware` to be a function, not ' + middelware\n      )\n    }\n\n    fns.push(middelware)\n    return pipeline\n  }\n}\n\n/**\n * Wrap `middleware` into a uniform interface.\n *\n * You can pass all input to the resulting function.\n * `callback` is then called with the output of `middleware`.\n *\n * If `middleware` accepts more arguments than the later given in input,\n * an extra `done` function is passed to it after that input,\n * which must be called by `middleware`.\n *\n * The first value in `input` is the main input value.\n * All other input values are the rest input values.\n * The values given to `callback` are the input values,\n * merged with every non-nullish output value.\n *\n * * if `middleware` throws an error,\n *   returns a promise that is rejected,\n *   or calls the given `done` function with an error,\n *   `callback` is called with that error\n * * if `middleware` returns a value or returns a promise that is resolved,\n *   that value is the main output value\n * * if `middleware` calls `done`,\n *   all non-nullish values except for the first one (the error) overwrite the\n *   output values\n *\n * @param {Middleware} middleware\n *   Function to wrap.\n * @param {Callback} callback\n *   Callback called with the output of `middleware`.\n * @returns {Run}\n *   Wrapped middleware.\n */\nexport function wrap(middleware, callback) {\n  /** @type {boolean} */\n  let called\n\n  return wrapped\n\n  /**\n   * Call `middleware`.\n   * @this {any}\n   * @param {Array<any>} parameters\n   * @returns {void}\n   */\n  function wrapped(...parameters) {\n    const fnExpectsCallback = middleware.length > parameters.length\n    /** @type {any} */\n    let result\n\n    if (fnExpectsCallback) {\n      parameters.push(done)\n    }\n\n    try {\n      result = middleware.apply(this, parameters)\n    } catch (error) {\n      const exception = /** @type {Error} */ (error)\n\n      // Well, this is quite the pickle.\n      // `middleware` received a callback and called it synchronously, but that\n      // threw an error.\n      // The only thing left to do is to throw the thing instead.\n      if (fnExpectsCallback && called) {\n        throw exception\n      }\n\n      return done(exception)\n    }\n\n    if (!fnExpectsCallback) {\n      if (result && result.then && typeof result.then === 'function') {\n        result.then(then, done)\n      } else if (result instanceof Error) {\n        done(result)\n      } else {\n        then(result)\n      }\n    }\n  }\n\n  /**\n   * Call `callback`, only once.\n   *\n   * @type {Callback}\n   */\n  function done(error, ...output) {\n    if (!called) {\n      called = true\n      callback(error, ...output)\n    }\n  }\n\n  /**\n   * Call `done` with one value.\n   *\n   * @param {any} [value]\n   */\n  function then(value) {\n    done(null, value)\n  }\n}\n","// A derivative work based on:\n// <https://github.com/browserify/path-browserify>.\n// Which is licensed:\n//\n// MIT License\n//\n// Copyright (c) 2013 James Halliday\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A derivative work based on:\n//\n// Parts of that are extracted from Node’s internal `path` module:\n// <https://github.com/nodejs/node/blob/master/lib/path.js>.\n// Which is licensed:\n//\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nexport const path = {basename, dirname, extname, join, sep: '/'}\n\n/* eslint-disable max-depth, complexity */\n\n/**\n * Get the basename from a path.\n *\n * @param {string} path\n *   File path.\n * @param {string | null | undefined} [ext]\n *   Extension to strip.\n * @returns {string}\n *   Stem or basename.\n */\nfunction basename(path, ext) {\n  if (ext !== undefined && typeof ext !== 'string') {\n    throw new TypeError('\"ext\" argument must be a string')\n  }\n\n  assertPath(path)\n  let start = 0\n  let end = -1\n  let index = path.length\n  /** @type {boolean | undefined} */\n  let seenNonSlash\n\n  if (ext === undefined || ext.length === 0 || ext.length > path.length) {\n    while (index--) {\n      if (path.codePointAt(index) === 47 /* `/` */) {\n        // If we reached a path separator that was not part of a set of path\n        // separators at the end of the string, stop now.\n        if (seenNonSlash) {\n          start = index + 1\n          break\n        }\n      } else if (end < 0) {\n        // We saw the first non-path separator, mark this as the end of our\n        // path component.\n        seenNonSlash = true\n        end = index + 1\n      }\n    }\n\n    return end < 0 ? '' : path.slice(start, end)\n  }\n\n  if (ext === path) {\n    return ''\n  }\n\n  let firstNonSlashEnd = -1\n  let extIndex = ext.length - 1\n\n  while (index--) {\n    if (path.codePointAt(index) === 47 /* `/` */) {\n      // If we reached a path separator that was not part of a set of path\n      // separators at the end of the string, stop now.\n      if (seenNonSlash) {\n        start = index + 1\n        break\n      }\n    } else {\n      if (firstNonSlashEnd < 0) {\n        // We saw the first non-path separator, remember this index in case\n        // we need it if the extension ends up not matching.\n        seenNonSlash = true\n        firstNonSlashEnd = index + 1\n      }\n\n      if (extIndex > -1) {\n        // Try to match the explicit extension.\n        if (path.codePointAt(index) === ext.codePointAt(extIndex--)) {\n          if (extIndex < 0) {\n            // We matched the extension, so mark this as the end of our path\n            // component\n            end = index\n          }\n        } else {\n          // Extension does not match, so our result is the entire path\n          // component\n          extIndex = -1\n          end = firstNonSlashEnd\n        }\n      }\n    }\n  }\n\n  if (start === end) {\n    end = firstNonSlashEnd\n  } else if (end < 0) {\n    end = path.length\n  }\n\n  return path.slice(start, end)\n}\n\n/**\n * Get the dirname from a path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   File path.\n */\nfunction dirname(path) {\n  assertPath(path)\n\n  if (path.length === 0) {\n    return '.'\n  }\n\n  let end = -1\n  let index = path.length\n  /** @type {boolean | undefined} */\n  let unmatchedSlash\n\n  // Prefix `--` is important to not run on `0`.\n  while (--index) {\n    if (path.codePointAt(index) === 47 /* `/` */) {\n      if (unmatchedSlash) {\n        end = index\n        break\n      }\n    } else if (!unmatchedSlash) {\n      // We saw the first non-path separator\n      unmatchedSlash = true\n    }\n  }\n\n  return end < 0\n    ? path.codePointAt(0) === 47 /* `/` */\n      ? '/'\n      : '.'\n    : end === 1 && path.codePointAt(0) === 47 /* `/` */\n    ? '//'\n    : path.slice(0, end)\n}\n\n/**\n * Get an extname from a path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   Extname.\n */\nfunction extname(path) {\n  assertPath(path)\n\n  let index = path.length\n\n  let end = -1\n  let startPart = 0\n  let startDot = -1\n  // Track the state of characters (if any) we see before our first dot and\n  // after any path separator we find.\n  let preDotState = 0\n  /** @type {boolean | undefined} */\n  let unmatchedSlash\n\n  while (index--) {\n    const code = path.codePointAt(index)\n\n    if (code === 47 /* `/` */) {\n      // If we reached a path separator that was not part of a set of path\n      // separators at the end of the string, stop now.\n      if (unmatchedSlash) {\n        startPart = index + 1\n        break\n      }\n\n      continue\n    }\n\n    if (end < 0) {\n      // We saw the first non-path separator, mark this as the end of our\n      // extension.\n      unmatchedSlash = true\n      end = index + 1\n    }\n\n    if (code === 46 /* `.` */) {\n      // If this is our first dot, mark it as the start of our extension.\n      if (startDot < 0) {\n        startDot = index\n      } else if (preDotState !== 1) {\n        preDotState = 1\n      }\n    } else if (startDot > -1) {\n      // We saw a non-dot and non-path separator before our dot, so we should\n      // have a good chance at having a non-empty extension.\n      preDotState = -1\n    }\n  }\n\n  if (\n    startDot < 0 ||\n    end < 0 ||\n    // We saw a non-dot character immediately before the dot.\n    preDotState === 0 ||\n    // The (right-most) trimmed path component is exactly `..`.\n    (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)\n  ) {\n    return ''\n  }\n\n  return path.slice(startDot, end)\n}\n\n/**\n * Join segments from a path.\n *\n * @param {Array<string>} segments\n *   Path segments.\n * @returns {string}\n *   File path.\n */\nfunction join(...segments) {\n  let index = -1\n  /** @type {string | undefined} */\n  let joined\n\n  while (++index < segments.length) {\n    assertPath(segments[index])\n\n    if (segments[index]) {\n      joined =\n        joined === undefined ? segments[index] : joined + '/' + segments[index]\n    }\n  }\n\n  return joined === undefined ? '.' : normalize(joined)\n}\n\n/**\n * Normalize a basic file path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   File path.\n */\n// Note: `normalize` is not exposed as `path.normalize`, so some code is\n// manually removed from it.\nfunction normalize(path) {\n  assertPath(path)\n\n  const absolute = path.codePointAt(0) === 47 /* `/` */\n\n  // Normalize the path according to POSIX rules.\n  let value = normalizeString(path, !absolute)\n\n  if (value.length === 0 && !absolute) {\n    value = '.'\n  }\n\n  if (value.length > 0 && path.codePointAt(path.length - 1) === 47 /* / */) {\n    value += '/'\n  }\n\n  return absolute ? '/' + value : value\n}\n\n/**\n * Resolve `.` and `..` elements in a path with directory names.\n *\n * @param {string} path\n *   File path.\n * @param {boolean} allowAboveRoot\n *   Whether `..` can move above root.\n * @returns {string}\n *   File path.\n */\nfunction normalizeString(path, allowAboveRoot) {\n  let result = ''\n  let lastSegmentLength = 0\n  let lastSlash = -1\n  let dots = 0\n  let index = -1\n  /** @type {number | undefined} */\n  let code\n  /** @type {number} */\n  let lastSlashIndex\n\n  while (++index <= path.length) {\n    if (index < path.length) {\n      code = path.codePointAt(index)\n    } else if (code === 47 /* `/` */) {\n      break\n    } else {\n      code = 47 /* `/` */\n    }\n\n    if (code === 47 /* `/` */) {\n      if (lastSlash === index - 1 || dots === 1) {\n        // Empty.\n      } else if (lastSlash !== index - 1 && dots === 2) {\n        if (\n          result.length < 2 ||\n          lastSegmentLength !== 2 ||\n          result.codePointAt(result.length - 1) !== 46 /* `.` */ ||\n          result.codePointAt(result.length - 2) !== 46 /* `.` */\n        ) {\n          if (result.length > 2) {\n            lastSlashIndex = result.lastIndexOf('/')\n\n            if (lastSlashIndex !== result.length - 1) {\n              if (lastSlashIndex < 0) {\n                result = ''\n                lastSegmentLength = 0\n              } else {\n                result = result.slice(0, lastSlashIndex)\n                lastSegmentLength = result.length - 1 - result.lastIndexOf('/')\n              }\n\n              lastSlash = index\n              dots = 0\n              continue\n            }\n          } else if (result.length > 0) {\n            result = ''\n            lastSegmentLength = 0\n            lastSlash = index\n            dots = 0\n            continue\n          }\n        }\n\n        if (allowAboveRoot) {\n          result = result.length > 0 ? result + '/..' : '..'\n          lastSegmentLength = 2\n        }\n      } else {\n        if (result.length > 0) {\n          result += '/' + path.slice(lastSlash + 1, index)\n        } else {\n          result = path.slice(lastSlash + 1, index)\n        }\n\n        lastSegmentLength = index - lastSlash - 1\n      }\n\n      lastSlash = index\n      dots = 0\n    } else if (code === 46 /* `.` */ && dots > -1) {\n      dots++\n    } else {\n      dots = -1\n    }\n  }\n\n  return result\n}\n\n/**\n * Make sure `path` is a string.\n *\n * @param {string} path\n *   File path.\n * @returns {asserts path is string}\n *   Nothing.\n */\nfunction assertPath(path) {\n  if (typeof path !== 'string') {\n    throw new TypeError(\n      'Path must be a string. Received ' + JSON.stringify(path)\n    )\n  }\n}\n\n/* eslint-enable max-depth, complexity */\n","// Somewhat based on:\n// <https://github.com/defunctzombie/node-process/blob/master/browser.js>.\n// But I don’t think one tiny line of code can be copyrighted. 😅\nexport const proc = {cwd}\n\nfunction cwd() {\n  return '/'\n}\n","/**\n * Checks if a value has the shape of a WHATWG URL object.\n *\n * Using a symbol or instanceof would not be able to recognize URL objects\n * coming from other implementations (e.g. in Electron), so instead we are\n * checking some well known properties for a lack of a better test.\n *\n * We use `href` and `protocol` as they are the only properties that are\n * easy to retrieve and calculate due to the lazy nature of the getters.\n *\n * We check for auth attribute to distinguish legacy url instance with\n * WHATWG URL instance.\n *\n * @param {unknown} fileUrlOrPath\n *   File path or URL.\n * @returns {fileUrlOrPath is URL}\n *   Whether it’s a URL.\n */\n// From: <https://github.com/nodejs/node/blob/6a3403c/lib/internal/url.js#L720>\nexport function isUrl(fileUrlOrPath) {\n  return Boolean(\n    fileUrlOrPath !== null &&\n      typeof fileUrlOrPath === 'object' &&\n      'href' in fileUrlOrPath &&\n      fileUrlOrPath.href &&\n      'protocol' in fileUrlOrPath &&\n      fileUrlOrPath.protocol &&\n      // @ts-expect-error: indexing is fine.\n      fileUrlOrPath.auth === undefined\n  )\n}\n","import {isUrl} from './minurl.shared.js'\n\nexport {isUrl} from './minurl.shared.js'\n\n// See: <https://github.com/nodejs/node/blob/6a3403c/lib/internal/url.js>\n\n/**\n * @param {URL | string} path\n *   File URL.\n * @returns {string}\n *   File URL.\n */\nexport function urlToPath(path) {\n  if (typeof path === 'string') {\n    path = new URL(path)\n  } else if (!isUrl(path)) {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError(\n      'The \"path\" argument must be of type string or an instance of URL. Received `' +\n        path +\n        '`'\n    )\n    error.code = 'ERR_INVALID_ARG_TYPE'\n    throw error\n  }\n\n  if (path.protocol !== 'file:') {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError('The URL must be of scheme file')\n    error.code = 'ERR_INVALID_URL_SCHEME'\n    throw error\n  }\n\n  return getPathFromURLPosix(path)\n}\n\n/**\n * Get a path from a POSIX URL.\n *\n * @param {URL} url\n *   URL.\n * @returns {string}\n *   File path.\n */\nfunction getPathFromURLPosix(url) {\n  if (url.hostname !== '') {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError(\n      'File URL host must be \"localhost\" or empty on darwin'\n    )\n    error.code = 'ERR_INVALID_FILE_URL_HOST'\n    throw error\n  }\n\n  const pathname = url.pathname\n  let index = -1\n\n  while (++index < pathname.length) {\n    if (\n      pathname.codePointAt(index) === 37 /* `%` */ &&\n      pathname.codePointAt(index + 1) === 50 /* `2` */\n    ) {\n      const third = pathname.codePointAt(index + 2)\n      if (third === 70 /* `F` */ || third === 102 /* `f` */) {\n        /** @type {NodeJS.ErrnoException} */\n        const error = new TypeError(\n          'File URL path must not include encoded / characters'\n        )\n        error.code = 'ERR_INVALID_FILE_URL_PATH'\n        throw error\n      }\n    }\n  }\n\n  return decodeURIComponent(pathname)\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n * @typedef {import('vfile-message').Options} MessageOptions\n * @typedef {import('../index.js').Data} Data\n * @typedef {import('../index.js').Value} Value\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n *\n * @typedef {Options | URL | VFile | Value} Compatible\n *   Things that can be passed to the constructor.\n *\n * @typedef VFileCoreOptions\n *   Set multiple values.\n * @property {string | null | undefined} [basename]\n *   Set `basename` (name).\n * @property {string | null | undefined} [cwd]\n *   Set `cwd` (working directory).\n * @property {Data | null | undefined} [data]\n *   Set `data` (associated info).\n * @property {string | null | undefined} [dirname]\n *   Set `dirname` (path w/o basename).\n * @property {string | null | undefined} [extname]\n *   Set `extname` (extension with dot).\n * @property {Array<string> | null | undefined} [history]\n *   Set `history` (paths the file moved between).\n * @property {URL | string | null | undefined} [path]\n *   Set `path` (current path).\n * @property {string | null | undefined} [stem]\n *   Set `stem` (name without extension).\n * @property {Value | null | undefined} [value]\n *   Set `value` (the contents of the file).\n *\n * @typedef Map\n *   Raw source map.\n *\n *   See:\n *   <https://github.com/mozilla/source-map/blob/60adcb0/source-map.d.ts#L15-L23>.\n * @property {number} version\n *   Which version of the source map spec this map is following.\n * @property {Array<string>} sources\n *   An array of URLs to the original source files.\n * @property {Array<string>} names\n *   An array of identifiers which can be referenced by individual mappings.\n * @property {string | undefined} [sourceRoot]\n *   The URL root from which all sources are relative.\n * @property {Array<string> | undefined} [sourcesContent]\n *   An array of contents of the original source files.\n * @property {string} mappings\n *   A string of base64 VLQs which contain the actual mappings.\n * @property {string} file\n *   The generated file this source map is associated with.\n *\n * @typedef {Record<string, unknown> & VFileCoreOptions} Options\n *   Configuration.\n *\n *   A bunch of keys that will be shallow copied over to the new file.\n *\n * @typedef {Record<string, unknown>} ReporterSettings\n *   Configuration for reporters.\n */\n\n/**\n * @template [Settings=ReporterSettings]\n *   Options type.\n * @callback Reporter\n *   Type for a reporter.\n * @param {Array<VFile>} files\n *   Files to report.\n * @param {Settings} options\n *   Configuration.\n * @returns {string}\n *   Report.\n */\n\nimport {VFileMessage} from 'vfile-message'\nimport {path} from 'vfile/do-not-use-conditional-minpath'\nimport {proc} from 'vfile/do-not-use-conditional-minproc'\nimport {urlToPath, isUrl} from 'vfile/do-not-use-conditional-minurl'\n\n/**\n * Order of setting (least specific to most), we need this because otherwise\n * `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a\n * stem can be set.\n */\nconst order = /** @type {const} */ ([\n  'history',\n  'path',\n  'basename',\n  'stem',\n  'extname',\n  'dirname'\n])\n\nexport class VFile {\n  /**\n   * Create a new virtual file.\n   *\n   * `options` is treated as:\n   *\n   * *   `string` or `Uint8Array` — `{value: options}`\n   * *   `URL` — `{path: options}`\n   * *   `VFile` — shallow copies its data over to the new file\n   * *   `object` — all fields are shallow copied over to the new file\n   *\n   * Path related fields are set in the following order (least specific to\n   * most specific): `history`, `path`, `basename`, `stem`, `extname`,\n   * `dirname`.\n   *\n   * You cannot set `dirname` or `extname` without setting either `history`,\n   * `path`, `basename`, or `stem` too.\n   *\n   * @param {Compatible | null | undefined} [value]\n   *   File value.\n   * @returns\n   *   New instance.\n   */\n  constructor(value) {\n    /** @type {Options | VFile} */\n    let options\n\n    if (!value) {\n      options = {}\n    } else if (isUrl(value)) {\n      options = {path: value}\n    } else if (typeof value === 'string' || isUint8Array(value)) {\n      options = {value}\n    } else {\n      options = value\n    }\n\n    /* eslint-disable no-unused-expressions */\n\n    /**\n     * Base of `path` (default: `process.cwd()` or `'/'` in browsers).\n     *\n     * @type {string}\n     */\n    this.cwd = proc.cwd()\n\n    /**\n     * Place to store custom info (default: `{}`).\n     *\n     * It’s OK to store custom data directly on the file but moving it to\n     * `data` is recommended.\n     *\n     * @type {Data}\n     */\n    this.data = {}\n\n    /**\n     * List of file paths the file moved between.\n     *\n     * The first is the original path and the last is the current path.\n     *\n     * @type {Array<string>}\n     */\n    this.history = []\n\n    /**\n     * List of messages associated with the file.\n     *\n     * @type {Array<VFileMessage>}\n     */\n    this.messages = []\n\n    /**\n     * Raw value.\n     *\n     * @type {Value}\n     */\n    this.value\n\n    // The below are non-standard, they are “well-known”.\n    // As in, used in several tools.\n    /**\n     * Source map.\n     *\n     * This type is equivalent to the `RawSourceMap` type from the `source-map`\n     * module.\n     *\n     * @type {Map | null | undefined}\n     */\n    this.map\n\n    /**\n     * Custom, non-string, compiled, representation.\n     *\n     * This is used by unified to store non-string results.\n     * One example is when turning markdown into React nodes.\n     *\n     * @type {unknown}\n     */\n    this.result\n\n    /**\n     * Whether a file was saved to disk.\n     *\n     * This is used by vfile reporters.\n     *\n     * @type {boolean}\n     */\n    this.stored\n    /* eslint-enable no-unused-expressions */\n\n    // Set path related properties in the correct order.\n    let index = -1\n\n    while (++index < order.length) {\n      const prop = order[index]\n\n      // Note: we specifically use `in` instead of `hasOwnProperty` to accept\n      // `vfile`s too.\n      if (\n        prop in options &&\n        options[prop] !== undefined &&\n        options[prop] !== null\n      ) {\n        // @ts-expect-error: TS doesn’t understand basic reality.\n        this[prop] = prop === 'history' ? [...options[prop]] : options[prop]\n      }\n    }\n\n    /** @type {string} */\n    let prop\n\n    // Set non-path related properties.\n    for (prop in options) {\n      // @ts-expect-error: fine to set other things.\n      if (!order.includes(prop)) {\n        // @ts-expect-error: fine to set other things.\n        this[prop] = options[prop]\n      }\n    }\n  }\n\n  /**\n   * Get the basename (including extname) (example: `'index.min.js'`).\n   *\n   * @returns {string | undefined}\n   *   Basename.\n   */\n  get basename() {\n    return typeof this.path === 'string' ? path.basename(this.path) : undefined\n  }\n\n  /**\n   * Set basename (including extname) (`'index.min.js'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be nullified (use `file.path = file.dirname` instead).\n   *\n   * @param {string} basename\n   *   Basename.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set basename(basename) {\n    assertNonEmpty(basename, 'basename')\n    assertPart(basename, 'basename')\n    this.path = path.join(this.dirname || '', basename)\n  }\n\n  /**\n   * Get the parent path (example: `'~'`).\n   *\n   * @returns {string | undefined}\n   *   Dirname.\n   */\n  get dirname() {\n    return typeof this.path === 'string' ? path.dirname(this.path) : undefined\n  }\n\n  /**\n   * Set the parent path (example: `'~'`).\n   *\n   * Cannot be set if there’s no `path` yet.\n   *\n   * @param {string | undefined} dirname\n   *   Dirname.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set dirname(dirname) {\n    assertPath(this.basename, 'dirname')\n    this.path = path.join(dirname || '', this.basename)\n  }\n\n  /**\n   * Get the extname (including dot) (example: `'.js'`).\n   *\n   * @returns {string | undefined}\n   *   Extname.\n   */\n  get extname() {\n    return typeof this.path === 'string' ? path.extname(this.path) : undefined\n  }\n\n  /**\n   * Set the extname (including dot) (example: `'.js'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be set if there’s no `path` yet.\n   *\n   * @param {string | undefined} extname\n   *   Extname.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set extname(extname) {\n    assertPart(extname, 'extname')\n    assertPath(this.dirname, 'extname')\n\n    if (extname) {\n      if (extname.codePointAt(0) !== 46 /* `.` */) {\n        throw new Error('`extname` must start with `.`')\n      }\n\n      if (extname.includes('.', 1)) {\n        throw new Error('`extname` cannot contain multiple dots')\n      }\n    }\n\n    this.path = path.join(this.dirname, this.stem + (extname || ''))\n  }\n\n  /**\n   * Get the full path (example: `'~/index.min.js'`).\n   *\n   * @returns {string}\n   *   Path.\n   */\n  get path() {\n    return this.history[this.history.length - 1]\n  }\n\n  /**\n   * Set the full path (example: `'~/index.min.js'`).\n   *\n   * Cannot be nullified.\n   * You can set a file URL (a `URL` object with a `file:` protocol) which will\n   * be turned into a path with `url.fileURLToPath`.\n   *\n   * @param {URL | string} path\n   *   Path.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set path(path) {\n    if (isUrl(path)) {\n      path = urlToPath(path)\n    }\n\n    assertNonEmpty(path, 'path')\n\n    if (this.path !== path) {\n      this.history.push(path)\n    }\n  }\n\n  /**\n   * Get the stem (basename w/o extname) (example: `'index.min'`).\n   *\n   * @returns {string | undefined}\n   *   Stem.\n   */\n  get stem() {\n    return typeof this.path === 'string'\n      ? path.basename(this.path, this.extname)\n      : undefined\n  }\n\n  /**\n   * Set the stem (basename w/o extname) (example: `'index.min'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be nullified (use `file.path = file.dirname` instead).\n   *\n   * @param {string} stem\n   *   Stem.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set stem(stem) {\n    assertNonEmpty(stem, 'stem')\n    assertPart(stem, 'stem')\n    this.path = path.join(this.dirname || '', stem + (this.extname || ''))\n  }\n\n  // Normal prototypal methods.\n  /**\n   * Create a fatal message for `reason` associated with the file.\n   *\n   * The `fatal` field of the message is set to `true` (error; file not usable)\n   * and the `file` field is set to the current file path.\n   * The message is added to the `messages` field on `file`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {MessageOptions | null | undefined} [options]\n   * @returns {never}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {never}\n   *   Never.\n   * @throws {VFileMessage}\n   *   Message.\n   */\n  fail(causeOrReason, optionsOrParentOrPlace, origin) {\n    // @ts-expect-error: the overloads are fine.\n    const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n    message.fatal = true\n\n    throw message\n  }\n\n  /**\n   * Create an info message for `reason` associated with the file.\n   *\n   * The `fatal` field of the message is set to `undefined` (info; change\n   * likely not needed) and the `file` field is set to the current file path.\n   * The message is added to the `messages` field on `file`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {MessageOptions | null | undefined} [options]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {VFileMessage}\n   *   Message.\n   */\n  info(causeOrReason, optionsOrParentOrPlace, origin) {\n    // @ts-expect-error: the overloads are fine.\n    const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n    message.fatal = undefined\n\n    return message\n  }\n\n  /**\n   * Create a message for `reason` associated with the file.\n   *\n   * The `fatal` field of the message is set to `false` (warning; change may be\n   * needed) and the `file` field is set to the current file path.\n   * The message is added to the `messages` field on `file`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {MessageOptions | null | undefined} [options]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {VFileMessage}\n   *   Message.\n   */\n  message(causeOrReason, optionsOrParentOrPlace, origin) {\n    const message = new VFileMessage(\n      // @ts-expect-error: the overloads are fine.\n      causeOrReason,\n      optionsOrParentOrPlace,\n      origin\n    )\n\n    if (this.path) {\n      message.name = this.path + ':' + message.name\n      message.file = this.path\n    }\n\n    message.fatal = false\n\n    this.messages.push(message)\n\n    return message\n  }\n\n  /**\n   * Serialize the file.\n   *\n   * > **Note**: which encodings are supported depends on the engine.\n   * > For info on Node.js, see:\n   * > <https://nodejs.org/api/util.html#whatwg-supported-encodings>.\n   *\n   * @param {string | null | undefined} [encoding='utf8']\n   *   Character encoding to understand `value` as when it’s a `Uint8Array`\n   *   (default: `'utf-8'`).\n   * @returns {string}\n   *   Serialized file.\n   */\n  toString(encoding) {\n    if (this.value === undefined) {\n      return ''\n    }\n\n    if (typeof this.value === 'string') {\n      return this.value\n    }\n\n    const decoder = new TextDecoder(encoding || undefined)\n    return decoder.decode(this.value)\n  }\n}\n\n/**\n * Assert that `part` is not a path (as in, does not contain `path.sep`).\n *\n * @param {string | null | undefined} part\n *   File path part.\n * @param {string} name\n *   Part name.\n * @returns {undefined}\n *   Nothing.\n */\nfunction assertPart(part, name) {\n  if (part && part.includes(path.sep)) {\n    throw new Error(\n      '`' + name + '` cannot be a path: did not expect `' + path.sep + '`'\n    )\n  }\n}\n\n/**\n * Assert that `part` is not empty.\n *\n * @param {string | undefined} part\n *   Thing.\n * @param {string} name\n *   Part name.\n * @returns {asserts part is string}\n *   Nothing.\n */\nfunction assertNonEmpty(part, name) {\n  if (!part) {\n    throw new Error('`' + name + '` cannot be empty')\n  }\n}\n\n/**\n * Assert `path` exists.\n *\n * @param {string | undefined} path\n *   Path.\n * @param {string} name\n *   Dependency name.\n * @returns {asserts path is string}\n *   Nothing.\n */\nfunction assertPath(path, name) {\n  if (!path) {\n    throw new Error('Setting `' + name + '` requires `path` to be set too')\n  }\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n *   thing.\n * @returns {value is Uint8Array}\n *   Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n  return Boolean(\n    value &&\n      typeof value === 'object' &&\n      'byteLength' in value &&\n      'byteOffset' in value\n  )\n}\n","export const CallableInstance =\n  /**\n   * @type {new <Parameters extends Array<unknown>, Result>(property: string | symbol) => (...parameters: Parameters) => Result}\n   */\n  (\n    /** @type {unknown} */\n    (\n      /**\n       * @this {Function}\n       * @param {string | symbol} property\n       * @returns {(...parameters: Array<unknown>) => unknown}\n       */\n      function (property) {\n        const self = this\n        const constr = self.constructor\n        const proto = /** @type {Record<string | symbol, Function>} */ (\n          // Prototypes do exist.\n          // type-coverage:ignore-next-line\n          constr.prototype\n        )\n        const value = proto[property]\n        /** @type {(...parameters: Array<unknown>) => unknown} */\n        const apply = function () {\n          return value.apply(apply, arguments)\n        }\n\n        Object.setPrototypeOf(apply, proto)\n\n        // Not needed for us in `unified`: we only call this on the `copy`\n        // function,\n        // and we don't need to add its fields (`length`, `name`)\n        // over.\n        // See also: GH-246.\n        // const names = Object.getOwnPropertyNames(value)\n        //\n        // for (const p of names) {\n        //   const descriptor = Object.getOwnPropertyDescriptor(value, p)\n        //   if (descriptor) Object.defineProperty(apply, p, descriptor)\n        // }\n\n        return apply\n      }\n    )\n  )\n","/**\n * @typedef {import('trough').Pipeline} Pipeline\n *\n * @typedef {import('unist').Node} Node\n *\n * @typedef {import('vfile').Compatible} Compatible\n * @typedef {import('vfile').Value} Value\n *\n * @typedef {import('../index.js').CompileResultMap} CompileResultMap\n * @typedef {import('../index.js').Data} Data\n * @typedef {import('../index.js').Settings} Settings\n */\n\n/**\n * @typedef {CompileResultMap[keyof CompileResultMap]} CompileResults\n *   Acceptable results from compilers.\n *\n *   To register custom results, add them to\n *   {@linkcode CompileResultMap}.\n */\n\n/**\n * @template {Node} [Tree=Node]\n *   The node that the compiler receives (default: `Node`).\n * @template {CompileResults} [Result=CompileResults]\n *   The thing that the compiler yields (default: `CompileResults`).\n * @callback Compiler\n *   A **compiler** handles the compiling of a syntax tree to something else\n *   (in most cases, text) (TypeScript type).\n *\n *   It is used in the stringify phase and called with a {@linkcode Node}\n *   and {@linkcode VFile} representation of the document to compile.\n *   It should return the textual representation of the given tree (typically\n *   `string`).\n *\n *   > **Note**: unified typically compiles by serializing: most compilers\n *   > return `string` (or `Uint8Array`).\n *   > Some compilers, such as the one configured with\n *   > [`rehype-react`][rehype-react], return other values (in this case, a\n *   > React tree).\n *   > If you’re using a compiler that doesn’t serialize, expect different\n *   > result values.\n *   >\n *   > To register custom results in TypeScript, add them to\n *   > {@linkcode CompileResultMap}.\n *\n *   [rehype-react]: https://github.com/rehypejs/rehype-react\n * @param {Tree} tree\n *   Tree to compile.\n * @param {VFile} file\n *   File associated with `tree`.\n * @returns {Result}\n *   New content: compiled text (`string` or `Uint8Array`, for `file.value`) or\n *   something else (for `file.result`).\n */\n\n/**\n * @template {Node} [Tree=Node]\n *   The node that the parser yields (default: `Node`)\n * @callback Parser\n *   A **parser** handles the parsing of text to a syntax tree.\n *\n *   It is used in the parse phase and is called with a `string` and\n *   {@linkcode VFile} of the document to parse.\n *   It must return the syntax tree representation of the given file\n *   ({@linkcode Node}).\n * @param {string} document\n *   Document to parse.\n * @param {VFile} file\n *   File associated with `document`.\n * @returns {Tree}\n *   Node representing the given file.\n */\n\n/**\n * @typedef {(\n *   Plugin<Array<any>, any, any> |\n *   PluginTuple<Array<any>, any, any> |\n *   Preset\n * )} Pluggable\n *   Union of the different ways to add plugins and settings.\n */\n\n/**\n * @typedef {Array<Pluggable>} PluggableList\n *   List of plugins and presets.\n */\n\n// Note: we can’t use `callback` yet as it messes up `this`:\n//  <https://github.com/microsoft/TypeScript/issues/55197>.\n/**\n * @template {Array<unknown>} [PluginParameters=[]]\n *   Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=Node]\n *   Value that is expected as input (default: `Node`).\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node it expects.\n *   *   If the plugin sets a {@linkcode Parser}, this should be\n *       `string`.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be the\n *       node it expects.\n * @template [Output=Input]\n *   Value that is yielded as output (default: `Input`).\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node that that yields.\n *   *   If the plugin sets a {@linkcode Parser}, this should be the\n *       node that it yields.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be\n *       result it yields.\n * @typedef {(\n *   (this: Processor, ...parameters: PluginParameters) =>\n *     Input extends string ? // Parser.\n *        Output extends Node | undefined ? undefined | void : never :\n *     Output extends CompileResults ? // Compiler.\n *        Input extends Node | undefined ? undefined | void : never :\n *     Transformer<\n *       Input extends Node ? Input : Node,\n *       Output extends Node ? Output : Node\n *     > | undefined | void\n * )} Plugin\n *   Single plugin.\n *\n *   Plugins configure the processors they are applied on in the following\n *   ways:\n *\n *   *   they change the processor, such as the parser, the compiler, or by\n *       configuring data\n *   *   they specify how to handle trees and files\n *\n *   In practice, they are functions that can receive options and configure the\n *   processor (`this`).\n *\n *   > **Note**: plugins are called when the processor is *frozen*, not when\n *   > they are applied.\n */\n\n/**\n * Tuple of a plugin and its configuration.\n *\n * The first item is a plugin, the rest are its parameters.\n *\n * @template {Array<unknown>} [TupleParameters=[]]\n *   Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=undefined]\n *   Value that is expected as input (optional).\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node it expects.\n *   *   If the plugin sets a {@linkcode Parser}, this should be\n *       `string`.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be the\n *       node it expects.\n * @template [Output=undefined] (optional).\n *   Value that is yielded as output.\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node that that yields.\n *   *   If the plugin sets a {@linkcode Parser}, this should be the\n *       node that it yields.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be\n *       result it yields.\n * @typedef {(\n *   [\n *     plugin: Plugin<TupleParameters, Input, Output>,\n *     ...parameters: TupleParameters\n *   ]\n * )} PluginTuple\n */\n\n/**\n * @typedef Preset\n *   Sharable configuration.\n *\n *   They can contain plugins and settings.\n * @property {PluggableList | undefined} [plugins]\n *   List of plugins and presets (optional).\n * @property {Settings | undefined} [settings]\n *   Shared settings for parsers and compilers (optional).\n */\n\n/**\n * @template {VFile} [File=VFile]\n *   The file that the callback receives (default: `VFile`).\n * @callback ProcessCallback\n *   Callback called when the process is done.\n *\n *   Called with either an error or a result.\n * @param {Error | undefined} [error]\n *   Fatal error (optional).\n * @param {File | undefined} [file]\n *   Processed file (optional).\n * @returns {undefined}\n *   Nothing.\n */\n\n/**\n * @template {Node} [Tree=Node]\n *   The tree that the callback receives (default: `Node`).\n * @callback RunCallback\n *   Callback called when transformers are done.\n *\n *   Called with either an error or results.\n * @param {Error | undefined} [error]\n *   Fatal error (optional).\n * @param {Tree | undefined} [tree]\n *   Transformed tree (optional).\n * @param {VFile | undefined} [file]\n *   File (optional).\n * @returns {undefined}\n *   Nothing.\n */\n\n/**\n * @template {Node} [Output=Node]\n *   Node type that the transformer yields (default: `Node`).\n * @callback TransformCallback\n *   Callback passed to transforms.\n *\n *   If the signature of a `transformer` accepts a third argument, the\n *   transformer may perform asynchronous operations, and must call it.\n * @param {Error | undefined} [error]\n *   Fatal error to stop the process (optional).\n * @param {Output | undefined} [tree]\n *   New, changed, tree (optional).\n * @param {VFile | undefined} [file]\n *   New, changed, file (optional).\n * @returns {undefined}\n *   Nothing.\n */\n\n/**\n * @template {Node} [Input=Node]\n *   Node type that the transformer expects (default: `Node`).\n * @template {Node} [Output=Input]\n *   Node type that the transformer yields (default: `Input`).\n * @callback Transformer\n *   Transformers handle syntax trees and files.\n *\n *   They are functions that are called each time a syntax tree and file are\n *   passed through the run phase.\n *   When an error occurs in them (either because it’s thrown, returned,\n *   rejected, or passed to `next`), the process stops.\n *\n *   The run phase is handled by [`trough`][trough], see its documentation for\n *   the exact semantics of these functions.\n *\n *   > **Note**: you should likely ignore `next`: don’t accept it.\n *   > it supports callback-style async work.\n *   > But promises are likely easier to reason about.\n *\n *   [trough]: https://github.com/wooorm/trough#function-fninput-next\n * @param {Input} tree\n *   Tree to handle.\n * @param {VFile} file\n *   File to handle.\n * @param {TransformCallback<Output>} next\n *   Callback.\n * @returns {(\n *   Promise<Output | undefined | void> |\n *   Promise<never> | // For some reason this is needed separately.\n *   Output |\n *   Error |\n *   undefined |\n *   void\n * )}\n *   If you accept `next`, nothing.\n *   Otherwise:\n *\n *   *   `Error` — fatal error to stop the process\n *   *   `Promise<undefined>` or `undefined` — the next transformer keeps using\n *       same tree\n *   *   `Promise<Node>` or `Node` — new, changed, tree\n */\n\n/**\n * @template {Node | undefined} ParseTree\n *   Output of `parse`.\n * @template {Node | undefined} HeadTree\n *   Input for `run`.\n * @template {Node | undefined} TailTree\n *   Output for `run`.\n * @template {Node | undefined} CompileTree\n *   Input of `stringify`.\n * @template {CompileResults | undefined} CompileResult\n *   Output of `stringify`.\n * @template {Node | string | undefined} Input\n *   Input of plugin.\n * @template Output\n *   Output of plugin (optional).\n * @typedef {(\n *   Input extends string\n *     ? Output extends Node | undefined\n *       ? // Parser.\n *         Processor<\n *           Output extends undefined ? ParseTree : Output,\n *           HeadTree,\n *           TailTree,\n *           CompileTree,\n *           CompileResult\n *         >\n *       : // Unknown.\n *         Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n *     : Output extends CompileResults\n *     ? Input extends Node | undefined\n *       ? // Compiler.\n *         Processor<\n *           ParseTree,\n *           HeadTree,\n *           TailTree,\n *           Input extends undefined ? CompileTree : Input,\n *           Output extends undefined ? CompileResult : Output\n *         >\n *       : // Unknown.\n *         Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n *     : Input extends Node | undefined\n *     ? Output extends Node | undefined\n *       ? // Transform.\n *         Processor<\n *           ParseTree,\n *           HeadTree extends undefined ? Input : HeadTree,\n *           Output extends undefined ? TailTree : Output,\n *           CompileTree,\n *           CompileResult\n *         >\n *       : // Unknown.\n *         Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n *     : // Unknown.\n *       Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n * )} UsePlugin\n *   Create a processor based on the input/output of a {@link Plugin plugin}.\n */\n\n/**\n * @template {CompileResults | undefined} Result\n *   Node type that the transformer yields.\n * @typedef {(\n *   Result extends Value | undefined ?\n *     VFile :\n *     VFile & {result: Result}\n *   )} VFileWithOutput\n *   Type to generate a {@linkcode VFile} corresponding to a compiler result.\n *\n *   If a result that is not acceptable on a `VFile` is used, that will\n *   be stored on the `result` field of {@linkcode VFile}.\n */\n\nimport {bail} from 'bail'\nimport extend from 'extend'\nimport {ok as assert} from 'devlop'\nimport isPlainObj from 'is-plain-obj'\nimport {trough} from 'trough'\nimport {VFile} from 'vfile'\nimport {CallableInstance} from './callable-instance.js'\n\n// To do: next major: drop `Compiler`, `Parser`: prefer lowercase.\n\n// To do: we could start yielding `never` in TS when a parser is missing and\n// `parse` is called.\n// Currently, we allow directly setting `processor.parser`, which is untyped.\n\nconst own = {}.hasOwnProperty\n\n/**\n * @template {Node | undefined} [ParseTree=undefined]\n *   Output of `parse` (optional).\n * @template {Node | undefined} [HeadTree=undefined]\n *   Input for `run` (optional).\n * @template {Node | undefined} [TailTree=undefined]\n *   Output for `run` (optional).\n * @template {Node | undefined} [CompileTree=undefined]\n *   Input of `stringify` (optional).\n * @template {CompileResults | undefined} [CompileResult=undefined]\n *   Output of `stringify` (optional).\n * @extends {CallableInstance<[], Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>>}\n */\nexport class Processor extends CallableInstance {\n  /**\n   * Create a processor.\n   */\n  constructor() {\n    // If `Processor()` is called (w/o new), `copy` is called instead.\n    super('copy')\n\n    /**\n     * Compiler to use (deprecated).\n     *\n     * @deprecated\n     *   Use `compiler` instead.\n     * @type {(\n     *   Compiler<\n     *     CompileTree extends undefined ? Node : CompileTree,\n     *     CompileResult extends undefined ? CompileResults : CompileResult\n     *   > |\n     *   undefined\n     * )}\n     */\n    this.Compiler = undefined\n\n    /**\n     * Parser to use (deprecated).\n     *\n     * @deprecated\n     *   Use `parser` instead.\n     * @type {(\n     *   Parser<ParseTree extends undefined ? Node : ParseTree> |\n     *   undefined\n     * )}\n     */\n    this.Parser = undefined\n\n    // Note: the following fields are considered private.\n    // However, they are needed for tests, and TSC generates an untyped\n    // `private freezeIndex` field for, which trips `type-coverage` up.\n    // Instead, we use `@deprecated` to visualize that they shouldn’t be used.\n    /**\n     * Internal list of configured plugins.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {Array<PluginTuple<Array<unknown>>>}\n     */\n    this.attachers = []\n\n    /**\n     * Compiler to use.\n     *\n     * @type {(\n     *   Compiler<\n     *     CompileTree extends undefined ? Node : CompileTree,\n     *     CompileResult extends undefined ? CompileResults : CompileResult\n     *   > |\n     *   undefined\n     * )}\n     */\n    this.compiler = undefined\n\n    /**\n     * Internal state to track where we are while freezing.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {number}\n     */\n    this.freezeIndex = -1\n\n    /**\n     * Internal state to track whether we’re frozen.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {boolean | undefined}\n     */\n    this.frozen = undefined\n\n    /**\n     * Internal state.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {Data}\n     */\n    this.namespace = {}\n\n    /**\n     * Parser to use.\n     *\n     * @type {(\n     *   Parser<ParseTree extends undefined ? Node : ParseTree> |\n     *   undefined\n     * )}\n     */\n    this.parser = undefined\n\n    /**\n     * Internal list of configured transformers.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {Pipeline}\n     */\n    this.transformers = trough()\n  }\n\n  /**\n   * Copy a processor.\n   *\n   * @deprecated\n   *   This is a private internal method and should not be used.\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *   New *unfrozen* processor ({@linkcode Processor}) that is\n   *   configured to work the same as its ancestor.\n   *   When the descendant processor is configured in the future it does not\n   *   affect the ancestral processor.\n   */\n  copy() {\n    // Cast as the type parameters will be the same after attaching.\n    const destination =\n      /** @type {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>} */ (\n        new Processor()\n      )\n    let index = -1\n\n    while (++index < this.attachers.length) {\n      const attacher = this.attachers[index]\n      destination.use(...attacher)\n    }\n\n    destination.data(extend(true, {}, this.namespace))\n\n    return destination\n  }\n\n  /**\n   * Configure the processor with info available to all plugins.\n   * Information is stored in an object.\n   *\n   * Typically, options can be given to a specific plugin, but sometimes it\n   * makes sense to have information shared with several plugins.\n   * For example, a list of HTML elements that are self-closing, which is\n   * needed during all phases.\n   *\n   * > **Note**: setting information cannot occur on *frozen* processors.\n   * > Call the processor first to create a new unfrozen processor.\n   *\n   * > **Note**: to register custom data in TypeScript, augment the\n   * > {@linkcode Data} interface.\n   *\n   * @example\n   *   This example show how to get and set info:\n   *\n   *   ```js\n   *   import {unified} from 'unified'\n   *\n   *   const processor = unified().data('alpha', 'bravo')\n   *\n   *   processor.data('alpha') // => 'bravo'\n   *\n   *   processor.data() // => {alpha: 'bravo'}\n   *\n   *   processor.data({charlie: 'delta'})\n   *\n   *   processor.data() // => {charlie: 'delta'}\n   *   ```\n   *\n   * @template {keyof Data} Key\n   *\n   * @overload\n   * @returns {Data}\n   *\n   * @overload\n   * @param {Data} dataset\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @overload\n   * @param {Key} key\n   * @returns {Data[Key]}\n   *\n   * @overload\n   * @param {Key} key\n   * @param {Data[Key]} value\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @param {Data | Key} [key]\n   *   Key to get or set, or entire dataset to set, or nothing to get the\n   *   entire dataset (optional).\n   * @param {Data[Key]} [value]\n   *   Value to set (optional).\n   * @returns {unknown}\n   *   The current processor when setting, the value at `key` when getting, or\n   *   the entire dataset when getting without key.\n   */\n  data(key, value) {\n    if (typeof key === 'string') {\n      // Set `key`.\n      if (arguments.length === 2) {\n        assertUnfrozen('data', this.frozen)\n        this.namespace[key] = value\n        return this\n      }\n\n      // Get `key`.\n      return (own.call(this.namespace, key) && this.namespace[key]) || undefined\n    }\n\n    // Set space.\n    if (key) {\n      assertUnfrozen('data', this.frozen)\n      this.namespace = key\n      return this\n    }\n\n    // Get space.\n    return this.namespace\n  }\n\n  /**\n   * Freeze a processor.\n   *\n   * Frozen processors are meant to be extended and not to be configured\n   * directly.\n   *\n   * When a processor is frozen it cannot be unfrozen.\n   * New processors working the same way can be created by calling the\n   * processor.\n   *\n   * It’s possible to freeze processors explicitly by calling `.freeze()`.\n   * Processors freeze automatically when `.parse()`, `.run()`, `.runSync()`,\n   * `.stringify()`, `.process()`, or `.processSync()` are called.\n   *\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *   The current processor.\n   */\n  freeze() {\n    if (this.frozen) {\n      return this\n    }\n\n    // Cast so that we can type plugins easier.\n    // Plugins are supposed to be usable on different processors, not just on\n    // this exact processor.\n    const self = /** @type {Processor} */ (/** @type {unknown} */ (this))\n\n    while (++this.freezeIndex < this.attachers.length) {\n      const [attacher, ...options] = this.attachers[this.freezeIndex]\n\n      if (options[0] === false) {\n        continue\n      }\n\n      if (options[0] === true) {\n        options[0] = undefined\n      }\n\n      const transformer = attacher.call(self, ...options)\n\n      if (typeof transformer === 'function') {\n        this.transformers.use(transformer)\n      }\n    }\n\n    this.frozen = true\n    this.freezeIndex = Number.POSITIVE_INFINITY\n\n    return this\n  }\n\n  /**\n   * Parse text to a syntax tree.\n   *\n   * > **Note**: `parse` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `parse` performs the parse phase, not the run phase or other\n   * > phases.\n   *\n   * @param {Compatible | undefined} [file]\n   *   file to parse (optional); typically `string` or `VFile`; any value\n   *   accepted as `x` in `new VFile(x)`.\n   * @returns {ParseTree extends undefined ? Node : ParseTree}\n   *   Syntax tree representing `file`.\n   */\n  parse(file) {\n    this.freeze()\n    const realFile = vfile(file)\n    const parser = this.parser || this.Parser\n    assertParser('parse', parser)\n    return parser(String(realFile), realFile)\n  }\n\n  /**\n   * Process the given file as configured on the processor.\n   *\n   * > **Note**: `process` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `process` performs the parse, run, and stringify phases.\n   *\n   * @overload\n   * @param {Compatible | undefined} file\n   * @param {ProcessCallback<VFileWithOutput<CompileResult>>} done\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {Compatible | undefined} [file]\n   * @returns {Promise<VFileWithOutput<CompileResult>>}\n   *\n   * @param {Compatible | undefined} [file]\n   *   File (optional); typically `string` or `VFile`]; any value accepted as\n   *   `x` in `new VFile(x)`.\n   * @param {ProcessCallback<VFileWithOutput<CompileResult>> | undefined} [done]\n   *   Callback (optional).\n   * @returns {Promise<VFile> | undefined}\n   *   Nothing if `done` is given.\n   *   Otherwise a promise, rejected with a fatal error or resolved with the\n   *   processed file.\n   *\n   *   The parsed, transformed, and compiled value is available at\n   *   `file.value` (see note).\n   *\n   *   > **Note**: unified typically compiles by serializing: most\n   *   > compilers return `string` (or `Uint8Array`).\n   *   > Some compilers, such as the one configured with\n   *   > [`rehype-react`][rehype-react], return other values (in this case, a\n   *   > React tree).\n   *   > If you’re using a compiler that doesn’t serialize, expect different\n   *   > result values.\n   *   >\n   *   > To register custom results in TypeScript, add them to\n   *   > {@linkcode CompileResultMap}.\n   *\n   *   [rehype-react]: https://github.com/rehypejs/rehype-react\n   */\n  process(file, done) {\n    const self = this\n\n    this.freeze()\n    assertParser('process', this.parser || this.Parser)\n    assertCompiler('process', this.compiler || this.Compiler)\n\n    return done ? executor(undefined, done) : new Promise(executor)\n\n    // Note: `void`s needed for TS.\n    /**\n     * @param {((file: VFileWithOutput<CompileResult>) => undefined | void) | undefined} resolve\n     * @param {(error: Error | undefined) => undefined | void} reject\n     * @returns {undefined}\n     */\n    function executor(resolve, reject) {\n      const realFile = vfile(file)\n      // Assume `ParseTree` (the result of the parser) matches `HeadTree` (the\n      // input of the first transform).\n      const parseTree =\n        /** @type {HeadTree extends undefined ? Node : HeadTree} */ (\n          /** @type {unknown} */ (self.parse(realFile))\n        )\n\n      self.run(parseTree, realFile, function (error, tree, file) {\n        if (error || !tree || !file) {\n          return realDone(error)\n        }\n\n        // Assume `TailTree` (the output of the last transform) matches\n        // `CompileTree` (the input of the compiler).\n        const compileTree =\n          /** @type {CompileTree extends undefined ? Node : CompileTree} */ (\n            /** @type {unknown} */ (tree)\n          )\n\n        const compileResult = self.stringify(compileTree, file)\n\n        if (looksLikeAValue(compileResult)) {\n          file.value = compileResult\n        } else {\n          file.result = compileResult\n        }\n\n        realDone(error, /** @type {VFileWithOutput<CompileResult>} */ (file))\n      })\n\n      /**\n       * @param {Error | undefined} error\n       * @param {VFileWithOutput<CompileResult> | undefined} [file]\n       * @returns {undefined}\n       */\n      function realDone(error, file) {\n        if (error || !file) {\n          reject(error)\n        } else if (resolve) {\n          resolve(file)\n        } else {\n          assert(done, '`done` is defined if `resolve` is not')\n          done(undefined, file)\n        }\n      }\n    }\n  }\n\n  /**\n   * Process the given file as configured on the processor.\n   *\n   * An error is thrown if asynchronous transforms are configured.\n   *\n   * > **Note**: `processSync` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `processSync` performs the parse, run, and stringify phases.\n   *\n   * @param {Compatible | undefined} [file]\n   *   File (optional); typically `string` or `VFile`; any value accepted as\n   *   `x` in `new VFile(x)`.\n   * @returns {VFileWithOutput<CompileResult>}\n   *   The processed file.\n   *\n   *   The parsed, transformed, and compiled value is available at\n   *   `file.value` (see note).\n   *\n   *   > **Note**: unified typically compiles by serializing: most\n   *   > compilers return `string` (or `Uint8Array`).\n   *   > Some compilers, such as the one configured with\n   *   > [`rehype-react`][rehype-react], return other values (in this case, a\n   *   > React tree).\n   *   > If you’re using a compiler that doesn’t serialize, expect different\n   *   > result values.\n   *   >\n   *   > To register custom results in TypeScript, add them to\n   *   > {@linkcode CompileResultMap}.\n   *\n   *   [rehype-react]: https://github.com/rehypejs/rehype-react\n   */\n  processSync(file) {\n    /** @type {boolean} */\n    let complete = false\n    /** @type {VFileWithOutput<CompileResult> | undefined} */\n    let result\n\n    this.freeze()\n    assertParser('processSync', this.parser || this.Parser)\n    assertCompiler('processSync', this.compiler || this.Compiler)\n\n    this.process(file, realDone)\n    assertDone('processSync', 'process', complete)\n    assert(result, 'we either bailed on an error or have a tree')\n\n    return result\n\n    /**\n     * @type {ProcessCallback<VFileWithOutput<CompileResult>>}\n     */\n    function realDone(error, file) {\n      complete = true\n      bail(error)\n      result = file\n    }\n  }\n\n  /**\n   * Run *transformers* on a syntax tree.\n   *\n   * > **Note**: `run` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `run` performs the run phase, not other phases.\n   *\n   * @overload\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} done\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   * @param {Compatible | undefined} file\n   * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} done\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   * @param {Compatible | undefined} [file]\n   * @returns {Promise<TailTree extends undefined ? Node : TailTree>}\n   *\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   *   Tree to transform and inspect.\n   * @param {(\n   *   RunCallback<TailTree extends undefined ? Node : TailTree> |\n   *   Compatible\n   * )} [file]\n   *   File associated with `node` (optional); any value accepted as `x` in\n   *   `new VFile(x)`.\n   * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} [done]\n   *   Callback (optional).\n   * @returns {Promise<TailTree extends undefined ? Node : TailTree> | undefined}\n   *   Nothing if `done` is given.\n   *   Otherwise, a promise rejected with a fatal error or resolved with the\n   *   transformed tree.\n   */\n  run(tree, file, done) {\n    assertNode(tree)\n    this.freeze()\n\n    const transformers = this.transformers\n\n    if (!done && typeof file === 'function') {\n      done = file\n      file = undefined\n    }\n\n    return done ? executor(undefined, done) : new Promise(executor)\n\n    // Note: `void`s needed for TS.\n    /**\n     * @param {(\n     *   ((tree: TailTree extends undefined ? Node : TailTree) => undefined | void) |\n     *   undefined\n     * )} resolve\n     * @param {(error: Error) => undefined | void} reject\n     * @returns {undefined}\n     */\n    function executor(resolve, reject) {\n      assert(\n        typeof file !== 'function',\n        '`file` can’t be a `done` anymore, we checked'\n      )\n      const realFile = vfile(file)\n      transformers.run(tree, realFile, realDone)\n\n      /**\n       * @param {Error | undefined} error\n       * @param {Node} outputTree\n       * @param {VFile} file\n       * @returns {undefined}\n       */\n      function realDone(error, outputTree, file) {\n        const resultingTree =\n          /** @type {TailTree extends undefined ? Node : TailTree} */ (\n            outputTree || tree\n          )\n\n        if (error) {\n          reject(error)\n        } else if (resolve) {\n          resolve(resultingTree)\n        } else {\n          assert(done, '`done` is defined if `resolve` is not')\n          done(undefined, resultingTree, file)\n        }\n      }\n    }\n  }\n\n  /**\n   * Run *transformers* on a syntax tree.\n   *\n   * An error is thrown if asynchronous transforms are configured.\n   *\n   * > **Note**: `runSync` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `runSync` performs the run phase, not other phases.\n   *\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   *   Tree to transform and inspect.\n   * @param {Compatible | undefined} [file]\n   *   File associated with `node` (optional); any value accepted as `x` in\n   *   `new VFile(x)`.\n   * @returns {TailTree extends undefined ? Node : TailTree}\n   *   Transformed tree.\n   */\n  runSync(tree, file) {\n    /** @type {boolean} */\n    let complete = false\n    /** @type {(TailTree extends undefined ? Node : TailTree) | undefined} */\n    let result\n\n    this.run(tree, file, realDone)\n\n    assertDone('runSync', 'run', complete)\n    assert(result, 'we either bailed on an error or have a tree')\n    return result\n\n    /**\n     * @type {RunCallback<TailTree extends undefined ? Node : TailTree>}\n     */\n    function realDone(error, tree) {\n      bail(error)\n      result = tree\n      complete = true\n    }\n  }\n\n  /**\n   * Compile a syntax tree.\n   *\n   * > **Note**: `stringify` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `stringify` performs the stringify phase, not the run phase\n   * > or other phases.\n   *\n   * @param {CompileTree extends undefined ? Node : CompileTree} tree\n   *   Tree to compile.\n   * @param {Compatible | undefined} [file]\n   *   File associated with `node` (optional); any value accepted as `x` in\n   *   `new VFile(x)`.\n   * @returns {CompileResult extends undefined ? Value : CompileResult}\n   *   Textual representation of the tree (see note).\n   *\n   *   > **Note**: unified typically compiles by serializing: most compilers\n   *   > return `string` (or `Uint8Array`).\n   *   > Some compilers, such as the one configured with\n   *   > [`rehype-react`][rehype-react], return other values (in this case, a\n   *   > React tree).\n   *   > If you’re using a compiler that doesn’t serialize, expect different\n   *   > result values.\n   *   >\n   *   > To register custom results in TypeScript, add them to\n   *   > {@linkcode CompileResultMap}.\n   *\n   *   [rehype-react]: https://github.com/rehypejs/rehype-react\n   */\n  stringify(tree, file) {\n    this.freeze()\n    const realFile = vfile(file)\n    const compiler = this.compiler || this.Compiler\n    assertCompiler('stringify', compiler)\n    assertNode(tree)\n\n    return compiler(tree, realFile)\n  }\n\n  /**\n   * Configure the processor to use a plugin, a list of usable values, or a\n   * preset.\n   *\n   * If the processor is already using a plugin, the previous plugin\n   * configuration is changed based on the options that are passed in.\n   * In other words, the plugin is not added a second time.\n   *\n   * > **Note**: `use` cannot be called on *frozen* processors.\n   * > Call the processor first to create a new unfrozen processor.\n   *\n   * @example\n   *   There are many ways to pass plugins to `.use()`.\n   *   This example gives an overview:\n   *\n   *   ```js\n   *   import {unified} from 'unified'\n   *\n   *   unified()\n   *     // Plugin with options:\n   *     .use(pluginA, {x: true, y: true})\n   *     // Passing the same plugin again merges configuration (to `{x: true, y: false, z: true}`):\n   *     .use(pluginA, {y: false, z: true})\n   *     // Plugins:\n   *     .use([pluginB, pluginC])\n   *     // Two plugins, the second with options:\n   *     .use([pluginD, [pluginE, {}]])\n   *     // Preset with plugins and settings:\n   *     .use({plugins: [pluginF, [pluginG, {}]], settings: {position: false}})\n   *     // Settings only:\n   *     .use({settings: {position: false}})\n   *   ```\n   *\n   * @template {Array<unknown>} [Parameters=[]]\n   * @template {Node | string | undefined} [Input=undefined]\n   * @template [Output=Input]\n   *\n   * @overload\n   * @param {Preset | null | undefined} [preset]\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @overload\n   * @param {PluggableList} list\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @overload\n   * @param {Plugin<Parameters, Input, Output>} plugin\n   * @param {...(Parameters | [boolean])} parameters\n   * @returns {UsePlugin<ParseTree, HeadTree, TailTree, CompileTree, CompileResult, Input, Output>}\n   *\n   * @param {PluggableList | Plugin | Preset | null | undefined} value\n   *   Usable value.\n   * @param {...unknown} parameters\n   *   Parameters, when a plugin is given as a usable value.\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *   Current processor.\n   */\n  use(value, ...parameters) {\n    const attachers = this.attachers\n    const namespace = this.namespace\n\n    assertUnfrozen('use', this.frozen)\n\n    if (value === null || value === undefined) {\n      // Empty.\n    } else if (typeof value === 'function') {\n      addPlugin(value, parameters)\n    } else if (typeof value === 'object') {\n      if (Array.isArray(value)) {\n        addList(value)\n      } else {\n        addPreset(value)\n      }\n    } else {\n      throw new TypeError('Expected usable value, not `' + value + '`')\n    }\n\n    return this\n\n    /**\n     * @param {Pluggable} value\n     * @returns {undefined}\n     */\n    function add(value) {\n      if (typeof value === 'function') {\n        addPlugin(value, [])\n      } else if (typeof value === 'object') {\n        if (Array.isArray(value)) {\n          const [plugin, ...parameters] =\n            /** @type {PluginTuple<Array<unknown>>} */ (value)\n          addPlugin(plugin, parameters)\n        } else {\n          addPreset(value)\n        }\n      } else {\n        throw new TypeError('Expected usable value, not `' + value + '`')\n      }\n    }\n\n    /**\n     * @param {Preset} result\n     * @returns {undefined}\n     */\n    function addPreset(result) {\n      if (!('plugins' in result) && !('settings' in result)) {\n        throw new Error(\n          'Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither'\n        )\n      }\n\n      addList(result.plugins)\n\n      if (result.settings) {\n        namespace.settings = extend(true, namespace.settings, result.settings)\n      }\n    }\n\n    /**\n     * @param {PluggableList | null | undefined} plugins\n     * @returns {undefined}\n     */\n    function addList(plugins) {\n      let index = -1\n\n      if (plugins === null || plugins === undefined) {\n        // Empty.\n      } else if (Array.isArray(plugins)) {\n        while (++index < plugins.length) {\n          const thing = plugins[index]\n          add(thing)\n        }\n      } else {\n        throw new TypeError('Expected a list of plugins, not `' + plugins + '`')\n      }\n    }\n\n    /**\n     * @param {Plugin} plugin\n     * @param {Array<unknown>} parameters\n     * @returns {undefined}\n     */\n    function addPlugin(plugin, parameters) {\n      let index = -1\n      let entryIndex = -1\n\n      while (++index < attachers.length) {\n        if (attachers[index][0] === plugin) {\n          entryIndex = index\n          break\n        }\n      }\n\n      if (entryIndex === -1) {\n        attachers.push([plugin, ...parameters])\n      }\n      // Only set if there was at least a `primary` value, otherwise we’d change\n      // `arguments.length`.\n      else if (parameters.length > 0) {\n        let [primary, ...rest] = parameters\n        const currentPrimary = attachers[entryIndex][1]\n        if (isPlainObj(currentPrimary) && isPlainObj(primary)) {\n          primary = extend(true, currentPrimary, primary)\n        }\n\n        attachers[entryIndex] = [plugin, primary, ...rest]\n      }\n    }\n  }\n}\n\n// Note: this returns a *callable* instance.\n// That’s why it’s documented as a function.\n/**\n * Create a new processor.\n *\n * @example\n *   This example shows how a new processor can be created (from `remark`) and linked\n *   to **stdin**(4) and **stdout**(4).\n *\n *   ```js\n *   import process from 'node:process'\n *   import concatStream from 'concat-stream'\n *   import {remark} from 'remark'\n *\n *   process.stdin.pipe(\n *     concatStream(function (buf) {\n *       process.stdout.write(String(remark().processSync(buf)))\n *     })\n *   )\n *   ```\n *\n * @returns\n *   New *unfrozen* processor (`processor`).\n *\n *   This processor is configured to work the same as its ancestor.\n *   When the descendant processor is configured in the future it does not\n *   affect the ancestral processor.\n */\nexport const unified = new Processor().freeze()\n\n/**\n * Assert a parser is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Parser}\n */\nfunction assertParser(name, value) {\n  if (typeof value !== 'function') {\n    throw new TypeError('Cannot `' + name + '` without `parser`')\n  }\n}\n\n/**\n * Assert a compiler is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Compiler}\n */\nfunction assertCompiler(name, value) {\n  if (typeof value !== 'function') {\n    throw new TypeError('Cannot `' + name + '` without `compiler`')\n  }\n}\n\n/**\n * Assert the processor is not frozen.\n *\n * @param {string} name\n * @param {unknown} frozen\n * @returns {asserts frozen is false}\n */\nfunction assertUnfrozen(name, frozen) {\n  if (frozen) {\n    throw new Error(\n      'Cannot call `' +\n        name +\n        '` on a frozen processor.\\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.'\n    )\n  }\n}\n\n/**\n * Assert `node` is a unist node.\n *\n * @param {unknown} node\n * @returns {asserts node is Node}\n */\nfunction assertNode(node) {\n  // `isPlainObj` unfortunately uses `any` instead of `unknown`.\n  // type-coverage:ignore-next-line\n  if (!isPlainObj(node) || typeof node.type !== 'string') {\n    throw new TypeError('Expected node, got `' + node + '`')\n    // Fine.\n  }\n}\n\n/**\n * Assert that `complete` is `true`.\n *\n * @param {string} name\n * @param {string} asyncName\n * @param {unknown} complete\n * @returns {asserts complete is true}\n */\nfunction assertDone(name, asyncName, complete) {\n  if (!complete) {\n    throw new Error(\n      '`' + name + '` finished async. Use `' + asyncName + '` instead'\n    )\n  }\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {VFile}\n */\nfunction vfile(value) {\n  return looksLikeAVFile(value) ? value : new VFile(value)\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {value is VFile}\n */\nfunction looksLikeAVFile(value) {\n  return Boolean(\n    value &&\n      typeof value === 'object' &&\n      'message' in value &&\n      'messages' in value\n  )\n}\n\n/**\n * @param {unknown} [value]\n * @returns {value is Value}\n */\nfunction looksLikeAValue(value) {\n  return typeof value === 'string' || isUint8Array(value)\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n *   thing.\n * @returns {value is Uint8Array}\n *   Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n  return Boolean(\n    value &&\n      typeof value === 'object' &&\n      'byteLength' in value &&\n      'byteOffset' in value\n  )\n}\n","// Register `Raw` in tree:\n/// <reference types=\"mdast-util-to-hast\" />\n\n/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Nodes} Nodes\n * @typedef {import('hast').Parents} Parents\n * @typedef {import('hast').Root} Root\n * @typedef {import('hast-util-to-jsx-runtime').Components} JsxRuntimeComponents\n * @typedef {import('remark-rehype').Options} RemarkRehypeOptions\n * @typedef {import('unist-util-visit').BuildVisitor<Root>} Visitor\n * @typedef {import('unified').PluggableList} PluggableList\n */\n\n/**\n * @callback AllowElement\n *   Filter elements.\n * @param {Readonly<Element>} element\n *   Element to check.\n * @param {number} index\n *   Index of `element` in `parent`.\n * @param {Readonly<Parents> | undefined} parent\n *   Parent of `element`.\n * @returns {boolean | null | undefined}\n *   Whether to allow `element` (default: `false`).\n *\n * @typedef {Partial<JsxRuntimeComponents>} Components\n *   Map tag names to components.\n *\n * @typedef Deprecation\n *   Deprecation.\n * @property {string} from\n *   Old field.\n * @property {string} id\n *   ID in readme.\n * @property {keyof Options} [to]\n *   New field.\n *\n * @typedef Options\n *   Configuration.\n * @property {AllowElement | null | undefined} [allowElement]\n *   Filter elements (optional);\n *   `allowedElements` / `disallowedElements` is used first.\n * @property {ReadonlyArray<string> | null | undefined} [allowedElements]\n *   Tag names to allow (default: all tag names);\n *   cannot combine w/ `disallowedElements`.\n * @property {string | null | undefined} [children]\n *   Markdown.\n * @property {string | null | undefined} [className]\n *   Wrap in a `div` with this class name.\n * @property {Components | null | undefined} [components]\n *   Map tag names to components.\n * @property {ReadonlyArray<string> | null | undefined} [disallowedElements]\n *   Tag names to disallow (default: `[]`);\n *   cannot combine w/ `allowedElements`.\n * @property {PluggableList | null | undefined} [rehypePlugins]\n *   List of rehype plugins to use.\n * @property {PluggableList | null | undefined} [remarkPlugins]\n *   List of remark plugins to use.\n * @property {Readonly<RemarkRehypeOptions> | null | undefined} [remarkRehypeOptions]\n *   Options to pass through to `remark-rehype`.\n * @property {boolean | null | undefined} [skipHtml=false]\n *   Ignore HTML in markdown completely (default: `false`).\n * @property {boolean | null | undefined} [unwrapDisallowed=false]\n *   Extract (unwrap) what’s in disallowed elements (default: `false`);\n *   normally when say `strong` is not allowed, it and it’s children are dropped,\n *   with `unwrapDisallowed` the element itself is replaced by its children.\n * @property {UrlTransform | null | undefined} [urlTransform]\n *   Change URLs (default: `defaultUrlTransform`)\n *\n * @callback UrlTransform\n *   Transform all URLs.\n * @param {string} url\n *   URL.\n * @param {string} key\n *   Property name (example: `'href'`).\n * @param {Readonly<Element>} node\n *   Node.\n * @returns {string | null | undefined}\n *   Transformed URL (optional).\n */\n\nimport {unreachable} from 'devlop'\nimport {toJsxRuntime} from 'hast-util-to-jsx-runtime'\nimport {urlAttributes} from 'html-url-attributes'\n// @ts-expect-error: untyped.\nimport {Fragment, jsx, jsxs} from 'react/jsx-runtime'\nimport remarkParse from 'remark-parse'\nimport remarkRehype from 'remark-rehype'\nimport {unified} from 'unified'\nimport {visit} from 'unist-util-visit'\nimport {VFile} from 'vfile'\n\nconst changelog =\n  'https://github.com/remarkjs/react-markdown/blob/main/changelog.md'\n\n/** @type {PluggableList} */\nconst emptyPlugins = []\n/** @type {Readonly<RemarkRehypeOptions>} */\nconst emptyRemarkRehypeOptions = {allowDangerousHtml: true}\nconst safeProtocol = /^(https?|ircs?|mailto|xmpp)$/i\n\n// Mutable because we `delete` any time it’s used and a message is sent.\n/** @type {ReadonlyArray<Readonly<Deprecation>>} */\nconst deprecations = [\n  {from: 'astPlugins', id: 'remove-buggy-html-in-markdown-parser'},\n  {from: 'allowDangerousHtml', id: 'remove-buggy-html-in-markdown-parser'},\n  {\n    from: 'allowNode',\n    id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n    to: 'allowElement'\n  },\n  {\n    from: 'allowedTypes',\n    id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n    to: 'allowedElements'\n  },\n  {\n    from: 'disallowedTypes',\n    id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n    to: 'disallowedElements'\n  },\n  {from: 'escapeHtml', id: 'remove-buggy-html-in-markdown-parser'},\n  {from: 'includeElementIndex', id: '#remove-includeelementindex'},\n  {\n    from: 'includeNodeIndex',\n    id: 'change-includenodeindex-to-includeelementindex'\n  },\n  {from: 'linkTarget', id: 'remove-linktarget'},\n  {from: 'plugins', id: 'change-plugins-to-remarkplugins', to: 'remarkPlugins'},\n  {from: 'rawSourcePos', id: '#remove-rawsourcepos'},\n  {from: 'renderers', id: 'change-renderers-to-components', to: 'components'},\n  {from: 'source', id: 'change-source-to-children', to: 'children'},\n  {from: 'sourcePos', id: '#remove-sourcepos'},\n  {from: 'transformImageUri', id: '#add-urltransform', to: 'urlTransform'},\n  {from: 'transformLinkUri', id: '#add-urltransform', to: 'urlTransform'}\n]\n\n/**\n * Component to render markdown.\n *\n * @param {Readonly<Options>} options\n *   Props.\n * @returns {JSX.Element}\n *   React element.\n */\nexport function Markdown(options) {\n  const allowedElements = options.allowedElements\n  const allowElement = options.allowElement\n  const children = options.children || ''\n  const className = options.className\n  const components = options.components\n  const disallowedElements = options.disallowedElements\n  const rehypePlugins = options.rehypePlugins || emptyPlugins\n  const remarkPlugins = options.remarkPlugins || emptyPlugins\n  const remarkRehypeOptions = options.remarkRehypeOptions\n    ? {...options.remarkRehypeOptions, ...emptyRemarkRehypeOptions}\n    : emptyRemarkRehypeOptions\n  const skipHtml = options.skipHtml\n  const unwrapDisallowed = options.unwrapDisallowed\n  const urlTransform = options.urlTransform || defaultUrlTransform\n\n  const processor = unified()\n    .use(remarkParse)\n    .use(remarkPlugins)\n    .use(remarkRehype, remarkRehypeOptions)\n    .use(rehypePlugins)\n\n  const file = new VFile()\n\n  if (typeof children === 'string') {\n    file.value = children\n  } else {\n    unreachable(\n      'Unexpected value `' +\n        children +\n        '` for `children` prop, expected `string`'\n    )\n  }\n\n  if (allowedElements && disallowedElements) {\n    unreachable(\n      'Unexpected combined `allowedElements` and `disallowedElements`, expected one or the other'\n    )\n  }\n\n  for (const deprecation of deprecations) {\n    if (Object.hasOwn(options, deprecation.from)) {\n      unreachable(\n        'Unexpected `' +\n          deprecation.from +\n          '` prop, ' +\n          (deprecation.to\n            ? 'use `' + deprecation.to + '` instead'\n            : 'remove it') +\n          ' (see <' +\n          changelog +\n          '#' +\n          deprecation.id +\n          '> for more info)'\n      )\n    }\n  }\n\n  const mdastTree = processor.parse(file)\n  /** @type {Nodes} */\n  let hastTree = processor.runSync(mdastTree, file)\n\n  // Wrap in `div` if there’s a class name.\n  if (className) {\n    hastTree = {\n      type: 'element',\n      tagName: 'div',\n      properties: {className},\n      // Assume no doctypes.\n      children: /** @type {Array<ElementContent>} */ (\n        hastTree.type === 'root' ? hastTree.children : [hastTree]\n      )\n    }\n  }\n\n  visit(hastTree, transform)\n\n  return toJsxRuntime(hastTree, {\n    Fragment,\n    components,\n    ignoreInvalidStyle: true,\n    jsx,\n    jsxs,\n    passKeys: true,\n    passNode: true\n  })\n\n  /** @type {Visitor} */\n  function transform(node, index, parent) {\n    if (node.type === 'raw' && parent && typeof index === 'number') {\n      if (skipHtml) {\n        parent.children.splice(index, 1)\n      } else {\n        parent.children[index] = {type: 'text', value: node.value}\n      }\n\n      return index\n    }\n\n    if (node.type === 'element') {\n      /** @type {string} */\n      let key\n\n      for (key in urlAttributes) {\n        if (\n          Object.hasOwn(urlAttributes, key) &&\n          Object.hasOwn(node.properties, key)\n        ) {\n          const value = node.properties[key]\n          const test = urlAttributes[key]\n          if (test === null || test.includes(node.tagName)) {\n            node.properties[key] = urlTransform(String(value || ''), key, node)\n          }\n        }\n      }\n    }\n\n    if (node.type === 'element') {\n      let remove = allowedElements\n        ? !allowedElements.includes(node.tagName)\n        : disallowedElements\n        ? disallowedElements.includes(node.tagName)\n        : false\n\n      if (!remove && allowElement && typeof index === 'number') {\n        remove = !allowElement(node, index, parent)\n      }\n\n      if (remove && parent && typeof index === 'number') {\n        if (unwrapDisallowed && node.children) {\n          parent.children.splice(index, 1, ...node.children)\n        } else {\n          parent.children.splice(index, 1)\n        }\n\n        return index\n      }\n    }\n  }\n}\n\n/**\n * Make a URL safe.\n *\n * @satisfies {UrlTransform}\n * @param {string} value\n *   URL.\n * @returns {string}\n *   Safe URL.\n */\nexport function defaultUrlTransform(value) {\n  // Same as:\n  // <https://github.com/micromark/micromark/blob/929275e/packages/micromark-util-sanitize-uri/dev/index.js#L34>\n  // But without the `encode` part.\n  const colon = value.indexOf(':')\n  const questionMark = value.indexOf('?')\n  const numberSign = value.indexOf('#')\n  const slash = value.indexOf('/')\n\n  if (\n    // If there is no protocol, it’s relative.\n    colon < 0 ||\n    // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol.\n    (slash > -1 && colon > slash) ||\n    (questionMark > -1 && colon > questionMark) ||\n    (numberSign > -1 && colon > numberSign) ||\n    // It is a protocol, it should be allowed.\n    safeProtocol.test(value.slice(0, colon))\n  ) {\n    return value\n  }\n\n  return ''\n}\n","// src/components/DraggablePopover/DraggablePopover.styles.ts\n\nimport styled, { keyframes } from 'styled-components';\n\nconst spin = keyframes`\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n`;\n\nexport const CloseButton = styled.button`\n  position: absolute;\n  top: 10px;\n  right: 10px;\n  background: transparent;\n  border: none;\n  font-size: 24px;\n  cursor: pointer;\n\n  &:hover {\n    color: #ff0000;\n  }\n`;\n\nexport const PopoverContainer = styled.div`\n  position: absolute;\n  width: 28%;\n  height: 80vh;\n  padding: 60px 20px 0 20px; /* Adjust padding to accommodate title */\n  background: white;\n  border: 1px solid #ccc;\n  border-radius: 10px;\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n  z-index: 10;\n  overflow: hidden;\n  border: 2px solid #333;\n  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n  display: flex;\n  flex-direction: column;\n`;\n\nexport const PopoverContent = styled.div`\n  flex: 1;\n  overflow-y: auto;\n  padding-right: 10px; /* For scrollbar space */\n  -ms-overflow-style: none;  /* IE and Edge */\n  scrollbar-width: none;  /* Firefox */\n  \n  &::-webkit-scrollbar {\n    display: none;  /* Safari and Chrome */\n  }\n`;\n\nexport const ButtonContainer = styled.div`\n  border-top: 2px solid black;\n  width: calc(100% + 40px); /* Adjust width to compensate for the padding of PopoverContainer */\n  margin-left: -20px; /* Offset margin to align with PopoverContainer */\n  display: flex;\n  justify-content: space-around;\n  align-items: center;\n  padding: 10px 0;\n  background: white;\n  height: 50px; /* Adjust the height to not much bigger than the buttons */\n  flex-shrink: 0; /* Ensure the button container does not shrink */\n`;\n\nexport const Section = styled.div`\n  margin-bottom: 10px;\n  position: relative; /* Make section relative to position buttons */\n`;\n\nexport const SectionTitle = styled.div`\n  font-weight: bold;\n  cursor: pointer;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  border-bottom: 1px solid #ddd;\n  padding-bottom: 5px;\n\n  &:hover {\n    color: #007bff;\n  }\n`;\n\ninterface SectionContentProps {\n  isCollapsed: boolean;\n}\n\nexport const SectionContent = styled.div<SectionContentProps>`\n  margin-top: 5px;\n  max-height: ${(props) => (props.isCollapsed ? '0' : 'auto')};\n  overflow-y: hidden;\n  transition: max-height 0.3s ease-in-out;\n`;\n\nexport const Label = styled.label`\n  font-weight: bold;\n  margin-right: 5px;\n`;\n\nexport const Value = styled.span`\n  margin-left: 5px;\n`;\n\ninterface ExecuteButtonProps {\n  disabled?: boolean;\n}\n\nexport const ExecuteButton = styled.button<ExecuteButtonProps>`\n  padding: 8px 16px;\n  border: 2px solid black;\n  border-radius: 5px;\n  cursor: pointer;\n  font-size: 14px;\n  color: #fff;\n  background-color: green;\n  position: relative;\n  pointer-events: ${(props) => (props.disabled ? 'none' : 'auto')};\n  opacity: ${(props) => (props.disabled ? 0.5 : 1)};\n  margin-bottom: 5px; /* Add margin to separate buttons */\n\n  &:hover {\n    background-color: darkgreen;\n  }\n\n  img {\n    filter: brightness(0); /* Change the image color to black */\n    width: 20px;\n    height: 20px;\n  }\n\n  &::after {\n    content: attr(data-tooltip); /* Use data-tooltip attribute for tooltip content */\n    position: absolute;\n    bottom: 100%;\n    left: 50%;\n    transform: translateX(-50%);\n    background-color: black;\n    color: white;\n    padding: 5px;\n    border-radius: 5px;\n    font-size: 12px;\n    display: none;\n    white-space: nowrap;\n  }\n\n  &:hover::after {\n    display: block;\n  }\n`;\n\ninterface EvaluateButtonProps {\n  disabled?: boolean;\n}\n\nexport const EvaluateButton = styled.button<EvaluateButtonProps>`\n  padding: 8px 16px;\n  border: 2px solid black;\n  border-radius: 5px;\n  cursor: pointer;\n  font-size: 14px;\n  color: #fff;\n  background-color: yellow;\n  position: relative;\n  pointer-events: ${(props) => (props.disabled ? 'none' : 'auto')};\n  opacity: ${(props) => (props.disabled ? 0.5 : 1)};\n  margin-bottom: 5px; /* Add margin to separate buttons */\n\n  &:hover {\n    background-color: orange;\n  }\n\n  img {\n    filter: brightness(0); /* Change the image color to black */\n    width: 20px;\n    height: 20px;\n  }\n\n  &::after {\n    content: attr(data-tooltip); /* Use data-tooltip attribute for tooltip content */\n    position: absolute;\n    bottom: 100%;\n    left: 50%;\n    transform: translateX(-50%);\n    background-color: black;\n    color: white;\n    padding: 5px;\n    border-radius: 5px;\n    font-size: 12px;\n    display: none;\n    white-space: nowrap;\n  }\n\n  &:hover::after {\n    display: block;\n  }\n`;\n\nexport const LoadingIcon = styled.img`\n  animation: ${spin} 2s linear infinite;\n`;\n\nexport const EditButton = styled.button`\n  position: absolute;\n  top: 60px;\n  right: 20px;\n  background: orange;\n  padding: 5px 10px;\n  border: 2px solid black;\n  border-radius: 5px;\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  z-index: 3; \n\n  img {\n    width: 15px;\n    height: 15px;\n    margin-right: 3px;\n    filter: brightness(0); \n  }\n\n  &:hover {\n    background: #ff8c00; \n  }\n`;\n\nexport const ResolveButton = styled.button`\n  position: absolute;\n  top: 60px;\n  right: 70px;\n  background: orange;\n  padding: 5px 10px;\n  border: 2px solid black;\n  border-radius: 5px;\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  z-index: 3; \n\n  img {\n    width: 15px;\n    height: 15px;\n    margin-right: 3px;\n    filter: brightness(0); \n  }\n\n  &:hover {\n    background: #ff8c00;\n  }\n`;\n\nexport const TitleBand = styled.div`\n  background-color: orange;\n  width: 100%;\n  height: 40px;\n  padding: 8px 0;\n  border-bottom: 2px solid black;\n  border-color: black;\n  position: absolute;\n  top: 0;\n  left: 0;\n  border-top-left-radius: 8px;\n  border-top-right-radius: 8px;\n  text-align: center;\n  font-weight: bold;\n  line-height: 40px;\n  cursor: grab;\n`;\n\nexport const CopyButton = styled.button`\n  background: orange;\n  padding: 5px 10px;\n  border: 2px solid black;\n  border-radius: 5px;\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  margin-left: 10px; /* Add some space between the buttons */\n  position: relative;\n  top: -5px; /* Move up by 5px */\n  right: -7px; /* Move right by 5px */\n\n  img {\n    width: 15px;\n    height: 15px;\n    margin-right: 3px;\n    filter: brightness(0); \n  }\n\n  &:hover {\n    background: #ff8c00;\n  }\n`;\n\nexport const ModalButton = styled.button`\n  background: orange;\n  padding: 5px 10px;\n  border: 2px solid black;\n  border-radius: 5px;\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  margin-left: 10px; /* Add some space between the buttons */\n  position: relative;\n  top: -5px; /* Move up by 5px */\n  right: -5px; /* Move right by 5px */\n\n  img {\n    width: 15px;\n    height: 15px;\n    margin-right: 3px;\n    filter: brightness(0); \n  }\n\n  &:hover {\n    background: #ff8c00;\n  }\n`;\n\nexport const OutputSection = styled.div`\n  align-items: center;\n  width: 100%;\n  justify-content: space-between;\n  margin-bottom: 10px;\n  position: relative;\n`;\n\nexport const ButtonGroup = styled.div`\n  display: flex;\n  align-items: center;\n  position: absolute;\n  right: 0;\n  top: 0;\n  z-index: 2; /* Ensure buttons are above the output section */\n  top: -3px; /* Move up by 3px */\n  right: -5px; /* Move right by 5px */\n`;\n\nexport const AddPluginButton = styled.button`\n  background: orange;\n  padding: 5px 10px;\n  border: 2px solid black;\n  border-radius: 5px;\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  position: absolute;\n  right: -10px;\n  top: -7px; /* Move up by 5px */\n\n  img {\n    width: 15px;\n    height: 15px;\n    margin-right: 3px;\n    filter: brightness(0); \n  }\n\n  &:hover {\n    background: #ff8c00;\n  }\n`;\n\nexport const PluginsContainer = styled.div`\n  width: 100%;\n  padding: 10px 0;\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n`;\n","// src/components/PluginSelector/PluginSelector.styles.ts\n\nimport styled from 'styled-components';\n\nexport const Modal = styled.div`\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: rgba(0, 0, 0, 0.5);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  z-index: 1000;\n`;\n\nexport const ModalContainer = styled.div`\n  background: white;\n  border-radius: 10px;\n  width: 400px;\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n  position: relative;\n`;\n\nexport const ModalHeader = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 10px 20px;\n  border-bottom: 1px solid #ddd;\n`;\n\nexport const ModalContent = styled.div`\n  padding: 20px;\n`;\n\nexport const ModalFooter = styled.div`\n  display: flex;\n  justify-content: flex-end;\n  padding: 10px 20px;\n  border-top: 1px solid #ddd;\n`;\n\nexport const CloseButton = styled.button`\n  background: transparent;\n  border: none;\n  font-size: 24px;\n  cursor: pointer;\n\n  &:hover {\n    color: #ff0000;\n  }\n`;\n\nexport const Select = styled.select`\n  width: 100%;\n  padding: 10px;\n  border: 1px solid #ddd;\n  border-radius: 5px;\n  margin-top: 10px;\n`;\n\nexport const Button = styled.button`\n  padding: 10px 20px;\n  background-color: orange;\n  border: 1px solid black;\n  border-radius: 5px;\n  cursor: pointer;\n  font-size: 16px;\n  color: white;\n\n  &:hover {\n    background-color: #e08e0b;\n  }\n`;\n","// src/components/PluginSelector/PluginSelector.tsx\n\nimport React, { useState, useEffect } from 'react';\nimport { fetchPlugins, addPluginToCard } from '../../services/api';\nimport { Modal, CloseButton, Select, Button, ModalContainer, ModalHeader, ModalContent, ModalFooter } from './PluginSelector.styles';\nimport { closeIcon } from '../../assets';\n\ninterface PluginSelectorProps {\n  cardId: string;\n  onPluginAdded: (plugin: string) => void; // Update the type to accept a plugin parameter\n  onClose: () => void;\n}\n\nconst PluginSelector: React.FC<PluginSelectorProps> = ({ cardId, onPluginAdded, onClose }) => {\n  const [availablePlugins, setAvailablePlugins] = useState<string[]>([]);\n  const [selectedPlugin, setSelectedPlugin] = useState<string>('');\n\n  useEffect(() => {\n    const getPlugins = async () => {\n      const plugins = await fetchPlugins();\n      setAvailablePlugins(plugins);\n    };\n    getPlugins();\n  }, []);\n\n  const handleAddPlugin = async () => {\n    if (selectedPlugin) {\n      await addPluginToCard(cardId, selectedPlugin);\n      onPluginAdded(selectedPlugin); // Pass the selected plugin to the handler\n      onClose(); // Close the modal after adding plugin\n    }\n  };\n\n  return (\n    <Modal>\n      <ModalContainer>\n        <ModalHeader>\n          <h2>Select Plugin</h2>\n          <CloseButton onClick={onClose}>\n            <img src={closeIcon} alt=\"Close\" />\n          </CloseButton>\n        </ModalHeader>\n        <ModalContent>\n          <Select value={selectedPlugin} onChange={(e) => setSelectedPlugin(e.target.value)}>\n            <option value=\"\" disabled>Select a plugin</option>\n            {availablePlugins.map((plugin) => (\n              <option key={plugin} value={plugin}>{plugin}</option>\n            ))}\n          </Select>\n        </ModalContent>\n        <ModalFooter>\n          <Button onClick={handleAddPlugin}>OK</Button>\n        </ModalFooter>\n      </ModalContainer>\n    </Modal>\n  );\n};\n\nexport default PluginSelector;\n","// src/components/PluginSection/PluginSection.styles.ts\n\nimport styled from 'styled-components';\n\nexport const SectionContent = styled.div`\n  width: 100%;\n`;\n\nexport const PluginItem = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  font-weight: bold;\n  margin-top: 10px;\n  width: 100%;\n  margin-bottom: 10px;\n  border: 1px solid #ddd;\n  border-radius: 5px;\n  background-color: #fff;\n  text-align: center;\n  text-transform: capitalize;\n  padding: 5px;\n  padding-left: 5px;\n  cursor: pointer;\n  transition: all 0.3s ease-in-out;\n\n  &:hover {\n    border-color: orange;\n    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);\n  }\n`;\n\nexport const Button = styled.button`\n  background: orange;\n  padding: 5px 10px;\n  border: 2px solid black;\n  border-radius: 5px;\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n\n  img {\n    width: 15px;\n    height: 15px;\n    margin-right: 3px;\n    filter: brightness(0);\n  }\n\n  &:hover {\n    background: #ff8c00;\n  }\n`;\n","import React from 'react';\nimport { SectionContent, PluginItem, Button } from './PluginSection.styles';\nimport { openNewIcon } from '../../assets';\n\ninterface PluginSectionProps {\n  plugins: string[];\n  card: any;\n  onOpenModal: (type: string, data?: any) => void;\n}\n\nconst PluginSection: React.FC<PluginSectionProps> = ({ plugins, card, onOpenModal }) => {\n  const handleOpenModal = (plugin: string) => {\n    onOpenModal(plugin, card); // Pass card data to the modal\n  };\n\n  return (\n    <SectionContent>\n      {plugins.map((plugin) => (\n        <PluginItem key={plugin}>\n          <div>{plugin}</div>\n          <Button onClick={() => handleOpenModal(plugin)}>\n            <img src={openNewIcon} alt=\"Open\" />\n          </Button>\n        </PluginItem>\n      ))}\n    </SectionContent>\n  );\n};\n\nexport default PluginSection;\n","// src/components/DraggablePopover/DraggablePopover.tsx\n\nimport React, { useEffect, useState, ChangeEvent } from 'react';\nimport Draggable from 'react-draggable';\nimport {\n  fetchCardById,\n  fetchPreviousCardsOutputs,\n  executeCard,\n  evaluateCard,\n  updateCard\n} from '../../services/api';\nimport ReactMarkdown from 'react-markdown';\nimport {\n  CloseButton,\n  PopoverContent,\n  PopoverContainer,\n  Section,\n  SectionTitle,\n  SectionContent,\n  Label,\n  Value,\n  ButtonContainer,\n  ExecuteButton,\n  EvaluateButton,\n  LoadingIcon,\n  EditButton,\n  ResolveButton,\n  TitleBand,\n  CopyButton,\n  ModalButton,\n  OutputSection,\n  ButtonGroup,\n  AddPluginButton,\n} from './DraggablePopover.styles';\nimport {\n  executeIcon,\n  evaluateIcon,\n  editIcon,\n  doneIcon,\n  reviewIcon,\n  copyIcon,\n  openNewIcon,\n  loadingIcon,\n  addIcon,\n} from '../../assets';\nimport PluginSelector from '../PluginSelector/PluginSelector';\nimport PluginSection from '../PluginSection/PluginSection';\nimport { GENERATIVE_MODELS } from '../../config/config';\n\ninterface DraggablePopoverProps {\n  cardId: string;\n  onRequestClose: () => void;\n  index: number;\n  onExecute: (id: string) => void;\n  onCardUpdate: (card: any) => void;\n  onOpenModal: (plugin: string, card: any) => void; // Updated to pass plugin and card data\n}\n\nconst DraggablePopover: React.FC<DraggablePopoverProps> = ({\n  cardId,\n  onRequestClose,\n  index,\n  onExecute,\n  onCardUpdate,\n  onOpenModal // Updated to handle modal opening\n}) => {\n  const [card, setCard] = useState<any>(null);\n  const [loading, setLoading] = useState(true);\n  const [error, setError] = useState('');\n  const [isExecuting, setIsExecuting] = useState(false);\n  const [isEvaluating, setIsEvaluating] = useState(false);\n  const [isPromptCollapsed, setIsPromptCollapsed] = useState(false);\n  const [isContextCollapsed, setIsContextCollapsed] = useState(true);\n  const [isExampleOutputCollapsed, setIsExampleOutputCollapsed] = useState(true);\n  const [isOutputCollapsed, setIsOutputCollapsed] = useState(true);\n  const [previousCardsOutputs, setPreviousCardsOutputs] = useState<{ [key: string]: string | null }>({});\n  const [isEditing, setIsEditing] = useState(false);\n  const [updatedCard, setUpdatedCard] = useState<any>({});\n  const [isCopying, setIsCopying] = useState(false);\n  const [plugins, setPlugins] = useState<string[]>([]);\n  const [isPluginSelectorVisible, setIsPluginSelectorVisible] = useState(false);\n\n  useEffect(() => {\n    const getCard = async () => {\n      try {\n        const data = await fetchCardById(cardId);\n        setCard(data);\n        setUpdatedCard(data);\n        setPlugins(data.plugins || []);\n      } catch (err) {\n        setError('Failed to fetch card. Please try again later.');\n      } finally {\n        setLoading(false);\n      }\n    };\n\n    getCard();\n  }, [cardId]);\n\n  useEffect(() => {\n    const getPreviousCardsOutputs = async () => {\n      try {\n        const data = await fetchPreviousCardsOutputs(cardId);\n        setPreviousCardsOutputs(data);\n      } catch (err) {\n        console.error('Failed to fetch previous cards outputs', err);\n      }\n    };\n\n    if (card) {\n      getPreviousCardsOutputs();\n    }\n  }, [card]);\n\n  const handlePluginAdded = async () => {\n    const data = await fetchCardById(cardId);\n    setCard(data);\n    setPlugins(data.plugins || []);\n  };\n\n  if (loading) return <p>Loading...</p>;\n  if (error) return <p>{error}</p>;\n\n  const calculateLeftPosition = (index: number) => {\n    const position = (index * 33 + 2) % 100;\n    return position <= 75 ? position : 0;\n  };\n\n  const handleExecute = async () => {\n    setIsExecuting(true);\n    setIsEvaluating(true);\n    try {\n      await executeCard(cardId);\n      const updatedCard = await fetchCardById(cardId);\n      setCard(updatedCard);\n      onCardUpdate(updatedCard);\n    } catch (error) {\n      console.error('Error executing card:', error);\n    } finally {\n      setIsExecuting(false);\n      setIsEvaluating(false);\n    }\n  };\n\n  const handleEvaluate = async () => {\n    setIsEvaluating(true);\n    setIsExecuting(true);\n    try {\n      await evaluateCard(cardId);\n      const updatedCard = await fetchCardById(cardId);\n      setCard(updatedCard);\n      onExecute(cardId);\n      onCardUpdate(updatedCard);\n    } catch (error) {\n      console.error('Error evaluating card:', error);\n    } finally {\n      setIsEvaluating(false);\n      setIsExecuting(false);\n    }\n  };\n\n  const handleEditClick = async () => {\n    if (isEditing) {\n      try {\n        await updateCard(updatedCard);\n        setCard(updatedCard);\n        onCardUpdate(updatedCard);\n      } catch (error) {\n        console.error('Error updating card:', error);\n      }\n    }\n    setIsEditing(!isEditing);\n    setIsContextCollapsed(false);\n    setIsPromptCollapsed(false);\n  };\n\n  const handleChange = (e: ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>) => {\n    const { name, value } = e.target;\n    setUpdatedCard((prev: any) => ({ ...prev, [name]: value }));\n  };\n\n  const handleResolveInconsistency = async () => {\n    try {\n      const resolvedCard = { ...updatedCard, inconsistent: false };\n      await updateCard(resolvedCard);\n      setCard(resolvedCard);\n      onCardUpdate(resolvedCard);\n    } catch (error) {\n      console.error('Error resolving inconsistency:', error);\n    }\n  };\n\n  const handleCopyClick = async () => {\n    if (card && card.output && card.output.generatedText) {\n      try {\n        await navigator.clipboard.writeText(card.output.generatedText);\n        setIsCopying(true);\n        setTimeout(() => setIsCopying(false), 2000);\n      } catch (error) {\n        console.error('Failed to copy text:', error);\n      }\n    }\n  };\n\n  const handleModalOpen = (plugin: string) => {\n    onOpenModal(plugin, card);\n  };\n\n  return (\n    <Draggable handle=\".draggable-handle\" bounds=\"parent\">\n      <PopoverContainer\n        style={{\n          top: '10%',\n          left: `${calculateLeftPosition(index)}%`,\n          transform: 'translateX(-50%)',\n        }}\n      >\n        <TitleBand className=\"draggable-handle\">Card Details</TitleBand>\n        <CloseButton onClick={onRequestClose}>×</CloseButton>\n        <ResolveButton onClick={handleResolveInconsistency}>\n          <img src={reviewIcon} alt=\"Resolve\" />\n        </ResolveButton>\n        <EditButton onClick={handleEditClick}>\n          <img src={isEditing ? doneIcon : editIcon} alt=\"Edit\" />\n        </EditButton>\n        {card && (\n          <>\n            <PopoverContent>\n              <Section>\n                <Label>Title:</Label>\n                {isEditing ? (\n                  <input\n                    type=\"text\"\n                    name=\"title\"\n                    value={updatedCard.title}\n                    onChange={handleChange}\n                  />\n                ) : (\n                  <Value>{card.title}</Value>\n                )}\n              </Section>\n              <Section>\n                <Label>Objective:</Label>\n                {isEditing ? (\n                  <input\n                    type=\"text\"\n                    name=\"objective\"\n                    value={updatedCard.objective}\n                    onChange={handleChange}\n                  />\n                ) : (\n                  <Value>{card.objective}</Value>\n                )}\n              </Section>\n              <Section>\n                <Label>Generative Model:</Label>\n                {isEditing ? (\n                  <select\n                    name=\"generativeModel\"\n                    value={updatedCard.generativeModel}\n                    onChange={handleChange}\n                  >\n                    {GENERATIVE_MODELS.map(model => (\n                      <option key={model.value} value={model.value}>{model.label}</option>\n                    ))}\n                  </select>\n                ) : (\n                  <Value>{card.generativeModel}</Value>\n                )}\n              </Section>\n              <Section>\n                <SectionTitle onClick={() => setIsPromptCollapsed(!isPromptCollapsed)}>\n                  Prompt {isPromptCollapsed ? '▼' : '▲'}\n                </SectionTitle>\n                <SectionContent isCollapsed={isPromptCollapsed}>\n                  <div>\n                    <Label>Prompt:</Label>\n                    {isEditing ? (\n                      <textarea\n                        name=\"prompt\"\n                        value={updatedCard.prompt}\n                        onChange={handleChange}\n                      ></textarea>\n                    ) : (\n                      <Value>\n                        <ReactMarkdown>{card.prompt}</ReactMarkdown>\n                      </Value>\n                    )}\n                  </div>\n                </SectionContent>\n              </Section>\n              <Section>\n                <SectionTitle onClick={() => setIsContextCollapsed(!isContextCollapsed)}>\n                  Context {isContextCollapsed ? '▼' : '▲'}\n                </SectionTitle>\n                <SectionContent isCollapsed={isContextCollapsed}>\n                  <div>\n                    <Label>Context:</Label>\n                    {isEditing ? (\n                      <textarea\n                        name=\"context\"\n                        value={updatedCard.context}\n                        onChange={handleChange}\n                      ></textarea>\n                    ) : (\n                      <Value>\n                        <ReactMarkdown>{card.context}</ReactMarkdown>\n                      </Value>\n                    )}\n                  </div>\n                  {card.previousCards && Object.keys(card.previousCards).length > 0 && !isEditing && (\n                    <div>\n                      <Label>Previous Cards Outputs:</Label>\n                      {Object.entries(previousCardsOutputs).map(([prevCardId, output]) => (\n                        <div key={prevCardId}>\n                          <Value>{output || 'No output generated'}</Value>\n                        </div>\n                      ))}\n                    </div>\n                  )}\n                  <Section>\n                    <SectionTitle onClick={() => setIsExampleOutputCollapsed(!isExampleOutputCollapsed)}>\n                      Example Output {isExampleOutputCollapsed ? '▼' : '▲'}\n                    </SectionTitle>\n                    <SectionContent isCollapsed={isExampleOutputCollapsed}>\n                      <div>\n                        {isEditing ? (\n                          <textarea\n                            name=\"exampleOutput\"\n                            value={updatedCard.exampleOutput}\n                            onChange={handleChange}\n                          ></textarea>\n                        ) : (\n                          <Value>\n                            <ReactMarkdown>{card.exampleOutput || 'No example output provided'}</ReactMarkdown>\n                          </Value>\n                        )}\n                      </div>\n                    </SectionContent>\n                  </Section>\n                </SectionContent>\n              </Section>\n              <OutputSection>\n                <SectionTitle onClick={() => setIsOutputCollapsed(!isOutputCollapsed)}>\n                  Output {isOutputCollapsed ? '▼' : '▲'}\n                </SectionTitle>\n                <ButtonGroup>\n                  <CopyButton onClick={handleCopyClick}>\n                    <img src={isCopying ? doneIcon : copyIcon} alt=\"Copy\" />\n                  </CopyButton>\n                  <ModalButton onClick={() => handleModalOpen('output-detail')}>\n                    <img src={openNewIcon} alt=\"Open\" />\n                  </ModalButton>\n                </ButtonGroup>\n              </OutputSection>\n              <SectionContent isCollapsed={isOutputCollapsed}>\n                <div>\n                  {card.output ? (\n                    <>\n                      <Label>Generated Text:</Label>\n                      <Value>\n                        <ReactMarkdown>{card.output.generatedText}</ReactMarkdown>\n                      </Value>\n                    </>\n                  ) : (\n                    <Value>No output generated yet</Value>\n                  )}\n                </div>\n              </SectionContent>\n              {card.output && card.output.evaluationMetrics && (\n                <Section>\n                  <h3>Evaluation Metrics</h3>\n                  {card.output.evaluationMetrics.map((metric: any) => (\n                    <div key={metric._id}>\n                      <Label>{metric.type}:</Label>\n                      <Value>{metric.evaluationResult}</Value>\n                    </div>\n                  ))}\n                </Section>\n              )}\n              <Section>\n                <SectionTitle>\n                  Plugins\n                  <AddPluginButton onClick={() => setIsPluginSelectorVisible(true)}>\n                    <img src={addIcon} alt=\"Add Plugin\" />\n                  </AddPluginButton>\n                </SectionTitle>\n                {isPluginSelectorVisible && (\n                  <PluginSelector\n                    cardId={cardId}\n                    onPluginAdded={handlePluginAdded}\n                    onClose={() => setIsPluginSelectorVisible(false)}\n                  />\n                )}\n                <PluginSection plugins={plugins} card={card} onOpenModal={handleModalOpen} />\n              </Section>\n            </PopoverContent>\n            <ButtonContainer>\n              <ExecuteButton\n                onClick={handleExecute}\n                data-tooltip=\"Execute Card\"\n                disabled={isExecuting}\n              >\n                {isExecuting ? <LoadingIcon src={loadingIcon} alt=\"Loading\" /> : <img src={executeIcon} alt=\"Execute\" />}\n              </ExecuteButton>\n              <EvaluateButton\n                onClick={handleEvaluate}\n                data-tooltip=\"Evaluate Card\"\n                disabled={isEvaluating || !card.executed}\n              >\n                {isEvaluating ? <LoadingIcon src={loadingIcon} alt=\"Loading\" /> : <img src={evaluateIcon} alt=\"Evaluate\" />}\n              </EvaluateButton>\n            </ButtonContainer>\n          </>\n        )}\n      </PopoverContainer>\n    </Draggable>\n  );\n};\n\nexport default DraggablePopover;\n","// src/components/InstructionsPopup/InstructionsPopup.styles.ts\n\nimport styled from 'styled-components';\n\nexport const PopupContainer = styled.div`\n  position: fixed;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  background: white;\n  padding: 20px;\n  border: 2px solid black;\n  border-radius: 10px;\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n  z-index: 1000;\n  width: 300px; /* Adjust width as needed */\n`;\n\nexport const PopupContent = styled.div`\n  font-size: 16px;\n  color: #333;\n`;\n\nexport const CloseButton = styled.button`\n  position: absolute;\n  top: 10px;\n  right: 10px;\n  padding: 5px;\n  background-color: transparent;\n  border: none;\n  cursor: pointer;\n  font-size: 20px;\n  color: black;\n\n  &:hover {\n    color: #e08e0b;\n  }\n`;\n\nexport const OkButtonContainer = styled.div`\n  display: flex;\n  justify-content: center;\n  margin-top: 20px; /* Adjust as needed */\n`;\n\nexport const OkButton = styled.button`\n  padding: 10px 20px;\n  background-color: orange;\n  border: 2px solid black;\n  border-radius: 5px;\n  cursor: pointer;\n  font-size: 16px;\n  color: black;\n\n  &:hover {\n    background-color: #e08e0b;\n  }\n`;\n","// src/components/InstructionsPopup/InstructionsPopup.tsx\n\nimport React from 'react';\nimport { PopupContainer, PopupContent, CloseButton, OkButtonContainer, OkButton } from './InstructionsPopup.styles';\n\ninterface InstructionsPopupProps {\n    onClose: () => void;\n}\n\nconst InstructionsPopup: React.FC<InstructionsPopupProps> = ({ onClose }) => {\n    return (\n        <PopupContainer>\n            <PopupContent>\n                <h2>No Cards Available</h2>\n                <p>To get started, click the &quot;+&quot; button to create a new card.</p>\n            </PopupContent>\n            <OkButtonContainer>\n                <OkButton onClick={onClose}>OK</OkButton>\n            </OkButtonContainer>\n            <CloseButton onClick={onClose}>x</CloseButton>\n        </PopupContainer>\n    );\n};\n\nexport default InstructionsPopup;\n","// src/components/DetailModal/DetailModal.styles.ts\n\nimport styled from 'styled-components';\n\nexport const ModalOverlay = styled.div`\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: rgba(0, 0, 0, 0.5);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  z-index: 1000;\n`;\n\nexport const ModalContainer = styled.div`\n  background: white;\n  border-radius: 10px;\n  padding: 20px;\n  width: 90%;\n  height: 80vh;\n  max-width: 1200px;\n  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n  display: flex;\n  flex-direction: column;\n  position: relative;\n  z-index: 12;\n`;\n\nexport const ModalHeader = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  border-bottom: 1px solid #ddd;\n  padding-bottom: 10px;\n  margin-bottom: 20px;\n`;\n\nexport const ModalTitle = styled.h2`\n  margin: 0;\n  font-size: 1.5rem;\n  color: #333;\n`;\n\nexport const CloseButton = styled.button`\n  background: transparent;\n  border: none;\n  font-size: 24px;\n  cursor: pointer;\n\n  &:hover {\n    color: #ff0000;\n  }\n`;\n\nexport const ModalContent = styled.div`\n  flex: 1;\n  overflow-y: auto;\n  padding-right: 10px;\n\n  -ms-overflow-style: none;\n  scrollbar-width: none;\n\n  &::-webkit-scrollbar {\n    display: none;\n  }\n\n  pre {\n    white-space: pre-wrap;\n    word-wrap: break-word;\n  }\n`;\n","import styled from \"styled-components\";\n\nexport const ModalContent = styled.div`\n  max-height: calc(80vh - 100px);\n  overflow-y: auto;\n  padding-right: 10px;\n  position: relative;\n\n  -ms-overflow-style: none;\n  scrollbar-width: none;\n\n  &::-webkit-scrollbar {\n    display: none;\n  }\n\n  pre {\n    white-space: pre-wrap;\n    word-wrap: break-word;\n  }\n`;\n\nexport const ButtonContainer = styled.div`\n  display: flex;\n  position: absolute;\n  top: 0px;\n  right: 50px; /* Adjust right position to make room for the close button */\n`;\n\nexport const CopyButton = styled.button`\n  background: orange;\n  padding: 5px 10px;\n  border: 2px solid black;\n  border-radius: 5px;\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  margin-left: 10px;\n\n  img {\n    width: 15px;\n    height: 15px;\n    margin-right: 3px;\n    filter: brightness(0); \n  }\n\n  &:hover {\n    background: #ff8c00;\n  }\n`;\n\nexport const ToggleContainer = styled.div`\n  display: flex;\n  align-items: center;\n`;\n\nexport const ToggleButton = styled.button`\n  background: orange;\n  padding: 5px 10px;\n  border: 2px solid black;\n  border-radius: 5px;\n  cursor: pointer;\n  margin-left: 10px;\n\n  &:hover {\n    background: #ff8c00;\n  }\n`;\n\nexport const InfoLabel = styled.p`\n  font-size: 14px;\n  color: #333;\n  margin: 0;\n`;\n\nexport const EditButton = styled(CopyButton)``;\n\nexport const SaveButton = styled(CopyButton)``;\n\nexport const TextArea = styled.textarea`\n  flex: 1; /* Allow the textarea to grow and fill the remaining space */\n  resize: none; /* Disable resizing */\n  border: 2px solid #333;\n  border-radius: 5px;\n  padding: 10px;\n  font-size: 16px;\n  margin: 10px 0;\n  box-sizing: border-box;\n  height: calc(70vh - 100px);\n`;\n","import React, { useState, ChangeEvent, useEffect } from 'react';\nimport ReactMarkdown from 'react-markdown';\nimport { updateCardOutput, fetchCardById } from '../../services/api';\nimport { \n  ModalContent, \n  CopyButton, \n  ToggleContainer, \n  ToggleButton, \n  InfoLabel, \n  ButtonContainer,\n  EditButton,\n  SaveButton,\n  TextArea // Import the TextArea component\n} from './OutputDetailContainer.styles';\nimport { copyIcon, doneIcon, editIcon } from '../../assets';\n\ninterface OutputDetailContainerProps {\n  card: any;\n}\n\nconst OutputDetailContainer: React.FC<OutputDetailContainerProps> = ({ card }) => {\n  const [isCopying, setIsCopying] = useState(false);\n  const [isMarkdown, setIsMarkdown] = useState(true);\n  const [isEditing, setIsEditing] = useState(false);\n  const [output, setOutput] = useState('');\n  const [editedOutput, setEditedOutput] = useState('');\n\n  useEffect(() => {\n    const fetchCardOutput = async () => {\n      try {\n        const fetchedCard = await fetchCardById(card._id);\n        setOutput(fetchedCard.output.generatedText || '');\n        setEditedOutput(fetchedCard.output.generatedText || '');\n      } catch (error) {\n        console.error('Failed to fetch card output:', error);\n      }\n    };\n\n    fetchCardOutput();\n  }, [card._id]);\n\n  const handleCopyClick = async () => {\n    try {\n      await navigator.clipboard.writeText(output);\n      setIsCopying(true);\n      setTimeout(() => setIsCopying(false), 2000);\n    } catch (error) {\n      console.error('Failed to copy text:', error);\n    }\n  };\n\n  const toggleDisplayMode = () => {\n    setIsMarkdown(!isMarkdown);\n  };\n\n  const handleEditClick = () => {\n    setIsEditing(true);\n  };\n\n  const handleSaveClick = async () => {\n    try {\n      await updateCardOutput(card._id, { generatedText: editedOutput });\n      setOutput(editedOutput);\n      setIsEditing(false);\n    } catch (error) {\n      console.error('Failed to update card output:', error);\n    }\n  };\n\n  const handleChange = (e: ChangeEvent<HTMLTextAreaElement>) => {\n    setEditedOutput(e.target.value);\n  };\n\n  return (\n    <ModalContent>\n      <ToggleContainer>\n        <InfoLabel>If the output is not displayed correctly, click here to show it raw:</InfoLabel>\n        <ToggleButton onClick={toggleDisplayMode}>\n          {isMarkdown ? 'Show Raw' : 'Show Markdown'}\n        </ToggleButton>\n      </ToggleContainer>\n      {isEditing ? (\n        <TextArea value={editedOutput} onChange={handleChange} />\n      ) : (\n        isMarkdown ? <ReactMarkdown>{output}</ReactMarkdown> : <pre>{output}</pre>\n      )}\n      <ButtonContainer>\n        <CopyButton onClick={handleCopyClick}>\n          <img src={isCopying ? doneIcon : copyIcon} alt=\"Copy\" />\n        </CopyButton>\n        {isEditing ? (\n          <SaveButton onClick={handleSaveClick}>\n            <img src={doneIcon} alt=\"Save\" />\n          </SaveButton>\n        ) : (\n          <EditButton onClick={handleEditClick}>\n            <img src={editIcon} alt=\"Edit\" />\n          </EditButton>\n        )}\n      </ButtonContainer>\n    </ModalContent>\n  );\n};\n\nexport default OutputDetailContainer;\n","// src/components/GuitarTabsConverterContainer/GuitarTabsConverterContainer.styles.ts\n\nimport styled from 'styled-components';\n\nexport const GuitarTabsConverterContainerWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n  padding: 10px;\n`;\n\nexport const ParametersContainer = styled.div`\n  display: flex;\n  justify-content: space-between;\n  gap: 10px;\n`;\n\nexport const InstrumentContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 5px;\n`;\n\nexport const Input = styled.input`\n  padding: 5px;\n`;\n\nexport const Select = styled.select`\n  padding: 5px;\n`;\n\nexport const OutputContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n`;\n\nexport const FileContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 5px;\n`;\n\nexport const PlayPauseButton = styled.button`\n  background: orange;\n  border: none;\n  padding: 5px;\n  cursor: pointer;\n`;\n\nexport const DownloadButton = styled.a`\n  background: orange;\n  border: none;\n  padding: 5px;\n  text-decoration: none;\n  color: black;\n  display: flex;\n  align-items: center;\n  cursor: pointer;\n`;\n\nexport const ButtonContainer = styled.div`\n  display: flex;\n  gap: 5px;\n`;\n\nexport const ExecuteButton = styled.button`\n  background: orange;\n  border: none;\n  padding: 5px;\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n`;\nexport const ToggleContainer = styled.div`\n  display: flex;\n  align-items: center;\n`;\n\nexport const ToggleButton = styled.button`\n  background: orange;\n  padding: 5px 10px;\n  border: 2px solid black;\n  border-radius: 5px;\n  cursor: pointer;\n  margin-left: 10px;\n\n  &:hover {\n    background: #ff8c00;\n  }\n`;\n\nexport const InfoLabel = styled.p`\n  font-size: 14px;\n  color: #333;\n  margin: 0;\n`;","import React, { useState } from 'react';\nimport { executePlugin } from '../../services/api';\nimport ReactMarkdown from 'react-markdown';\nimport {\n  GuitarTabsConverterContainerWrapper,\n  ParametersContainer,\n  InstrumentContainer,\n  Input,\n  Select,\n  OutputContainer,\n  FileContainer,\n  PlayPauseButton,\n  DownloadButton,\n  ButtonContainer,\n  ExecuteButton,\n  ToggleContainer,\n  ToggleButton,\n  InfoLabel\n} from './GuitarTabsConverterPluginContainer.styles';\nimport { playIcon, pauseIcon, downloadIcon, executeDownIcon } from '../../assets';\nimport { MUSIC_INSTRUMENTS } from '../../config/config';\n\ninterface GuitarTabsConverterContainerProps {\n  card: any;\n}\n\ninterface File {\n  filename: string;\n  content: string;\n}\n\ninterface PluginFile {\n  midi: string;\n  wav: string;\n}\n\nconst GuitarTabsConverterContainer: React.FC<GuitarTabsConverterContainerProps> = ({ card }) => {\n  const [tempo, setTempo] = useState<number>(120);\n  const [repetitions, setRepetitions] = useState<number>(1);\n  const [instrument, setInstrument] = useState<string>(MUSIC_INSTRUMENTS[0]);\n  const [files, setFiles] = useState<PluginFile[]>([]);\n  const [isPlaying, setIsPlaying] = useState<boolean[]>([]);\n  const [isMarkdown, setIsMarkdown] = useState(false);\n  const audioRef = React.useRef<HTMLAudioElement>(null);\n\n  const handleExecute = async () => {\n    const params = {\n      input: card.output.generatedText,\n      tempo,\n      repetitions,\n      instrument,\n    };\n\n    try {\n      const response: File[] = await executePlugin('guitar-tabs-converter', params);\n      const newFiles: Record<string, PluginFile> = response.reduce((acc: Record<string, PluginFile>, file) => {\n        const fileType = file.filename.endsWith('.mid') ? 'midi' : 'wav';\n        const fileName = file.filename.split('.')[0];\n\n        if (!acc[fileName]) {\n          acc[fileName] = { midi: '', wav: '' };\n        }\n        acc[fileName][fileType] = file.content;\n\n        return acc;\n      }, {});\n\n      setFiles(Object.values(newFiles));\n      setIsPlaying(new Array(Object.values(newFiles).length).fill(false));\n    } catch (error) {\n      console.error('Error executing guitar-tabs-converter plugin:', error);\n    }\n  };\n\n  const handlePlayPause = (index: number) => {\n    if (audioRef.current) {\n      if (isPlaying[index]) {\n        audioRef.current.pause();\n      } else {\n        audioRef.current.src = `data:audio/wav;base64,${files[index].wav}`;\n        audioRef.current.play();\n      }\n      setIsPlaying((prev) =>\n        prev.map((playing, i) => (i === index ? !playing : playing))\n      );\n    }\n  };\n\n  const toggleDisplayMode = () => {\n    setIsMarkdown(!isMarkdown);\n  };\n\n  return (\n    <GuitarTabsConverterContainerWrapper>\n      <ToggleContainer>\n        <InfoLabel>If the output is not displayed correctly, click here to show it raw or formatted:</InfoLabel>\n        <ToggleButton onClick={toggleDisplayMode}>\n          {isMarkdown ? 'Show Raw' : 'Show Markdown'}\n        </ToggleButton>\n      </ToggleContainer>\n      {isMarkdown ? <ReactMarkdown>{card.output.generatedText}</ReactMarkdown> : <pre>{card.output.generatedText}</pre>}\n      <ParametersContainer>\n        <div>\n          <label>Tempo:</label>\n          <Input type=\"text\" value={tempo} onChange={(e) => setTempo(Number(e.target.value))} />\n        </div>\n        <div>\n          <label>Repetitions:</label>\n          <Input type=\"text\" value={repetitions} onChange={(e) => setRepetitions(Number(e.target.value))} />\n        </div>\n      </ParametersContainer>\n      <InstrumentContainer>\n        <label>Instrument:</label>\n        <Select value={instrument} onChange={(e) => setInstrument(e.target.value)}>\n          {MUSIC_INSTRUMENTS.map((inst) => (\n            <option key={inst} value={inst}>{inst}</option>\n          ))}\n        </Select>\n      </InstrumentContainer>\n      <ExecuteButton onClick={handleExecute}>\n        <img src={executeDownIcon} alt=\"Execute\" />\n      </ExecuteButton>\n      {files.length > 0 && (\n        <OutputContainer>\n          {files.map((file, index) => (\n            <FileContainer key={index}>\n              <div>\n                <label>Audio:</label>\n                <ButtonContainer>\n                  <PlayPauseButton onClick={() => handlePlayPause(index)}>\n                    <img src={isPlaying[index] ? pauseIcon : playIcon} alt=\"Play/Pause\" />\n                  </PlayPauseButton>\n                  <DownloadButton href={`data:audio/wav;base64,${file.wav}`} download={`output${index + 1}.wav`}>\n                    <img src={downloadIcon} alt=\"Download\" />\n                  </DownloadButton>\n                </ButtonContainer>\n              </div>\n              {file.midi && (\n                <div>\n                  <label>MIDI:</label>\n                  <ButtonContainer>\n                    <DownloadButton href={`data:audio/midi;base64,${file.midi}`} download={`output${index + 1}.mid`}>\n                      <img src={downloadIcon} alt=\"Download\" />\n                    </DownloadButton>\n                  </ButtonContainer>\n                </div>\n              )}\n            </FileContainer>\n          ))}\n          <audio ref={audioRef} onEnded={() => setIsPlaying((prev) => prev.map(() => false))} />\n        </OutputContainer>\n      )}\n    </GuitarTabsConverterContainerWrapper>\n  );\n};\n\nexport default GuitarTabsConverterContainer;\n","// src/ABCConverterPluginContainer.styles.ts\n\nimport styled from 'styled-components';\n\nexport const ABCConverterContainerWrapper = styled.div`\n  position: relative;\n  padding: 60px 20px 0 20px; /* Adjust padding to accommodate title */\n  background: white;\n  border: 2px solid #333;\n  border-radius: 10px;\n  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n  display: flex;\n  flex-direction: column;\n  overflow: hidden;\n`;\n\nexport const OutputContainer = styled.div`\n  display: flex;\n  align-items: center;\n  margin-top: 10px;\n  gap: 10px;\n`;\n\nexport const CopyButton = styled.button`\n  background: none;\n  border: none;\n  cursor: pointer;\n  margin-left: 10px;\n  padding: 5px;\n\n  img {\n    width: 24px;\n    height: 24px;\n  }\n`;\n\n\n\nexport const ButtonGroup = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 10px;\n`;\n","// src/ABCConverterContainer.tsx\n\nimport 'abcjs/abcjs-audio.css';\nimport React, { useEffect, useRef, useState } from 'react';\nimport abcjs from 'abcjs';\nimport {\n  ABCConverterContainerWrapper,\n  OutputContainer,\n  CopyButton,\n  ButtonGroup,\n} from './ABCConverterPluginContainer.styles';\nimport { copyIcon, doneIcon } from '../../assets';\n\ninterface ABCConverterContainerProps {\n  card: any;\n}\n\nconst cleanABCOutput = (output: string): string => {\n  const lines = output.split('\\n');\n  const validHeaders = ['X', 'T', 'M', 'L', 'R', 'K'];\n  const abcLines = lines.filter(line => {\n    const trimmedLine = line.trim();\n    if (!trimmedLine) return false; // Ignore empty lines\n\n    const headerMatch = trimmedLine.match(/^([A-Za-z]):/);\n    if (headerMatch) {\n      return validHeaders.includes(headerMatch[1].toUpperCase());\n    }\n\n    // Retain lines that start with music notation (A-G, a-g)\n    return /^[A-Ga-g]/.test(trimmedLine) || /^[z]/.test(trimmedLine) || /\\|/.test(trimmedLine);\n  });\n\n  return abcLines.join('\\n');\n};\n\nconst ABCConverterContainer: React.FC<ABCConverterContainerProps> = ({ card }) => {\n  const [abcCode, setAbcCode] = useState<string>('');\n  const [isCopying, setIsCopying] = useState(false);\n  const abcjsAudioSynthRef = useRef<any>(null);\n  const abcjsControlRef = useRef<any>(null);\n\n  useEffect(() => {\n    const cleanedOutput = cleanABCOutput(card.output.generatedText);\n    setAbcCode(cleanedOutput);\n  }, [card]);\n\n  useEffect(() => {\n    if (abcCode) {\n      const visualObj = abcjs.renderAbc('abcjs-container', abcCode)[0];\n      if (abcjsAudioSynthRef.current) {\n        abcjsAudioSynthRef.current.stop();\n      }\n      abcjsAudioSynthRef.current = new abcjs.synth.CreateSynth();\n      abcjsAudioSynthRef.current\n        .init({\n          visualObj: visualObj,\n          options: {\n            soundfontUrl: 'https://paulrosen.github.io/midi-js-soundfonts/abcjs/soundfont/',\n          },\n        })\n        .then(() => {\n          if (abcjsControlRef.current) {\n            abcjsControlRef.current.load(abcjsAudioSynthRef.current);\n          } else {\n            abcjsControlRef.current = new abcjs.synth.SynthController();\n            abcjsControlRef.current.load('#abcjs-audio-controls', abcjsAudioSynthRef.current, {\n              displayLoop: true,\n              displayRestart: true,\n              displayPlay: true,\n              displayProgress: true,\n              displayWarp: true,\n            });\n          }\n          abcjsControlRef.current.setTune(visualObj, true);  // Ensuring the tune is set for playback\n        })\n        .catch((err: any) => {\n          console.warn('Synth initialization failed', err);\n        });\n    }\n  }, [abcCode]);\n\n  const handleCopyClick = async () => {\n    try {\n      await navigator.clipboard.writeText(abcCode);\n      setIsCopying(true);\n      setTimeout(() => setIsCopying(false), 2000);\n    } catch (error) {\n      console.error('Failed to copy text:', error);\n    }\n  };\n\n  return (\n    <ABCConverterContainerWrapper>\n      <h2>Refined ABC Notation</h2>\n      <OutputContainer>\n        <pre>{abcCode}</pre>\n        <ButtonGroup>\n          <CopyButton onClick={handleCopyClick}>\n            <img src={isCopying ? doneIcon : copyIcon} alt=\"Copy\" />\n          </CopyButton>\n        </ButtonGroup>\n      </OutputContainer>\n      <h3>Music Representation</h3>\n      <div id=\"abcjs-container\" />\n      <div id=\"abcjs-audio-controls\" />\n    </ABCConverterContainerWrapper>\n  );\n};\n\nexport default ABCConverterContainer;\n","import styled from 'styled-components';\n\nexport const Button = styled.button`\n  padding: 10px 20px;\n  background-color: orange;\n  border: 2px solid black;\n  border-radius: 5px;\n  cursor: pointer;\n  font-size: 16px;\n  color: #000;\n\n  &:hover {\n    background-color: #e08e0b;\n  }\n`;\n","import checkPrivateRedeclaration from \"./checkPrivateRedeclaration.js\";\nfunction _classPrivateMethodInitSpec(e, a) {\n  checkPrivateRedeclaration(e, a), a.add(e);\n}\nexport { _classPrivateMethodInitSpec as default };","function _checkPrivateRedeclaration(e, t) {\n  if (t.has(e)) throw new TypeError(\"Cannot initialize the same private elements twice on an object\");\n}\nexport { _checkPrivateRedeclaration as default };","function _assertClassBrand(e, t, n) {\n  if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n;\n  throw new TypeError(\"Private element is not present on this object\");\n}\nexport { _assertClassBrand as default };","function _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n    return typeof o;\n  } : function (o) {\n    return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n  }, _typeof(o);\n}\nexport { _typeof as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n  var i = toPrimitive(t, \"string\");\n  return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n  if (\"object\" != _typeof(t) || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r || \"default\");\n    if (\"object\" != _typeof(i)) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n  return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n    value: t,\n    enumerable: !0,\n    configurable: !0,\n    writable: !0\n  }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","/**\n * Gets the original marked default options.\n */\nexport function _getDefaults() {\n    return {\n        async: false,\n        breaks: false,\n        extensions: null,\n        gfm: true,\n        hooks: null,\n        pedantic: false,\n        renderer: null,\n        silent: false,\n        tokenizer: null,\n        walkTokens: null\n    };\n}\nexport let _defaults = _getDefaults();\nexport function changeDefaults(newDefaults) {\n    _defaults = newDefaults;\n}\n","/**\n * Helpers\n */\nconst escapeTest = /[&<>\"']/;\nconst escapeReplace = new RegExp(escapeTest.source, 'g');\nconst escapeTestNoEncode = /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/;\nconst escapeReplaceNoEncode = new RegExp(escapeTestNoEncode.source, 'g');\nconst escapeReplacements = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;'\n};\nconst getEscapeReplacement = (ch) => escapeReplacements[ch];\nexport function escape(html, encode) {\n    if (encode) {\n        if (escapeTest.test(html)) {\n            return html.replace(escapeReplace, getEscapeReplacement);\n        }\n    }\n    else {\n        if (escapeTestNoEncode.test(html)) {\n            return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n        }\n    }\n    return html;\n}\nconst unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\nexport function unescape(html) {\n    // explicitly match decimal, hex, and named HTML entities\n    return html.replace(unescapeTest, (_, n) => {\n        n = n.toLowerCase();\n        if (n === 'colon')\n            return ':';\n        if (n.charAt(0) === '#') {\n            return n.charAt(1) === 'x'\n                ? String.fromCharCode(parseInt(n.substring(2), 16))\n                : String.fromCharCode(+n.substring(1));\n        }\n        return '';\n    });\n}\nconst caret = /(^|[^\\[])\\^/g;\nexport function edit(regex, opt) {\n    let source = typeof regex === 'string' ? regex : regex.source;\n    opt = opt || '';\n    const obj = {\n        replace: (name, val) => {\n            let valSource = typeof val === 'string' ? val : val.source;\n            valSource = valSource.replace(caret, '$1');\n            source = source.replace(name, valSource);\n            return obj;\n        },\n        getRegex: () => {\n            return new RegExp(source, opt);\n        }\n    };\n    return obj;\n}\nexport function cleanUrl(href) {\n    try {\n        href = encodeURI(href).replace(/%25/g, '%');\n    }\n    catch (e) {\n        return null;\n    }\n    return href;\n}\nexport const noopTest = { exec: () => null };\nexport function splitCells(tableRow, count) {\n    // ensure that every cell-delimiting pipe has a space\n    // before it to distinguish it from an escaped pipe\n    const row = tableRow.replace(/\\|/g, (match, offset, str) => {\n        let escaped = false;\n        let curr = offset;\n        while (--curr >= 0 && str[curr] === '\\\\')\n            escaped = !escaped;\n        if (escaped) {\n            // odd number of slashes means | is escaped\n            // so we leave it alone\n            return '|';\n        }\n        else {\n            // add space before unescaped |\n            return ' |';\n        }\n    }), cells = row.split(/ \\|/);\n    let i = 0;\n    // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n    if (!cells[0].trim()) {\n        cells.shift();\n    }\n    if (cells.length > 0 && !cells[cells.length - 1].trim()) {\n        cells.pop();\n    }\n    if (count) {\n        if (cells.length > count) {\n            cells.splice(count);\n        }\n        else {\n            while (cells.length < count)\n                cells.push('');\n        }\n    }\n    for (; i < cells.length; i++) {\n        // leading or trailing whitespace is ignored per the gfm spec\n        cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n    }\n    return cells;\n}\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param str\n * @param c\n * @param invert Remove suffix of non-c chars instead. Default falsey.\n */\nexport function rtrim(str, c, invert) {\n    const l = str.length;\n    if (l === 0) {\n        return '';\n    }\n    // Length of suffix matching the invert condition.\n    let suffLen = 0;\n    // Step left until we fail to match the invert condition.\n    while (suffLen < l) {\n        const currChar = str.charAt(l - suffLen - 1);\n        if (currChar === c && !invert) {\n            suffLen++;\n        }\n        else if (currChar !== c && invert) {\n            suffLen++;\n        }\n        else {\n            break;\n        }\n    }\n    return str.slice(0, l - suffLen);\n}\nexport function findClosingBracket(str, b) {\n    if (str.indexOf(b[1]) === -1) {\n        return -1;\n    }\n    let level = 0;\n    for (let i = 0; i < str.length; i++) {\n        if (str[i] === '\\\\') {\n            i++;\n        }\n        else if (str[i] === b[0]) {\n            level++;\n        }\n        else if (str[i] === b[1]) {\n            level--;\n            if (level < 0) {\n                return i;\n            }\n        }\n    }\n    return -1;\n}\n","import { _defaults } from './defaults.ts';\nimport { rtrim, splitCells, escape, findClosingBracket } from './helpers.ts';\nfunction outputLink(cap, link, raw, lexer) {\n    const href = link.href;\n    const title = link.title ? escape(link.title) : null;\n    const text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n    if (cap[0].charAt(0) !== '!') {\n        lexer.state.inLink = true;\n        const token = {\n            type: 'link',\n            raw,\n            href,\n            title,\n            text,\n            tokens: lexer.inlineTokens(text)\n        };\n        lexer.state.inLink = false;\n        return token;\n    }\n    return {\n        type: 'image',\n        raw,\n        href,\n        title,\n        text: escape(text)\n    };\n}\nfunction indentCodeCompensation(raw, text) {\n    const matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n    if (matchIndentToCode === null) {\n        return text;\n    }\n    const indentToCode = matchIndentToCode[1];\n    return text\n        .split('\\n')\n        .map(node => {\n        const matchIndentInNode = node.match(/^\\s+/);\n        if (matchIndentInNode === null) {\n            return node;\n        }\n        const [indentInNode] = matchIndentInNode;\n        if (indentInNode.length >= indentToCode.length) {\n            return node.slice(indentToCode.length);\n        }\n        return node;\n    })\n        .join('\\n');\n}\n/**\n * Tokenizer\n */\nexport class _Tokenizer {\n    options;\n    rules; // set by the lexer\n    lexer; // set by the lexer\n    constructor(options) {\n        this.options = options || _defaults;\n    }\n    space(src) {\n        const cap = this.rules.block.newline.exec(src);\n        if (cap && cap[0].length > 0) {\n            return {\n                type: 'space',\n                raw: cap[0]\n            };\n        }\n    }\n    code(src) {\n        const cap = this.rules.block.code.exec(src);\n        if (cap) {\n            const text = cap[0].replace(/^ {1,4}/gm, '');\n            return {\n                type: 'code',\n                raw: cap[0],\n                codeBlockStyle: 'indented',\n                text: !this.options.pedantic\n                    ? rtrim(text, '\\n')\n                    : text\n            };\n        }\n    }\n    fences(src) {\n        const cap = this.rules.block.fences.exec(src);\n        if (cap) {\n            const raw = cap[0];\n            const text = indentCodeCompensation(raw, cap[3] || '');\n            return {\n                type: 'code',\n                raw,\n                lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, '$1') : cap[2],\n                text\n            };\n        }\n    }\n    heading(src) {\n        const cap = this.rules.block.heading.exec(src);\n        if (cap) {\n            let text = cap[2].trim();\n            // remove trailing #s\n            if (/#$/.test(text)) {\n                const trimmed = rtrim(text, '#');\n                if (this.options.pedantic) {\n                    text = trimmed.trim();\n                }\n                else if (!trimmed || / $/.test(trimmed)) {\n                    // CommonMark requires space before trailing #s\n                    text = trimmed.trim();\n                }\n            }\n            return {\n                type: 'heading',\n                raw: cap[0],\n                depth: cap[1].length,\n                text,\n                tokens: this.lexer.inline(text)\n            };\n        }\n    }\n    hr(src) {\n        const cap = this.rules.block.hr.exec(src);\n        if (cap) {\n            return {\n                type: 'hr',\n                raw: rtrim(cap[0], '\\n')\n            };\n        }\n    }\n    blockquote(src) {\n        const cap = this.rules.block.blockquote.exec(src);\n        if (cap) {\n            let lines = rtrim(cap[0], '\\n').split('\\n');\n            let raw = '';\n            let text = '';\n            const tokens = [];\n            while (lines.length > 0) {\n                let inBlockquote = false;\n                const currentLines = [];\n                let i;\n                for (i = 0; i < lines.length; i++) {\n                    // get lines up to a continuation\n                    if (/^ {0,3}>/.test(lines[i])) {\n                        currentLines.push(lines[i]);\n                        inBlockquote = true;\n                    }\n                    else if (!inBlockquote) {\n                        currentLines.push(lines[i]);\n                    }\n                    else {\n                        break;\n                    }\n                }\n                lines = lines.slice(i);\n                const currentRaw = currentLines.join('\\n');\n                const currentText = currentRaw\n                    // precede setext continuation with 4 spaces so it isn't a setext\n                    .replace(/\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g, '\\n    $1')\n                    .replace(/^ {0,3}>[ \\t]?/gm, '');\n                raw = raw ? `${raw}\\n${currentRaw}` : currentRaw;\n                text = text ? `${text}\\n${currentText}` : currentText;\n                // parse blockquote lines as top level tokens\n                // merge paragraphs if this is a continuation\n                const top = this.lexer.state.top;\n                this.lexer.state.top = true;\n                this.lexer.blockTokens(currentText, tokens, true);\n                this.lexer.state.top = top;\n                // if there is no continuation then we are done\n                if (lines.length === 0) {\n                    break;\n                }\n                const lastToken = tokens[tokens.length - 1];\n                if (lastToken?.type === 'code') {\n                    // blockquote continuation cannot be preceded by a code block\n                    break;\n                }\n                else if (lastToken?.type === 'blockquote') {\n                    // include continuation in nested blockquote\n                    const oldToken = lastToken;\n                    const newText = oldToken.raw + '\\n' + lines.join('\\n');\n                    const newToken = this.blockquote(newText);\n                    tokens[tokens.length - 1] = newToken;\n                    raw = raw.substring(0, raw.length - oldToken.raw.length) + newToken.raw;\n                    text = text.substring(0, text.length - oldToken.text.length) + newToken.text;\n                    break;\n                }\n                else if (lastToken?.type === 'list') {\n                    // include continuation in nested list\n                    const oldToken = lastToken;\n                    const newText = oldToken.raw + '\\n' + lines.join('\\n');\n                    const newToken = this.list(newText);\n                    tokens[tokens.length - 1] = newToken;\n                    raw = raw.substring(0, raw.length - lastToken.raw.length) + newToken.raw;\n                    text = text.substring(0, text.length - oldToken.raw.length) + newToken.raw;\n                    lines = newText.substring(tokens[tokens.length - 1].raw.length).split('\\n');\n                    continue;\n                }\n            }\n            return {\n                type: 'blockquote',\n                raw,\n                tokens,\n                text\n            };\n        }\n    }\n    list(src) {\n        let cap = this.rules.block.list.exec(src);\n        if (cap) {\n            let bull = cap[1].trim();\n            const isordered = bull.length > 1;\n            const list = {\n                type: 'list',\n                raw: '',\n                ordered: isordered,\n                start: isordered ? +bull.slice(0, -1) : '',\n                loose: false,\n                items: []\n            };\n            bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n            if (this.options.pedantic) {\n                bull = isordered ? bull : '[*+-]';\n            }\n            // Get next list item\n            const itemRegex = new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`);\n            let endsWithBlankLine = false;\n            // Check if current bullet point can start a new List Item\n            while (src) {\n                let endEarly = false;\n                let raw = '';\n                let itemContents = '';\n                if (!(cap = itemRegex.exec(src))) {\n                    break;\n                }\n                if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n                    break;\n                }\n                raw = cap[0];\n                src = src.substring(raw.length);\n                let line = cap[2].split('\\n', 1)[0].replace(/^\\t+/, (t) => ' '.repeat(3 * t.length));\n                let nextLine = src.split('\\n', 1)[0];\n                let blankLine = !line.trim();\n                let indent = 0;\n                if (this.options.pedantic) {\n                    indent = 2;\n                    itemContents = line.trimStart();\n                }\n                else if (blankLine) {\n                    indent = cap[1].length + 1;\n                }\n                else {\n                    indent = cap[2].search(/[^ ]/); // Find first non-space char\n                    indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n                    itemContents = line.slice(indent);\n                    indent += cap[1].length;\n                }\n                if (blankLine && /^ *$/.test(nextLine)) { // Items begin with at most one blank line\n                    raw += nextLine + '\\n';\n                    src = src.substring(nextLine.length + 1);\n                    endEarly = true;\n                }\n                if (!endEarly) {\n                    const nextBulletRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`);\n                    const hrRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`);\n                    const fencesBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`);\n                    const headingBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`);\n                    // Check if following lines should be included in List Item\n                    while (src) {\n                        const rawLine = src.split('\\n', 1)[0];\n                        nextLine = rawLine;\n                        // Re-align to follow commonmark nesting rules\n                        if (this.options.pedantic) {\n                            nextLine = nextLine.replace(/^ {1,4}(?=( {4})*[^ ])/g, '  ');\n                        }\n                        // End list item if found code fences\n                        if (fencesBeginRegex.test(nextLine)) {\n                            break;\n                        }\n                        // End list item if found start of new heading\n                        if (headingBeginRegex.test(nextLine)) {\n                            break;\n                        }\n                        // End list item if found start of new bullet\n                        if (nextBulletRegex.test(nextLine)) {\n                            break;\n                        }\n                        // Horizontal rule found\n                        if (hrRegex.test(src)) {\n                            break;\n                        }\n                        if (nextLine.search(/[^ ]/) >= indent || !nextLine.trim()) { // Dedent if possible\n                            itemContents += '\\n' + nextLine.slice(indent);\n                        }\n                        else {\n                            // not enough indentation\n                            if (blankLine) {\n                                break;\n                            }\n                            // paragraph continuation unless last line was a different block level element\n                            if (line.search(/[^ ]/) >= 4) { // indented code block\n                                break;\n                            }\n                            if (fencesBeginRegex.test(line)) {\n                                break;\n                            }\n                            if (headingBeginRegex.test(line)) {\n                                break;\n                            }\n                            if (hrRegex.test(line)) {\n                                break;\n                            }\n                            itemContents += '\\n' + nextLine;\n                        }\n                        if (!blankLine && !nextLine.trim()) { // Check if current line is blank\n                            blankLine = true;\n                        }\n                        raw += rawLine + '\\n';\n                        src = src.substring(rawLine.length + 1);\n                        line = nextLine.slice(indent);\n                    }\n                }\n                if (!list.loose) {\n                    // If the previous item ended with a blank line, the list is loose\n                    if (endsWithBlankLine) {\n                        list.loose = true;\n                    }\n                    else if (/\\n *\\n *$/.test(raw)) {\n                        endsWithBlankLine = true;\n                    }\n                }\n                let istask = null;\n                let ischecked;\n                // Check for task list items\n                if (this.options.gfm) {\n                    istask = /^\\[[ xX]\\] /.exec(itemContents);\n                    if (istask) {\n                        ischecked = istask[0] !== '[ ] ';\n                        itemContents = itemContents.replace(/^\\[[ xX]\\] +/, '');\n                    }\n                }\n                list.items.push({\n                    type: 'list_item',\n                    raw,\n                    task: !!istask,\n                    checked: ischecked,\n                    loose: false,\n                    text: itemContents,\n                    tokens: []\n                });\n                list.raw += raw;\n            }\n            // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n            list.items[list.items.length - 1].raw = list.items[list.items.length - 1].raw.trimEnd();\n            list.items[list.items.length - 1].text = list.items[list.items.length - 1].text.trimEnd();\n            list.raw = list.raw.trimEnd();\n            // Item child tokens handled here at end because we needed to have the final item to trim it first\n            for (let i = 0; i < list.items.length; i++) {\n                this.lexer.state.top = false;\n                list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);\n                if (!list.loose) {\n                    // Check if list should be loose\n                    const spacers = list.items[i].tokens.filter(t => t.type === 'space');\n                    const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => /\\n.*\\n/.test(t.raw));\n                    list.loose = hasMultipleLineBreaks;\n                }\n            }\n            // Set all items to loose if list is loose\n            if (list.loose) {\n                for (let i = 0; i < list.items.length; i++) {\n                    list.items[i].loose = true;\n                }\n            }\n            return list;\n        }\n    }\n    html(src) {\n        const cap = this.rules.block.html.exec(src);\n        if (cap) {\n            const token = {\n                type: 'html',\n                block: true,\n                raw: cap[0],\n                pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',\n                text: cap[0]\n            };\n            return token;\n        }\n    }\n    def(src) {\n        const cap = this.rules.block.def.exec(src);\n        if (cap) {\n            const tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n            const href = cap[2] ? cap[2].replace(/^<(.*)>$/, '$1').replace(this.rules.inline.anyPunctuation, '$1') : '';\n            const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, '$1') : cap[3];\n            return {\n                type: 'def',\n                tag,\n                raw: cap[0],\n                href,\n                title\n            };\n        }\n    }\n    table(src) {\n        const cap = this.rules.block.table.exec(src);\n        if (!cap) {\n            return;\n        }\n        if (!/[:|]/.test(cap[2])) {\n            // delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading\n            return;\n        }\n        const headers = splitCells(cap[1]);\n        const aligns = cap[2].replace(/^\\||\\| *$/g, '').split('|');\n        const rows = cap[3] && cap[3].trim() ? cap[3].replace(/\\n[ \\t]*$/, '').split('\\n') : [];\n        const item = {\n            type: 'table',\n            raw: cap[0],\n            header: [],\n            align: [],\n            rows: []\n        };\n        if (headers.length !== aligns.length) {\n            // header and align columns must be equal, rows can be different.\n            return;\n        }\n        for (const align of aligns) {\n            if (/^ *-+: *$/.test(align)) {\n                item.align.push('right');\n            }\n            else if (/^ *:-+: *$/.test(align)) {\n                item.align.push('center');\n            }\n            else if (/^ *:-+ *$/.test(align)) {\n                item.align.push('left');\n            }\n            else {\n                item.align.push(null);\n            }\n        }\n        for (let i = 0; i < headers.length; i++) {\n            item.header.push({\n                text: headers[i],\n                tokens: this.lexer.inline(headers[i]),\n                header: true,\n                align: item.align[i]\n            });\n        }\n        for (const row of rows) {\n            item.rows.push(splitCells(row, item.header.length).map((cell, i) => {\n                return {\n                    text: cell,\n                    tokens: this.lexer.inline(cell),\n                    header: false,\n                    align: item.align[i]\n                };\n            }));\n        }\n        return item;\n    }\n    lheading(src) {\n        const cap = this.rules.block.lheading.exec(src);\n        if (cap) {\n            return {\n                type: 'heading',\n                raw: cap[0],\n                depth: cap[2].charAt(0) === '=' ? 1 : 2,\n                text: cap[1],\n                tokens: this.lexer.inline(cap[1])\n            };\n        }\n    }\n    paragraph(src) {\n        const cap = this.rules.block.paragraph.exec(src);\n        if (cap) {\n            const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n                ? cap[1].slice(0, -1)\n                : cap[1];\n            return {\n                type: 'paragraph',\n                raw: cap[0],\n                text,\n                tokens: this.lexer.inline(text)\n            };\n        }\n    }\n    text(src) {\n        const cap = this.rules.block.text.exec(src);\n        if (cap) {\n            return {\n                type: 'text',\n                raw: cap[0],\n                text: cap[0],\n                tokens: this.lexer.inline(cap[0])\n            };\n        }\n    }\n    escape(src) {\n        const cap = this.rules.inline.escape.exec(src);\n        if (cap) {\n            return {\n                type: 'escape',\n                raw: cap[0],\n                text: escape(cap[1])\n            };\n        }\n    }\n    tag(src) {\n        const cap = this.rules.inline.tag.exec(src);\n        if (cap) {\n            if (!this.lexer.state.inLink && /^<a /i.test(cap[0])) {\n                this.lexer.state.inLink = true;\n            }\n            else if (this.lexer.state.inLink && /^<\\/a>/i.test(cap[0])) {\n                this.lexer.state.inLink = false;\n            }\n            if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n                this.lexer.state.inRawBlock = true;\n            }\n            else if (this.lexer.state.inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n                this.lexer.state.inRawBlock = false;\n            }\n            return {\n                type: 'html',\n                raw: cap[0],\n                inLink: this.lexer.state.inLink,\n                inRawBlock: this.lexer.state.inRawBlock,\n                block: false,\n                text: cap[0]\n            };\n        }\n    }\n    link(src) {\n        const cap = this.rules.inline.link.exec(src);\n        if (cap) {\n            const trimmedUrl = cap[2].trim();\n            if (!this.options.pedantic && /^</.test(trimmedUrl)) {\n                // commonmark requires matching angle brackets\n                if (!(/>$/.test(trimmedUrl))) {\n                    return;\n                }\n                // ending angle bracket cannot be escaped\n                const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n                if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n                    return;\n                }\n            }\n            else {\n                // find closing parenthesis\n                const lastParenIndex = findClosingBracket(cap[2], '()');\n                if (lastParenIndex > -1) {\n                    const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n                    const linkLen = start + cap[1].length + lastParenIndex;\n                    cap[2] = cap[2].substring(0, lastParenIndex);\n                    cap[0] = cap[0].substring(0, linkLen).trim();\n                    cap[3] = '';\n                }\n            }\n            let href = cap[2];\n            let title = '';\n            if (this.options.pedantic) {\n                // split pedantic href and title\n                const link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n                if (link) {\n                    href = link[1];\n                    title = link[3];\n                }\n            }\n            else {\n                title = cap[3] ? cap[3].slice(1, -1) : '';\n            }\n            href = href.trim();\n            if (/^</.test(href)) {\n                if (this.options.pedantic && !(/>$/.test(trimmedUrl))) {\n                    // pedantic allows starting angle bracket without ending angle bracket\n                    href = href.slice(1);\n                }\n                else {\n                    href = href.slice(1, -1);\n                }\n            }\n            return outputLink(cap, {\n                href: href ? href.replace(this.rules.inline.anyPunctuation, '$1') : href,\n                title: title ? title.replace(this.rules.inline.anyPunctuation, '$1') : title\n            }, cap[0], this.lexer);\n        }\n    }\n    reflink(src, links) {\n        let cap;\n        if ((cap = this.rules.inline.reflink.exec(src))\n            || (cap = this.rules.inline.nolink.exec(src))) {\n            const linkString = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n            const link = links[linkString.toLowerCase()];\n            if (!link) {\n                const text = cap[0].charAt(0);\n                return {\n                    type: 'text',\n                    raw: text,\n                    text\n                };\n            }\n            return outputLink(cap, link, cap[0], this.lexer);\n        }\n    }\n    emStrong(src, maskedSrc, prevChar = '') {\n        let match = this.rules.inline.emStrongLDelim.exec(src);\n        if (!match)\n            return;\n        // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n        if (match[3] && prevChar.match(/[\\p{L}\\p{N}]/u))\n            return;\n        const nextChar = match[1] || match[2] || '';\n        if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n            // unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below)\n            const lLength = [...match[0]].length - 1;\n            let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n            const endReg = match[0][0] === '*' ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n            endReg.lastIndex = 0;\n            // Clip maskedSrc to same section of string as src (move to lexer?)\n            maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n            while ((match = endReg.exec(maskedSrc)) != null) {\n                rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n                if (!rDelim)\n                    continue; // skip single * in __abc*abc__\n                rLength = [...rDelim].length;\n                if (match[3] || match[4]) { // found another Left Delim\n                    delimTotal += rLength;\n                    continue;\n                }\n                else if (match[5] || match[6]) { // either Left or Right Delim\n                    if (lLength % 3 && !((lLength + rLength) % 3)) {\n                        midDelimTotal += rLength;\n                        continue; // CommonMark Emphasis Rules 9-10\n                    }\n                }\n                delimTotal -= rLength;\n                if (delimTotal > 0)\n                    continue; // Haven't found enough closing delimiters\n                // Remove extra characters. *a*** -> *a*\n                rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n                // char length can be >1 for unicode characters;\n                const lastCharLength = [...match[0]][0].length;\n                const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n                // Create `em` if smallest delimiter has odd char count. *a***\n                if (Math.min(lLength, rLength) % 2) {\n                    const text = raw.slice(1, -1);\n                    return {\n                        type: 'em',\n                        raw,\n                        text,\n                        tokens: this.lexer.inlineTokens(text)\n                    };\n                }\n                // Create 'strong' if smallest delimiter has even char count. **a***\n                const text = raw.slice(2, -2);\n                return {\n                    type: 'strong',\n                    raw,\n                    text,\n                    tokens: this.lexer.inlineTokens(text)\n                };\n            }\n        }\n    }\n    codespan(src) {\n        const cap = this.rules.inline.code.exec(src);\n        if (cap) {\n            let text = cap[2].replace(/\\n/g, ' ');\n            const hasNonSpaceChars = /[^ ]/.test(text);\n            const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n            if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n                text = text.substring(1, text.length - 1);\n            }\n            text = escape(text, true);\n            return {\n                type: 'codespan',\n                raw: cap[0],\n                text\n            };\n        }\n    }\n    br(src) {\n        const cap = this.rules.inline.br.exec(src);\n        if (cap) {\n            return {\n                type: 'br',\n                raw: cap[0]\n            };\n        }\n    }\n    del(src) {\n        const cap = this.rules.inline.del.exec(src);\n        if (cap) {\n            return {\n                type: 'del',\n                raw: cap[0],\n                text: cap[2],\n                tokens: this.lexer.inlineTokens(cap[2])\n            };\n        }\n    }\n    autolink(src) {\n        const cap = this.rules.inline.autolink.exec(src);\n        if (cap) {\n            let text, href;\n            if (cap[2] === '@') {\n                text = escape(cap[1]);\n                href = 'mailto:' + text;\n            }\n            else {\n                text = escape(cap[1]);\n                href = text;\n            }\n            return {\n                type: 'link',\n                raw: cap[0],\n                text,\n                href,\n                tokens: [\n                    {\n                        type: 'text',\n                        raw: text,\n                        text\n                    }\n                ]\n            };\n        }\n    }\n    url(src) {\n        let cap;\n        if (cap = this.rules.inline.url.exec(src)) {\n            let text, href;\n            if (cap[2] === '@') {\n                text = escape(cap[0]);\n                href = 'mailto:' + text;\n            }\n            else {\n                // do extended autolink path validation\n                let prevCapZero;\n                do {\n                    prevCapZero = cap[0];\n                    cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? '';\n                } while (prevCapZero !== cap[0]);\n                text = escape(cap[0]);\n                if (cap[1] === 'www.') {\n                    href = 'http://' + cap[0];\n                }\n                else {\n                    href = cap[0];\n                }\n            }\n            return {\n                type: 'link',\n                raw: cap[0],\n                text,\n                href,\n                tokens: [\n                    {\n                        type: 'text',\n                        raw: text,\n                        text\n                    }\n                ]\n            };\n        }\n    }\n    inlineText(src) {\n        const cap = this.rules.inline.text.exec(src);\n        if (cap) {\n            let text;\n            if (this.lexer.state.inRawBlock) {\n                text = cap[0];\n            }\n            else {\n                text = escape(cap[0]);\n            }\n            return {\n                type: 'text',\n                raw: cap[0],\n                text\n            };\n        }\n    }\n}\n","import { edit, noopTest } from './helpers.ts';\n/**\n * Block-Level Grammar\n */\nconst newline = /^(?: *(?:\\n|$))+/;\nconst blockCode = /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/;\nconst fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nconst hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nconst heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nconst bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nconst lheading = edit(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/)\n    .replace(/bull/g, bullet) // lists can interrupt\n    .replace(/blockCode/g, / {4}/) // indented code blocks can interrupt\n    .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n    .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n    .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n    .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n    .getRegex();\nconst _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\nconst blockText = /^[^\\n]+/;\nconst _blockLabel = /(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/;\nconst def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n *)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n *)?| *\\n *)(title))? *(?:\\n+|$)/)\n    .replace('label', _blockLabel)\n    .replace('title', /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/)\n    .getRegex();\nconst list = edit(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/)\n    .replace(/bull/g, bullet)\n    .getRegex();\nconst _tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n    + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n    + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n    + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n    + '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title'\n    + '|tr|track|ul';\nconst _comment = /<!--(?:-?>|[\\s\\S]*?(?:-->|$))/;\nconst html = edit('^ {0,3}(?:' // optional indentation\n    + '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n    + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n    + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n    + '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n    + '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n    + '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (6)\n    + '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) open tag\n    + '|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) closing tag\n    + ')', 'i')\n    .replace('comment', _comment)\n    .replace('tag', _tag)\n    .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n    .getRegex();\nconst paragraph = edit(_paragraph)\n    .replace('hr', hr)\n    .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n    .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n    .replace('|table', '')\n    .replace('blockquote', ' {0,3}>')\n    .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n    .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n    .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n    .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n    .getRegex();\nconst blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/)\n    .replace('paragraph', paragraph)\n    .getRegex();\n/**\n * Normal Block Grammar\n */\nconst blockNormal = {\n    blockquote,\n    code: blockCode,\n    def,\n    fences,\n    heading,\n    hr,\n    html,\n    lheading,\n    list,\n    newline,\n    paragraph,\n    table: noopTest,\n    text: blockText\n};\n/**\n * GFM Block Grammar\n */\nconst gfmTable = edit('^ *([^\\\\n ].*)\\\\n' // Header\n    + ' {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)' // Align\n    + '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)') // Cells\n    .replace('hr', hr)\n    .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n    .replace('blockquote', ' {0,3}>')\n    .replace('code', ' {4}[^\\\\n]')\n    .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n    .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n    .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n    .replace('tag', _tag) // tables can be interrupted by type (6) html blocks\n    .getRegex();\nconst blockGfm = {\n    ...blockNormal,\n    table: gfmTable,\n    paragraph: edit(_paragraph)\n        .replace('hr', hr)\n        .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n        .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n        .replace('table', gfmTable) // interrupt paragraphs with table\n        .replace('blockquote', ' {0,3}>')\n        .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n        .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n        .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n        .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n        .getRegex()\n};\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\nconst blockPedantic = {\n    ...blockNormal,\n    html: edit('^ *(?:comment *(?:\\\\n|\\\\s*$)'\n        + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n        + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n        .replace('comment', _comment)\n        .replace(/tag/g, '(?!(?:'\n        + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n        + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n        + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n        .getRegex(),\n    def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n    heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n    fences: noopTest, // fences not supported\n    lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n    paragraph: edit(_paragraph)\n        .replace('hr', hr)\n        .replace('heading', ' *#{1,6} *[^\\n]')\n        .replace('lheading', lheading)\n        .replace('|table', '')\n        .replace('blockquote', ' {0,3}>')\n        .replace('|fences', '')\n        .replace('|list', '')\n        .replace('|html', '')\n        .replace('|tag', '')\n        .getRegex()\n};\n/**\n * Inline-Level Grammar\n */\nconst escape = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\nconst inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nconst br = /^( {2,}|\\\\)\\n(?!\\s*$)/;\nconst inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/;\n// list of unicode punctuation marks, plus any missing characters from CommonMark spec\nconst _punctuation = '\\\\p{P}\\\\p{S}';\nconst punctuation = edit(/^((?![*_])[\\spunctuation])/, 'u')\n    .replace(/punctuation/g, _punctuation).getRegex();\n// sequences em should skip over [title](link), `code`, <html>\nconst blockSkip = /\\[[^[\\]]*?\\]\\([^\\(\\)]*?\\)|`[^`]*?`|<[^<>]*?>/g;\nconst emStrongLDelim = edit(/^(?:\\*+(?:((?!\\*)[punct])|[^\\s*]))|^_+(?:((?!_)[punct])|([^\\s_]))/, 'u')\n    .replace(/punct/g, _punctuation)\n    .getRegex();\nconst emStrongRDelimAst = edit('^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)' // Skip orphan inside strong\n    + '|[^*]+(?=[^*])' // Consume to delim\n    + '|(?!\\\\*)[punct](\\\\*+)(?=[\\\\s]|$)' // (1) #*** can only be a Right Delimiter\n    + '|[^punct\\\\s](\\\\*+)(?!\\\\*)(?=[punct\\\\s]|$)' // (2) a***#, a*** can only be a Right Delimiter\n    + '|(?!\\\\*)[punct\\\\s](\\\\*+)(?=[^punct\\\\s])' // (3) #***a, ***a can only be Left Delimiter\n    + '|[\\\\s](\\\\*+)(?!\\\\*)(?=[punct])' // (4) ***# can only be Left Delimiter\n    + '|(?!\\\\*)[punct](\\\\*+)(?!\\\\*)(?=[punct])' // (5) #***# can be either Left or Right Delimiter\n    + '|[^punct\\\\s](\\\\*+)(?=[^punct\\\\s])', 'gu') // (6) a***a can be either Left or Right Delimiter\n    .replace(/punct/g, _punctuation)\n    .getRegex();\n// (6) Not allowed for _\nconst emStrongRDelimUnd = edit('^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)' // Skip orphan inside strong\n    + '|[^_]+(?=[^_])' // Consume to delim\n    + '|(?!_)[punct](_+)(?=[\\\\s]|$)' // (1) #___ can only be a Right Delimiter\n    + '|[^punct\\\\s](_+)(?!_)(?=[punct\\\\s]|$)' // (2) a___#, a___ can only be a Right Delimiter\n    + '|(?!_)[punct\\\\s](_+)(?=[^punct\\\\s])' // (3) #___a, ___a can only be Left Delimiter\n    + '|[\\\\s](_+)(?!_)(?=[punct])' // (4) ___# can only be Left Delimiter\n    + '|(?!_)[punct](_+)(?!_)(?=[punct])', 'gu') // (5) #___# can be either Left or Right Delimiter\n    .replace(/punct/g, _punctuation)\n    .getRegex();\nconst anyPunctuation = edit(/\\\\([punct])/, 'gu')\n    .replace(/punct/g, _punctuation)\n    .getRegex();\nconst autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/)\n    .replace('scheme', /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/)\n    .replace('email', /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/)\n    .getRegex();\nconst _inlineComment = edit(_comment).replace('(?:-->|$)', '-->').getRegex();\nconst tag = edit('^comment'\n    + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n    + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n    + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n    + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n    + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>') // CDATA section\n    .replace('comment', _inlineComment)\n    .replace('attribute', /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/)\n    .getRegex();\nconst _inlineLabel = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\nconst link = edit(/^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/)\n    .replace('label', _inlineLabel)\n    .replace('href', /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/)\n    .replace('title', /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/)\n    .getRegex();\nconst reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/)\n    .replace('label', _inlineLabel)\n    .replace('ref', _blockLabel)\n    .getRegex();\nconst nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/)\n    .replace('ref', _blockLabel)\n    .getRegex();\nconst reflinkSearch = edit('reflink|nolink(?!\\\\()', 'g')\n    .replace('reflink', reflink)\n    .replace('nolink', nolink)\n    .getRegex();\n/**\n * Normal Inline Grammar\n */\nconst inlineNormal = {\n    _backpedal: noopTest, // only used for GFM url\n    anyPunctuation,\n    autolink,\n    blockSkip,\n    br,\n    code: inlineCode,\n    del: noopTest,\n    emStrongLDelim,\n    emStrongRDelimAst,\n    emStrongRDelimUnd,\n    escape,\n    link,\n    nolink,\n    punctuation,\n    reflink,\n    reflinkSearch,\n    tag,\n    text: inlineText,\n    url: noopTest\n};\n/**\n * Pedantic Inline Grammar\n */\nconst inlinePedantic = {\n    ...inlineNormal,\n    link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n        .replace('label', _inlineLabel)\n        .getRegex(),\n    reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n        .replace('label', _inlineLabel)\n        .getRegex()\n};\n/**\n * GFM Inline Grammar\n */\nconst inlineGfm = {\n    ...inlineNormal,\n    escape: edit(escape).replace('])', '~|])').getRegex(),\n    url: edit(/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/, 'i')\n        .replace('email', /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/)\n        .getRegex(),\n    _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n    del: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n    text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/\n};\n/**\n * GFM + Line Breaks Inline Grammar\n */\nconst inlineBreaks = {\n    ...inlineGfm,\n    br: edit(br).replace('{2,}', '*').getRegex(),\n    text: edit(inlineGfm.text)\n        .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n        .replace(/\\{2,\\}/g, '*')\n        .getRegex()\n};\n/**\n * exports\n */\nexport const block = {\n    normal: blockNormal,\n    gfm: blockGfm,\n    pedantic: blockPedantic\n};\nexport const inline = {\n    normal: inlineNormal,\n    gfm: inlineGfm,\n    breaks: inlineBreaks,\n    pedantic: inlinePedantic\n};\n","import { _Tokenizer } from './Tokenizer.ts';\nimport { _defaults } from './defaults.ts';\nimport { block, inline } from './rules.ts';\n/**\n * Block Lexer\n */\nexport class _Lexer {\n    tokens;\n    options;\n    state;\n    tokenizer;\n    inlineQueue;\n    constructor(options) {\n        // TokenList cannot be created in one go\n        this.tokens = [];\n        this.tokens.links = Object.create(null);\n        this.options = options || _defaults;\n        this.options.tokenizer = this.options.tokenizer || new _Tokenizer();\n        this.tokenizer = this.options.tokenizer;\n        this.tokenizer.options = this.options;\n        this.tokenizer.lexer = this;\n        this.inlineQueue = [];\n        this.state = {\n            inLink: false,\n            inRawBlock: false,\n            top: true\n        };\n        const rules = {\n            block: block.normal,\n            inline: inline.normal\n        };\n        if (this.options.pedantic) {\n            rules.block = block.pedantic;\n            rules.inline = inline.pedantic;\n        }\n        else if (this.options.gfm) {\n            rules.block = block.gfm;\n            if (this.options.breaks) {\n                rules.inline = inline.breaks;\n            }\n            else {\n                rules.inline = inline.gfm;\n            }\n        }\n        this.tokenizer.rules = rules;\n    }\n    /**\n     * Expose Rules\n     */\n    static get rules() {\n        return {\n            block,\n            inline\n        };\n    }\n    /**\n     * Static Lex Method\n     */\n    static lex(src, options) {\n        const lexer = new _Lexer(options);\n        return lexer.lex(src);\n    }\n    /**\n     * Static Lex Inline Method\n     */\n    static lexInline(src, options) {\n        const lexer = new _Lexer(options);\n        return lexer.inlineTokens(src);\n    }\n    /**\n     * Preprocessing\n     */\n    lex(src) {\n        src = src\n            .replace(/\\r\\n|\\r/g, '\\n');\n        this.blockTokens(src, this.tokens);\n        for (let i = 0; i < this.inlineQueue.length; i++) {\n            const next = this.inlineQueue[i];\n            this.inlineTokens(next.src, next.tokens);\n        }\n        this.inlineQueue = [];\n        return this.tokens;\n    }\n    blockTokens(src, tokens = [], lastParagraphClipped = false) {\n        if (this.options.pedantic) {\n            src = src.replace(/\\t/g, '    ').replace(/^ +$/gm, '');\n        }\n        else {\n            src = src.replace(/^( *)(\\t+)/gm, (_, leading, tabs) => {\n                return leading + '    '.repeat(tabs.length);\n            });\n        }\n        let token;\n        let lastToken;\n        let cutSrc;\n        while (src) {\n            if (this.options.extensions\n                && this.options.extensions.block\n                && this.options.extensions.block.some((extTokenizer) => {\n                    if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n                        src = src.substring(token.raw.length);\n                        tokens.push(token);\n                        return true;\n                    }\n                    return false;\n                })) {\n                continue;\n            }\n            // newline\n            if (token = this.tokenizer.space(src)) {\n                src = src.substring(token.raw.length);\n                if (token.raw.length === 1 && tokens.length > 0) {\n                    // if there's a single \\n as a spacer, it's terminating the last line,\n                    // so move it there so that we don't get unnecessary paragraph tags\n                    tokens[tokens.length - 1].raw += '\\n';\n                }\n                else {\n                    tokens.push(token);\n                }\n                continue;\n            }\n            // code\n            if (token = this.tokenizer.code(src)) {\n                src = src.substring(token.raw.length);\n                lastToken = tokens[tokens.length - 1];\n                // An indented code block cannot interrupt a paragraph.\n                if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n                    lastToken.raw += '\\n' + token.raw;\n                    lastToken.text += '\\n' + token.text;\n                    this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n                }\n                else {\n                    tokens.push(token);\n                }\n                continue;\n            }\n            // fences\n            if (token = this.tokenizer.fences(src)) {\n                src = src.substring(token.raw.length);\n                tokens.push(token);\n                continue;\n            }\n            // heading\n            if (token = this.tokenizer.heading(src)) {\n                src = src.substring(token.raw.length);\n                tokens.push(token);\n                continue;\n            }\n            // hr\n            if (token = this.tokenizer.hr(src)) {\n                src = src.substring(token.raw.length);\n                tokens.push(token);\n                continue;\n            }\n            // blockquote\n            if (token = this.tokenizer.blockquote(src)) {\n                src = src.substring(token.raw.length);\n                tokens.push(token);\n                continue;\n            }\n            // list\n            if (token = this.tokenizer.list(src)) {\n                src = src.substring(token.raw.length);\n                tokens.push(token);\n                continue;\n            }\n            // html\n            if (token = this.tokenizer.html(src)) {\n                src = src.substring(token.raw.length);\n                tokens.push(token);\n                continue;\n            }\n            // def\n            if (token = this.tokenizer.def(src)) {\n                src = src.substring(token.raw.length);\n                lastToken = tokens[tokens.length - 1];\n                if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n                    lastToken.raw += '\\n' + token.raw;\n                    lastToken.text += '\\n' + token.raw;\n                    this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n                }\n                else if (!this.tokens.links[token.tag]) {\n                    this.tokens.links[token.tag] = {\n                        href: token.href,\n                        title: token.title\n                    };\n                }\n                continue;\n            }\n            // table (gfm)\n            if (token = this.tokenizer.table(src)) {\n                src = src.substring(token.raw.length);\n                tokens.push(token);\n                continue;\n            }\n            // lheading\n            if (token = this.tokenizer.lheading(src)) {\n                src = src.substring(token.raw.length);\n                tokens.push(token);\n                continue;\n            }\n            // top-level paragraph\n            // prevent paragraph consuming extensions by clipping 'src' to extension start\n            cutSrc = src;\n            if (this.options.extensions && this.options.extensions.startBlock) {\n                let startIndex = Infinity;\n                const tempSrc = src.slice(1);\n                let tempStart;\n                this.options.extensions.startBlock.forEach((getStartIndex) => {\n                    tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n                    if (typeof tempStart === 'number' && tempStart >= 0) {\n                        startIndex = Math.min(startIndex, tempStart);\n                    }\n                });\n                if (startIndex < Infinity && startIndex >= 0) {\n                    cutSrc = src.substring(0, startIndex + 1);\n                }\n            }\n            if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n                lastToken = tokens[tokens.length - 1];\n                if (lastParagraphClipped && lastToken?.type === 'paragraph') {\n                    lastToken.raw += '\\n' + token.raw;\n                    lastToken.text += '\\n' + token.text;\n                    this.inlineQueue.pop();\n                    this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n                }\n                else {\n                    tokens.push(token);\n                }\n                lastParagraphClipped = (cutSrc.length !== src.length);\n                src = src.substring(token.raw.length);\n                continue;\n            }\n            // text\n            if (token = this.tokenizer.text(src)) {\n                src = src.substring(token.raw.length);\n                lastToken = tokens[tokens.length - 1];\n                if (lastToken && lastToken.type === 'text') {\n                    lastToken.raw += '\\n' + token.raw;\n                    lastToken.text += '\\n' + token.text;\n                    this.inlineQueue.pop();\n                    this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n                }\n                else {\n                    tokens.push(token);\n                }\n                continue;\n            }\n            if (src) {\n                const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n                if (this.options.silent) {\n                    console.error(errMsg);\n                    break;\n                }\n                else {\n                    throw new Error(errMsg);\n                }\n            }\n        }\n        this.state.top = true;\n        return tokens;\n    }\n    inline(src, tokens = []) {\n        this.inlineQueue.push({ src, tokens });\n        return tokens;\n    }\n    /**\n     * Lexing/Compiling\n     */\n    inlineTokens(src, tokens = []) {\n        let token, lastToken, cutSrc;\n        // String with links masked to avoid interference with em and strong\n        let maskedSrc = src;\n        let match;\n        let keepPrevChar, prevChar;\n        // Mask out reflinks\n        if (this.tokens.links) {\n            const links = Object.keys(this.tokens.links);\n            if (links.length > 0) {\n                while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n                    if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n                        maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n                    }\n                }\n            }\n        }\n        // Mask out other blocks\n        while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n            maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n        }\n        // Mask out escaped characters\n        while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) {\n            maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n        }\n        while (src) {\n            if (!keepPrevChar) {\n                prevChar = '';\n            }\n            keepPrevChar = false;\n            // extensions\n            if (this.options.extensions\n                && this.options.extensions.inline\n                && this.options.extensions.inline.some((extTokenizer) => {\n                    if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n                        src = src.substring(token.raw.length);\n                        tokens.push(token);\n                        return true;\n                    }\n                    return false;\n                })) {\n                continue;\n            }\n            // escape\n            if (token = this.tokenizer.escape(src)) {\n                src = src.substring(token.raw.length);\n                tokens.push(token);\n                continue;\n            }\n            // tag\n            if (token = this.tokenizer.tag(src)) {\n                src = src.substring(token.raw.length);\n                lastToken = tokens[tokens.length - 1];\n                if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n                    lastToken.raw += token.raw;\n                    lastToken.text += token.text;\n                }\n                else {\n                    tokens.push(token);\n                }\n                continue;\n            }\n            // link\n            if (token = this.tokenizer.link(src)) {\n                src = src.substring(token.raw.length);\n                tokens.push(token);\n                continue;\n            }\n            // reflink, nolink\n            if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n                src = src.substring(token.raw.length);\n                lastToken = tokens[tokens.length - 1];\n                if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n                    lastToken.raw += token.raw;\n                    lastToken.text += token.text;\n                }\n                else {\n                    tokens.push(token);\n                }\n                continue;\n            }\n            // em & strong\n            if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n                src = src.substring(token.raw.length);\n                tokens.push(token);\n                continue;\n            }\n            // code\n            if (token = this.tokenizer.codespan(src)) {\n                src = src.substring(token.raw.length);\n                tokens.push(token);\n                continue;\n            }\n            // br\n            if (token = this.tokenizer.br(src)) {\n                src = src.substring(token.raw.length);\n                tokens.push(token);\n                continue;\n            }\n            // del (gfm)\n            if (token = this.tokenizer.del(src)) {\n                src = src.substring(token.raw.length);\n                tokens.push(token);\n                continue;\n            }\n            // autolink\n            if (token = this.tokenizer.autolink(src)) {\n                src = src.substring(token.raw.length);\n                tokens.push(token);\n                continue;\n            }\n            // url (gfm)\n            if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n                src = src.substring(token.raw.length);\n                tokens.push(token);\n                continue;\n            }\n            // text\n            // prevent inlineText consuming extensions by clipping 'src' to extension start\n            cutSrc = src;\n            if (this.options.extensions && this.options.extensions.startInline) {\n                let startIndex = Infinity;\n                const tempSrc = src.slice(1);\n                let tempStart;\n                this.options.extensions.startInline.forEach((getStartIndex) => {\n                    tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n                    if (typeof tempStart === 'number' && tempStart >= 0) {\n                        startIndex = Math.min(startIndex, tempStart);\n                    }\n                });\n                if (startIndex < Infinity && startIndex >= 0) {\n                    cutSrc = src.substring(0, startIndex + 1);\n                }\n            }\n            if (token = this.tokenizer.inlineText(cutSrc)) {\n                src = src.substring(token.raw.length);\n                if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n                    prevChar = token.raw.slice(-1);\n                }\n                keepPrevChar = true;\n                lastToken = tokens[tokens.length - 1];\n                if (lastToken && lastToken.type === 'text') {\n                    lastToken.raw += token.raw;\n                    lastToken.text += token.text;\n                }\n                else {\n                    tokens.push(token);\n                }\n                continue;\n            }\n            if (src) {\n                const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n                if (this.options.silent) {\n                    console.error(errMsg);\n                    break;\n                }\n                else {\n                    throw new Error(errMsg);\n                }\n            }\n        }\n        return tokens;\n    }\n}\n","import { _defaults } from './defaults.ts';\nimport { cleanUrl, escape } from './helpers.ts';\n/**\n * Renderer\n */\nexport class _Renderer {\n    options;\n    parser; // set by the parser\n    constructor(options) {\n        this.options = options || _defaults;\n    }\n    space(token) {\n        return '';\n    }\n    code({ text, lang, escaped }) {\n        const langString = (lang || '').match(/^\\S*/)?.[0];\n        const code = text.replace(/\\n$/, '') + '\\n';\n        if (!langString) {\n            return '<pre><code>'\n                + (escaped ? code : escape(code, true))\n                + '</code></pre>\\n';\n        }\n        return '<pre><code class=\"language-'\n            + escape(langString)\n            + '\">'\n            + (escaped ? code : escape(code, true))\n            + '</code></pre>\\n';\n    }\n    blockquote({ tokens }) {\n        const body = this.parser.parse(tokens);\n        return `<blockquote>\\n${body}</blockquote>\\n`;\n    }\n    html({ text }) {\n        return text;\n    }\n    heading({ tokens, depth }) {\n        return `<h${depth}>${this.parser.parseInline(tokens)}</h${depth}>\\n`;\n    }\n    hr(token) {\n        return '<hr>\\n';\n    }\n    list(token) {\n        const ordered = token.ordered;\n        const start = token.start;\n        let body = '';\n        for (let j = 0; j < token.items.length; j++) {\n            const item = token.items[j];\n            body += this.listitem(item);\n        }\n        const type = ordered ? 'ol' : 'ul';\n        const startAttr = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n        return '<' + type + startAttr + '>\\n' + body + '</' + type + '>\\n';\n    }\n    listitem(item) {\n        let itemBody = '';\n        if (item.task) {\n            const checkbox = this.checkbox({ checked: !!item.checked });\n            if (item.loose) {\n                if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') {\n                    item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n                    if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n                        item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n                    }\n                }\n                else {\n                    item.tokens.unshift({\n                        type: 'text',\n                        raw: checkbox + ' ',\n                        text: checkbox + ' '\n                    });\n                }\n            }\n            else {\n                itemBody += checkbox + ' ';\n            }\n        }\n        itemBody += this.parser.parse(item.tokens, !!item.loose);\n        return `<li>${itemBody}</li>\\n`;\n    }\n    checkbox({ checked }) {\n        return '<input '\n            + (checked ? 'checked=\"\" ' : '')\n            + 'disabled=\"\" type=\"checkbox\">';\n    }\n    paragraph({ tokens }) {\n        return `<p>${this.parser.parseInline(tokens)}</p>\\n`;\n    }\n    table(token) {\n        let header = '';\n        // header\n        let cell = '';\n        for (let j = 0; j < token.header.length; j++) {\n            cell += this.tablecell(token.header[j]);\n        }\n        header += this.tablerow({ text: cell });\n        let body = '';\n        for (let j = 0; j < token.rows.length; j++) {\n            const row = token.rows[j];\n            cell = '';\n            for (let k = 0; k < row.length; k++) {\n                cell += this.tablecell(row[k]);\n            }\n            body += this.tablerow({ text: cell });\n        }\n        if (body)\n            body = `<tbody>${body}</tbody>`;\n        return '<table>\\n'\n            + '<thead>\\n'\n            + header\n            + '</thead>\\n'\n            + body\n            + '</table>\\n';\n    }\n    tablerow({ text }) {\n        return `<tr>\\n${text}</tr>\\n`;\n    }\n    tablecell(token) {\n        const content = this.parser.parseInline(token.tokens);\n        const type = token.header ? 'th' : 'td';\n        const tag = token.align\n            ? `<${type} align=\"${token.align}\">`\n            : `<${type}>`;\n        return tag + content + `</${type}>\\n`;\n    }\n    /**\n     * span level renderer\n     */\n    strong({ tokens }) {\n        return `<strong>${this.parser.parseInline(tokens)}</strong>`;\n    }\n    em({ tokens }) {\n        return `<em>${this.parser.parseInline(tokens)}</em>`;\n    }\n    codespan({ text }) {\n        return `<code>${text}</code>`;\n    }\n    br(token) {\n        return '<br>';\n    }\n    del({ tokens }) {\n        return `<del>${this.parser.parseInline(tokens)}</del>`;\n    }\n    link({ href, title, tokens }) {\n        const text = this.parser.parseInline(tokens);\n        const cleanHref = cleanUrl(href);\n        if (cleanHref === null) {\n            return text;\n        }\n        href = cleanHref;\n        let out = '<a href=\"' + href + '\"';\n        if (title) {\n            out += ' title=\"' + title + '\"';\n        }\n        out += '>' + text + '</a>';\n        return out;\n    }\n    image({ href, title, text }) {\n        const cleanHref = cleanUrl(href);\n        if (cleanHref === null) {\n            return text;\n        }\n        href = cleanHref;\n        let out = `<img src=\"${href}\" alt=\"${text}\"`;\n        if (title) {\n            out += ` title=\"${title}\"`;\n        }\n        out += '>';\n        return out;\n    }\n    text(token) {\n        return 'tokens' in token && token.tokens ? this.parser.parseInline(token.tokens) : token.text;\n    }\n}\n","/**\n * TextRenderer\n * returns only the textual part of the token\n */\nexport class _TextRenderer {\n    // no need for block level renderers\n    strong({ text }) {\n        return text;\n    }\n    em({ text }) {\n        return text;\n    }\n    codespan({ text }) {\n        return text;\n    }\n    del({ text }) {\n        return text;\n    }\n    html({ text }) {\n        return text;\n    }\n    text({ text }) {\n        return text;\n    }\n    link({ text }) {\n        return '' + text;\n    }\n    image({ text }) {\n        return '' + text;\n    }\n    br() {\n        return '';\n    }\n}\n","import { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _defaults } from './defaults.ts';\n/**\n * Parsing & Compiling\n */\nexport class _Parser {\n    options;\n    renderer;\n    textRenderer;\n    constructor(options) {\n        this.options = options || _defaults;\n        this.options.renderer = this.options.renderer || new _Renderer();\n        this.renderer = this.options.renderer;\n        this.renderer.options = this.options;\n        this.renderer.parser = this;\n        this.textRenderer = new _TextRenderer();\n    }\n    /**\n     * Static Parse Method\n     */\n    static parse(tokens, options) {\n        const parser = new _Parser(options);\n        return parser.parse(tokens);\n    }\n    /**\n     * Static Parse Inline Method\n     */\n    static parseInline(tokens, options) {\n        const parser = new _Parser(options);\n        return parser.parseInline(tokens);\n    }\n    /**\n     * Parse Loop\n     */\n    parse(tokens, top = true) {\n        let out = '';\n        for (let i = 0; i < tokens.length; i++) {\n            const anyToken = tokens[i];\n            // Run any renderer extensions\n            if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[anyToken.type]) {\n                const genericToken = anyToken;\n                const ret = this.options.extensions.renderers[genericToken.type].call({ parser: this }, genericToken);\n                if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(genericToken.type)) {\n                    out += ret || '';\n                    continue;\n                }\n            }\n            const token = anyToken;\n            switch (token.type) {\n                case 'space': {\n                    out += this.renderer.space(token);\n                    continue;\n                }\n                case 'hr': {\n                    out += this.renderer.hr(token);\n                    continue;\n                }\n                case 'heading': {\n                    out += this.renderer.heading(token);\n                    continue;\n                }\n                case 'code': {\n                    out += this.renderer.code(token);\n                    continue;\n                }\n                case 'table': {\n                    out += this.renderer.table(token);\n                    continue;\n                }\n                case 'blockquote': {\n                    out += this.renderer.blockquote(token);\n                    continue;\n                }\n                case 'list': {\n                    out += this.renderer.list(token);\n                    continue;\n                }\n                case 'html': {\n                    out += this.renderer.html(token);\n                    continue;\n                }\n                case 'paragraph': {\n                    out += this.renderer.paragraph(token);\n                    continue;\n                }\n                case 'text': {\n                    let textToken = token;\n                    let body = this.renderer.text(textToken);\n                    while (i + 1 < tokens.length && tokens[i + 1].type === 'text') {\n                        textToken = tokens[++i];\n                        body += '\\n' + this.renderer.text(textToken);\n                    }\n                    if (top) {\n                        out += this.renderer.paragraph({\n                            type: 'paragraph',\n                            raw: body,\n                            text: body,\n                            tokens: [{ type: 'text', raw: body, text: body }]\n                        });\n                    }\n                    else {\n                        out += body;\n                    }\n                    continue;\n                }\n                default: {\n                    const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n                    if (this.options.silent) {\n                        console.error(errMsg);\n                        return '';\n                    }\n                    else {\n                        throw new Error(errMsg);\n                    }\n                }\n            }\n        }\n        return out;\n    }\n    /**\n     * Parse Inline Tokens\n     */\n    parseInline(tokens, renderer) {\n        renderer = renderer || this.renderer;\n        let out = '';\n        for (let i = 0; i < tokens.length; i++) {\n            const anyToken = tokens[i];\n            // Run any renderer extensions\n            if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[anyToken.type]) {\n                const ret = this.options.extensions.renderers[anyToken.type].call({ parser: this }, anyToken);\n                if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(anyToken.type)) {\n                    out += ret || '';\n                    continue;\n                }\n            }\n            const token = anyToken;\n            switch (token.type) {\n                case 'escape': {\n                    out += renderer.text(token);\n                    break;\n                }\n                case 'html': {\n                    out += renderer.html(token);\n                    break;\n                }\n                case 'link': {\n                    out += renderer.link(token);\n                    break;\n                }\n                case 'image': {\n                    out += renderer.image(token);\n                    break;\n                }\n                case 'strong': {\n                    out += renderer.strong(token);\n                    break;\n                }\n                case 'em': {\n                    out += renderer.em(token);\n                    break;\n                }\n                case 'codespan': {\n                    out += renderer.codespan(token);\n                    break;\n                }\n                case 'br': {\n                    out += renderer.br(token);\n                    break;\n                }\n                case 'del': {\n                    out += renderer.del(token);\n                    break;\n                }\n                case 'text': {\n                    out += renderer.text(token);\n                    break;\n                }\n                default: {\n                    const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n                    if (this.options.silent) {\n                        console.error(errMsg);\n                        return '';\n                    }\n                    else {\n                        throw new Error(errMsg);\n                    }\n                }\n            }\n        }\n        return out;\n    }\n}\n","import { _defaults } from './defaults.ts';\nexport class _Hooks {\n    options;\n    constructor(options) {\n        this.options = options || _defaults;\n    }\n    static passThroughHooks = new Set([\n        'preprocess',\n        'postprocess',\n        'processAllTokens'\n    ]);\n    /**\n     * Process markdown before marked\n     */\n    preprocess(markdown) {\n        return markdown;\n    }\n    /**\n     * Process HTML after marked is finished\n     */\n    postprocess(html) {\n        return html;\n    }\n    /**\n     * Process all tokens before walk tokens\n     */\n    processAllTokens(tokens) {\n        return tokens;\n    }\n}\n","import { _getDefaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { escape, unescape } from './helpers.ts';\nexport class Marked {\n    defaults = _getDefaults();\n    options = this.setOptions;\n    parse = this.#parseMarkdown(_Lexer.lex, _Parser.parse);\n    parseInline = this.#parseMarkdown(_Lexer.lexInline, _Parser.parseInline);\n    Parser = _Parser;\n    Renderer = _Renderer;\n    TextRenderer = _TextRenderer;\n    Lexer = _Lexer;\n    Tokenizer = _Tokenizer;\n    Hooks = _Hooks;\n    constructor(...args) {\n        this.use(...args);\n    }\n    /**\n     * Run callback for every token\n     */\n    walkTokens(tokens, callback) {\n        let values = [];\n        for (const token of tokens) {\n            values = values.concat(callback.call(this, token));\n            switch (token.type) {\n                case 'table': {\n                    const tableToken = token;\n                    for (const cell of tableToken.header) {\n                        values = values.concat(this.walkTokens(cell.tokens, callback));\n                    }\n                    for (const row of tableToken.rows) {\n                        for (const cell of row) {\n                            values = values.concat(this.walkTokens(cell.tokens, callback));\n                        }\n                    }\n                    break;\n                }\n                case 'list': {\n                    const listToken = token;\n                    values = values.concat(this.walkTokens(listToken.items, callback));\n                    break;\n                }\n                default: {\n                    const genericToken = token;\n                    if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n                        this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n                            const tokens = genericToken[childTokens].flat(Infinity);\n                            values = values.concat(this.walkTokens(tokens, callback));\n                        });\n                    }\n                    else if (genericToken.tokens) {\n                        values = values.concat(this.walkTokens(genericToken.tokens, callback));\n                    }\n                }\n            }\n        }\n        return values;\n    }\n    use(...args) {\n        const extensions = this.defaults.extensions || { renderers: {}, childTokens: {} };\n        args.forEach((pack) => {\n            // copy options to new object\n            const opts = { ...pack };\n            // set async to true if it was set to true before\n            opts.async = this.defaults.async || opts.async || false;\n            // ==-- Parse \"addon\" extensions --== //\n            if (pack.extensions) {\n                pack.extensions.forEach((ext) => {\n                    if (!ext.name) {\n                        throw new Error('extension name required');\n                    }\n                    if ('renderer' in ext) { // Renderer extensions\n                        const prevRenderer = extensions.renderers[ext.name];\n                        if (prevRenderer) {\n                            // Replace extension with func to run new extension but fall back if false\n                            extensions.renderers[ext.name] = function (...args) {\n                                let ret = ext.renderer.apply(this, args);\n                                if (ret === false) {\n                                    ret = prevRenderer.apply(this, args);\n                                }\n                                return ret;\n                            };\n                        }\n                        else {\n                            extensions.renderers[ext.name] = ext.renderer;\n                        }\n                    }\n                    if ('tokenizer' in ext) { // Tokenizer Extensions\n                        if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n                            throw new Error(\"extension level must be 'block' or 'inline'\");\n                        }\n                        const extLevel = extensions[ext.level];\n                        if (extLevel) {\n                            extLevel.unshift(ext.tokenizer);\n                        }\n                        else {\n                            extensions[ext.level] = [ext.tokenizer];\n                        }\n                        if (ext.start) { // Function to check for start of token\n                            if (ext.level === 'block') {\n                                if (extensions.startBlock) {\n                                    extensions.startBlock.push(ext.start);\n                                }\n                                else {\n                                    extensions.startBlock = [ext.start];\n                                }\n                            }\n                            else if (ext.level === 'inline') {\n                                if (extensions.startInline) {\n                                    extensions.startInline.push(ext.start);\n                                }\n                                else {\n                                    extensions.startInline = [ext.start];\n                                }\n                            }\n                        }\n                    }\n                    if ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens\n                        extensions.childTokens[ext.name] = ext.childTokens;\n                    }\n                });\n                opts.extensions = extensions;\n            }\n            // ==-- Parse \"overwrite\" extensions --== //\n            if (pack.renderer) {\n                const renderer = this.defaults.renderer || new _Renderer(this.defaults);\n                for (const prop in pack.renderer) {\n                    if (!(prop in renderer)) {\n                        throw new Error(`renderer '${prop}' does not exist`);\n                    }\n                    if (['options', 'parser'].includes(prop)) {\n                        // ignore options property\n                        continue;\n                    }\n                    const rendererProp = prop;\n                    let rendererFunc = pack.renderer[rendererProp];\n                    const prevRenderer = renderer[rendererProp];\n                    // Replace renderer with func to run extension, but fall back if false\n                    renderer[rendererProp] = (...args) => {\n                        if (!pack.useNewRenderer) {\n                            // TODO: Remove this in next major version\n                            rendererFunc = this.#convertRendererFunction(rendererFunc, rendererProp, renderer);\n                        }\n                        let ret = rendererFunc.apply(renderer, args);\n                        if (ret === false) {\n                            ret = prevRenderer.apply(renderer, args);\n                        }\n                        return ret || '';\n                    };\n                }\n                opts.renderer = renderer;\n            }\n            if (pack.tokenizer) {\n                const tokenizer = this.defaults.tokenizer || new _Tokenizer(this.defaults);\n                for (const prop in pack.tokenizer) {\n                    if (!(prop in tokenizer)) {\n                        throw new Error(`tokenizer '${prop}' does not exist`);\n                    }\n                    if (['options', 'rules', 'lexer'].includes(prop)) {\n                        // ignore options, rules, and lexer properties\n                        continue;\n                    }\n                    const tokenizerProp = prop;\n                    const tokenizerFunc = pack.tokenizer[tokenizerProp];\n                    const prevTokenizer = tokenizer[tokenizerProp];\n                    // Replace tokenizer with func to run extension, but fall back if false\n                    // @ts-expect-error cannot type tokenizer function dynamically\n                    tokenizer[tokenizerProp] = (...args) => {\n                        let ret = tokenizerFunc.apply(tokenizer, args);\n                        if (ret === false) {\n                            ret = prevTokenizer.apply(tokenizer, args);\n                        }\n                        return ret;\n                    };\n                }\n                opts.tokenizer = tokenizer;\n            }\n            // ==-- Parse Hooks extensions --== //\n            if (pack.hooks) {\n                const hooks = this.defaults.hooks || new _Hooks();\n                for (const prop in pack.hooks) {\n                    if (!(prop in hooks)) {\n                        throw new Error(`hook '${prop}' does not exist`);\n                    }\n                    if (prop === 'options') {\n                        // ignore options property\n                        continue;\n                    }\n                    const hooksProp = prop;\n                    const hooksFunc = pack.hooks[hooksProp];\n                    const prevHook = hooks[hooksProp];\n                    if (_Hooks.passThroughHooks.has(prop)) {\n                        // @ts-expect-error cannot type hook function dynamically\n                        hooks[hooksProp] = (arg) => {\n                            if (this.defaults.async) {\n                                return Promise.resolve(hooksFunc.call(hooks, arg)).then(ret => {\n                                    return prevHook.call(hooks, ret);\n                                });\n                            }\n                            const ret = hooksFunc.call(hooks, arg);\n                            return prevHook.call(hooks, ret);\n                        };\n                    }\n                    else {\n                        // @ts-expect-error cannot type hook function dynamically\n                        hooks[hooksProp] = (...args) => {\n                            let ret = hooksFunc.apply(hooks, args);\n                            if (ret === false) {\n                                ret = prevHook.apply(hooks, args);\n                            }\n                            return ret;\n                        };\n                    }\n                }\n                opts.hooks = hooks;\n            }\n            // ==-- Parse WalkTokens extensions --== //\n            if (pack.walkTokens) {\n                const walkTokens = this.defaults.walkTokens;\n                const packWalktokens = pack.walkTokens;\n                opts.walkTokens = function (token) {\n                    let values = [];\n                    values.push(packWalktokens.call(this, token));\n                    if (walkTokens) {\n                        values = values.concat(walkTokens.call(this, token));\n                    }\n                    return values;\n                };\n            }\n            this.defaults = { ...this.defaults, ...opts };\n        });\n        return this;\n    }\n    // TODO: Remove this in next major release\n    #convertRendererFunction(func, prop, renderer) {\n        switch (prop) {\n            case 'heading':\n                return function (token) {\n                    if (!token.type || token.type !== prop) {\n                        // @ts-ignore\n                        // eslint-disable-next-line prefer-rest-params\n                        return func.apply(this, arguments);\n                    }\n                    return func.call(this, renderer.parser.parseInline(token.tokens), token.depth, unescape(renderer.parser.parseInline(token.tokens, renderer.parser.textRenderer)));\n                };\n            case 'code':\n                return function (token) {\n                    if (!token.type || token.type !== prop) {\n                        // @ts-ignore\n                        // eslint-disable-next-line prefer-rest-params\n                        return func.apply(this, arguments);\n                    }\n                    return func.call(this, token.text, token.lang, !!token.escaped);\n                };\n            case 'table':\n                return function (token) {\n                    if (!token.type || token.type !== prop) {\n                        // @ts-ignore\n                        // eslint-disable-next-line prefer-rest-params\n                        return func.apply(this, arguments);\n                    }\n                    let header = '';\n                    // header\n                    let cell = '';\n                    for (let j = 0; j < token.header.length; j++) {\n                        cell += this.tablecell({\n                            text: token.header[j].text,\n                            tokens: token.header[j].tokens,\n                            header: true,\n                            align: token.align[j]\n                        });\n                    }\n                    header += this.tablerow({ text: cell });\n                    let body = '';\n                    for (let j = 0; j < token.rows.length; j++) {\n                        const row = token.rows[j];\n                        cell = '';\n                        for (let k = 0; k < row.length; k++) {\n                            cell += this.tablecell({\n                                text: row[k].text,\n                                tokens: row[k].tokens,\n                                header: false,\n                                align: token.align[k]\n                            });\n                        }\n                        body += this.tablerow({ text: cell });\n                    }\n                    return func.call(this, header, body);\n                };\n            case 'blockquote':\n                return function (token) {\n                    if (!token.type || token.type !== prop) {\n                        // @ts-ignore\n                        // eslint-disable-next-line prefer-rest-params\n                        return func.apply(this, arguments);\n                    }\n                    const body = this.parser.parse(token.tokens);\n                    return func.call(this, body);\n                };\n            case 'list':\n                return function (token) {\n                    if (!token.type || token.type !== prop) {\n                        // @ts-ignore\n                        // eslint-disable-next-line prefer-rest-params\n                        return func.apply(this, arguments);\n                    }\n                    const ordered = token.ordered;\n                    const start = token.start;\n                    const loose = token.loose;\n                    let body = '';\n                    for (let j = 0; j < token.items.length; j++) {\n                        const item = token.items[j];\n                        const checked = item.checked;\n                        const task = item.task;\n                        let itemBody = '';\n                        if (item.task) {\n                            const checkbox = this.checkbox({ checked: !!checked });\n                            if (loose) {\n                                if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') {\n                                    item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n                                    if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n                                        item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n                                    }\n                                }\n                                else {\n                                    item.tokens.unshift({\n                                        type: 'text',\n                                        text: checkbox + ' '\n                                    });\n                                }\n                            }\n                            else {\n                                itemBody += checkbox + ' ';\n                            }\n                        }\n                        itemBody += this.parser.parse(item.tokens, loose);\n                        body += this.listitem({\n                            type: 'list_item',\n                            raw: itemBody,\n                            text: itemBody,\n                            task,\n                            checked: !!checked,\n                            loose,\n                            tokens: item.tokens\n                        });\n                    }\n                    return func.call(this, body, ordered, start);\n                };\n            case 'html':\n                return function (token) {\n                    if (!token.type || token.type !== prop) {\n                        // @ts-ignore\n                        // eslint-disable-next-line prefer-rest-params\n                        return func.apply(this, arguments);\n                    }\n                    return func.call(this, token.text, token.block);\n                };\n            case 'paragraph':\n                return function (token) {\n                    if (!token.type || token.type !== prop) {\n                        // @ts-ignore\n                        // eslint-disable-next-line prefer-rest-params\n                        return func.apply(this, arguments);\n                    }\n                    return func.call(this, this.parser.parseInline(token.tokens));\n                };\n            case 'escape':\n                return function (token) {\n                    if (!token.type || token.type !== prop) {\n                        // @ts-ignore\n                        // eslint-disable-next-line prefer-rest-params\n                        return func.apply(this, arguments);\n                    }\n                    return func.call(this, token.text);\n                };\n            case 'link':\n                return function (token) {\n                    if (!token.type || token.type !== prop) {\n                        // @ts-ignore\n                        // eslint-disable-next-line prefer-rest-params\n                        return func.apply(this, arguments);\n                    }\n                    return func.call(this, token.href, token.title, this.parser.parseInline(token.tokens));\n                };\n            case 'image':\n                return function (token) {\n                    if (!token.type || token.type !== prop) {\n                        // @ts-ignore\n                        // eslint-disable-next-line prefer-rest-params\n                        return func.apply(this, arguments);\n                    }\n                    return func.call(this, token.href, token.title, token.text);\n                };\n            case 'strong':\n                return function (token) {\n                    if (!token.type || token.type !== prop) {\n                        // @ts-ignore\n                        // eslint-disable-next-line prefer-rest-params\n                        return func.apply(this, arguments);\n                    }\n                    return func.call(this, this.parser.parseInline(token.tokens));\n                };\n            case 'em':\n                return function (token) {\n                    if (!token.type || token.type !== prop) {\n                        // @ts-ignore\n                        // eslint-disable-next-line prefer-rest-params\n                        return func.apply(this, arguments);\n                    }\n                    return func.call(this, this.parser.parseInline(token.tokens));\n                };\n            case 'codespan':\n                return function (token) {\n                    if (!token.type || token.type !== prop) {\n                        // @ts-ignore\n                        // eslint-disable-next-line prefer-rest-params\n                        return func.apply(this, arguments);\n                    }\n                    return func.call(this, token.text);\n                };\n            case 'del':\n                return function (token) {\n                    if (!token.type || token.type !== prop) {\n                        // @ts-ignore\n                        // eslint-disable-next-line prefer-rest-params\n                        return func.apply(this, arguments);\n                    }\n                    return func.call(this, this.parser.parseInline(token.tokens));\n                };\n            case 'text':\n                return function (token) {\n                    if (!token.type || token.type !== prop) {\n                        // @ts-ignore\n                        // eslint-disable-next-line prefer-rest-params\n                        return func.apply(this, arguments);\n                    }\n                    return func.call(this, token.text);\n                };\n            default:\n            // do nothing\n        }\n        return func;\n    }\n    setOptions(opt) {\n        this.defaults = { ...this.defaults, ...opt };\n        return this;\n    }\n    lexer(src, options) {\n        return _Lexer.lex(src, options ?? this.defaults);\n    }\n    parser(tokens, options) {\n        return _Parser.parse(tokens, options ?? this.defaults);\n    }\n    #parseMarkdown(lexer, parser) {\n        return (src, options) => {\n            const origOpt = { ...options };\n            const opt = { ...this.defaults, ...origOpt };\n            // Show warning if an extension set async to true but the parse was called with async: false\n            if (this.defaults.async === true && origOpt.async === false) {\n                if (!opt.silent) {\n                    console.warn('marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored.');\n                }\n                opt.async = true;\n            }\n            const throwError = this.#onError(!!opt.silent, !!opt.async);\n            // throw error in case of non string input\n            if (typeof src === 'undefined' || src === null) {\n                return throwError(new Error('marked(): input parameter is undefined or null'));\n            }\n            if (typeof src !== 'string') {\n                return throwError(new Error('marked(): input parameter is of type '\n                    + Object.prototype.toString.call(src) + ', string expected'));\n            }\n            if (opt.hooks) {\n                opt.hooks.options = opt;\n            }\n            if (opt.async) {\n                return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src)\n                    .then(src => lexer(src, opt))\n                    .then(tokens => opt.hooks ? opt.hooks.processAllTokens(tokens) : tokens)\n                    .then(tokens => opt.walkTokens ? Promise.all(this.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens)\n                    .then(tokens => parser(tokens, opt))\n                    .then(html => opt.hooks ? opt.hooks.postprocess(html) : html)\n                    .catch(throwError);\n            }\n            try {\n                if (opt.hooks) {\n                    src = opt.hooks.preprocess(src);\n                }\n                let tokens = lexer(src, opt);\n                if (opt.hooks) {\n                    tokens = opt.hooks.processAllTokens(tokens);\n                }\n                if (opt.walkTokens) {\n                    this.walkTokens(tokens, opt.walkTokens);\n                }\n                let html = parser(tokens, opt);\n                if (opt.hooks) {\n                    html = opt.hooks.postprocess(html);\n                }\n                return html;\n            }\n            catch (e) {\n                return throwError(e);\n            }\n        };\n    }\n    #onError(silent, async) {\n        return (e) => {\n            e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n            if (silent) {\n                const msg = '<p>An error occurred:</p><pre>'\n                    + escape(e.message + '', true)\n                    + '</pre>';\n                if (async) {\n                    return Promise.resolve(msg);\n                }\n                return msg;\n            }\n            if (async) {\n                return Promise.reject(e);\n            }\n            throw e;\n        };\n    }\n}\n","import { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { Marked } from './Instance.ts';\nimport { _getDefaults, changeDefaults, _defaults } from './defaults.ts';\nconst markedInstance = new Marked();\nexport function marked(src, opt) {\n    return markedInstance.parse(src, opt);\n}\n/**\n * Sets the default options.\n *\n * @param options Hash of options\n */\nmarked.options =\n    marked.setOptions = function (options) {\n        markedInstance.setOptions(options);\n        marked.defaults = markedInstance.defaults;\n        changeDefaults(marked.defaults);\n        return marked;\n    };\n/**\n * Gets the original marked default options.\n */\nmarked.getDefaults = _getDefaults;\nmarked.defaults = _defaults;\n/**\n * Use Extension\n */\nmarked.use = function (...args) {\n    markedInstance.use(...args);\n    marked.defaults = markedInstance.defaults;\n    changeDefaults(marked.defaults);\n    return marked;\n};\n/**\n * Run callback for every token\n */\nmarked.walkTokens = function (tokens, callback) {\n    return markedInstance.walkTokens(tokens, callback);\n};\n/**\n * Compiles markdown to HTML without enclosing `p` tag.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options\n * @return String of compiled HTML\n */\nmarked.parseInline = markedInstance.parseInline;\n/**\n * Expose\n */\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\nexport const options = marked.options;\nexport const setOptions = marked.setOptions;\nexport const use = marked.use;\nexport const walkTokens = marked.walkTokens;\nexport const parseInline = marked.parseInline;\nexport const parse = marked;\nexport const parser = _Parser.parse;\nexport const lexer = _Lexer.lex;\nexport { _defaults as defaults, _getDefaults as getDefaults } from './defaults.ts';\nexport { _Lexer as Lexer } from './Lexer.ts';\nexport { _Parser as Parser } from './Parser.ts';\nexport { _Tokenizer as Tokenizer } from './Tokenizer.ts';\nexport { _Renderer as Renderer } from './Renderer.ts';\nexport { _TextRenderer as TextRenderer } from './TextRenderer.ts';\nexport { _Hooks as Hooks } from './Hooks.ts';\nexport { Marked } from './Instance.ts';\n","import React, { useEffect } from 'react';\nimport { Button } from './PDFConverterContainer.styles';\nimport { marked } from 'marked';\nimport pdfMake from 'pdfmake/build/pdfmake';\nimport pdfFonts from 'pdfmake/build/vfs_fonts';\nimport htmlToPdfmake from 'html-to-pdfmake';\nimport ReactMarkdown from 'react-markdown';\n\npdfMake.vfs = pdfFonts.pdfMake.vfs;\n\ninterface PDFConverterContainerProps {\n  card: any;\n}\n\nconst PDFConverterContainer: React.FC<PDFConverterContainerProps> = ({ card }) => {\n\n  const handleDownloadPDF = async () => {\n    const markdownText = card.output.generatedText || 'No output generated';\n    const htmlContent: string = await marked.parse(markdownText);\n\n    // Convert HTML to pdfMake format\n    const pdfMakeContent = htmlToPdfmake(htmlContent);\n\n    // Define the PDF document\n    const docDefinition = {\n      content: pdfMakeContent\n    };\n\n    // Create and download the PDF\n    pdfMake.createPdf(docDefinition).download(card.title);\n  };\n\n  return (\n    <div>\n      <Button onClick={handleDownloadPDF}>Download PDF</Button>\n      <div>\n        <ReactMarkdown>\n          {card.output.generatedText || 'No output generated'}\n        </ReactMarkdown>\n      </div>\n    </div>\n  );\n};\n\nexport default PDFConverterContainer;\n","import styled from 'styled-components';\n\nexport const Button = styled.button`\n  padding: 10px 20px;\n  background-color: orange;\n  border: 2px solid black;\n  border-radius: 5px;\n  cursor: pointer;\n  font-size: 16px;\n  color: #000;\n\n  &:hover {\n    background-color: #e08e0b;\n  }\n`;\n","import React from 'react';\nimport { Button } from './XMLConverterContainer.styles';\n\ninterface XMLConverterContainerProps {\n  card: any;\n}\n\nconst XMLConverterContainer: React.FC<XMLConverterContainerProps> = ({ card }) => {\n  const extractXMLContent = (markdown: string): string => {\n    const xmlMatch = markdown.match(/```xml\\n([\\s\\S]*?)\\n```/);\n    return xmlMatch ? xmlMatch[1] : '';\n  };\n\n  const handleDownloadXML = () => {\n    const markdownText = card.output?.generatedText || 'No output generated';\n    const xmlContent = extractXMLContent(markdownText);\n\n    if (!xmlContent) {\n      alert('No XML content found in the generated text.');\n      return;\n    }\n\n    const blob = new Blob([xmlContent], { type: 'application/xml' });\n    const url = URL.createObjectURL(blob);\n    const a = document.createElement('a');\n    a.href = url;\n    a.download = `${card.title}.xml`;\n    a.click();\n    URL.revokeObjectURL(url);\n  };\n\n  const xmlContent = extractXMLContent(card.output?.generatedText || 'No output generated');\n\n  return (\n    <div>\n      <Button onClick={handleDownloadXML}>Download XML</Button>\n      <div>\n        <pre>{xmlContent || 'No XML content found'}</pre>\n      </div>\n    </div>\n  );\n};\n\nexport default XMLConverterContainer;\n","import React from 'react';\nimport {\n  ModalOverlay,\n  ModalContainer,\n  ModalHeader,\n  ModalTitle,\n  CloseButton,\n  ModalContent,\n} from './DetailModal.styles';\nimport OutputDetailContainer from '../OutputDetailContainer/OutputDetailContainer';\nimport GuitarTabsConverterContainer from '../GuitarTabsConverterPluginContainer/GuitarTabsConverterPluginContainer'; // Import plugin containers\nimport ABCConverterContainer from '../ABCConverterPluginContainer/ABCConverterPluginContainer';\nimport PDFConverterContainer from '../PDFConverterContainer/PDFConverterContainer';\nimport XMLConverterContainer from '../XMLConverterContainer/XMLConverterContainer';\n\ninterface DetailModalProps {\n  title: string;\n  onRequestClose: () => void;\n  content: string;\n  card: any;\n}\n\nconst DetailModal: React.FC<DetailModalProps> = ({ title, onRequestClose, content, card }) => {\n  const renderModalContent = () => {\n    switch (content) {\n      case 'guitar-tabs-converter':\n        return <GuitarTabsConverterContainer card={card} />;\n      case 'output-detail':\n        return <OutputDetailContainer card={card} />\n        case 'abc-converter':\n        return <ABCConverterContainer card={card} />;\n        case 'pdf-converter':\n        return <PDFConverterContainer card={card} />;\n        case 'xml-converter':\n        return <XMLConverterContainer card={card} />;\n      default:\n        return <p>{content} plugin is not yet implemented.</p>;\n    }\n  };\n\n  return (\n    <ModalOverlay>\n      <ModalContainer>\n        <ModalHeader>\n          <ModalTitle>{title}</ModalTitle>\n          <CloseButton onClick={onRequestClose}>×</CloseButton>\n        </ModalHeader>\n        <ModalContent>\n          {renderModalContent()}\n        </ModalContent>\n      </ModalContainer>\n    </ModalOverlay>\n  );\n};\n\nexport default DetailModal;\n","import React, { useEffect, useState, useCallback } from 'react';\nimport { useParams } from 'react-router-dom';\nimport { fetchTaskById, executeCard, deleteCard, removeNextCard } from '../../services/api';\nimport Flow from '../../components/Flow/Flow';\nimport AddCardPopover from '../../components/AddCardPopover/AddCardPopover';\nimport Navbar from '../../components/Navbar/Navbar';\nimport { Node, Edge } from 'react-flow-renderer';\nimport { TaskInfoContainer, TaskInfoBox, TaskInfo, ButtonsBox, RoundButton, ContentContainer, PageContainer } from './TaskDetailPage.styles';\nimport DraggablePopover from '../../components/DraggablePopover/DraggablePopover';\nimport { ReactComponent as AddIcon } from '../../assets/add.svg';\nimport InstructionsPopup from '../../components/InstructionsPopup/InstructionsPopup';\nimport DetailModal from '../../components/DetailModal/DetailModal';\n\nconst TaskDetailPage: React.FC = () => {\n  const { id } = useParams<{ id: string }>();\n  const [task, setTask] = useState<any>(null);\n  const [loading, setLoading] = useState(true);\n  const [error, setError] = useState('');\n  const [isPopoverOpen, setIsPopoverOpen] = useState(false);\n  const [openPopovers, setOpenPopovers] = useState<string[]>([]);\n  const [nodes, setNodes] = useState<Node[]>([]);\n  const [edges, setEdges] = useState<Edge[]>([]);\n  const [modalOutput, setModalOutput] = useState<{ content: string; card: any } | null>(null);\n  const [showInstructions, setShowInstructions] = useState(false);\n\n  const handleDeleteEdge = async (edgeId: string) => {\n    try {\n      const edge = edges.find((e) => e.id === edgeId);\n      if (edge) {\n        const { source, target } = edge;\n        await removeNextCard(source, target);\n        setEdges((eds) => eds.filter((e) => e.id !== edgeId));\n      }\n    } catch (error) {\n      console.error('Error deleting edge:', error);\n    }\n  };\n\n  const edgeOptions = {\n    type: 'card',\n    data: { onRemove: handleDeleteEdge },\n  };\n\n  const fetchTaskData = async () => {\n    if (id) {\n      try {\n        const data = await fetchTaskById(id);\n        setTask(data);\n\n        const newNodes = data.cards.map((card: any, index: number) => ({\n          id: card._id,\n          data: {\n            id: card._id,\n            title: card.title,\n            executed: card.executed,\n            inconsistent: card.inconsistent,\n            onExecute: handleExecute,\n            onDelete: handleDelete,\n            onCardUpdate: handleCardUpdate,\n            taskId: data._id,\n          },\n          position: { x: 200 * index, y: 100 },\n          type: 'cardNode',\n          draggable: true,\n        }));\n        setNodes(newNodes);\n\n        const newEdges: Edge[] = [];\n        data.cards.forEach((card: any) => {\n          card.nextCards.forEach((nextCardId: string) => {\n            newEdges.push({\n              id: `e${card._id}-${nextCardId}`,\n              source: card._id,\n              target: nextCardId,\n              ...edgeOptions,\n            });\n          });\n          card.previousCards.forEach((prevCardId: string) => {\n            newEdges.push({\n              id: `e${prevCardId}-${card._id}`,\n              source: prevCardId,\n              target: card._id,\n              ...edgeOptions,\n            });\n          });\n        });\n        setEdges(newEdges);\n\n        if (data.cards.length === 0) {\n          setShowInstructions(true);\n        }\n      } catch (err) {\n        setError('Failed to fetch task. Please try again later.');\n      } finally {\n        setLoading(false);\n      }\n    } else {\n      setLoading(false);\n      setError('Task ID is missing.');\n    }\n  };\n\n  useEffect(() => {\n    fetchTaskData();\n  }, [id]);\n\n  const handleCardCreated = () => {\n    setIsPopoverOpen(false);\n    fetchTaskData();\n  };\n\n  const handleNodeClick = useCallback((event: React.MouseEvent, node: Node) => {\n    if (!openPopovers.includes(node.id)) {\n      setOpenPopovers((prev) => [...prev, node.id]);\n    }\n  }, [openPopovers]);\n\n  const handleClosePopover = (cardId: string) => {\n    setOpenPopovers((prev) => prev.filter((id) => id !== cardId));\n  };\n\n  const handleExecute = async (cardId: string) => {\n    try {\n      const updatedCard = await executeCard(cardId);\n      setNodes((nds) =>\n        nds.map((node) => {\n          if (node.id === updatedCard._id) {\n            node.data = {\n              ...node.data,\n              executed: updatedCard.executed,\n              inconsistent: updatedCard.inconsistent,\n            };\n          }\n          return node;\n        })\n      );\n      fetchTaskData();\n    } catch (error) {\n      console.error('Error executing card:', error);\n    }\n  };\n\n  const handleCardUpdate = (updatedCard: any) => {\n    setNodes((nds) =>\n      nds.map((node) => {\n        if (node.id === updatedCard._id) {\n          node.data = {\n            ...node.data,\n            title: updatedCard.title,\n            objective: updatedCard.objective,\n            prompt: updatedCard.prompt,\n            context: updatedCard.context,\n            executed: updatedCard.executed,\n            inconsistent: updatedCard.inconsistent,\n          };\n        }\n        return node;\n      })\n    );\n  };\n\n  const handleDelete = async (cardId: string) => {\n    try {\n      await deleteCard(cardId, task._id);\n      setNodes((nds) => nds.filter((node) => node.id !== cardId));\n      setEdges((eds) => eds.filter((edge) => edge.source !== cardId && edge.target !== cardId));\n      if (nodes.length === 1) {\n        setShowInstructions(true);\n      }\n    } catch (error) {\n      console.error('Error deleting card:', error);\n    }\n  };\n\n  const handleOpenModal = (content: string, card: any) => {\n    setModalOutput({ content, card });\n  };\n\n  const handleCloseModal = () => {\n    setModalOutput(null);\n  };\n\n  if (loading) return <p>Loading...</p>;\n  if (error) return <p>{error}</p>;\n\n  function closeInstructions(): void {\n    setShowInstructions(false);\n  }\n\n  return (\n    <PageContainer>\n      <Navbar />\n      <TaskInfoContainer>\n        <TaskInfoBox>\n          <TaskInfo>\n            <h1>{task.name}</h1>\n            <p>{task.objective}</p>\n          </TaskInfo>\n        </TaskInfoBox>\n        <ButtonsBox>\n          <RoundButton onClick={() => setIsPopoverOpen(true)}>\n            <AddIcon className=\"icon\" />\n          </RoundButton>\n        </ButtonsBox>\n      </TaskInfoContainer>\n      <ContentContainer>\n        <Flow initialNodes={nodes} initialEdges={edges} onNodeClick={handleNodeClick} onExecute={handleExecute} />\n      </ContentContainer>\n      <AddCardPopover isOpen={isPopoverOpen} onRequestClose={() => setIsPopoverOpen(false)} taskId={task._id} currentCards={task.cards} onCardCreated={handleCardCreated} />\n      {openPopovers.map((cardId, index) => (\n        <DraggablePopover\n          key={cardId}\n          cardId={cardId}\n          onRequestClose={() => handleClosePopover(cardId)}\n          index={index}\n          onExecute={handleExecute}\n          onCardUpdate={handleCardUpdate}\n          onOpenModal={handleOpenModal}\n        />\n      ))}\n      {modalOutput && (\n        <DetailModal\n          title={modalOutput.content}\n          onRequestClose={handleCloseModal}\n          content={modalOutput.content}\n          card={modalOutput.card}\n        />\n      )}\n      {showInstructions && <InstructionsPopup onClose={closeInstructions} />}\n    </PageContainer>\n  );\n};\n\nexport default TaskDetailPage;\n","import styled from 'styled-components';\n\nexport const TaskContainerWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  width: 100%;\n`;\n\nexport const TaskItem = styled.div`\n  background: #fff;\n  border-radius: 10px;\n  padding: 16px;\n  margin: 8px 0;\n  width: 100%;\n  cursor: pointer;\n  transition: transform 0.3s ease, box-shadow 0.3s ease;\n  border: 2px solid #333;\n  position: relative; /* Ensure the delete button is positioned correctly */\n\n  &:hover {\n    transform: translateY(-5px);\n    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);\n  }\n\n  h2 {\n    margin: 0;\n    font-size: 1.5rem;\n    color: #333;\n  }\n\n  p {\n    margin: 0.5rem 0;\n    font-size: 1rem;\n    color: #666;\n  }\n`;\n\nexport const DeleteButton = styled.button`\n  position: absolute;\n  top: 50%;\n  right: 16px;\n  transform: translateY(-50%); /* Center vertically */\n  background: none;\n  border: none;\n  cursor: pointer;\n  padding: 0;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 40px;  /* Increase button size */\n  height: 40px; /* Increase button size */\n\n  svg {\n    fill: #ff0000;\n    width: 30px; /* Adjust icon size */\n    height: 30px; /* Adjust icon size */\n  }\n\n  &:hover svg {\n    fill: #cc0000;\n  }\n`;\n","// src/containers/TaskContainer/TaskContainer.tsx\n\nimport React, { useEffect, useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { fetchTasks, deleteTask } from '../../services/api';\nimport { TaskContainerWrapper, TaskItem, DeleteButton } from './TaskContainer.styles';\nimport { ReactComponent as DeleteIcon } from '../../assets/delete.svg'; // Import the delete icon\n\ninterface Task {\n  _id: string;\n  name: string;\n  objective: string;\n  cards: any[];\n}\n\ninterface TaskContainerProps {\n  refresh: boolean;\n}\n\nconst TaskContainer: React.FC<TaskContainerProps> = ({ refresh }) => {\n  const [tasks, setTasks] = useState<Task[]>([]);\n  const [loading, setLoading] = useState(true);\n  const [error, setError] = useState('');\n  const navigate = useNavigate();\n\n  useEffect(() => {\n    const getTasks = async () => {\n      try {\n        const data = await fetchTasks();\n        setTasks(data);\n      } catch (err) {\n        setError('Failed to fetch tasks. Please try again later.');\n      } finally {\n        setLoading(false);\n      }\n    };\n\n    getTasks();\n  }, [refresh]); // Refetch tasks when `refresh` prop changes\n\n  const handleDelete = async (id: string) => {\n    const confirmed = window.confirm('Are you sure you want to delete this task?');\n    if (!confirmed) return;\n\n    try {\n      await deleteTask(id);\n      setTasks(tasks.filter(task => task._id !== id));\n    } catch (err) {\n      setError('Failed to delete task. Please try again later.');\n    }\n  };\n\n  if (loading) return <p>Loading...</p>;\n  if (error) return <p>{error}</p>;\n\n  return (\n    <TaskContainerWrapper>\n      {tasks.map((task) => (\n        <TaskItem key={task._id} onClick={() => navigate(`/task/${task._id}`)}>\n          <h2>{task.name}</h2>\n          <p>{task.objective}</p>\n          <p>Number of Cards: {task.cards.length}</p>\n          <DeleteButton onClick={(e) => { e.stopPropagation(); handleDelete(task._id); }}>\n            <DeleteIcon />\n          </DeleteButton>\n        </TaskItem>\n      ))}\n    </TaskContainerWrapper>\n  );\n};\n\nexport default TaskContainer;\n","// src/pages/TasksPage/TasksPage.styles.ts\nimport styled from 'styled-components';\n\nexport const TasksPageContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  background-color: #fff;\n  min-height: 100vh;\n  padding-top: 77px; /* Adjust padding to account for navbar height */\n  box-sizing: border-box;\n  position: relative;\n`;\n\nexport const Title = styled.h1`\n  font-size: 2rem;\n  color: #333;\n  margin: 0;\n  position: fixed;\n  top: 77px; /* Adjust to be just below the navbar */\n  left: 50%;\n  transform: translateX(-50%);\n  background-color: #fff;\n  z-index: 900;\n  padding: 10px 0;\n  width: 100%;\n  text-align: center;\n  box-sizing: border-box;\n`;\n\nexport const TaskList = styled.div`\n  width: 100%;\n  max-width: 800px;\n  flex: 1;\n  background-color: #fff;\n  padding: 20px;\n  overflow-y: scroll;\n  box-sizing: border-box;\n  border-radius: 8px;\n  margin-top: 60px; /* Adjust to provide space for title */\n  margin-bottom: 20px; /* Ensure enough space for footer and button */\n  max-height: calc(100vh - 140px); /* Adjust this value to keep space for footer */\n\n  /* Hide scrollbar for Webkit browsers */\n  &::-webkit-scrollbar {\n    display: none;\n  }\n\n  /* Hide scrollbar for other browsers */\n  -ms-overflow-style: none;  /* IE and Edge */\n  scrollbar-width: none;  /* Firefox */\n`;\n\nexport const TaskItem = styled.div`\n  background: #fff;\n  border-radius: 10px;\n  padding: 16px;\n  margin: 12px 0;  /* Adjust this value to change spacing between items */\n  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n  width: 100%;\n  cursor: pointer;\n  transition: transform 0.3s ease, box-shadow 0.3s ease;\n  border: 2px solid #333;\n\n  &:hover {\n    transform: translateY(-5px);\n    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);\n  }\n\n  h2 {\n    margin: 0;\n    font-size: 1.5rem;\n    color: #333;\n  }\n\n  p {\n    margin: 0.5rem 0;\n    font-size: 1rem;\n    color: #666;\n  }\n\n  .highlight {\n    color: orange;\n  }\n`;\n\nexport const ButtonsBox = styled.div`\n  position: absolute;\n  top: 75px;\n  right: 0px;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  background-color: #333;\n  border-bottom: 2px solid black;\n  border-left: 2px solid black;\n  border-bottom-left-radius: 20px;\n  padding: 10px;\n  width: auto; /* Adjust width as needed */\n  box-shadow: inset 0 -3px 0 0 orange, inset 3px 0 0 0 orange, 0 2px 10px rgba(0, 0, 0, 0.1);\n  box-sizing: border-box;\n  z-index: 1000; /* Ensure it is above other elements */\n`;\n\nexport const RoundButton = styled.button`\n  background-color: orange;\n  border: 2px solid black;\n  border-radius: 50%;\n  width: 60px;\n  height: 60px;\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 18px;\n  color: black;\n  margin-bottom: 10px; /* Add space between the buttons */\n\n  &:hover {\n    background-color: #e08e0b;\n  }\n\n  .icon {\n    fill: black; /* Ensure the SVG icon is black */\n    width: 24px; /* Adjust size as needed */\n    height: 24px; /* Adjust size as needed */\n  }\n`;\n\nexport const ToggleButton = styled.button`\n  background-color: orange;\n  border: 2px solid black;\n  border-radius: 50%;\n  width: 60px;\n  height: 60px;\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 18px;\n  color: black;\n\n  &:disabled {\n    background-color: #ccc;\n    cursor: not-allowed;\n  }\n\n  &:hover:enabled {\n    background-color: #e08e0b;\n  }\n\n  .icon {\n    fill: black; /* Ensure the SVG icon is black */\n    width: 24px; /* Adjust size as needed */\n    height: 24px; /* Adjust size as needed */\n  }\n`;\n\nexport const Section = styled.div`\n  background: #fff;\n  border-radius: 10px;\n  padding: 16px;\n  margin: 12px 0;\n  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n  width: 100%;\n  box-sizing: border-box;\n`;\n\nexport const SectionTitle = styled.h2`\n  margin: 0 0 10px 0;\n  font-size: 1.5rem;\n  color: #333;\n`;\n\nexport const SectionContent = styled.div`\n  font-size: 1rem;\n  color: #666;\n`;\n\nexport const Footer = styled.div`\n  width: 100%;\n  position: fixed;\n  bottom: 20px;\n  display: flex;\n  justify-content: center;\n  z-index: 900;\n`;\n\nexport const ButtonContainer = styled.div`\n  width: 100%;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 0 20px;\n`;\n","import styled from 'styled-components';\n\nexport const FormContainer = styled.div`\n  position: absolute;\n  width: 30%;\n  padding: 60px 20px 20px 20px;\n  background: #fff;\n  box-sizing: border-box;\n  overflow-y: auto;\n  z-index: 1001;\n  border: 2px solid #333;\n  border-radius: 10px;\n  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n\n  &::-webkit-scrollbar {\n    display: none;\n  }\n\n  -ms-overflow-style: none;\n  scrollbar-width: none;\n`;\n\nexport const FormLabel = styled.label`\n  display: block;\n  margin: 10px 0 5px;\n`;\n\nexport const FormInput = styled.input`\n  width: 100%;\n  padding: 8px;\n  margin-bottom: 10px;\n  box-sizing: border-box;\n`;\n\nexport const FormButton = styled.button`\n  padding: 10px 20px;\n  background-color: orange;\n  border: 2px solid black;\n  border-radius: 5px;\n  cursor: pointer;\n  font-size: 16px;\n  color: #000;\n  margin: 0 auto;\n  display: block;\n\n  &:hover {\n    background-color: #e08e0b;\n  }\n`;\n\nexport const CloseButton = styled.button`\n  position: absolute;\n  top: 10px;\n  right: 10px;\n  background: transparent;\n  border: none;\n  font-size: 24px;\n  cursor: pointer;\n\n  &:hover {\n    color: #ff0000;\n  }\n`;\n\nexport const CheckboxLabel = styled.label`\n  display: flex;\n  align-items: center;\n  margin: 10px 0;\n  cursor: pointer;\n  font-size: 16px;\n\n  input[type=\"checkbox\"] {\n    appearance: none;\n    width: 24px;\n    height: 24px;\n    background-color: #fff;\n    border: 2px solid #333;\n    border-radius: 4px;\n    margin-right: 10px;\n    position: relative;\n    cursor: pointer;\n    outline: none;\n    transition: background-color 0.2s, border-color 0.2s;\n\n    &:checked {\n      background-color: orange;\n      border-color: #000;\n    }\n  }\n`;\n\nexport const FormSelect = styled.select`\n  width: 100%;\n  padding: 8px;\n  margin-bottom: 10px;\n  box-sizing: border-box;\n  height: auto;\n`;\n\nexport const TitleBand = styled.div`\n  background-color: orange;\n  width: 100%;\n  height: 40px;\n  padding: 8px 0;\n  border-bottom: 2px solid black;\n  border-color: black;\n  position: absolute;\n  top: 0;\n  left: 0;\n  border-top-left-radius: 8px;\n  border-top-right-radius: 8px;\n  text-align: center;\n  font-weight: bold;\n  line-height: 40px;\n  cursor: grab;\n`;\n\nexport const LoadingModal = styled.div`\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: rgba(255, 255, 255, 0.8);\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  z-index: 1002;\n`;\n\nexport const LoadingText = styled.p`\n  font-size: 18px;\n  color: #000;\n  font-weight: bold;\n`;\n","import React, { useState } from 'react';\nimport Draggable from 'react-draggable';\nimport { createTask } from '../../services/api';\nimport { GENERATIVE_MODELS } from '../../config/config';\nimport {\n  FormContainer,\n  FormLabel,\n  FormInput,\n  FormButton,\n  CloseButton,\n  TitleBand,\n  CheckboxLabel,\n  FormSelect,\n  LoadingModal,\n  LoadingText,\n} from './AddTaskPopover.styles'; // Reuse styles\n\ninterface AddTaskPopoverProps {\n  isOpen: boolean;\n  onRequestClose: () => void;\n  onTaskCreated: () => void;\n}\n\nconst AddTaskPopover: React.FC<AddTaskPopoverProps> = ({\n  isOpen,\n  onRequestClose,\n  onTaskCreated,\n}) => {\n  const [name, setName] = useState('');\n  const [objective, setObjective] = useState('');\n  const [generate, setGenerate] = useState(false);\n  const [generativeModel, setGenerativeModel] = useState(GENERATIVE_MODELS[0].value);\n  const [isLoading, setIsLoading] = useState(false);\n\n  const handleSubmit = async (event: React.FormEvent) => {\n    event.preventDefault();\n    setIsLoading(true);\n\n    const newTask = {\n      name,\n      objective,\n      generate,\n      generativeModel: generate ? generativeModel : undefined,\n    };\n\n    try {\n      await createTask(newTask);\n      onTaskCreated();\n      onRequestClose();\n    } catch (error) {\n      console.error('Error creating task:', error);\n    } finally {\n      setIsLoading(false);\n    }\n  };\n\n  if (!isOpen) {\n    return null;\n  }\n\n  return (\n    <Draggable handle=\".draggable-handle\" bounds=\"parent\">\n      <FormContainer style={{ top: '10%', left: '10%' }}>\n        <TitleBand className=\"draggable-handle\">Create New Task</TitleBand>\n        <CloseButton onClick={onRequestClose}>×</CloseButton>\n        <form onSubmit={handleSubmit}>\n          <FormLabel>\n            Name:\n            <FormInput type=\"text\" value={name} onChange={(e) => setName(e.target.value)} required />\n          </FormLabel>\n          <FormLabel>\n            Objective:\n            <FormInput type=\"text\" value={objective} onChange={(e) => setObjective(e.target.value)} required />\n          </FormLabel>\n          <CheckboxLabel>\n            <input type=\"checkbox\" checked={generate} onChange={(e) => setGenerate(e.target.checked)} />\n            Generate cards automatically\n          </CheckboxLabel>\n          {generate && (\n            <FormLabel>\n              Generative Model:\n              <FormSelect value={generativeModel} onChange={(e) => setGenerativeModel(e.target.value)}>\n                {GENERATIVE_MODELS.map(model => (\n                  <option key={model.value} value={model.value}>{model.label}</option>\n                ))}\n              </FormSelect>\n            </FormLabel>\n          )}\n          <FormButton type=\"submit\">Create Task</FormButton>\n        </form>\n        {isLoading && (\n          <LoadingModal>\n            <LoadingText>Your task is being generated...</LoadingText>\n          </LoadingModal>\n        )}\n      </FormContainer>\n    </Draggable>\n  );\n};\n\nexport default AddTaskPopover;\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgInfo(_ref, svgRef) {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    height: \"24px\",\n    viewBox: \"0 -960 960 960\",\n    width: \"24px\",\n    fill: \"#5f6368\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M480-680q-33 0-56.5-23.5T400-760q0-33 23.5-56.5T480-840q33 0 56.5 23.5T560-760q0 33-23.5 56.5T480-680Zm-60 560v-480h120v480H420Z\"\n  })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgInfo);\nexport default __webpack_public_path__ + \"static/media/info.fbd3a56cba8dc6948b42534970a6b2ff.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgList(_ref, svgRef) {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    height: \"24px\",\n    viewBox: \"0 -960 960 960\",\n    width: \"24px\",\n    fill: \"#5f6368\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M200-520q-33 0-56.5-23.5T120-600v-160q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v160q0 33-23.5 56.5T760-520H200Zm0-80h560v-160H200v160Zm0 480q-33 0-56.5-23.5T120-200v-160q0-33 23.5-56.5T200-440h560q33 0 56.5 23.5T840-360v160q0 33-23.5 56.5T760-120H200Zm0-80h560v-160H200v160Zm0-400v-160 160Zm0 400v-160 160Z\"\n  })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgList);\nexport default __webpack_public_path__ + \"static/media/list.2b2658aaf85ab62812387eab724c252d.svg\";\nexport { ForwardRef as ReactComponent };","// src/pages/TasksPage/TasksPage.tsx\nimport React, { useState, useEffect } from 'react';\nimport TaskContainer from '../../containers/TaskContainer/TaskContainer';\nimport Navbar from '../../components/Navbar/Navbar';\nimport { TasksPageContainer, TaskList, Title, ButtonsBox, RoundButton, Section, SectionTitle, SectionContent, ToggleButton } from './TasksPage.styles';\nimport AddTaskPopover from '../../components/AddTaskPopover/AddTaskPopover';\nimport { ReactComponent as AddIcon } from '../../assets/add.svg'; // Import the SVG file\nimport { ReactComponent as InfoIcon } from '../../assets/info.svg'; // Import the info SVG file\nimport { ReactComponent as TaskIcon } from '../../assets/list.svg'; // Import the task SVG file\nimport { fetchTasks } from '../../services/api';\n\nconst TasksPage: React.FC = () => {\n  const [isPopoverOpen, setIsPopoverOpen] = useState(false);\n  const [refresh, setRefresh] = useState(false);\n  const [tasks, setTasks] = useState([]);\n  const [showInfo, setShowInfo] = useState(false);\n\n  useEffect(() => {\n    const getTasks = async () => {\n      try {\n        const data = await fetchTasks();\n        setTasks(data);\n      } catch (err) {\n        console.error('Failed to fetch tasks', err);\n      }\n    };\n\n    getTasks();\n  }, [refresh]);\n\n  const handleTaskCreated = () => {\n    setIsPopoverOpen(false);\n    setRefresh((prev) => !prev);\n  };\n\n  const toggleInfoSection = () => {\n    setShowInfo((prev) => !prev);\n  };\n\n  return (\n    <TasksPageContainer>\n      <Navbar />\n      <ButtonsBox>\n        <RoundButton onClick={() => setIsPopoverOpen(true)}>\n          <AddIcon className=\"icon\" /> {/* Use the imported SVG component */}\n        </RoundButton>\n        <ToggleButton onClick={toggleInfoSection} disabled={tasks.length === 0}>\n          {showInfo ? <TaskIcon className=\"icon\" /> : <InfoIcon className=\"icon\" />}\n        </ToggleButton>\n      </ButtonsBox>\n      <AddTaskPopover isOpen={isPopoverOpen} onRequestClose={() => setIsPopoverOpen(false)} onTaskCreated={handleTaskCreated} />\n      <Title>Tasks</Title>\n      {tasks.length === 0 || showInfo ? (\n        <TaskList>\n          {tasks.length === 0 ? (\n          <Section>\n            <SectionTitle>No Tasks Available</SectionTitle>\n            <SectionContent>To get started, click the &quot;+&quot; button on the right to create a new task.</SectionContent>\n          </Section>\n          ) : null}\n          <Section>\n            <SectionTitle>Concept of Cards and Tasks</SectionTitle>\n            <SectionContent>\n              <p>\n                The core concept of this project revolves around &quot;cards.&quot; Cards represent discrete units of generative AI tasks, each containing specific instructions, inputs, and configurations. They are designed to be flexible and modular, enabling users to easily create, modify, and manage AI tasks.\n              </p>\n              <ul>\n                <li><strong>Title:</strong> A descriptive title for the card.</li>\n                <li><strong>Objective:</strong> The main goal or purpose of the card.</li>\n                <li><strong>Prompt:</strong> The input prompt for the generative AI model.</li>\n                <li><strong>Generative Model:</strong> The AI model used to generate the output.</li>\n                <li><strong>Context:</strong> Additional context or information to be used by the AI model, including the outputs from previous cards.</li>\n                <li><strong>Previous Cards:</strong> References to other cards whose outputs are used as context in the current card.</li>\n                <li><strong>Next Cards:</strong> References to other cards that will use the current card&apos;s output as context.</li>\n                <li><strong>Output:</strong> The generated result from the AI model, stored as an execution data document.</li>\n              </ul>\n              <h4>Evaluation Metrics</h4>\n              <ul>\n                <li><strong>Coherence:</strong> Logical and consistent flow of sentences.</li>\n                <li><strong>Relevance:</strong> Pertinence to the given input or query.</li>\n                <li><strong>Fluency:</strong> Grammatical accuracy and appropriate vocabulary.</li>\n                <li><strong>Groundedness:</strong> Alignment with provided source data.</li>\n                <li><strong>Average:</strong> The average score of all evaluation criteria.</li>\n              </ul>\n              <p>These metrics help in assessing the effectiveness and reliability of the generated outputs, ensuring that they meet the desired standards and objectives.</p>\n            </SectionContent>\n          </Section>\n        </TaskList>\n      ) : (\n        <TaskList>\n          <TaskContainer refresh={refresh} />\n        </TaskList>\n      )}\n    </TasksPageContainer>\n  );\n};\n\nexport default TasksPage;\n","// src/App.tsx\nimport React from 'react';\nimport { BrowserRouter as Router, Route, Routes } from 'react-router-dom';\nimport HomePage from './pages/HomePage/HomePage';\nimport TaskDetailPage from './pages/TaskDetailPage/TaskDetailPage';\nimport TasksPage from './pages/TasksPage/TasksPage';\n\nfunction App() {\n  return (\n    <Router>\n      <Routes>\n        <Route path=\"/\" element={<HomePage />} />\n        <Route path=\"/tasks\" element={<TasksPage />} />\n        <Route path=\"/task/:id\" element={<TaskDetailPage />} />\n      </Routes>\n    </Router>\n  );\n}\n\nexport default App;\n","// src/styles/GlobalStyles.styles.ts\nimport { createGlobalStyle } from 'styled-components';\n\nconst GlobalStyles = createGlobalStyle`\n  input[type=\"text\"], textarea, select {\n    width: 100%;\n    padding: 10px;\n    margin: 10px 0;\n    box-sizing: border-box;\n    border: 2px solid #333;\n    border-radius: 5px;\n    font-size: 16px;\n    color: #333;\n\n    &:focus {\n      border-color: orange;\n      outline: none;\n      box-shadow: 0 0 5px orange;\n    }\n  }\n\n  textarea {\n    resize: vertical;\n    min-height: 150px;\n  }\n\n  select {\n    background-color: #fff;\n    appearance: none; /* Remove default arrow for custom styling */\n    cursor: pointer;\n\n    &:hover {\n      border-color: orange;\n    }\n  }\n\n  /* Optional: Adding a custom arrow for the select dropdown */\n  select::after {\n    content: '▼';\n    font-size: 12px;\n    color: #333;\n    position: absolute;\n    top: 50%;\n    right: 10px;\n    transform: translateY(-50%);\n    pointer-events: none;\n  }\n`;\n\nexport default GlobalStyles;\n","import React from 'react';\nimport { STATIC_EXECUTION_CONTEXT } from '../constants';\nimport GlobalStyle from '../models/GlobalStyle';\nimport { useStyleSheetContext } from '../models/StyleSheetManager';\nimport { DefaultTheme, ThemeContext } from '../models/ThemeProvider';\nimport StyleSheet from '../sheet';\nimport { ExecutionContext, ExecutionProps, Interpolation, Stringifier, Styles } from '../types';\nimport { checkDynamicCreation } from '../utils/checkDynamicCreation';\nimport determineTheme from '../utils/determineTheme';\nimport generateComponentId from '../utils/generateComponentId';\nimport css from './css';\n\nexport default function createGlobalStyle<Props extends object>(\n  strings: Styles<Props>,\n  ...interpolations: Array<Interpolation<Props>>\n) {\n  const rules = css<Props>(strings, ...interpolations);\n  const styledComponentId = `sc-global-${generateComponentId(JSON.stringify(rules))}`;\n  const globalStyle = new GlobalStyle<Props>(rules, styledComponentId);\n\n  if (process.env.NODE_ENV !== 'production') {\n    checkDynamicCreation(styledComponentId);\n  }\n\n  const GlobalStyleComponent: React.ComponentType<ExecutionProps & Props> = props => {\n    const ssc = useStyleSheetContext();\n    const theme = React.useContext(ThemeContext);\n    const instanceRef = React.useRef(ssc.styleSheet.allocateGSInstance(styledComponentId));\n\n    const instance = instanceRef.current;\n\n    if (process.env.NODE_ENV !== 'production' && React.Children.count(props.children)) {\n      console.warn(\n        `The global style component ${styledComponentId} was given child JSX. createGlobalStyle does not render children.`\n      );\n    }\n\n    if (\n      process.env.NODE_ENV !== 'production' &&\n      rules.some(rule => typeof rule === 'string' && rule.indexOf('@import') !== -1)\n    ) {\n      console.warn(\n        `Please do not use @import CSS syntax in createGlobalStyle at this time, as the CSSOM APIs we use in production do not handle it well. Instead, we recommend using a library such as react-helmet to inject a typical <link> meta tag to the stylesheet, or simply embedding it manually in your index.html <head> section for a simpler app.`\n      );\n    }\n\n    if (ssc.styleSheet.server) {\n      renderStyles(instance, props, ssc.styleSheet, theme, ssc.stylis);\n    }\n\n    if (!__SERVER__) {\n      React.useLayoutEffect(() => {\n        if (!ssc.styleSheet.server) {\n          renderStyles(instance, props, ssc.styleSheet, theme, ssc.stylis);\n          return () => globalStyle.removeStyles(instance, ssc.styleSheet);\n        }\n      }, [instance, props, ssc.styleSheet, theme, ssc.stylis]);\n    }\n\n    return null;\n  };\n\n  function renderStyles(\n    instance: number,\n    props: ExecutionProps,\n    styleSheet: StyleSheet,\n    theme: DefaultTheme | undefined,\n    stylis: Stringifier\n  ) {\n    if (globalStyle.isStatic) {\n      globalStyle.renderStyles(\n        instance,\n        STATIC_EXECUTION_CONTEXT as unknown as ExecutionContext & Props,\n        styleSheet,\n        stylis\n      );\n    } else {\n      const context = {\n        ...props,\n        theme: determineTheme(props, theme, GlobalStyleComponent.defaultProps),\n      } as ExecutionContext & Props;\n\n      globalStyle.renderStyles(instance, context, styleSheet, stylis);\n    }\n  }\n\n  return React.memo(GlobalStyleComponent);\n}\n","// src/index.tsx\nimport React from 'react';\nimport ReactDOM from 'react-dom/client';\nimport App from './App';\nimport './index.css'; // Import the index.css file\nimport GlobalStyles from './styles/GobalStyles.styles';\n\nconst container = document.getElementById('root');\n\nif (container) {\n  const root = ReactDOM.createRoot(container);\n\n  root.render(\n    <React.StrictMode>\n      <GlobalStyles /> {/* Apply global styles */}\n      <App />\n    </React.StrictMode>\n  );\n} else {\n  console.error('Root container missing in index.html');\n}\n"],"names":["version","require","animation","tuneBook","sequence","strTranspose","abcjs","signature","Object","keys","forEach","key","renderAbc","tuneMetrics","TimingCallbacks","glyphs","setGlyph","setSymbol","CreateSynth","instrumentIndexToName","pitchToNoteName","SynthSequence","CreateSynthControl","registerAudioContext","activeAudioContext","supportsAudio","playEvent","SynthController","getMidiFile","midiRenderer","synth","module","exports","timer","cursor","startAnimation","paper","tune","options","hideMeasures","elements","i","length","element","classList","contains","style","display","lastMeasure","measureCallback","selector","hideCurrentMeasure","querySelectorAll","disappearMeasuresBefore","hideFinishedMeasures","disappearMeasuresAfter","stop","undefined","showCursor","querySelector","document","createElement","className","position","appendChild","qpm","bpm","eventCallback","range","measureStart","line","measureNumber","left","top","width","height","start","pauseAnimation","pause","stopAnimation","StringTablature","pluginTab","name","defaultTuning","isTabBig","tabSymbolOffset","abcTablatures","inited","plugins","register","plugin","tablature","this","setError","msg","warnings","warning","push","preparePlugins","tuneNumber","params","returned","tabs","ii","args","instrument","tabName","visualTranspose","abcSrc","pluginInstance","classz","instance","tabType","layoutTablatures","renderer","abcTune","tablatures","staffLineCount","nTabs","kk","firstStaffOnly","suppress","lines","staff","curStaff","maxStaves","jj","tabPlugin","init","render","target","self","parseInt","tempo","metaText","getBpm","extraMeasuresAtBeginning","beatCallback","lineEndCallback","lineEndAnticipation","beatSubdivisions","joggerTimer","replaceTarget","newTarget","noteTimings","setTiming","lineEndTimings","timings","anticipation","callbackTimes","lastTop","timing","type","milliseconds","bottom","getLineEndTimings","startTime","currentBeat","currentEvent","currentLine","currentTime","isPaused","isRunning","pausedPercent","justUnpaused","newSeekPercent","lastTimestamp","millisecondsPerBeat","lastMoment","totalBeats","Math","round","doTiming","timestamp","thisStartTime","leftEvent","endTimings","requestAnimationFrame","ret","doBeatCallback","ret2","promise","shouldStop","then","Promise","resolve","result","endMs","ev","next","max","debugInfo","offMs","gapMs","gapPx","endX","offPx","animationJogger","performance","now","setTimeout","offsetPercent","units","setProgress","reset","reportNext","clearTimeout","currentMillisecond","percent","oldBeat","floor","Parse","bookParser","tunebook","numberOfTunes","abc","num","split","TuneBook","book","parsed","header","tunes","prototype","getTuneById","id","getTuneByTitle","title","parseOnly","numTunes","output","renderEngine","callback","testObject","propertyIsEnumerable","currentTune","startingTune","abcParser","div","getElementById","parse","startPos","getTune","getWarnings","override","innerHTML","extractMeasures","arr","arr2","lastChord","measureStartChord","fragStart","measures","hasNotes","tuneObj","hasPickup","getPickupLength","j","k","voice","voices","kkk","elem","startChar","chord","el_type","measure","substring","endChar","startEnding","endEnding","EngraverController","wrap","resizeDivs","resizeOuter","window","innerWidth","hasOwnProperty","outer","offsetLeft","addEventListener","e","renderOne","lineOffset","viewportHorizontal","scrollHorizontal","overflowX","overflowY","overflow","children","viewportVertical","engraver_controller","engraveABC","engraver","parentNode","parserParams","engraverParams","renderParams","warnings_id","warning_id","highlight","clickListener","abcString","removeDiv","setAttribute","body","staffwidth","widths","getMeasureWidths","calcLineWraps","reParse","revisedParams","afterParsing","explanation","doLineWrapping","removeChild","sections","relativeMajor","key1sharp","acc","note","key2sharp","key3sharp","key4sharp","key5sharp","key6sharp","key1flat","key2flat","key3flat","key4flat","key5flat","key6flat","newKey","JSON","stringify","modes","stepsFromC","keyReverse","allKeys","keyObj","toLowerCase","mode","createKeyReverse","match","maj","relativeMode","majorKey","group","regMode","thisMode","ind","indexOf","transposeKey","steps","fromC","parseCommon","spacing","flatten","delineTune","copy","dest","src","prop","attrs","skipTies","index","media","metaTextInfo","formatting","staffNum","voiceNum","lineNum","runningFonts","copyTopInfo","copyBottomInfo","getBeatLength","meter","getMeterFraction","multiplier","den","barLength","getBarLength","pickupLength","v","tripletMultiplier","el","isSpacer","rest","startTriplet","duration","endTriplet","computePickupLength","getTotalTime","totalTime","getTotalBeats","millisecondsPerMeasure","bpmOverride","getBeatsPerMeasure","beatLen","getMeter","value","getKeySignature","getElementFromChar","char","addElementToEvents","eventHash","voiceTimeMilliseconds","timeDivider","isTiedState","nextIsBar","hint","realDuration","durationClass","abcelem","es","elemset","isTiedToNext","startTie","startCharArray","endCharArray","min","x","midiPitches","midiGraceNotePitches","w","cloneArray","makeVoicesArray","voicesArr","tempos","staffgroups","staffs","firstStaff","middleC","absoluteY","STEP","lastStaff","isTabStaff","noteFound","tempoLocations","setupEvents","startingDelay","startingBpm","warp","timingEvents","time","maxVoiceTimeMilliseconds","voiceTime","startingRepeatElem","endingRepeatElem","tempoDone","thisMeasure","lastHash","barType","endRepeat","startRepeat","lastVoiceTimeMilliseconds","el2","element2","lastBarTop","lastBarBottom","lastEventTop","lastEventBottom","nextTop","nextBottom","addVerticalInfo","hash","sort","a","b","diff","makeSortedArray","staffGroup","lastEl","addEndPoints","addUsefulCallbackInfo","beatLength","measuresOfDelay","console","log","naturalBpm","beatsPerSecond","setUpAudio","seq","percmap","midi","deline","findSelectableElement","selectables","getSelectableArray","replacer","addMeterToVoices","unshift","addKeyToVoices","addClefToVoices","clef","addFontToVoices","font","objEqual","input","cloneLine","keys2","concat","inputLines","lineBreaks","outputLines","inMusicLine","currentMeter","currentKey","currentClef","currentVocalFont","currentGChordFont","currentTripletFont","currentAnnotationFont","inputLine","vskip","outputLine","s","inputStaff","outputStaff","abbrevTitle","vocalfont","gchordfont","tripletfont","annotationfont","outputVoice","inputVoice","CustomEvent","event","bubbles","cancelable","detail","evt","createEvent","initCustomEvent","Event","EditArea","textareaid","textarea","initialText","isDragging","addSelectionListener","listener","onmousemove","fireSelectionChanged","addChangeListener","changelistener","onkeyup","fireChanged","onmousedown","onmouseup","onchange","getSelection","selectionStart","end","selectionEnd","setSelection","setSelectionRange","createTextRange","collapse","moveEnd","moveStart","select","focus","getString","setString","str","getElem","Editor","editarea","abcjsParams","midi_options","parser_options","render_options","gatherAbcParams","indicate_changed","canvas_id","paper_id","insertBefore","selectionChangeCallback","clientClickListener","bind","cursorControl","generate_midi","generateDownload","midi_download_id","downloadMidi","generateInline","midi_id","inlineMidi","warningsdiv","generate_warnings","onchangeCallback","currentAbc","bReentry","parseABC","modelChanged","addClassName","elementClassName","RegExp","test","hasClassName","removeClassName","strip","replace","setReadOnly","readOnly","readonlyClass","removeAttribute","redrawMidi","midiPause","downloadMidiEl","inlineMidiEl","engravingEl","dispatchEvent","userAction","synthControl","load","setTune","timerId","disable","error","message","join","updateSelection","paramChanged","synthParamChanged","t","selection","rangeHighlight","setDirtyStyle","isDirty","bIsPaused","wasDirty","setNotDirty","classes","analysis","drag","mouseEvent","shouldPause","visualObj","pauseMidi","create","rendererFactory","addNotes","notePlacement","baseDuration","times","h","parseFloat","lastTime","events","distance","addRest","volume","startNote","pitch","cents","endNote","commands","setGlobalInfo","tracks","startTrack","cmd","setText","text","pan","setChannel","setInstrument","channel","gapLengthInBeats","gap","endTrack","getData","source","destination","property","clone","pattern","d","lastIndexOf","parseDirective","ParseHeader","ParseMusic","Tokenizer","Tune","TuneBuilder","tokenizer","tuneBuilder","wordsContinuation","symbolContinuation","addPositioning","positioning","addFont","fonts","music","multilineVars","iChar","accidentals","root","origMeter","hasMainTitle","default_length","verticalPos","octave","next_note_duration","start_new_line","is_in_header","partForNextLine","tempoForNextLine","havent_set_length","staves","macros","currBarNumber","barCounter","ignoredDecorations","score_is_present","inEnding","inTie","inTieChord","vocalPosition","dynamicPosition","chordPosition","ornamentPosition","volumePosition","openSlurs","freegchord","endingHoldOver","differentFont","defaultFonts","decoration","face","size","weight","addFormattingOptions","elType","measurefont","repeatfont","duplicateStartEndingHoldOvers","restoreStartEndingHoldOvers","encode","warn","col_num","bad_char","warningObject","clean_line","addWarning","lineIndex","column","warningObjects","getWarningObjects","addWords","words","word_list","last_divider","addWord","word","syllable","translateString","divider","escNext","last","skip","to","pitches","shift","lyric","addSymbols","parseLine","startsWith","err","addDirective","getCurrentVoice","lineContinuation","parseMusic","parseHeader","regular","newline","startNewLine","symbols","appendLastMeasure","nextVoice","addHintMeasure","nextStaff","stave","nextStave","strTune","switches","i2","substr","all","backslash","comment","Array","pop","print","globalTranspose","setVisualTranspose","format","globalFormatting","nextLine","header_only","stop_on_warning","wasInHeader","setRunningFont","cleanUp","barsperstaff","staffnonote","ph","pl","papersize","landscape","pagewidth","pageheight","hint_measures","addHintMeasures","wrapLines","barNumbers","directives","initialWhiteSpace","tuneStrings","pos","pure","initialize","tokenizer_","warn_","multilineVars_","tune_","tuneBuilder_","historyfont","infofont","partsfont","textfont","wordsfont","composerfont","subtitlefont","tempofont","titlefont","footerfont","headerfont","voicefont","tablabelfont","tabnumberfont","tabgracefont","fontTypeCanHaveBox","getFontParameter","tokens","currentSetting","processNumberOnly","token","box","state","hyphenLast","currToken","psFont","fontFace","fontTranslation","getChangingFont","setScale","scratch","tok","isNaN","scale","drumNames","addMultilineVar","intt","addMultilineVarBool","addMultilineVarOneParamChoice","choices","choice","found","midiCmdParam0","midiCmdParam1String","midiCmdParam1Integer","midiCmdParam1Integer1OptionalInteger","midiCmdParam2Integer","midiCmdParam4Integer","midiCmdParam5Integer","midiCmdParam1String1Integer","midiCmdParamFraction","midiCmdParam1StringVariableIntegers","parseFontChangeLine","textstr","textParts","setfont","textarr","whichFont","positionChoices","parseStretchLast","floatt","tokenize","restOfString","stripComment","bagpipes","flatbeams","jazzchords","accentAbove","germanAlphabet","graceSlurs","lt","lineThickness","sl","stretchlast","titlecaps","titleleft","measurebox","points","getMeasurement","used","oneParameterMeasurement","voiceScale","currentVoice","changeVoiceScale","voiceColor","color","changeVoiceColor","getRequiredMeasurement","addSpacing","addSeparator","spaceAbove","spaceBelow","lenLine","partsBox","setBarNumberImmediate","textBlock","addText","continueall","centerstr","addCentered","sfTokens","sfNum","getGlobalFont","lastVoice","addVoice","newStaff","bracket","brace","continueBar","numVoices","connectBarLines","openParen","openBracket","openBrace","justOpenParen","justOpenBracket","justOpenBrace","addContinueBar","ty","vc","continueId","pgNum","getInt","addNewPage","digits","subCmd","addMetaText","footerStr","getMeat","footerArr","footer","center","right","addMetaTextObj","midi_cmd","midi_params","drummap","p","hasBeginMusic","appendElement","parseMidiCommand","sound","noteHead","interpretPercMap","formatHash","fontboxpadding","stafftopmargin","parseKeyVoice","setTitle","origSize","addSubtitle","setMeter","parseFraction","parseNum","totalLength","mv","calcTempo","relTempo","dur","resolveTempo","addUserDefinition","equals","before","after","setDefaultLength","len_arr","n","tempoString","larghissimo","adagissimo","sostenuto","grave","largo","lento","larghetto","adagio","adagietto","andante","andantino","moderato","allegretto","allegro","animato","agitato","veloce","vivace","vivacissimo","allegrissimo","presto","prestissimo","setTempo","delaySet","preString","suppressBpm","postString","printTempo","letter_to_inline_header","startLine","ws","eatWhiteSpace","appendStartingElement","parseKey","foundClef","foundKey","fixKey","part","parseVoice","letter_to_body_header","metaTextHeaders","A","B","C","D","F","G","I","N","O","R","S","W","Z","field","restOfLine","addMetaTextArray","peekLine","toUpperCase","theReverser","transpose","standardKey","keyName","localTranspose","keySignature","clefLines","mid","calcMiddle","oct","fixClef","clefPos","deepCopyKey","E","c","f","g","addPosToKey","impliedNaturals","fixedKey","parseMiddle","isInline","retPitch","getKeyPitch","len","retAcc","getSharpFlat","retMode","getMode","savedOrigKey","oldKey","keyCompensate","globalTransposeOrigKeySig","accs","getKeyAccidentals2","normalizeAccidentals","explicitAccidentals","splice","getPitchFromTokens","stafflines","staffscale","getToken","isNew","staffInfo","startStaff","addNextTokenToStaffInfo","attr","getVoiceToken","addNextTokenToVoiceInfo","getNextToken","addNextNoteTokenToVoiceInfo","stem","suppressChords","cue","vi","spacing_below_offset","subname","setCurrentVoice","legalAccents","volumeDecorations","dynamicDecorations","accentPseudonyms","accentDynamicPseudonyms","nonDecorations","durations","rests","accMap","tripletQ","MusicParser","_tokenizer","_warn","_multilineVars","_tune","_tuneBuilder","_header","isInTie","overlayLevel","voiceIndex","startOfLine","isWhiteSpace","delayStartNewLine","tripletNotesLeft","retHeader","startI","retInlineHeader","letter_to_spacer","letter_to_chord","chordName","addedChord","ci","rel_position","skipWhiteSpace","force_end_beam_last","letter_to_accent","beambr","letter_to_grace","gracenotes","letter_to_bar","measureNotEmpty","bar","barFirstEndingNum","barNumber","letter_to_overlay","letter_to_open_slurs_and_triplets","consumed","startSlur","dottedSlur","triplet","tripletR","num_notes","chordDuration","rememberEndBeam","done","accent","chordNote","getCoreNote","end_beam","endTie","setIsInTie","postChordDone","addEndBeam","endSlur","br2","getBrokenRhythm","fraction","getFraction","ch","core","accidental","midipitch","graceNotes","durationOfMeasure","getBrackettedSubstring","getFloat","y","gra","acciaccatura","endBeam","macro","includes","findIndex","curr_pos","getBarLine","orig_bar_len","ending","retRep","getTokenOf","scoreTranspose","targetKey","st","isFirstVoice","canHaveBrokenRhythm","dottedTie","isComplete","durationSetByPreviousNote","grace_notes","getNumber","addTieToLastNote","X","z","dblflat","flat","natural","sharp","dblsharp","quarterflat","quartersharp","finished","skipAlpha","firstThree","getClef","bExplicitOnly","strOrig","needsClef","strClef","isMatch","explicit","colons","legalChars","getKeyAccidental","accTranslation","isLetter","isNumber","alphaUntilWhiteSpace","float2","close","charMap","charMap1","charMap2","getTitleNumber","exec","out","iSave","thePatterns","thisPattern","theTitleNumber","trim","substInChord","maxErrorChars","_matchChar","matchChar","esc","allNotes","transposeChordName","keyAccidentals","keyIndex","newKeyMinor","localTransposeVerticalMovement","localTransposePreferFlats","baseKey","thisKeyIndex","recognized","newKeyName","transposedKey","newKeySig","charCodeAt","ceil","pitchToLetter","accidentals2","accidentals3","origPitch","actual","pitchIndex","noteName","newPitch","origKeySig","origPitchLetter","origAccidental","delta","newPitchLetter","newAccidental","calcAccidental","accidentalChange","allPitches","sharpChords","flatChords","sharpChordsFree","flatChordsFree","preferFlats","freeGCchord","extra1","bass","extra2","isArrayOfStrings","findLastBar","resolveOverlays","madeChanges","durationsPerLines","overlayVoice","hasOverlay","snip","durationThisBar","inOverlay","overlayDuration","snipStart","ov","direction","indexOfLastBar","currSlur","closeLine","notes","history","simplifyMetaText","anyDeleted","hasAny","containsNotes","filter","wrapMusicLines","keepThis","containsNotesStrict","firstMusicLine","hasATitle","fixTitles","workingClef","cleanUpSlursInLine","addEndSlur","obj","chordPos","offNum","slurNum","addStartSlur","usedNums","nextNum","label","gg","ggg","fixClefPlacement","permanentItems","barNumThisLine","getNextMusicLine","cp","ss","vv","startElement","section","slice","potentialStartBeam","potentialEndBeam","vskipPending","getLastNote","getDuration","startBeam","hashParams","This","endBeamLast","hp","currStaff","mid2","pushNote","hashParams2","pushLine","info","subtitle","newpage","lineLength","separator","createVoice","thisStaff","head","createStaff","setLineFont","createLine","isDifferent","lastElement","isFirstLine","currLine","freeFormLineBreaks","lineBreakPoint","totals","totalThisLine","attemptedWidth","newArr","oneTry","measureWidths","idealWidths","accumulator","lineAccumulator","lineWidths","lastVariance","highestVariance","startIndex","otherTries","measureWidth","thisVariance","abs","newWidths","newBreaks","optimizeLineWidths","numLines","total","idealWidth","otherTry","variances","aveVariance","lineWidth","attempts","smallest","smallestIndex","failed","variance","fixedMeasureLineBreaks","preferredMeasuresPerLine","thisWidth","linesBreakElements","lineBreakArray","lineBreakIndexes","lbai","lineCounter","lineStart","lbi","ogLine","findLineBreaks","lastKeySig","lastStem","currentBarNumber","action","currVoice","addLineBreaks","minSpacing","minSpacingLimit","maxSpacing","lastLineLimit","accumulatedLineBreaks","explanations","usableWidth","allowableVariance","minLineSize","staffWidth","minWidth","ff","reason","getRevisedTuneParams","transposeOneTune","changes","count","segment","destinationKey","changeAllKeySigs","transposeVoices","transposeVoice","createKeyAccidentals","setLetterDistance","keyRoot","letterDistance","letters","measureAccidentals","transposedMeasureAccidentals","prefersFlats","newChord","replaceChord","parseNote","transposePitch","upper","replaceNote","grace","newGrace","replaceGrace","octaves","major","newMajor","newMode","origDistFromC","newDistFromC","adj","keyAcc","newNote","courtesy","regPitch","regNote","regOptionalNote","regSpace","reg","currentAcc","calcAdjustment","noteLen","trailingLen","regPreNote","endLen","thisAccidental","keyAccidental","measureAccidental","ChordTrack","pitchesToPerc","barAccidentals","startingTempo","startingMeter","currentInstrument","currentTrack","currentTrackName","lastEventTime","chordTrack","lastBarTime","nextVolume","nextVolumeDelta","drumTrack","drumBars","tempoChangeFactor","drumInstrument","doBeatAccents","stressBeat1","stressBeatDown","stressBeatUp","beatFraction","slurCount","drumDefinition","timeToRealTime","durationRounded","getBeatFraction","doModifiedNotes","noteModification","runningDuration","shortestNote","writeNote","voiceOff","graces","velocity","beat","barBeat","processVolume","processChord","companionDuration","graceDuration","actualPitch","adjustPitch","adjustForMicroTone","processGraceNotes","midiGrace","gp","durationInMeasures","writeGraceNotes","rt","ms","currentTrackMilliseconds","currentTrackWholeNotes","thisBreakBetweenNotes","findNoteModifications","ePitches","setRhythmHead","endType","realDur","getRealDuration","percmap_","midiOptions","bassprog","bassvol","chordprog","chordvol","gchord","chordsOff","ties","timeCounter","tempoMultiplier","thisDuration","tie","item","preProcess","setTranspose","setLastBarTime","voicesOff","trackName","setKeySignature","alignDrumToMeter","setTempoChangeFactor","barEnd","writeDrum","program","normalizeDrumDefinition","gChordOn","beats","paramChange","finish","detuneOctave","detuneCents","track","topEvent","topNote","findOctaves","addTrack","totalDuration","extractOctave","extractNote","description","on","totalPlay","bars","playCount","measuresPerBeat","factor","measureLen","centsToFactor","setAttributes","elm","Midi","trackstrings","trackcount","noteOnAndChannel","noteOffAndChannel","toHex","divisions","hex","sharpCount","flatCount","sig","clocks","timeSignature","encodeString","noteWarped","trackInstrument","silencelength","tracklength","number","ccPrefix","toString","cmdType","nameArray","padding","encodeHex","to7BitHex","lower","toDurationHex","res","bits","loudness","bend","embed","parent","noplayer","data","link","href","firstChild","controller","autoplay","loop","enablejavascript","measureLength","PERCUSSION_PROGRAM","numNotesToDecoration","counter","endingVolume","chordVoiceOffThisBar","noChordVoice","getTrackTitle","voiceNumber","interpretTempo","interpretMeter","removeNaturals","addKey","addIfDifferent","addMeter","abctune","midiTranspose","channelExplicitlySet","drumPattern","drum","drumIntro","drumOn","drumOffAfterIntro","drumOff","startingMidi","globals","drumbars","drumon","nobeataccents","defaultQpm","startVoice","currentVolume","inCrescendo","inDiminuendo","durationCounter","tempoChanges","startRepeatPlaceholder","skipEndingPlaceholder","startingDrumSet","voiceName","cl","intro","drumoff","noteEventsInBar","tripletDurationTotal","tripletDurationCount","setDynamics","noteElem","durationTotal","drumChange","tacet","param","dynamicType","volumes","endDec","n2","endDec2","changePositions","lastTempo","insertTempoChanges","pickups","insertPoint","abcjsAudioContext","pow","chordTrackFinished","chordChannel","currentChords","chordLastBar","gChordTacet","hasRhythmHead","bassInstrument","chordInstrument","boomVolume","chickVolume","overridePattern","parseGChord","resolvePitch","currentChord","firstBoom","newBass","boom","boom2","chick","isRhythmHead","note2","resolveChords","chordTrackEmpty","findChord","breakSynonyms","interpretChord","basses","chordTranspose","bass2","chordNotes","remaining","bassShift","modifier","intervals","chordIntervals","M","m","noteLength","isEmpty","endTime","portionOfAMeasure","currentChordsExpanded","num8thNotes","chords","current","expandCurrentChords","rhythmPatterns","beatsPresent","minLength","isBoom","oo","map","inst","loopImage","playImage","pauseImage","loadingImage","resetImage","acResumerMiddleWare","playBtn","afterResume","isPromise","needsInit","status","add","resume","response","doNext","remove","Error","HTMLElement","ac","hasLoop","loopHandler","hasRestart","restartHandler","hasPlay","playHandler","playPromiseHandler","hasProgress","progressHandler","hasWarp","warpHandler","hasClock","html","repeatTitle","repeatAria","restartTitle","restartAria","playTitle","playAria","randomTitle","randomAria","warpTitle","warpAria","buildDom","attachListeners","isDisabled","setWarp","resetAll","pushedButtons","pushPlay","startButton","pushLoop","loopButton","progressBackground","progressThumb","clientWidth","clock","totalSeconds","minutes","seconds","secondsFormatted","isResumed","getNote","createNoteMap","downloadBuffer","placeNote","soundsCache","notSupportedMessage","originalSoundFontUrl","defaultSoundFontUrl","audioBufferPossible","directSource","startTimeSec","pausedTimeSec","audioBuffers","audioContext","debugCallback","_deviceCapable","reject","soundFontUrl","soundFontVolumeMultiplier","programOffsets","fadeLength","NaN","noteEnd","meterSize","flattened","beatsPerMeasure","sequenceCallback","callbackContext","onEnded","meterFraction","cached","errorNotes","pitchNumber","label2","batches","results","loaded","_loadBatch","batch","delay","promises","pending","oneResponse","which","newBatch","catch","list","prime","fadeTimeSec","totalSamples","sampleRate","noteMapTracks","swing","volumeIncrease","halfbeatLength","swingDuration","oldEventStart","addSwing","panDistances","numTracks","panParam","pp","panNumber","even","currLow","currHigh","setPan","uniqueSounds","noteMap","trackNumber","panDistance","allPromises","audioBuffer","createBuffer","key2","parts","resolveData","me","suspend","resumePosition","_kickOffSound","seek","offset","download","getAudioBuffer","getIsRunning","trackNum","createBufferSource","buffer","connect","onended","URL","createObjectURL","sample","numOfChan","numberOfChannels","ArrayBuffer","view","DataView","channels","setUint32","setUint16","getChannelData","setInt16","Blob","bufferToWave","midiCreate","generateMidiDownloadLink","midiParams","divClasses","downloadClass","preTextDownload","functionToCheck","downloadLabel","call","fileName","postTextDownload","midiOutputType","decoded","Uint8Array","url","instrumentCache","xhr","XMLHttpRequest","noteUrl","open","responseType","onload","maybePromise","decodeAudioData","onerror","send","notesInOrder","noteToMidi","midiToNote","pitchMap","f0","n0","s0","x0","f1","n1","s1","x1","f2","s2","x2","f3","n3","s3","x3","f4","n4","s4","x4","f5","n5","s5","x5","f6","n6","s6","x6","f7","n7","s7","x7","f8","n8","s8","x8","f9","n9","s9","x9","f10","n10","s10","x10","f11","n11","s11","x11","f12","n12","s12","x12","f13","n13","s13","x13","f14","n14","s14","x14","f15","n15","s15","x15","f16","n16","s16","x16","pitchObj","copyToChannel","toBuffer","fromBuffer","fromData","toData","outputAudioBuffer","startArray","volumeMultiplier","ofsMs","noteEndSec","OfflineAC","OfflineAudioContext","webkitOfflineAudioContext","offlineCtx","noteBufferPromise","fnResolve","gainNode","createGain","createStereoPanner","panNode","setValueAtTime","gain","linearRampToValueAtTime","playbackRate","noteOff","oncomplete","renderedBuffer","startRendering","doPlay","midiGracePitches","appendNote","AudioContext","webkitAudioContext","navigator","mozAudioContext","msAudioContext","aac","midiBuffer","currentTempo","control","isLooping","isStarted","isLoaded","isLoading","visualOptions","displayPlay","displayProgress","displayLoop","toggleLoop","displayRestart","restart","play","randomAccess","displayWarp","onWarp","audioParams","go","loadingResponse","subdivisions","onReady","notesStatus","destroy","runWhenReady","_play","fn","arg1","onStart","_randomAccess","background","getBoundingClientRect","offsetWidth","newWarp","wasPlaying","startPercent","onFinished","beatNumber","onBeat","onEvent","lineEvent","onLineEnd","getUrl","click","revokeObjectURL","starts","instrumentNumber","TabNote","TabNotes","handleChordNotes","retNotes","iiii","clefTranspose","checkKeyAccidentals","curPos","toNumber","jjjj","nextPos","strings","noteToNumber","secondPos","sameString","stringNumber","secondPosition","firstSize","emitNoAccidentals","isFlat","noteEquiv","getAccidentalEquiv","emit","isAltered","isDouble","isSharp","stringPitches","pitchAltered","quarter","invalidNumber","StringPatterns","tuning","capo","highestNote","_super","linePitch","capoTuning","iii","curNote","jjj","nextNote","buildCapo","stringNotes","build","buildPatterns","inError","first","buildSecond","stringToPitch","notesToNumber","retGraces","replaceAll","tabInfos","lineSpace","verticalSize","pitch2","bypass","isPercussion","setRelative","child","relative","hasComma","hasQuote","isKeySharp","isKeyFlat","isLower","isQuoted","sameNoteAs","isLowerThan","curAccidentals","cloned","newTabNote","cloneNote","prevNote","fromNote","toNote","fromN","toN","from","buildReturned","toIndex","TabStringPatterns","TabCommon","TabRenderer","Plugin","staffNumber","tabSettings","nbLines","hideTabSymbol","semantics","staffIndex","doLayout","AbsoluteElement","RelativeElement","cloneObject","isArray","constructor","cloneAbsolute","absSrc","cloneAbsoluteAndRelatives","buildTabAbsolute","absX","relX","tabIcon","tabYPos","icon","Ypos","tabAbsolute","tabRelative","lyricsDim","extra","TabAbsoluteElements","buildRelativeTabNote","def","isGrace","strNote","tabNoteRelative","getXGrace","graceInRest","absElem","convertToNumber","tabPos","posNote","buildGraceRelativesForRest","absChild","tabVoice","mm","defGrace","tabGraceRelative","staffAbsolute","keySig","tabVoiceIndex","tabNameInfos","getInitialStaffSize","defNote","isClef","lastBar","bn","abselem","restGraces","heads","lyricDim","ll","dx","VoiceElement","buildTabName","stringSemantics","textSize","getTextSize","doDraw","calc","absolutes","tabStaff","tabSize","islastTabInStaff","getParentStaffIndex","checkVoiceKeySig","lyricsHeight","maxLyricHeight","curAbs","specialY","lyricHeightBelow","getLyricHeight","prevIndex","previousStaff","tabTop","staffGroupInfos","tempoHeightAbove","partHeightAbove","volumeHeightAbove","dynamicHeightAbove","endingHeightAbove","chordHeightAbove","lyricHeightAbove","chordHeightBelow","volumeHeightBelow","dynamicHeightBelow","dy","nextTabPos","tabIndex","handledVoices","nbVoices","getNextTabPos","parentIndex","parentStaff","lastTab","getLastStaff","nbStaffs","getStaffNumbers","isMultiVoiceSingleStaff","duplicate","nameHeight","hasStaff","hasTab","linkStaffAndTabs","BeamElem","BraceElem","createClef","createKeySignature","createNoteHead","createTimeSignature","Decoration","EndingElem","StaffGroupElement","TempoElement","TieElem","TripletElem","addChord","chartable","rhythm","nostem","harmonic","triangle","uflags","dflags","AbstractEngraver","isBagpipes","flatBeams","initialClef","getBeamGroup","abcline","setAveragePitch","sortPitch","sum","averagepitch","minpitch","maxpitch","slurs","slursbyvoice","tiesbyvoice","endingsbyvoice","scaleByVoice","colorByVoice","tripletmultiplier","accidentalSlot","accidentalshiftx","dotshiftx","hasVocals","minY","partstartelem","startlimitelem","stemdir","setStemHeight","heightInPixels","stemHeight","getCurrentVoiceId","pushCrossLineElems","popCrossLineElems","containsLyrics","createABCLine","l","staffgroup","tempoSet","restoreState","createABCStaff","abcstaff","updateFonts","barfrom","barto","headerPosition","baselineToCenter","addMeasureNumber","addChild","ts","staffLines","isSingleLineStaff","createABCVoice","setStaffLimits","setBottomStaff","continuing","addOther","voicetotal","voicenumber","slur","force","stemDir","dotted","setHint","isFirstStaff","abselems","createABCElement","tempoElement","addFixedX","saveState","tiesSave","slursSave","cloneHashOfHash","slursbyvoiceSave","tiesbyvoiceSave","cloneHashOfArrayOfHash","createBeam","createNote","isClosed","createBarLine","invisible","absKey","dim","abselem3","abselem2","addFixed","elems","abselemset","beamelem","runningDirection","setStemDirection","tempStemDir","stemsUp","calcDir","addBeam","sorted","tmp","ledgerLines","minPitch","maxPitch","isRest","symbolWidth","additionalLedgers","dir","ofs","addIfNotExist","addGraceNotes","notehead","roomtaken","gracescale","flag","gracebeam","mainNote","graceoffsets","gracepitch","headx","extrax","highestVert","addSlursAndTies","addExtra","dAcciaccatura","addRight","scalex","scaley","pseudoabselem","p1","p2","linewidth","getSymbolWidth","isInvisibleRest","anchor1","anchor2","addNoteToAbcElement","dot","zeroDuration","durlog","noteSymbol","roomTaken","roomTakenRight","prev","curr","printer_shift","percHead","hasStem","shouldExtendStem","printAccidentals","extraw","extraLeft","addHead","addLyric","lyricStr","ly","roomtakenright","tot","inc","durationForSpacing","absType","durationClassOveride","ret1","isMultiVoice","restpitch","mmWidth","numMeasures","addRestToAbsElement","createDecoration","ret3","setCloseAnchor","middleNote","pitchelem","setEndAnchor","setRange","slurid","setStartX","addInternalNote","measureNumDim","vert","anchor","firstdots","firstthin","thick","secondthin","seconddots","setEndX","textWidth","minspacing","translateChord","chordString","isAnnotation","klass","noteheadWidth","chordWidth","chordHeight","realWidth","relPositionY","pos2","rows","marginLeft","marginTop","move","absElemType","inGroup","noMove","marginBottom","symbolHeightInPitches","clefOffsets","adjustspacing","isKeySig","symbol","fudge","thickness","newDotShiftX","shiftheadx","adjust","opts","xdelta","dotadjusty","symb","accSlotFound","accPlace","numWidth","denWidth","maxWidth","i3","DynamicDecoration","CrescendoElem","GlissandoElem","startDiminuendoX","startCrescendoX","minTop","minBottom","compoundDecoration","placement","lowestPitch","highestPitch","deltaX","dynamicDecoration","diminuendo","crescendo","glissando","startGlissandoX","volumeDecoration","yPos","getSymbolAlign","yPos2","blank1","blank2","fixedY","above","below","closeDecoration","incrementPlacement","getPlacement","textDecoration","symbolDecoration","symbolList","hasOne","stackedDecoration","leftDecoration","unhighlight","fixed","getFixedCoords","_addChild","half","setLimit","member","pushTop","pushBottom","setX","midpoint","firstElement","isflat","isgrace","forceup","forcedown","average","allrests","beams","calcAverage","numElements","beam","addTextIf","richText","BottomText","isPrint","paddingLeft","shouldAddClasses","unalignedWords","extraText","addSingleLine","preface","addMultiLine","content","defFont","groupName","startGroup","endGroup","space","discography","transcription","endVoice","lastContinuedVoice","getWidth","isStartVoice","dec","getFontAndAttr","maxHeight","leftSide","currentFont","opt","centerVertically","getChordDim","invertLane","lane","putChordInLane","getLane","largestY","row","phrases","thisWord","phrase","getFamily","calcHeight","staffnumber","setHeight","setWidth","tAnchor","tLeft","totalHeightInPitches","temposcale","tempoNote","internalNotes","startLimitElem","startLimitX","endLimitElem","endLimitX","calcTieDirection","referencePitch","calcSlurDirection","hasDownStem","calcX","lineStartX","lineEndX","startX","calcTieY","startY","endY","calcSlurY","beamInterferes","midPoint","hasBeam1","hasBeam2","avoidCollisionAbove","maxInnerHeight","headerTextHeight","origin","composer","composerLine","ingroup","author","partOrder","middleElems","otherchildren","firstItem","adjustRange","pathClone","pathArray","Glyphs","printSymbol","path","getPathForSymbol","kx","ky","pathScale","getYCorr","germanNote","baseChord","bassNote","marker","drawTempo","drawRelativeElement","setClass","elementGroup","bartop","staffPos","isTempo","beginGroup","counters","getCurrent","overrideClasses","baseVal","isSelectable","notePositions","zero","printPath","roundNumber","draw","calcY","startY2","getSlope","getY","slope","currentX","pathString","xes","y1","y2","klasses","generate","stroke","fill","foregroundColor","sprintf","renderText","curve","xLeft","yTop","xCurve","yCurve","yBottom","openGroup","yHeight","curvyPath","xLineWidth","yOverlap","wCurve","hCurve","straightPath","closeGroup","wrapSvgEl","drawLine","y3","y4","rectBeneath","drawStaffGroup","setPaperSize","nonMusic","Selectables","engraveStaffLine","lineNumber","addStaffPadding","staffSeparation","lastStaffGroup","thisStaffGroup","lastBottomLine","separationInPixels","moveY","responsive","selectTypes","groupClasses","topText","incrLine","abcLine","bottomText","getElements","linestartx","lineendx","noClass","xOfs","leftStart","leftEnd","drawSquiggly","leftY","rightY","leftX","rightX","sqrt","marginRight","leftYAdj","numSquigglies","Group","lastM","isInGroup","addPath","drawSeparator","absmove","absolutemoveY","firefox112","lineToBack","pathToBack","kernSymbols","lastSymbol","thisSymbol","lastSymbolWidth","ycorr","groupClass","printStem","printStaffLine","graphelem","tabFont","tabClass","stemWidth","scaleX","scaleY","setAttributeOnElement","scaleExistingElem","toFixed","absEl","svgEl","isNoteOrTabNumber","canSelect","selectable","tabindex","sel","isDraggable","maxwidth","ariaLabel","insertStyles","parentStyles","setResponsiveWidth","setSize","setParentStyles","arguments","o","String","fromCharCode","toExponential","str_repeat","drawBrace","drawVoice","printStaff","printDebugBox","printBrace","boxAllElements","coords","relElem","colorIndex","topLine","bottomLine","staff1","showDebug","dottedLine","originalTop","originalBottom","debugPrintGridItem","incrVoice","newMeasure","startx","tabNameHeight","r","staffSize","colors","positionY","chordLines","printLine","endx","prepend","firstYLine","lastYLine","curpitch","preWidth","postWidth","alreadyInGroup","richTextLine","laneMargin","class","getBBox","deltaY","rect","layout","isTie","drawArc","pitch1","norm","ux","uy","maxFlatten","controlx1","controly1","controlx2","controly2","pathString2","fudgeY","hasBeam","bracketHeight","midX","gapWidth","leftEndX","rightStartX","drawBracket","xTextPos","yTextPos","drawGlissando","drawCrescendo","drawDynamics","drawTriplet","drawEnding","drawTie","drawBeam","drawAbsolute","isNonSpacerRest","staffbottom","saveColor","textEl","foundNote","justInitializedMeasureNumber","isInMeasure","startMeasure","incrNote","incrMeasure","Renderer","FreeText","Separator","Subtitle","TopText","setupSelection","Classes","GetFontAndAttr","GetTextSize","oneSvgPerLine","selectionColor","dragColor","dragging","SPACE","timeBasedLayout","expandToWidest","add_classes","staffwidthScreen","staffwidthPrint","listeners","addSelectListener","setPaddingOverride","minPadding","duplicateSvg","svg","createElementNS","attributes","selected","dragTarget","dragIndex","dragMouseStart","dragYStep","setLineThickness","abctunes","engraveTune","adjustNonScaledItems","origJazzChords","setupTune","constructTuneElements","needNewSection","foundNotStaffExtra","lastXPosition","newTune","hasPrintedTempo","hasSeenNonSubtitle","nlines","entry","nRows","thisRow","svgs","paddingBottom","viewBox","getAttribute","gapBetweenLines","wrapper","divStyles","fullTitle","viewBoxHeight","cloneNode","titleEl","innerText","splitSvgIntoLines","getDim","historyEl","measureTotalPerLine","noteNumber","measureTotal","fontOverrides","paddingPercent","addClass","removeClass","kls","FONTSIZE","TOPNOTE","STAVEHEIGHT","INDENT","findNumber","classObj","closest","dataset","tagName","clickedName","parentClasses","clickedClasses","selectableElement","createAnalysis","nodeValue","elementFocused","dragMechanism","notifySelect","keyboardDown","keyCode","preventDefault","keyboardSelection","handled","mouseUp","getMousePosition","clickedOn","findElementInHistory","parentElement","getTarget","offsetX","offsetY","layerY","layerX","getBestMatchCoordinates","yOffset","clientHeight","getCoord","minDistance","closestIndex","horiz","hypotenuse","findElementByCoord","attachMissingTouchEventAttributes","touchEv","touches","pageX","pageY","mouseDown","_ev","button","getClassSet","setClassSet","addGlobalClass","mouseMove","lastTouchMove","yDist","clearSelection","removeGlobalClass","dragStep","dragMax","step","elStart","elEnd","oldClass","klassSet","hist","passive","getBarYAt","getDurlog","minStem","minStemHeight","calcXPos","asc","starthead","endhead","calcDy","firstAveragePitch","lastAveragePitch","barpos","barminpos","slant","leftAveragePitch","rightAveragePitch","numStems","maxSlant","calcSlant","calcYPos","xPos","auxBeams","furthestHead","bary","sy","single","auxBeamEndX","auxBeamEndY","createAdditionalBeams","ovalDelta","createStems","starty","endy","addBraceSize","voiceheaderw","setBraceLocation","setLocation","getLeftEdgeOfStaff","leftEdge","maxCount","getTotalDuration","totalWidth","leftAlignPadding","afterFixedLeft","durationUnit","gridStart","align","grandchild","gridEnd","layoutVoice","setUpperAndLowerElements","layoutStaffGroup","layoutInGrid","setXSpacing","isLastLine","debug","newspace","it","calcHorizontalSpacing","spacingUnits","minSpace","minspace","centerWholeRests","stretchLast","targetWidth","margin","incTop","setUpperAndLowerVoiceElements","setUpperAndLowerAbsoluteElements","setUpperAndLowerCrescendoElements","setUpperAndLowerDynamicElements","setUpperAndLowerEndingElements","specialYResolved","setUpperAndLowerTempoElement","setUpperAndLowerRelativeElements","tempoPitch","renderSpacing","vocal","lastStaffBottom","hgt","forcedSpacingBetween","addedSpace","systemStaffSeparation","staffTopMargin","layoutVoiceElements","layoutEnded","getDurationIndex","durationindex","isSameStaff","voice1","voice2","spacingunits","currentduration","beginLayout","spacingunit","currentvoices","othervoices","spacingduration","getNextX","getSpacingUnits","lastTopVoice","topVoice","voicechildx","layoutOneItem","shiftRight","updateNextX","updateIndices","maxX","curVoice","lastChild","maxChild","barX","checkLastBarX","isAbove","heightAtMidpoint","minx","nextx","firstVoice","er","pad","overlaps","firstChildNoteWidth","adjustedWidth","relativeChild","extraWidth","getExtraWidth","getMinWidth","layoutBeam","layoutTriplet","moveDecorations","yAtNote","placeInLane","rightMost","xCoords","numAnnotationsBelow","absElems","rightMostAbove","rightMostBelow","numLanesAbove","numLanesBelow","setLane","setLaneForChord","Svg","userAgent","clear","initVerticalSpace","setVerticalSpace","setPadding","paddingOverride","paddingtop","paddingbottom","paddingright","paddingleft","setPaddingVariable","paddingKey","formattingKey","printDefault","screenDefault","graceBefore","graceInside","graceAfter","lineSkipFactor","paragraphSkipFactor","slurHeight","staffsep","composerspace","partsspace","textspace","musicspace","titlespace","sysstaffsep","subtitlespace","topspace","vocalspace","wordsspace","em","svgNS","createSvg","currentGroup","constructHLine","constructVLine","titleNode","createTextNode","cls","transform","styles","textContent","dummySvg","ts2","dist","ts3","append","tspan","guessWidth","createDummySvg","ex","sizeCache","setAttributeNS","removeLater","moveElementToChild","graphlib","util","notime","_","greedyFAS","run","fas","graph","acyclicer","edge","weightFn","stack","visited","dfs","has","outEdges","nodes","dfsFAS","removeEdge","forwardName","reversed","setEdge","uniqueId","undo","edges","addBorderNode","prefix","sg","sgNode","rank","borderType","addDummyNode","setParent","node","borderLeft","borderRight","minRank","maxRank","swapWidthHeight","swapWidthHeightOne","reverseYOne","swapXYOne","rankDir","rankdir","reverseY","swapXY","List","sentinel","_next","_prev","_sentinel","unlink","filterOutLinks","dequeue","enqueue","strs","Graph","debugOrdering","layerMatrix","buildLayerMatrix","compound","multigraph","setGraph","setNode","layer","layerV","reduce","u","nodeCount","fasGraph","maxIn","maxOut","prevWeight","edgeWeight","buckets","zeroIdx","assignBucket","buildState","DEFAULT_WEIGHT_FN","sources","sinks","removeNode","doGreedyFAS","constant","collectPredecessors","inEdges","uEntry","wEntry","acyclic","normalize","normalizeRanks","parentDummyChains","removeEmptyRanks","nestingGraph","addBorderSegments","coordinateSystem","order","debugTiming","layoutGraph","inputGraph","canonicalize","merge","graphDefaults","selectNumberAttrs","graphNumAttrs","pick","graphAttrs","defaults","nodeNumAttrs","nodeDefaults","edgeDefaults","edgeNumAttrs","edgeAttrs","buildLayoutGraph","ranksep","minlen","labelpos","labeloffset","makeSpaceForEdgeLabels","selfEdges","removeSelfEdges","asNonCompoundGraph","injectEdgeLabelProxies","cleanup","borderTop","borderBottom","assignRankMinMax","dummy","labelRank","removeEdgeLabelProxies","layers","orderShift","selfEdge","insertSelfEdges","selfNode","positionSelfEdges","removeBorderNodes","fixupEdgeLabelCoords","minX","Number","POSITIVE_INFINITY","maxY","graphLabel","marginX","marginx","marginY","marginy","getExtremes","translateGraph","nodeV","nodeW","intersectRect","assignNodeIntersects","reverse","reversePointsForReversedEdges","runLayout","inputLabel","layoutLabel","updateInputGraph","edgesep","nodesep","mapValues","newAttrs","lodash","cloneDeep","each","find","forIn","isUndefined","minBy","sortBy","values","zipObject","nodeSep","depths","childNode","childTop","childBottom","thisWeight","nestingEdge","depth","treeDepths","nestingRoot","sumWeights","nodeRankFactor","dummyChains","vRank","wRank","edgeLabel","edgeObj","normalizeEdge","origLabel","successors","cg","vs","rootPrev","prevChild","movable","inV","nodeU","barycenter","relationship","hasNode","createRootNode","setDefaultNodeLabel","twoLayerCrossCount","northLayer","southLayer","southPos","southEntries","firstIndex","treeSize","tree","cc","weightSum","layering","initOrder","crossCount","sortSubgraph","buildLayerGraph","addSubgraphConstraints","buildLayerGraphs","ranks","sweepLayerGraphs","layerGraphs","biasRight","lg","assignOrder","downLayerGraphs","upLayerGraphs","best","bestCC","lastBest","simpleNodes","orderedVs","entries","mappedEntries","indegree","entryV","entryW","sourceSet","handleIn","vEntry","merged","mergeEntries","handleOut","doResolveConflicts","resolveConflicts","bl","br","subgraphs","barycenters","subgraphResult","other","expandSubgraphs","predecessors","blPred","brPred","consumeUnsortable","unsortable","partition","sortable","lhs","rhs","vsIndex","bias","postorderNums","lim","low","postorder","pathData","lca","vPath","wPath","findPath","pathIdx","pathV","ascending","findType1Conflicts","conflicts","prevLayer","k0","scanPos","prevLayerLength","lastNode","findOtherInnerSegmentNode","k1","scanNode","uLabel","uPos","addConflict","findType2Conflicts","scan","south","southEnd","prevNorthBorder","nextNorthBorder","uNode","north","nextNorthPos","prevNorthPos","southLookahead","conflictsV","hasConflict","verticalAlignment","neighborFn","prevIdx","mp","il","horizontalCompaction","reverseSep","xs","blockG","blockGraph","sepFn","edgeSep","vLabel","wLabel","sep","vRoot","uRoot","prevMax","buildBlockGraph","iterate","setXsFunc","nextNodesFunc","findSmallestWidthAlignment","xss","NEGATIVE_INFINITY","halfWidth","alignCoordinates","alignTo","alignToVals","alignToMin","alignToMax","alignment","xsVals","balance","ul","ignore","positionX","adjustedLayering","inner","smallestWidth","rankSep","prevY","slack","tightTree","nodeEdges","edgeV","findMinSlackEdge","shiftRanks","directed","longestPath","feasibleTree","networkSimplex","ranker","networkSimplexRanker","tightTreeRanker","longestPathRanker","initRank","preorder","simplify","initLowLimValues","initCutValues","leaveEdge","exchangeEdges","enterEdge","childLab","cutvalue","calcCutValue","assignCutValue","childIsTail","graphEdge","cutValue","isOutEdge","pointsToHead","otherWeight","hasEdge","otherCutValue","dfsAssignLowLim","nextLim","neighbors","tailLabel","flip","candidates","isDescendant","flipped","updateRanks","rootLabel","simplified","simpleLabel","isMultigraph","successorWeights","weightMap","sucs","predecessorWeights","preds","point","sx","collection","hasOwn","toStr","defineProperty","gOPD","getOwnPropertyDescriptor","isPlainObject","hasOwnConstructor","hasIsPrototypeOf","setProperty","enumerable","configurable","newValue","writable","getProperty","extend","copyIsArray","deep","lib","json","alg","cmpt","cmpts","doDfs","navigation","isDirected","dijkstra","weightFunc","edgeFunc","PriorityQueue","edgeFn","pq","updateNeighbors","predecessor","decrease","removeMin","runDijkstra","DEFAULT_WEIGHT_FUNC","tarjan","rowK","rowI","ik","kj","ij","altDistance","runFloydWarshall","components","dijkstraAll","findCycles","floydWarshall","isAcyclic","prim","topsort","CycleException","parents","pri","priority","onStack","lowlink","visit","_arr","_keyIndices","keyIndices","_decrease","_swap","_heapify","largest","origArrI","origArrJ","DEFAULT_EDGE_NAME","GRAPH_NODE","EDGE_KEY_DELIM","_isDirected","_isMultigraph","_isCompound","_label","_defaultNodeLabelFn","_defaultEdgeLabelFn","_nodes","_parent","_children","_in","_preds","_out","_sucs","_edgeObjs","_edgeLabels","incrementOrInitEntry","decrementOrRemoveEntry","edgeArgsToId","v_","w_","edgeObjToId","_nodeCount","_edgeCount","isCompound","newDefault","isFunction","setNodes","_removeFromParentsChildList","ancestor","predsV","sucsV","union","isLeaf","filterNodes","findParent","setDefaultEdgeLabel","edgeCount","setPath","valueSpecified","arg0","edgeArgsToObj","freeze","outV","writeNodes","writeEdges","edgeValue","write","read","htmlToPdfMake","htmlText","wndw","tableAutoSize","imagesByReference","removeExtraBlanks","showHidden","removeTagClasses","ignoreStyles","imagesByReferenceSuffix","random","fontSizes","defaultStyles","bold","strong","del","italics","h1","fontSize","h2","h3","h4","h5","h6","strike","table","th","fillColor","imagesRef","changeDefaultStyles","keyStyle","ks","convertHtml","parser","DOMParser","parsedHtml","parseFromString","docDef","parseElement","nodeName","nodeNameLowerCase","_this","nodeType","styleParentTextNode","parseStyle","hasWhiteSpace","replaceText","applyStyle","visibility","childNodes","searchForStack","rowIndex","tbodies","hasRowSpan","tbody","cells","cell","colSpan","rowSpan","columnCount","some","partialCount","rowCount","columnInd","rowInd","cs","colspan","cellsWidths","cellsHeights","tableWidths","tableHeights","fullWidth","percentRegex","widthRegex","cleanPercentageRegex","elementWidth","elementStyle","tableHaveWidth","widthIndex","tableWidth","tableHaveColgroup","tableColgroupIndex","cellIndex","colElement","colWidth","colStyle","colWidthIndex","colParsedStyle","cellWidth","cellPercentage","cellHeight","heights","pdfmake","charAt","outerHTML","styleHR","canvas","lineColor","listStyle","listStyleType","preserveLeadingSpaces","image","setLink","pointer","linkToDestination","customTag","cssClass","lastIndex","parentNodeName","htmlClass","ignoreNonDescendentProperties","stl","borderValueRearrange","styleStr","styleArray","v1","v2","v3","ignoreProperties","convertToUnit","parseColor","styleDefs","borders","styleDef","val","toCamelCase","opacity","parsedValue","border","borderColor","properties","hsl2rgb","decimalColors","decimalValue","hexString","haxRegex","rgbRegex","hslRegex","nameRegex","endsWith","isFinite","mtch","images","COMMENT_REGEX","NEWLINE_REGEX","WHITESPACE_REGEX","PROPERTY_REGEX","COLON_REGEX","VALUE_REGEX","SEMICOLON_REGEX","TRIM_REGEX","EMPTY_STRING","TypeError","lineno","updatePosition","Position","whitespace","errorsList","filename","silent","re","comments","rules","declaration","decl","decls","declarations","getNative","hashClear","hashDelete","hashGet","hashHas","hashSet","Hash","set","get","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","ListCache","Map","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","Set","setCacheAdd","setCacheHas","SetCache","__data__","stackClear","stackDelete","stackGet","stackHas","stackSet","Stack","Symbol","WeakMap","func","thisArg","apply","array","iteratee","predicate","resIndex","baseIndexOf","comparator","baseTimes","isArguments","isBuffer","isIndex","isTypedArray","inherited","isArr","isArg","isBuff","isType","skipIndexes","initAccum","asciiSize","baseProperty","baseAssignValue","eq","object","objValue","copyObject","keysIn","arrayEach","assignValue","baseAssign","baseAssignIn","cloneBuffer","copyArray","copySymbols","copySymbolsIn","getAllKeys","getAllKeysIn","getTag","initCloneArray","initCloneByTag","initCloneObject","isMap","isObject","isSet","argsTag","funcTag","objectTag","cloneableTags","baseClone","bitmask","customizer","isDeep","isFull","tag","isFunc","stacked","subValue","props","objectCreate","baseCreate","proto","baseForOwn","baseEach","createBaseEach","isSymbol","computed","fromIndex","fromRight","arrayPush","isFlattenable","baseFlatten","isStrict","baseFor","createBaseFor","castPath","toKey","keysFunc","symbolsFunc","getRawTag","objectToString","symToStringTag","toStringTag","baseFindIndex","baseIsNaN","strictIndexOf","baseGetTag","isObjectLike","baseIsEqualDeep","baseIsEqual","equalArrays","equalByTag","equalObjects","arrayTag","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","isMasked","toSource","reIsHostCtor","funcProto","Function","objectProto","funcToString","reIsNative","isLength","typedArrayTags","baseMatches","baseMatchesProperty","identity","isPrototype","nativeKeys","nativeKeysIn","isProto","isArrayLike","baseIsMatch","getMatchData","matchesStrictComparable","hasIn","isKey","isStrictComparable","assignMergeValue","baseMergeDeep","safeGet","baseMerge","srcIndex","cloneTypedArray","isArrayLikeObject","toPlainObject","mergeFunc","isCommon","isTyped","arrayMap","baseGet","baseIteratee","baseMap","baseSortBy","baseUnary","compareMultiple","iteratees","orders","basePickBy","paths","baseSet","nativeCeil","nativeMax","eachFunc","overRest","setToString","nested","baseSetToString","string","comparer","symbolProto","symbolToString","baseToString","trimmedEndIndex","reTrimStart","arrayIncludes","arrayIncludesWith","cacheHas","createSet","setToArray","seen","seenIndex","assignFunc","valsLength","cache","stringToPath","arrayBuffer","byteLength","freeExports","freeModule","Buffer","allocUnsafe","cloneArrayBuffer","dataView","byteOffset","reFlags","regexp","symbolValueOf","valueOf","typedArray","valIsDefined","valIsNull","valIsReflexive","valIsSymbol","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","compareAscending","objCriteria","criteria","othCriteria","ordersLength","getSymbols","getSymbolsIn","coreJsData","baseRest","isIterateeCall","assigner","guard","iterable","findIndexFunc","baseRange","toFinite","noop","arraySome","isPartial","arrLength","othLength","arrStacked","othStacked","arrValue","othValue","compared","othIndex","mapToArray","convert","objProps","objLength","objStacked","skipCtor","objCtor","othCtor","freeGlobal","global","baseGetAllKeys","isKeyable","baseIsNative","getValue","getPrototype","overArg","getPrototypeOf","nativeObjectToString","isOwn","unmasked","arrayFilter","stubArray","nativeGetSymbols","getOwnPropertySymbols","mapTag","promiseTag","setTag","weakMapTag","dataViewTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","Ctor","ctorString","hasFunc","reHasUnicode","nativeCreate","cloneDataView","cloneRegExp","cloneSymbol","spreadableSymbol","isConcatSpreadable","reIsUint","reIsDeepProp","reIsPlainProp","maskSrcKey","uid","IE_PROTO","assocIndexOf","getMapData","memoize","freeProcess","process","nodeUtil","types","binding","arg","otherArgs","freeSelf","shortOut","nativeNow","Date","lastCalled","stamp","pairs","LARGE_ARRAY_SIZE","hasUnicode","unicodeSize","memoizeCapped","rePropName","reEscapeChar","quote","subString","reWhitespace","rsAstralRange","rsAstral","rsCombo","rsFitz","rsNonAstral","rsRegional","rsSurrPair","reOptMod","rsOptVar","rsSeq","rsSymbol","reUnicode","CLONE_DEEP_FLAG","propsIndex","propsLength","baseFilter","createFind","toInteger","castFunction","defaultValue","baseHas","hasPath","baseHasIn","baseIsArguments","stubFalse","baseKeys","baseIsMap","nodeIsMap","objectCtorString","baseIsSet","nodeIsSet","baseIsTypedArray","nodeIsTypedArray","arrayLikeKeys","baseKeysIn","baseExtremum","baseGt","resolver","memoized","Cache","createAssigner","baseLt","basePick","flatRest","basePropertyDeep","createRange","arrayReduce","baseReduce","isString","stringSize","baseOrderBy","INFINITY","remainder","baseTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","isBinary","isArrLike","baseUniq","arrays","idCounter","baseValues","baseZipObject","factory","OP","CL","CP","QU","GL","NS","EX","SY","IS","PR","PO","NU","AL","HL","ID","IN","HY","BA","BB","B2","ZW","CM","WJ","H2","H3","JL","JV","JT","RI","EB","EM","ZWJ","CB","AI","BK","CJ","CR","LF","NL","SA","SG","SP","XX","DI_BRK","IN_BRK","CI_BRK","CP_BRK","PR_BRK","pairTable","EncodeStream","__webpack_require__","DecodeStream","LazyArray","Bitfield","Boolean","Enum","Optional","Reserved","Struct","VersionedStruct","utils","NumberT","Pointer","assign","ArrayT","lengthType","_proto","decode","stream","ctx","resolveLength","defineProperties","_startOffset","_currentOffset","_length","_step","_iterator","_createForOfIteratorHelperLoose","pointers","startOffset","pointerOffset","_step2","_iterator2","ptr","flags","BooleanT","BufferT","readBuffer","buf","writeBuffer","iconv","readString","encoding","byte","error1","readUInt24BE","readUInt16BE","readUInt8","readUInt24LE","readUInt16LE","readInt24BE","readInt16BE","readInt24LE","readInt8","TYPES","UInt8","UInt16","UInt24","UInt32","Int8","Int16","Int24","Int32","Float","Double","_loop","bytes","_stream$Readable","bufferSize","alloc","bufferOffset","_read","ensure","flush","writeString","writeUInt24BE","writeUInt24LE","writeInt24BE","writeInt24LE","Readable","_inspect","inspect","LazyArrayT","_ArrayT","toArray","base","items","_proto2","endian","uint8","uint16be","uint16","uint16le","uint24be","uint24","uint24le","uint32be","uint32","uint32le","int8","int16be","int16","int16le","int24be","int24","int24le","int32be","int32","int32le","floatbe","float","floatle","doublebe","double","doublele","Fixed","_NumberT","fracBits","_point","fixed16be","fixed16","fixed16le","fixed32be","fixed32","fixed32le","condition","offsetType","allowNull","nullValue","lazy","relativeTo","relativeToGetter","decodeValue","PropertyDescriptor","VoidPointer","pointerSize","StringT","writeUInt8","fields","_setup","_parseFields","includePointers","preEncode","_Struct","versions","versionPath","prevObj","_defineProperties","descriptor","_toPropertyKey","toPrimitive","_toPrimitive","_assertThisInitialized","ReferenceError","_setPrototypeOf","setPrototypeOf","__proto__","base64","ieee754","customInspectSymbol","SlowBuffer","INSPECT_MAX_BYTES","K_MAX_LENGTH","RangeError","encodingOrOffset","isEncoding","fromString","isView","arrayView","isInstance","fromArrayBuffer","fromArrayLike","fromArrayView","SharedArrayBuffer","checked","numberIsNaN","fromObject","assertSize","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","arrayIndexOf","indexSize","valLength","foundIndex","hexWrite","strLen","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","base64Write","ucs2Write","hi","lo","utf16leToBytes","fromByteArray","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","codePoints","MAX_ARGUMENTS_LENGTH","decodeCodePointsArray","kMaxLength","TYPED_ARRAY_SUPPORT","foo","typedArraySupport","poolSize","allocUnsafeSlow","_isBuffer","compare","swap16","swap32","swap64","toLocaleString","thisStart","thisEnd","thisCopy","targetCopy","toJSON","hexSliceLookupTable","checkOffset","ext","checkInt","wrtBigUInt64LE","checkIntBI","BigInt","wrtBigUInt64BE","checkIEEE754","writeFloat","littleEndian","noAssert","writeDouble","newBuf","subarray","readUintLE","readUIntLE","mul","readUintBE","readUIntBE","readUint8","readUint16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readUInt32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","boundsError","readBigUInt64BE","readIntLE","readIntBE","readInt16LE","readInt32LE","readInt32BE","readBigInt64LE","readBigInt64BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUintLE","writeUIntLE","writeUintBE","writeUIntBE","writeUint8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUInt16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeUInt32BE","writeBigUInt64LE","writeBigUInt64BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeBigInt64LE","writeBigInt64BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","code","errors","sym","getMessage","Base","_Base","subClass","superClass","Constructor","protoProps","staticProps","NodeError","addNumericalSeparator","ERR_OUT_OF_RANGE","checkBounds","ERR_INVALID_ARG_TYPE","ERR_BUFFER_OUT_OF_BOUNDS","received","isInteger","INVALID_BASE64_RE","Infinity","leadSurrogate","toByteArray","base64clean","dst","alphabet","i16","BufferBigIntNotDefined","NAME","Prototype","NATIVE_ARRAY_BUFFER","DESCRIPTORS","isCallable","classof","tryToString","createNonEnumerableProperty","redefine","isPrototypeOf","wellKnownSymbol","Int8Array","Int8ArrayPrototype","Uint8ClampedArray","Uint8ClampedArrayPrototype","TypedArray","TypedArrayPrototype","ObjectPrototype","TO_STRING_TAG","TYPED_ARRAY_TAG","TYPED_ARRAY_CONSTRUCTOR","NATIVE_ARRAY_BUFFER_VIEWS","opera","TYPED_ARRAY_TAG_REQIRED","TypedArrayConstructorsList","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigIntArrayConstructorsList","BigInt64Array","BigUint64Array","aTypedArray","aTypedArrayConstructor","exportTypedArrayMethod","KEY","forced","ARRAY","TypedArrayConstructor","exportTypedArrayStaticMethod","uncurryThis","FunctionName","redefineAll","fails","anInstance","toIntegerOrInfinity","toLength","IEEE754","getOwnPropertyNames","arrayFill","arraySlice","setToStringTag","InternalStateModule","PROPER_FUNCTION_NAME","PROPER","CONFIGURABLE_FUNCTION_NAME","CONFIGURABLE","getInternalState","setInternalState","ARRAY_BUFFER","DATA_VIEW","PROTOTYPE","WRONG_INDEX","NativeArrayBuffer","$ArrayBuffer","ArrayBufferPrototype","$DataView","DataViewPrototype","packIEEE754","pack","unpackIEEE754","unpack","packInt8","packInt16","packInt32","unpackInt32","packFloat32","packFloat64","addGetter","isLittleEndian","intIndex","store","conversion","INCORRECT_ARRAY_BUFFER_NAME","testView","$setInt8","setInt8","getInt8","setUint8","unsafe","bufferLength","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt32","setFloat32","setFloat64","$","arrayBufferModule","setSpecies","undef","CryptoJS","BlockCipher","C_algo","algo","SBOX","INV_SBOX","SUB_MIX_0","SUB_MIX_1","SUB_MIX_2","SUB_MIX_3","INV_SUB_MIX_0","INV_SUB_MIX_1","INV_SUB_MIX_2","INV_SUB_MIX_3","xi","RCON","AES","_doReset","_nRounds","_keyPriorReset","_key","keyWords","keySize","sigBytes","ksRows","keySchedule","_keySchedule","ksRow","invKeySchedule","_invKeySchedule","invKsRow","encryptBlock","_doCryptBlock","decryptBlock","nRounds","t0","t1","t2","t3","_createHelper","ORIG_P","ORIG_S","BLOWFISH_CTX","pbox","sbox","BlowFish_Encrypt","temp","Xl","Xr","BlowFish_Decrypt","BlowFishInit","keysize","Row","Col","Data1","Data2","_i","Blowfish","blockSize","ivSize","Cipher","C_lib","WordArray","BufferedBlockAlgorithm","C_enc","enc","Base64","Utf8","EvpKDF","cfg","createEncryptor","_ENC_XFORM_MODE","createDecryptor","_DEC_XFORM_MODE","xformMode","_xformMode","dataUpdate","_append","_process","finalize","_doFinalize","selectCipherStrategy","PasswordBasedCipher","SerializableCipher","cipher","encrypt","decrypt","ciphertext","C_mode","StreamCipher","BlockCipherMode","iv","Encryptor","Decryptor","_cipher","_iv","CBC","xorBlock","block","_prevBlock","processBlock","thisBlock","Pkcs7","blockSizeBytes","nPaddingBytes","paddingWord","paddingWords","unpad","CipherParams","modeCreator","_minBufferSize","_mode","__creator","_doProcessBlock","finalProcessedBlocks","_data","cipherParams","mixIn","formatter","OpenSSLFormatter","OpenSSL","salt","openSSLStr","ciphertextWords","encryptor","cipherCfg","algorithm","_parse","OpenSSLKdf","kdf","execute","password","hasher","compute","derivedParams","crypto","globalThis","msCrypto","cryptoSecureRandomInt","getRandomValues","randomBytes","subtype","overrides","$super","propertyName","encoder","Hex","wordArray","thisWords","thatWords","thisSigBytes","thatSigBytes","clamp","thatByte","nBytes","hexChars","bite","hexStr","hexStrLength","Latin1","latin1Chars","latin1Str","latin1StrLength","decodeURIComponent","escape","utf8Str","unescape","encodeURIComponent","_nDataBytes","doFlush","processedWords","dataWords","dataSigBytes","nBlocksReady","nWordsReady","nBytesReady","Hasher","update","messageUpdate","_createHmacHelper","HMAC","parseLoop","base64Str","base64StrLength","reverseMap","bitsCombined","_map","base64Chars","paddingChar","_reverseMap","paddingIndex","Base64url","urlSafe","_safe_map","swapEndian","Utf16","Utf16BE","utf16Chars","utf16Str","utf16StrLength","Utf16LE","MD5","iterations","derivedKey","derivedKeyWords","_hasher","hasherBlockSize","hasherBlockSizeBytes","oKey","_oKey","iKey","_iKey","oKeyWords","iKeyWords","innerHash","superInit","subInit","typedArrayByteLength","T","sin","_hash","offset_i","M_offset_i","H","M_offset_0","M_offset_1","M_offset_2","M_offset_3","M_offset_4","M_offset_5","M_offset_6","M_offset_7","M_offset_8","M_offset_9","M_offset_10","M_offset_11","M_offset_12","M_offset_13","M_offset_14","M_offset_15","FF","GG","HH","II","nBitsTotal","nBitsLeft","nBitsTotalH","nBitsTotalL","H_i","HmacMD5","CFB","generateKeystreamAndEncrypt","keystream","CTRGladman","incWord","b1","b2","b3","incCounter","_counter","CTR","ECB","OFB","_keystream","AnsiX923","lastBytePos","Ansix923","Iso10126","Iso97971","ZeroPadding","NoPadding","SHA256","PBKDF2","hmac","blockIndex","blockIndexWords","blockWords","blockWordsLength","intermediate","intermediateWords","C_","RabbitLegacy","K","_X","_C","_b","nextState","IV","IV_0","IV_1","i0","i1","gx","ga","gb","gh","gl","Rabbit","RC4","keySigBytes","_S","keyByteIndex","keyByte","_j","generateKeystreamWord","keystreamWord","RC4Drop","drop","_zl","_zr","_sl","_sr","_hl","_hr","RIPEMD160","al","dl","ar","cr","dr","hl","hr","zl","zr","sr","rotl","HmacRIPEMD160","SHA1","HmacSHA1","SHA224","HmacSHA224","isPrime","sqrtN","getFractionalBits","nPrime","gamma0x","gamma0","gamma1x","gamma1","sigma0","HmacSHA256","X64Word","x64","Word","RHO_OFFSETS","PI_INDEXES","ROUND_CONSTANTS","newY","LFSR","roundConstantMsw","roundConstantLsw","bitPosition","SHA3","outputLength","_state","nBlockSizeLanes","M2i","M2i1","high","tMsw","tLsw","Tx","Tx4","Tx1","Tx1Msw","Tx1Lsw","laneIndex","laneMsw","laneLsw","rhoOffset","TPiLane","T0","state0","TLane","Tx1Lane","Tx2Lane","roundConstant","blockSizeBits","outputLengthBytes","outputLengthLanes","hashWords","HmacSHA3","C_x64","X64WordArray","SHA512","SHA384","HmacSHA384","X64Word_create","H0","H1","H4","H5","H6","H7","H0h","H0l","H1h","H1l","H2h","H2l","H3h","H3l","H4h","H4l","H5h","H5l","H6h","H6l","H7h","H7l","ah","bh","dh","eh","fh","fl","hh","Wil","Wih","Wi","gamma0xh","gamma0xl","gamma0h","gamma0l","gamma1xh","gamma1xl","gamma1h","gamma1l","Wi7","Wi7h","Wi7l","Wi16","Wi16h","Wi16l","t1l","chh","chl","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Ki","Kih","Kil","t1h","t2l","toX32","HmacSHA512","PC1","PC2","BIT_SHIFTS","SBOX_P","SBOX_MASK","DES","keyBits","keyBitPos","subKeys","_subKeys","nSubKey","subKey","bitShift","invSubKeys","_invSubKeys","_lBlock","_rBlock","exchangeLR","exchangeRL","lBlock","rBlock","mask","TripleDES","key1","key3","_des1","_des2","_des3","X32WordArray","x64Words","x64WordsLength","x32Words","x64Word","wordsLength","StateMachine","dfa","stateTable","accepting","tags","_ref","iterator","_regeneratorRuntime","mark","_callee","startRun","lastAccepting","lastState","_context","actions","_step$value","fs","zlib","PNG","palette","imgData","transparency","chunkSize","readUInt32","colorType","compressionMethod","filterMethod","interlaceMethod","indexed","short","grayscale","rgb","hasAlphaChannel","pixelBitlength","colorSpace","readFile","file","pixels","readFileSync","readUInt16","decodePixels","inflate","pixelBytes","pass","y0","singlePass","scanlineLength","col","paeth","upperLeft","pa","pb","pc","pixelsPos","bufferPos","decodePalette","copyToImageData","imageData","alpha","_decodedPalette","_this2","safer","Safer","kStringMaxLength","constants","MAX_LENGTH","MAX_STRING_LENGTH","ownKeys","enumerableOnly","_objectSpread","_defineProperty","getOwnPropertyDescriptors","custom","BufferList","_classCallCheck","tail","hasStrings","_getString","_getBuffer","nb","customInspect","copyProps","SafeBuffer","swap32LE","UnicodeTrie","uncompressedLength","highStart","errorValue","DATA_BLOCK_LENGTH","INDEX_1_OFFSET","INDEX_2_BLOCK_LENGTH","isBigEndian","SVGtoPDF","doc","NamedColors","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgrey","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","DefaultColors","transparent","Entities","quot","amp","gt","apos","OElig","oelig","Scaron","scaron","Yuml","circ","tilde","ensp","emsp","thinsp","zwnj","zwj","lrm","rlm","ndash","mdash","lsquo","rsquo","sbquo","ldquo","rdquo","bdquo","dagger","Dagger","permil","lsaquo","rsaquo","euro","nbsp","iexcl","cent","pound","curren","yen","brvbar","sect","uml","ordf","laquo","not","shy","macr","deg","plusmn","sup2","sup3","acute","micro","para","middot","cedil","sup1","ordm","raquo","frac14","frac12","frac34","iquest","Agrave","Aacute","Acirc","Atilde","Auml","Aring","AElig","Ccedil","Egrave","Eacute","Ecirc","Euml","Igrave","Iacute","Icirc","Iuml","ETH","Ntilde","Ograve","Oacute","Ocirc","Otilde","Ouml","Oslash","Ugrave","Uacute","Ucirc","Uuml","Yacute","THORN","szlig","agrave","aacute","acirc","atilde","auml","aring","aelig","ccedil","egrave","eacute","ecirc","euml","igrave","iacute","icirc","iuml","eth","ntilde","ograve","oacute","ocirc","otilde","ouml","divide","oslash","ugrave","uacute","ucirc","uuml","yacute","thorn","yuml","fnof","Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega","beta","gamma","epsilon","zeta","eta","theta","iota","kappa","lambda","mu","nu","omicron","pi","rho","sigmaf","sigma","tau","upsilon","phi","chi","psi","omega","thetasym","upsih","piv","bull","hellip","Prime","oline","frasl","weierp","real","trade","alefsym","larr","uarr","rarr","darr","harr","crarr","lArr","uArr","rArr","dArr","hArr","forall","exist","empty","nabla","isin","notin","ni","prod","minus","lowast","radic","infin","ang","and","or","cap","cup","int","there4","sim","cong","asymp","ne","equiv","le","ge","sup","nsub","sube","supe","oplus","otimes","perp","sdot","lceil","rceil","lfloor","rfloor","lang","rang","loz","spades","clubs","hearts","diams","PathArguments","L","Q","q","V","PathFlags","A3","A4","a3","a4","Properties","inherit","initial","normal","css","docBeginGroup","bbox","_groupCount","resources","ref","xobj","Type","Subtype","FormType","BBox","CS","Resources","savedMatrix","_ctm","savedPage","page","groupStack","xobjects","ext_gstates","patterns","docEndGroup","Font","XObject","ExtGState","Pattern","docInsertGroup","addContent","docApplyMask","clip","_maskCount","gstate","CA","ca","BM","SMask","BC","docCreatePattern","matrix","docUsePattern","_patternCount","PatternType","PaintType","TilingType","XStep","YStep","Matrix","multiplyMatrix","ProcSet","docSetTextMatrix","docSetTextMode","docFillColor","fillOpacity","docStrokeColor","strokeOpacity","strokeColor","parseXml","xml","SvgNode","recursive","getElementsByTagName","StringParser","decodeEntities","warningCallback","matchAll","mt","m0","m1","m2","raw","colorCallback","opacityToColor","isMask","newColor","newOpacity","transformPoint","getGlobalMatrix","ctm","getPageBBox","SvgShape","inverseMatrix","getBoundingBox","dt","validateMatrix","m3","m4","m5","isNotEqual","solveEquation","isEqual","getCurveValue","parseTranform","nums","parser2","temp2","matchNumber","matchSeparator","PI","cos","_a","_a2","_a3","parseAspectRatio","aspectRatio","availWidth","availHeight","elemWidth","elemHeight","initAlign","ratioType","xAlign","yAlign","parseStyleAttr","fontFamily","fontStyle","fontWeight","fontVariant","parseSelector","ids","specificity","parseStyleSheet","rule","selectors","matchesSelector","_i2","_i3","combineArrays","array1","array2","getAscent","ascender","getDescent","descender","getTextPos","encoded","unicode","glyph","advanceWidth","xOffset","xAdvance","yAdvance","createSVGElement","inherits","SvgElemUse","SvgElemSymbol","SvgElemGroup","SvgElemLink","SvgElemSvg","SVGElemImage","SvgElemRect","SvgElemCircle","SvgElemEllipse","SvgElemLine","SvgElemPolyline","SvgElemPolygon","SvgElemPath","SvgElemText","SvgElemTspan","SvgElemTextPath","SvgElemTextNode","SvgElem","exp","matchSpace","matchLengthUnit","BezierSegment","p1x","p1y","c1x","c1y","c2x","c2y","p2x","p2y","precision","equationX","equationY","derivativeX","derivativeY","lengthMap","startPoint","atan2","endPoint","rootsX","_i4","_x","rootsY","_i5","_y","getPointAtLength","_i6","l1","l2","_t","_x2","_y2","_dx","_dy","LineSegment","pathCommands","pathSegments","lastCom","lastCtrlX","lastCtrlY","currX","currY","addCommand","hasStart","hasEnd","cx","cy","rx","ry","fi","fa","th1","th2","segms","th3","th4","command","bbox1","mergeShape","shape","insertInDocument","moveTo","lineTo","bezierCurveTo","closePath","getSubPaths","subPaths","getMarkers","markers","subPath","subPathMarkers","startMarker","prevEndMarker","endMarker","styleCache","childrenCache","isOuterElement","useCSS","getComputedStyle","specificities","styleRules","getStyle","allowedChildren","resolveUrl","svgObj","documentCallback","documentCache","_i7","_svgObj","computeUnits","unit","isFontSize","getViewport","computeLength","temp1","computeLengthList","strict","getLength","getLengthList","getNumberList","getViewbox","getPercent","chooseValue","keyInfo","fallbackColor","SvgElemGradient","SvgElemPattern","dasharray","getChildren","getParentVWidth","getVWidth","viewportWidth","getParentVHeight","getVHeight","viewportHeight","getParentViewport","getBoundingShape","SvgElemStylable","getTransformation","SvgElemClipPath","useMask","SvgElemMask","getFill","isClip","getPaint","getStroke","SvgElemHasChildren","childShape","drawChildren","drawInDocument","SvgElemContainer","drawContent","clipped","masked","save","restore","addLink","isText","Rect","Border","URI","links","docInsertLink","preserveAspectRatio","imageCallback","openImage","translate","fallback","_attr","_getChildren","bBox","gOpacity","bBoxUnitsPattern","bBoxUnitsContent","aspectRatioMatrix","stopColor","grad","r2","bBoxUnits","spread","nAfter","nBefore","nTotal","inv","corner1","corner2","corner3","corner4","linearGradient","radialGradient","inOrder","_child","_stopColor","_colorSpace","setTransform","SvgElemBasicShape","dashScale","lineCap","_x4","_y4","circle","dashArray","dashOffset","_j2","miterLimit","lineJoin","dash","phase","_j3","fillAndStroke","markerStart","markerMid","markerEnd","markersPos","SvgElemMarker","drawMarker","pathLength","posArray","strokeWidth","orient","rotate","refX","refY","SvgElemTextContainer","_pos","hidden","dx0","ascent","dy0","dx1","descent","dy1","dx2","dy2","drawTextInDocument","decorate","_font","fauxBold","childElem","skew","fauxItalic","linePosition","_pathLength","pathObject","pathElem","textParentElem","currentAnchor","currentDirection","processedText","remainingText","textPaths","currentChunk","currentY","doAnchoring","anchordx","textOnPath","currentElem","textOffset","charMidX","pointOnPath","continuous","_j5","parentElem","_rot","_defRot","fontOptions","fontNameorLink","fontCallback","_index","textLength","spacingAndGlyphs","wordSpacing","letterSpacing","textAnchor","textDirection","baseline","xHeight","getXHeight","getBaseline","rawText","renderedText","xAttr","yAttr","dxAttr","dyAttr","rotAttr","firstChar","lastChar","textScale","spaceDiff","_j4","adjustLength","pxToPt","assumePt","SVGElement","family","italic","_registeredFonts","savedFillColor","_fillColor","_i8","annotations","PDFAbstractReference","PDFTree","_items","limits","sortedKeys","_compareKeys","PDFObject","_dataForKey","_keysName","escapableRe","escapable","encryptFn","stringBuffer","isUnicode","buff","swapBytes","_string","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","PDFReference","_PDFAbstractReference","gen","compress","Filter","chunk","Length","_offset","_security","getEncryptFn","_zlib","default","deflateSync","_write","_refEnd","DEFAULT_MARGINS","SIZES","A0","A1","A2","A5","A6","A7","A8","A9","A10","B0","B1","B3","B4","B5","B6","B7","B8","B9","B10","C0","C1","C2","C3","C4","C5","C6","C7","C8","C9","C10","RA0","RA1","RA2","RA3","RA4","SRA0","SRA1","SRA2","SRA3","SRA4","EXECUTIVE","FOLIO","LEGAL","LETTER","TABLOID","PDFPage","margins","dimensions","dictionary","Parent","_root","Pages","MediaBox","Contents","markings","ColorSpace","Annots","StructParents","createStructParentTreeNextKey","PDFNameTree","_PDFTree","localeCompare","inRange","rangeGroup","startRange","endRange","middleRange","arrayIndex","unassigned_code_points","isUnassignedCodePoint","character","commonly_mapped_to_nothing","non_ASCII_space_characters","non_ASCII_controls_characters","non_character_codepoints","prohibited_characters","isProhibitedCharacter","bidirectional_r_al","isBidirectionalRAL","bidirectional_l","isBidirectionalL","mapping2space","mapping2nothing","getCodePoint","codePointAt","toCodePoints","codepoints","PDFSecurity","ownerPassword","userPassword","_setupEncryption","infoStr","CreationDate","getTime","wordArrayToBuffer","_cryptoJs","pdfVersion","encDict","_setupEncryptionV1V2V4","_setupEncryptionV5","permissions","permissionObject","printing","modifying","copying","annotating","getPermissionsR2","getPermissionsR3","userPasswordEntry","encryptionKey","paddedUserPassword","processPasswordR2R3R4","paddedOwnerPassword","ownerPasswordEntry","digest","xorRound","getOwnerPasswordR2R3R4","documentId","lsbFirstWord","getEncryptionKeyR2R3R4","_id","getUserPasswordR3R4","CF","StdCF","AuthEvent","CFM","StmF","StrF","U","P","processedUserPassword","processPasswordR5","processedOwnerPassword","getEncryptionKeyR5","generateRandomWordArray","validationSalt","keySalt","getUserPasswordR5","userEncryptionKeyEntry","userKeySalt","getUserEncryptionKeyR5","getOwnerPasswordR5","ownerEncryptionKeyEntry","ownerKeySalt","getOwnerEncryptionKeyR5","permsEntry","getEncryptedPermissionsR5","OE","UE","Perms","fillingForms","contentAccessibility","documentAssembly","PASSWORD_PADDING","mapped_input","normalized_input","fromCodePoint","normalized_map","allowUnassigned","hasBidiRAL","hasBidiL","isFirstBidiRAL","isLastBidiRAL","saslprep","px","py","PDFGradient","stops","embedded","_normalizeColor","m11","m12","m21","m22","stopsLength","bounds","FunctionType","Domain","Functions","Bounds","Encode","_gradCount","shader","Shading","opacityGradient","pageBBox","form","Sh1","opacityPattern","Gs1","_this$doc$_ctm","_this$transform","_setColorSpace","op","Gradient","PDFLinearGradient","_PDFGradient","ShadingType","Coords","Extend","PDFRadialGradient","_PDFGradient2","r1","underlyingColorSpaces","PDFTilingPattern","xStep","yStep","csName","csId","getPatternColorSpaceId","colorSpaces","underlyingColorspace","createPattern","patternColor","embedPatternColorSpaces","normalizedColor","_getColorSpace","PDFGradient$1","PDFLinearGradient$1","PDFRadialGradient$1","PDFTilingPattern$1","ColorMixin","initColor","_opacityRegistry","_opacityCount","namedColors","_setColor","_setColorCore","_opacity","_doOpacity","_this$_opacityRegistr","yellowgreen","parameters","runners","_toConsumableArray","quadraticCurveTo","solveArc","_coords","rot","large","sweep","ey","arcToSegments","seg","bez","segmentToBezier","rotateX","ox","oy","sin_th","cos_th","a00","a01","a10","a11","sfactor_sq","sfactor","xc","yc","th0","th_arc","segments","th_half","SVGPath","curArg","foundDecimal","_apply","number$1","KAPPA","VectorMixin","initVector","_ctmStack","_CAP_STYLES","BUTT","ROUND","SQUARE","_JOIN_STYLES","MITER","BEVEL","originalLength","every","undash","cp1x","cp1y","cp2x","cp2y","cpx","cpy","roundedRect","ellipse","xe","ye","xm","ym","radius","arc","startAngle","endAngle","anticlockwise","TWO_PI","HALF_PI","deltaAng","numSegs","segAng","handleLen","curAng","deltaCx","deltaCy","ax","ay","segIdx","polygon","_len","_points","_path","_windingRule","isFillRule","_m","angle","rad","_options$origin","xFactor","yFactor","_options$origin2","WIN_ANSI_MAP","characters","AFMFont","contents","glyphWidths","boundingBoxes","kernPairs","charWidths","capHeight","lineGap","charCode","characterToGlyph","advances","widthOfGlyph","getKernPair","PDFFont","includeGap","STANDARD_FONTS","Courier","__dirname","Helvetica","ZapfDingbats","StandardFont","_PDFFont","_this$font","BaseFont","Encoding","encodeText","glyphsForString","advancesForGlyphs","positions","EmbeddedFont","subset","createSubset","getGlyph","postscriptName","unitsPerEm","fontLayoutCache","layoutCache","features","layoutRun","onlyWidth","needle","layoutCached","_this$layout","gid","includeGlyph","isCFF","cff","fontFile","encodeStream","familyClass","sFamilyClass","post","isFixedPitch","macStyle","FontName","Flags","FontBBox","ItalicAngle","italicAngle","Ascent","Descent","CapHeight","XHeight","StemV","FontFile3","FontFile2","CIDSet","CIDSetRef","descendantFontData","CIDSystemInfo","Registry","Ordering","Supplement","FontDescriptor","CIDToGIDMap","descendantFont","DescendantFonts","ToUnicode","toUnicodeCmap","cmap","PDFFontFactory","isStandardFont","_fontkit","FontsMixin","initFonts","defaultFont","_fontFamilies","_fontCount","_fontSize","cacheKey","_this$_registeredFont","currentLineHeight","lineHeight","registerFont","LineWrapper","_EventEmitter","indent","characterSpacing","columns","columnGap","spaceLeft","ellipsis","continuedX","once","continued","lastLine","paragraphGap","widthOfString","bk","breaker","_linebreak","wordWidths","nextBreak","shouldContinue","wordWidth","lbk","fbk","mightGrow","mustShrink","required","nextY","nextSection","wc","lc","emitLine","wordCount","eachWord","lh","continueOnNewPage","_this$document","_events","EventEmitter","number$2","TextMixin","initText","_line","_lineGap","moveDown","moveUp","_text","lineCallback","_initOptions","addStructure","structParent","struct","structType","markStructureContent","_wrapper","_textOptions","_text2","heightOfString","_list","listType","midLine","bulletRadius","textIndent","itemIndent","bulletIndent","level","levels","numbers","itemType","labelType","bodyType","structTypes","_options$structTypes","_this3","letter","_fragment","lineBreak","spaceWidth","renderedWidth","goTo","addNamedDestination","underline","lineY","_lineWidth","_lineY","oblique","encodedWord","_this$_font$encode2","positionsWord","_this$_font$encode4","hadOffset","addSegment","cur","advance","_this4","MARKERS","COLOR_SPACE_MAP","JPEG","BitsPerComponent","Width","Height","PNGImage","_pngJs","dataDecoded","isInterlaced","Predictor","Colors","Columns","loadIndexedAlphaChannel","splitAlphaChannel","decodeData","alphaChannel","sMask","Decode","colorCount","pixelCount","skipByteCount","PDFImage","ImagesMixin","initImages","_imageRegistry","_imageCount","bp","bw","ip","left1","wp","fit","_options$fit","cover","_options$cover","valign","AnnotationsMixin","annotate","_convertRect","Dest","Name","pages","Kids","_markup","_this$_convertRect2","QuadPoints","lineAnnotation","rectAnnotation","ellipseAnnotation","textAnnotation","DA","fileAnnotation","filespec","FS","Desc","_this$_ctm","PDFOutline","expanded","outlineData","Count","First","Last","Prev","Next","endOutline","OutlineMixin","initOutline","outline","Outlines","PageMode","PDFStructureContent","pageRef","mcid","refs","structContent","PDFStructureElement","_attached","_ended","_flushed","_isValidChild","Lang","alt","Alt","ActualText","setAttached","_addContentToParentTree","_contentForClosure","getStructParentTree","parentRef","_flush","closure","endMarkedContent","_isFlushable","_flushChild","_ref2","_this5","Pg","MCID","PDFNumberTree","MarkingsMixin","initMarkings","structChildren","tagged","getMarkInfoDictionary","Marked","getStructTreeRoot","markContent","toClose","marking","attached","Attached","pageStructParents","structParentTreeKey","_objectSpread2","structElem","structTreeRoot","initPageMarkings","pageMarkings","newStructContent","endPageMarkings","MarkInfo","StructTreeRoot","ParentTree","ParentTreeNextKey","endMarkings","FIELD_FLAGS","noExport","multiline","toggleToOffButton","radioButton","pushButton","combo","edit","multiSelect","noSpell","FIELD_JUSTIFY","VALUE_MAP","FORMAT_SPECIAL","zip","zipPlus4","zip4","phone","ssn","FORMAT_DEFAULT","nDec","sepComma","negStyle","currency","currencyPrepend","AcroFormMixin","initForm","_acroform","Fields","NeedAppearances","DR","AcroForm","endAcroForm","fontDict","fieldRef","_endChild","childRef","formField","fieldDict","_fieldDict","_addToParent","formAnnotation","annotRef","formText","formPushButton","formCombo","formList","formRadioButton","formCheckbox","_resolveType","_resolveFlags","_resolveJustify","_resolveFont","_resolveStrings","_resolveColors","_resolveFormat","FT","fnKeystroke","fnFormat","_p","AA","JS","backgroundColor","MK","BG","Ff","appendChoices","idx","Opt","AttachmentsMixin","refBody","Params","statSync","birthtime","_fs$statSync","ctime","ModDate","creationDate","modifiedDate","checksum","CheckSum","Size","_fileRegistry","fileSpecBody","EF","UF","addNamedEmbeddedFile","PDFA","initPDFA","pSubset","subset_conformance","endSubset","_addPdfaMetadata","jsPath","jestPath","_addColorOutputIntent","existsSync","pICCPath","iccProfile","colorProfileRef","intentRef","Info","OutputConditionIdentifier","DestOutputProfile","OutputIntents","_getPdfaid","appendXML","SubsetMixin","_importSubset","initSubset","PDFMetadata","_metadata","_closeTags","MetadataMixin","initMetadata","metadata","_addInfo","toISOString","Creator","Title","Author","Subject","Keywords","endMetadata","metadataRef","getXML","Metadata","PDFDocument","_pageBuffer","_pageBufferStart","_offsets","_waiting","Names","Dests","Producer","displayTitle","ViewerPreferences","DisplayDocTitle","generateFileID","autoFirstPage","addPage","bufferPages","flushPages","EmbeddedFiles","js","JavaScript","_finalize","pipe","createWriteStream","_info","xRefOffset","trailer","Root","Encrypt","_stream","mixin","methods","___EXPOSE_LOADER_IMPORT___","___EXPOSE_LOADER_GLOBAL_THIS___","_typeof","_createClass","isDeepEqual","isDeepStrictEqual","_require$codes","codes","ERR_AMBIGUOUS_ARGUMENT","ERR_INVALID_ARG_VALUE","ERR_INVALID_RETURN_VALUE","ERR_MISSING_ARGS","AssertionError","_require$types","isRegExp","objectAssign","objectIs","RegExpPrototypeTest","lazyLoadComparison","comparison","warned","assert","ok","NO_EXCEPTION_SENTINEL","innerFail","innerOk","argLen","generatedMessage","expected","operator","stackStartFn","fail","internalMessage","argsLen","emitWarning","errArgs","equal","notEqual","deepEqual","notDeepEqual","deepStrictEqual","notDeepStrictEqual","strictEqual","notStrictEqual","Comparison","expectedException","compareExceptionKey","getActual","checkIsPromise","waitForActual","promiseFn","resultPromise","expectsError","details","fnType","expectsNoError","internalMatch","fnName","_len6","_key6","throws","_len2","_key2","rejects","_len3","_key3","doesNotThrow","_len4","_key4","doesNotReject","_len5","_key5","ifError","newErr","origStack","tmp2","tmp1","doesNotMatch","_possibleConstructorReturn","_wrapNativeSuper","Class","_cache","Wrapper","_construct","_getPrototypeOf","_isNativeReflectConstruct","Reflect","construct","sham","Proxy","search","this_len","kReadableOperator","strictEqualObject","notStrictEqualObject","notIdentical","copyError","inspectValue","compact","maxArrayLength","breakLength","showProxy","getters","createErrDiff","lastPos","skipped","actualInspected","actualLines","expectedLines","indicator","inputLength","stderr","isTTY","repeat","maxLines","_actualLines","printedLines","skippedMsg","expectedLine","actualLine","divergingLines","_Error","_inspect$custom","_inherits","Derived","hasNativeReflectConstruct","Super","NewTarget","_createSuper","stackTraceLimit","getColorDepth","_res","knownOperators","captureStackTrace","recurseTimes","createErrorType","arg2","arg3","oneOf","thing","determiner","inspected","_slicedToArray","_arrayWithHoles","return","_iterableToArrayLimit","minLen","_arrayLikeToArray","_unsupportedIterableToArray","_nonIterableRest","regexFlagsSupported","arrayFromSet","arrayFromMap","is","objectGetOwnPropertySymbols","isAnyArrayBuffer","isArrayBufferView","isDate","isNativeError","isBoxedPrimitive","isNumberObject","isStringObject","isBooleanObject","isBigIntObject","isSymbolObject","isFloat32Array","isFloat64Array","isNonIndex","getOwnNonIndexProperties","kNoIterator","kIsArray","kIsSet","kIsMap","innerDeepEqual","val1","val2","memos","buf1","buf2","val1Tag","keys1","keyCheck","areSimilarTypedArrays","areSimilarFloatArrays","_keys","_keys2","isEqualBoxedPrimitive","getEnumerables","iterationType","aKeys","bKeys","symbolKeysA","symbolKeysB","_symbolKeysB","val2MemoA","val2MemoB","areEq","memo","aValues","setMightHaveLoosePrim","bValues","_val","setHasEqualElement","setEquiv","aEntries","_aEntries$i","item1","item2","mapMightHaveLoosePrim","bEntries","_bEntries$_i","mapHasEqualEntry","mapEquiv","keysA","objEquiv","delete","setValues","findLooseMatchingPrimitives","altValue","curB","b64","lens","getLens","validLen","placeHoldersLen","Arr","_byteLength","curByte","revLookup","extraBytes","maxChunkLength","len2","encodeChunk","lookup","BROTLI_READ_SIZE","kBitMask","BrotliBitReader","buf_","input_","READ_SIZE","IBUF_MASK","buf_ptr_","val_","pos_","bit_pos_","bit_end_pos_","eos_","readMoreInput","bytes_read","fillBitWindow","readBits","n_bits","lookupOffsets","BrotliInput","BrotliOutput","BrotliDictionary","HuffmanCode","BrotliBuildHuffmanTable","Context","Prefix","Transform","kDefaultCodeLength","kCodeLengthRepeatCode","kNumLiteralCodes","kNumInsertAndCopyCodes","kNumBlockLengthCodes","kLiteralContextBits","kDistanceContextBits","HUFFMAN_TABLE_BITS","HUFFMAN_TABLE_MASK","HUFFMAN_MAX_TABLE_SIZE","CODE_LENGTH_CODES","kCodeLengthCodeOrder","NUM_DISTANCE_SHORT_CODES","kDistanceShortCodeIndexOffset","kDistanceShortCodeValueOffset","kMaxHuffmanTableSize","DecodeWindowBits","DecodeVarLenUint8","nbits","MetaBlockLength","meta_block_length","input_end","is_uncompressed","is_metadata","DecodeMetaBlockLength","size_nibbles","size_bytes","next_byte","next_nibble","ReadSymbol","ReadHuffmanCode","alphabet_size","tables","table_size","simple_code_or_skip","code_lengths","max_bits_counter","max_bits","num_symbols","code_length_code_lengths","num_codes","huff","code_len_idx","prev_code_len","repeat_code_len","code_len","old_repeat","repeat_delta","extra_bits","new_len","ReadHuffmanCodeLengths","ReadBlockLength","kBlockLengthPrefixCode","TranslateShortCodes","ringbuffer","MoveToFront","HuffmanTreeGroup","num_htrees","htrees","DecodeContextMap","context_map_size","context_map","max_run_length_prefix","reps","v_len","mtf","InverseMoveToFrontTransform","DecodeBlockType","max_block_type","trees","tree_type","block_types","ringbuffers","indexes","block_type","type_code","CopyUncompressedBlockToOutput","ringbuffer_mask","nbytes","rb_size","rb_pos","br_pos","JumpToByteBoundary","new_bit_pos","BrotliDecompressedSize","BrotliDecompress","window_bits","max_backward_distance","ringbuffer_size","ringbuffer_end","block_type_trees","block_len_trees","max_distance","dist_rb","dist_rb_idx","prev_byte1","prev_byte2","hgroup","kRingBufferWriteAheadSlack","maxDictionaryWordLength","distance_postfix_bits","num_direct_distance_codes","distance_postfix_mask","num_distance_codes","num_literal_htrees","dist_context_map","num_dist_htrees","context_mode","htree_command","meta_block_remaining_len","block_length","num_block_types","block_type_rb","block_type_rb_index","context_modes","context_map_slice","literal_htree_index","dist_context_map_slice","dist_htree_index","context_lookup_offset1","context_lookup_offset2","_o1","_o2","cmd_code","range_idx","insert_code","copy_code","insert_length","copy_length","distance_code","copy_dst","postfix","kInsertRangeLut","kCopyRangeLut","kInsertLengthPrefixCode","kCopyLengthPrefixCode","minDictionaryWordLength","offsetsByLength","word_id","sizeBitsByLength","transform_idx","kNumTransforms","transformDictionaryWord","BrotliDecompressBuffer","output_size","output_buffer","GetNextKey","ReplicateValue","NextTableBitSize","root_bits","root_table","code_lengths_size","table_bits","total_size","start_table","PrefixCodeRange","kUppercaseFirst","kUppercaseAll","suffix","kTransforms","ToUpperCase","uppercase","start_idx","prefix_pos","suffix_pos","Zstream","zlib_deflate","zlib_inflate","Zlib","DEFLATE","UNZIP","init_done","memLevel","strategy","windowBits","write_in_progress","pending_close","gzip_id_bytes_read","NONE","INFLATE","GZIP","GUNZIP","DEFLATERAW","INFLATERAW","deflateEnd","strm","inflateEnd","in_off","in_len","out_off","out_len","writeSync","async","Z_NO_FLUSH","Z_PARTIAL_FLUSH","Z_SYNC_FLUSH","Z_FULL_FLUSH","Z_FINISH","Z_BLOCK","avail_in","next_in","avail_out","next_out","_checkError","_afterSync","nextTick","_after","next_expected_header_byte","deflate","Z_NEED_DICT","inflateSetDictionary","Z_OK","Z_DATA_ERROR","Z_STREAM_END","Z_BUF_ERROR","_error","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","_init","_setDictionary","_reset","deflateInit2","Z_DEFLATED","inflateInit2","deflateSetDictionary","deflateReset","inflateReset","kRangeErrorMessage","Z_MIN_WINDOWBITS","Z_MAX_WINDOWBITS","Z_DEFAULT_WINDOWBITS","Z_MIN_CHUNK","Z_MAX_CHUNK","Z_DEFAULT_CHUNK","Z_MIN_MEMLEVEL","Z_MAX_MEMLEVEL","Z_DEFAULT_MEMLEVEL","Z_MIN_LEVEL","Z_MAX_LEVEL","Z_DEFAULT_LEVEL","Z_DEFAULT_COMPRESSION","bkeys","bkey","Z_ERRNO","Z_STREAM_ERROR","Z_MEM_ERROR","Z_VERSION_ERROR","ckeys","ck","ckey","zlibBuffer","engine","buffers","nread","flow","onEnd","removeListener","zlibBufferSync","flushFlag","_finishFlushFlag","_processChunk","Deflate","Inflate","Gzip","Gunzip","DeflateRaw","InflateRaw","Unzip","isValidFlushFlag","_opts","_chunkSize","finishFlush","_flushFlag","_handle","_hadError","errno","_close","_buffer","_level","_strategy","emitCloseNT","createDeflate","createInflate","createDeflateRaw","createInflateRaw","createGzip","createGunzip","createUnzip","gzip","gzipSync","deflateRaw","deflateRawSync","unzip","unzipSync","inflateSync","gunzip","gunzipSync","inflateRaw","inflateRawSync","_transform","kind","_writableState","ended","needDrain","cb","availInBefore","availOutBefore","inOff","req","availInAfter","availOutAfter","have","newReq","GetIntrinsic","callBind","$indexOf","allowMissing","intrinsic","setFunctionLength","$TypeError","$apply","$call","$reflectApply","$defineProperty","$max","originalFunction","applyBind","circular","allParents","allChildren","useBuffer","_clone","__isArray","__isRegExp","__getRegExpFlags","__isDate","__objToStr","ignoreCase","clonePrototype","argument","isConstructor","definePropertyModule","UNSCOPABLES","ArrayPrototype","toObject","toAbsoluteIndex","lengthOfArrayLike","argumentsLength","endPos","$forEach","STRICT_METHOD","arrayMethodIsStrict","callbackfn","callWithSafeIterationClosing","isArrayIteratorMethod","createProperty","getIterator","getIteratorMethod","arrayLike","IS_CONSTRUCTOR","mapfn","mapping","iteratorMethod","toIndexedObject","createMethod","IS_INCLUDES","$this","IndexedObject","arraySpeciesCreate","TYPE","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_REJECT","NO_HOLES","that","specificCreate","boundFunction","filterReject","$lastIndexOf","NEGATIVE_ZERO","FORCED","searchElement","V8_VERSION","SPECIES","METHOD_NAME","method","aCallable","IS_RIGHT","mergeSort","comparefn","middle","insertionSort","llength","rlength","lindex","rindex","originalArray","arraySpeciesConstructor","anObject","iteratorClose","ENTRIES","ITERATOR","SAFE_CLOSING","called","iteratorWithReturn","SKIP_CLOSING","ITERATION_SUPPORT","stringSlice","TO_STRING_TAG_SUPPORT","classofRaw","CORRECT_ARGUMENTS","tryGet","callee","TEST","V8_OR_CHAKRA_STACK_ENTRY","IS_V8_OR_CHAKRA_STACK","IS_FIREFOX_OR_SAFARI_STACK","dropEntries","defineIterator","fastKey","internalStateGetterFor","getterFor","getConstructor","CONSTRUCTOR_NAME","ADDER","AS_ENTRIES","define","previous","getEntry","removed","setStrong","ITERATOR_NAME","getInternalCollectionState","getInternalIteratorState","iterated","isForced","InternalMetadataModule","checkCorrectnessOfIteration","inheritIfRequired","common","IS_WEAK","NativeConstructor","NativePrototype","exported","fixMethod","uncurriedNativeMethod","enable","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","getOwnPropertyDescriptorModule","MATCH","error2","requireObjectCoercible","attribute","IteratorPrototype","createPropertyDescriptor","Iterators","returnThis","IteratorConstructor","bitmap","toPropertyKey","propertyKey","ordinaryToPrimitive","IS_PURE","createIteratorConstructor","IteratorsCore","BUGGY_SAFARI_ITERATORS","KEYS","VALUES","Iterable","DEFAULT","IS_SET","CurrentIteratorPrototype","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","wrappedWellKnownSymbolModule","EXISTS","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","documentCreateElement","DOMTokenListPrototype","firefox","UA","Pebble","getBuiltIn","Deno","v8","webkit","setGlobal","copyConstructorProperties","targetProperty","sourceProperty","TARGET","GLOBAL","STATIC","stat","noTargetGet","regexpExec","RegExpPrototype","SHAM","SYMBOL","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","uncurriedNativeRegExpMethod","nativeMethod","forceStringMethod","$exec","isExtensible","preventExtensions","FunctionPrototype","factories","partArgs","argsLength","getDescriptor","namespace","getMethod","usingIterator","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","matched","captures","namedCaptures","replacement","tailPos","capture","check","LN2","mantissaLength","exponent","mantissa","exponentLength","eMax","eBias","sign","nBits","NewTargetPrototype","functionToString","inspectSource","cause","hiddenKeys","getOwnPropertyNamesModule","getOwnPropertyNamesExternalModule","FREEZING","REQUIRED","METADATA","setMetadata","objectID","weakData","meta","getWeakData","onFreeze","NATIVE_WEAK_MAP","shared","sharedKey","OBJECT_ALREADY_INITIALIZED","wmget","wmhas","wmset","facade","STATE","enforce","constructorRegExp","INCORRECT_TO_STRING","isConstructorModern","feature","detection","POLYFILL","NATIVE","USE_SYMBOL_AS_UID","$Symbol","Result","stopped","ResultPrototype","unboundFunction","iterFn","IS_ITERATOR","INTERRUPTED","callFn","innerResult","innerError","PrototypeOfArrayIteratorPrototype","arrayIterator","notify","toggle","macrotask","IS_IOS","IS_IOS_PEBBLE","IS_WEBOS_WEBKIT","IS_NODE","MutationObserver","WebKitMutationObserver","queueMicrotaskDescriptor","queueMicrotask","domain","exit","enter","observe","characterData","task","PromiseCapability","$$resolve","$$reject","$default","globalIsFinite","objectKeys","getOwnPropertySymbolsModule","propertyIsEnumerableModule","$assign","chr","activeXDocument","enumBugKeys","SCRIPT","EmptyConstructor","scriptTag","LT","NullProtoObjectViaActiveX","parentWindow","NullProtoObject","ActiveXObject","iframeDocument","iframe","contentWindow","NullProtoObjectViaIFrame","IE8_DOM_DEFINE","Attributes","$getOwnPropertyDescriptor","$getOwnPropertyNames","windowNames","getWindowNames","internalObjectKeys","CORRECT_PROTOTYPE_GETTER","names","$propertyIsEnumerable","NASHORN_BUG","aPossiblePrototype","setter","CORRECT_SETTER","TO_ENTRIES","pref","newPromiseCapability","promiseCapability","enforceInternalState","TEMPLATE","simple","regexpFlags","stickyHelpers","UNSUPPORTED_DOT_ALL","UNSUPPORTED_NCG","nativeReplace","nativeExec","patchedExec","UPDATES_LAST_INDEX_WRONG","re1","re2","UNSUPPORTED_Y","BROKEN_CARET","NPCG_INCLUDED","reCopy","groups","sticky","charsAdded","strCopy","dotAll","$RegExp","TAG","SHARED","copyright","aConstructor","defaultConstructor","CONVERT_TO_STRING","second","codeAt","whitespaces","ltrim","rtrim","location","defer","port","setImmediate","clearImmediate","Dispatch","MessageChannel","queue","ONREADYSTATECHANGE","runner","postMessage","protocol","host","port2","port1","onmessage","importScripts","integer","toPositiveInteger","BYTES","TO_PRIMITIVE","exoticToPrim","TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS","ArrayBufferViewCore","ArrayBufferModule","isIntegralNumber","toOffset","typedArrayFrom","nativeDefineProperty","nativeGetOwnPropertyDescriptor","BYTES_PER_ELEMENT","WRONG_LENGTH","fromList","isArrayBuffer","isTypedArrayIndex","wrappedGetOwnPropertyDescriptor","wrappedDefineProperty","CLAMPED","GETTER","SETTER","NativeTypedArrayConstructor","TypedArrayConstructorPrototype","addElement","getter","typedArrayOffset","$length","$len","arrayFromConstructorAndList","typedArraySpeciesConstructor","speciesConstructor","NATIVE_SYMBOL","WellKnownSymbolsStore","symbolFor","createWellKnownSymbol","withoutSetter","clearErrorStack","installErrorCause","normalizeStringArgument","ERROR_STACK_INSTALLABLE","$AggregateError","AggregateErrorPrototype","errorsArray","AggregateError","arrayMethodHasSpeciesSupport","IS_CONCAT_SPREADABLE","MAX_SAFE_INTEGER","MAXIMUM_ALLOWED_INDEX_EXCEEDED","IS_CONCAT_SPREADABLE_SUPPORT","SPECIES_SUPPORT","spreadable","addToUnscopables","$filter","$includes","ARRAY_ITERATOR","Arguments","un$Join","ES3_STRINGS","$map","un$Slice","HAS_SPECIES_SUPPORT","fin","internalSort","IE_OR_EDGE","V8","WEBKIT","un$Sort","FAILS_ON_UNDEFINED","FAILS_ON_NULL","STABLE_SORT","itemsLength","arrayLength","getSortCompare","deleteCount","insertCount","actualDeleteCount","actualStart","dateToPrimitive","DatePrototype","FUNCTION_NAME_EXISTS","nameRE","regExpExec","thisNumberValue","NUMBER","NativeNumber","NumberPrototype","third","radix","maxCode","NumberWrapper","primValue","toNumeric","EPSILON","$repeat","un$ToFixed","multiply","c2","dataToString","fractionDigits","fractDigits","$freeze","FAILS_ON_PRIMITIVES","nativeGetPrototypeOf","$values","newPromiseCapabilityModule","perform","allSettled","capability","promiseResolve","alreadyCalled","PROMISE_ANY_ERROR","any","alreadyResolved","alreadyRejected","NativePromise","onFinally","Internal","OwnPromiseCapability","PromiseWrapper","nativeThen","microtask","hostReportErrors","IS_BROWSER","PROMISE","getInternalPromiseState","NativePromisePrototype","PromiseConstructor","PromisePrototype","newGenericPromiseCapability","DISPATCH_EVENT","NATIVE_REJECTION_EVENT","PromiseRejectionEvent","UNHANDLED_REJECTION","SUBCLASSING","PROMISE_CONSTRUCTOR_SOURCE","GLOBAL_CORE_JS_PROMISE","FakePromise","INCORRECT_ITERATION","isThenable","isReject","notified","chain","reactions","exited","reaction","handler","rejection","onHandleUnhandled","onUnhandled","initEvent","isUnhandled","unwrap","internalReject","internalResolve","executor","onFulfilled","onRejected","$promiseResolve","race","nativeConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","$args","objectDefinePropertyModule","regExpFlags","$toString","TO_STRING","n$ToString","getFlags","NOT_GENERIC","INCORRECT_NAME","rf","$fromCodePoint","notARegExp","correctIsRegExpLogic","stringIndexOf","searchString","createHTML","forcedStringHTMLMethod","STRING_ITERATOR","advanceStringIndex","MATCH_ALL","REGEXP_STRING","REGEXP_STRING_ITERATOR","un$MatchAll","WORKS_WITH_NON_GLOBAL_REGEX","$RegExpStringIterator","$global","fullUnicode","$matchAll","flagsValue","matcher","fixRegExpWellKnownSymbolLogic","nativeMatch","maybeCallNative","matchStr","getSubstitution","REPLACE","REPLACE_KEEPS_$0","REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE","UNSAFE_SUBSTITUTE","searchValue","replaceValue","functionalReplace","accumulatedResult","nextSourcePosition","replacerArgs","callRegExpExec","MAX_UINT32","$push","SPLIT_WORKS_WITH_OVERWRITTEN_EXEC","originalExec","SPLIT","nativeSplit","internalSplit","lastLength","lastLastIndex","separatorCopy","splitter","unicodeMatching","$trim","forcedStringTrimMethod","defineWellKnownSymbol","NativeSymbol","SymbolPrototype","EmptyStringDescriptionStore","SymbolWrapper","desc","nativeObjectCreate","getOwnPropertyNamesExternal","HIDDEN","QObject","$stringify","nativeGetOwnPropertyNames","nativePropertyIsEnumerable","AllSymbols","ObjectPrototypeSymbols","StringToSymbolRegistry","SymbolToStringRegistry","USE_SETTER","findChild","setSymbolDescriptor","ObjectPrototypeDescriptor","$defineProperties","$getOwnPropertySymbols","IS_OBJECT_PROTOTYPE","keyFor","useSetter","useSimple","$replacer","u$ArrayCopyWithin","$every","$fill","fromSpeciesAndList","$findIndex","$find","createTypedArrayConstructor","ArrayIterators","arrayValues","arrayKeys","arrayEntries","nativeTypedArrayIterator","PROPER_ARRAY_VALUES_NAME","typedArrayValues","$join","$reduceRight","$reduce","$some","ACCEPT_INCORRECT_ARGUMENTS","mod","begin","beginIndex","$toLocaleString","TO_LOCALE_STRING_BUG","Uint8ArrayPrototype","arrayToString","IS_NOT_ARRAY_METHOD","DOMIterables","handlePrototype","CollectionPrototype","COLLECTION_NAME","ArrayIteratorMethods","ArrayValues","isRegex","isUndefinedOrNull","aIsRegex","bIsRegex","aIsBuffer","bIsBuffer","ka","kb","$SyntaxError","gopd","nonEnumerable","nonWritable","nonConfigurable","loose","hasSymbols","defineDataProperty","supportsDescriptors","predicates","EvalError","SyntaxError","URIError","ReflectOwnKeys","ReflectApply","receiver","NumberIsNaN","emitter","errorListener","eventTargetAgnosticAddListener","addErrorHandlerIfEventEmitter","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","_getMaxListeners","_addListener","existing","newListener","onceWrapper","fired","wrapFn","_onceWrap","wrapped","_listeners","evlistener","unwrapListeners","arrayClone","listenerCount","wrapListener","removeEventListener","setMaxListeners","getMaxListeners","doError","context","addListener","prependListener","prependOnceListener","originalListener","spliceOne","off","removeAllListeners","rawListeners","eventNames","forEachArray","forEachString","forEachObject","concatty","bound","arrLike","slicy","boundLength","boundArgs","joiner","joiny","Empty","implementation","functionsHaveNames","functionsHaveConfigurableNames","$bind","boundFunctionsHaveNames","$Error","$EvalError","$RangeError","$ReferenceError","$URIError","$Function","getEvalledConstructor","expressionSyntax","$gOPD","throwTypeError","ThrowTypeError","calleeThrows","gOPDthrows","hasProto","getProto","needsEval","INTRINSICS","Atomics","decodeURI","encodeURI","eval","FinalizationRegistry","WeakRef","WeakSet","errorProto","doEval","LEGACY_ALIASES","$concat","$spliceApply","$replace","$strSlice","getBaseIntrinsic","alias","intrinsicName","intrinsicBaseName","intrinsicRealName","skipFurtherCaching","hasPropertyDescriptors","hasArrayLengthDefineBug","$Object","origSymbol","hasSymbolSham","symObj","syms","$hasOwn","_dbcs","DBCSCodec","UNASSIGNED","GB18030_CODE","SEQ_START","NODE_START","UNASSIGNED_NODE","codecOptions","encodingName","mappingTable","decodeTables","decodeTableSeq","_addDecodeChunk","gb18030","commonThirdByteNodeIdx","commonFourthByteNodeIdx","firstByteNode","secondByteNode","thirdByteNode","fourthByteNode","defaultCharUnicode","encodeTable","encodeTableSeq","skipEncodeChars","encodeSkipVals","_fillEncodeTable","encodeAdd","uChar","_setEncodeChar","defCharSB","defaultCharSingleByte","DBCSEncoder","codec","seqObj","DBCSDecoder","nodeIdx","prevBytes","findIdx","decoder","_getDecodeTrieNode","addr","curAddr","writeTable","codeTrail","_getEncodeBucket","uCode","dbcsCode","bucket","_setEncodeSequence","oldVal","hasValues","subNodeEmpty","mbCode","subNodeIdx","newPrefix","nextChar","resCode","subtable","uChars","gbChars","prevOffset","seqStart","uCodeLead","bytesArr","modules","InternalCodec","bomAware","InternalEncoderBase64","InternalEncoderCesu8","InternalDecoderCesu8","utf8","cesu8","unicode11utf8","ucs2","utf16le","binary","_internal","InternalEncoder","InternalDecoder","StringDecoder","prevStr","contBytes","accBytes","completeQuads","bufIdx","SBCSCodec","chars","asciiString","decodeBuf","encodeBuf","SBCSEncoder","SBCSDecoder","_sbcs","idx1","idx2","Utf16BECodec","Utf16BEEncoder","Utf16BEDecoder","overflowByte","Utf16Codec","Utf16Encoder","addBOM","getEncoder","Utf16Decoder","initialBufs","initialBufsLen","detectEncoding","bufs","defaultEncoding","charsProcessed","asciiCharsLE","asciiCharsBE","outer_loop","utf16be","utf16","getDecoder","resStr","trail","Utf32Codec","isLE","Utf32Encoder","highSurrogate","Utf32Decoder","badChar","_writeCodepoint","codepoint","Utf32AutoCodec","Utf32AutoEncoder","Utf32AutoDecoder","invalidLE","invalidBE","bmpCharsLE","bmpCharsBE","_utf32","utf32le","utf32be","ucs4le","ucs4be","write32","isHighSurrogate","isLowSurrogate","utf32","ucs4","Utf7Codec","utf7","unicode11utf7","Utf7Encoder","Utf7Decoder","nonDirectChars","inBase64","base64Accum","base64Regex","plusChar","minusChar","andChar","Utf7IMAPCodec","Utf7IMAPEncoder","base64AccumIdx","Utf7IMAPDecoder","lastI","b64str","canBeDecoded","utf7imap","base64IMAPChars","PrependBOMWrapper","StripBOMWrapper","PrependBOM","StripBOM","stripBOM","stream_module","bomHandling","encodings","skipDecodeWarning","encodingExists","getCodec","toEncoding","fromEncoding","_codecDataCache","_canonicalizeEncoding","codecDef","enableStreamingAPI","supportsStreams","streams","IconvLiteEncoderStream","IconvLiteDecoderStream","decodeStream","conv","decodeStrings","collect","chunks","mLen","eLen","ctor","superCtor","super_","TempCtor","hasToStringTag","callBound","isStandardArguments","isLegacyArguments","supportsStandardArguments","badArrayLike","isCallableMarker","fnToStr","reflectApply","constructorRegex","isES6ClassFn","fnStr","tryFunctionObject","isIE68","isDDA","strClass","getDay","tryDateObject","GeneratorFunction","isFnRegex","generatorFunc","getGeneratorFunc","getPolyfill","shim","polyfill","isRegexMarker","badStringifier","throwRegexMarker","whichTypedArray","keysShim","isArgs","isEnumerable","hasDontEnumBug","hasProtoEnumBug","dontEnums","equalsConstructorPrototype","excludedKeys","$applicationCache","$console","$external","$frame","$frameElement","$frames","$innerHeight","$innerWidth","$onmozfullscreenchange","$onmozfullscreenerror","$outerHeight","$outerWidth","$pageXOffset","$pageYOffset","$parent","$scrollLeft","$scrollTop","$scrollX","$scrollY","$self","$webkitIndexedDB","$webkitStorageInfo","$window","hasAutomationEqualityBug","theKeys","skipProto","skipConstructor","equalsConstructorPrototypeIfNotBuggy","origKeys","originalKeys","keysWorksWithArguments","$propIsEnumerable","originalGetSymbols","source1","nextKey","propValue","lacksProperEnumerationOrder","thrower","assignHasPendingExceptions","TYPED_OK","_has","shrinkBuf","fnTyped","arraySet","src_offs","dest_offs","flattenChunks","fnUntyped","setTyped","Buf8","Buf16","Buf32","adler","Z_TREES","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_BINARY","Z_TEXT","Z_UNKNOWN","crcTable","makeTable","crc","configuration_table","adler32","crc32","MAX_MEM_LEVEL","L_CODES","LITERALS","D_CODES","BL_CODES","HEAP_SIZE","MAX_BITS","MIN_MATCH","MAX_MATCH","MIN_LOOKAHEAD","INIT_STATE","HCRC_STATE","BUSY_STATE","FINISH_STATE","BS_NEED_MORE","BS_BLOCK_DONE","BS_FINISH_STARTED","BS_FINISH_DONE","errorCode","flush_pending","pending_buf","pending_out","total_out","flush_block_only","_tr_flush_block","block_start","strstart","put_byte","putShortMSB","read_buf","total_in","longest_match","cur_match","chain_length","max_chain_length","best_len","prev_length","nice_match","w_size","_win","wmask","w_mask","strend","scan_end1","scan_end","good_match","lookahead","match_start","fill_window","more","_w_size","window_size","hash_size","insert","ins_h","hash_shift","hash_mask","deflate_fast","hash_head","bflush","match_length","_tr_tally","max_lazy_match","last_lit","deflate_slow","max_insert","prev_match","match_available","Config","good_length","max_lazy","nice_length","max_chain","DeflateState","pending_buf_size","gzhead","gzindex","last_flush","w_bits","hash_bits","dyn_ltree","dyn_dtree","bl_tree","l_desc","d_desc","bl_desc","bl_count","heap","heap_len","heap_max","l_buf","lit_bufsize","d_buf","opt_len","static_len","matches","bi_buf","bi_valid","deflateResetKeep","data_type","_tr_init","max_block_size","max_start","deflateInit","deflateSetHeader","old_flush","beg","hcrc","os","bstate","deflate_huff","deflate_rle","_tr_align","_tr_stored_block","avail","tmpDict","dictLength","deflateInfo","dmax","wsize","whave","wnext","s_window","hold","lcode","dcode","lmask","dmask","here","from_source","lencode","distcode","lenbits","distbits","dolen","dodist","sane","inflate_fast","inflate_table","LENS","DISTS","HEAD","BAD","ENOUGH_LENS","ENOUGH_DISTS","zswap32","InflateState","havedict","wbits","ncode","nlen","ndist","work","lendyn","distdyn","back","was","inflateResetKeep","inflateReset2","lenfix","distfix","virgin","fixedtables","updatewindow","inflateInit","put","here_bits","here_op","here_val","last_bits","last_op","last_val","hbuf","inf_leave","xflags","extra_len","inflateGetHeader","inflateInfo","MAXBITS","lbase","lext","dbase","dext","lens_index","table_index","incr","base_index","offs","extra_index","STORED_BLOCK","LENGTH_CODES","Buf_size","MAX_BL_BITS","END_BLOCK","REP_3_6","REPZ_3_10","REPZ_11_138","extra_lbits","extra_dbits","extra_blbits","bl_order","static_ltree","static_dtree","_dist_code","_length_code","base_length","static_l_desc","static_d_desc","static_bl_desc","base_dist","StaticTreeDesc","static_tree","extra_base","max_length","has_stree","TreeDesc","dyn_tree","stat_desc","max_code","d_code","put_short","send_bits","send_code","bi_reverse","gen_codes","next_code","init_block","bi_windup","smaller","_n2","_m2","pqdownheap","compress_block","ltree","dtree","lx","build_tree","stree","xbits","gen_bitlen","scan_tree","curlen","prevlen","nextlen","max_count","min_count","send_tree","static_init_done","stored_len","copy_block","tr_static_init","opt_lenb","static_lenb","max_blindex","black_mask","detect_data_type","build_bl_tree","lcodes","dcodes","blcodes","send_all_trees","STATIC_TREES","bi_flush","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","runClearTimeout","Item","browser","env","argv","cwd","chdir","umask","setFunctionName","hasIndices","unicodeSets","flagsBound","calls","TypeErr","regex","sax","SAXParser","SAXStream","createStream","MAX_BUFFER_LENGTH","Stream","clearBuffers","bufferCheckPosition","lowercase","lowercasetags","looseCase","closed","closedRoot","sawRoot","noscript","BEGIN","strictEntities","ENTITIES","XML_ENTITIES","attribList","xmlns","ns","rootNS","trackPosition","EVENTS","BEGIN_WHITESPACE","beginWhiteSpace","TEXT","starti","textNode","isWhitespace","strictFail","TEXT_ENTITY","OPEN_WAKA","startTagPosition","SCRIPT_ENDING","script","CLOSE_TAG","SGML_DECL","sgmlDecl","nameStart","OPEN_TAG","PROC_INST","procInstName","procInstBody","CDATA","emitNode","cdata","COMMENT","DOCTYPE","doctype","isQuote","SGML_DECL_QUOTED","DOCTYPE_DTD","DOCTYPE_QUOTED","DOCTYPE_DTD_QUOTED","COMMENT_ENDING","COMMENT_ENDED","textopts","CDATA_ENDING","CDATA_ENDING_2","PROC_INST_ENDING","PROC_INST_BODY","nameBody","newTag","openTag","OPEN_TAG_SLASH","ATTRIB","closeTag","attribName","attribValue","ATTRIB_NAME","ATTRIB_VALUE","attrib","ATTRIB_NAME_SAW_WHITE","ATTRIB_VALUE_QUOTED","ATTRIB_VALUE_UNQUOTED","ATTRIB_VALUE_ENTITY_Q","ATTRIB_VALUE_CLOSED","isAttribEnd","ATTRIB_VALUE_ENTITY_U","CLOSE_TAG_SAW_WHITE","notMatch","returnState","unparsedEntities","parsedEntity","parseEntity","entity","entityBody","entityStart","maxAllowed","maxActual","closeText","checkBufferLength","streamWraps","_parser","readable","onend","_decoder","SD","XML_NAMESPACE","XMLNS_NAMESPACE","COMMENT_STARTING","qname","qualName","local","qn","selfClosing","uri","nv","isSelfClosing","closeTo","entityLC","numStr","stringFromCharCode","lowSurrogate","codeUnits","hasDescriptors","$floor","functionLengthIsConfigurable","functionLengthIsWritable","EE","Writable","Duplex","PassThrough","pipeline","ondata","ondrain","_isStdio","onclose","didOnEnd","allowHalfOpen","onEndNT","highWaterMark","getBuffer","_readableState","destroyed","ReadableState","EElistenerCount","OurUint8Array","debugUtil","debuglog","createReadableStreamAsyncIterator","destroyImpl","getHighWaterMark","ERR_STREAM_PUSH_AFTER_EOF","ERR_METHOD_NOT_IMPLEMENTED","ERR_STREAM_UNSHIFT_AFTER_END_EVENT","errorOrDestroy","kProxyEvents","isDuplex","objectMode","readableObjectMode","pipes","pipesCount","flowing","endEmitted","reading","sync","needReadable","emittedReadable","readableListening","resumeScheduled","paused","emitClose","autoDestroy","awaitDrain","readingMore","_destroy","readableAddChunk","addToFront","skipChunkCheck","emitReadable","emitReadable_","onEofChunk","chunkInvalid","_uint8ArrayToBuffer","addChunk","maybeReadMore","_undestroy","undestroy","setEncoding","MAX_HWM","howMuchToRead","computeNewHighWaterMark","maybeReadMore_","updateReadableListening","nReadingNextTick","resume_","consume","endReadable","endReadableNT","wState","nOrig","doRead","pipeOpts","endFn","stdout","unpipe","onunpipe","unpipeInfo","hasUnpiped","onfinish","cleanedUp","pipeOnDrain","dests","asyncIterator","_fromList","ERR_MULTIPLE_CALLBACK","ERR_TRANSFORM_ALREADY_TRANSFORMING","ERR_TRANSFORM_WITH_LENGTH_0","afterTransform","_transformState","transforming","writecb","writechunk","rs","needTransform","writeencoding","prefinish","err2","CorkedRequest","corkReq","pendingcb","corkedRequestsFree","onCorkedFinish","WritableState","realHasInstance","internalUtil","deprecate","ERR_STREAM_CANNOT_PIPE","ERR_STREAM_DESTROYED","ERR_STREAM_NULL_VALUES","ERR_STREAM_WRITE_AFTER_END","ERR_UNKNOWN_ENCODING","nop","writableObjectMode","finalCalled","noDecode","writing","corked","bufferProcessing","onwrite","writelen","onwriteStateUpdate","finishMaybe","errorEmitted","onwriteError","needFinish","bufferedRequest","clearBuffer","afterWrite","lastBufferedRequest","prefinished","bufferedRequestCount","writev","_writev","final","_final","doWrite","onwriteDrain","holder","allBuffers","isBuf","callFinal","need","rState","hasInstance","writeAfterEnd","validChunk","newChunk","decodeChunk","writeOrBuffer","cork","uncork","setDefaultEncoding","endWritable","_Object$setPrototypeO","kLastResolve","kLastReject","kError","kEnded","kLastPromise","kHandlePromise","kStream","createIterResult","readAndResolve","iter","onReadable","AsyncIteratorPrototype","ReadableStreamAsyncIteratorPrototype","lastPromise","wrapForNext","_Object$create","emitErrorAndCloseNT","emitErrorNT","readableDestroyed","writableDestroyed","ERR_STREAM_PREMATURE_CLOSE","eos","onlegacyfinish","writableEnded","readableEnded","onrequest","setHeader","abort","isRequest","popCallback","destroys","destroyer","ERR_INVALID_OPT_VALUE","duplexKey","hwm","highWaterMarkFrom","nenc","retried","_normalizeEncoding","normalizeEncoding","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","utf8CheckByte","utf8CheckExtraBytes","utf8CheckIncomplete","TINF_OK","TINF_DATA_ERROR","Tree","trans","Data","sourceIndex","bitcount","destLen","sltree","sdtree","length_bits","length_base","dist_bits","dist_base","clcidx","code_tree","lengths","tinf_build_bits_base","tinf_build_tree","tinf_getbit","bit","tinf_read_bits","tinf_decode_symbol","tinf_decode_trees","hlit","hdist","hclen","clen","tinf_inflate_block_data","tinf_inflate_uncompressed_block","tinf_build_fixed_trees","bfinal","config","localStorage","trace","isArgumentsObject","isGeneratorFunction","BigIntSupported","SymbolSupported","ObjectToString","numberValue","stringValue","booleanValue","bigIntValue","symbolValue","checkBoxedPrimitive","prototypeValueOf","isMapToString","isSetToString","isWeakMapToString","isWeakSetToString","isArrayBufferToString","working","isDataViewToString","isDataView","isUint8Array","isUint8ClampedArray","isUint16Array","isUint32Array","isInt8Array","isInt16Array","isInt32Array","isBigInt64Array","isBigUint64Array","isWeakMap","isWeakSet","SharedArrayBufferCopy","isSharedArrayBufferToString","isSharedArrayBuffer","isAsyncFunction","isMapIterator","isSetIterator","isGeneratorObject","isWebAssemblyCompiledModule","descriptors","formatRegExp","objects","isNull","noDeprecation","throwDeprecation","traceDeprecation","debugs","debugEnvRegex","NODE_DEBUG","debugEnv","stylize","stylizeNoColor","isBoolean","_extend","stylizeWithColor","formatValue","styleType","primitive","formatPrimitive","visibleKeys","arrayToHash","isError","formatError","braces","toUTCString","formatProperty","formatArray","reduceToSingleString","pid","isNullOrUndefined","isPrimitive","months","getHours","getMinutes","getSeconds","getDate","getMonth","kCustomPromisifiedSymbol","callbackifyOnRejected","newReason","promisify","original","promiseReject","callbackify","callbackified","maybeCb","rej","availableTypedArrays","typedArrays","$slice","superProto","trySlices","tryTypedArrays","xmldocAssumeBrowser","XmlElement","delegate","delegates","XmlTextNode","XmlCDataNode","XmlCommentNode","XmlDocument","onopentag","parser_opentag","onclosetag","parser_closetag","ontext","parser_text","oncdata","parser_cdata","oncomment","parser_comment","ondoctype","parser_doctype","parser_error","_opentag","_closetag","_cdata","_comment","eachChild","childNamed","childrenNamed","childWithAttribute","descendantsNamed","descendantWithPath","descendant","valueWithPath","toStringWithIndent","linebreak","compressed","preserveWhitespace","escapeXML","childIndent","formatText","_doctype","finalText","trimmed","URLBrowserResolver","resolving","headers","headerName","setRequestHeader","onreadystatechange","readyState","ontimeout","fetchUrl","writeFileSync","resolved","saveAs","defaultClientFonts","Roboto","bolditalics","Document","docDefinition","tableLayouts","vfs","_createDoc","getExtendedUrl","printer","bindFS","createPdfKitDocument","urlResolver","_flushDoc","_pdfMakePages","_getPages","ignoreBuffer","_bufferToBlob","blob","_openWindow","win","_openPdf","getBlob","pdfUrl","webkitURL","autoPrint","defaultFileName","getBase64","getDataUrl","getStream","createPdf","canCreatePdf","pdfMake","VirtualFileSystem","fileSystem","dataSystem","fixFilename","dataContent","isAutoColumn","isStarColumn","buildColumnWidths","availableWidth","autoColumns","autoMin","autoMax","starColumns","starMaxMin","starMaxMax","fixedColumns","initial_availableWidth","_minWidth","_maxWidth","elasticWidth","_calcWidth","minW","maxW","starSize","measureMinMax","maxStar","starCount","TextTools","StyleContextStack","ColumnCalculator","fontStringify","getNodeId","qrEncoder","DocMeasure","fontProvider","styleDictionary","defaultStyle","imageMeasure","svgMeasure","textTools","styleStack","autoImageIndex","measureDocument","docStructure","measureNode","auto","_margin","processSingleMargins","currentMargin","flattenStyleArray","flattenedStyles","styleName","convertMargin","flattenedStyleArray","getNodeMargin","extendMargins","measureColumns","measureVerticalContainer","measureUnorderedList","ol","measureOrderedList","measureTable","measureLeaf","toc","measureToc","measureImage","measureSVG","measureCanvas","qr","measureQr","convertIfBase64Image","measureImageWithDimensions","_width","_height","_minHeight","_maxHeight","minHeight","_alignment","writeDimensions","_textRef","_textNodeRef","buildInlines","_inlines","textStyle","numberStyle","textMargin","lineStyle","tocStyle","lineMargin","tocMargin","lineNumberStyle","tocNumberStyle","_nodeRef","_tocItemRef","_table","dontBreakRows","gapSizeForList","sizeOfString","buildUnorderedMarker","gapSize","buildCircle","buildSquare","buildDisc","buildOrderedMarker","prepareAlpha","toAlpha","prepareRoman","CD","XC","XL","IX","roman","counterText","prepareDecimal","textArray","markerColor","_gapSize","listMarker","counterValue","_gap","numGaps","extendTableWidths","_layout","hLineWidth","vLineWidth","hLineColor","vLineColor","hLineStyle","vLineStyle","paddingRight","paddingTop","defaultBorder","getLayout","offsets","totalOffset","prevRightPadding","lOffset","getOffsets","cols","colSpans","rowData","_span","measureCb","markSpans","span","markVSpans","currentMinMax","getMinMax","minDifference","maxDifference","extendWidthsForColSpans","vector","DocPreprocessor","preprocessDocument","tocs","nodeReferences","preprocessNode","preprocessColumns","preprocessVerticalContainer","preprocessList","preprocessTable","preprocessText","preprocessToc","preprocessImage","preprocessSVG","preprocessCanvas","preprocessQr","pageReference","textReference","tocItem","tocItemId","_pseudo","tocItemRef","_getNodeForNodeRef","_pageRef","isSetParentNode","TraversalTracker","DocumentContext","pageSize","pageMargins","availableHeight","snapshots","endingCell","tracker","backgroundLength","beginColumnGroup","bottomMost","lastColumnWidth","beginColumn","saved","calculateBottomMost","destContext","saveContextInEndingCell","c1","bottomMostContext","markEnding","_columnEndingContext","completeColumnGroup","addMargin","initializePage","getCurrentPage","pageSnapshot","moveToRelative","beginDetachedBlock","endDetachedBlock","getPageSize","currentPage","newPageOrientation","pageOrientationString","currentPageOrientation","orientation","moveToNextPage","pageOrientation","nextPageIndex","prevPage","createNewPage","currentAvailableWidth","newPageCreated","getCurrentPosition","innerHeight","pageNumber","pageInnerHeight","pageInnerWidth","verticalRatio","horizontalRatio","Line","offsetVector","ElementWriter","contextStack","addPageItem","addLine","dontUpdateContextPosition","getHeight","getCurrentPositionOnPage","alignLine","inlines","newLineForced","lastLineInParagraph","additionalSpacing","justifyShift","addImage","absolutePosition","alignImage","addSVG","addQr","_canvas","addVector","imageWidth","alignCanvas","canvasWidth","ignoreContextX","ignoreContextY","beginClip","endClip","addFragment","useBlockXOffset","useBlockYOffset","_node","img","pushContext","contextOrWidth","popContext","FontProvider","fontDescriptors","pdfKitDoc","fontCache","fontDef","getFontType","typeName","getFontFile","familyName","provideFont","variable","nodeId","isPattern","getPattern","ImageMeasure","imageDictionary","realImageSrc","PageElementWriter","TableProcessor","addAll","otherArray","LayoutBuilder","registerTableLayouts","layoutDocument","watermark","pageBreakBeforeFct","addPageBreaksIfNecessary","linearNodeList","nodeInfo","startPosition","pageNumbers","pageBreak","pageBreakCalculated","followingNodesOnPage","nodesOnNextPage","previousNodesOnPage","resetXYs","resetXY","docPreprocessor","docMeasure","tryLayoutDocument","writer","startTracking","addBackground","processNode","addHeadersAndFooters","addWatermark","backgroundGetter","pageBackground","beginUnbreakableBlock","commitUnbreakableBlock","addStaticRepeatable","headerOrFooter","sizeFunction","addDynamicRepeatable","nodeGetter","pageIndex","sizes","headerSizeFct","footerSizeFct","rotatedSize","styleContextStack","sizeOfRotatedText","getWatermarkFontSize","watermarkObject","_size","getWatermarkSize","decorateNode","applyMargins","unbreakable","absPosition","relPosition","relativePosition","processVerticalContainer","processColumns","processList","processTable","processLeaf","processToc","processImage","processSVG","processCanvas","processQr","columnNode","gaps","gapArray","processRow","tableBody","tableRow","pageBreaks","pageDesc","leftOffset","colLeftOffset","getEndingCell","columnIndex","endingRow","orderedList","nextMarker","markerLine","addInline","getAscenderHeight","tableNode","processor","beginTable","rowHeights","beginRow","endRow","endTable","buildNextLine","currentHeight","_pageNodeRef","cloneInline","inline","newInline","isForceContinue","hasEnoughSpaceForInline","isHardWrap","noWrap","getAvailableWidth","widthPerChar","maxChars","fontFeatures","noNewLine","leadingCut","trailingCut","inlineWidths","nextInlines","inlineWidth","inlineTrailingCut","nextInline","lineEnd","transactionLevel","repeatables","fitOnPage","addFct","fragment","nextPage","rep","insertedOnPages","originalX","forcedX","forcedY","unbreakableContext","nbPages","currentBlockToRepeatable","pushToRepeatables","popFromRepeatables","PdfKit","getEngineInstance","createPdfDocument","PdfKitEngine","SVGMeasure","textDecorator","findFont","requiredFonts","requiredFont","PdfPrinter","createMetadata","standardizePropertyKey","standardizedKey","fixPageMargins","updatePageOrientationInOptions","previousPageOrientation","offsetText","renderLine","preparePageNodeRefLine","newWidth","diffWidth","drawBackground","shiftToBaseline","shiftedY","linkToPage","drawDecorations","renderWatermark","renderVector","gradient","pn","renderImage","renderSVG","fontsFamily","isNeedSwapPageSizes","pageSize2widthAndHeight","fixPageSize","pdfOptions","language","builder","noBorders","headerLineOnly","headerRows","lightHorizontalLines","pageBreakBefore","maxNumberPages","maxPagesNumber","pageHeight","getItemHeight","getBottomPosition","fixedMargins","bottomPosition","calculatePageHeight","patternDefinitions","boundingBox","colored","createPatterns","progressCallback","totalItems","renderedItems","renderPages","printActionRef","OpenAction","VERSIONS","MODE_NUMERIC","MODE_ALPHANUMERIC","MODE_OCTET","NUMERIC_REGEXP","ALPHANUMERIC_REGEXP","ALPHANUMERIC_OUT_REGEXP","ECCLEVEL_L","ECCLEVEL_M","ECCLEVEL_Q","ECCLEVEL_H","GF256_MAP","GF256_INVMAP","GF256_GENPOLY","prevpoly","poly","ALPHANUMERIC_MAP","MASKFUNCS","needsverinfo","ver","ndatabits","ecclevel","nfullbits","ndatalenbits","getmaxdatalen","validatedata","newdata","calculateecc","genpoly","modulus","polylen","genpolylen","quotient","augumentbch","maskdata","reserved","maskf","putformatinfo","evaluatematrix","evaluategroup","score","nblacks","nextrow","maxbuflen","datalen","nlenbits","nblocks","subsizes","subsize","subsize0","pivot","eccs","nitemsperblock","augumenteccs","getsizebyver","blit","aligns","maxj","makebasematrix","putdata","bestmask","bestscore","buildCanvas","foreground","MODES","ECCLEVELS","eccLevel","generateFrame","modSize","paddingXY","cd","styleOverrides","styleNameOrOverride","howMany","autopush","styleNames","styleOverrideObject","pushStyleOverrideObject","pushedItems","xmldoc","stripUnits","textVal","parseSVG","svgString","docWidth","docHeight","viewBoxParts","getTableInnerContentWidth","rowSpanData","rsd","lastWidth","prepareRowSpanData","cleanUpRepeatables","rowsWithoutPageBreak","keepWithHeaderRows","colIndex","rowOffset","setBorder","colOffset","borderIndex","borderValue","prepareCellBorders","drawHorizontalLine","onRowBreak","rowPaddingTop","topLineWidth","reservedAtBottom","bottomLineWidth","rowPaddingBottom","rowCallback","rowTopY","overrideY","cellAbove","currentCell","rowCellAbove","shouldDrawLine","topBorder","bottomBorder","rowBottomBorder","_rowSpanCurrentOffset","colSpanIndex","drawVerticalLine","vLineColIndex","vLineRowIndex","beforeVLineColIndex","cellBefore","rowCellBeforeAbove","rowCurrentCellAbove","stopTracking","endingPage","endingY","_colSpan","getLineXs","ys","hasBreaks","yi","yl","willBreak","rowBreakWithoutHeader","hzLineOffset","leftCellBorder","rightCellBorder","overlayPattern","overlayOpacity","widthRightBorder","widthLeftBorder","x1f","y1f","bgWidth","bgHeight","hLineWhenBroken","headerRepeatable","drawDecoration","firstInline","biggerInline","maxInline","lineAscent","lw","decorationStyle","decorationColor","nbDashes","rdx","nbDots","sh","nbWaves","rwx","decorationItem","groupDecorations","LineBreaker","LEADING","TRAILING","splitWords","copyStyle","normalizeString","getStyleProperty","currentLineWidth","measured","normalized","getOneWord","tmpWords","lastWord","normalizeTextArray","leadingIndent","fontName","preserveTrailingSpaces","leadingSpaces","trailingSpaces","angleRad","callbacks","innerFunction","autoBom","MouseEvent","initMouseEvent","HTMLAnchorElement","rel","msSaveOrOpenBlob","safari","FileReader","onloadend","readAsDataURL","_inheritsLoose","allowArrayLike","_interopDefault","brotli","fontkit","formats","_applyDecoratedDescriptor","decorators","initializer","decorator","registerFormat","openSync","probe","getFont","defaultLanguage","setDefaultLanguage","SubHeader","firstCode","entryCount","idDelta","idRangeOffset","CmapGroup","startCharCode","endCharCode","glyphID","UnicodeValueRange","startUnicodeValue","additionalCount","UVSMapping","unicodeValue","DefaultUVS","NonDefaultUVS","VarSelectorRecord","varSelector","defaultUVS","nonDefaultUVS","CmapSubtable","codeMap","subHeaderKeys","subHeaderCount","subHeaders","glyphIndexArray","segCountX2","segCount","searchRange","entrySelector","rangeShift","endCode","reservedPad","startCode","glyphIndices","is32","nGroups","numRecords","varSelectors","CmapEntry","platformID","encodingID","numSubtables","revision","checkSumAdjustment","magicNumber","created","modified","xMin","yMin","xMax","yMax","lowestRecPPEM","fontDirectionHint","indexToLocFormat","glyphDataFormat","hhea","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","caretOffset","metricDataFormat","numberOfMetrics","HmtxEntry","bearing","hmtx","metrics","bearings","maxp","numGlyphs","maxPoints","maxContours","maxComponentPoints","maxComponentContours","maxZones","maxTwilightPoints","maxStorage","maxFunctionDefs","maxInstructionDefs","maxStackElements","maxSizeOfInstructions","maxComponentElements","maxComponentDepth","getEncoding","languageID","MAC_LANGUAGE_ENCODINGS","ENCODINGS","LANGUAGES","NameRecord","nameID","stringOffset","LangTagRecord","NameTable","records","langTagCount","langTags","NAMES","record","en","OS2","xAvgCharWidth","usWeightClass","usWidthClass","fsType","ySubscriptXSize","ySubscriptYSize","ySubscriptXOffset","ySubscriptYOffset","ySuperscriptXSize","ySuperscriptYSize","ySuperscriptXOffset","ySuperscriptYOffset","yStrikeoutSize","yStrikeoutPosition","panose","ulCharRange","vendorID","fsSelection","usFirstCharIndex","usLastCharIndex","typoAscender","typoDescender","typoLineGap","winAscent","winDescent","codePageRange","defaultChar","breakChar","maxContent","usLowerOpticalPointSize","usUpperOpticalPointSize","underlinePosition","underlineThickness","minMemType42","maxMemType42","minMemType1","maxMemType1","numberOfGlyphs","glyphNameIndex","cvt","controlValues","fpgm","instructions","loca","prep","controlValueProgram","glyf","CFFIndex","getCFFVersion","hdrSize","offSize","_i22","_sizes","_step3","_iterator3","_item","FLOAT_LOOKUP","FLOAT_ENCODE_LOOKUP","CFFOperand","forceLarge","FLOAT_EOF","CFFDict","ops","_step4","_iterator4","decodeOperands","operands","encodeOperands","_field","dict","_step5","_iterator5","_step6","_iterator6","_step7","_iterator7","_step8","_iterator8","_op","CFFPointer","_r$Pointer","_proto3","Ptr","CFFPrivateDict","CFFBlendOp","numBlends","standardStrings","StandardEncoding","ISOAdobeCharset","LangSysTable","reqFeatureIndex","featureCount","featureIndexes","LangSysRecord","langSys","Script","defaultLangSys","langSysRecords","ScriptRecord","ScriptList","Feature","featureParams","lookupCount","lookupListIndexes","FeatureRecord","FeatureList","LookupFlags","markAttachmentType","LookupList","SubTable","Lookup","lookupType","subTableCount","subTables","markFilteringSet","useMarkFilteringSet","RangeRecord","startCoverageIndex","Coverage","glyphCount","rangeCount","rangeRecords","ClassRangeRecord","ClassDef","startGlyph","classValueArray","classRangeCount","classRangeRecord","Device","deltaFormat","LookupRecord","sequenceIndex","lookupListIndex","Rule","lookupRecords","RuleSet","ClassRule","ClassSet","coverage","ruleSetCount","ruleSets","classDef","classSetCnt","classSet","coverages","ChainRule","backtrackGlyphCount","backtrack","inputGlyphCount","lookaheadGlyphCount","ChainRuleSet","ChainingContext","chainCount","chainRuleSets","backtrackClassDef","inputClassDef","lookaheadClassDef","chainClassSet","backtrackCoverage","inputCoverage","lookaheadCoverage","F2DOT14","RegionAxisCoordinates","startCoord","peakCoord","endCoord","VariationRegionList","axisCount","regionCount","variationRegions","DeltaSet","shortDeltas","shortDeltaCount","regionDeltas","regionIndexCount","deltas","ItemVariationData","itemCount","regionIndexes","deltaSets","ItemVariationStore","variationRegionList","variationDataCount","itemVariationData","ConditionTable","axisIndex","filterRangeMinValue","filterRangeMaxValue","ConditionSet","conditionCount","conditionTable","FeatureTableSubstitutionRecord","featureIndex","alternateFeatureTable","FeatureTableSubstitution","substitutionCount","substitutions","FeatureVariationRecord","conditionSet","featureTableSubstitution","FeatureVariations","majorVersion","minorVersion","featureVariationRecordCount","featureVariationRecords","PredefinedOp","predefinedOps","_proto5","CFFEncodingVersion","_r$Number","Range1","nLeft","Range2","CFFEncoding","nCodes","nRanges","ranges","RangeArray","_r$Array","CFFCustomCharset","CharStrings","CFFCharset","FDRange3","fd","FDRange4","FDSelect","fds","CFFPrivateOp","_proto8","FontDict","CFFTopDict","VariationStore","itemVariationStore","CFF2TopDict","CFFTop","nameIndex","topDictIndex","stringIndex","globalSubrIndex","topDict","CFFFont","_proto9","isCIDFont","ROS","sid","getCharString","getGlyphName","charset","fdForGlyph","privateDictForGlyph","FDArray","Private","FullName","FamilyName","VerticalOrigin","glyphIndex","vertOriginY","VORG","defaultVertOriginY","numVertOriginYMetrics","BigMetrics","horiBearingX","horiBearingY","horiAdvance","vertBearingX","vertBearingY","vertAdvance","SmallMetrics","bearingX","bearingY","EBDTComponent","ByteAligned","BitAligned","SBitLineMetrics","numComponents","dataLen","widthMax","caretSlopeNumerator","caretSlopeDenominator","minOriginSB","minAdvanceSB","maxBeforeBL","minAfterBL","CodeOffsetPair","glyphCode","IndexSubtable","imageFormat","imageDataOffset","offsetArray","lastGlyphIndex","firstGlyphIndex","imageSize","bigMetrics","glyphArray","glyphCodeArray","IndexSubtableArray","BitmapSizeTable","indexSubTableArray","indexTablesSize","numberOfIndexSubTables","colorRef","hori","startGlyphIndex","endGlyphIndex","ppemX","ppemY","bitDepth","EBLC","numSizes","ImageTable","ppem","resolution","imageOffsets","sbix","numImgTables","imageTables","LayerRecord","paletteIndex","BaseGlyphRecord","firstLayerIndex","numLayers","COLR","numBaseGlyphRecords","baseGlyphRecord","layerRecords","numLayerRecords","ColorRecord","CPAL","numPaletteEntries","numPalettes","numColorRecords","colorRecords","colorRecordIndices","offsetPaletteTypeArray","offsetPaletteLabelArray","offsetPaletteEntryLabelArray","BaseCoord","coordinate","referenceGlyph","baseCoordPoint","deviceTable","BaseValues","defaultIndex","baseCoordCount","baseCoords","FeatMinMaxRecord","minCoord","maxCoord","MinMax","featMinMaxCount","featMinMaxRecords","BaseLangSysRecord","minMax","BaseScript","defaultMinMax","baseLangSysCount","baseLangSysRecords","BaseScriptRecord","BaseScriptList","BaseTagList","Axis","baseTagList","baseScriptList","BASE","horizAxis","vertAxis","AttachPoint","AttachList","attachPoints","CaretValue","caretValuePoint","LigGlyph","LigCaretList","ligGlyphCount","ligGlyphs","MarkGlyphSetsDef","markSetTableFormat","markSetCount","GDEF","glyphClassDef","attachList","ligCaretList","markAttachClassDef","markGlyphSetsDef","ValueFormat","xPlacement","yPlacement","xPlaDevice","yPlaDevice","xAdvDevice","yAdvDevice","ValueRecord","_proto10","buildStruct","PairValueRecord","secondGlyph","value1","value2","PairSet","Class2Record","Anchor","xCoordinate","yCoordinate","anchorPoint","xDeviceTable","yDeviceTable","EntryExitRecord","entryAnchor","exitAnchor","MarkRecord","markAnchor","MarkArray","BaseRecord","classCount","BaseArray","ComponentRecord","LigatureAttach","LigatureArray","GPOSLookup","valueFormat","valueCount","valueFormat1","valueFormat2","pairSetCount","pairSets","classDef1","classDef2","class1Count","class2Count","classRecords","entryExitCount","entryExitRecords","markCoverage","baseCoverage","markArray","baseArray","ligatureCoverage","ligatureArray","mark1Coverage","mark2Coverage","mark1Array","mark2Array","posFormat","extension","GPOS","scriptList","featureList","lookupList","featureVariations","Sequence","AlternateSet","Ligature","compCount","LigatureSet","GSUBLookup","deltaGlyphID","substitute","substFormat","sequences","alternateSet","ligatureSets","substitutes","GSUB","JstfGSUBModList","JstfPriority","shrinkageEnableGSUB","shrinkageDisableGSUB","shrinkageEnableGPOS","shrinkageDisableGPOS","shrinkageJstfMax","extensionEnableGSUB","extensionDisableGSUB","extensionEnableGPOS","extensionDisableGPOS","extensionJstfMax","JstfLangSys","JstfLangSysRecord","jstfLangSys","JstfScript","extenderGlyphs","langSysCount","JstfScriptRecord","JSTF","scriptCount","VariableSizeNumber","_proto11","MapDataEntry","entryFormat","outerIndex","innerIndex","DeltaSetIndexMap","mapCount","mapData","HVAR","advanceWidthMapping","LSBMapping","RSBMapping","Signature","SignatureBlock","cbSignature","DSIG","ulVersion","usNumSigs","usFlag","signatures","signatureBlocks","GaspRange","rangeMaxPPEM","rangeGaspBehavior","gasp","numRanges","gaspRanges","DeviceRecord","pixelSize","maximumWidth","hdmx","sizeDeviceRecord","KernPair","ClassTable","firstGlyph","nGlyphs","Kern2Array","leftTable","rowWidth","KernSubtable","nPairs","rightTable","kernValueCount","leftClassCount","rightClassCount","kernValue","leftClass","rightClass","kernIndex","KernTable","subVersion","tupleIndex","kern","nTables","LTSH","yPels","PCLT","fontNumber","typeFamily","symbolSet","typeface","characterComplement","strokeWeight","widthType","serifStyle","Ratio","bCharSet","xRatio","yStartRatio","yEndRatio","vTable","yPelHeight","VdmxGroup","recs","startsz","endsz","VDMX","numRecs","numRatios","ratioRanges","vhea","advanceHeightMax","minTopSideBearing","minBottomSideBearing","yMaxExtent","VmtxEntry","vmtx","shortFrac","Correspondence","fromCoord","toCoord","Segment","pairCount","correspondence","avar","UnboundedArrayAccessor","_proto12","getItem","UnboundedArray","_r$Array2","LookupTable","ValueType","Shadow","_proto14","BinarySearchHeader","unitSize","nUnits","LookupSegmentSingle","lastGlyph","LookupSegmentArray","LookupSingle","binarySearchHeader","StateTable","entryData","newState","Entry","StateArray","nClasses","classTable","stateArray","entryTable","BslnSubtable","mappingData","standardGlyph","controlPoints","bsln","defaultBaseline","Setting","setting","FeatureName","nSettings","settingTable","featureFlags","defaultSetting","feat","featureNameCount","reserved1","reserved2","featureNames","Axis$1","axisTag","minValue","maxValue","Instance","coord","postscriptNameID","instanceSize","fvar","offsetToData","countSizePairs","axisSize","instanceCount","axis","shortFrac$1","Offset","gvar","globalCoordCount","globalCoords","ClassTable$1","subFeatureFlags","ClassLookupTable","newStateOffset","WidthDeltaRecord","justClass","beforeGrowLimit","beforeShrinkLimit","afterGrowLimit","afterShrinkLimit","growFlags","shrinkFlags","WidthDeltaCluster","ActionData","lowerLimit","upperLimit","addGlyph","substThreshold","substGlyph","variationAxis","minimumLimit","noStretchValue","maximumLimit","Action","actionClass","actionType","actionLength","actionData","PostcompensationAction","PostCompensationTable","lookupTable","JustificationTable","wdcOffset","postCompensationTable","widthDeltaClusters","just","horizontal","vertical","LigatureData","ContextualData","markIndex","currentIndex","InsertionData","currentInsertIndex","markedInsertIndex","SubstitutionTable","SubtableData","substitutionTable","ligatureActions","ligatureList","insertionActions","Subtable","FeatureEntry","featureType","featureSetting","enableFlags","disableFlags","MorxChain","defaultFlags","chainLength","nFeatureEntries","nSubtables","subtables","morx","unused","nChains","chains","OpticalBounds","opbd","CBLC","_class","TableEntry","checkSum","Directory","numTables","binarySearch","cmp","_step9","_iterator9","tables$1","maxExponentFor2","maxPowerOf2","CmapProcessor","cmapTable","findSubtable","_step10","_iterator10","uvs","_proto15","_step11","_iterator11","_step12","_step11$value","_iterator12","variationSelector","getVariationSelector","rangeOffset","_gid","_min","_max","_mid","getCharacterSet","endCodes","_step13","_iterator13","codePointsForGlyph","_res2","_step14","_res3","_iterator14","_step15","_res4","_iterator15","_group","KernProcessor","_proto16","getKerning","_step16","_iterator16","crossStream","variation","pairIdx","pair","rightOffset","UnicodeLayoutEngine","_proto17","positionGlyphs","clusterStart","clusterEnd","isMark","positionCluster","baseBox","cbox","yGap","markBox","combiningClass","getCombiningClass","_proto18","addPoint","UNICODE_SCRIPTS","Caucasian_Albanian","Arabic","Imperial_Aramaic","Armenian","Avestan","Balinese","Bamum","Bassa_Vah","Batak","Bengali","Bopomofo","Brahmi","Braille","Buginese","Buhid","Chakma","Canadian_Aboriginal","Carian","Cham","Cherokee","Coptic","Cypriot","Cyrillic","Devanagari","Deseret","Duployan","Egyptian_Hieroglyphs","Elbasan","Ethiopic","Georgian","Glagolitic","Gothic","Grantha","Greek","Gujarati","Gurmukhi","Hangul","Han","Hanunoo","Hebrew","Hiragana","Pahawh_Hmong","Katakana_Or_Hiragana","Old_Italic","Javanese","Kayah_Li","Katakana","Kharoshthi","Khmer","Khojki","Kannada","Kaithi","Tai_Tham","Lao","Latin","Lepcha","Limbu","Linear_A","Linear_B","Lisu","Lycian","Lydian","Mahajani","Mandaic","Manichaean","Mende_Kikakui","Meroitic_Cursive","Meroitic_Hieroglyphs","Malayalam","Modi","Mongolian","Mro","Meetei_Mayek","Myanmar","Old_North_Arabian","Nabataean","Nko","Ogham","Ol_Chiki","Old_Turkic","Oriya","Osmanya","Palmyrene","Pau_Cin_Hau","Old_Permic","Phags_Pa","Inscriptional_Pahlavi","Psalter_Pahlavi","Phoenician","Miao","Inscriptional_Parthian","Rejang","Runic","Samaritan","Old_South_Arabian","Saurashtra","Shavian","Sharada","Siddham","Khudawadi","Sinhala","Sora_Sompeng","Sundanese","Syloti_Nagri","Syriac","Tagbanwa","Takri","Tai_Le","New_Tai_Lue","Tamil","Tai_Viet","Telugu","Tifinagh","Tagalog","Thaana","Thai","Tibetan","Tirhuta","Ugaritic","Vai","Warang_Citi","Old_Persian","Cuneiform","Yi","Inherited","Common","Unknown","OPENTYPE_SCRIPTS","_step17","_iterator17","RTL","arab","hebr","syrc","thaa","cprt","khar","phnx","lydi","avst","armi","phli","prti","sarb","orkh","samr","mand","merc","mero","mani","mend","nbat","narb","palm","phlp","GlyphRun","direction$1","_step18","_iterator18","_step19","_iterator19","_step20","_iterator20","GlyphPosition","allTypographicFeatures","exclusive","allTypeFeatures","ligatures","requiredLigatures","commonLigatures","rareLigatures","rebusPictures","diphthongLigatures","squaredLigatures","abbrevSquaredLigatures","symbolLigatures","contextualLigatures","historicalLigatures","cursiveConnection","unconnected","partiallyConnected","cursive","letterCase","verticalSubstitution","substituteVerticalForms","linguisticRearrangement","numberSpacing","monospacedNumbers","proportionalNumbers","thirdWidthNumbers","quarterWidthNumbers","smartSwash","wordInitialSwashes","wordFinalSwashes","nonFinalSwashes","diacritics","showDiacritics","hideDiacritics","decomposeDiacritics","verticalPosition","normalPosition","superiors","inferiors","ordinals","scientificInferiors","fractions","noFractions","verticalFractions","diagonalFractions","overlappingCharacters","preventOverlap","typographicExtras","slashedZero","mathematicalExtras","mathematicalGreek","ornamentSets","noOrnaments","dingbats","piCharacters","fleurons","decorativeBorders","internationalSymbols","mathSymbols","characterAlternatives","noAlternates","designComplexity","designLevel1","designLevel2","designLevel3","designLevel4","designLevel5","styleOptions","noStyleOptions","displayText","engravedText","illuminatedCaps","titlingCaps","tallCaps","characterShape","traditionalCharacters","simplifiedCharacters","JIS1978Characters","JIS1983Characters","JIS1990Characters","traditionalAltOne","traditionalAltTwo","traditionalAltThree","traditionalAltFour","traditionalAltFive","expertCharacters","JIS2004Characters","hojoCharacters","NLCCharacters","traditionalNamesCharacters","numberCase","lowerCaseNumbers","upperCaseNumbers","textSpacing","proportionalText","monospacedText","halfWidthText","thirdWidthText","quarterWidthText","altProportionalText","altHalfWidthText","transliteration","noTransliteration","annotation","noAnnotation","boxAnnotation","roundedBoxAnnotation","circleAnnotation","invertedCircleAnnotation","parenthesisAnnotation","periodAnnotation","romanNumeralAnnotation","diamondAnnotation","invertedBoxAnnotation","invertedRoundedBoxAnnotation","kanaSpacing","fullWidthKana","proportionalKana","ideographicSpacing","fullWidthIdeographs","proportionalIdeographs","halfWidthIdeographs","unicodeDecomposition","canonicalComposition","compatibilityComposition","transcodingComposition","rubyKana","CJKSymbolAlternatives","noCJKSymbolAlternatives","CJKSymbolAltOne","CJKSymbolAltTwo","CJKSymbolAltThree","CJKSymbolAltFour","CJKSymbolAltFive","ideographicAlternatives","noIdeographicAlternatives","ideographicAltOne","ideographicAltTwo","ideographicAltThree","ideographicAltFour","ideographicAltFive","CJKVerticalRomanPlacement","CJKVerticalRomanCentered","CJKVerticalRomanHBaseline","italicCJKRoman","CJKItalicRoman","caseSensitiveLayout","caseSensitiveSpacing","alternateKana","alternateHorizKana","alternateVertKana","stylisticAlternatives","noStylisticAlternates","stylisticAltOne","stylisticAltTwo","stylisticAltThree","stylisticAltFour","stylisticAltFive","stylisticAltSix","stylisticAltSeven","stylisticAltEight","stylisticAltNine","stylisticAltTen","stylisticAltEleven","stylisticAltTwelve","stylisticAltThirteen","stylisticAltFourteen","stylisticAltFifteen","stylisticAltSixteen","stylisticAltSeventeen","stylisticAltEighteen","stylisticAltNineteen","stylisticAltTwenty","contextualAlternates","swashAlternates","contextualSwashAlternates","lowerCase","defaultLowerCase","lowerCaseSmallCaps","lowerCasePetiteCaps","upperCase","defaultUpperCase","upperCaseSmallCaps","upperCasePetiteCaps","languageTag","CJKRomanSpacing","halfWidthCJKRoman","proportionalCJKRoman","defaultCJKRoman","fullWidthCJKRoman","OTMapping","rlig","clig","dlig","hlig","liga","smcp","pcap","frac","dnom","numr","afrc","case","ccmp","cpct","valt","swsh","cswh","curs","c2pc","c2sc","fin2","medi","med2","fin3","fina","pkna","halt","hkna","vkna","ital","lnum","onum","mgrk","calt","vrt2","tnum","pnum","sups","subs","ordn","pwid","hwid","qwid","twid","fwid","palt","trad","smpl","jp78","jp83","jp90","jp04","expt","hojo","nlck","tnam","ruby","titl","ss01","ss02","ss03","ss04","ss05","ss06","ss07","ss08","ss09","ss10","ss11","ss12","ss13","ss14","ss15","ss16","ss17","ss18","ss19","ss20","_class$1","AATMapping","ot","aat","mapFeatureStrings","typeCode","settingCode","_class$2","AATLookupTable","_proto19","glyphsForValue","classValue","_step21","_iterator21","_step22","_iterator22","_segment","AATStateMachine","_proto20","processEntry","currentState","classCode","shouldAdvance","entryIndex","traverse","_this$stateTable","_step23","_iterator23","REVERSE_DIRECTION","AATMorxProcessor","processIndicRearragement","processContextualSubstitution","processLigature","processNoncontextualSubstitutions","processGlyphInsertion","inputCache","_proto21","_step24","_iterator24","_step25","_iterator25","_step26","_iterator26","processSubtable","ligatureStack","markedGlyph","markedIndex","stateMachine","getStateMachine","getProcessor","verb","reorderGlyphs","subsitutions","_lookup","_lookupTable","_this$ligatureStack","actionIndex","ligatureIndex","ligatureGlyphs","_codePoints","componentGlyph","ligatureEntry","_insertGlyphs","insertionActionIndex","isBefore","_this$glyphs","insertions","_count","_isBefore","getSupportedFeatures","_step27","_iterator27","_step28","_iterator28","generateInputs","generateInputCache","_step29","_iterator29","_step30","_iterator30","generateInputsForSubtable","_stack$pop","rangeA","rangeB","reverseA","reverseB","AATLayoutEngine","morxProcessor","fallbackPosition","_proto22","glyphRun","mapOTToAAT","getAvailableFeatures","_feature","_r","_f","mapAATToOT","stringsForGlyph","_step31","glyphStrings","_iterator31","_addStrings","_step32","_iterator32","_cmapProcessor","ShapingPlan","stages","globalFeatures","allFeatures","_proto23","_addFeatures","_step33","stageIndex","stage","_iterator33","addStage","setFeatureOverrides","assignGlobalFeatures","_step34","_iterator34","_step35","_iterator35","applyFeatures","VARIATION_FEATURES","COMMON_FEATURES","FRACTIONAL_FEATURES","HORIZONTAL_FEATURES","DIRECTIONAL_FEATURES","ltr","rtl","DefaultShaper","plan","_plan","planPreprocessing","planFeatures","planPostprocessing","assignFeatures","userFeatures","isDigit","trie","FEATURES","ShapingClasses","ISOL","FINA","FIN2","MEDI","MED2","INIT","STATE_TABLE","ArabicShaper","_DefaultShaper","curAction","prevAction","getShapingClass","_STATE_TABLE$state$ty","category","getCategory","GlyphIterator","_proto24","shouldIgnore","ignoreMarks","ignoreBaseGlyphs","isBase","ignoreLigatures","isLigature","peek","increment","peekIndex","DEFAULT_SCRIPTS","OTProcessor","lookups","variationsIndex","_variationProcessor","findVariationsIndex","normalizedCoords","selectScript","ligatureID","currentFeature","_proto25","findScript","_step36","_iterator36","_step37","_iterator37","changed","_step38","_iterator38","_step39","_iterator39","substituteFeature","substituteFeatureForVariations","lookupsForFeatures","exclude","_step40","_iterator40","_step41","_iterator41","lookupIndex","_step42","_iterator42","substitution","variations","conditions","variationConditionsMatch","applyLookups","glyphIterator","_step43","_iterator43","_step43$value","_step44","_iterator44","applyLookup","applyLookupList","_step45","_iterator45","lookupRecord","_step46","_iterator46","coverageIndex","_step47","_iterator47","sequenceMatches","component","sequenceMatchIndices","coverageSequenceMatches","getClassID","_step48","_iterator48","classSequenceMatches","_this6","classID","applyContext","_step49","_iterator49","_step50","_iterator50","_rule","applyChainingContext","_step51","_iterator51","_step52","_iterator52","_rule2","GlyphInfo","ligatureComponent","isLigated","cursiveAttachment","markAttachment","shaperInfo","substituted","isMultiplied","HangulShaper","_DefaultShaper2","getType","_STATE_TABLE$1$state$","STATE_TABLE$1","DECOMPOSE","hasGlyphForCodePoint","decompose","COMPOSE","compose","TONE_MARK","reorderToneMark","INVALID","insertDottedCircle","HANGUL_BASE","HANGUL_COUNT","L_BASE","V_BASE","T_BASE","V_COUNT","T_COUNT","L_END","V_END","T_END","DOTTED_CIRCLE","isL","isV","isT","isTone","isLVT","isLV","isCombiningL","isCombiningV","isCombiningT","LV","LVT","glyphForCodePoint","ljmo","vjmo","tjmo","lv","prevType","dottedCircle","indicMachine","useData","categories","decompositions","CATEGORIES","POSITIONS","Start","Ra_To_Become_Reph","Pre_M","Pre_C","Base_C","After_Main","Above_C","Before_Sub","Below_C","After_Sub","Before_Post","Post_C","After_Post","Final_C","SMVD","End","CONSONANT_FLAGS","JOINER_FLAGS","HALANT_OR_COENG_FLAGS","INDIC_CONFIGS","Default","hasOldSpec","virama","basePos","rephPos","rephMode","blwfMode","INDIC_DECOMPOSITIONS","decompositions$1","trie$1","IndicShaper","_DefaultShaper3","setupSyllables","initialReordering","finalReordering","unicodeScript","fromOpenType","indicConfig","isOldSpec","decomposed","indicCategory","indicPosition","IndicInfo","syllableType","_step53","_iterator53","_step53$value","isConsonant","isJoiner","isHalantOrCoeng","wouldSubstitute","_step54","_iterator54","_glyph$features","_layoutEngine","GSUBProcessor","consonantPosition","consonant","nextSyllable","_glyphs$start$shaperI","hasReph","rphf","_g","seenBelow","_info2","disallowDoubleHalants","_i9","_info3","_i10","_i11","_i12","blwf","_i13","_i14","abvf","pstf","_i15","_i16","cfar","_i17","nonJoiner","tryPref","BASE_C","_i18","newPos","_i19","oldPos","newRephPos","_i20","reph","_i21","_newPos","_oldPos2","_oldPos","_tmp","categories$1","decompositions$2","trie$2","stateMachine$1","UniversalShaper","_DefaultShaper4","setupSyllables$1","clearSubstitutionFlags","recordRphf","recordPref","reorder","useCategory","USEInfo","_step55","_iterator55","_step55$value","_step56","_iterator56","_step57","_iterator57","_step58","_iterator58","nextSyllable$1","isHalant","SHAPERS","mong","phag","hang","bng2","beng","dev2","deva","gjr2","gujr","guru","gur2","knda","knd2","mlm2","mlym","ory2","orya","taml","tml2","telu","tel2","khmr","bali","batk","brah","bugi","buhd","cakm","cham","dupl","egyp","gran","hano","java","kthi","kali","khoj","sind","lepc","limb","mahj","mtei","modi","hmng","rjng","saur","shrd","sidd","sinh","sund","sylo","tglg","tagb","tale","lana","tavt","takr","tibt","tfng","tirh","latn","DFLT","_OTProcessor","_this7","_this$glyphs2","curGlyph","_index2","_index3","_step60","_iterator60","ligature","_step61","_curGlyph","_iterator61","_characters","_index4","ligatureGlyph","isMarkLigature","_step62","lastLigID","lastNumComps","curComps","_iterator62","matchIndex","GPOSProcessor","_OTProcessor2","_proto28","applyPositionValue","variationProcessor","variationStore","getDelta","nextGlyph","_step63","_iterator63","_pair","class1","class2","nextIndex","_nextGlyph","curRecord","nextRecord","getAnchor","rightToLeft","baseGlyphIndex","baseIndex","markRecord","baseAnchor","applyAnchor","_markIndex","_baseGlyphIndex","ligIndex","ligAttach","markGlyph","ligGlyph","compIndex","_markRecord","_baseAnchor","mark1Index","_cur","good","mark2Index","_markRecord2","_baseAnchor2","markCoords","markPos","fixCursiveAttachment","fixMarkAttachment","_k","OTLayoutEngine","glyphInfos","_proto29","setup","_this8","shaper","_step59","_iterator59","choose","_this9","glyphInfo","zeroMarkWidths","zeroMarkAdvances","LayoutEngine","unicodeLayoutEngine","kernProcessor","_proto30","_script","getScript","forString","_step64","_iterator64","_script2","forCodePoints","hideDefaultIgnorables","positioned","isDefaultIgnorable","plane","_step65","_iterator65","_step66","_iterator66","SVG_COMMANDS","Path","_bbox","_cbox","_proto31","toFunction","_this10","toSVG","mapPoints","_step67","_iterator67","_fn","_step68","_iterator68","_step69","p0","p3","_iterator69","_c$args","_c$args2","qp1x","qp1y","p3x","p3y","_c$args3","b2ac","_i23","_class$3","_class$4","StandardNames","Glyph","_proto32","_getPath","_getCBox","_getBBox","_getTableMetrics","metric","_getMetrics","_metrics","os2","_this$_getTableMetric","leftBearing","_this$_getTableMetric2","advanceHeight","topBearing","getAdvanceAdjustment","getScaledPath","_getName","GlyfHeader","numberOfContours","Point","onCurve","endContour","Component","scale01","scale10","TTFGlyph","_Glyph","_proto34","internal","_getTableStream","_parseGlyphCoord","same","_decode","glyfPos","_decodeSimple","_decodeComposite","endPtsOfContours","numCoords","_getPhantomPoints","transformPoints","phantomPoints","haveInstructions","gPos","_this$_metrics","_getContours","_step70","_iterator70","_contours","contour","directory","contours","firstPt","lastPt","curvePt","pt","prevPt","midY","CFFGlyph","_Glyph2","_proto35","CFF2","usedGsubrs","usedSubrs","nStems","_usedGsubrs","_usedSubrs","gsubrs","gsubrsBias","privateDict","subrs","Subrs","subrsBias","vstore","vsindex","checkWidth","nominalWidthX","parseStems","subr","blendVector","getBlendVector","numOperands","c3x","c3y","c4x","c4y","c5x","c5y","c6x","c6y","pts","SBIXImage","originX","originY","buflen","SBIXGlyph","_TTFGlyph","_proto36","getImageForSize","renderOutlines","COLRLayer","COLRGlyph","_Glyph3","_proto37","_step71","_iterator71","_step71$value","cpal","colr","rec","baseLayer","_getBaseGlyph","GlyphVariationProcessor","normalizeCoords","blendVectors","_proto38","glyphPoints","tupleCount","sharedPoints","decodePoints","origPoints","tupleDataSize","tupleCoords","startCoords","endCoords","tupleFactor","nPoints","xDeltas","decodeDeltas","yDeltas","outPoints","hasDelta","interpolateMissingDeltas","runCount","inPoints","firstPoint","firstDelta","curDelta","deltaInterpolate","deltaShift","ref1","ref2","in1","in2","out1","out2","_table$advanceWidthMa","itemStore","varData","deltaSet","netAdjustment","master","scalar","regionIndex","axes","Subset","_proto39","_this11","Point$1","Glyf","xPoints","yPoints","TTFGlyphEncoder","_proto40","encodeSimple","lastX","lastY","lastFlag","pointCount","_encodePoint","shortFlag","sameFlag","TTFSubset","_Subset","_this12","glyphEncoder","_proto41","_addGlyph","curOffset","nextOffset","_step72","_iterator72","CFFSubset","_Subset2","_this13","_proto42","subsetCharstrings","charstrings","_step73","_iterator73","subsetSubrs","subsetFontdict","_step74","used_fds","used_subrs","fd_select","_iterator74","createCIDFontdict","_step75","_iterator75","addString","_i24","_arr2","CIDCount","TTFFont","variationCoords","_directoryPos","_tables","_glyphs","_decodeDirectory","_getTable","_proto43","_decodeTable","logErrors","getName","getVariation","settings","namedVariations","_step76","_iterator76","_step77","_iterator77","WOFFDirectoryEntry","compLength","origChecksum","WOFFDirectory","flavor","totalSfntSize","metaOffset","metaLength","metaOrigLength","privOffset","privLength","_step78","_iterator78","WOFFFont","_TTFFont","_proto44","outBuffer","WOFF2Glyph","_TTFGlyph2","_proto45","_transformedGlyphs","Base128","knownTags","WOFF2DirectoryEntry","transformVersion","transformed","transformLength","WOFF2Directory","totalCompressedSize","WOFF2Font","_TTFFont2","_proto46","_dataPos","_decompress","_decompressed","decompressedSize","decompressed","_transformGlyfTable","GlyfTable","nContours","totalPoints","read255UInt16","decodeTriplet","composites","Substream","_buf","indexFormat","nContourStreamSize","nPointsStreamSize","flagStreamSize","glyphStreamSize","compositeStreamSize","bboxStreamSize","instructionStreamSize","bboxes","WORD_CODE","ONE_MORE_BYTE_CODE2","ONE_MORE_BYTE_CODE1","LOWEST_U_CODE","withSign","baseval","b0","TTCHeader","numFonts","dsigTag","dsigLength","dsigOffset","TrueTypeCollection","_step79","_iterator79","_step80","_iterator80","DFontName","Ref","nameOffset","dataOffset","handle","maxTypeIndex","refList","TypeList","DFontMap","typeList","nameListOffset","DFontHeader","dataLength","mapLength","DFont","_step82","_iterator82","_step83","_iterator83","sfnt","_step81","_iterator81","_step84","_iterator84","_step85","_iterator85","_require","_require2","classTrie","mapClass","mapFirst","Break","curClass","nextClass","LB8a","LB21a","LB30a","nextCodePoint","nextCharClass","getSimpleBreak","getPairTableBreak","lastClass","shouldBreak","firstClass","possibleNames","$29668e65f2091c2c$exports","$43d7963e56408b24$var$trie","$parcel$interopDefault","$c5L0i$unicodetrie","$c5L0i$base64js","$43d7963e56408b24$var$log2","log2","$43d7963e56408b24$var$bits","$43d7963e56408b24$var$CATEGORY_BITS","$43d7963e56408b24$var$COMBINING_BITS","combiningClasses","$43d7963e56408b24$var$SCRIPT_BITS","scripts","$43d7963e56408b24$var$EAW_BITS","eaw","$43d7963e56408b24$var$CATEGORY_SHIFT","$43d7963e56408b24$var$COMBINING_SHIFT","$43d7963e56408b24$var$SCRIPT_SHIFT","$43d7963e56408b24$var$EAW_SHIFT","$43d7963e56408b24$var$CATEGORY_MASK","$43d7963e56408b24$var$COMBINING_MASK","$43d7963e56408b24$var$SCRIPT_MASK","$43d7963e56408b24$var$EAW_MASK","$43d7963e56408b24$var$NUMBER_MASK","$43d7963e56408b24$export$410364bbb673ddbc","$43d7963e56408b24$export$c03b919c6651ed55","$43d7963e56408b24$export$941569448d136665","$43d7963e56408b24$export$92f6187db8ca6d26","$43d7963e56408b24$export$7d1258ebb7625a0d","$43d7963e56408b24$export$52c8ea63abd07594","$43d7963e56408b24$export$727d9dbc4fbb948f","$43d7963e56408b24$export$a5b49f4dc6a07d2c","$43d7963e56408b24$export$7b6804e8df61fcf5","$43d7963e56408b24$export$aebd617640818cda","$43d7963e56408b24$export$de8b4ee23b2cf823","$43d7963e56408b24$export$3c52dd84024ae72c","$43d7963e56408b24$export$a11bdcffe109e74b","$43d7963e56408b24$export$e33ad6871e762338","$43d7963e56408b24$export$2e2bcd8739ae039","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","nmd","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","propName","componentName","propFullName","secret","getShim","isRequired","ReactPropTypes","bigint","bool","arrayOf","elementType","instanceOf","objectOf","oneOfType","exact","checkPropTypes","PropTypes","aa","da","ea","ha","ia","ja","la","ma","acceptsBooleans","attributeName","attributeNamespace","mustUseProperty","sanitizeURL","removeEmptyString","ra","sa","ta","qa","oa","xlinkHref","ua","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","va","for","wa","ya","za","Aa","Ba","Ca","Da","Ea","Fa","Ga","Ha","Ia","Ja","Ka","La","Ma","Na","Oa","prepareStackTrace","displayName","Pa","Qa","$$typeof","_payload","Ra","Sa","Ta","Va","_valueTracker","setValue","Ua","Wa","Xa","activeElement","Ya","defaultChecked","_wrapperState","initialChecked","Za","initialValue","controlled","ab","bb","db","ownerDocument","eb","fb","defaultSelected","disabled","dangerouslySetInnerHTML","hb","ib","jb","lb","mb","namespaceURI","MSApp","execUnsafeLocalFunction","ob","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridArea","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","lineClamp","orphans","widows","zIndex","zoom","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","qb","rb","sb","tb","menuitem","area","keygen","wbr","ub","vb","wb","xb","srcElement","correspondingUseElement","yb","zb","Ab","Bb","Cb","stateNode","Db","Eb","Fb","Gb","Hb","Ib","Jb","Kb","Lb","Mb","Nb","onError","Ob","Pb","Qb","Rb","Sb","Tb","Vb","alternate","Wb","memoizedState","dehydrated","Xb","Zb","sibling","Yb","$b","unstable_scheduleCallback","bc","unstable_cancelCallback","unstable_shouldYield","dc","unstable_requestPaint","unstable_now","ec","unstable_getCurrentPriorityLevel","fc","unstable_ImmediatePriority","gc","unstable_UserBlockingPriority","hc","unstable_NormalPriority","ic","unstable_LowPriority","jc","unstable_IdlePriority","kc","oc","clz32","qc","rc","sc","tc","uc","pendingLanes","suspendedLanes","pingedLanes","entangledLanes","entanglements","zc","Ac","eventTimes","Cc","Dc","Ec","Fc","Gc","Hc","Ic","Jc","Kc","Lc","Mc","Nc","Oc","Pc","Qc","Rc","Sc","pointerId","Tc","nativeEvent","blockedOn","domEventName","eventSystemFlags","targetContainers","Vc","Wc","isDehydrated","containerInfo","Xc","Yc","Zc","$c","ad","bd","ReactCurrentBatchConfig","dd","ed","transition","gd","hd","Uc","stopPropagation","jd","kd","ld","md","nd","od","pd","qd","rd","_reactName","_targetInst","currentTarget","isDefaultPrevented","defaultPrevented","returnValue","isPropagationStopped","cancelBubble","persist","isPersistent","wd","xd","yd","sd","eventPhase","timeStamp","isTrusted","td","ud","vd","Ad","screenX","screenY","clientX","clientY","ctrlKey","shiftKey","altKey","metaKey","getModifierState","zd","buttons","relatedTarget","fromElement","toElement","movementX","movementY","Bd","Dd","dataTransfer","Fd","Hd","animationName","elapsedTime","pseudoElement","Id","clipboardData","Jd","Ld","Md","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","Nd","Od","Control","Meta","Shift","Pd","Qd","locale","Rd","Td","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","Vd","targetTouches","changedTouches","Xd","Yd","wheelDeltaX","wheelDeltaY","wheelDelta","deltaZ","deltaMode","Zd","$d","ae","be","documentMode","ce","de","ee","fe","he","ie","date","datetime","email","month","tel","week","oe","pe","qe","se","te","ue","ve","we","ze","oninput","Ae","detachEvent","Be","Ce","attachEvent","De","Ee","Fe","He","Ie","Je","Ke","nextSibling","Le","compareDocumentPosition","Me","HTMLIFrameElement","Ne","contentEditable","Oe","focusedElem","selectionRange","documentElement","defaultView","anchorNode","anchorOffset","focusNode","focusOffset","setStart","removeAllRanges","addRange","setEnd","scrollLeft","scrollTop","Pe","Qe","Re","Se","Te","Ue","Ve","We","animationend","animationiteration","animationstart","transitionend","Xe","Ye","Ze","$e","af","bf","cf","df","ef","gf","hf","lf","mf","nf","Ub","of","pf","qf","sf","J","tf","uf","vf","wf","na","xa","$a","ba","je","ke","xf","yf","zf","Af","Bf","Cf","Df","Ef","__html","Gf","Hf","Jf","If","Kf","Lf","Mf","previousSibling","Nf","Of","Pf","Qf","Rf","Sf","Tf","Uf","Vf","Wf","Xf","Yf","contextTypes","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","Zf","childContextTypes","$f","ag","bg","getChildContext","__reactInternalMemoizedMergedChildContext","dg","eg","fg","hg","jg","kg","mg","ng","og","pg","qg","rg","tg","ug","vg","wg","xg","yg","zg","Ag","Bg","deletions","Cg","pendingProps","treeContext","retryLane","Dg","Eg","Fg","Gg","memoizedProps","Hg","Ig","Jg","Kg","Lg","_owner","_stringRef","Mg","Ng","Og","Qg","Rg","Sg","Tg","Ug","Vg","Wg","Xg","Yg","Zg","$g","_currentValue","childLanes","dependencies","firstContext","lanes","memoizedValue","interleaved","ih","jh","kh","updateQueue","baseState","firstBaseUpdate","lastBaseUpdate","effects","mh","eventTime","payload","nh","oh","qh","rh","uh","vh","wh","xh","yh","zh","Ah","Bh","Ch","revealOrder","Dh","Eh","_workInProgressVersionPrimary","Fh","ReactCurrentDispatcher","Gh","Hh","Ih","Jh","Kh","Lh","Mh","Nh","Oh","Ph","Qh","Rh","Sh","Th","baseQueue","Uh","Vh","Wh","lastRenderedReducer","hasEagerState","eagerState","lastRenderedState","dispatch","Xh","Yh","Zh","$h","ai","getSnapshot","bi","di","lastEffect","stores","ei","gi","deps","ji","ki","li","mi","oi","qi","ri","si","ti","ui","wi","zi","Ai","Bi","readContext","useCallback","useContext","useEffect","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useReducer","useRef","useState","useDebugValue","useDeferredValue","useTransition","useMutableSource","useSyncExternalStore","useId","unstable_isNewReconciler","identifierPrefix","Ci","defaultProps","Di","Ei","isMounted","_reactInternals","enqueueSetState","enqueueReplaceState","enqueueForceUpdate","Fi","shouldComponentUpdate","isPureReactComponent","Gi","contextType","updater","Hi","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","Ii","getDerivedStateFromProps","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","Ji","Li","Mi","Ni","Oi","Qi","getDerivedStateFromError","componentDidCatch","Ri","componentStack","Si","pingCache","Ti","Ui","Vi","ReactCurrentOwner","Zi","$i","aj","bj","cj","dj","baseLanes","cachePool","transitions","ej","fj","gj","hj","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","pendingContext","lj","zj","Aj","Bj","Cj","mj","nj","oj","pj","qj","sj","dgst","tj","uj","_reactRetry","rj","subtreeFlags","vj","wj","isBackwards","rendering","renderingStartTime","tailMode","xj","Dj","Ej","Fj","wasMultiple","multiple","suppressHydrationWarning","onClick","onclick","autoFocus","Gj","Hj","Ij","Jj","Kj","Lj","Mj","Nj","Pj","Qj","Rj","Sj","Tj","Uj","Vj","_reactRootContainer","Wj","Xj","Yj","Zj","onCommitFiberUnmount","componentWillUnmount","ak","dk","ek","isHidden","fk","gk","hk","jk","__reactInternalSnapshotBeforeUpdate","Vk","lk","mk","nk","Y","pk","qk","rk","sk","tk","uk","vk","wk","xk","yk","zk","Ak","Bk","Ck","Dk","callbackNode","expirationTimes","expiredLanes","callbackPriority","ig","Ek","Fk","Gk","Hk","Ik","Jk","Kk","Lk","Mk","Nk","Ok","finishedWork","finishedLanes","Pk","timeoutHandle","Qk","Rk","Sk","Tk","Uk","mutableReadLanes","Bc","Oj","onCommitFiberRoot","mc","onRecoverableError","Wk","onPostCommitFiberRoot","Xk","Yk","$k","isReactComponent","pendingChildren","mutableSourceEagerHydrationData","pendingSuspenseBoundaries","yj","Zk","kl","reportError","_internalRoot","ml","nl","rl","ql","unmount","unstable_scheduleHydration","usingClientEntryPoint","Events","tl","findFiberByHostInstance","bundleType","rendererPackageName","rendererConfig","overrideHookState","overrideHookStateDeletePath","overrideHookStateRenamePath","overrideProps","overridePropsDeletePath","overridePropsRenamePath","setErrorHandler","setSuspenseHandler","scheduleUpdate","currentDispatcherRef","findHostInstanceByFiber","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","reconcilerVersion","__REACT_DEVTOOLS_GLOBAL_HOOK__","vl","supportsFiber","inject","createPortal","createRoot","unstable_strictMode","findDOMNode","flushSync","hydrate","hydrateRoot","hydratedSources","_getVersion","_source","unmountComponentAtNode","unstable_batchedUpdates","unstable_renderSubtreeIntoContainer","checkDCE","_DraggableCore","React","nodeInterop","__esModule","_getRequireWildcardCache","newObj","hasPropertyDescriptor","_interopRequireWildcard","_propTypes","_interopRequireDefault","_reactDom","_clsx","_domFns","_positionFns","_shims","_log","cacheBabelInterop","cacheNodeInterop","_extends","Draggable","prevPropsPosition","super","coreData","createDraggableData","setState","dragged","uiData","slackX","slackY","newStateX","newStateY","getBoundPosition","onDrag","onStop","defaultPosition","isElementSVG","_this$props$nodeRef$c","_this$props","nodeRef","defaultClassName","defaultClassNameDragging","defaultClassNameDragged","positionOffset","draggableCoreProps","svgTransform","draggable","validPosition","transformOpts","canDragX","canDragY","createSVGTransform","createCSSTransform","onDragStart","onDragStop","cloneElement","Children","only","propTypes","dontSetMe","eventsFor","dragEventFor","DraggableCore","onMouseDown","allowAnyClick","thisNode","Node","matchesSelectorAndParentsTo","cancel","touchIdentifier","getTouchIdentifier","getControlPosition","coreEvent","createCoreData","mounted","enableUserSelectHack","addUserSelectStyles","addEvent","handleDrag","handleDragStop","grid","snapToGrid","removeUserSelectStyles","removeEvent","handleDragStart","onTouchStart","_this$props2","onMouseUp","onTouchEnd","offsetParent","inputOptions","styleEl","controlPos","translation","getTranslation","_getPrefix","browserPrefixToKey","getTouch","identifier","findInArray","computedStyle","baseNode","offsetXYFromParent","offsetParentRect","outerHeight","borderTopWidth","borderBottomWidth","outerWidth","borderLeftWidth","borderRightWidth","matchesSelectorFunc","unitSuffix","defaultX","defaultY","browserPrefixToStyle","getPrefix","prefixes","_window$document","shouldCapitalize","kebabToTitleCase","isStart","isNum","cloneBounds","ownerWindow","boundNode","boundNodeEl","nodeStyle","boundNodeStyle","offsetTop","draggableCore","touchObj","pendingX","pendingY","clsx","__self","__source","Fragment","jsx","jsxs","forceUpdate","_status","_result","Profiler","PureComponent","StrictMode","Suspense","act","createContext","_currentValue2","_threadCount","Provider","Consumer","_defaultValue","_globalName","createFactory","createRef","forwardRef","isValidElement","startTransition","unstable_act","sortIndex","expirationTime","priorityLevel","scheduling","isInputPending","unstable_Profiling","unstable_continueExecution","unstable_forceFrameRate","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","unstable_runWithPriority","unstable_wrapCallback","objA","objB","compareContext","keysB","bHasOwnProperty","valueA","valueB","inline_style_parser_1","__importDefault","styleObject","hasIterator","leafPrototypes","definition","nc","PopStateEventType","invariant","cond","getHistoryState","usr","createLocation","pathname","parsePath","createPath","parsedPath","hashIndex","searchIndex","getUrlBasedHistory","getLocation","createHref","validateLocation","v5Compat","globalHistory","Pop","getIndex","handlePop","createURL","replaceState","listen","encodeLocation","Push","historyState","pushState","DOMException","Replace","ResultType","matchRoutes","routes","locationArg","basename","stripBasename","branches","flattenRoutes","siblings","compareIndexes","routesMeta","childrenIndex","rankRouteBranches","decodePath","matchRouteBranch","parentsMeta","parentPath","flattenRoute","route","relativePath","caseSensitive","joinPaths","computeScore","_route$path","exploded","explodeOptionalSegments","isOptional","restExploded","subpath","paramRe","dynamicSegmentValue","indexRouteValue","emptySegmentValue","staticSegmentValue","splatPenalty","isSplat","initialScore","branch","matchedParams","matchedPathname","remainingPathname","matchPath","pathnameBase","normalizePathname","compiledParams","regexpSource","paramName","compilePath","captureGroups","splatValue","getInvalidPathError","getPathContributingMatches","getResolveToMatches","v7_relativeSplatPath","pathMatches","resolveTo","toArg","routePathnames","locationPathname","isPathRelative","isEmptyPath","toPathname","routePathnameIndex","toSegments","fromPathname","resolvePathname","normalizeSearch","normalizeHash","resolvePath","hasExplicitTrailingSlash","hasCurrentTrailingSlash","isRouteErrorResponse","statusText","validMutationMethodsArr","validRequestMethodsArr","DataRouterContext","DataRouterStateContext","NavigationContext","LocationContext","RouteContext","outlet","isDataRoute","RouteErrorContext","useInRouterContext","useLocation","UNSAFE_invariant","useIsomorphicLayoutEffect","static","useNavigate","router","useDataRouterContext","DataRouterHook","UseNavigateStable","useCurrentRouteId","DataRouterStateHook","activeRef","navigate","fromRouteId","useNavigateStable","dataRouterContext","future","routePathnamesJson","UNSAFE_getResolveToMatches","useNavigateUnstable","useRoutesImpl","dataRouterState","parentMatches","routeMatch","parentParams","parentPathnameBase","locationFromContext","_parsedLocationArg$pa","parsedLocationArg","parentSegments","renderedMatches","_renderMatches","navigationType","DefaultErrorComponent","_state$errors","useDataRouterState","UseRouteError","routeId","useRouteError","preStyles","defaultErrorElement","RenderErrorBoundary","revalidation","errorInfo","routeContext","RenderedRoute","staticContext","errorElement","ErrorBoundary","_deepestRenderedBoundaryId","_dataRouterState2","_dataRouterState","errorIndex","renderFallback","fallbackIndex","v7_partialHydration","HydrateFallback","hydrateFallbackElement","loaderData","needsToRunLoader","loader","reduceRight","shouldRenderHydrateFallback","alreadyWarned","hookName","useRouteContext","thisRoute","Route","_props","Router","_ref5","basenameProp","locationProp","staticProp","navigationContext","locationContext","trailingPathname","Routes","_ref6","createRoutesFromChildren","treePath","hasErrorBoundary","shouldRevalidate","__reactRouterVersion","startTransitionImpl","ReactDOM","BrowserRouter","_ref4","historyRef","createBrowserHistory","setStateImpl","v7_startTransition","_taggedTemplateLiteral","__assign","__spreadArray","SuppressedError","MS","MOZ","RULESET","DECLARATION","IMPORT","KEYFRAMES","LAYER","indexof","charat","strlen","sizeof","lift","caret","dealloc","delimit","delimiter","escaping","commenter","serialize","prefixer","combine","compile","rulesets","pseudo","atrule","scanning","ampersand","reference","ruleset","unitlessKeys","msGridRow","msGridRowSpan","msGridColumn","msGridColumnSpan","WebkitLineClamp","REACT_APP_SC_ATTR","SC_ATTR","SC_DISABLE_SPEEDY","REACT_APP_SC_DISABLE_SPEEDY","theme","getDefaultProps","mixins","caller","arity","groupSizes","indexOfGroup","insertRules","insertRule","clearGroup","deleteRule","getGroup","getRule","registerName","_e","__webpack_nonce__","sheet","styleSheets","ownerNode","cssRules","cssText","isServer","useCSSOMInjection","gs","server","registerId","reconstructWithOptions","allocateGSInstance","hasNameForId","clearNames","clearRules","clearTag","shouldForwardProp","styleSheet","stylis","Ge","stylisPlugins","disableCSSOMInjection","enableVendorPrefixes","isCss","styledComponentId","staticRulesId","isStatic","componentId","baseHash","baseStyle","generateAndInjectStyles","parentComponentId","componentStyle","foldedComponentIds","as","forwardedAs","_foldedDefaultProps","at","ct","withConfig","ut","createStyles","removeStyles","renderStyles","ft","_emitSheetCSS","getStyleTags","sealed","getStyleElement","nonce","seal","collectStyles","interleaveWithNodeStream","NavbarContainer","styled","nav","_templateObject","NavLink","_templateObject2","Navbar","_jsxs","_jsx","HomePageContainer","heroImage","MainContent","SideSection","_templateObject3","Button","_templateObject4","ButtonContainer","_templateObject5","SectionTitle","_templateObject6","_templateObject7","SectionContent","_templateObject8","Footer","_templateObject9","HomePage","kindOf","kindOfTest","typeOfTest","isFile","isBlob","isFileList","isURLSearchParams","isReadableStream","isResponse","isHeaders","allOwnKeys","findKey","_global","isContextDefined","isHTMLForm","reduceDescriptors","reducer","reducedDescriptors","ALPHA","DIGIT","ALPHABET","ALPHA_DIGIT","isAsyncFn","isFormData","FormData","isStream","caseless","superConstructor","toFlatObject","sourceObj","destObj","propFilter","forEachEntry","regExp","hasOwnProp","freezeMethods","toObjectSet","arrayOrString","toFiniteNumber","generateString","isSpecCompliantForm","toJSONObject","reducedValue","AxiosError","request","columnNumber","customProps","axiosError","isVisitable","removeBrackets","renderKey","dots","formData","metaTokens","option","visitor","defaultVisitor","useBlob","convertValue","isFlatArray","exposedHelpers","AxiosURLSearchParams","_pairs","toFormData","_encode","buildURL","serializeFn","serializedParams","hashmarkIndex","handlers","use","fulfilled","rejected","synchronous","runWhen","eject","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","isBrowser","URLSearchParams","protocols","hasBrowserEnv","hasStandardBrowserEnv","product","hasStandardBrowserWebWorkerEnv","WorkerGlobalScope","platform","buildPath","isNumericKey","isLast","arrayToObject","parsePropPath","transitional","transitionalDefaults","adapter","transformRequest","contentType","getContentType","hasJSONContentType","isObjectPayload","formDataToJSON","setContentType","helpers","isNode","toURLEncodedForm","formSerializer","_FormData","rawValue","stringifySafely","transformResponse","JSONRequested","strictJSONParsing","ERR_BAD_RESPONSE","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","ignoreDuplicateOf","$internals","normalizeHeader","normalizeValue","matchHeaderValue","isHeaderNameFilter","AxiosHeaders","valueOrRewrite","rewrite","_value","_rewrite","lHeader","setHeaders","rawHeaders","parseHeaders","tokensRE","parseTokens","deleted","deleteHeader","formatHeader","targets","asStrings","accessor","accessors","defineAccessor","accessorName","methodName","buildAccessors","mapped","headerValue","transformData","fns","isCancel","__CANCEL__","CanceledError","ERR_CANCELED","settle","ERR_BAD_REQUEST","samplesCount","timestamps","firstSampleTS","chunkLength","startedAt","bytesCount","passed","freq","threshold","isDownloadStream","bytesNotified","_speedometer","speedometer","throttle","lengthComputable","progressBytes","rate","progress","estimated","msie","urlParsingNode","originURL","resolveURL","hostname","requestURL","expires","secure","cookie","toGMTString","buildFullPath","baseURL","requestedURL","relativeURL","combineURLs","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","paramsSerializer","timeoutMessage","withCredentials","withXSRFToken","onUploadProgress","onDownloadProgress","decompress","beforeRedirect","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding","configValue","newConfig","auth","btoa","username","isURLSameOrigin","xsrfValue","cookies","_config","resolveConfig","requestData","requestHeaders","onCanceled","unsubscribe","signal","responseHeaders","getAllResponseHeaders","responseText","responseURL","onabort","ECONNABORTED","ERR_NETWORK","timeoutErrorMessage","ETIMEDOUT","progressEventReducer","upload","subscribe","aborted","parseProtocol","composeSignals","signals","AbortController","streamChunk","trackStream","onProgress","onFinish","readBytes","ReadableStream","pull","fetchProgressDecorator","isFetchSupported","fetch","Request","Response","isReadableStreamSupported","TextEncoder","supportsRequestStream","duplexAccessed","hasContentType","duplex","supportsResponseStream","resolvers","ERR_NOT_SUPPORT","resolveBodyLength","getContentLength","getBodyLength","fetchOptions","composedSignal","stopTimeout","requestContentLength","contentTypeHeader","_request","isStreamResponse","responseContentLength","responseData","knownAdapters","http","xhrAdapter","fetchAdapter","renderReason","isResolvedHandle","adapters","nameOrAdapter","rejectedReasons","reasons","throwIfCancellationRequested","throwIfRequested","dispatchRequest","VERSION","validators","deprecatedWarnings","validator","formatMessage","ERR_DEPRECATED","assertOptions","schema","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","Axios","instanceConfig","interceptors","InterceptorManager","configOrUrl","boolean","function","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","responseInterceptorChain","getUri","generateHTTPMethod","isForm","CancelToken","resolvePromise","onfulfilled","_resolve","HttpStatusCode","Continue","SwitchingProtocols","Processing","EarlyHints","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","axios","createInstance","defaultConfig","Cancel","isAxiosError","formToJSON","getAdapter","API_URL","fetchTasks","fetchCardById","executeCard","cardId","deleteCard","taskId","updateCard","card","removeNextCard","currentCardId","nextCardId","createStore","createState","partial","previousState","getState","api","equalityFn","currentSlice","listenerToAdd","nextSlice","previousSlice","subscribeWithSelector","useStore","stateRef","selectorRef","equalityFnRef","erroredRef","currentSliceRef","newStateSlice","hasNewStateSlice","stateBeforeSubscriptionRef","nextStateSlice","sliceToReturn","typename","none","arrayAll","childMatcher","childFirst","firstElementChild","EnterNode","datum","bindIndex","groupLength","bindKey","keyValue","nodeByKeyValue","keyValues","arraylike","xhtml","xlink","namespaces","attrRemove","attrRemoveNS","fullname","removeAttributeNS","attrConstant","attrConstantNS","attrFunction","attrFunctionNS","styleRemove","removeProperty","styleConstant","styleFunction","styleValue","getPropertyValue","propertyRemove","propertyConstant","propertyFunction","classArray","ClassList","_names","classedAdd","classedRemove","classedTrue","classedFalse","classedFunction","textRemove","textConstant","textFunction","htmlRemove","htmlConstant","htmlFunction","raise","creatorInherit","creatorFixed","constantNull","selection_cloneShallow","selection_cloneDeep","onRemove","__on","onAdd","contextListener","dispatchConstant","dispatchFunction","Selection","_groups","_parents","subgroups","subnode","subgroup","selectAll","selectorAll","selectChild","childFind","selectChildren","childrenFilter","enterGroup","updateGroup","_enter","_exit","sparse","onenter","onupdate","onexit","groups0","groups1","merges","group0","group1","compareNode","sortgroups","sortgroup","getAttributeNS","classed","creator","typenames","parseTypenames","nonpassive","nonpassivecapture","nopropagation","stopImmediatePropagation","noevent","__noselect","MozUserSelect","yesdrag","noclick","cosh","zoomRho","rho2","rho4","ux0","uy0","w0","ux1","uy1","w1","d2","d1","r0","coshr0","tanh","SQRT2","_1","_2","sourceEvent","ownerSVGElement","createSVGPoint","matrixTransform","getScreenCTM","inverse","clientLeft","clientTop","taskHead","taskTail","frame","interval","pokeDelay","clockLast","clockNow","clockSkew","setFrame","clearNow","Timer","_call","_time","wake","timerFlush","sleep","nap","poke","clearInterval","setInterval","elapsed","emptyOn","emptyTween","CREATED","SCHEDULED","STARTING","STARTED","RUNNING","ENDING","ENDED","schedules","__transition","tween","schedule","tick","ease","active","svgNode","degrees","translateX","translateY","skewX","atan","interpolateTransform","pxComma","pxParen","degParen","interpolateTransformCss","DOMMatrix","WebKitCSSMatrix","isIdentity","interpolateTransformSvg","consolidate","tweenRemove","tween0","tween1","tweenFunction","tweenValue","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","color_formatHex","formatHex","color_formatRgb","formatRgb","rgbn","Rgb","rgba","hsla","rgbConvert","rgb_formatHex","rgb_formatRgb","clampa","clampi","Hsl","hslConvert","clamph","clampt","basis","v0","displayable","formatHex8","formatHsl","linear","nogamma","exponential","rgbGamma","colorRgb","rgbSpline","spline","reA","reB","am","bm","bs","one","interpolateNumber","interpolateRgb","interpolateString","interpolate","string00","interpolate0","string1","string0","string10","attrTweenNS","attrInterpolateNS","attrTween","attrInterpolate","delayFunction","delayConstant","durationFunction","durationConstant","Transition","_name","newId","selection_prototype","id0","id1","on0","on1","sit","onFunction","styleTween","styleNull","listener0","styleMaybeRemove","styleInterpolate","textTween","textInterpolate","removeFunction","easeConstant","easeVarying","interrupt","defaultTiming","ZoomEvent","applyX","applyY","invert","invertX","invertY","rescaleX","rescaleY","defaultFilter","defaultExtent","hasAttribute","defaultTransform","__zoom","defaultWheelDelta","defaultTouchable","maxTouchPoints","defaultConstrain","extent","translateExtent","_s","_n","_d","ZustandContext","createContext$1","initialStore","storeRef","useProviderStore","useStoreApi","shallow","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","DragEvent","subject","defaultContainer","defaultSubject","touchstarting","touchfirst","touchending","constrain","touchable","scaleExtent","interpolateZoom","touchDelay","wheelDelay","clickDistance2","tapDistance","wheeled","mousedowned","dblclicked","touchstarted","touchmoved","touchended","centroid","gesture","clean","__zooming","Gesture","taps","wheel","mouse","moved","dragEnable","dragDisable","started","touch0","touch1","l0","dp","hypot","scaleBy","scaleTo","translateBy","translateTo","clickDistance","mousedownx","mousedowny","mousemoving","container","gestures","beforestart","mousemoved","mouseupped","nodrag","touch","spin","keyframes","CardContainer","TitleBand","StatusDot","StatusContainer","ExecuteButton","LoadingIcon","CloseButton","_templateObject10","WarningIcon","_templateObject11","SvgAdd","svgRef","titleId","ForwardRef","SvgDelete","isExecuting","setIsExecuting","confirm","onDelete","inconsistent","warningIcon","updatedCard","onUpdate","loadingIcon","executeIcon","executed","Handle","dashAnimation","EdgeButton","EdgePath","sourceX","sourceY","targetX","targetY","sourcePosition","targetPosition","edgePath","getBezierPath","_Fragment","closeIcon","FlowContainer","dagreGraph","dagre","nodeTypes","cardNode","CardNode","edgeTypes","CardEdge","initialNodes","initialEdges","onNodeClick","onExecute","onNodesChange","useNodesState","setEdges","onEdgesChange","useEdgesState","onConnect","newEdge","handleDeleteEdge","eds","addEdge","nextCardIds","setNextCard","layoutedNodes","nodeWithPosition","nodeWidth","nodeHeight","nds","onEdgesDelete","edgesToDelete","ReactFlow","fitView","fitViewOptions","defaultZoom","Controls","Background","FormContainer","FormLabel","FormInput","FormTextArea","FormButton","show","GENERATIVE_MODELS","MUSIC_INSTRUMENTS","isOpen","onRequestClose","onCardCreated","objective","setObjective","prompt","setPrompt","setContext","exampleOutput","setExampleOutput","generativeModel","setGenerativeModel","onSubmit","newCard","createCard","onChange","model","PageContainer","TaskInfoContainer","TaskInfoBox","TaskInfo","ButtonsBox","RoundButton","ContentContainer","nameRe","nameReJsx","emptyOptions","Schema","definitions","booleanish","overloadedBoolean","commaSeparated","spaceSeparated","commaOrSpaceSeparated","defined","powers","checks","DefinedInfo","own","xLinkActuate","xLinkArcRole","xLinkHref","xLinkRole","xLinkShow","xLinkTitle","xLinkType","xmlLang","xmlBase","xmlSpace","caseSensitiveTransform","caseInsensitiveTransform","xmlnsxlink","xmlnsXLink","aria","ariaActiveDescendant","ariaAtomic","ariaAutoComplete","ariaBusy","ariaChecked","ariaColCount","ariaColIndex","ariaColSpan","ariaControls","ariaCurrent","ariaDescribedBy","ariaDetails","ariaDisabled","ariaDropEffect","ariaErrorMessage","ariaExpanded","ariaFlowTo","ariaGrabbed","ariaHasPopup","ariaHidden","ariaInvalid","ariaKeyShortcuts","ariaLabelledBy","ariaLevel","ariaLive","ariaModal","ariaMultiLine","ariaMultiSelectable","ariaOrientation","ariaOwns","ariaPlaceholder","ariaPosInSet","ariaPressed","ariaReadOnly","ariaRelevant","ariaRequired","ariaRoleDescription","ariaRowCount","ariaRowIndex","ariaRowSpan","ariaSelected","ariaSetSize","ariaSort","ariaValueMax","ariaValueMin","ariaValueNow","ariaValueText","role","acceptcharset","classname","htmlfor","httpequiv","abbr","accept","acceptCharset","accessKey","allow","allowFullScreen","allowPaymentRequest","allowUserMedia","autoCapitalize","autoComplete","autoPlay","blocking","charSet","cite","controls","controlsList","crossOrigin","dateTime","decoding","dirName","encType","enterKeyHint","fetchPriority","formAction","formEncType","formMethod","formNoValidate","formTarget","hrefLang","htmlFor","httpEquiv","imageSizes","imageSrcSet","inert","inputMode","integrity","itemId","itemProp","itemRef","itemScope","loading","manifest","maxLength","muted","noModule","noValidate","onAbort","onAfterPrint","onAuxClick","onBeforeMatch","onBeforePrint","onBeforeToggle","onBeforeUnload","onBlur","onCancel","onCanPlay","onCanPlayThrough","onClose","onContextLost","onContextMenu","onContextRestored","onCopy","onCueChange","onCut","onDblClick","onDragEnd","onDragEnter","onDragExit","onDragLeave","onDragOver","onDrop","onDurationChange","onEmptied","onFocus","onFormData","onHashChange","onInput","onInvalid","onKeyDown","onKeyPress","onKeyUp","onLanguageChange","onLoad","onLoadedData","onLoadedMetadata","onLoadEnd","onLoadStart","onMessage","onMessageError","onMouseEnter","onMouseLeave","onMouseMove","onMouseOut","onMouseOver","onOffline","onOnline","onPageHide","onPageShow","onPaste","onPause","onPlay","onPlaying","onPopState","onRateChange","onRejectionHandled","onReset","onResize","onScroll","onScrollEnd","onSecurityPolicyViolation","onSeeked","onSeeking","onSelect","onSlotChange","onStalled","onStorage","onSuspend","onTimeUpdate","onToggle","onUnhandledRejection","onUnload","onVolumeChange","onWaiting","onWheel","optimum","ping","placeholder","playsInline","popover","popoverTarget","popoverTargetAction","poster","preload","referrerPolicy","sandbox","scope","scoped","seamless","shadowRootClonable","shadowRootDelegatesFocus","shadowRootMode","slot","spellCheck","srcDoc","srcLang","srcSet","typeMustMatch","useMap","writingSuggestions","aLink","archive","bgColor","bottomMargin","cellPadding","cellSpacing","charOff","classId","codeBase","codeType","declare","frameBorder","hSpace","leftMargin","longDesc","lowSrc","marginHeight","marginWidth","noResize","noHref","noShade","profile","rev","rightMargin","scheme","scrolling","standby","summary","topMargin","valueType","vAlign","vLink","vSpace","allowTransparency","autoCorrect","autoSave","disablePictureInPicture","disableRemotePlayback","security","unselectable","accentHeight","alignmentBaseline","arabicForm","baselineShift","clipPath","clipRule","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","dataType","dominantBaseline","enableBackground","fillRule","floodColor","fontSizeAdjust","fontStretch","glyphName","glyphOrientationHorizontal","glyphOrientationVertical","horizAdvX","horizOriginX","horizOriginY","imageRendering","lightingColor","navDown","navDownLeft","navDownRight","navLeft","navNext","navPrev","navRight","navUp","navUpLeft","navUpRight","onActivate","onBegin","onFocusIn","onFocusOut","onMouseWheel","onRepeat","onShow","onZoom","overlinePosition","overlineThickness","paintOrder","panose1","pointerEvents","renderingIntent","shapeRendering","strikethroughPosition","strikethroughThickness","strokeDashArray","strokeDashOffset","strokeLineCap","strokeLineJoin","strokeMiterLimit","textRendering","transformOrigin","typeOf","unicodeBidi","unicodeRange","vAlphabetic","vHanging","vIdeographic","vMathematical","vectorEffect","vertAdvY","vertOriginX","writingMode","playbackOrder","timelineBegin","about","accumulate","additive","alphabetic","amplitude","attributeType","azimuth","bandwidth","baseFrequency","baseProfile","by","calcMode","clipPathUnits","contentScriptType","contentStyleType","defaultAction","diffuseConstant","divisor","edgeMode","editable","elevation","externalResourcesRequired","filterRes","filterUnits","focusable","focusHighlight","fr","fx","fy","g1","g2","glyphRef","gradientTransform","gradientUnits","hanging","hatchContentUnits","hatchUnits","ideographic","initialVisibility","in","intercept","k2","k3","k4","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","kerning","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","mathematical","mediaCharacterEncoding","mediaContentEncodings","mediaSize","mediaTime","numOctaves","observer","overlay","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","primitiveUnits","propagate","repeatCount","repeatDur","requiredExtensions","requiredFeatures","requiredFormats","resource","seed","side","snapshotTime","specularConstant","specularExponent","spreadMethod","stdDeviation","stemh","stemv","stitchTiles","surfaceScale","syncBehavior","syncBehaviorDefault","syncMaster","syncTolerance","syncToleranceDefault","systemLanguage","tableValues","transformBehavior","u1","u2","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan","htmlBase","svgBase","valid","kebab","$0","camelcase","hastToReact","StyleToObject","pointEnd","pointStart","stringifyPosition","VFileMessage","causeOrReason","optionsOrParentOrPlace","legacyCause","place","ancestors","ruleId","fatal","emptyMap","dashSomething","tableElements","tableCellElement","docs","toJsxRuntime","filePath","development","jsxDEV","isStaticChildren","developmentCreate","productionCreate","elementAttributeNameCase","evaluater","createEvaluater","ignoreInvalidStyle","passKeys","passNode","stylePropertyNameCase","tableCellAlignToStyle","parentSchema","findComponentFromName","alignValue","createElementProps","createChildren","addNode","addChildren","estree","expression","evaluateExpression","crashEstree","mdxExpression","objectExpression","createJsxElementProps","mdxJsxElement","evaluateProgram","mdxEsm","countsByName","dashes","padRight","padLeft","commas","styleToObject","toCamel","domCasing","cssCasing","transformStyleToCssCasing","transformStylesToCssCasing","allowExpression","identifiers","isIdentifierName","optional","toDash","$1","urlAttributes","includeImageAlt","includeHtml","chunkStart","SpliceBuffer","setCursor","trunc","chunkedPush","pushMany","unshiftMany","subtokenize","eventsArray","jumps","otherIndex","otherEvent","subevents","_isInFirstContentOfListItem","subcontent","_container","eventIndex","startPositions","childEvents","breaks","sliceStream","defineSkip","_gfmTasklistFirstContentOfListItem","syntaxExtension","hook","constructs","asciiAlpha","regexCheck","asciiAlphanumeric","asciiAtext","asciiControl","asciiDigit","asciiHexDigit","asciiPunctuation","markdownLineEnding","markdownLineEndingOrSpace","markdownSpace","unicodePunctuation","unicodeWhitespace","factorySpace","contentStart","attempt","contentInitial","childFlow","childToken","lineStartOffset","containerState","continuation","documentContinue","checkNewContainers","_closeFlow","closeFlow","indexBeforeExits","indexBeforeFlow","exitContainers","documentContinued","currentConstruct","concrete","flowStart","_gfmTableDynamicInterruptHack","containerConstruct","thereIsANewContainer","thereIsNoNewContainer","containerContinue","flowContinue","writeToChild","eof","nok","null","blankLine","chunkInside","contentEnd","continuationConstruct","contentContinue","prefixed","sliceSerialize","flowInitial","afterConstruct","resolveAll","createResolver","initializeFactory","notText","atBreak","resolveAllLineSuffixes","extraResolver","bufferIndex","_bufferIndex","createTokenizer","columnStart","resolveAllConstructs","accountForPotentialSkip","constructFactory","addResult","onsuccessfulcheck","expandTabs","atTab","serializeChunks","main","expectedCode","startBufferIndex","endIndex","endBufferIndex","sliceChunks","chunkIndex","onreturn","bogusState","listOfConstructs","constructIndex","handleListOfConstructs","handleMapOfConstructs","handleConstruct","startPrevious","startCurrentConstruct","startEventsIndex","startStack","thematicBreak","initialSize","atMarker","inside","onBlank","listItemPrefixWhitespaceConstruct","endOfPrefix","otherPrefix","initialBlankLine","notBlank","furtherBlankLines","notInCurrentItem","indentConstruct","blockQuote","contBefore","factoryDestination","literalType","literalMarkerType","rawType","stringType","enclosedBefore","enclosed","enclosedEscape","rawEscape","factoryLabel","markerType","labelInside","labelEscape","factoryTitle","factoryWhitespace","normalizeIdentifier","labelAfter","markerAfter","destinationBefore","destinationAfter","titleBefore","afterWhitespace","beforeMarker","titleAfter","titleAfterOptionalWhitespace","codeIndented","afterPrefix","furtherStart","headingAtx","sequenceOpen","sequenceFurther","setextUnderline","paragraph","heading","htmlBlockNames","htmlRawNames","htmlFlow","closingTag","markerB","declarationOpen","tagCloseStart","continuationDeclarationInside","commentOpenInside","cdataOpenInside","slash","basicSelfClosing","completeClosingTagAfter","completeAttributeNameBefore","completeEnd","completeAttributeName","completeAttributeNameAfter","completeAttributeValueBefore","completeAttributeValueQuoted","completeAttributeValueUnquoted","completeAttributeValueQuotedAfter","completeAfter","continuationCommentInside","continuationRawTagOpen","continuationClose","continuationCdataInside","continuationStart","blankLineBefore","continuationAfter","nonLazyContinuationStart","continuationStartNonLazy","continuationBefore","continuationRawEndTag","nonLazyContinuation","codeFenced","closeStart","startBefore","beforeSequenceClose","sequenceClose","sizeOpen","sequenceCloseAfter","initialPrefix","beforeSequenceOpen","infoBefore","atNonLazyBreak","metaBefore","contentBefore","beforeContentChunk","contentChunk","decodeNamedCharacterReference","characterReference","numeric","characterEscape","lineEnding","labelEnd","labelStart","_balanced","_inactive","labelEndNok","resourceConstruct","labelEndOk","referenceFullConstruct","referenceNotFull","referenceCollapsedConstruct","insideSpan","resourceBefore","resourceOpen","resourceEnd","resourceDestinationAfter","resourceDestinationMissing","resourceBetween","resourceTitleAfter","referenceFullAfter","referenceFullMissing","referenceCollapsedOpen","labelStartImage","classifyCharacter","attention","attentionMarkers","_open","openingSequence","closingSequence","nextEvents","movePoint","autolink","schemeOrEmailAtext","emailAtext","schemeInsideOrEmailAtext","urlInside","emailAtSignOrDot","emailLabel","emailValue","instruction","tagOpen","commentEnd","commentClose","lineEndingBefore","cdataClose","cdataEnd","instructionClose","tagClose","tagCloseBetween","tagOpenBetween","tagOpenAttributeName","tagOpenAttributeNameAfter","tagOpenAttributeValueBefore","tagOpenAttributeValueQuoted","tagOpenAttributeValueUnquoted","tagOpenAttributeValueQuotedAfter","lineEndingAfter","lineEndingAfterPrefix","labelStartLink","hardBreakEscape","codeText","between","tailExitIndex","headEnterIndex","resolveText","extensions","combineExtensions","defaultConstructs","decodeNumericCharacterReference","characterEscapeOrReference","$2","fromMarkdown","transforms","canContainEols","opener","autolinkProtocol","onenterdata","autolinkEmail","atxHeading","codeFlow","codeFencedFenceInfo","codeFencedFenceMeta","codeTextData","codeFlowValue","definitionDestinationString","definitionLabelString","definitionTitleString","emphasis","hardBreak","hardBreakTrailing","htmlFlowData","htmlTextData","listItem","listItemValue","onenterlistitemvalue","listOrdered","onenterlistordered","listUnordered","onenterreference","referenceString","resourceDestinationString","resourceTitleString","setextHeading","closer","atxHeadingSequence","onexitatxheadingsequence","onexitautolinkemail","onexitautolinkprotocol","characterEscapeValue","onexitdata","characterReferenceMarkerHexadecimal","onexitcharacterreferencemarker","characterReferenceMarkerNumeric","characterReferenceValue","onexitcharacterreferencevalue","onexitcharacterreference","onexitcodefenced","codeFencedFence","onexitcodefencedfence","onexitcodefencedfenceinfo","onexitcodefencedfencemeta","onexitcodeindented","onexitcodetext","onexitdefinitiondestinationstring","onexitdefinitionlabelstring","onexitdefinitiontitlestring","onexithardbreak","onexithtmlflow","onexithtmltext","onexitimage","onexitlabel","labelText","onexitlabeltext","onexitlineending","onexitlink","onexitreferencestring","onexitresourcedestinationstring","onexitresourcetitlestring","onexitresource","onexitsetextheading","setextHeadingLineSequence","onexitsetextheadinglinesequence","setextHeadingText","onexitsetextheadingtext","configure","mdastExtensions","tokenStack","listStack","prepareList","defaultOnError","firstBlankLineIndex","containerBalance","listSpread","tailIndex","tailEvent","_spread","errorHandler","onExitError","expectingFirstListItemValue","flowCodeInside","setextHeadingSlurpLineEnding","atHardBreak","inReference","referenceType","decodeString","characterReferenceType","ordered","compiler","postprocess","atCarriageReturn","endPosition","TextDecoder","preprocess","combined","remarkParse","deserialize","serialized","deserializer","unpair","EMPTY","asString","shouldSkip","lossy","serializer","structuredClone","normalizeUri","defaultFootnoteBackContent","rereferenceIndex","defaultFootnoteBackLabel","referenceIndex","castFactory","tests","anyFactory","checkAsRecord","nodeAsRecord","propsFactory","typeFactory","testFunction","looksLikeANode","CONTINUE","EXIT","SKIP","visitParents","subresult","grandparents","toResult","nodeAsParent","testOrVisitor","visitorOrReverse","maybeReverse","revert","listItemLoose","tab","trimLines","trimLine","blockquote","patch","applyData","break","footnoteReference","clobberPrefix","safeId","footnoteOrder","reuseCounter","footnoteCounts","dataFootnoteRef","allowDangerousHtml","imageReference","definitionById","inlineCode","linkReference","listLoose","firstRow","tableContent","tableCell","toml","yaml","footnoteDefinition","hName","hChildren","hProperties","defaultUnknownHandler","trimMarkdownSpaceStart","toHast","footnoteById","defaultHandlers","passThrough","unknownHandler","foot","footnoteBackContent","footnoteBackLabel","footnoteLabel","footnoteLabelTagName","footnoteLabelProperties","listItems","backReferences","counts","dataFootnoteBackref","tailTail","dataFootnotes","remarkRehype","hastTree","bail","trough","middlewareIndex","middleware","fnExpectsCallback","middelware","assertPath","seenNonSlash","firstNonSlashEnd","extIndex","dirname","unmatchedSlash","extname","startPart","startDot","preDotState","joined","absolute","allowAboveRoot","lastSlashIndex","lastSegmentLength","lastSlash","proc","isUrl","fileUrlOrPath","urlToPath","getPathFromURLPosix","VFile","messages","stored","assertNonEmpty","assertPart","CallableInstance","Processor","Compiler","Parser","attachers","freezeIndex","frozen","transformers","attacher","assertUnfrozen","transformer","realFile","vfile","assertParser","assertCompiler","parseTree","realDone","compileTree","compileResult","processSync","complete","assertDone","assertNode","outputTree","resultingTree","runSync","addPlugin","addList","addPreset","primary","currentPrimary","isPlainObj","unified","asyncName","looksLikeAVFile","emptyPlugins","emptyRemarkRehypeOptions","safeProtocol","deprecations","Markdown","allowedElements","allowElement","disallowedElements","rehypePlugins","remarkPlugins","remarkRehypeOptions","skipHtml","unwrapDisallowed","urlTransform","defaultUrlTransform","deprecation","mdastTree","colon","questionMark","numberSign","PopoverContainer","PopoverContent","Section","isCollapsed","Label","Value","EvaluateButton","_templateObject12","_templateObject13","EditButton","_templateObject14","ResolveButton","_templateObject15","_templateObject16","CopyButton","_templateObject17","ModalButton","_templateObject18","OutputSection","_templateObject19","ButtonGroup","_templateObject20","AddPluginButton","_templateObject21","_templateObject22","Modal","ModalContainer","ModalHeader","ModalContent","ModalFooter","Select","onPluginAdded","availablePlugins","setAvailablePlugins","selectedPlugin","setSelectedPlugin","fetchPlugins","getPlugins","addPluginToCard","PluginItem","onOpenModal","handleOpenModal","openNewIcon","onCardUpdate","setCard","setLoading","isEvaluating","setIsEvaluating","isPromptCollapsed","setIsPromptCollapsed","isContextCollapsed","setIsContextCollapsed","isExampleOutputCollapsed","setIsExampleOutputCollapsed","isOutputCollapsed","setIsOutputCollapsed","previousCardsOutputs","setPreviousCardsOutputs","isEditing","setIsEditing","setUpdatedCard","isCopying","setIsCopying","setPlugins","isPluginSelectorVisible","setIsPluginSelectorVisible","getCard","getPreviousCardsOutputs","fetchPreviousCardsOutputs","handleChange","handleModalOpen","calculateLeftPosition","resolvedCard","reviewIcon","doneIcon","editIcon","ReactMarkdown","previousCards","prevCardId","generatedText","clipboard","writeText","copyIcon","evaluationMetrics","evaluationResult","addIcon","PluginSelector","PluginSection","evaluateCard","evaluateIcon","PopupContainer","PopupContent","OkButtonContainer","OkButton","ModalOverlay","ModalTitle","ToggleContainer","ToggleButton","InfoLabel","SaveButton","TextArea","isMarkdown","setIsMarkdown","setOutput","editedOutput","setEditedOutput","fetchedCard","fetchCardOutput","toggleDisplayMode","updateCardOutput","handleEditClick","GuitarTabsConverterContainerWrapper","ParametersContainer","InstrumentContainer","Input","OutputContainer","FileContainer","PlayPauseButton","DownloadButton","repetitions","setRepetitions","files","setFiles","isPlaying","setIsPlaying","audioRef","pluginName","executePlugin","newFiles","fileType","wav","executeDownIcon","playing","handlePlayPause","pauseIcon","playIcon","downloadIcon","ABCConverterContainerWrapper","abcCode","setAbcCode","abcjsAudioSynthRef","abcjsControlRef","cleanedOutput","validHeaders","abcLines","trimmedLine","headerMatch","cleanABCOutput","soundfontUrl","_classPrivateMethodInitSpec","_assertClassBrand","_getDefaults","gfm","hooks","pedantic","walkTokens","_defaults","changeDefaults","newDefaults","escapeTest","escapeReplace","escapeTestNoEncode","escapeReplaceNoEncode","escapeReplacements","getEscapeReplacement","escape$1","unescapeTest","valSource","getRegex","cleanUrl","noopTest","splitCells","escaped","suffLen","currChar","outputLink","lexer","inLink","inlineTokens","_Tokenizer","codeBlockStyle","fences","matchIndentToCode","indentToCode","matchIndentInNode","indentInNode","indentCodeCompensation","anyPunctuation","inBlockquote","currentLines","currentRaw","currentText","blockTokens","lastToken","oldToken","newText","newToken","isordered","itemRegex","endsWithBlankLine","endEarly","itemContents","trimStart","nextBulletRegex","hrRegex","fencesBeginRegex","headingBeginRegex","rawLine","ischecked","istask","trimEnd","spacers","hasMultipleLineBreaks","pre","lheading","inRawBlock","trimmedUrl","rtrimSlash","lastParenIndex","findClosingBracket","linkLen","reflink","nolink","emStrong","maskedSrc","prevChar","emStrongLDelim","punctuation","lLength","rDelim","rLength","delimTotal","midDelimTotal","endReg","emStrongRDelimAst","emStrongRDelimUnd","lastCharLength","codespan","hasNonSpaceChars","hasSpaceCharsOnBothEnds","prevCapZero","_this$rules$inline$_b","_this$rules$inline$_b2","_backpedal","inlineText","bullet","_paragraph","_blockLabel","_tag","blockNormal","gfmTable","blockGfm","blockPedantic","_punctuation","_inlineComment","_inlineLabel","inlineNormal","blockSkip","reflinkSearch","inlinePedantic","inlineGfm","inlineBreaks","_Lexer","inlineQueue","lex","lexInline","cutSrc","lastParagraphClipped","leading","extTokenizer","startBlock","tempSrc","tempStart","getStartIndex","_lastToken","errMsg","keepPrevChar","startInline","_Renderer","_match","langString","_ref3","parseInline","listitem","itemBody","checkbox","tablecell","tablerow","_ref7","_ref8","_ref9","_ref10","_ref11","_ref12","cleanHref","_ref13","_TextRenderer","_ref14","_ref15","_ref16","_ref17","_ref18","_ref19","_ref20","_ref21","_Parser","textRenderer","anyToken","renderers","genericToken","textToken","_Hooks","markdown","processAllTokens","_Marked_brand","_convertRendererFunction","_parseMarkdown","origOpt","throwError","_onError","markedInstance","setOptions","tableToken","listToken","_this$defaults$extens","childTokens","prevRenderer","extLevel","rendererProp","rendererFunc","useNewRenderer","tokenizerProp","tokenizerFunc","prevTokenizer","hooksProp","hooksFunc","prevHook","passThroughHooks","packWalktokens","marked","getDefaults","TextRenderer","Lexer","Hooks","pdfFonts","markdownText","htmlContent","htmlToPdfmake","_card$output2","extractXMLContent","xmlMatch","xmlContent","handleDownloadXML","_card$output","alert","renderModalContent","GuitarTabsConverterContainer","OutputDetailContainer","ABCConverterContainer","PDFConverterContainer","XMLConverterContainer","TaskDetailPage","useParams","setTask","isPopoverOpen","setIsPopoverOpen","openPopovers","setOpenPopovers","modalOutput","setModalOutput","showInstructions","setShowInstructions","edgeOptions","edgeId","fetchTaskData","fetchTaskById","newNodes","cards","handleExecute","handleDelete","handleCardUpdate","newEdges","nextCards","handleNodeClick","AddIcon","Flow","AddCardPopover","currentCards","handleCardCreated","DraggablePopover","handleClosePopover","DetailModal","handleCloseModal","InstructionsPopup","TaskContainerWrapper","TaskItem","DeleteButton","refresh","tasks","setTasks","getTasks","deleteTask","DeleteIcon","TasksPageContainer","TaskList","CheckboxLabel","FormSelect","LoadingModal","LoadingText","onTaskCreated","setName","setGenerate","setIsLoading","newTask","createTask","SvgInfo","SvgList","TasksPage","setRefresh","showInfo","setShowInfo","toggleInfoSection","TaskIcon","InfoIcon","AddTaskPopover","handleTaskCreated","TaskContainer","createGlobalStyle","GlobalStyles","App"],"sourceRoot":""}