{"version":3,"sources":["webpack:///./node_modules/jquery-csv/src/jquery.csv.js"],"names":["RegExp","escape","s","replace","$","jQuery","csv","defaults","separator","delimiter","headers","hooks","castToScalar","value","state","hasDot","isNaN","test","parseFloat","integer","parseInt","parsers","parse","options","rowNum","colNum","data","entry","exit","endOfEntry","start","undefined","onParseEntry","push","hookVal","end","endOfValue","onParseValue","hook","escSeparator","escDelimiter","match","matchSrc","source","m0","Error","length","splitLines","entries","endOfLine","prevChar","substr","parseEntry","helpers","collectPropertyNames","objects","o","propName","props","hasOwnProperty","indexOf","toArray","callback","console","error","config","toArrays","onPreParse","onPostParse","toObjects","lines","transform","headerOptions","headerLine","i","len","object","j","call","fromArrays","arrays","line","lineValues","output","strValue","toString","escMatcher","search","join","fromObjects","sortOrder","manualOrder","origObjects","sort","p","propsManual","concat","csvEntry2Array","csv2Array","csv2Dictionary","module","exports","this"],"mappings":"mGA4BAA,OAAOC,OAAS,SAAUC,GACxB,OAAOA,EAAEC,QAAQ,yBAAyB,SAG5C,WACE,aAEA,IAAIC,EAIFA,EADoB,qBAAXC,QAA0BA,OAC/BA,OAEA,GAQND,EAAEE,IAAM,CACNC,SAAU,CACRC,UAAW,IACXC,UAAW,IACXC,SAAS,GAGXC,MAAO,CACLC,aAAc,SAAUC,EAAOC,GAC7B,IAAIC,EAAS,KACb,GAAIC,MAAMH,GACR,OAAOA,EAEP,GAAIE,EAAOE,KAAKJ,GACd,OAAOK,WAAWL,GAElB,IAAIM,EAAUC,SAASP,GACvB,OAAIG,MAAMG,GACD,KAEAA,IAOjBE,QAAS,CACPC,MAAO,SAAUhB,EAAKiB,GAEpB,IAAIf,EAAYe,EAAQf,UACpBC,EAAYc,EAAQd,UAGnBc,EAAQT,MAAMU,SACjBD,EAAQT,MAAMU,OAAS,GAEpBD,EAAQT,MAAMW,SACjBF,EAAQT,MAAMW,OAAS,GAIzB,IAAIC,EAAO,GACPC,EAAQ,GACRb,EAAQ,EACRD,EAAQ,GACRe,GAAO,EAEX,SAASC,IAMP,GAJAf,EAAQ,EACRD,EAAQ,GAGJU,EAAQO,OAASP,EAAQT,MAAMU,OAASD,EAAQO,MAKlD,OAHAH,EAAQ,GACRJ,EAAQT,MAAMU,cACdD,EAAQT,MAAMW,OAAS,GAIzB,QAA6BM,IAAzBR,EAAQS,aAEVN,EAAKO,KAAKN,OACL,CACL,IAAIO,EAAUX,EAAQS,aAAaL,EAAOJ,EAAQT,QAElC,IAAZoB,GACFR,EAAKO,KAAKC,GAMdP,EAAQ,GAGJJ,EAAQY,KAAOZ,EAAQT,MAAMU,QAAUD,EAAQY,MACjDP,GAAO,GAITL,EAAQT,MAAMU,SACdD,EAAQT,MAAMW,OAAS,EAGzB,SAASW,IACP,QAA6BL,IAAzBR,EAAQc,aAEVV,EAAMM,KAAKpB,QACN,GAAIU,EAAQb,SAAoC,IAAzBa,EAAQT,MAAMU,OAE1CG,EAAMM,KAAKpB,OACN,CACL,IAAIyB,EAAOf,EAAQc,aAAaxB,EAAOU,EAAQT,QAElC,IAATwB,GACFX,EAAMM,KAAKK,GAKfzB,EAAQ,GACRC,EAAQ,EAERS,EAAQT,MAAMW,SAIhB,IAAIc,EAAevC,OAAOC,OAAOO,GAC7BgC,EAAexC,OAAOC,OAAOQ,GAG7BgC,EAAQ,8BACRC,EAAWD,EAAME,OAuGrB,OAtGAD,EAAWA,EAASvC,QAAQ,KAAMoC,GAClCG,EAAWA,EAASvC,QAAQ,KAAMqC,GAClCC,EAAQ,IAAIzC,OAAO0C,EAAU,MAI7BpC,EAAIH,QAAQsC,EAAO,SAAUG,GAC3B,IAAIhB,EAGJ,OAAQd,GAEN,KAAK,EAEH,GAAI8B,IAAOpC,EAAW,CACpBK,GAAS,GACTuB,IACA,MAGF,GAAIQ,IAAOnC,EAAW,CACpBK,EAAQ,EACR,MAGF,GAAI,iBAAiBG,KAAK2B,GAAK,CAC7BR,IACAP,IACA,MAGFhB,GAAS+B,EACT9B,EAAQ,EACR,MAGF,KAAK,EAEH,GAAI8B,IAAOnC,EAAW,CACpBK,EAAQ,EACR,MAGFD,GAAS+B,EACT9B,EAAQ,EACR,MAGF,KAAK,EAEH,GAAI8B,IAAOnC,EAAW,CACpBI,GAAS+B,EACT9B,EAAQ,EACR,MAGF,GAAI8B,IAAOpC,EAAW,CACpB4B,IACA,MAGF,GAAI,iBAAiBnB,KAAK2B,GAAK,CAC7BR,IACAP,IACA,MAGF,MAAMgB,MAAM,oCAAsCtB,EAAQT,MAAMU,OAAS,SAAWD,EAAQT,MAAMW,OAAS,KAG7G,KAAK,EAEH,GAAImB,IAAOpC,EAAW,CACpB4B,IACA,MAGF,GAAI,iBAAiBnB,KAAK2B,GAAK,CAC7BR,IACAP,IACA,MAEF,GAAIe,IAAOnC,EAET,MAAMoC,MAAM,oCAAsCtB,EAAQT,MAAMU,OAAS,SAAWD,EAAQT,MAAMW,OAAS,KAG7G,MAAMoB,MAAM,mCAAqCtB,EAAQT,MAAMU,OAAS,SAAWD,EAAQT,MAAMW,OAAS,KAC5G,QAEE,MAAMoB,MAAM,oCAAsCtB,EAAQT,MAAMU,OAAS,SAAWD,EAAQT,MAAMW,OAAS,QAO5F,IAAjBE,EAAMmB,SACRV,IACAP,KAGKH,GAITqB,WAAY,SAAUzC,EAAKiB,GACzB,GAAKjB,EAAL,CAIAiB,EAAUA,GAAW,GAGrB,IAAIf,EAAYe,EAAQf,WAAaJ,EAAEE,IAAIC,SAASC,UAChDC,EAAYc,EAAQd,WAAaL,EAAEE,IAAIC,SAASE,UAGpDc,EAAQT,MAAQS,EAAQT,OAAS,GAC5BS,EAAQT,MAAMU,SACjBD,EAAQT,MAAMU,OAAS,GAIzB,IAAIwB,EAAU,GACVlC,EAAQ,EACRa,EAAQ,GACRC,GAAO,EAsCPW,EAAevC,OAAOC,OAAOO,GAC7BgC,EAAexC,OAAOC,OAAOQ,GAG7BgC,EAAQ,yBACRC,EAAWD,EAAME,OAoHrB,OAnHAD,EAAWA,EAASvC,QAAQ,KAAMoC,GAClCG,EAAWA,EAASvC,QAAQ,KAAMqC,GAClCC,EAAQ,IAAIzC,OAAO0C,EAAU,MAI7BpC,EAAIH,QAAQsC,EAAO,SAAUG,GAC3B,IAAIhB,EAGJ,OAAQd,GAEN,KAAK,EAEH,GAAI8B,IAAOpC,EAAW,CACpBmB,GAASiB,EACT9B,EAAQ,EACR,MAGF,GAAI8B,IAAOnC,EAAW,CACpBkB,GAASiB,EACT9B,EAAQ,EACR,MAGF,GAAW,OAAP8B,EAAa,CACfK,IACA,MAGF,GAAI,OAAOhC,KAAK2B,GACd,MAGFjB,GAASiB,EACT9B,EAAQ,EACR,MAGF,KAAK,EAEH,GAAI8B,IAAOnC,EAAW,CACpBkB,GAASiB,EACT9B,EAAQ,EACR,MAGFa,GAASiB,EACT9B,EAAQ,EACR,MAGF,KAAK,EAEH,IAAIoC,EAAWvB,EAAMwB,OAAOxB,EAAMmB,OAAS,GAC3C,GAAIF,IAAOnC,GAAayC,IAAazC,EAAW,CAC9CkB,GAASiB,EACT9B,EAAQ,EACR,MAGF,GAAI8B,IAAOpC,EAAW,CACpBmB,GAASiB,EACT9B,EAAQ,EACR,MAGF,GAAW,OAAP8B,EAAa,CACfK,IACA,MAGF,GAAW,OAAPL,EACF,MAGF,MAAMC,MAAM,oCAAsCtB,EAAQT,MAAMU,OAAS,KAG3E,KAAK,EAEH,GAAIoB,IAAOpC,EAAW,CACpBmB,GAASiB,EACT9B,EAAQ,EACR,MAGF,GAAW,OAAP8B,EAAa,CACfK,IACA,MAGF,GAAW,OAAPL,EACF,MAGF,GAAIA,IAAOnC,EACT,MAAMoC,MAAM,oCAAsCtB,EAAQT,MAAMU,OAAS,KAG3E,MAAMqB,MAAM,oCAAsCtB,EAAQT,MAAMU,OAAS,KAC3E,QAEE,MAAMqB,MAAM,oCAAsCtB,EAAQT,MAAMU,OAAS,QAOjE,KAAVG,GACFsB,IAGKD,EA7JP,SAASC,IAKP,GAHAnC,EAAQ,EAGJS,EAAQO,OAASP,EAAQT,MAAMU,OAASD,EAAQO,MAIlD,OAFAH,EAAQ,QACRJ,EAAQT,MAAMU,SAIhB,QAA6BO,IAAzBR,EAAQS,aAEVgB,EAAQf,KAAKN,OACR,CACL,IAAIO,EAAUX,EAAQS,aAAaL,EAAOJ,EAAQT,QAElC,IAAZoB,GACFc,EAAQf,KAAKC,GAKjBP,EAAQ,GAGJJ,EAAQY,KAAOZ,EAAQT,MAAMU,QAAUD,EAAQY,MACjDP,GAAO,GAITL,EAAQT,MAAMU,WAiIlB4B,WAAY,SAAU9C,EAAKiB,GAEzB,IAAIf,EAAYe,EAAQf,UACpBC,EAAYc,EAAQd,UAGnBc,EAAQT,MAAMU,SACjBD,EAAQT,MAAMU,OAAS,GAEpBD,EAAQT,MAAMW,SACjBF,EAAQT,MAAMW,OAAS,GAIzB,IAAIE,EAAQ,GACRb,EAAQ,EACRD,EAAQ,GAEZ,SAASuB,IACP,QAA6BL,IAAzBR,EAAQc,aAEVV,EAAMM,KAAKpB,OACN,CACL,IAAIyB,EAAOf,EAAQc,aAAaxB,EAAOU,EAAQT,QAElC,IAATwB,GACFX,EAAMM,KAAKK,GAIfzB,EAAQ,GACRC,EAAQ,EAERS,EAAQT,MAAMW,SAIhB,IAAKF,EAAQkB,MAAO,CAElB,IAAIF,EAAevC,OAAOC,OAAOO,GAC7BgC,EAAexC,OAAOC,OAAOQ,GAG7BgC,EAAQ,yBACRC,EAAWD,EAAME,OACrBD,EAAWA,EAASvC,QAAQ,KAAMoC,GAClCG,EAAWA,EAASvC,QAAQ,KAAMqC,GAClCjB,EAAQkB,MAAQ,IAAIzC,OAAO0C,EAAU,MAwFvC,OAnFApC,EAAIH,QAAQoB,EAAQkB,MAAO,SAAUG,GACnC,OAAQ9B,GAEN,KAAK,EAEH,GAAI8B,IAAOpC,EAAW,CACpBK,GAAS,GACTuB,IACA,MAGF,GAAIQ,IAAOnC,EAAW,CACpBK,EAAQ,EACR,MAGF,GAAW,OAAP8B,GAAsB,OAAPA,EACjB,MAGF/B,GAAS+B,EACT9B,EAAQ,EACR,MAGF,KAAK,EAEH,GAAI8B,IAAOnC,EAAW,CACpBK,EAAQ,EACR,MAGFD,GAAS+B,EACT9B,EAAQ,EACR,MAGF,KAAK,EAEH,GAAI8B,IAAOnC,EAAW,CACpBI,GAAS+B,EACT9B,EAAQ,EACR,MAGF,GAAI8B,IAAOpC,EAAW,CACpB4B,IACA,MAGF,GAAW,OAAPQ,GAAsB,OAAPA,EACjB,MAGF,MAAMC,MAAM,oCAAsCtB,EAAQT,MAAMU,OAAS,SAAWD,EAAQT,MAAMW,OAAS,KAG7G,KAAK,EAEH,GAAImB,IAAOpC,EAAW,CACpB4B,IACA,MAGF,GAAW,OAAPQ,GAAsB,OAAPA,EACjB,MAGF,GAAIA,IAAOnC,EACT,MAAMoC,MAAM,oCAAsCtB,EAAQT,MAAMU,OAAS,SAAWD,EAAQT,MAAMW,OAAS,KAG7G,MAAMoB,MAAM,mCAAqCtB,EAAQT,MAAMU,OAAS,SAAWD,EAAQT,MAAMW,OAAS,KAC5G,QAEE,MAAMoB,MAAM,oCAAsCtB,EAAQT,MAAMU,OAAS,SAAWD,EAAQT,MAAMW,OAAS,QAMjHW,IAEOT,IAIX0B,QAAS,CAWPC,qBAAsB,SAAUC,GAC9B,IAAIC,EAAI,GACJC,EAAW,GACXC,EAAQ,GACZ,IAAKF,KAAKD,EACR,IAAKE,KAAYF,EAAQC,GAClBD,EAAQC,GAAGG,eAAeF,IAC1BC,EAAME,QAAQH,GAAY,GACM,oBAAzBF,EAAQC,GAAGC,IACrBC,EAAMzB,KAAKwB,GAIjB,OAAOC,IAiBXG,QAAS,SAAUvD,EAAKiB,EAASuC,GAE/B,QAAgB/B,IAAZR,GAA8C,oBAAd,EAA0B,CAC5D,QAAiBQ,IAAb+B,EACF,OAAOC,QAAQC,MAAM,iEAEvBF,EAAWvC,EACXA,EAAU,GAGZA,OAAuBQ,IAAZR,EAAwBA,EAAU,GAC7C,IAAI0C,EAAS,GACbA,EAAOH,cAA0B/B,IAAb+B,GAAgD,oBAAf,GAA6BA,EAClFG,EAAOzD,UAAY,cAAee,EAAUA,EAAQf,UAAYJ,EAAEE,IAAIC,SAASC,UAC/EyD,EAAOxD,UAAY,cAAec,EAAUA,EAAQd,UAAYL,EAAEE,IAAIC,SAASE,UAC/E,IAAIK,OAA2BiB,IAAlBR,EAAQT,MAAsBS,EAAQT,MAAQ,GAG3DS,EAAU,CACRd,UAAWwD,EAAOxD,UAClBD,UAAWyD,EAAOzD,UAClBwB,aAAcT,EAAQS,aACtBK,aAAcd,EAAQc,aACtBvB,MAAOA,GAGT,IAAIa,EAAQvB,EAAEE,IAAIe,QAAQ+B,WAAW9C,EAAKiB,GAG1C,IAAK0C,EAAOH,SACV,OAAOnC,EAEPsC,EAAOH,SAAS,GAAInC,IAiBxBuC,SAAU,SAAU5D,EAAKiB,EAASuC,GAEhC,QAAgB/B,IAAZR,GAA8C,oBAAd,EAA0B,CAC5D,QAAiBQ,IAAb+B,EACF,OAAOC,QAAQC,MAAM,iEAEvBF,EAAWvC,EACXA,EAAU,GAGZA,OAAuBQ,IAAZR,EAAwBA,EAAU,GAC7C,IAAI0C,EAAS,GACbA,EAAOH,cAA0B/B,IAAb+B,GAAgD,oBAAf,GAA6BA,EAClFG,EAAOzD,UAAY,cAAee,EAAUA,EAAQf,UAAYJ,EAAEE,IAAIC,SAASC,UAC/EyD,EAAOxD,UAAY,cAAec,EAAUA,EAAQd,UAAYL,EAAEE,IAAIC,SAASE,UAG/E,IAAIiB,EAAO,GA8BX,GA7BAH,EAAU,CACRd,UAAWwD,EAAOxD,UAClBD,UAAWyD,EAAOzD,UAClB2D,WAAY5C,EAAQ4C,WACpBnC,aAAcT,EAAQS,aACtBK,aAAcd,EAAQc,aACtB+B,YAAa7C,EAAQ6C,YACrBtC,MAAOP,EAAQO,MACfK,IAAKZ,EAAQY,IACbrB,MAAO,CACLU,OAAQ,EACRC,OAAQ,SAKeM,IAAvBR,EAAQ4C,aACV7D,EAAMiB,EAAQ4C,WAAW7D,EAAKiB,EAAQT,QAIxCY,EAAOtB,EAAEE,IAAIe,QAAQC,MAAMhB,EAAKiB,QAGJQ,IAAxBR,EAAQ6C,cACV1C,EAAOH,EAAQ6C,YAAY1C,EAAMH,EAAQT,SAItCmD,EAAOH,SACV,OAAOpC,EAEPuC,EAAOH,SAAS,GAAIpC,IAgBxB2C,UAAW,SAAU/D,EAAKiB,EAASuC,GAEjC,QAAgB/B,IAAZR,GAA8C,oBAAd,EAA0B,CAC5D,QAAiBQ,IAAb+B,EACF,OAAOC,QAAQC,MAAM,iEAEvBF,EAAWvC,EACXA,EAAU,GAGZA,OAAuBQ,IAAZR,EAAwBA,EAAU,GAC7C,IAAI0C,EAAS,GACbA,EAAOH,cAA0B/B,IAAb+B,GAAgD,oBAAf,GAA6BA,EAClFG,EAAOzD,UAAY,cAAee,EAAUA,EAAQf,UAAYJ,EAAEE,IAAIC,SAASC,UAC/EyD,EAAOxD,UAAY,cAAec,EAAUA,EAAQd,UAAYL,EAAEE,IAAIC,SAASE,UAC/EwD,EAAOvD,QAAU,YAAaa,EAAUA,EAAQb,QAAUN,EAAEE,IAAIC,SAASG,QACzEa,EAAQO,MAAQ,UAAWP,EAAUA,EAAQO,MAAQ,EAGjDmC,EAAOvD,SACTa,EAAQO,QAENP,EAAQY,KAAO8B,EAAOvD,SACxBa,EAAQY,MAIV,IAAImC,EAAQ,GACR5C,EAAO,GAEXH,EAAU,CACRd,UAAWwD,EAAOxD,UAClBD,UAAWyD,EAAOzD,UAClB2D,WAAY5C,EAAQ4C,WACpBnC,aAAcT,EAAQS,aACtBK,aAAcd,EAAQc,aACtB+B,YAAa7C,EAAQ6C,YACrBtC,MAAOP,EAAQO,MACfK,IAAKZ,EAAQY,IACbrB,MAAO,CACLU,OAAQ,EACRC,OAAQ,GAEVgB,OAAO,EACP8B,UAAWhD,EAAQgD,WAIrB,IAAIC,EAAgB,CAClB/D,UAAWwD,EAAOxD,UAClBD,UAAWyD,EAAOzD,UAClBsB,MAAO,EACPK,IAAK,EACLrB,MAAO,CACLU,OAAQ,EACRC,OAAQ,GAEVf,SAAS,QAIgBqB,IAAvBR,EAAQ4C,aACV7D,EAAMiB,EAAQ4C,WAAW7D,EAAKiB,EAAQT,QAIxC,IAAI2D,EAAarE,EAAEE,IAAIe,QAAQ0B,WAAWzC,EAAKkE,GAC3C9D,EAAUN,EAAEE,IAAIuD,QAAQY,EAAW,GAAID,GAG3CF,EAAQlE,EAAEE,IAAIe,QAAQ0B,WAAWzC,EAAKiB,GAGtCA,EAAQT,MAAMW,OAAS,EAErBF,EAAQT,MAAMU,OADZd,EACqB,EAEA,EAIzB,IAAK,IAAIgE,EAAI,EAAGC,EAAML,EAAMxB,OAAQ4B,EAAIC,EAAKD,IAAK,CAGhD,IAFA,IAAI/C,EAAQvB,EAAEE,IAAIuD,QAAQS,EAAMI,GAAInD,GAChCqD,EAAS,GACJC,EAAI,EAAGA,EAAInE,EAAQoC,OAAQ+B,IAClCD,EAAOlE,EAAQmE,IAAMlD,EAAMkD,QAEH9C,IAAtBR,EAAQgD,UACV7C,EAAKO,KAAKV,EAAQgD,UAAUO,UAAK/C,EAAW6C,IAE5ClD,EAAKO,KAAK2C,GAIZrD,EAAQT,MAAMU,SAShB,QAL4BO,IAAxBR,EAAQ6C,cACV1C,EAAOH,EAAQ6C,YAAY1C,EAAMH,EAAQT,SAItCmD,EAAOH,SACV,OAAOpC,EAEPuC,EAAOH,SAAS,GAAIpC,IAexBqD,WAAY,SAAUC,EAAQzD,EAASuC,GAErC,QAAgB/B,IAAZR,GAA8C,oBAAd,EAA0B,CAC5D,QAAiBQ,IAAb+B,EACF,OAAOC,QAAQC,MAAM,iEAEvBF,EAAWvC,EACXA,EAAU,GAGZA,OAAuBQ,IAAZR,EAAwBA,EAAU,GAC7C,IAAI0C,EAAS,GACbA,EAAOH,cAA0B/B,IAAb+B,GAAgD,oBAAf,GAA6BA,EAClFG,EAAOzD,UAAY,cAAee,EAAUA,EAAQf,UAAYJ,EAAEE,IAAIC,SAASC,UAC/EyD,EAAOxD,UAAY,cAAec,EAAUA,EAAQd,UAAYL,EAAEE,IAAIC,SAASE,UAE/E,IACIwE,EACAC,EACAR,EACAG,EAJAM,EAAS,GAMb,IAAKT,EAAI,EAAGA,EAAIM,EAAOlC,OAAQ4B,IAAK,CAGlC,IAFAO,EAAOD,EAAON,GACdQ,EAAa,GACRL,EAAI,EAAGA,EAAII,EAAKnC,OAAQ+B,IAAK,CAChC,IAAIO,OAAwBrD,IAAZkD,EAAKJ,IAAgC,OAAZI,EAAKJ,GAAe,GAAKI,EAAKJ,GAAGQ,WACtED,EAASxB,QAAQK,EAAOxD,YAAc,IACxC2E,EAAWA,EAASjF,QAAQ,IAAIH,OAAOiE,EAAOxD,UAAW,KAAMwD,EAAOxD,UAAYwD,EAAOxD,YAG3F,IAAI6E,EAAa,YACjBA,EAAaA,EAAWnF,QAAQ,IAAK8D,EAAOzD,WAC5C8E,EAAaA,EAAWnF,QAAQ,IAAK8D,EAAOxD,WAExC2E,EAASG,OAAOD,IAAe,IACjCF,EAAWnB,EAAOxD,UAAY2E,EAAWnB,EAAOxD,WAElDyE,EAAWjD,KAAKmD,GAElBD,GAAUD,EAAWM,KAAKvB,EAAOzD,WAAa,KAIhD,IAAKyD,EAAOH,SACV,OAAOqB,EAEPlB,EAAOH,SAAS,GAAIqB,IA0BxBM,YAAa,SAAUlC,EAAShC,EAASuC,GAEvC,QAAgB/B,IAAZR,GAA8C,oBAAd,EAA0B,CAC5D,QAAiBQ,IAAb+B,EACF,OAAOC,QAAQC,MAAM,iEAEvBF,EAAWvC,EACXA,EAAU,GAGZA,OAAuBQ,IAAZR,EAAwBA,EAAU,GAC7C,IAAI0C,EAAS,GAab,GAZAA,EAAOH,cAA0B/B,IAAb+B,GAAgD,oBAAf,GAA6BA,EAClFG,EAAOzD,UAAY,cAAee,EAAUA,EAAQf,UAAYJ,EAAEE,IAAIC,SAASC,UAC/EyD,EAAOxD,UAAY,cAAec,EAAUA,EAAQd,UAAYL,EAAEE,IAAIC,SAASE,UAC/EwD,EAAOvD,QAAU,YAAaa,EAAUA,EAAQb,QAAUN,EAAEE,IAAIC,SAASG,QACzEuD,EAAOyB,UAAY,cAAenE,EAAUA,EAAQmE,UAAY,UAChEzB,EAAO0B,YAAc,gBAAiBpE,EAAUA,EAAQoE,YAAc,GACtE1B,EAAOM,UAAYhD,EAAQgD,UAEO,kBAAvBN,EAAO0B,cAChB1B,EAAO0B,YAAcvF,EAAEE,IAAIuD,QAAQI,EAAO0B,YAAa1B,SAGhClC,IAArBkC,EAAOM,UAAyB,CAClC,IAGIG,EAHAkB,EAAcrC,EAIlB,IAHAA,EAAU,GAGLmB,EAAI,EAAGA,EAAIkB,EAAY9C,OAAQ4B,IAClCnB,EAAQtB,KAAKgC,EAAOM,UAAUO,UAAK/C,EAAW6D,EAAYlB,KAI9D,IAiBIlB,EACAyB,EAlBAvB,EAAQtD,EAAEE,IAAI+C,QAAQC,qBAAqBC,GAM/C,GAJyB,UAArBU,EAAOyB,WACThC,EAAMmC,OAGJ5B,EAAO0B,YAAY7C,OAAS,EAAG,CACjC,IACIgD,EADAC,EAAc,GAAGC,OAAO/B,EAAO0B,aAEnC,IAAKG,EAAI,EAAGA,EAAIpC,EAAMZ,OAAQgD,IACxBC,EAAYnC,QAAQF,EAAMoC,IAAM,GAClCC,EAAY9D,KAAKyB,EAAMoC,IAG3BpC,EAAQqC,EAKV,IACItC,EADA0B,EAAS,GAMb,IAJIlB,EAAOvD,SACTyE,EAAOlD,KAAKyB,GAGTF,EAAI,EAAGA,EAAID,EAAQT,OAAQU,IAAK,CAEnC,IADAyB,EAAO,GACFa,EAAI,EAAGA,EAAIpC,EAAMZ,OAAQgD,IAC5BrC,EAAWC,EAAMoC,GACbrC,KAAYF,EAAQC,IAAsC,oBAAzBD,EAAQC,GAAGC,GAC9CwB,EAAKhD,KAAKsB,EAAQC,GAAGC,IAErBwB,EAAKhD,KAAK,IAGdkD,EAAOlD,KAAKgD,GAId,OAAO7E,EAAEE,IAAIyE,WAAWI,EAAQ5D,EAAS0C,EAAOH,YAMpD1D,EAAE6F,eAAiB7F,EAAEE,IAAIuD,QACzBzD,EAAE8F,UAAY9F,EAAEE,IAAI4D,SACpB9D,EAAE+F,eAAiB/F,EAAEE,IAAI+D,UAGY+B,EAAOC,UAC1CD,EAAOC,QAAUjG,EAAEE,MAEpBwE,KAAKwB","file":"js/chunk-2d230330.0c7659dc.js","sourcesContent":["/**\n * jQuery-csv (jQuery Plugin)\n *\n * This document is licensed as free software under the terms of the\n * MIT License: http://www.opensource.org/licenses/mit-license.php\n *\n * Acknowledgements:\n * The original design and influence to implement this library as a jquery\n * plugin is influenced by jquery-json (http://code.google.com/p/jquery-json/).\n * If you're looking to use native JSON.Stringify but want additional backwards\n * compatibility for browsers that don't support it, I highly recommend you\n * check it out.\n *\n * A special thanks goes out to rwk@acm.org for providing a lot of valuable\n * feedback to the project including the core for the new FSM\n * (Finite State Machine) parsers. If you're looking for a stable TSV parser\n * be sure to take a look at jquery-tsv (http://code.google.com/p/jquery-tsv/).\n\n * For legal purposes I'll include the \"NO WARRANTY EXPRESSED OR IMPLIED.\n * USE AT YOUR OWN RISK.\". Which, in 'layman's terms' means, by using this\n * library you are accepting responsibility if it breaks your code.\n *\n * Legal jargon aside, I will do my best to provide a useful and stable core\n * that can effectively be built on.\n *\n * Copyrighted 2012 by Evan Plaice.\n */\n\nRegExp.escape = function (s) {\n return s.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n};\n\n(function () {\n 'use strict';\n\n var $;\n\n // to keep backwards compatibility\n if (typeof jQuery !== 'undefined' && jQuery) {\n $ = jQuery;\n } else {\n $ = {};\n }\n\n /**\n * jQuery.csv.defaults\n * Encapsulates the method paramater defaults for the CSV plugin module.\n */\n\n $.csv = {\n defaults: {\n separator: ',',\n delimiter: '\"',\n headers: true\n },\n\n hooks: {\n castToScalar: function (value, state) {\n var hasDot = /\\./;\n if (isNaN(value)) {\n return value;\n } else {\n if (hasDot.test(value)) {\n return parseFloat(value);\n } else {\n var integer = parseInt(value);\n if (isNaN(integer)) {\n return null;\n } else {\n return integer;\n }\n }\n }\n }\n },\n\n parsers: {\n parse: function (csv, options) {\n // cache settings\n var separator = options.separator;\n var delimiter = options.delimiter;\n\n // set initial state if it's missing\n if (!options.state.rowNum) {\n options.state.rowNum = 1;\n }\n if (!options.state.colNum) {\n options.state.colNum = 1;\n }\n\n // clear initial state\n var data = [];\n var entry = [];\n var state = 0;\n var value = '';\n var exit = false;\n\n function endOfEntry () {\n // reset the state\n state = 0;\n value = '';\n\n // if 'start' hasn't been met, don't output\n if (options.start && options.state.rowNum < options.start) {\n // update global state\n entry = [];\n options.state.rowNum++;\n options.state.colNum = 1;\n return;\n }\n\n if (options.onParseEntry === undefined) {\n // onParseEntry hook not set\n data.push(entry);\n } else {\n var hookVal = options.onParseEntry(entry, options.state); // onParseEntry Hook\n // false skips the row, configurable through a hook\n if (hookVal !== false) {\n data.push(hookVal);\n }\n }\n // console.log('entry:' + entry);\n\n // cleanup\n entry = [];\n\n // if 'end' is met, stop parsing\n if (options.end && options.state.rowNum >= options.end) {\n exit = true;\n }\n\n // update global state\n options.state.rowNum++;\n options.state.colNum = 1;\n }\n\n function endOfValue () {\n if (options.onParseValue === undefined) {\n // onParseValue hook not set\n entry.push(value);\n } else if (options.headers && options.state.rowNum === 1) {\n // don't onParseValue object headers\n entry.push(value);\n } else {\n var hook = options.onParseValue(value, options.state); // onParseValue Hook\n // false skips the row, configurable through a hook\n if (hook !== false) {\n entry.push(hook);\n }\n }\n // console.log('value:' + value);\n // reset the state\n value = '';\n state = 0;\n // update global state\n options.state.colNum++;\n }\n\n // escape regex-specific control chars\n var escSeparator = RegExp.escape(separator);\n var escDelimiter = RegExp.escape(delimiter);\n\n // compile the regEx str using the custom delimiter/separator\n var match = /(D|S|\\r\\n|\\n|\\r|[^DS\\r\\n]+)/;\n var matchSrc = match.source;\n matchSrc = matchSrc.replace(/S/g, escSeparator);\n matchSrc = matchSrc.replace(/D/g, escDelimiter);\n match = new RegExp(matchSrc, 'gm');\n\n // put on your fancy pants...\n // process control chars individually, use look-ahead on non-control chars\n csv.replace(match, function (m0) {\n if (exit) {\n return;\n }\n switch (state) {\n // the start of a value\n case 0:\n // null last value\n if (m0 === separator) {\n value += '';\n endOfValue();\n break;\n }\n // opening delimiter\n if (m0 === delimiter) {\n state = 1;\n break;\n }\n // null last value\n if (/^(\\r\\n|\\n|\\r)$/.test(m0)) {\n endOfValue();\n endOfEntry();\n break;\n }\n // un-delimited value\n value += m0;\n state = 3;\n break;\n\n // delimited input\n case 1:\n // second delimiter? check further\n if (m0 === delimiter) {\n state = 2;\n break;\n }\n // delimited data\n value += m0;\n state = 1;\n break;\n\n // delimiter found in delimited input\n case 2:\n // escaped delimiter?\n if (m0 === delimiter) {\n value += m0;\n state = 1;\n break;\n }\n // null value\n if (m0 === separator) {\n endOfValue();\n break;\n }\n // end of entry\n if (/^(\\r\\n|\\n|\\r)$/.test(m0)) {\n endOfValue();\n endOfEntry();\n break;\n }\n // broken paser?\n throw Error('CSVDataError: Illegal State [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']');\n\n // un-delimited input\n case 3:\n // null last value\n if (m0 === separator) {\n endOfValue();\n break;\n }\n // end of entry\n if (/^(\\r\\n|\\n|\\r)$/.test(m0)) {\n endOfValue();\n endOfEntry();\n break;\n }\n if (m0 === delimiter) {\n // non-compliant data\n throw Error('CSVDataError: Illegal Quote [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']');\n }\n // broken parser?\n throw Error('CSVDataError: Illegal Data [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']');\n default:\n // shenanigans\n throw Error('CSVDataError: Unknown State [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']');\n }\n // console.log('val:' + m0 + ' state:' + state);\n });\n\n // submit the last entry\n // ignore null last line\n if (entry.length !== 0) {\n endOfValue();\n endOfEntry();\n }\n\n return data;\n },\n\n // a csv-specific line splitter\n splitLines: function (csv, options) {\n if (!csv) {\n return undefined;\n }\n\n options = options || {};\n\n // cache settings\n var separator = options.separator || $.csv.defaults.separator;\n var delimiter = options.delimiter || $.csv.defaults.delimiter;\n\n // set initial state if it's missing\n options.state = options.state || {};\n if (!options.state.rowNum) {\n options.state.rowNum = 1;\n }\n\n // clear initial state\n var entries = [];\n var state = 0;\n var entry = '';\n var exit = false;\n\n function endOfLine () {\n // reset the state\n state = 0;\n\n // if 'start' hasn't been met, don't output\n if (options.start && options.state.rowNum < options.start) {\n // update global state\n entry = '';\n options.state.rowNum++;\n return;\n }\n\n if (options.onParseEntry === undefined) {\n // onParseEntry hook not set\n entries.push(entry);\n } else {\n var hookVal = options.onParseEntry(entry, options.state); // onParseEntry Hook\n // false skips the row, configurable through a hook\n if (hookVal !== false) {\n entries.push(hookVal);\n }\n }\n\n // cleanup\n entry = '';\n\n // if 'end' is met, stop parsing\n if (options.end && options.state.rowNum >= options.end) {\n exit = true;\n }\n\n // update global state\n options.state.rowNum++;\n }\n\n // escape regex-specific control chars\n var escSeparator = RegExp.escape(separator);\n var escDelimiter = RegExp.escape(delimiter);\n\n // compile the regEx str using the custom delimiter/separator\n var match = /(D|S|\\n|\\r|[^DS\\r\\n]+)/;\n var matchSrc = match.source;\n matchSrc = matchSrc.replace(/S/g, escSeparator);\n matchSrc = matchSrc.replace(/D/g, escDelimiter);\n match = new RegExp(matchSrc, 'gm');\n\n // put on your fancy pants...\n // process control chars individually, use look-ahead on non-control chars\n csv.replace(match, function (m0) {\n if (exit) {\n return;\n }\n switch (state) {\n // the start of a value/entry\n case 0:\n // null value\n if (m0 === separator) {\n entry += m0;\n state = 0;\n break;\n }\n // opening delimiter\n if (m0 === delimiter) {\n entry += m0;\n state = 1;\n break;\n }\n // end of line\n if (m0 === '\\n') {\n endOfLine();\n break;\n }\n // phantom carriage return\n if (/^\\r$/.test(m0)) {\n break;\n }\n // un-delimit value\n entry += m0;\n state = 3;\n break;\n\n // delimited input\n case 1:\n // second delimiter? check further\n if (m0 === delimiter) {\n entry += m0;\n state = 2;\n break;\n }\n // delimited data\n entry += m0;\n state = 1;\n break;\n\n // delimiter found in delimited input\n case 2:\n // escaped delimiter?\n var prevChar = entry.substr(entry.length - 1);\n if (m0 === delimiter && prevChar === delimiter) {\n entry += m0;\n state = 1;\n break;\n }\n // end of value\n if (m0 === separator) {\n entry += m0;\n state = 0;\n break;\n }\n // end of line\n if (m0 === '\\n') {\n endOfLine();\n break;\n }\n // phantom carriage return\n if (m0 === '\\r') {\n break;\n }\n // broken paser?\n throw Error('CSVDataError: Illegal state [Row:' + options.state.rowNum + ']');\n\n // un-delimited input\n case 3:\n // null value\n if (m0 === separator) {\n entry += m0;\n state = 0;\n break;\n }\n // end of line\n if (m0 === '\\n') {\n endOfLine();\n break;\n }\n // phantom carriage return\n if (m0 === '\\r') {\n break;\n }\n // non-compliant data\n if (m0 === delimiter) {\n throw Error('CSVDataError: Illegal quote [Row:' + options.state.rowNum + ']');\n }\n // broken parser?\n throw Error('CSVDataError: Illegal state [Row:' + options.state.rowNum + ']');\n default:\n // shenanigans\n throw Error('CSVDataError: Unknown state [Row:' + options.state.rowNum + ']');\n }\n // console.log('val:' + m0 + ' state:' + state);\n });\n\n // submit the last entry\n // ignore null last line\n if (entry !== '') {\n endOfLine();\n }\n\n return entries;\n },\n\n // a csv entry parser\n parseEntry: function (csv, options) {\n // cache settings\n var separator = options.separator;\n var delimiter = options.delimiter;\n\n // set initial state if it's missing\n if (!options.state.rowNum) {\n options.state.rowNum = 1;\n }\n if (!options.state.colNum) {\n options.state.colNum = 1;\n }\n\n // clear initial state\n var entry = [];\n var state = 0;\n var value = '';\n\n function endOfValue () {\n if (options.onParseValue === undefined) {\n // onParseValue hook not set\n entry.push(value);\n } else {\n var hook = options.onParseValue(value, options.state); // onParseValue Hook\n // false skips the value, configurable through a hook\n if (hook !== false) {\n entry.push(hook);\n }\n }\n // reset the state\n value = '';\n state = 0;\n // update global state\n options.state.colNum++;\n }\n\n // checked for a cached regEx first\n if (!options.match) {\n // escape regex-specific control chars\n var escSeparator = RegExp.escape(separator);\n var escDelimiter = RegExp.escape(delimiter);\n\n // compile the regEx str using the custom delimiter/separator\n var match = /(D|S|\\n|\\r|[^DS\\r\\n]+)/;\n var matchSrc = match.source;\n matchSrc = matchSrc.replace(/S/g, escSeparator);\n matchSrc = matchSrc.replace(/D/g, escDelimiter);\n options.match = new RegExp(matchSrc, 'gm');\n }\n\n // put on your fancy pants...\n // process control chars individually, use look-ahead on non-control chars\n csv.replace(options.match, function (m0) {\n switch (state) {\n // the start of a value\n case 0:\n // null last value\n if (m0 === separator) {\n value += '';\n endOfValue();\n break;\n }\n // opening delimiter\n if (m0 === delimiter) {\n state = 1;\n break;\n }\n // skip un-delimited new-lines\n if (m0 === '\\n' || m0 === '\\r') {\n break;\n }\n // un-delimited value\n value += m0;\n state = 3;\n break;\n\n // delimited input\n case 1:\n // second delimiter? check further\n if (m0 === delimiter) {\n state = 2;\n break;\n }\n // delimited data\n value += m0;\n state = 1;\n break;\n\n // delimiter found in delimited input\n case 2:\n // escaped delimiter?\n if (m0 === delimiter) {\n value += m0;\n state = 1;\n break;\n }\n // null value\n if (m0 === separator) {\n endOfValue();\n break;\n }\n // skip un-delimited new-lines\n if (m0 === '\\n' || m0 === '\\r') {\n break;\n }\n // broken paser?\n throw Error('CSVDataError: Illegal State [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']');\n\n // un-delimited input\n case 3:\n // null last value\n if (m0 === separator) {\n endOfValue();\n break;\n }\n // skip un-delimited new-lines\n if (m0 === '\\n' || m0 === '\\r') {\n break;\n }\n // non-compliant data\n if (m0 === delimiter) {\n throw Error('CSVDataError: Illegal Quote [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']');\n }\n // broken parser?\n throw Error('CSVDataError: Illegal Data [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']');\n default:\n // shenanigans\n throw Error('CSVDataError: Unknown State [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']');\n }\n // console.log('val:' + m0 + ' state:' + state);\n });\n\n // submit the last value\n endOfValue();\n\n return entry;\n }\n },\n\n helpers: {\n\n /**\n * $.csv.helpers.collectPropertyNames(objectsArray)\n * Collects all unique property names from all passed objects.\n *\n * @param {Array} objects Objects to collect properties from.\n *\n * Returns an array of property names (array will be empty,\n * if objects have no own properties).\n */\n collectPropertyNames: function (objects) {\n var o = [];\n var propName = [];\n var props = [];\n for (o in objects) {\n for (propName in objects[o]) {\n if ((objects[o].hasOwnProperty(propName)) &&\n (props.indexOf(propName) < 0) &&\n (typeof objects[o][propName] !== 'function')) {\n props.push(propName);\n }\n }\n }\n return props;\n }\n },\n\n /**\n * $.csv.toArray(csv)\n * Converts a CSV entry string to a javascript array.\n *\n * @param {Array} csv The string containing the CSV data.\n * @param {Object} [options] An object containing user-defined options.\n * @param {Character} [separator] An override for the separator character. Defaults to a comma(,).\n * @param {Character} [delimiter] An override for the delimiter character. Defaults to a double-quote(\").\n *\n * This method deals with simple CSV strings only. It's useful if you only\n * need to parse a single entry. If you need to parse more than one line,\n * use $.csv2Array instead.\n */\n toArray: function (csv, options, callback) {\n // if callback was passed to options swap callback with options\n if (options !== undefined && typeof (options) === 'function') {\n if (callback !== undefined) {\n return console.error('You cannot 3 arguments with the 2nd argument being a function');\n }\n callback = options;\n options = {};\n }\n\n options = (options !== undefined ? options : {});\n var config = {};\n config.callback = ((callback !== undefined && typeof (callback) === 'function') ? callback : false);\n config.separator = 'separator' in options ? options.separator : $.csv.defaults.separator;\n config.delimiter = 'delimiter' in options ? options.delimiter : $.csv.defaults.delimiter;\n var state = (options.state !== undefined ? options.state : {});\n\n // setup\n options = {\n delimiter: config.delimiter,\n separator: config.separator,\n onParseEntry: options.onParseEntry,\n onParseValue: options.onParseValue,\n state: state\n };\n\n var entry = $.csv.parsers.parseEntry(csv, options);\n\n // push the value to a callback if one is defined\n if (!config.callback) {\n return entry;\n } else {\n config.callback('', entry);\n }\n },\n\n /**\n * $.csv.toArrays(csv)\n * Converts a CSV string to a javascript array.\n *\n * @param {String} csv The string containing the raw CSV data.\n * @param {Object} [options] An object containing user-defined options.\n * @param {Character} [separator] An override for the separator character. Defaults to a comma(,).\n * @param {Character} [delimiter] An override for the delimiter character. Defaults to a double-quote(\").\n *\n * This method deals with multi-line CSV. The breakdown is simple. The first\n * dimension of the array represents the line (or entry/row) while the second\n * dimension contains the values (or values/columns).\n */\n toArrays: function (csv, options, callback) {\n // if callback was passed to options swap callback with options\n if (options !== undefined && typeof (options) === 'function') {\n if (callback !== undefined) {\n return console.error('You cannot 3 arguments with the 2nd argument being a function');\n }\n callback = options;\n options = {};\n }\n\n options = (options !== undefined ? options : {});\n var config = {};\n config.callback = ((callback !== undefined && typeof (callback) === 'function') ? callback : false);\n config.separator = 'separator' in options ? options.separator : $.csv.defaults.separator;\n config.delimiter = 'delimiter' in options ? options.delimiter : $.csv.defaults.delimiter;\n\n // setup\n var data = [];\n options = {\n delimiter: config.delimiter,\n separator: config.separator,\n onPreParse: options.onPreParse,\n onParseEntry: options.onParseEntry,\n onParseValue: options.onParseValue,\n onPostParse: options.onPostParse,\n start: options.start,\n end: options.end,\n state: {\n rowNum: 1,\n colNum: 1\n }\n };\n\n // onPreParse hook\n if (options.onPreParse !== undefined) {\n csv = options.onPreParse(csv, options.state);\n }\n\n // parse the data\n data = $.csv.parsers.parse(csv, options);\n\n // onPostParse hook\n if (options.onPostParse !== undefined) {\n data = options.onPostParse(data, options.state);\n }\n\n // push the value to a callback if one is defined\n if (!config.callback) {\n return data;\n } else {\n config.callback('', data);\n }\n },\n\n /**\n * $.csv.toObjects(csv)\n * Converts a CSV string to a javascript object.\n * @param {String} csv The string containing the raw CSV data.\n * @param {Object} [options] An object containing user-defined options.\n * @param {Character} [separator] An override for the separator character. Defaults to a comma(,).\n * @param {Character} [delimiter] An override for the delimiter character. Defaults to a double-quote(\").\n * @param {Boolean} [headers] Indicates whether the data contains a header line. Defaults to true.\n *\n * This method deals with multi-line CSV strings. Where the headers line is\n * used as the key for each value per entry.\n */\n toObjects: function (csv, options, callback) {\n // if callback was passed to options swap callback with options\n if (options !== undefined && typeof (options) === 'function') {\n if (callback !== undefined) {\n return console.error('You cannot 3 arguments with the 2nd argument being a function');\n }\n callback = options;\n options = {};\n }\n\n options = (options !== undefined ? options : {});\n var config = {};\n config.callback = ((callback !== undefined && typeof (callback) === 'function') ? callback : false);\n config.separator = 'separator' in options ? options.separator : $.csv.defaults.separator;\n config.delimiter = 'delimiter' in options ? options.delimiter : $.csv.defaults.delimiter;\n config.headers = 'headers' in options ? options.headers : $.csv.defaults.headers;\n options.start = 'start' in options ? options.start : 1;\n\n // account for headers\n if (config.headers) {\n options.start++;\n }\n if (options.end && config.headers) {\n options.end++;\n }\n\n // setup\n var lines = [];\n var data = [];\n\n options = {\n delimiter: config.delimiter,\n separator: config.separator,\n onPreParse: options.onPreParse,\n onParseEntry: options.onParseEntry,\n onParseValue: options.onParseValue,\n onPostParse: options.onPostParse,\n start: options.start,\n end: options.end,\n state: {\n rowNum: 1,\n colNum: 1\n },\n match: false,\n transform: options.transform\n };\n\n // fetch the headers\n var headerOptions = {\n delimiter: config.delimiter,\n separator: config.separator,\n start: 1,\n end: 1,\n state: {\n rowNum: 1,\n colNum: 1\n },\n headers: true\n };\n\n // onPreParse hook\n if (options.onPreParse !== undefined) {\n csv = options.onPreParse(csv, options.state);\n }\n\n // parse the csv\n var headerLine = $.csv.parsers.splitLines(csv, headerOptions);\n var headers = $.csv.toArray(headerLine[0], headerOptions);\n\n // fetch the data\n lines = $.csv.parsers.splitLines(csv, options);\n\n // reset the state for re-use\n options.state.colNum = 1;\n if (headers) {\n options.state.rowNum = 2;\n } else {\n options.state.rowNum = 1;\n }\n\n // convert data to objects\n for (var i = 0, len = lines.length; i < len; i++) {\n var entry = $.csv.toArray(lines[i], options);\n var object = {};\n for (var j = 0; j < headers.length; j++) {\n object[headers[j]] = entry[j];\n }\n if (options.transform !== undefined) {\n data.push(options.transform.call(undefined, object));\n } else {\n data.push(object);\n }\n\n // update row state\n options.state.rowNum++;\n }\n\n // onPostParse hook\n if (options.onPostParse !== undefined) {\n data = options.onPostParse(data, options.state);\n }\n\n // push the value to a callback if one is defined\n if (!config.callback) {\n return data;\n } else {\n config.callback('', data);\n }\n },\n\n /**\n * $.csv.fromArrays(arrays)\n * Converts a javascript array to a CSV String.\n *\n * @param {Array} arrays An array containing an array of CSV entries.\n * @param {Object} [options] An object containing user-defined options.\n * @param {Character} [separator] An override for the separator character. Defaults to a comma(,).\n * @param {Character} [delimiter] An override for the delimiter character. Defaults to a double-quote(\").\n *\n * This method generates a CSV file from an array of arrays (representing entries).\n */\n fromArrays: function (arrays, options, callback) {\n // if callback was passed to options swap callback with options\n if (options !== undefined && typeof (options) === 'function') {\n if (callback !== undefined) {\n return console.error('You cannot 3 arguments with the 2nd argument being a function');\n }\n callback = options;\n options = {};\n }\n\n options = (options !== undefined ? options : {});\n var config = {};\n config.callback = ((callback !== undefined && typeof (callback) === 'function') ? callback : false);\n config.separator = 'separator' in options ? options.separator : $.csv.defaults.separator;\n config.delimiter = 'delimiter' in options ? options.delimiter : $.csv.defaults.delimiter;\n\n var output = '';\n var line;\n var lineValues;\n var i;\n var j;\n\n for (i = 0; i < arrays.length; i++) {\n line = arrays[i];\n lineValues = [];\n for (j = 0; j < line.length; j++) {\n var strValue = (line[j] === undefined || line[j] === null) ? '' : line[j].toString();\n if (strValue.indexOf(config.delimiter) > -1) {\n strValue = strValue.replace(new RegExp(config.delimiter, 'g'), config.delimiter + config.delimiter);\n }\n\n var escMatcher = '\\n|\\r|S|D';\n escMatcher = escMatcher.replace('S', config.separator);\n escMatcher = escMatcher.replace('D', config.delimiter);\n\n if (strValue.search(escMatcher) > -1) {\n strValue = config.delimiter + strValue + config.delimiter;\n }\n lineValues.push(strValue);\n }\n output += lineValues.join(config.separator) + '\\n';\n }\n\n // push the value to a callback if one is defined\n if (!config.callback) {\n return output;\n } else {\n config.callback('', output);\n }\n },\n\n /**\n * $.csv.fromObjects(objects)\n * Converts a javascript dictionary to a CSV string.\n *\n * @param {Object} objects An array of objects containing the data.\n * @param {Object} [options] An object containing user-defined options.\n * @param {Character} [separator] An override for the separator character. Defaults to a comma(,).\n * @param {Character} [delimiter] An override for the delimiter character. Defaults to a double-quote(\").\n * @param {Character} [sortOrder] Sort order of columns (named after\n * object properties). Use 'alpha' for alphabetic. Default is 'declare',\n * which means, that properties will _probably_ appear in order they were\n * declared for the object. But without any guarantee.\n * @param {Character or Array} [manualOrder] Manually order columns. May be\n * a strin in a same csv format as an output or an array of header names\n * (array items won't be parsed). All the properties, not present in\n * `manualOrder` will be appended to the end in accordance with `sortOrder`\n * option. So the `manualOrder` always takes preference, if present.\n *\n * This method generates a CSV file from an array of objects (name:value pairs).\n * It starts by detecting the headers and adding them as the first line of\n * the CSV file, followed by a structured dump of the data.\n */\n fromObjects: function (objects, options, callback) {\n // if callback was passed to options swap callback with options\n if (options !== undefined && typeof (options) === 'function') {\n if (callback !== undefined) {\n return console.error('You cannot 3 arguments with the 2nd argument being a function');\n }\n callback = options;\n options = {};\n }\n\n options = (options !== undefined ? options : {});\n var config = {};\n config.callback = ((callback !== undefined && typeof (callback) === 'function') ? callback : false);\n config.separator = 'separator' in options ? options.separator : $.csv.defaults.separator;\n config.delimiter = 'delimiter' in options ? options.delimiter : $.csv.defaults.delimiter;\n config.headers = 'headers' in options ? options.headers : $.csv.defaults.headers;\n config.sortOrder = 'sortOrder' in options ? options.sortOrder : 'declare';\n config.manualOrder = 'manualOrder' in options ? options.manualOrder : [];\n config.transform = options.transform;\n\n if (typeof config.manualOrder === 'string') {\n config.manualOrder = $.csv.toArray(config.manualOrder, config);\n }\n\n if (config.transform !== undefined) {\n var origObjects = objects;\n objects = [];\n\n var i;\n for (i = 0; i < origObjects.length; i++) {\n objects.push(config.transform.call(undefined, origObjects[i]));\n }\n }\n\n var props = $.csv.helpers.collectPropertyNames(objects);\n\n if (config.sortOrder === 'alpha') {\n props.sort();\n } // else {} - nothing to do for 'declare' order\n\n if (config.manualOrder.length > 0) {\n var propsManual = [].concat(config.manualOrder);\n var p;\n for (p = 0; p < props.length; p++) {\n if (propsManual.indexOf(props[p]) < 0) {\n propsManual.push(props[p]);\n }\n }\n props = propsManual;\n }\n\n var o;\n var line;\n var output = [];\n var propName;\n if (config.headers) {\n output.push(props);\n }\n\n for (o = 0; o < objects.length; o++) {\n line = [];\n for (p = 0; p < props.length; p++) {\n propName = props[p];\n if (propName in objects[o] && typeof objects[o][propName] !== 'function') {\n line.push(objects[o][propName]);\n } else {\n line.push('');\n }\n }\n output.push(line);\n }\n\n // push the value to a callback if one is defined\n return $.csv.fromArrays(output, options, config.callback);\n }\n };\n\n // Maintenance code to maintain backward-compatibility\n // Will be removed in release 1.0\n $.csvEntry2Array = $.csv.toArray;\n $.csv2Array = $.csv.toArrays;\n $.csv2Dictionary = $.csv.toObjects;\n\n // CommonJS module is defined\n if (typeof module !== 'undefined' && module.exports) {\n module.exports = $.csv;\n }\n}).call(this);\n"],"sourceRoot":""}