{"version":3,"file":"app22c89185084827473e74.js?3.11.5.0f839ec2e.1741817651184","mappings":"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,GACNsB,QAASA,GACTolB,OAAQA,GACRkrG,MAAOA,GACPzyF,OAAQA,GACRgoG,UAAWA,GACX3kE,QAAS2kE,GACTzuH,OAAQA,GACR4uH,UAAWA,GACXtjH,OAAQsjH,GACRzrI,SAAUA,GACVhD,OAAQA,GACRgjC,MAAOA,GACP4rG,IAAKA,GACLj4I,IAAKA,GACLu/C,IAAKA,GACLm5F,UAAWA,GACXL,SAAUA,GACVlD,SAAUA,EACVvtI,KAAMA,GACNuwI,OAAQD,GACR9gH,SAAUA,GACVwhH,WAAYA,GACZ1+F,QAASA,GACTzvC,QAASyvC,GACT2+F,MAAOA,GACP1pG,OAAQA,GACRve,IAAKA,GACLgiB,OAAQwmG,GACRxzH,SAAUyzH,GACVC,iBAAkBA,GAClBp0D,SAAUA,GACV1+E,OAAQA,GACRgxB,SAAUA,GACV7L,MAAOA,GACP49C,SAAUA,GACV8wE,QAASA,GACT1xH,KAAMA,GACNggH,QAASA,GACT+R,QAASA,GACTl/E,MAAOA,GACPtV,MAAOA,GACP+uB,SAAUA,GACVgF,SAAUA,GACVxwB,KAAMA,GACN31C,OAAQA,GACRynI,QAASA,GACTxqF,MAAOA,GACPD,OAAQA,GACRzP,KAAMA,GACNm6F,QAASA,GACT1W,UAAWA,GACXC,cAAeA,GACf2W,YAAaA,GACb/9H,QAASA,GACT6rG,YAAaA,GACb5yF,KAAMA,GACNmwE,OAAQnwE,GACRw7C,UAAWA,GACXl9C,KAAMA,GACNviB,QAASuiB,GACTriB,IAAKA,GACLixH,QAASjxH,GACT2yE,OAAQA,GACRu+C,MAAOv+C,GACPw+C,OAAQx+C,GACRy+C,YAAaA,GACbC,MAAOD,GACPrkH,OAAQA,GACRywB,OAAQzwB,GACR+E,OAAQA,GACRjV,MAAOA,GACP+C,IAAK/C,GACL4zH,KAAMA,GACNa,IAAKb,GACLnlH,SAAUA,GACV05D,SAAU15D,GACVimH,QAASjmH,GACTo0F,OAAQA,GACR0P,MAAOA,GACPwhB,MAAOA,GACPpuE,IAAKA,GACL2nB,IAAKA,GACLwnD,QAASA,GACTC,OAAQA,GACRf,OAAQA,GACRiB,QAASA,GACTE,QAASA,GACTD,QAASA,GACTF,UAAWA,GACX3tG,QAASA,GACT0/C,KAAMA,GACN2hC,KAAMA,GACNa,KAAMA,GACNvqE,MAAOA,GACPd,KAAMc,GACN21F,KAAM31F,GACNwY,QAASA,GACT1pB,KAAMA,GACN0kE,KAAMA,GACNsgC,KAAMtgC,GACNoiC,KAAMpiC,GACNxZ,QAASA,GACTi0D,QAASA,GACT5nE,QAASA,GACT+nC,KAAMA,GACN7+D,OAAQ6+D,GACRggC,MAAOA,GACPE,aAAcA,GACdzY,WAAYA,GACZ2Y,MAAOA,GACPM,UAAWN,GACXxmC,IAAKA,GACLniG,OAAQA,GACR0tF,MAAOA,GACPk7C,MAAOA,GACPE,MAAOA,GACP,QAAWnH,EACb,EAKI71F,GAAIg9F,GAAMC,IAId,OAFAj9F,GAAEA,CAAC,CAAGA,GAECA,EAET,E;;;;8FCh/DA,SAASo9F,EAAgB/mI,CAAC,CAAE8nC,CAAC,EAC3B,GAAI,CAAE9nC,CAAAA,aAAa8nC,CAAAA,EAAI,MAAM,UAAc,oCAC7C,C;;oJCDA,SAASk/F,EAAkBt3I,CAAC,CAAEotF,CAAC,EAC7B,IAAK,IAAIn/E,EAAI,EAAGA,EAAIm/E,EAAE7vF,MAAM,CAAE0Q,IAAK,CACjC,IAAIZ,EAAI+/E,CAAC,CAACn/E,EAAE,CACZZ,EAAEo5C,UAAU,CAAGp5C,EAAEo5C,UAAU,EAAI,CAAC,EAAGp5C,EAAE0xC,YAAY,CAAG,CAAC,EAAG,UAAW1xC,GAAMA,CAAAA,EAAEs5C,QAAQ,CAAG,CAAC,GAAI3jD,OAAO87C,cAAc,CAAC9+C,EAAG,QAAcqN,EAAEnQ,GAAG,EAAGmQ,EAC5I,CACF,CACA,SAASkqI,EAAav3I,CAAC,CAAEotF,CAAC,CAAEn/E,CAAC,EAC3B,OAAOm/E,GAAKkqD,EAAkBt3I,EAAErH,SAAS,CAAEy0F,GAAIn/E,GAAKqpI,EAAkBt3I,EAAGiO,GAAIjL,OAAO87C,cAAc,CAAC9+C,EAAG,YAAa,CACjH2mD,SAAU,CAAC,CACb,GAAI3mD,CACN,C;;uJCVA,SAASw3I,EAAgBx3I,CAAC,CAAEotF,CAAC,CAAEn/E,CAAC,EAC9B,MAAO,CAACm/E,EAAI,QAAcA,EAAC,IAAMptF,EAAIgD,OAAO87C,cAAc,CAAC9+C,EAAGotF,EAAG,CAC/D1rF,MAAOuM,EACPw4C,WAAY,CAAC,EACb1H,aAAc,CAAC,EACf4H,SAAU,CAAC,CACb,GAAK3mD,CAAC,CAACotF,EAAE,CAAGn/E,EAAGjO,CACjB,C;;yICPA,SAASy3I,EAAYxpI,CAAC,CAAEm/E,CAAC,EACvB,GAAI,UAAY,QAAQn/E,IAAM,CAACA,EAAG,OAAOA,EACzC,IAAIjO,EAAIiO,CAAC,CAACy7B,OAAO+tG,WAAW,CAAC,CAC7B,GAAI,KAAK,IAAMz3I,EAAG,CAChB,IAAI1C,EAAI0C,EAAEvB,IAAI,CAACwP,EAAGm/E,GAAK,WACvB,GAAI,UAAY,QAAQ9vF,GAAI,OAAOA,CACnC,OAAM,UAAc,+CACtB,CACA,MAAO,CAAC,WAAa8vF,EAAIzgD,OAASu3B,MAAK,EAAGj2D,EAC5C,CCRA,SAASypI,EAAczpI,CAAC,EACtB,IAAI3Q,EAAIm6I,EAAYxpI,EAAG,UACvB,MAAO,UAAY,QAAQ3Q,GAAKA,EAAIA,EAAI,EAC1C,C;;sFCLA,SAASq6I,EAAQtqI,CAAC,EAGhB,MAIGsqI,CAJIA,EAAU,YAAc,OAAOjuG,QAAU,UAAY,OAAOA,OAAO3a,QAAQ,CAAG,SAAU1hB,CAAC,EAC9F,OAAO,OAAOA,CAChB,EAAI,SAAUA,CAAC,EACb,OAAOA,GAAK,YAAc,OAAOq8B,QAAUr8B,EAAElK,WAAW,GAAKumC,QAAUr8B,IAAMq8B,OAAO/wC,SAAS,CAAG,SAAW,OAAO0U,CACpH,GAAWA,EACb,C;;;;i0FCPIuqI,yBAA2B,CAAC,EAGhC,SAASC,oBAAoBC,CAAQ,EAEpC,IAAIC,EAAeH,wBAAwB,CAACE,EAAS,CACrD,GAAIC,KAAiBn8I,IAAjBm8I,EAA4B,CAC/B,GAAIA,KAAuBn8I,IAAvBm8I,EAAa75I,KAAK,CAAgB,MAAM65I,EAAa75I,KAAK,CAC9D,OAAO65I,EAAat/I,OAAO,CAG5B,IAAID,EAASo/I,wBAAwB,CAACE,EAAS,CAAG,CACjDt6I,GAAIs6I,EACJ95C,OAAQ,GACRvlG,QAAS,CAAC,CACX,EAGIu/I,EAAQ,GACZ,GAAI,CACHC,mBAAmB,CAACH,EAAS,CAACr5I,IAAI,CAACjG,EAAOC,OAAO,CAAED,EAAQA,EAAOC,OAAO,CAAEo/I,qBAC3EG,EAAQ,EACT,QAAU,CACNA,GAAO,OAAOJ,wBAAwB,CAACE,EAAS,CAOpD,OAHAt/I,EAAOwlG,MAAM,CAAG,GAGTxlG,EAAOC,OAAO,CAItBo/I,oBAAoB7xG,CAAC,CAAGiyG,oB,MCnCxBJ,oBAAoBK,IAAI,CAAG,CAAC,C,WCC5BL,oBAAoBz/F,CAAC,CAAG,IACvB,IAAI0d,EAASt9D,GAAUA,EAAO2/I,UAAU,CACvC,IAAO3/I,EAAO,OAAU,CACxB,IAAOA,EAER,OADAq/I,oBAAoBjwE,CAAC,CAAC9R,EAAQ,CAAExlD,EAAGwlD,CAAO,GACnCA,CACR,C,WCPA,IACIsiF,EADA3xG,EAAWzjC,OAAO0pB,cAAc,CAAG,GAAU1pB,OAAO0pB,cAAc,CAACzf,GAAQ,GAAUA,EAAIkqI,SAAS,CAQtGU,oBAAoB5pI,CAAC,CAAG,SAASvM,CAAK,CAAEsC,CAAI,EAE3C,GADU,EAAPA,GAAUtC,CAAAA,EAAQ,IAAI,CAACA,EAAK,EACrB,EAAPsC,GACA,iBAAOtC,GAAsBA,IACpB,EAAPsC,GAAatC,EAAMy2I,UAAU,EAC9B,GAACn0I,GAAc,mBAAOtC,EAAMK,IAAI,EAHvB,OAAOL,EAKpB,IAAIksF,EAAK5qF,OAAOC,MAAM,CAAC,MACvB40I,oBAAoBzqD,CAAC,CAACQ,GACtB,IAAIyqD,EAAM,CAAC,EACXD,EAAiBA,GAAkB,CAAC,KAAM3xG,EAAS,CAAC,GAAIA,EAAS,EAAE,EAAGA,EAASA,GAAU,CACzF,IAAI,IAAIw0B,EAAUj3D,EAAAA,GAAYtC,EAAO,iBAAOu5D,GAAuB,CAAC,CAACm9E,EAAe7gI,OAAO,CAAC0jD,GAAUA,EAAUx0B,EAASw0B,GACxHj4D,OAAO0+E,mBAAmB,CAACzmB,GAAS1uD,OAAO,CAAC,GAAU8rI,CAAG,CAACn7I,EAAI,CAAG,IAAOwE,CAAK,CAACxE,EAAI,EAInF,OAFAm7I,EAAI,OAAU,CAAG,IAAO32I,EACxBm2I,oBAAoBjwE,CAAC,CAACgmB,EAAIyqD,GACnBzqD,CACR,C,WCxBAiqD,oBAAoBjwE,CAAC,CAAG,CAACnvE,EAAS2Q,KACjC,IAAI,IAAIlM,KAAOkM,EACXyuI,oBAAoBxqI,CAAC,CAACjE,EAAYlM,IAAQ,CAAC26I,oBAAoBxqI,CAAC,CAAC5U,EAASyE,IAC5E8F,OAAO87C,cAAc,CAACrmD,EAASyE,EAAK,CAAEupD,WAAY,GAAM7sD,IAAKwP,CAAU,CAAClM,EAAI,EAG/E,C,WCPA26I,oBAAoBpqH,CAAC,CAAG,CAAC,EAGzBoqH,oBAAoB73I,CAAC,CAAG,GAChBmC,QAAQkK,GAAG,CAACrJ,OAAOoH,IAAI,CAACytI,oBAAoBpqH,CAAC,EAAE2xD,MAAM,CAAC,CAACh8D,EAAUlmB,KACvE26I,oBAAoBpqH,CAAC,CAACvwB,EAAI,CAACo7I,EAASl1H,GAC7BA,GACL,EAAE,E,WCNNy0H,oBAAoB3lC,CAAC,CAAG,GAEhB,GAAKomC,EAAe,EAAC,GAAK,uBAAuB,GAAK,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,K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","sources":["webpack://mono-repo/./node_modules/ajv/lib/ajv.js","webpack://mono-repo/./node_modules/ajv/lib/cache.js","webpack://mono-repo/./node_modules/ajv/lib/compile/async.js","webpack://mono-repo/./node_modules/ajv/lib/compile/error_classes.js","webpack://mono-repo/./node_modules/ajv/lib/compile/formats.js","webpack://mono-repo/./node_modules/ajv/lib/compile/index.js","webpack://mono-repo/./node_modules/ajv/lib/compile/resolve.js","webpack://mono-repo/./node_modules/ajv/lib/compile/rules.js","webpack://mono-repo/./node_modules/ajv/lib/compile/schema_obj.js","webpack://mono-repo/./node_modules/ajv/lib/compile/ucs2length.js","webpack://mono-repo/./node_modules/ajv/lib/compile/util.js","webpack://mono-repo/./node_modules/ajv/lib/data.js","webpack://mono-repo/./node_modules/ajv/lib/definition_schema.js","webpack://mono-repo/./node_modules/ajv/lib/dotjs/_limit.js","webpack://mono-repo/./node_modules/ajv/lib/dotjs/_limitItems.js","webpack://mono-repo/./node_modules/ajv/lib/dotjs/_limitLength.js","webpack://mono-repo/./node_modules/ajv/lib/dotjs/_limitProperties.js","webpack://mono-repo/./node_modules/ajv/lib/dotjs/allOf.js","webpack://mono-repo/./node_modules/ajv/lib/dotjs/anyOf.js","webpack://mono-repo/./node_modules/ajv/lib/dotjs/comment.js","webpack://mono-repo/./node_modules/ajv/lib/dotjs/const.js","webpack://mono-repo/./node_modules/ajv/lib/dotjs/contains.js","webpack://mono-repo/./node_modules/ajv/lib/dotjs/custom.js","webpack://mono-repo/./node_modules/ajv/lib/dotjs/dependencies.js","webpack://mono-repo/./node_modules/ajv/lib/dotjs/enum.js","webpack://mono-repo/./node_modules/ajv/lib/dotjs/format.js","webpack://mono-repo/./node_modules/ajv/lib/dotjs/if.js","webpack://mono-repo/./node_modules/ajv/lib/dotjs/index.js","webpack://mono-repo/./node_modules/ajv/lib/dotjs/items.js","webpack://mono-repo/./node_modules/ajv/lib/dotjs/multipleOf.js","webpack://mono-repo/./node_modules/ajv/lib/dotjs/not.js","webpack://mono-repo/./node_modules/ajv/lib/dotjs/oneOf.js","webpack://mono-repo/./node_modules/ajv/lib/dotjs/pattern.js","webpack://mono-repo/./node_modules/ajv/lib/dotjs/properties.js","webpack://mono-repo/./node_modules/ajv/lib/dotjs/propertyNames.js","webpack://mono-repo/./node_modules/ajv/lib/dotjs/ref.js","webpack://mono-repo/./node_modules/ajv/lib/dotjs/required.js","webpack://mono-repo/./node_modules/ajv/lib/dotjs/uniqueItems.js","webpack://mono-repo/./node_modules/ajv/lib/dotjs/validate.js","webpack://mono-repo/./node_modules/ajv/lib/keyword.js","webpack://mono-repo/./node_modules/axios/index.js","webpack://mono-repo/./node_modules/axios/lib/adapters/xhr.js","webpack://mono-repo/./node_modules/axios/lib/axios.js","webpack://mono-repo/./node_modules/axios/lib/cancel/Cancel.js","webpack://mono-repo/./node_modules/axios/lib/cancel/CancelToken.js","webpack://mono-repo/./node_modules/axios/lib/cancel/isCancel.js","webpack://mono-repo/./node_modules/axios/lib/core/Axios.js","webpack://mono-repo/./node_modules/axios/lib/core/InterceptorManager.js","webpack://mono-repo/./node_modules/axios/lib/core/buildFullPath.js","webpack://mono-repo/./node_modules/axios/lib/core/createError.js","webpack://mono-repo/./node_modules/axios/lib/core/dispatchRequest.js","webpack://mono-repo/./node_modules/axios/lib/core/enhanceError.js","webpack://mono-repo/./node_modules/axios/lib/core/mergeConfig.js","webpack://mono-repo/./node_modules/axios/lib/core/settle.js","webpack://mono-repo/./node_modules/axios/lib/core/transformData.js","webpack://mono-repo/./node_modules/axios/lib/defaults.js","webpack://mono-repo/./node_modules/axios/lib/env/data.js","webpack://mono-repo/./node_modules/axios/lib/helpers/bind.js","webpack://mono-repo/./node_modules/axios/lib/helpers/buildURL.js","webpack://mono-repo/./node_modules/axios/lib/helpers/combineURLs.js","webpack://mono-repo/./node_modules/axios/lib/helpers/cookies.js","webpack://mono-repo/./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack://mono-repo/./node_modules/axios/lib/helpers/isAxiosError.js","webpack://mono-repo/./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack://mono-repo/./node_modules/axios/lib/helpers/normalizeHeaderName.js","webpack://mono-repo/./node_modules/axios/lib/helpers/parseHeaders.js","webpack://mono-repo/./node_modules/axios/lib/helpers/spread.js","webpack://mono-repo/./node_modules/axios/lib/helpers/validator.js","webpack://mono-repo/./node_modules/axios/lib/utils.js","webpack://mono-repo/./node_modules/jquery/dist/jquery-exposed.js","webpack://mono-repo/./src/js/lib/backbone-exposed.js","webpack://mono-repo/./src/js/lib/modernizr/modernizr-exposed.js","webpack://mono-repo/./src/js/lib/underscore-exposed.js","webpack://mono-repo/./node_modules/expose-loader/dist/runtime/getGlobalThis.js","webpack://mono-repo/./node_modules/fast-deep-equal/index.js","webpack://mono-repo/./node_modules/fast-json-stable-stringify/index.js","webpack://mono-repo/./node_modules/global/document.js","webpack://mono-repo/./node_modules/global/window.js","webpack://mono-repo/./node_modules/hammerjs/hammer.js","webpack://mono-repo/./node_modules/jquery-i18next/dist/commonjs/index.js","webpack://mono-repo/./node_modules/jquery-i18next/index.js","webpack://mono-repo/./node_modules/jquery/dist/jquery.js","webpack://mono-repo/./node_modules/json-schema-traverse/index.js","webpack://mono-repo/./node_modules/locallyjs/dist/locally.js","webpack://mono-repo/./node_modules/lz-string/libs/lz-string.js","webpack://mono-repo/./node_modules/ms/index.js","webpack://mono-repo/./packages/core-app/src/config.ts","webpack://mono-repo/./build-targets/theme/packages/core-app/src/config.ts","webpack://mono-repo/./packages/core-asset/src/config.js","webpack://mono-repo/./build-targets/theme/packages/core-asset/src/config.js","webpack://mono-repo/./packages/core-app-next/src/utils/getPublicProperty.ts","webpack://mono-repo/./packages/core-app/src/collections/labelValues.js","webpack://mono-repo/./packages/core-app/src/collections/batchJobs.js","webpack://mono-repo/./packages/core-app/src/collections/singleton/batchJobs.ts","webpack://mono-repo/./packages/core-app/src/collections/publicProperties.js","webpack://mono-repo/./packages/core-app/src/collections/singleton/publicProperties.ts","webpack://mono-repo/./packages/core-app/src/models/socket.js","webpack://mono-repo/./packages/core-app/src/collections/singleton/websocket.ts","webpack://mono-repo/./packages/core-app/src/models/batchJob.js","webpack://mono-repo/./packages/core-app/src/models/labelValue.js","webpack://mono-repo/./packages/core-app/src/models/pager.js","webpack://mono-repo/./packages/core-auth/src/models/samlService.js","webpack://mono-repo/./packages/core-auth/src/collections/samlServices.js","webpack://mono-repo/./packages/core/src/lib/netx-session.js","webpack://mono-repo/./packages/core-auth/src/collections/singleton/session.ts","webpack://mono-repo/./packages/core-auth/src/config.js","webpack://mono-repo/./packages/core-cms-next/src/utils/getCurrentPortal.ts","webpack://mono-repo/./packages/core-cms-next/src/utils/getCurrentPortalProp.ts","webpack://mono-repo/./packages/core-cms-next/src/utils/isBrandPortal.ts","webpack://mono-repo/./packages/core-components/Theme/constants.ts","webpack://mono-repo/./packages/core-components/Theme/utils/getBrowserPreferedThemeMode.ts","webpack://mono-repo/./packages/core-components/Theme/utils/netxThemeModeToThemeMode.ts","webpack://mono-repo/./packages/core-next/src/config.ts","webpack://mono-repo/./packages/core-next/src/instance/dispatcher.ts","webpack://mono-repo/./packages/core-next/src/instance/localStore.ts","webpack://mono-repo/./node_modules/tslog/dist/esm/prettyLogStyles.js","webpack://mono-repo/./node_modules/tslog/dist/esm/formatTemplate.js","webpack://mono-repo/./node_modules/tslog/dist/esm/formatNumberAddZeros.js","webpack://mono-repo/./node_modules/tslog/dist/esm/urlToObj.js","webpack://mono-repo/./node_modules/tslog/dist/esm/runtime/browser/helper.jsonStringifyRecursive.js","webpack://mono-repo/./node_modules/tslog/dist/esm/runtime/browser/util.inspect.polyfil.js","webpack://mono-repo/./node_modules/tslog/dist/esm/runtime/browser/index.js","webpack://mono-repo/./node_modules/tslog/dist/esm/BaseLogger.js","webpack://mono-repo/./node_modules/tslog/dist/esm/index.js","webpack://mono-repo/./packages/core-next/src/instance/logger.ts","webpack://mono-repo/./packages/core-next/src/instance/router.ts","webpack://mono-repo/./packages/core-next/src/locales/constants.ts","webpack://mono-repo/./packages/core-next/src/locales/i18n.ts","webpack://mono-repo/./node_modules/i18next/dist/esm/i18next.js","webpack://mono-repo/./node_modules/i18next-xhr-backend/dist/esm/i18nextXHRBackend.js","webpack://mono-repo/./node_modules/i18next-browser-languagedetector/dist/esm/i18nextBrowserLanguageDetector.js","webpack://mono-repo/./packages/core-next/src/locales/backend.ts","webpack://mono-repo/./packages/core-next/src/locales/locales.ts","webpack://mono-repo/./packages/core-next/src/locales/utils/getAvailableLocales.ts","webpack://mono-repo/./packages/core-next/src/locales/utils/i18nLocaleCompare.ts","webpack://mono-repo/./packages/core-next/src/locales/utils/Locales.ts","webpack://mono-repo/./packages/core-next/src/url.ts","webpack://mono-repo/./packages/core-next/src/utils/array/arrayToCsv.ts","webpack://mono-repo/./packages/core-next/src/utils/array/csvToArray.ts","webpack://mono-repo/./packages/core-next/src/utils/browser/isFirefox.ts","webpack://mono-repo/./packages/core-next/src/utils/object/typedEntries.ts","webpack://mono-repo/./packages/core-next/src/utils/setGlobal.ts","webpack://mono-repo/./packages/core-user-next/src/constants.ts","webpack://mono-repo/./packages/core-user-next/src/utils/currentUserMeetsUserLevel.ts","webpack://mono-repo/./packages/core-user-next/src/utils/getPreference.ts","webpack://mono-repo/./packages/core-user-next/src/utils/getUserLevel.ts","webpack://mono-repo/./packages/core-user-next/src/utils/getUserId.ts","webpack://mono-repo/./packages/core-user-next/src/utils/isPublicUser.ts","webpack://mono-repo/./packages/core-user-next/src/utils/setPreference.ts","webpack://mono-repo/./packages/core-user/src/models/group.js","webpack://mono-repo/./packages/core-user/src/collections/groups.js","webpack://mono-repo/./packages/core-next/src/utils/object/deepObjectExtend.ts","webpack://mono-repo/./packages/core-user/src/models/userPrefs.js","webpack://mono-repo/./packages/core-user/src/collections/singletons/userPreferences.ts","webpack://mono-repo/./packages/core-user/src/collections/singletons/userProfile.ts","webpack://mono-repo/./packages/core-user/src/collections/users.js","webpack://mono-repo/./packages/core-user/src/models/userProfile.js","webpack://mono-repo/./packages/core-user/src/properties/user.js","webpack://mono-repo/./packages/core/src/lib/backbone-netx.js","webpack://mono-repo/./packages/core/src/lib/jquery-netx.js","webpack://mono-repo/./build-targets/theme/packages/core/src/lib/jquery-netx.js","webpack://mono-repo/./packages/core/src/bootstrap.js","webpack://mono-repo/./packages/core/src/css.ts","webpack://mono-repo/./packages/core/src/lib/netx-collection.js","webpack://mono-repo/./packages/core/src/utils/protectObjectProxy.ts","webpack://mono-repo/./packages/core/src/lib/netx-model.js","webpack://mono-repo/./packages/core/src/lib/netx-routers-app.js","webpack://mono-repo/./packages/core/src/lib/underscore-netx.js","webpack://mono-repo/./packages/core/src/utils/escapeURI.ts","webpack://mono-repo/./packages/core/src/utils/unescapeURI.ts","webpack://mono-repo/./node_modules/uri-js/dist/es5/uri.all.js","webpack://mono-repo/./src/js/lib/backbone.js","webpack://mono-repo/./src/js/lib/backbone.rpc.js","webpack://mono-repo/./src/js/lib/modernizr/modernizr.js","webpack://mono-repo/./src/js/lib/polyfills/polyfills-netx.js","webpack://mono-repo/./src/js/lib/underscore.js","webpack://mono-repo/./node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack://mono-repo/./node_modules/@babel/runtime/helpers/esm/createClass.js","webpack://mono-repo/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://mono-repo/./node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://mono-repo/./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://mono-repo/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://mono-repo/webpack/bootstrap","webpack://mono-repo/webpack/runtime/amd options","webpack://mono-repo/webpack/runtime/compat get default export","webpack://mono-repo/webpack/runtime/create fake namespace object","webpack://mono-repo/webpack/runtime/define property getters","webpack://mono-repo/webpack/runtime/ensure chunk","webpack://mono-repo/webpack/runtime/get javascript chunk filename","webpack://mono-repo/webpack/runtime/get mini-css chunk filename","webpack://mono-repo/webpack/runtime/global","webpack://mono-repo/webpack/runtime/harmony module decorator","webpack://mono-repo/webpack/runtime/hasOwnProperty shorthand","webpack://mono-repo/webpack/runtime/load script","webpack://mono-repo/webpack/runtime/make namespace object","webpack://mono-repo/webpack/runtime/node module decorator","webpack://mono-repo/webpack/runtime/publicPath","webpack://mono-repo/webpack/runtime/css loading","webpack://mono-repo/webpack/runtime/jsonp chunk loading","webpack://mono-repo/webpack/runtime/nonce","webpack://mono-repo/./packages/core/src/app.js"],"sourcesContent":["'use strict';\n\nvar compileSchema = require('./compile')\n , resolve = require('./compile/resolve')\n , Cache = require('./cache')\n , SchemaObject = require('./compile/schema_obj')\n , stableStringify = require('fast-json-stable-stringify')\n , formats = require('./compile/formats')\n , rules = require('./compile/rules')\n , $dataMetaSchema = require('./data')\n , util = require('./compile/util');\n\nmodule.exports = Ajv;\n\nAjv.prototype.validate = validate;\nAjv.prototype.compile = compile;\nAjv.prototype.addSchema = addSchema;\nAjv.prototype.addMetaSchema = addMetaSchema;\nAjv.prototype.validateSchema = validateSchema;\nAjv.prototype.getSchema = getSchema;\nAjv.prototype.removeSchema = removeSchema;\nAjv.prototype.addFormat = addFormat;\nAjv.prototype.errorsText = errorsText;\n\nAjv.prototype._addSchema = _addSchema;\nAjv.prototype._compile = _compile;\n\nAjv.prototype.compileAsync = require('./compile/async');\nvar customKeyword = require('./keyword');\nAjv.prototype.addKeyword = customKeyword.add;\nAjv.prototype.getKeyword = customKeyword.get;\nAjv.prototype.removeKeyword = customKeyword.remove;\nAjv.prototype.validateKeyword = customKeyword.validate;\n\nvar errorClasses = require('./compile/error_classes');\nAjv.ValidationError = errorClasses.Validation;\nAjv.MissingRefError = errorClasses.MissingRef;\nAjv.$dataMetaSchema = $dataMetaSchema;\n\nvar META_SCHEMA_ID = 'http://json-schema.org/draft-07/schema';\n\nvar META_IGNORE_OPTIONS = [ 'removeAdditional', 'useDefaults', 'coerceTypes', 'strictDefaults' ];\nvar META_SUPPORT_DATA = ['/properties'];\n\n/**\n * Creates validator instance.\n * Usage: `Ajv(opts)`\n * @param {Object} opts optional options\n * @return {Object} ajv instance\n */\nfunction Ajv(opts) {\n if (!(this instanceof Ajv)) return new Ajv(opts);\n opts = this._opts = util.copy(opts) || {};\n setLogger(this);\n this._schemas = {};\n this._refs = {};\n this._fragments = {};\n this._formats = formats(opts.format);\n\n this._cache = opts.cache || new Cache;\n this._loadingSchemas = {};\n this._compilations = [];\n this.RULES = rules();\n this._getId = chooseGetId(opts);\n\n opts.loopRequired = opts.loopRequired || Infinity;\n if (opts.errorDataPath == 'property') opts._errorDataPathProperty = true;\n if (opts.serialize === undefined) opts.serialize = stableStringify;\n this._metaOpts = getMetaSchemaOptions(this);\n\n if (opts.formats) addInitialFormats(this);\n if (opts.keywords) addInitialKeywords(this);\n addDefaultMetaSchema(this);\n if (typeof opts.meta == 'object') this.addMetaSchema(opts.meta);\n if (opts.nullable) this.addKeyword('nullable', {metaSchema: {type: 'boolean'}});\n addInitialSchemas(this);\n}\n\n\n\n/**\n * Validate data using schema\n * Schema will be compiled and cached (using serialized JSON as key. [fast-json-stable-stringify](https://github.com/epoberezkin/fast-json-stable-stringify) is used to serialize.\n * @this Ajv\n * @param {String|Object} schemaKeyRef key, ref or schema object\n * @param {Any} data to be validated\n * @return {Boolean} validation result. Errors from the last validation will be available in `ajv.errors` (and also in compiled schema: `schema.errors`).\n */\nfunction validate(schemaKeyRef, data) {\n var v;\n if (typeof schemaKeyRef == 'string') {\n v = this.getSchema(schemaKeyRef);\n if (!v) throw new Error('no schema with key or ref \"' + schemaKeyRef + '\"');\n } else {\n var schemaObj = this._addSchema(schemaKeyRef);\n v = schemaObj.validate || this._compile(schemaObj);\n }\n\n var valid = v(data);\n if (v.$async !== true) this.errors = v.errors;\n return valid;\n}\n\n\n/**\n * Create validating function for passed schema.\n * @this Ajv\n * @param {Object} schema schema object\n * @param {Boolean} _meta true if schema is a meta-schema. Used internally to compile meta schemas of custom keywords.\n * @return {Function} validating function\n */\nfunction compile(schema, _meta) {\n var schemaObj = this._addSchema(schema, undefined, _meta);\n return schemaObj.validate || this._compile(schemaObj);\n}\n\n\n/**\n * Adds schema to the instance.\n * @this Ajv\n * @param {Object|Array} schema schema or array of schemas. If array is passed, `key` and other parameters will be ignored.\n * @param {String} key Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.\n * @param {Boolean} _skipValidation true to skip schema validation. Used internally, option validateSchema should be used instead.\n * @param {Boolean} _meta true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.\n * @return {Ajv} this for method chaining\n */\nfunction addSchema(schema, key, _skipValidation, _meta) {\n if (Array.isArray(schema)){\n for (var i=0; i<schema.length; i++) this.addSchema(schema[i], undefined, _skipValidation, _meta);\n return this;\n }\n var id = this._getId(schema);\n if (id !== undefined && typeof id != 'string')\n throw new Error('schema id must be string');\n key = resolve.normalizeId(key || id);\n checkUnique(this, key);\n this._schemas[key] = this._addSchema(schema, _skipValidation, _meta, true);\n return this;\n}\n\n\n/**\n * Add schema that will be used to validate other schemas\n * options in META_IGNORE_OPTIONS are alway set to false\n * @this Ajv\n * @param {Object} schema schema object\n * @param {String} key optional schema key\n * @param {Boolean} skipValidation true to skip schema validation, can be used to override validateSchema option for meta-schema\n * @return {Ajv} this for method chaining\n */\nfunction addMetaSchema(schema, key, skipValidation) {\n this.addSchema(schema, key, skipValidation, true);\n return this;\n}\n\n\n/**\n * Validate schema\n * @this Ajv\n * @param {Object} schema schema to validate\n * @param {Boolean} throwOrLogError pass true to throw (or log) an error if invalid\n * @return {Boolean} true if schema is valid\n */\nfunction validateSchema(schema, throwOrLogError) {\n var $schema = schema.$schema;\n if ($schema !== undefined && typeof $schema != 'string')\n throw new Error('$schema must be a string');\n $schema = $schema || this._opts.defaultMeta || defaultMeta(this);\n if (!$schema) {\n this.logger.warn('meta-schema not available');\n this.errors = null;\n return true;\n }\n var valid = this.validate($schema, schema);\n if (!valid && throwOrLogError) {\n var message = 'schema is invalid: ' + this.errorsText();\n if (this._opts.validateSchema == 'log') this.logger.error(message);\n else throw new Error(message);\n }\n return valid;\n}\n\n\nfunction defaultMeta(self) {\n var meta = self._opts.meta;\n self._opts.defaultMeta = typeof meta == 'object'\n ? self._getId(meta) || meta\n : self.getSchema(META_SCHEMA_ID)\n ? META_SCHEMA_ID\n : undefined;\n return self._opts.defaultMeta;\n}\n\n\n/**\n * Get compiled schema from the instance by `key` or `ref`.\n * @this Ajv\n * @param {String} keyRef `key` that was passed to `addSchema` or full schema reference (`schema.id` or resolved id).\n * @return {Function} schema validating function (with property `schema`).\n */\nfunction getSchema(keyRef) {\n var schemaObj = _getSchemaObj(this, keyRef);\n switch (typeof schemaObj) {\n case 'object': return schemaObj.validate || this._compile(schemaObj);\n case 'string': return this.getSchema(schemaObj);\n case 'undefined': return _getSchemaFragment(this, keyRef);\n }\n}\n\n\nfunction _getSchemaFragment(self, ref) {\n var res = resolve.schema.call(self, { schema: {} }, ref);\n if (res) {\n var schema = res.schema\n , root = res.root\n , baseId = res.baseId;\n var v = compileSchema.call(self, schema, root, undefined, baseId);\n self._fragments[ref] = new SchemaObject({\n ref: ref,\n fragment: true,\n schema: schema,\n root: root,\n baseId: baseId,\n validate: v\n });\n return v;\n }\n}\n\n\nfunction _getSchemaObj(self, keyRef) {\n keyRef = resolve.normalizeId(keyRef);\n return self._schemas[keyRef] || self._refs[keyRef] || self._fragments[keyRef];\n}\n\n\n/**\n * Remove cached schema(s).\n * If no parameter is passed all schemas but meta-schemas are removed.\n * If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed.\n * Even if schema is referenced by other schemas it still can be removed as other schemas have local references.\n * @this Ajv\n * @param {String|Object|RegExp} schemaKeyRef key, ref, pattern to match key/ref or schema object\n * @return {Ajv} this for method chaining\n */\nfunction removeSchema(schemaKeyRef) {\n if (schemaKeyRef instanceof RegExp) {\n _removeAllSchemas(this, this._schemas, schemaKeyRef);\n _removeAllSchemas(this, this._refs, schemaKeyRef);\n return this;\n }\n switch (typeof schemaKeyRef) {\n case 'undefined':\n _removeAllSchemas(this, this._schemas);\n _removeAllSchemas(this, this._refs);\n this._cache.clear();\n return this;\n case 'string':\n var schemaObj = _getSchemaObj(this, schemaKeyRef);\n if (schemaObj) this._cache.del(schemaObj.cacheKey);\n delete this._schemas[schemaKeyRef];\n delete this._refs[schemaKeyRef];\n return this;\n case 'object':\n var serialize = this._opts.serialize;\n var cacheKey = serialize ? serialize(schemaKeyRef) : schemaKeyRef;\n this._cache.del(cacheKey);\n var id = this._getId(schemaKeyRef);\n if (id) {\n id = resolve.normalizeId(id);\n delete this._schemas[id];\n delete this._refs[id];\n }\n }\n return this;\n}\n\n\nfunction _removeAllSchemas(self, schemas, regex) {\n for (var keyRef in schemas) {\n var schemaObj = schemas[keyRef];\n if (!schemaObj.meta && (!regex || regex.test(keyRef))) {\n self._cache.del(schemaObj.cacheKey);\n delete schemas[keyRef];\n }\n }\n}\n\n\n/* @this Ajv */\nfunction _addSchema(schema, skipValidation, meta, shouldAddSchema) {\n if (typeof schema != 'object' && typeof schema != 'boolean')\n throw new Error('schema should be object or boolean');\n var serialize = this._opts.serialize;\n var cacheKey = serialize ? serialize(schema) : schema;\n var cached = this._cache.get(cacheKey);\n if (cached) return cached;\n\n shouldAddSchema = shouldAddSchema || this._opts.addUsedSchema !== false;\n\n var id = resolve.normalizeId(this._getId(schema));\n if (id && shouldAddSchema) checkUnique(this, id);\n\n var willValidate = this._opts.validateSchema !== false && !skipValidation;\n var recursiveMeta;\n if (willValidate && !(recursiveMeta = id && id == resolve.normalizeId(schema.$schema)))\n this.validateSchema(schema, true);\n\n var localRefs = resolve.ids.call(this, schema);\n\n var schemaObj = new SchemaObject({\n id: id,\n schema: schema,\n localRefs: localRefs,\n cacheKey: cacheKey,\n meta: meta\n });\n\n if (id[0] != '#' && shouldAddSchema) this._refs[id] = schemaObj;\n this._cache.put(cacheKey, schemaObj);\n\n if (willValidate && recursiveMeta) this.validateSchema(schema, true);\n\n return schemaObj;\n}\n\n\n/* @this Ajv */\nfunction _compile(schemaObj, root) {\n if (schemaObj.compiling) {\n schemaObj.validate = callValidate;\n callValidate.schema = schemaObj.schema;\n callValidate.errors = null;\n callValidate.root = root ? root : callValidate;\n if (schemaObj.schema.$async === true)\n callValidate.$async = true;\n return callValidate;\n }\n schemaObj.compiling = true;\n\n var currentOpts;\n if (schemaObj.meta) {\n currentOpts = this._opts;\n this._opts = this._metaOpts;\n }\n\n var v;\n try { v = compileSchema.call(this, schemaObj.schema, root, schemaObj.localRefs); }\n catch(e) {\n delete schemaObj.validate;\n throw e;\n }\n finally {\n schemaObj.compiling = false;\n if (schemaObj.meta) this._opts = currentOpts;\n }\n\n schemaObj.validate = v;\n schemaObj.refs = v.refs;\n schemaObj.refVal = v.refVal;\n schemaObj.root = v.root;\n return v;\n\n\n /* @this {*} - custom context, see passContext option */\n function callValidate() {\n /* jshint validthis: true */\n var _validate = schemaObj.validate;\n var result = _validate.apply(this, arguments);\n callValidate.errors = _validate.errors;\n return result;\n }\n}\n\n\nfunction chooseGetId(opts) {\n switch (opts.schemaId) {\n case 'auto': return _get$IdOrId;\n case 'id': return _getId;\n default: return _get$Id;\n }\n}\n\n/* @this Ajv */\nfunction _getId(schema) {\n if (schema.$id) this.logger.warn('schema $id ignored', schema.$id);\n return schema.id;\n}\n\n/* @this Ajv */\nfunction _get$Id(schema) {\n if (schema.id) this.logger.warn('schema id ignored', schema.id);\n return schema.$id;\n}\n\n\nfunction _get$IdOrId(schema) {\n if (schema.$id && schema.id && schema.$id != schema.id)\n throw new Error('schema $id is different from id');\n return schema.$id || schema.id;\n}\n\n\n/**\n * Convert array of error message objects to string\n * @this Ajv\n * @param {Array<Object>} errors optional array of validation errors, if not passed errors from the instance are used.\n * @param {Object} options optional options with properties `separator` and `dataVar`.\n * @return {String} human readable string with all errors descriptions\n */\nfunction errorsText(errors, options) {\n errors = errors || this.errors;\n if (!errors) return 'No errors';\n options = options || {};\n var separator = options.separator === undefined ? ', ' : options.separator;\n var dataVar = options.dataVar === undefined ? 'data' : options.dataVar;\n\n var text = '';\n for (var i=0; i<errors.length; i++) {\n var e = errors[i];\n if (e) text += dataVar + e.dataPath + ' ' + e.message + separator;\n }\n return text.slice(0, -separator.length);\n}\n\n\n/**\n * Add custom format\n * @this Ajv\n * @param {String} name format name\n * @param {String|RegExp|Function} format string is converted to RegExp; function should return boolean (true when valid)\n * @return {Ajv} this for method chaining\n */\nfunction addFormat(name, format) {\n if (typeof format == 'string') format = new RegExp(format);\n this._formats[name] = format;\n return this;\n}\n\n\nfunction addDefaultMetaSchema(self) {\n var $dataSchema;\n if (self._opts.$data) {\n $dataSchema = require('./refs/data.json');\n self.addMetaSchema($dataSchema, $dataSchema.$id, true);\n }\n if (self._opts.meta === false) return;\n var metaSchema = require('./refs/json-schema-draft-07.json');\n if (self._opts.$data) metaSchema = $dataMetaSchema(metaSchema, META_SUPPORT_DATA);\n self.addMetaSchema(metaSchema, META_SCHEMA_ID, true);\n self._refs['http://json-schema.org/schema'] = META_SCHEMA_ID;\n}\n\n\nfunction addInitialSchemas(self) {\n var optsSchemas = self._opts.schemas;\n if (!optsSchemas) return;\n if (Array.isArray(optsSchemas)) self.addSchema(optsSchemas);\n else for (var key in optsSchemas) self.addSchema(optsSchemas[key], key);\n}\n\n\nfunction addInitialFormats(self) {\n for (var name in self._opts.formats) {\n var format = self._opts.formats[name];\n self.addFormat(name, format);\n }\n}\n\n\nfunction addInitialKeywords(self) {\n for (var name in self._opts.keywords) {\n var keyword = self._opts.keywords[name];\n self.addKeyword(name, keyword);\n }\n}\n\n\nfunction checkUnique(self, id) {\n if (self._schemas[id] || self._refs[id])\n throw new Error('schema with key or id \"' + id + '\" already exists');\n}\n\n\nfunction getMetaSchemaOptions(self) {\n var metaOpts = util.copy(self._opts);\n for (var i=0; i<META_IGNORE_OPTIONS.length; i++)\n delete metaOpts[META_IGNORE_OPTIONS[i]];\n return metaOpts;\n}\n\n\nfunction setLogger(self) {\n var logger = self._opts.logger;\n if (logger === false) {\n self.logger = {log: noop, warn: noop, error: noop};\n } else {\n if (logger === undefined) logger = console;\n if (!(typeof logger == 'object' && logger.log && logger.warn && logger.error))\n throw new Error('logger must implement log, warn and error methods');\n self.logger = logger;\n }\n}\n\n\nfunction noop() {}\n","'use strict';\n\n\nvar Cache = module.exports = function Cache() {\n this._cache = {};\n};\n\n\nCache.prototype.put = function Cache_put(key, value) {\n this._cache[key] = value;\n};\n\n\nCache.prototype.get = function Cache_get(key) {\n return this._cache[key];\n};\n\n\nCache.prototype.del = function Cache_del(key) {\n delete this._cache[key];\n};\n\n\nCache.prototype.clear = function Cache_clear() {\n this._cache = {};\n};\n","'use strict';\n\nvar MissingRefError = require('./error_classes').MissingRef;\n\nmodule.exports = compileAsync;\n\n\n/**\n * Creates validating function for passed schema with asynchronous loading of missing schemas.\n * `loadSchema` option should be a function that accepts schema uri and returns promise that resolves with the schema.\n * @this Ajv\n * @param {Object} schema schema object\n * @param {Boolean} meta optional true to compile meta-schema; this parameter can be skipped\n * @param {Function} callback an optional node-style callback, it is called with 2 parameters: error (or null) and validating function.\n * @return {Promise} promise that resolves with a validating function.\n */\nfunction compileAsync(schema, meta, callback) {\n /* eslint no-shadow: 0 */\n /* global Promise */\n /* jshint validthis: true */\n var self = this;\n if (typeof this._opts.loadSchema != 'function')\n throw new Error('options.loadSchema should be a function');\n\n if (typeof meta == 'function') {\n callback = meta;\n meta = undefined;\n }\n\n var p = loadMetaSchemaOf(schema).then(function () {\n var schemaObj = self._addSchema(schema, undefined, meta);\n return schemaObj.validate || _compileAsync(schemaObj);\n });\n\n if (callback) {\n p.then(\n function(v) { callback(null, v); },\n callback\n );\n }\n\n return p;\n\n\n function loadMetaSchemaOf(sch) {\n var $schema = sch.$schema;\n return $schema && !self.getSchema($schema)\n ? compileAsync.call(self, { $ref: $schema }, true)\n : Promise.resolve();\n }\n\n\n function _compileAsync(schemaObj) {\n try { return self._compile(schemaObj); }\n catch(e) {\n if (e instanceof MissingRefError) return loadMissingSchema(e);\n throw e;\n }\n\n\n function loadMissingSchema(e) {\n var ref = e.missingSchema;\n if (added(ref)) throw new Error('Schema ' + ref + ' is loaded but ' + e.missingRef + ' cannot be resolved');\n\n var schemaPromise = self._loadingSchemas[ref];\n if (!schemaPromise) {\n schemaPromise = self._loadingSchemas[ref] = self._opts.loadSchema(ref);\n schemaPromise.then(removePromise, removePromise);\n }\n\n return schemaPromise.then(function (sch) {\n if (!added(ref)) {\n return loadMetaSchemaOf(sch).then(function () {\n if (!added(ref)) self.addSchema(sch, ref, undefined, meta);\n });\n }\n }).then(function() {\n return _compileAsync(schemaObj);\n });\n\n function removePromise() {\n delete self._loadingSchemas[ref];\n }\n\n function added(ref) {\n return self._refs[ref] || self._schemas[ref];\n }\n }\n }\n}\n","'use strict';\n\nvar resolve = require('./resolve');\n\nmodule.exports = {\n Validation: errorSubclass(ValidationError),\n MissingRef: errorSubclass(MissingRefError)\n};\n\n\nfunction ValidationError(errors) {\n this.message = 'validation failed';\n this.errors = errors;\n this.ajv = this.validation = true;\n}\n\n\nMissingRefError.message = function (baseId, ref) {\n return 'can\\'t resolve reference ' + ref + ' from id ' + baseId;\n};\n\n\nfunction MissingRefError(baseId, ref, message) {\n this.message = message || MissingRefError.message(baseId, ref);\n this.missingRef = resolve.url(baseId, ref);\n this.missingSchema = resolve.normalizeId(resolve.fullPath(this.missingRef));\n}\n\n\nfunction errorSubclass(Subclass) {\n Subclass.prototype = Object.create(Error.prototype);\n Subclass.prototype.constructor = Subclass;\n return Subclass;\n}\n","'use strict';\n\nvar util = require('./util');\n\nvar DATE = /^(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)$/;\nvar DAYS = [0,31,28,31,30,31,30,31,31,30,31,30,31];\nvar TIME = /^(\\d\\d):(\\d\\d):(\\d\\d)(\\.\\d+)?(z|[+-]\\d\\d(?::?\\d\\d)?)?$/i;\nvar HOSTNAME = /^(?=.{1,253}\\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\\.?$/i;\nvar URI = /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\\?(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;\nvar URIREF = /^(?:[a-z][a-z0-9+\\-.]*:)?(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'\"()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\\?(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;\n// uri-template: https://tools.ietf.org/html/rfc6570\nvar URITEMPLATE = /^(?:(?:[^\\x00-\\x20\"'<>%\\\\^`{|}]|%[0-9a-f]{2})|\\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?)*\\})*$/i;\n// For the source: https://gist.github.com/dperini/729294\n// For test cases: https://mathiasbynens.be/demo/url-regex\n// @todo Delete current URL in favour of the commented out URL rule when this issue is fixed https://github.com/eslint/eslint/issues/7983.\n// var URL = /^(?:(?:https?|ftp):\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!10(?:\\.\\d{1,3}){3})(?!127(?:\\.\\d{1,3}){3})(?!169\\.254(?:\\.\\d{1,3}){2})(?!192\\.168(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u{00a1}-\\u{ffff}0-9]+-?)*[a-z\\u{00a1}-\\u{ffff}0-9]+)(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}0-9]+-?)*[a-z\\u{00a1}-\\u{ffff}0-9]+)*(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}]{2,})))(?::\\d{2,5})?(?:\\/[^\\s]*)?$/iu;\nvar URL = /^(?:(?:http[s\\u017F]?|ftp):\\/\\/)(?:(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+(?::(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])*)?@)?(?:(?!10(?:\\.[0-9]{1,3}){3})(?!127(?:\\.[0-9]{1,3}){3})(?!169\\.254(?:\\.[0-9]{1,3}){2})(?!192\\.168(?:\\.[0-9]{1,3}){2})(?!172\\.(?:1[6-9]|2[0-9]|3[01])(?:\\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9KSa-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+-?)*(?:[0-9KSa-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+)(?:\\.(?:(?:[0-9KSa-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+-?)*(?:[0-9KSa-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+)*(?:\\.(?:(?:[KSa-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\\/(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])*)?$/i;\nvar UUID = /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i;\nvar JSON_POINTER = /^(?:\\/(?:[^~/]|~0|~1)*)*$/;\nvar JSON_POINTER_URI_FRAGMENT = /^#(?:\\/(?:[a-z0-9_\\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i;\nvar RELATIVE_JSON_POINTER = /^(?:0|[1-9][0-9]*)(?:#|(?:\\/(?:[^~/]|~0|~1)*)*)$/;\n\n\nmodule.exports = formats;\n\nfunction formats(mode) {\n mode = mode == 'full' ? 'full' : 'fast';\n return util.copy(formats[mode]);\n}\n\n\nformats.fast = {\n // date: http://tools.ietf.org/html/rfc3339#section-5.6\n date: /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d$/,\n // date-time: http://tools.ietf.org/html/rfc3339#section-5.6\n time: /^(?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)?$/i,\n 'date-time': /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d[t\\s](?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)$/i,\n // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js\n uri: /^(?:[a-z][a-z0-9+-.]*:)(?:\\/?\\/)?[^\\s]*$/i,\n 'uri-reference': /^(?:(?:[a-z][a-z0-9+-.]*:)?\\/?\\/)?(?:[^\\\\\\s#][^\\s#]*)?(?:#[^\\\\\\s]*)?$/i,\n 'uri-template': URITEMPLATE,\n url: URL,\n // email (sources from jsen validator):\n // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363\n // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'willful violation')\n email: /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,\n hostname: HOSTNAME,\n // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html\n ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,\n // optimized http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses\n ipv6: /^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(?:%.+)?\\s*$/i,\n regex: regex,\n // uuid: http://tools.ietf.org/html/rfc4122\n uuid: UUID,\n // JSON-pointer: https://tools.ietf.org/html/rfc6901\n // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A\n 'json-pointer': JSON_POINTER,\n 'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT,\n // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00\n 'relative-json-pointer': RELATIVE_JSON_POINTER\n};\n\n\nformats.full = {\n date: date,\n time: time,\n 'date-time': date_time,\n uri: uri,\n 'uri-reference': URIREF,\n 'uri-template': URITEMPLATE,\n url: URL,\n email: /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,\n hostname: HOSTNAME,\n ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,\n ipv6: /^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(?:%.+)?\\s*$/i,\n regex: regex,\n uuid: UUID,\n 'json-pointer': JSON_POINTER,\n 'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT,\n 'relative-json-pointer': RELATIVE_JSON_POINTER\n};\n\n\nfunction isLeapYear(year) {\n // https://tools.ietf.org/html/rfc3339#appendix-C\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\n\nfunction date(str) {\n // full-date from http://tools.ietf.org/html/rfc3339#section-5.6\n var matches = str.match(DATE);\n if (!matches) return false;\n\n var year = +matches[1];\n var month = +matches[2];\n var day = +matches[3];\n\n return month >= 1 && month <= 12 && day >= 1 &&\n day <= (month == 2 && isLeapYear(year) ? 29 : DAYS[month]);\n}\n\n\nfunction time(str, full) {\n var matches = str.match(TIME);\n if (!matches) return false;\n\n var hour = matches[1];\n var minute = matches[2];\n var second = matches[3];\n var timeZone = matches[5];\n return ((hour <= 23 && minute <= 59 && second <= 59) ||\n (hour == 23 && minute == 59 && second == 60)) &&\n (!full || timeZone);\n}\n\n\nvar DATE_TIME_SEPARATOR = /t|\\s/i;\nfunction date_time(str) {\n // http://tools.ietf.org/html/rfc3339#section-5.6\n var dateTime = str.split(DATE_TIME_SEPARATOR);\n return dateTime.length == 2 && date(dateTime[0]) && time(dateTime[1], true);\n}\n\n\nvar NOT_URI_FRAGMENT = /\\/|:/;\nfunction uri(str) {\n // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required \".\"\n return NOT_URI_FRAGMENT.test(str) && URI.test(str);\n}\n\n\nvar Z_ANCHOR = /[^\\\\]\\\\Z/;\nfunction regex(str) {\n if (Z_ANCHOR.test(str)) return false;\n try {\n new RegExp(str);\n return true;\n } catch(e) {\n return false;\n }\n}\n","'use strict';\n\nvar resolve = require('./resolve')\n , util = require('./util')\n , errorClasses = require('./error_classes')\n , stableStringify = require('fast-json-stable-stringify');\n\nvar validateGenerator = require('../dotjs/validate');\n\n/**\n * Functions below are used inside compiled validations function\n */\n\nvar ucs2length = util.ucs2length;\nvar equal = require('fast-deep-equal');\n\n// this error is thrown by async schemas to return validation errors via exception\nvar ValidationError = errorClasses.Validation;\n\nmodule.exports = compile;\n\n\n/**\n * Compiles schema to validation function\n * @this Ajv\n * @param {Object} schema schema object\n * @param {Object} root object with information about the root schema for this schema\n * @param {Object} localRefs the hash of local references inside the schema (created by resolve.id), used for inline resolution\n * @param {String} baseId base ID for IDs in the schema\n * @return {Function} validation function\n */\nfunction compile(schema, root, localRefs, baseId) {\n /* jshint validthis: true, evil: true */\n /* eslint no-shadow: 0 */\n var self = this\n , opts = this._opts\n , refVal = [ undefined ]\n , refs = {}\n , patterns = []\n , patternsHash = {}\n , defaults = []\n , defaultsHash = {}\n , customRules = [];\n\n root = root || { schema: schema, refVal: refVal, refs: refs };\n\n var c = checkCompiling.call(this, schema, root, baseId);\n var compilation = this._compilations[c.index];\n if (c.compiling) return (compilation.callValidate = callValidate);\n\n var formats = this._formats;\n var RULES = this.RULES;\n\n try {\n var v = localCompile(schema, root, localRefs, baseId);\n compilation.validate = v;\n var cv = compilation.callValidate;\n if (cv) {\n cv.schema = v.schema;\n cv.errors = null;\n cv.refs = v.refs;\n cv.refVal = v.refVal;\n cv.root = v.root;\n cv.$async = v.$async;\n if (opts.sourceCode) cv.source = v.source;\n }\n return v;\n } finally {\n endCompiling.call(this, schema, root, baseId);\n }\n\n /* @this {*} - custom context, see passContext option */\n function callValidate() {\n /* jshint validthis: true */\n var validate = compilation.validate;\n var result = validate.apply(this, arguments);\n callValidate.errors = validate.errors;\n return result;\n }\n\n function localCompile(_schema, _root, localRefs, baseId) {\n var isRoot = !_root || (_root && _root.schema == _schema);\n if (_root.schema != root.schema)\n return compile.call(self, _schema, _root, localRefs, baseId);\n\n var $async = _schema.$async === true;\n\n var sourceCode = validateGenerator({\n isTop: true,\n schema: _schema,\n isRoot: isRoot,\n baseId: baseId,\n root: _root,\n schemaPath: '',\n errSchemaPath: '#',\n errorPath: '\"\"',\n MissingRefError: errorClasses.MissingRef,\n RULES: RULES,\n validate: validateGenerator,\n util: util,\n resolve: resolve,\n resolveRef: resolveRef,\n usePattern: usePattern,\n useDefault: useDefault,\n useCustomRule: useCustomRule,\n opts: opts,\n formats: formats,\n logger: self.logger,\n self: self\n });\n\n sourceCode = vars(refVal, refValCode) + vars(patterns, patternCode)\n + vars(defaults, defaultCode) + vars(customRules, customRuleCode)\n + sourceCode;\n\n if (opts.processCode) sourceCode = opts.processCode(sourceCode, _schema);\n // console.log('\\n\\n\\n *** \\n', JSON.stringify(sourceCode));\n var validate;\n try {\n var makeValidate = new Function(\n 'self',\n 'RULES',\n 'formats',\n 'root',\n 'refVal',\n 'defaults',\n 'customRules',\n 'equal',\n 'ucs2length',\n 'ValidationError',\n sourceCode\n );\n\n validate = makeValidate(\n self,\n RULES,\n formats,\n root,\n refVal,\n defaults,\n customRules,\n equal,\n ucs2length,\n ValidationError\n );\n\n refVal[0] = validate;\n } catch(e) {\n self.logger.error('Error compiling schema, function code:', sourceCode);\n throw e;\n }\n\n validate.schema = _schema;\n validate.errors = null;\n validate.refs = refs;\n validate.refVal = refVal;\n validate.root = isRoot ? validate : _root;\n if ($async) validate.$async = true;\n if (opts.sourceCode === true) {\n validate.source = {\n code: sourceCode,\n patterns: patterns,\n defaults: defaults\n };\n }\n\n return validate;\n }\n\n function resolveRef(baseId, ref, isRoot) {\n ref = resolve.url(baseId, ref);\n var refIndex = refs[ref];\n var _refVal, refCode;\n if (refIndex !== undefined) {\n _refVal = refVal[refIndex];\n refCode = 'refVal[' + refIndex + ']';\n return resolvedRef(_refVal, refCode);\n }\n if (!isRoot && root.refs) {\n var rootRefId = root.refs[ref];\n if (rootRefId !== undefined) {\n _refVal = root.refVal[rootRefId];\n refCode = addLocalRef(ref, _refVal);\n return resolvedRef(_refVal, refCode);\n }\n }\n\n refCode = addLocalRef(ref);\n var v = resolve.call(self, localCompile, root, ref);\n if (v === undefined) {\n var localSchema = localRefs && localRefs[ref];\n if (localSchema) {\n v = resolve.inlineRef(localSchema, opts.inlineRefs)\n ? localSchema\n : compile.call(self, localSchema, root, localRefs, baseId);\n }\n }\n\n if (v === undefined) {\n removeLocalRef(ref);\n } else {\n replaceLocalRef(ref, v);\n return resolvedRef(v, refCode);\n }\n }\n\n function addLocalRef(ref, v) {\n var refId = refVal.length;\n refVal[refId] = v;\n refs[ref] = refId;\n return 'refVal' + refId;\n }\n\n function removeLocalRef(ref) {\n delete refs[ref];\n }\n\n function replaceLocalRef(ref, v) {\n var refId = refs[ref];\n refVal[refId] = v;\n }\n\n function resolvedRef(refVal, code) {\n return typeof refVal == 'object' || typeof refVal == 'boolean'\n ? { code: code, schema: refVal, inline: true }\n : { code: code, $async: refVal && !!refVal.$async };\n }\n\n function usePattern(regexStr) {\n var index = patternsHash[regexStr];\n if (index === undefined) {\n index = patternsHash[regexStr] = patterns.length;\n patterns[index] = regexStr;\n }\n return 'pattern' + index;\n }\n\n function useDefault(value) {\n switch (typeof value) {\n case 'boolean':\n case 'number':\n return '' + value;\n case 'string':\n return util.toQuotedString(value);\n case 'object':\n if (value === null) return 'null';\n var valueStr = stableStringify(value);\n var index = defaultsHash[valueStr];\n if (index === undefined) {\n index = defaultsHash[valueStr] = defaults.length;\n defaults[index] = value;\n }\n return 'default' + index;\n }\n }\n\n function useCustomRule(rule, schema, parentSchema, it) {\n if (self._opts.validateSchema !== false) {\n var deps = rule.definition.dependencies;\n if (deps && !deps.every(function(keyword) {\n return Object.prototype.hasOwnProperty.call(parentSchema, keyword);\n }))\n throw new Error('parent schema must have all required keywords: ' + deps.join(','));\n\n var validateSchema = rule.definition.validateSchema;\n if (validateSchema) {\n var valid = validateSchema(schema);\n if (!valid) {\n var message = 'keyword schema is invalid: ' + self.errorsText(validateSchema.errors);\n if (self._opts.validateSchema == 'log') self.logger.error(message);\n else throw new Error(message);\n }\n }\n }\n\n var compile = rule.definition.compile\n , inline = rule.definition.inline\n , macro = rule.definition.macro;\n\n var validate;\n if (compile) {\n validate = compile.call(self, schema, parentSchema, it);\n } else if (macro) {\n validate = macro.call(self, schema, parentSchema, it);\n if (opts.validateSchema !== false) self.validateSchema(validate, true);\n } else if (inline) {\n validate = inline.call(self, it, rule.keyword, schema, parentSchema);\n } else {\n validate = rule.definition.validate;\n if (!validate) return;\n }\n\n if (validate === undefined)\n throw new Error('custom keyword \"' + rule.keyword + '\"failed to compile');\n\n var index = customRules.length;\n customRules[index] = validate;\n\n return {\n code: 'customRule' + index,\n validate: validate\n };\n }\n}\n\n\n/**\n * Checks if the schema is currently compiled\n * @this Ajv\n * @param {Object} schema schema to compile\n * @param {Object} root root object\n * @param {String} baseId base schema ID\n * @return {Object} object with properties \"index\" (compilation index) and \"compiling\" (boolean)\n */\nfunction checkCompiling(schema, root, baseId) {\n /* jshint validthis: true */\n var index = compIndex.call(this, schema, root, baseId);\n if (index >= 0) return { index: index, compiling: true };\n index = this._compilations.length;\n this._compilations[index] = {\n schema: schema,\n root: root,\n baseId: baseId\n };\n return { index: index, compiling: false };\n}\n\n\n/**\n * Removes the schema from the currently compiled list\n * @this Ajv\n * @param {Object} schema schema to compile\n * @param {Object} root root object\n * @param {String} baseId base schema ID\n */\nfunction endCompiling(schema, root, baseId) {\n /* jshint validthis: true */\n var i = compIndex.call(this, schema, root, baseId);\n if (i >= 0) this._compilations.splice(i, 1);\n}\n\n\n/**\n * Index of schema compilation in the currently compiled list\n * @this Ajv\n * @param {Object} schema schema to compile\n * @param {Object} root root object\n * @param {String} baseId base schema ID\n * @return {Integer} compilation index\n */\nfunction compIndex(schema, root, baseId) {\n /* jshint validthis: true */\n for (var i=0; i<this._compilations.length; i++) {\n var c = this._compilations[i];\n if (c.schema == schema && c.root == root && c.baseId == baseId) return i;\n }\n return -1;\n}\n\n\nfunction patternCode(i, patterns) {\n return 'var pattern' + i + ' = new RegExp(' + util.toQuotedString(patterns[i]) + ');';\n}\n\n\nfunction defaultCode(i) {\n return 'var default' + i + ' = defaults[' + i + '];';\n}\n\n\nfunction refValCode(i, refVal) {\n return refVal[i] === undefined ? '' : 'var refVal' + i + ' = refVal[' + i + '];';\n}\n\n\nfunction customRuleCode(i) {\n return 'var customRule' + i + ' = customRules[' + i + '];';\n}\n\n\nfunction vars(arr, statement) {\n if (!arr.length) return '';\n var code = '';\n for (var i=0; i<arr.length; i++)\n code += statement(i, arr);\n return code;\n}\n","'use strict';\n\nvar URI = require('uri-js')\n , equal = require('fast-deep-equal')\n , util = require('./util')\n , SchemaObject = require('./schema_obj')\n , traverse = require('json-schema-traverse');\n\nmodule.exports = resolve;\n\nresolve.normalizeId = normalizeId;\nresolve.fullPath = getFullPath;\nresolve.url = resolveUrl;\nresolve.ids = resolveIds;\nresolve.inlineRef = inlineRef;\nresolve.schema = resolveSchema;\n\n/**\n * [resolve and compile the references ($ref)]\n * @this Ajv\n * @param {Function} compile reference to schema compilation funciton (localCompile)\n * @param {Object} root object with information about the root schema for the current schema\n * @param {String} ref reference to resolve\n * @return {Object|Function} schema object (if the schema can be inlined) or validation function\n */\nfunction resolve(compile, root, ref) {\n /* jshint validthis: true */\n var refVal = this._refs[ref];\n if (typeof refVal == 'string') {\n if (this._refs[refVal]) refVal = this._refs[refVal];\n else return resolve.call(this, compile, root, refVal);\n }\n\n refVal = refVal || this._schemas[ref];\n if (refVal instanceof SchemaObject) {\n return inlineRef(refVal.schema, this._opts.inlineRefs)\n ? refVal.schema\n : refVal.validate || this._compile(refVal);\n }\n\n var res = resolveSchema.call(this, root, ref);\n var schema, v, baseId;\n if (res) {\n schema = res.schema;\n root = res.root;\n baseId = res.baseId;\n }\n\n if (schema instanceof SchemaObject) {\n v = schema.validate || compile.call(this, schema.schema, root, undefined, baseId);\n } else if (schema !== undefined) {\n v = inlineRef(schema, this._opts.inlineRefs)\n ? schema\n : compile.call(this, schema, root, undefined, baseId);\n }\n\n return v;\n}\n\n\n/**\n * Resolve schema, its root and baseId\n * @this Ajv\n * @param {Object} root root object with properties schema, refVal, refs\n * @param {String} ref reference to resolve\n * @return {Object} object with properties schema, root, baseId\n */\nfunction resolveSchema(root, ref) {\n /* jshint validthis: true */\n var p = URI.parse(ref)\n , refPath = _getFullPath(p)\n , baseId = getFullPath(this._getId(root.schema));\n if (Object.keys(root.schema).length === 0 || refPath !== baseId) {\n var id = normalizeId(refPath);\n var refVal = this._refs[id];\n if (typeof refVal == 'string') {\n return resolveRecursive.call(this, root, refVal, p);\n } else if (refVal instanceof SchemaObject) {\n if (!refVal.validate) this._compile(refVal);\n root = refVal;\n } else {\n refVal = this._schemas[id];\n if (refVal instanceof SchemaObject) {\n if (!refVal.validate) this._compile(refVal);\n if (id == normalizeId(ref))\n return { schema: refVal, root: root, baseId: baseId };\n root = refVal;\n } else {\n return;\n }\n }\n if (!root.schema) return;\n baseId = getFullPath(this._getId(root.schema));\n }\n return getJsonPointer.call(this, p, baseId, root.schema, root);\n}\n\n\n/* @this Ajv */\nfunction resolveRecursive(root, ref, parsedRef) {\n /* jshint validthis: true */\n var res = resolveSchema.call(this, root, ref);\n if (res) {\n var schema = res.schema;\n var baseId = res.baseId;\n root = res.root;\n var id = this._getId(schema);\n if (id) baseId = resolveUrl(baseId, id);\n return getJsonPointer.call(this, parsedRef, baseId, schema, root);\n }\n}\n\n\nvar PREVENT_SCOPE_CHANGE = util.toHash(['properties', 'patternProperties', 'enum', 'dependencies', 'definitions']);\n/* @this Ajv */\nfunction getJsonPointer(parsedRef, baseId, schema, root) {\n /* jshint validthis: true */\n parsedRef.fragment = parsedRef.fragment || '';\n if (parsedRef.fragment.slice(0,1) != '/') return;\n var parts = parsedRef.fragment.split('/');\n\n for (var i = 1; i < parts.length; i++) {\n var part = parts[i];\n if (part) {\n part = util.unescapeFragment(part);\n schema = schema[part];\n if (schema === undefined) break;\n var id;\n if (!PREVENT_SCOPE_CHANGE[part]) {\n id = this._getId(schema);\n if (id) baseId = resolveUrl(baseId, id);\n if (schema.$ref) {\n var $ref = resolveUrl(baseId, schema.$ref);\n var res = resolveSchema.call(this, root, $ref);\n if (res) {\n schema = res.schema;\n root = res.root;\n baseId = res.baseId;\n }\n }\n }\n }\n }\n if (schema !== undefined && schema !== root.schema)\n return { schema: schema, root: root, baseId: baseId };\n}\n\n\nvar SIMPLE_INLINED = util.toHash([\n 'type', 'format', 'pattern',\n 'maxLength', 'minLength',\n 'maxProperties', 'minProperties',\n 'maxItems', 'minItems',\n 'maximum', 'minimum',\n 'uniqueItems', 'multipleOf',\n 'required', 'enum'\n]);\nfunction inlineRef(schema, limit) {\n if (limit === false) return false;\n if (limit === undefined || limit === true) return checkNoRef(schema);\n else if (limit) return countKeys(schema) <= limit;\n}\n\n\nfunction checkNoRef(schema) {\n var item;\n if (Array.isArray(schema)) {\n for (var i=0; i<schema.length; i++) {\n item = schema[i];\n if (typeof item == 'object' && !checkNoRef(item)) return false;\n }\n } else {\n for (var key in schema) {\n if (key == '$ref') return false;\n item = schema[key];\n if (typeof item == 'object' && !checkNoRef(item)) return false;\n }\n }\n return true;\n}\n\n\nfunction countKeys(schema) {\n var count = 0, item;\n if (Array.isArray(schema)) {\n for (var i=0; i<schema.length; i++) {\n item = schema[i];\n if (typeof item == 'object') count += countKeys(item);\n if (count == Infinity) return Infinity;\n }\n } else {\n for (var key in schema) {\n if (key == '$ref') return Infinity;\n if (SIMPLE_INLINED[key]) {\n count++;\n } else {\n item = schema[key];\n if (typeof item == 'object') count += countKeys(item) + 1;\n if (count == Infinity) return Infinity;\n }\n }\n }\n return count;\n}\n\n\nfunction getFullPath(id, normalize) {\n if (normalize !== false) id = normalizeId(id);\n var p = URI.parse(id);\n return _getFullPath(p);\n}\n\n\nfunction _getFullPath(p) {\n return URI.serialize(p).split('#')[0] + '#';\n}\n\n\nvar TRAILING_SLASH_HASH = /#\\/?$/;\nfunction normalizeId(id) {\n return id ? id.replace(TRAILING_SLASH_HASH, '') : '';\n}\n\n\nfunction resolveUrl(baseId, id) {\n id = normalizeId(id);\n return URI.resolve(baseId, id);\n}\n\n\n/* @this Ajv */\nfunction resolveIds(schema) {\n var schemaId = normalizeId(this._getId(schema));\n var baseIds = {'': schemaId};\n var fullPaths = {'': getFullPath(schemaId, false)};\n var localRefs = {};\n var self = this;\n\n traverse(schema, {allKeys: true}, function(sch, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {\n if (jsonPtr === '') return;\n var id = self._getId(sch);\n var baseId = baseIds[parentJsonPtr];\n var fullPath = fullPaths[parentJsonPtr] + '/' + parentKeyword;\n if (keyIndex !== undefined)\n fullPath += '/' + (typeof keyIndex == 'number' ? keyIndex : util.escapeFragment(keyIndex));\n\n if (typeof id == 'string') {\n id = baseId = normalizeId(baseId ? URI.resolve(baseId, id) : id);\n\n var refVal = self._refs[id];\n if (typeof refVal == 'string') refVal = self._refs[refVal];\n if (refVal && refVal.schema) {\n if (!equal(sch, refVal.schema))\n throw new Error('id \"' + id + '\" resolves to more than one schema');\n } else if (id != normalizeId(fullPath)) {\n if (id[0] == '#') {\n if (localRefs[id] && !equal(sch, localRefs[id]))\n throw new Error('id \"' + id + '\" resolves to more than one schema');\n localRefs[id] = sch;\n } else {\n self._refs[id] = fullPath;\n }\n }\n }\n baseIds[jsonPtr] = baseId;\n fullPaths[jsonPtr] = fullPath;\n });\n\n return localRefs;\n}\n","'use strict';\n\nvar ruleModules = require('../dotjs')\n , toHash = require('./util').toHash;\n\nmodule.exports = function rules() {\n var RULES = [\n { type: 'number',\n rules: [ { 'maximum': ['exclusiveMaximum'] },\n { 'minimum': ['exclusiveMinimum'] }, 'multipleOf', 'format'] },\n { type: 'string',\n rules: [ 'maxLength', 'minLength', 'pattern', 'format' ] },\n { type: 'array',\n rules: [ 'maxItems', 'minItems', 'items', 'contains', 'uniqueItems' ] },\n { type: 'object',\n rules: [ 'maxProperties', 'minProperties', 'required', 'dependencies', 'propertyNames',\n { 'properties': ['additionalProperties', 'patternProperties'] } ] },\n { rules: [ '$ref', 'const', 'enum', 'not', 'anyOf', 'oneOf', 'allOf', 'if' ] }\n ];\n\n var ALL = [ 'type', '$comment' ];\n var KEYWORDS = [\n '$schema', '$id', 'id', '$data', '$async', 'title',\n 'description', 'default', 'definitions',\n 'examples', 'readOnly', 'writeOnly',\n 'contentMediaType', 'contentEncoding',\n 'additionalItems', 'then', 'else'\n ];\n var TYPES = [ 'number', 'integer', 'string', 'array', 'object', 'boolean', 'null' ];\n RULES.all = toHash(ALL);\n RULES.types = toHash(TYPES);\n\n RULES.forEach(function (group) {\n group.rules = group.rules.map(function (keyword) {\n var implKeywords;\n if (typeof keyword == 'object') {\n var key = Object.keys(keyword)[0];\n implKeywords = keyword[key];\n keyword = key;\n implKeywords.forEach(function (k) {\n ALL.push(k);\n RULES.all[k] = true;\n });\n }\n ALL.push(keyword);\n var rule = RULES.all[keyword] = {\n keyword: keyword,\n code: ruleModules[keyword],\n implements: implKeywords\n };\n return rule;\n });\n\n RULES.all.$comment = {\n keyword: '$comment',\n code: ruleModules.$comment\n };\n\n if (group.type) RULES.types[group.type] = group;\n });\n\n RULES.keywords = toHash(ALL.concat(KEYWORDS));\n RULES.custom = {};\n\n return RULES;\n};\n","'use strict';\n\nvar util = require('./util');\n\nmodule.exports = SchemaObject;\n\nfunction SchemaObject(obj) {\n util.copy(obj, this);\n}\n","'use strict';\n\n// https://mathiasbynens.be/notes/javascript-encoding\n// https://github.com/bestiejs/punycode.js - punycode.ucs2.decode\nmodule.exports = function ucs2length(str) {\n var length = 0\n , len = str.length\n , pos = 0\n , value;\n while (pos < len) {\n length++;\n value = str.charCodeAt(pos++);\n if (value >= 0xD800 && value <= 0xDBFF && pos < len) {\n // high surrogate, and there is a next character\n value = str.charCodeAt(pos);\n if ((value & 0xFC00) == 0xDC00) pos++; // low surrogate\n }\n }\n return length;\n};\n","'use strict';\n\n\nmodule.exports = {\n copy: copy,\n checkDataType: checkDataType,\n checkDataTypes: checkDataTypes,\n coerceToTypes: coerceToTypes,\n toHash: toHash,\n getProperty: getProperty,\n escapeQuotes: escapeQuotes,\n equal: require('fast-deep-equal'),\n ucs2length: require('./ucs2length'),\n varOccurences: varOccurences,\n varReplace: varReplace,\n schemaHasRules: schemaHasRules,\n schemaHasRulesExcept: schemaHasRulesExcept,\n schemaUnknownRules: schemaUnknownRules,\n toQuotedString: toQuotedString,\n getPathExpr: getPathExpr,\n getPath: getPath,\n getData: getData,\n unescapeFragment: unescapeFragment,\n unescapeJsonPointer: unescapeJsonPointer,\n escapeFragment: escapeFragment,\n escapeJsonPointer: escapeJsonPointer\n};\n\n\nfunction copy(o, to) {\n to = to || {};\n for (var key in o) to[key] = o[key];\n return to;\n}\n\n\nfunction checkDataType(dataType, data, strictNumbers, negate) {\n var EQUAL = negate ? ' !== ' : ' === '\n , AND = negate ? ' || ' : ' && '\n , OK = negate ? '!' : ''\n , NOT = negate ? '' : '!';\n switch (dataType) {\n case 'null': return data + EQUAL + 'null';\n case 'array': return OK + 'Array.isArray(' + data + ')';\n case 'object': return '(' + OK + data + AND +\n 'typeof ' + data + EQUAL + '\"object\"' + AND +\n NOT + 'Array.isArray(' + data + '))';\n case 'integer': return '(typeof ' + data + EQUAL + '\"number\"' + AND +\n NOT + '(' + data + ' % 1)' +\n AND + data + EQUAL + data +\n (strictNumbers ? (AND + OK + 'isFinite(' + data + ')') : '') + ')';\n case 'number': return '(typeof ' + data + EQUAL + '\"' + dataType + '\"' +\n (strictNumbers ? (AND + OK + 'isFinite(' + data + ')') : '') + ')';\n default: return 'typeof ' + data + EQUAL + '\"' + dataType + '\"';\n }\n}\n\n\nfunction checkDataTypes(dataTypes, data, strictNumbers) {\n switch (dataTypes.length) {\n case 1: return checkDataType(dataTypes[0], data, strictNumbers, true);\n default:\n var code = '';\n var types = toHash(dataTypes);\n if (types.array && types.object) {\n code = types.null ? '(': '(!' + data + ' || ';\n code += 'typeof ' + data + ' !== \"object\")';\n delete types.null;\n delete types.array;\n delete types.object;\n }\n if (types.number) delete types.integer;\n for (var t in types)\n code += (code ? ' && ' : '' ) + checkDataType(t, data, strictNumbers, true);\n\n return code;\n }\n}\n\n\nvar COERCE_TO_TYPES = toHash([ 'string', 'number', 'integer', 'boolean', 'null' ]);\nfunction coerceToTypes(optionCoerceTypes, dataTypes) {\n if (Array.isArray(dataTypes)) {\n var types = [];\n for (var i=0; i<dataTypes.length; i++) {\n var t = dataTypes[i];\n if (COERCE_TO_TYPES[t]) types[types.length] = t;\n else if (optionCoerceTypes === 'array' && t === 'array') types[types.length] = t;\n }\n if (types.length) return types;\n } else if (COERCE_TO_TYPES[dataTypes]) {\n return [dataTypes];\n } else if (optionCoerceTypes === 'array' && dataTypes === 'array') {\n return ['array'];\n }\n}\n\n\nfunction toHash(arr) {\n var hash = {};\n for (var i=0; i<arr.length; i++) hash[arr[i]] = true;\n return hash;\n}\n\n\nvar IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i;\nvar SINGLE_QUOTE = /'|\\\\/g;\nfunction getProperty(key) {\n return typeof key == 'number'\n ? '[' + key + ']'\n : IDENTIFIER.test(key)\n ? '.' + key\n : \"['\" + escapeQuotes(key) + \"']\";\n}\n\n\nfunction escapeQuotes(str) {\n return str.replace(SINGLE_QUOTE, '\\\\$&')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/\\f/g, '\\\\f')\n .replace(/\\t/g, '\\\\t');\n}\n\n\nfunction varOccurences(str, dataVar) {\n dataVar += '[^0-9]';\n var matches = str.match(new RegExp(dataVar, 'g'));\n return matches ? matches.length : 0;\n}\n\n\nfunction varReplace(str, dataVar, expr) {\n dataVar += '([^0-9])';\n expr = expr.replace(/\\$/g, '$$$$');\n return str.replace(new RegExp(dataVar, 'g'), expr + '$1');\n}\n\n\nfunction schemaHasRules(schema, rules) {\n if (typeof schema == 'boolean') return !schema;\n for (var key in schema) if (rules[key]) return true;\n}\n\n\nfunction schemaHasRulesExcept(schema, rules, exceptKeyword) {\n if (typeof schema == 'boolean') return !schema && exceptKeyword != 'not';\n for (var key in schema) if (key != exceptKeyword && rules[key]) return true;\n}\n\n\nfunction schemaUnknownRules(schema, rules) {\n if (typeof schema == 'boolean') return;\n for (var key in schema) if (!rules[key]) return key;\n}\n\n\nfunction toQuotedString(str) {\n return '\\'' + escapeQuotes(str) + '\\'';\n}\n\n\nfunction getPathExpr(currentPath, expr, jsonPointers, isNumber) {\n var path = jsonPointers // false by default\n ? '\\'/\\' + ' + expr + (isNumber ? '' : '.replace(/~/g, \\'~0\\').replace(/\\\\//g, \\'~1\\')')\n : (isNumber ? '\\'[\\' + ' + expr + ' + \\']\\'' : '\\'[\\\\\\'\\' + ' + expr + ' + \\'\\\\\\']\\'');\n return joinPaths(currentPath, path);\n}\n\n\nfunction getPath(currentPath, prop, jsonPointers) {\n var path = jsonPointers // false by default\n ? toQuotedString('/' + escapeJsonPointer(prop))\n : toQuotedString(getProperty(prop));\n return joinPaths(currentPath, path);\n}\n\n\nvar JSON_POINTER = /^\\/(?:[^~]|~0|~1)*$/;\nvar RELATIVE_JSON_POINTER = /^([0-9]+)(#|\\/(?:[^~]|~0|~1)*)?$/;\nfunction getData($data, lvl, paths) {\n var up, jsonPointer, data, matches;\n if ($data === '') return 'rootData';\n if ($data[0] == '/') {\n if (!JSON_POINTER.test($data)) throw new Error('Invalid JSON-pointer: ' + $data);\n jsonPointer = $data;\n data = 'rootData';\n } else {\n matches = $data.match(RELATIVE_JSON_POINTER);\n if (!matches) throw new Error('Invalid JSON-pointer: ' + $data);\n up = +matches[1];\n jsonPointer = matches[2];\n if (jsonPointer == '#') {\n if (up >= lvl) throw new Error('Cannot access property/index ' + up + ' levels up, current level is ' + lvl);\n return paths[lvl - up];\n }\n\n if (up > lvl) throw new Error('Cannot access data ' + up + ' levels up, current level is ' + lvl);\n data = 'data' + ((lvl - up) || '');\n if (!jsonPointer) return data;\n }\n\n var expr = data;\n var segments = jsonPointer.split('/');\n for (var i=0; i<segments.length; i++) {\n var segment = segments[i];\n if (segment) {\n data += getProperty(unescapeJsonPointer(segment));\n expr += ' && ' + data;\n }\n }\n return expr;\n}\n\n\nfunction joinPaths (a, b) {\n if (a == '\"\"') return b;\n return (a + ' + ' + b).replace(/([^\\\\])' \\+ '/g, '$1');\n}\n\n\nfunction unescapeFragment(str) {\n return unescapeJsonPointer(decodeURIComponent(str));\n}\n\n\nfunction escapeFragment(str) {\n return encodeURIComponent(escapeJsonPointer(str));\n}\n\n\nfunction escapeJsonPointer(str) {\n return str.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n\n\nfunction unescapeJsonPointer(str) {\n return str.replace(/~1/g, '/').replace(/~0/g, '~');\n}\n","'use strict';\n\nvar KEYWORDS = [\n 'multipleOf',\n 'maximum',\n 'exclusiveMaximum',\n 'minimum',\n 'exclusiveMinimum',\n 'maxLength',\n 'minLength',\n 'pattern',\n 'additionalItems',\n 'maxItems',\n 'minItems',\n 'uniqueItems',\n 'maxProperties',\n 'minProperties',\n 'required',\n 'additionalProperties',\n 'enum',\n 'format',\n 'const'\n];\n\nmodule.exports = function (metaSchema, keywordsJsonPointers) {\n for (var i=0; i<keywordsJsonPointers.length; i++) {\n metaSchema = JSON.parse(JSON.stringify(metaSchema));\n var segments = keywordsJsonPointers[i].split('/');\n var keywords = metaSchema;\n var j;\n for (j=1; j<segments.length; j++)\n keywords = keywords[segments[j]];\n\n for (j=0; j<KEYWORDS.length; j++) {\n var key = KEYWORDS[j];\n var schema = keywords[key];\n if (schema) {\n keywords[key] = {\n anyOf: [\n schema,\n { $ref: 'https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#' }\n ]\n };\n }\n }\n }\n\n return metaSchema;\n};\n","'use strict';\n\nvar metaSchema = require('./refs/json-schema-draft-07.json');\n\nmodule.exports = {\n $id: 'https://github.com/ajv-validator/ajv/blob/master/lib/definition_schema.js',\n definitions: {\n simpleTypes: metaSchema.definitions.simpleTypes\n },\n type: 'object',\n dependencies: {\n schema: ['validate'],\n $data: ['validate'],\n statements: ['inline'],\n valid: {not: {required: ['macro']}}\n },\n properties: {\n type: metaSchema.properties.type,\n schema: {type: 'boolean'},\n statements: {type: 'boolean'},\n dependencies: {\n type: 'array',\n items: {type: 'string'}\n },\n metaSchema: {type: 'object'},\n modifying: {type: 'boolean'},\n valid: {type: 'boolean'},\n $data: {type: 'boolean'},\n async: {type: 'boolean'},\n errors: {\n anyOf: [\n {type: 'boolean'},\n {const: 'full'}\n ]\n }\n }\n};\n","'use strict';\nmodule.exports = function generate__limit(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $errorKeyword;\n var $data = 'data' + ($dataLvl || '');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $isMax = $keyword == 'maximum',\n $exclusiveKeyword = $isMax ? 'exclusiveMaximum' : 'exclusiveMinimum',\n $schemaExcl = it.schema[$exclusiveKeyword],\n $isDataExcl = it.opts.$data && $schemaExcl && $schemaExcl.$data,\n $op = $isMax ? '<' : '>',\n $notOp = $isMax ? '>' : '<',\n $errorKeyword = undefined;\n if (!($isData || typeof $schema == 'number' || $schema === undefined)) {\n throw new Error($keyword + ' must be number');\n }\n if (!($isDataExcl || $schemaExcl === undefined || typeof $schemaExcl == 'number' || typeof $schemaExcl == 'boolean')) {\n throw new Error($exclusiveKeyword + ' must be number or boolean');\n }\n if ($isDataExcl) {\n var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr),\n $exclusive = 'exclusive' + $lvl,\n $exclType = 'exclType' + $lvl,\n $exclIsNumber = 'exclIsNumber' + $lvl,\n $opExpr = 'op' + $lvl,\n $opStr = '\\' + ' + $opExpr + ' + \\'';\n out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; ';\n $schemaValueExcl = 'schemaExcl' + $lvl;\n out += ' var ' + ($exclusive) + '; var ' + ($exclType) + ' = typeof ' + ($schemaValueExcl) + '; if (' + ($exclType) + ' != \\'boolean\\' && ' + ($exclType) + ' != \\'undefined\\' && ' + ($exclType) + ' != \\'number\\') { ';\n var $errorKeyword = $exclusiveKeyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || '_exclusiveLimit') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'' + ($exclusiveKeyword) + ' should be boolean\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } else if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n }\n out += ' ' + ($exclType) + ' == \\'number\\' ? ( (' + ($exclusive) + ' = ' + ($schemaValue) + ' === undefined || ' + ($schemaValueExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ') ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValueExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) : ( (' + ($exclusive) + ' = ' + ($schemaValueExcl) + ' === true) ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValue) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { var op' + ($lvl) + ' = ' + ($exclusive) + ' ? \\'' + ($op) + '\\' : \\'' + ($op) + '=\\'; ';\n if ($schema === undefined) {\n $errorKeyword = $exclusiveKeyword;\n $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;\n $schemaValue = $schemaValueExcl;\n $isData = $isDataExcl;\n }\n } else {\n var $exclIsNumber = typeof $schemaExcl == 'number',\n $opStr = $op;\n if ($exclIsNumber && $isData) {\n var $opExpr = '\\'' + $opStr + '\\'';\n out += ' if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n }\n out += ' ( ' + ($schemaValue) + ' === undefined || ' + ($schemaExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ' ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { ';\n } else {\n if ($exclIsNumber && $schema === undefined) {\n $exclusive = true;\n $errorKeyword = $exclusiveKeyword;\n $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;\n $schemaValue = $schemaExcl;\n $notOp += '=';\n } else {\n if ($exclIsNumber) $schemaValue = Math[$isMax ? 'min' : 'max']($schemaExcl, $schema);\n if ($schemaExcl === ($exclIsNumber ? $schemaValue : true)) {\n $exclusive = true;\n $errorKeyword = $exclusiveKeyword;\n $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;\n $notOp += '=';\n } else {\n $exclusive = false;\n $opStr += '=';\n }\n }\n var $opExpr = '\\'' + $opStr + '\\'';\n out += ' if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n }\n out += ' ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' || ' + ($data) + ' !== ' + ($data) + ') { ';\n }\n }\n $errorKeyword = $errorKeyword || $keyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || '_limit') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { comparison: ' + ($opExpr) + ', limit: ' + ($schemaValue) + ', exclusive: ' + ($exclusive) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should be ' + ($opStr) + ' ';\n if ($isData) {\n out += '\\' + ' + ($schemaValue);\n } else {\n out += '' + ($schemaValue) + '\\'';\n }\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + ($schema);\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate__limitItems(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $errorKeyword;\n var $data = 'data' + ($dataLvl || '');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n if (!($isData || typeof $schema == 'number')) {\n throw new Error($keyword + ' must be number');\n }\n var $op = $keyword == 'maxItems' ? '>' : '<';\n out += 'if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n }\n out += ' ' + ($data) + '.length ' + ($op) + ' ' + ($schemaValue) + ') { ';\n var $errorKeyword = $keyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || '_limitItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT have ';\n if ($keyword == 'maxItems') {\n out += 'more';\n } else {\n out += 'fewer';\n }\n out += ' than ';\n if ($isData) {\n out += '\\' + ' + ($schemaValue) + ' + \\'';\n } else {\n out += '' + ($schema);\n }\n out += ' items\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + ($schema);\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += '} ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate__limitLength(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $errorKeyword;\n var $data = 'data' + ($dataLvl || '');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n if (!($isData || typeof $schema == 'number')) {\n throw new Error($keyword + ' must be number');\n }\n var $op = $keyword == 'maxLength' ? '>' : '<';\n out += 'if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n }\n if (it.opts.unicode === false) {\n out += ' ' + ($data) + '.length ';\n } else {\n out += ' ucs2length(' + ($data) + ') ';\n }\n out += ' ' + ($op) + ' ' + ($schemaValue) + ') { ';\n var $errorKeyword = $keyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || '_limitLength') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT be ';\n if ($keyword == 'maxLength') {\n out += 'longer';\n } else {\n out += 'shorter';\n }\n out += ' than ';\n if ($isData) {\n out += '\\' + ' + ($schemaValue) + ' + \\'';\n } else {\n out += '' + ($schema);\n }\n out += ' characters\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + ($schema);\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += '} ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate__limitProperties(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $errorKeyword;\n var $data = 'data' + ($dataLvl || '');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n if (!($isData || typeof $schema == 'number')) {\n throw new Error($keyword + ' must be number');\n }\n var $op = $keyword == 'maxProperties' ? '>' : '<';\n out += 'if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n }\n out += ' Object.keys(' + ($data) + ').length ' + ($op) + ' ' + ($schemaValue) + ') { ';\n var $errorKeyword = $keyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || '_limitProperties') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT have ';\n if ($keyword == 'maxProperties') {\n out += 'more';\n } else {\n out += 'fewer';\n }\n out += ' than ';\n if ($isData) {\n out += '\\' + ' + ($schemaValue) + ' + \\'';\n } else {\n out += '' + ($schema);\n }\n out += ' properties\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + ($schema);\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += '} ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_allOf(it, $keyword, $ruleType) {\n var out = ' ';\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $currentBaseId = $it.baseId,\n $allSchemasEmpty = true;\n var arr1 = $schema;\n if (arr1) {\n var $sch, $i = -1,\n l1 = arr1.length - 1;\n while ($i < l1) {\n $sch = arr1[$i += 1];\n if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) {\n $allSchemasEmpty = false;\n $it.schema = $sch;\n $it.schemaPath = $schemaPath + '[' + $i + ']';\n $it.errSchemaPath = $errSchemaPath + '/' + $i;\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n }\n }\n if ($breakOnError) {\n if ($allSchemasEmpty) {\n out += ' if (true) { ';\n } else {\n out += ' ' + ($closingBraces.slice(0, -1)) + ' ';\n }\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_anyOf(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $noEmptySchema = $schema.every(function($sch) {\n return (it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all));\n });\n if ($noEmptySchema) {\n var $currentBaseId = $it.baseId;\n out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = false; ';\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n var arr1 = $schema;\n if (arr1) {\n var $sch, $i = -1,\n l1 = arr1.length - 1;\n while ($i < l1) {\n $sch = arr1[$i += 1];\n $it.schema = $sch;\n $it.schemaPath = $schemaPath + '[' + $i + ']';\n $it.errSchemaPath = $errSchemaPath + '/' + $i;\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n out += ' ' + ($valid) + ' = ' + ($valid) + ' || ' + ($nextValid) + '; if (!' + ($valid) + ') { ';\n $closingBraces += '}';\n }\n }\n it.compositeRule = $it.compositeRule = $wasComposite;\n out += ' ' + ($closingBraces) + ' if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('anyOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should match some schema in anyOf\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError(vErrors); ';\n } else {\n out += ' validate.errors = vErrors; return false; ';\n }\n }\n out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\n if (it.opts.allErrors) {\n out += ' } ';\n }\n } else {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_comment(it, $keyword, $ruleType) {\n var out = ' ';\n var $schema = it.schema[$keyword];\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $comment = it.util.toQuotedString($schema);\n if (it.opts.$comment === true) {\n out += ' console.log(' + ($comment) + ');';\n } else if (typeof it.opts.$comment == 'function') {\n out += ' self._opts.$comment(' + ($comment) + ', ' + (it.util.toQuotedString($errSchemaPath)) + ', validate.root.schema);';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_const(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n if (!$isData) {\n out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + ';';\n }\n out += 'var ' + ($valid) + ' = equal(' + ($data) + ', schema' + ($lvl) + '); if (!' + ($valid) + ') { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('const') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValue: schema' + ($lvl) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should be equal to constant\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' }';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_contains(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $idx = 'i' + $lvl,\n $dataNxt = $it.dataLevel = it.dataLevel + 1,\n $nextData = 'data' + $dataNxt,\n $currentBaseId = it.baseId,\n $nonEmptySchema = (it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all));\n out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';\n if ($nonEmptySchema) {\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n $it.schema = $schema;\n $it.schemaPath = $schemaPath;\n $it.errSchemaPath = $errSchemaPath;\n out += ' var ' + ($nextValid) + ' = false; for (var ' + ($idx) + ' = 0; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';\n $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);\n var $passData = $data + '[' + $idx + ']';\n $it.dataPathArr[$dataNxt] = $idx;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n out += ' if (' + ($nextValid) + ') break; } ';\n it.compositeRule = $it.compositeRule = $wasComposite;\n out += ' ' + ($closingBraces) + ' if (!' + ($nextValid) + ') {';\n } else {\n out += ' if (' + ($data) + '.length == 0) {';\n }\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('contains') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should contain a valid item\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } else { ';\n if ($nonEmptySchema) {\n out += ' errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\n }\n if (it.opts.allErrors) {\n out += ' } ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_custom(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $errorKeyword;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $errs = 'errs__' + $lvl;\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $rule = this,\n $definition = 'definition' + $lvl,\n $rDef = $rule.definition,\n $closingBraces = '';\n var $compile, $inline, $macro, $ruleValidate, $validateCode;\n if ($isData && $rDef.$data) {\n $validateCode = 'keywordValidate' + $lvl;\n var $validateSchema = $rDef.validateSchema;\n out += ' var ' + ($definition) + ' = RULES.custom[\\'' + ($keyword) + '\\'].definition; var ' + ($validateCode) + ' = ' + ($definition) + '.validate;';\n } else {\n $ruleValidate = it.useCustomRule($rule, $schema, it.schema, it);\n if (!$ruleValidate) return;\n $schemaValue = 'validate.schema' + $schemaPath;\n $validateCode = $ruleValidate.code;\n $compile = $rDef.compile;\n $inline = $rDef.inline;\n $macro = $rDef.macro;\n }\n var $ruleErrs = $validateCode + '.errors',\n $i = 'i' + $lvl,\n $ruleErr = 'ruleErr' + $lvl,\n $asyncKeyword = $rDef.async;\n if ($asyncKeyword && !it.async) throw new Error('async keyword in sync schema');\n if (!($inline || $macro)) {\n out += '' + ($ruleErrs) + ' = null;';\n }\n out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';\n if ($isData && $rDef.$data) {\n $closingBraces += '}';\n out += ' if (' + ($schemaValue) + ' === undefined) { ' + ($valid) + ' = true; } else { ';\n if ($validateSchema) {\n $closingBraces += '}';\n out += ' ' + ($valid) + ' = ' + ($definition) + '.validateSchema(' + ($schemaValue) + '); if (' + ($valid) + ') { ';\n }\n }\n if ($inline) {\n if ($rDef.statements) {\n out += ' ' + ($ruleValidate.validate) + ' ';\n } else {\n out += ' ' + ($valid) + ' = ' + ($ruleValidate.validate) + '; ';\n }\n } else if ($macro) {\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n $it.schema = $ruleValidate.validate;\n $it.schemaPath = '';\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n var $code = it.validate($it).replace(/validate\\.schema/g, $validateCode);\n it.compositeRule = $it.compositeRule = $wasComposite;\n out += ' ' + ($code);\n } else {\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = '';\n out += ' ' + ($validateCode) + '.call( ';\n if (it.opts.passContext) {\n out += 'this';\n } else {\n out += 'self';\n }\n if ($compile || $rDef.schema === false) {\n out += ' , ' + ($data) + ' ';\n } else {\n out += ' , ' + ($schemaValue) + ' , ' + ($data) + ' , validate.schema' + (it.schemaPath) + ' ';\n }\n out += ' , (dataPath || \\'\\')';\n if (it.errorPath != '\"\"') {\n out += ' + ' + (it.errorPath);\n }\n var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData',\n $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';\n out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ' , rootData ) ';\n var def_callRuleValidate = out;\n out = $$outStack.pop();\n if ($rDef.errors === false) {\n out += ' ' + ($valid) + ' = ';\n if ($asyncKeyword) {\n out += 'await ';\n }\n out += '' + (def_callRuleValidate) + '; ';\n } else {\n if ($asyncKeyword) {\n $ruleErrs = 'customErrors' + $lvl;\n out += ' var ' + ($ruleErrs) + ' = null; try { ' + ($valid) + ' = await ' + (def_callRuleValidate) + '; } catch (e) { ' + ($valid) + ' = false; if (e instanceof ValidationError) ' + ($ruleErrs) + ' = e.errors; else throw e; } ';\n } else {\n out += ' ' + ($ruleErrs) + ' = null; ' + ($valid) + ' = ' + (def_callRuleValidate) + '; ';\n }\n }\n }\n if ($rDef.modifying) {\n out += ' if (' + ($parentData) + ') ' + ($data) + ' = ' + ($parentData) + '[' + ($parentDataProperty) + '];';\n }\n out += '' + ($closingBraces);\n if ($rDef.valid) {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n } else {\n out += ' if ( ';\n if ($rDef.valid === undefined) {\n out += ' !';\n if ($macro) {\n out += '' + ($nextValid);\n } else {\n out += '' + ($valid);\n }\n } else {\n out += ' ' + (!$rDef.valid) + ' ';\n }\n out += ') { ';\n $errorKeyword = $rule.keyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = '';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || 'custom') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { keyword: \\'' + ($rule.keyword) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should pass \"' + ($rule.keyword) + '\" keyword validation\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n var def_customError = out;\n out = $$outStack.pop();\n if ($inline) {\n if ($rDef.errors) {\n if ($rDef.errors != 'full') {\n out += ' for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; if (' + ($ruleErr) + '.dataPath === undefined) ' + ($ruleErr) + '.dataPath = (dataPath || \\'\\') + ' + (it.errorPath) + '; if (' + ($ruleErr) + '.schemaPath === undefined) { ' + ($ruleErr) + '.schemaPath = \"' + ($errSchemaPath) + '\"; } ';\n if (it.opts.verbose) {\n out += ' ' + ($ruleErr) + '.schema = ' + ($schemaValue) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; ';\n }\n out += ' } ';\n }\n } else {\n if ($rDef.errors === false) {\n out += ' ' + (def_customError) + ' ';\n } else {\n out += ' if (' + ($errs) + ' == errors) { ' + (def_customError) + ' } else { for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; if (' + ($ruleErr) + '.dataPath === undefined) ' + ($ruleErr) + '.dataPath = (dataPath || \\'\\') + ' + (it.errorPath) + '; if (' + ($ruleErr) + '.schemaPath === undefined) { ' + ($ruleErr) + '.schemaPath = \"' + ($errSchemaPath) + '\"; } ';\n if (it.opts.verbose) {\n out += ' ' + ($ruleErr) + '.schema = ' + ($schemaValue) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; ';\n }\n out += ' } } ';\n }\n }\n } else if ($macro) {\n out += ' var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || 'custom') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { keyword: \\'' + ($rule.keyword) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should pass \"' + ($rule.keyword) + '\" keyword validation\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError(vErrors); ';\n } else {\n out += ' validate.errors = vErrors; return false; ';\n }\n }\n } else {\n if ($rDef.errors === false) {\n out += ' ' + (def_customError) + ' ';\n } else {\n out += ' if (Array.isArray(' + ($ruleErrs) + ')) { if (vErrors === null) vErrors = ' + ($ruleErrs) + '; else vErrors = vErrors.concat(' + ($ruleErrs) + '); errors = vErrors.length; for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; if (' + ($ruleErr) + '.dataPath === undefined) ' + ($ruleErr) + '.dataPath = (dataPath || \\'\\') + ' + (it.errorPath) + '; ' + ($ruleErr) + '.schemaPath = \"' + ($errSchemaPath) + '\"; ';\n if (it.opts.verbose) {\n out += ' ' + ($ruleErr) + '.schema = ' + ($schemaValue) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; ';\n }\n out += ' } } else { ' + (def_customError) + ' } ';\n }\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' else { ';\n }\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_dependencies(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $schemaDeps = {},\n $propertyDeps = {},\n $ownProperties = it.opts.ownProperties;\n for ($property in $schema) {\n if ($property == '__proto__') continue;\n var $sch = $schema[$property];\n var $deps = Array.isArray($sch) ? $propertyDeps : $schemaDeps;\n $deps[$property] = $sch;\n }\n out += 'var ' + ($errs) + ' = errors;';\n var $currentErrorPath = it.errorPath;\n out += 'var missing' + ($lvl) + ';';\n for (var $property in $propertyDeps) {\n $deps = $propertyDeps[$property];\n if ($deps.length) {\n out += ' if ( ' + ($data) + (it.util.getProperty($property)) + ' !== undefined ';\n if ($ownProperties) {\n out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($property)) + '\\') ';\n }\n if ($breakOnError) {\n out += ' && ( ';\n var arr1 = $deps;\n if (arr1) {\n var $propertyKey, $i = -1,\n l1 = arr1.length - 1;\n while ($i < l1) {\n $propertyKey = arr1[$i += 1];\n if ($i) {\n out += ' || ';\n }\n var $prop = it.util.getProperty($propertyKey),\n $useData = $data + $prop;\n out += ' ( ( ' + ($useData) + ' === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ') && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop)) + ') ) ';\n }\n }\n out += ')) { ';\n var $propertyPath = 'missing' + $lvl,\n $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath;\n }\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('dependencies') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { property: \\'' + (it.util.escapeQuotes($property)) + '\\', missingProperty: \\'' + ($missingProperty) + '\\', depsCount: ' + ($deps.length) + ', deps: \\'' + (it.util.escapeQuotes($deps.length == 1 ? $deps[0] : $deps.join(\", \"))) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should have ';\n if ($deps.length == 1) {\n out += 'property ' + (it.util.escapeQuotes($deps[0]));\n } else {\n out += 'properties ' + (it.util.escapeQuotes($deps.join(\", \")));\n }\n out += ' when property ' + (it.util.escapeQuotes($property)) + ' is present\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n } else {\n out += ' ) { ';\n var arr2 = $deps;\n if (arr2) {\n var $propertyKey, i2 = -1,\n l2 = arr2.length - 1;\n while (i2 < l2) {\n $propertyKey = arr2[i2 += 1];\n var $prop = it.util.getProperty($propertyKey),\n $missingProperty = it.util.escapeQuotes($propertyKey),\n $useData = $data + $prop;\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);\n }\n out += ' if ( ' + ($useData) + ' === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ') { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('dependencies') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { property: \\'' + (it.util.escapeQuotes($property)) + '\\', missingProperty: \\'' + ($missingProperty) + '\\', depsCount: ' + ($deps.length) + ', deps: \\'' + (it.util.escapeQuotes($deps.length == 1 ? $deps[0] : $deps.join(\", \"))) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should have ';\n if ($deps.length == 1) {\n out += 'property ' + (it.util.escapeQuotes($deps[0]));\n } else {\n out += 'properties ' + (it.util.escapeQuotes($deps.join(\", \")));\n }\n out += ' when property ' + (it.util.escapeQuotes($property)) + ' is present\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ';\n }\n }\n }\n out += ' } ';\n if ($breakOnError) {\n $closingBraces += '}';\n out += ' else { ';\n }\n }\n }\n it.errorPath = $currentErrorPath;\n var $currentBaseId = $it.baseId;\n for (var $property in $schemaDeps) {\n var $sch = $schemaDeps[$property];\n if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) {\n out += ' ' + ($nextValid) + ' = true; if ( ' + ($data) + (it.util.getProperty($property)) + ' !== undefined ';\n if ($ownProperties) {\n out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($property)) + '\\') ';\n }\n out += ') { ';\n $it.schema = $sch;\n $it.schemaPath = $schemaPath + it.util.getProperty($property);\n $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($property);\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n out += ' } ';\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n }\n if ($breakOnError) {\n out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_enum(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $i = 'i' + $lvl,\n $vSchema = 'schema' + $lvl;\n if (!$isData) {\n out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + ';';\n }\n out += 'var ' + ($valid) + ';';\n if ($isData) {\n out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {';\n }\n out += '' + ($valid) + ' = false;for (var ' + ($i) + '=0; ' + ($i) + '<' + ($vSchema) + '.length; ' + ($i) + '++) if (equal(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + '])) { ' + ($valid) + ' = true; break; }';\n if ($isData) {\n out += ' } ';\n }\n out += ' if (!' + ($valid) + ') { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('enum') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValues: schema' + ($lvl) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should be equal to one of the allowed values\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' }';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_format(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n if (it.opts.format === false) {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n return out;\n }\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $unknownFormats = it.opts.unknownFormats,\n $allowUnknown = Array.isArray($unknownFormats);\n if ($isData) {\n var $format = 'format' + $lvl,\n $isObject = 'isObject' + $lvl,\n $formatType = 'formatType' + $lvl;\n out += ' var ' + ($format) + ' = formats[' + ($schemaValue) + ']; var ' + ($isObject) + ' = typeof ' + ($format) + ' == \\'object\\' && !(' + ($format) + ' instanceof RegExp) && ' + ($format) + '.validate; var ' + ($formatType) + ' = ' + ($isObject) + ' && ' + ($format) + '.type || \\'string\\'; if (' + ($isObject) + ') { ';\n if (it.async) {\n out += ' var async' + ($lvl) + ' = ' + ($format) + '.async; ';\n }\n out += ' ' + ($format) + ' = ' + ($format) + '.validate; } if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'string\\') || ';\n }\n out += ' (';\n if ($unknownFormats != 'ignore') {\n out += ' (' + ($schemaValue) + ' && !' + ($format) + ' ';\n if ($allowUnknown) {\n out += ' && self._opts.unknownFormats.indexOf(' + ($schemaValue) + ') == -1 ';\n }\n out += ') || ';\n }\n out += ' (' + ($format) + ' && ' + ($formatType) + ' == \\'' + ($ruleType) + '\\' && !(typeof ' + ($format) + ' == \\'function\\' ? ';\n if (it.async) {\n out += ' (async' + ($lvl) + ' ? await ' + ($format) + '(' + ($data) + ') : ' + ($format) + '(' + ($data) + ')) ';\n } else {\n out += ' ' + ($format) + '(' + ($data) + ') ';\n }\n out += ' : ' + ($format) + '.test(' + ($data) + '))))) {';\n } else {\n var $format = it.formats[$schema];\n if (!$format) {\n if ($unknownFormats == 'ignore') {\n it.logger.warn('unknown format \"' + $schema + '\" ignored in schema at path \"' + it.errSchemaPath + '\"');\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n return out;\n } else if ($allowUnknown && $unknownFormats.indexOf($schema) >= 0) {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n return out;\n } else {\n throw new Error('unknown format \"' + $schema + '\" is used in schema at path \"' + it.errSchemaPath + '\"');\n }\n }\n var $isObject = typeof $format == 'object' && !($format instanceof RegExp) && $format.validate;\n var $formatType = $isObject && $format.type || 'string';\n if ($isObject) {\n var $async = $format.async === true;\n $format = $format.validate;\n }\n if ($formatType != $ruleType) {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n return out;\n }\n if ($async) {\n if (!it.async) throw new Error('async format in sync schema');\n var $formatRef = 'formats' + it.util.getProperty($schema) + '.validate';\n out += ' if (!(await ' + ($formatRef) + '(' + ($data) + '))) { ';\n } else {\n out += ' if (! ';\n var $formatRef = 'formats' + it.util.getProperty($schema);\n if ($isObject) $formatRef += '.validate';\n if (typeof $format == 'function') {\n out += ' ' + ($formatRef) + '(' + ($data) + ') ';\n } else {\n out += ' ' + ($formatRef) + '.test(' + ($data) + ') ';\n }\n out += ') { ';\n }\n }\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('format') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { format: ';\n if ($isData) {\n out += '' + ($schemaValue);\n } else {\n out += '' + (it.util.toQuotedString($schema));\n }\n out += ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should match format \"';\n if ($isData) {\n out += '\\' + ' + ($schemaValue) + ' + \\'';\n } else {\n out += '' + (it.util.escapeQuotes($schema));\n }\n out += '\"\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + (it.util.toQuotedString($schema));\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_if(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $thenSch = it.schema['then'],\n $elseSch = it.schema['else'],\n $thenPresent = $thenSch !== undefined && (it.opts.strictKeywords ? typeof $thenSch == 'object' && Object.keys($thenSch).length > 0 : it.util.schemaHasRules($thenSch, it.RULES.all)),\n $elsePresent = $elseSch !== undefined && (it.opts.strictKeywords ? typeof $elseSch == 'object' && Object.keys($elseSch).length > 0 : it.util.schemaHasRules($elseSch, it.RULES.all)),\n $currentBaseId = $it.baseId;\n if ($thenPresent || $elsePresent) {\n var $ifClause;\n $it.createErrors = false;\n $it.schema = $schema;\n $it.schemaPath = $schemaPath;\n $it.errSchemaPath = $errSchemaPath;\n out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = true; ';\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n $it.createErrors = true;\n out += ' errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\n it.compositeRule = $it.compositeRule = $wasComposite;\n if ($thenPresent) {\n out += ' if (' + ($nextValid) + ') { ';\n $it.schema = it.schema['then'];\n $it.schemaPath = it.schemaPath + '.then';\n $it.errSchemaPath = it.errSchemaPath + '/then';\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n out += ' ' + ($valid) + ' = ' + ($nextValid) + '; ';\n if ($thenPresent && $elsePresent) {\n $ifClause = 'ifClause' + $lvl;\n out += ' var ' + ($ifClause) + ' = \\'then\\'; ';\n } else {\n $ifClause = '\\'then\\'';\n }\n out += ' } ';\n if ($elsePresent) {\n out += ' else { ';\n }\n } else {\n out += ' if (!' + ($nextValid) + ') { ';\n }\n if ($elsePresent) {\n $it.schema = it.schema['else'];\n $it.schemaPath = it.schemaPath + '.else';\n $it.errSchemaPath = it.errSchemaPath + '/else';\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n out += ' ' + ($valid) + ' = ' + ($nextValid) + '; ';\n if ($thenPresent && $elsePresent) {\n $ifClause = 'ifClause' + $lvl;\n out += ' var ' + ($ifClause) + ' = \\'else\\'; ';\n } else {\n $ifClause = '\\'else\\'';\n }\n out += ' } ';\n }\n out += ' if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('if') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { failingKeyword: ' + ($ifClause) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should match \"\\' + ' + ($ifClause) + ' + \\'\" schema\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError(vErrors); ';\n } else {\n out += ' validate.errors = vErrors; return false; ';\n }\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' else { ';\n }\n } else {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n }\n return out;\n}\n","'use strict';\n\n//all requires must be explicit because browserify won't work with dynamic requires\nmodule.exports = {\n '$ref': require('./ref'),\n allOf: require('./allOf'),\n anyOf: require('./anyOf'),\n '$comment': require('./comment'),\n const: require('./const'),\n contains: require('./contains'),\n dependencies: require('./dependencies'),\n 'enum': require('./enum'),\n format: require('./format'),\n 'if': require('./if'),\n items: require('./items'),\n maximum: require('./_limit'),\n minimum: require('./_limit'),\n maxItems: require('./_limitItems'),\n minItems: require('./_limitItems'),\n maxLength: require('./_limitLength'),\n minLength: require('./_limitLength'),\n maxProperties: require('./_limitProperties'),\n minProperties: require('./_limitProperties'),\n multipleOf: require('./multipleOf'),\n not: require('./not'),\n oneOf: require('./oneOf'),\n pattern: require('./pattern'),\n properties: require('./properties'),\n propertyNames: require('./propertyNames'),\n required: require('./required'),\n uniqueItems: require('./uniqueItems'),\n validate: require('./validate')\n};\n","'use strict';\nmodule.exports = function generate_items(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $idx = 'i' + $lvl,\n $dataNxt = $it.dataLevel = it.dataLevel + 1,\n $nextData = 'data' + $dataNxt,\n $currentBaseId = it.baseId;\n out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';\n if (Array.isArray($schema)) {\n var $additionalItems = it.schema.additionalItems;\n if ($additionalItems === false) {\n out += ' ' + ($valid) + ' = ' + ($data) + '.length <= ' + ($schema.length) + '; ';\n var $currErrSchemaPath = $errSchemaPath;\n $errSchemaPath = it.errSchemaPath + '/additionalItems';\n out += ' if (!' + ($valid) + ') { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('additionalItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schema.length) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT have more than ' + ($schema.length) + ' items\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } ';\n $errSchemaPath = $currErrSchemaPath;\n if ($breakOnError) {\n $closingBraces += '}';\n out += ' else { ';\n }\n }\n var arr1 = $schema;\n if (arr1) {\n var $sch, $i = -1,\n l1 = arr1.length - 1;\n while ($i < l1) {\n $sch = arr1[$i += 1];\n if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) {\n out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($i) + ') { ';\n var $passData = $data + '[' + $i + ']';\n $it.schema = $sch;\n $it.schemaPath = $schemaPath + '[' + $i + ']';\n $it.errSchemaPath = $errSchemaPath + '/' + $i;\n $it.errorPath = it.util.getPathExpr(it.errorPath, $i, it.opts.jsonPointers, true);\n $it.dataPathArr[$dataNxt] = $i;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n }\n }\n if (typeof $additionalItems == 'object' && (it.opts.strictKeywords ? typeof $additionalItems == 'object' && Object.keys($additionalItems).length > 0 : it.util.schemaHasRules($additionalItems, it.RULES.all))) {\n $it.schema = $additionalItems;\n $it.schemaPath = it.schemaPath + '.additionalItems';\n $it.errSchemaPath = it.errSchemaPath + '/additionalItems';\n out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($schema.length) + ') { for (var ' + ($idx) + ' = ' + ($schema.length) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';\n $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);\n var $passData = $data + '[' + $idx + ']';\n $it.dataPathArr[$dataNxt] = $idx;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n if ($breakOnError) {\n out += ' if (!' + ($nextValid) + ') break; ';\n }\n out += ' } } ';\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n } else if ((it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all))) {\n $it.schema = $schema;\n $it.schemaPath = $schemaPath;\n $it.errSchemaPath = $errSchemaPath;\n out += ' for (var ' + ($idx) + ' = ' + (0) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';\n $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);\n var $passData = $data + '[' + $idx + ']';\n $it.dataPathArr[$dataNxt] = $idx;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n if ($breakOnError) {\n out += ' if (!' + ($nextValid) + ') break; ';\n }\n out += ' }';\n }\n if ($breakOnError) {\n out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_multipleOf(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n if (!($isData || typeof $schema == 'number')) {\n throw new Error($keyword + ' must be number');\n }\n out += 'var division' + ($lvl) + ';if (';\n if ($isData) {\n out += ' ' + ($schemaValue) + ' !== undefined && ( typeof ' + ($schemaValue) + ' != \\'number\\' || ';\n }\n out += ' (division' + ($lvl) + ' = ' + ($data) + ' / ' + ($schemaValue) + ', ';\n if (it.opts.multipleOfPrecision) {\n out += ' Math.abs(Math.round(division' + ($lvl) + ') - division' + ($lvl) + ') > 1e-' + (it.opts.multipleOfPrecision) + ' ';\n } else {\n out += ' division' + ($lvl) + ' !== parseInt(division' + ($lvl) + ') ';\n }\n out += ' ) ';\n if ($isData) {\n out += ' ) ';\n }\n out += ' ) { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('multipleOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { multipleOf: ' + ($schemaValue) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should be multiple of ';\n if ($isData) {\n out += '\\' + ' + ($schemaValue);\n } else {\n out += '' + ($schemaValue) + '\\'';\n }\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + ($schema);\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += '} ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_not(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n if ((it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all))) {\n $it.schema = $schema;\n $it.schemaPath = $schemaPath;\n $it.errSchemaPath = $errSchemaPath;\n out += ' var ' + ($errs) + ' = errors; ';\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n $it.createErrors = false;\n var $allErrorsOption;\n if ($it.opts.allErrors) {\n $allErrorsOption = $it.opts.allErrors;\n $it.opts.allErrors = false;\n }\n out += ' ' + (it.validate($it)) + ' ';\n $it.createErrors = true;\n if ($allErrorsOption) $it.opts.allErrors = $allErrorsOption;\n it.compositeRule = $it.compositeRule = $wasComposite;\n out += ' if (' + ($nextValid) + ') { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('not') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT be valid\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\n if (it.opts.allErrors) {\n out += ' } ';\n }\n } else {\n out += ' var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('not') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT be valid\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n if ($breakOnError) {\n out += ' if (false) { ';\n }\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_oneOf(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $currentBaseId = $it.baseId,\n $prevValid = 'prevValid' + $lvl,\n $passingSchemas = 'passingSchemas' + $lvl;\n out += 'var ' + ($errs) + ' = errors , ' + ($prevValid) + ' = false , ' + ($valid) + ' = false , ' + ($passingSchemas) + ' = null; ';\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n var arr1 = $schema;\n if (arr1) {\n var $sch, $i = -1,\n l1 = arr1.length - 1;\n while ($i < l1) {\n $sch = arr1[$i += 1];\n if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) {\n $it.schema = $sch;\n $it.schemaPath = $schemaPath + '[' + $i + ']';\n $it.errSchemaPath = $errSchemaPath + '/' + $i;\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n } else {\n out += ' var ' + ($nextValid) + ' = true; ';\n }\n if ($i) {\n out += ' if (' + ($nextValid) + ' && ' + ($prevValid) + ') { ' + ($valid) + ' = false; ' + ($passingSchemas) + ' = [' + ($passingSchemas) + ', ' + ($i) + ']; } else { ';\n $closingBraces += '}';\n }\n out += ' if (' + ($nextValid) + ') { ' + ($valid) + ' = ' + ($prevValid) + ' = true; ' + ($passingSchemas) + ' = ' + ($i) + '; }';\n }\n }\n it.compositeRule = $it.compositeRule = $wasComposite;\n out += '' + ($closingBraces) + 'if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('oneOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { passingSchemas: ' + ($passingSchemas) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should match exactly one schema in oneOf\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError(vErrors); ';\n } else {\n out += ' validate.errors = vErrors; return false; ';\n }\n }\n out += '} else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; }';\n if (it.opts.allErrors) {\n out += ' } ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_pattern(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $regexp = $isData ? '(new RegExp(' + $schemaValue + '))' : it.usePattern($schema);\n out += 'if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'string\\') || ';\n }\n out += ' !' + ($regexp) + '.test(' + ($data) + ') ) { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('pattern') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { pattern: ';\n if ($isData) {\n out += '' + ($schemaValue);\n } else {\n out += '' + (it.util.toQuotedString($schema));\n }\n out += ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should match pattern \"';\n if ($isData) {\n out += '\\' + ' + ($schemaValue) + ' + \\'';\n } else {\n out += '' + (it.util.escapeQuotes($schema));\n }\n out += '\"\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + (it.util.toQuotedString($schema));\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += '} ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_properties(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $key = 'key' + $lvl,\n $idx = 'idx' + $lvl,\n $dataNxt = $it.dataLevel = it.dataLevel + 1,\n $nextData = 'data' + $dataNxt,\n $dataProperties = 'dataProperties' + $lvl;\n var $schemaKeys = Object.keys($schema || {}).filter(notProto),\n $pProperties = it.schema.patternProperties || {},\n $pPropertyKeys = Object.keys($pProperties).filter(notProto),\n $aProperties = it.schema.additionalProperties,\n $someProperties = $schemaKeys.length || $pPropertyKeys.length,\n $noAdditional = $aProperties === false,\n $additionalIsSchema = typeof $aProperties == 'object' && Object.keys($aProperties).length,\n $removeAdditional = it.opts.removeAdditional,\n $checkAdditional = $noAdditional || $additionalIsSchema || $removeAdditional,\n $ownProperties = it.opts.ownProperties,\n $currentBaseId = it.baseId;\n var $required = it.schema.required;\n if ($required && !(it.opts.$data && $required.$data) && $required.length < it.opts.loopRequired) {\n var $requiredHash = it.util.toHash($required);\n }\n\n function notProto(p) {\n return p !== '__proto__';\n }\n out += 'var ' + ($errs) + ' = errors;var ' + ($nextValid) + ' = true;';\n if ($ownProperties) {\n out += ' var ' + ($dataProperties) + ' = undefined;';\n }\n if ($checkAdditional) {\n if ($ownProperties) {\n out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';\n } else {\n out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';\n }\n if ($someProperties) {\n out += ' var isAdditional' + ($lvl) + ' = !(false ';\n if ($schemaKeys.length) {\n if ($schemaKeys.length > 8) {\n out += ' || validate.schema' + ($schemaPath) + '.hasOwnProperty(' + ($key) + ') ';\n } else {\n var arr1 = $schemaKeys;\n if (arr1) {\n var $propertyKey, i1 = -1,\n l1 = arr1.length - 1;\n while (i1 < l1) {\n $propertyKey = arr1[i1 += 1];\n out += ' || ' + ($key) + ' == ' + (it.util.toQuotedString($propertyKey)) + ' ';\n }\n }\n }\n }\n if ($pPropertyKeys.length) {\n var arr2 = $pPropertyKeys;\n if (arr2) {\n var $pProperty, $i = -1,\n l2 = arr2.length - 1;\n while ($i < l2) {\n $pProperty = arr2[$i += 1];\n out += ' || ' + (it.usePattern($pProperty)) + '.test(' + ($key) + ') ';\n }\n }\n }\n out += ' ); if (isAdditional' + ($lvl) + ') { ';\n }\n if ($removeAdditional == 'all') {\n out += ' delete ' + ($data) + '[' + ($key) + ']; ';\n } else {\n var $currentErrorPath = it.errorPath;\n var $additionalProperty = '\\' + ' + $key + ' + \\'';\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);\n }\n if ($noAdditional) {\n if ($removeAdditional) {\n out += ' delete ' + ($data) + '[' + ($key) + ']; ';\n } else {\n out += ' ' + ($nextValid) + ' = false; ';\n var $currErrSchemaPath = $errSchemaPath;\n $errSchemaPath = it.errSchemaPath + '/additionalProperties';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('additionalProperties') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { additionalProperty: \\'' + ($additionalProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is an invalid additional property';\n } else {\n out += 'should NOT have additional properties';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n $errSchemaPath = $currErrSchemaPath;\n if ($breakOnError) {\n out += ' break; ';\n }\n }\n } else if ($additionalIsSchema) {\n if ($removeAdditional == 'failing') {\n out += ' var ' + ($errs) + ' = errors; ';\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n $it.schema = $aProperties;\n $it.schemaPath = it.schemaPath + '.additionalProperties';\n $it.errSchemaPath = it.errSchemaPath + '/additionalProperties';\n $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);\n var $passData = $data + '[' + $key + ']';\n $it.dataPathArr[$dataNxt] = $key;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n out += ' if (!' + ($nextValid) + ') { errors = ' + ($errs) + '; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete ' + ($data) + '[' + ($key) + ']; } ';\n it.compositeRule = $it.compositeRule = $wasComposite;\n } else {\n $it.schema = $aProperties;\n $it.schemaPath = it.schemaPath + '.additionalProperties';\n $it.errSchemaPath = it.errSchemaPath + '/additionalProperties';\n $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);\n var $passData = $data + '[' + $key + ']';\n $it.dataPathArr[$dataNxt] = $key;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n if ($breakOnError) {\n out += ' if (!' + ($nextValid) + ') break; ';\n }\n }\n }\n it.errorPath = $currentErrorPath;\n }\n if ($someProperties) {\n out += ' } ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n var $useDefaults = it.opts.useDefaults && !it.compositeRule;\n if ($schemaKeys.length) {\n var arr3 = $schemaKeys;\n if (arr3) {\n var $propertyKey, i3 = -1,\n l3 = arr3.length - 1;\n while (i3 < l3) {\n $propertyKey = arr3[i3 += 1];\n var $sch = $schema[$propertyKey];\n if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) {\n var $prop = it.util.getProperty($propertyKey),\n $passData = $data + $prop,\n $hasDefault = $useDefaults && $sch.default !== undefined;\n $it.schema = $sch;\n $it.schemaPath = $schemaPath + $prop;\n $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($propertyKey);\n $it.errorPath = it.util.getPath(it.errorPath, $propertyKey, it.opts.jsonPointers);\n $it.dataPathArr[$dataNxt] = it.util.toQuotedString($propertyKey);\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n $code = it.util.varReplace($code, $nextData, $passData);\n var $useData = $passData;\n } else {\n var $useData = $nextData;\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ';\n }\n if ($hasDefault) {\n out += ' ' + ($code) + ' ';\n } else {\n if ($requiredHash && $requiredHash[$propertyKey]) {\n out += ' if ( ' + ($useData) + ' === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ') { ' + ($nextValid) + ' = false; ';\n var $currentErrorPath = it.errorPath,\n $currErrSchemaPath = $errSchemaPath,\n $missingProperty = it.util.escapeQuotes($propertyKey);\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);\n }\n $errSchemaPath = it.errSchemaPath + '/required';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is a required property';\n } else {\n out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n $errSchemaPath = $currErrSchemaPath;\n it.errorPath = $currentErrorPath;\n out += ' } else { ';\n } else {\n if ($breakOnError) {\n out += ' if ( ' + ($useData) + ' === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ') { ' + ($nextValid) + ' = true; } else { ';\n } else {\n out += ' if (' + ($useData) + ' !== undefined ';\n if ($ownProperties) {\n out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ' ) { ';\n }\n }\n out += ' ' + ($code) + ' } ';\n }\n }\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n }\n }\n if ($pPropertyKeys.length) {\n var arr4 = $pPropertyKeys;\n if (arr4) {\n var $pProperty, i4 = -1,\n l4 = arr4.length - 1;\n while (i4 < l4) {\n $pProperty = arr4[i4 += 1];\n var $sch = $pProperties[$pProperty];\n if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) {\n $it.schema = $sch;\n $it.schemaPath = it.schemaPath + '.patternProperties' + it.util.getProperty($pProperty);\n $it.errSchemaPath = it.errSchemaPath + '/patternProperties/' + it.util.escapeFragment($pProperty);\n if ($ownProperties) {\n out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';\n } else {\n out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';\n }\n out += ' if (' + (it.usePattern($pProperty)) + '.test(' + ($key) + ')) { ';\n $it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);\n var $passData = $data + '[' + $key + ']';\n $it.dataPathArr[$dataNxt] = $key;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n if ($breakOnError) {\n out += ' if (!' + ($nextValid) + ') break; ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' else ' + ($nextValid) + ' = true; ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n }\n }\n }\n if ($breakOnError) {\n out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_propertyNames(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n out += 'var ' + ($errs) + ' = errors;';\n if ((it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all))) {\n $it.schema = $schema;\n $it.schemaPath = $schemaPath;\n $it.errSchemaPath = $errSchemaPath;\n var $key = 'key' + $lvl,\n $idx = 'idx' + $lvl,\n $i = 'i' + $lvl,\n $invalidName = '\\' + ' + $key + ' + \\'',\n $dataNxt = $it.dataLevel = it.dataLevel + 1,\n $nextData = 'data' + $dataNxt,\n $dataProperties = 'dataProperties' + $lvl,\n $ownProperties = it.opts.ownProperties,\n $currentBaseId = it.baseId;\n if ($ownProperties) {\n out += ' var ' + ($dataProperties) + ' = undefined; ';\n }\n if ($ownProperties) {\n out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';\n } else {\n out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';\n }\n out += ' var startErrs' + ($lvl) + ' = errors; ';\n var $passData = $key;\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n it.compositeRule = $it.compositeRule = $wasComposite;\n out += ' if (!' + ($nextValid) + ') { for (var ' + ($i) + '=startErrs' + ($lvl) + '; ' + ($i) + '<errors; ' + ($i) + '++) { vErrors[' + ($i) + '].propertyName = ' + ($key) + '; } var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('propertyNames') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { propertyName: \\'' + ($invalidName) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'property name \\\\\\'' + ($invalidName) + '\\\\\\' is invalid\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError(vErrors); ';\n } else {\n out += ' validate.errors = vErrors; return false; ';\n }\n }\n if ($breakOnError) {\n out += ' break; ';\n }\n out += ' } }';\n }\n if ($breakOnError) {\n out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_ref(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $async, $refCode;\n if ($schema == '#' || $schema == '#/') {\n if (it.isRoot) {\n $async = it.async;\n $refCode = 'validate';\n } else {\n $async = it.root.schema.$async === true;\n $refCode = 'root.refVal[0]';\n }\n } else {\n var $refVal = it.resolveRef(it.baseId, $schema, it.isRoot);\n if ($refVal === undefined) {\n var $message = it.MissingRefError.message(it.baseId, $schema);\n if (it.opts.missingRefs == 'fail') {\n it.logger.error($message);\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('$ref') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { ref: \\'' + (it.util.escapeQuotes($schema)) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'can\\\\\\'t resolve reference ' + (it.util.escapeQuotes($schema)) + '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ' + (it.util.toQuotedString($schema)) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n if ($breakOnError) {\n out += ' if (false) { ';\n }\n } else if (it.opts.missingRefs == 'ignore') {\n it.logger.warn($message);\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n } else {\n throw new it.MissingRefError(it.baseId, $schema, $message);\n }\n } else if ($refVal.inline) {\n var $it = it.util.copy(it);\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n $it.schema = $refVal.schema;\n $it.schemaPath = '';\n $it.errSchemaPath = $schema;\n var $code = it.validate($it).replace(/validate\\.schema/g, $refVal.code);\n out += ' ' + ($code) + ' ';\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n }\n } else {\n $async = $refVal.$async === true || (it.async && $refVal.$async !== false);\n $refCode = $refVal.code;\n }\n }\n if ($refCode) {\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = '';\n if (it.opts.passContext) {\n out += ' ' + ($refCode) + '.call(this, ';\n } else {\n out += ' ' + ($refCode) + '( ';\n }\n out += ' ' + ($data) + ', (dataPath || \\'\\')';\n if (it.errorPath != '\"\"') {\n out += ' + ' + (it.errorPath);\n }\n var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData',\n $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';\n out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ', rootData) ';\n var __callValidate = out;\n out = $$outStack.pop();\n if ($async) {\n if (!it.async) throw new Error('async schema referenced by sync schema');\n if ($breakOnError) {\n out += ' var ' + ($valid) + '; ';\n }\n out += ' try { await ' + (__callValidate) + '; ';\n if ($breakOnError) {\n out += ' ' + ($valid) + ' = true; ';\n }\n out += ' } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; ';\n if ($breakOnError) {\n out += ' ' + ($valid) + ' = false; ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' if (' + ($valid) + ') { ';\n }\n } else {\n out += ' if (!' + (__callValidate) + ') { if (vErrors === null) vErrors = ' + ($refCode) + '.errors; else vErrors = vErrors.concat(' + ($refCode) + '.errors); errors = vErrors.length; } ';\n if ($breakOnError) {\n out += ' else { ';\n }\n }\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_required(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $vSchema = 'schema' + $lvl;\n if (!$isData) {\n if ($schema.length < it.opts.loopRequired && it.schema.properties && Object.keys(it.schema.properties).length) {\n var $required = [];\n var arr1 = $schema;\n if (arr1) {\n var $property, i1 = -1,\n l1 = arr1.length - 1;\n while (i1 < l1) {\n $property = arr1[i1 += 1];\n var $propertySch = it.schema.properties[$property];\n if (!($propertySch && (it.opts.strictKeywords ? typeof $propertySch == 'object' && Object.keys($propertySch).length > 0 : it.util.schemaHasRules($propertySch, it.RULES.all)))) {\n $required[$required.length] = $property;\n }\n }\n }\n } else {\n var $required = $schema;\n }\n }\n if ($isData || $required.length) {\n var $currentErrorPath = it.errorPath,\n $loopRequired = $isData || $required.length >= it.opts.loopRequired,\n $ownProperties = it.opts.ownProperties;\n if ($breakOnError) {\n out += ' var missing' + ($lvl) + '; ';\n if ($loopRequired) {\n if (!$isData) {\n out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; ';\n }\n var $i = 'i' + $lvl,\n $propertyPath = 'schema' + $lvl + '[' + $i + ']',\n $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);\n }\n out += ' var ' + ($valid) + ' = true; ';\n if ($isData) {\n out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {';\n }\n out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { ' + ($valid) + ' = ' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] !== undefined ';\n if ($ownProperties) {\n out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) ';\n }\n out += '; if (!' + ($valid) + ') break; } ';\n if ($isData) {\n out += ' } ';\n }\n out += ' if (!' + ($valid) + ') { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is a required property';\n } else {\n out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } else { ';\n } else {\n out += ' if ( ';\n var arr2 = $required;\n if (arr2) {\n var $propertyKey, $i = -1,\n l2 = arr2.length - 1;\n while ($i < l2) {\n $propertyKey = arr2[$i += 1];\n if ($i) {\n out += ' || ';\n }\n var $prop = it.util.getProperty($propertyKey),\n $useData = $data + $prop;\n out += ' ( ( ' + ($useData) + ' === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ') && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop)) + ') ) ';\n }\n }\n out += ') { ';\n var $propertyPath = 'missing' + $lvl,\n $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath;\n }\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is a required property';\n } else {\n out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } else { ';\n }\n } else {\n if ($loopRequired) {\n if (!$isData) {\n out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; ';\n }\n var $i = 'i' + $lvl,\n $propertyPath = 'schema' + $lvl + '[' + $i + ']',\n $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);\n }\n if ($isData) {\n out += ' if (' + ($vSchema) + ' && !Array.isArray(' + ($vSchema) + ')) { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is a required property';\n } else {\n out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (' + ($vSchema) + ' !== undefined) { ';\n }\n out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { if (' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) ';\n }\n out += ') { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is a required property';\n } else {\n out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } ';\n if ($isData) {\n out += ' } ';\n }\n } else {\n var arr3 = $required;\n if (arr3) {\n var $propertyKey, i3 = -1,\n l3 = arr3.length - 1;\n while (i3 < l3) {\n $propertyKey = arr3[i3 += 1];\n var $prop = it.util.getProperty($propertyKey),\n $missingProperty = it.util.escapeQuotes($propertyKey),\n $useData = $data + $prop;\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);\n }\n out += ' if ( ' + ($useData) + ' === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ') { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is a required property';\n } else {\n out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ';\n }\n }\n }\n }\n it.errorPath = $currentErrorPath;\n } else if ($breakOnError) {\n out += ' if (true) {';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_uniqueItems(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n if (($schema || $isData) && it.opts.uniqueItems !== false) {\n if ($isData) {\n out += ' var ' + ($valid) + '; if (' + ($schemaValue) + ' === false || ' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \\'boolean\\') ' + ($valid) + ' = false; else { ';\n }\n out += ' var i = ' + ($data) + '.length , ' + ($valid) + ' = true , j; if (i > 1) { ';\n var $itemType = it.schema.items && it.schema.items.type,\n $typeIsArray = Array.isArray($itemType);\n if (!$itemType || $itemType == 'object' || $itemType == 'array' || ($typeIsArray && ($itemType.indexOf('object') >= 0 || $itemType.indexOf('array') >= 0))) {\n out += ' outer: for (;i--;) { for (j = i; j--;) { if (equal(' + ($data) + '[i], ' + ($data) + '[j])) { ' + ($valid) + ' = false; break outer; } } } ';\n } else {\n out += ' var itemIndices = {}, item; for (;i--;) { var item = ' + ($data) + '[i]; ';\n var $method = 'checkDataType' + ($typeIsArray ? 's' : '');\n out += ' if (' + (it.util[$method]($itemType, 'item', it.opts.strictNumbers, true)) + ') continue; ';\n if ($typeIsArray) {\n out += ' if (typeof item == \\'string\\') item = \\'\"\\' + item; ';\n }\n out += ' if (typeof itemIndices[item] == \\'number\\') { ' + ($valid) + ' = false; j = itemIndices[item]; break; } itemIndices[item] = i; } ';\n }\n out += ' } ';\n if ($isData) {\n out += ' } ';\n }\n out += ' if (!' + ($valid) + ') { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('uniqueItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { i: i, j: j } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT have duplicate items (items ## \\' + j + \\' and \\' + i + \\' are identical)\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + ($schema);\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' else { ';\n }\n } else {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_validate(it, $keyword, $ruleType) {\n var out = '';\n var $async = it.schema.$async === true,\n $refKeywords = it.util.schemaHasRulesExcept(it.schema, it.RULES.all, '$ref'),\n $id = it.self._getId(it.schema);\n if (it.opts.strictKeywords) {\n var $unknownKwd = it.util.schemaUnknownRules(it.schema, it.RULES.keywords);\n if ($unknownKwd) {\n var $keywordsMsg = 'unknown keyword: ' + $unknownKwd;\n if (it.opts.strictKeywords === 'log') it.logger.warn($keywordsMsg);\n else throw new Error($keywordsMsg);\n }\n }\n if (it.isTop) {\n out += ' var validate = ';\n if ($async) {\n it.async = true;\n out += 'async ';\n }\n out += 'function(data, dataPath, parentData, parentDataProperty, rootData) { \\'use strict\\'; ';\n if ($id && (it.opts.sourceCode || it.opts.processCode)) {\n out += ' ' + ('/\\*# sourceURL=' + $id + ' */') + ' ';\n }\n }\n if (typeof it.schema == 'boolean' || !($refKeywords || it.schema.$ref)) {\n var $keyword = 'false schema';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $errorKeyword;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n if (it.schema === false) {\n if (it.isTop) {\n $breakOnError = true;\n } else {\n out += ' var ' + ($valid) + ' = false; ';\n }\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || 'false schema') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'boolean schema is false\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n } else {\n if (it.isTop) {\n if ($async) {\n out += ' return data; ';\n } else {\n out += ' validate.errors = null; return true; ';\n }\n } else {\n out += ' var ' + ($valid) + ' = true; ';\n }\n }\n if (it.isTop) {\n out += ' }; return validate; ';\n }\n return out;\n }\n if (it.isTop) {\n var $top = it.isTop,\n $lvl = it.level = 0,\n $dataLvl = it.dataLevel = 0,\n $data = 'data';\n it.rootId = it.resolve.fullPath(it.self._getId(it.root.schema));\n it.baseId = it.baseId || it.rootId;\n delete it.isTop;\n it.dataPathArr = [undefined];\n if (it.schema.default !== undefined && it.opts.useDefaults && it.opts.strictDefaults) {\n var $defaultMsg = 'default is ignored in the schema root';\n if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg);\n else throw new Error($defaultMsg);\n }\n out += ' var vErrors = null; ';\n out += ' var errors = 0; ';\n out += ' if (rootData === undefined) rootData = data; ';\n } else {\n var $lvl = it.level,\n $dataLvl = it.dataLevel,\n $data = 'data' + ($dataLvl || '');\n if ($id) it.baseId = it.resolve.url(it.baseId, $id);\n if ($async && !it.async) throw new Error('async schema in sync schema');\n out += ' var errs_' + ($lvl) + ' = errors;';\n }\n var $valid = 'valid' + $lvl,\n $breakOnError = !it.opts.allErrors,\n $closingBraces1 = '',\n $closingBraces2 = '';\n var $errorKeyword;\n var $typeSchema = it.schema.type,\n $typeIsArray = Array.isArray($typeSchema);\n if ($typeSchema && it.opts.nullable && it.schema.nullable === true) {\n if ($typeIsArray) {\n if ($typeSchema.indexOf('null') == -1) $typeSchema = $typeSchema.concat('null');\n } else if ($typeSchema != 'null') {\n $typeSchema = [$typeSchema, 'null'];\n $typeIsArray = true;\n }\n }\n if ($typeIsArray && $typeSchema.length == 1) {\n $typeSchema = $typeSchema[0];\n $typeIsArray = false;\n }\n if (it.schema.$ref && $refKeywords) {\n if (it.opts.extendRefs == 'fail') {\n throw new Error('$ref: validation keywords used in schema at path \"' + it.errSchemaPath + '\" (see option extendRefs)');\n } else if (it.opts.extendRefs !== true) {\n $refKeywords = false;\n it.logger.warn('$ref: keywords ignored in schema at path \"' + it.errSchemaPath + '\"');\n }\n }\n if (it.schema.$comment && it.opts.$comment) {\n out += ' ' + (it.RULES.all.$comment.code(it, '$comment'));\n }\n if ($typeSchema) {\n if (it.opts.coerceTypes) {\n var $coerceToTypes = it.util.coerceToTypes(it.opts.coerceTypes, $typeSchema);\n }\n var $rulesGroup = it.RULES.types[$typeSchema];\n if ($coerceToTypes || $typeIsArray || $rulesGroup === true || ($rulesGroup && !$shouldUseGroup($rulesGroup))) {\n var $schemaPath = it.schemaPath + '.type',\n $errSchemaPath = it.errSchemaPath + '/type';\n var $schemaPath = it.schemaPath + '.type',\n $errSchemaPath = it.errSchemaPath + '/type',\n $method = $typeIsArray ? 'checkDataTypes' : 'checkDataType';\n out += ' if (' + (it.util[$method]($typeSchema, $data, it.opts.strictNumbers, true)) + ') { ';\n if ($coerceToTypes) {\n var $dataType = 'dataType' + $lvl,\n $coerced = 'coerced' + $lvl;\n out += ' var ' + ($dataType) + ' = typeof ' + ($data) + '; var ' + ($coerced) + ' = undefined; ';\n if (it.opts.coerceTypes == 'array') {\n out += ' if (' + ($dataType) + ' == \\'object\\' && Array.isArray(' + ($data) + ') && ' + ($data) + '.length == 1) { ' + ($data) + ' = ' + ($data) + '[0]; ' + ($dataType) + ' = typeof ' + ($data) + '; if (' + (it.util.checkDataType(it.schema.type, $data, it.opts.strictNumbers)) + ') ' + ($coerced) + ' = ' + ($data) + '; } ';\n }\n out += ' if (' + ($coerced) + ' !== undefined) ; ';\n var arr1 = $coerceToTypes;\n if (arr1) {\n var $type, $i = -1,\n l1 = arr1.length - 1;\n while ($i < l1) {\n $type = arr1[$i += 1];\n if ($type == 'string') {\n out += ' else if (' + ($dataType) + ' == \\'number\\' || ' + ($dataType) + ' == \\'boolean\\') ' + ($coerced) + ' = \\'\\' + ' + ($data) + '; else if (' + ($data) + ' === null) ' + ($coerced) + ' = \\'\\'; ';\n } else if ($type == 'number' || $type == 'integer') {\n out += ' else if (' + ($dataType) + ' == \\'boolean\\' || ' + ($data) + ' === null || (' + ($dataType) + ' == \\'string\\' && ' + ($data) + ' && ' + ($data) + ' == +' + ($data) + ' ';\n if ($type == 'integer') {\n out += ' && !(' + ($data) + ' % 1)';\n }\n out += ')) ' + ($coerced) + ' = +' + ($data) + '; ';\n } else if ($type == 'boolean') {\n out += ' else if (' + ($data) + ' === \\'false\\' || ' + ($data) + ' === 0 || ' + ($data) + ' === null) ' + ($coerced) + ' = false; else if (' + ($data) + ' === \\'true\\' || ' + ($data) + ' === 1) ' + ($coerced) + ' = true; ';\n } else if ($type == 'null') {\n out += ' else if (' + ($data) + ' === \\'\\' || ' + ($data) + ' === 0 || ' + ($data) + ' === false) ' + ($coerced) + ' = null; ';\n } else if (it.opts.coerceTypes == 'array' && $type == 'array') {\n out += ' else if (' + ($dataType) + ' == \\'string\\' || ' + ($dataType) + ' == \\'number\\' || ' + ($dataType) + ' == \\'boolean\\' || ' + ($data) + ' == null) ' + ($coerced) + ' = [' + ($data) + ']; ';\n }\n }\n }\n out += ' else { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || 'type') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \\'';\n if ($typeIsArray) {\n out += '' + ($typeSchema.join(\",\"));\n } else {\n out += '' + ($typeSchema);\n }\n out += '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should be ';\n if ($typeIsArray) {\n out += '' + ($typeSchema.join(\",\"));\n } else {\n out += '' + ($typeSchema);\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } if (' + ($coerced) + ' !== undefined) { ';\n var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData',\n $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';\n out += ' ' + ($data) + ' = ' + ($coerced) + '; ';\n if (!$dataLvl) {\n out += 'if (' + ($parentData) + ' !== undefined)';\n }\n out += ' ' + ($parentData) + '[' + ($parentDataProperty) + '] = ' + ($coerced) + '; } ';\n } else {\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || 'type') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \\'';\n if ($typeIsArray) {\n out += '' + ($typeSchema.join(\",\"));\n } else {\n out += '' + ($typeSchema);\n }\n out += '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should be ';\n if ($typeIsArray) {\n out += '' + ($typeSchema.join(\",\"));\n } else {\n out += '' + ($typeSchema);\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n }\n out += ' } ';\n }\n }\n if (it.schema.$ref && !$refKeywords) {\n out += ' ' + (it.RULES.all.$ref.code(it, '$ref')) + ' ';\n if ($breakOnError) {\n out += ' } if (errors === ';\n if ($top) {\n out += '0';\n } else {\n out += 'errs_' + ($lvl);\n }\n out += ') { ';\n $closingBraces2 += '}';\n }\n } else {\n var arr2 = it.RULES;\n if (arr2) {\n var $rulesGroup, i2 = -1,\n l2 = arr2.length - 1;\n while (i2 < l2) {\n $rulesGroup = arr2[i2 += 1];\n if ($shouldUseGroup($rulesGroup)) {\n if ($rulesGroup.type) {\n out += ' if (' + (it.util.checkDataType($rulesGroup.type, $data, it.opts.strictNumbers)) + ') { ';\n }\n if (it.opts.useDefaults) {\n if ($rulesGroup.type == 'object' && it.schema.properties) {\n var $schema = it.schema.properties,\n $schemaKeys = Object.keys($schema);\n var arr3 = $schemaKeys;\n if (arr3) {\n var $propertyKey, i3 = -1,\n l3 = arr3.length - 1;\n while (i3 < l3) {\n $propertyKey = arr3[i3 += 1];\n var $sch = $schema[$propertyKey];\n if ($sch.default !== undefined) {\n var $passData = $data + it.util.getProperty($propertyKey);\n if (it.compositeRule) {\n if (it.opts.strictDefaults) {\n var $defaultMsg = 'default is ignored for: ' + $passData;\n if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg);\n else throw new Error($defaultMsg);\n }\n } else {\n out += ' if (' + ($passData) + ' === undefined ';\n if (it.opts.useDefaults == 'empty') {\n out += ' || ' + ($passData) + ' === null || ' + ($passData) + ' === \\'\\' ';\n }\n out += ' ) ' + ($passData) + ' = ';\n if (it.opts.useDefaults == 'shared') {\n out += ' ' + (it.useDefault($sch.default)) + ' ';\n } else {\n out += ' ' + (JSON.stringify($sch.default)) + ' ';\n }\n out += '; ';\n }\n }\n }\n }\n } else if ($rulesGroup.type == 'array' && Array.isArray(it.schema.items)) {\n var arr4 = it.schema.items;\n if (arr4) {\n var $sch, $i = -1,\n l4 = arr4.length - 1;\n while ($i < l4) {\n $sch = arr4[$i += 1];\n if ($sch.default !== undefined) {\n var $passData = $data + '[' + $i + ']';\n if (it.compositeRule) {\n if (it.opts.strictDefaults) {\n var $defaultMsg = 'default is ignored for: ' + $passData;\n if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg);\n else throw new Error($defaultMsg);\n }\n } else {\n out += ' if (' + ($passData) + ' === undefined ';\n if (it.opts.useDefaults == 'empty') {\n out += ' || ' + ($passData) + ' === null || ' + ($passData) + ' === \\'\\' ';\n }\n out += ' ) ' + ($passData) + ' = ';\n if (it.opts.useDefaults == 'shared') {\n out += ' ' + (it.useDefault($sch.default)) + ' ';\n } else {\n out += ' ' + (JSON.stringify($sch.default)) + ' ';\n }\n out += '; ';\n }\n }\n }\n }\n }\n }\n var arr5 = $rulesGroup.rules;\n if (arr5) {\n var $rule, i5 = -1,\n l5 = arr5.length - 1;\n while (i5 < l5) {\n $rule = arr5[i5 += 1];\n if ($shouldUseRule($rule)) {\n var $code = $rule.code(it, $rule.keyword, $rulesGroup.type);\n if ($code) {\n out += ' ' + ($code) + ' ';\n if ($breakOnError) {\n $closingBraces1 += '}';\n }\n }\n }\n }\n }\n if ($breakOnError) {\n out += ' ' + ($closingBraces1) + ' ';\n $closingBraces1 = '';\n }\n if ($rulesGroup.type) {\n out += ' } ';\n if ($typeSchema && $typeSchema === $rulesGroup.type && !$coerceToTypes) {\n out += ' else { ';\n var $schemaPath = it.schemaPath + '.type',\n $errSchemaPath = it.errSchemaPath + '/type';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || 'type') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \\'';\n if ($typeIsArray) {\n out += '' + ($typeSchema.join(\",\"));\n } else {\n out += '' + ($typeSchema);\n }\n out += '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should be ';\n if ($typeIsArray) {\n out += '' + ($typeSchema.join(\",\"));\n } else {\n out += '' + ($typeSchema);\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } ';\n }\n }\n if ($breakOnError) {\n out += ' if (errors === ';\n if ($top) {\n out += '0';\n } else {\n out += 'errs_' + ($lvl);\n }\n out += ') { ';\n $closingBraces2 += '}';\n }\n }\n }\n }\n }\n if ($breakOnError) {\n out += ' ' + ($closingBraces2) + ' ';\n }\n if ($top) {\n if ($async) {\n out += ' if (errors === 0) return data; ';\n out += ' else throw new ValidationError(vErrors); ';\n } else {\n out += ' validate.errors = vErrors; ';\n out += ' return errors === 0; ';\n }\n out += ' }; return validate;';\n } else {\n out += ' var ' + ($valid) + ' = errors === errs_' + ($lvl) + ';';\n }\n\n function $shouldUseGroup($rulesGroup) {\n var rules = $rulesGroup.rules;\n for (var i = 0; i < rules.length; i++)\n if ($shouldUseRule(rules[i])) return true;\n }\n\n function $shouldUseRule($rule) {\n return it.schema[$rule.keyword] !== undefined || ($rule.implements && $ruleImplementsSomeKeyword($rule));\n }\n\n function $ruleImplementsSomeKeyword($rule) {\n var impl = $rule.implements;\n for (var i = 0; i < impl.length; i++)\n if (it.schema[impl[i]] !== undefined) return true;\n }\n return out;\n}\n","'use strict';\n\nvar IDENTIFIER = /^[a-z_$][a-z0-9_$-]*$/i;\nvar customRuleCode = require('./dotjs/custom');\nvar definitionSchema = require('./definition_schema');\n\nmodule.exports = {\n add: addKeyword,\n get: getKeyword,\n remove: removeKeyword,\n validate: validateKeyword\n};\n\n\n/**\n * Define custom keyword\n * @this Ajv\n * @param {String} keyword custom keyword, should be unique (including different from all standard, custom and macro keywords).\n * @param {Object} definition keyword definition object with properties `type` (type(s) which the keyword applies to), `validate` or `compile`.\n * @return {Ajv} this for method chaining\n */\nfunction addKeyword(keyword, definition) {\n /* jshint validthis: true */\n /* eslint no-shadow: 0 */\n var RULES = this.RULES;\n if (RULES.keywords[keyword])\n throw new Error('Keyword ' + keyword + ' is already defined');\n\n if (!IDENTIFIER.test(keyword))\n throw new Error('Keyword ' + keyword + ' is not a valid identifier');\n\n if (definition) {\n this.validateKeyword(definition, true);\n\n var dataType = definition.type;\n if (Array.isArray(dataType)) {\n for (var i=0; i<dataType.length; i++)\n _addRule(keyword, dataType[i], definition);\n } else {\n _addRule(keyword, dataType, definition);\n }\n\n var metaSchema = definition.metaSchema;\n if (metaSchema) {\n if (definition.$data && this._opts.$data) {\n metaSchema = {\n anyOf: [\n metaSchema,\n { '$ref': 'https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#' }\n ]\n };\n }\n definition.validateSchema = this.compile(metaSchema, true);\n }\n }\n\n RULES.keywords[keyword] = RULES.all[keyword] = true;\n\n\n function _addRule(keyword, dataType, definition) {\n var ruleGroup;\n for (var i=0; i<RULES.length; i++) {\n var rg = RULES[i];\n if (rg.type == dataType) {\n ruleGroup = rg;\n break;\n }\n }\n\n if (!ruleGroup) {\n ruleGroup = { type: dataType, rules: [] };\n RULES.push(ruleGroup);\n }\n\n var rule = {\n keyword: keyword,\n definition: definition,\n custom: true,\n code: customRuleCode,\n implements: definition.implements\n };\n ruleGroup.rules.push(rule);\n RULES.custom[keyword] = rule;\n }\n\n return this;\n}\n\n\n/**\n * Get keyword\n * @this Ajv\n * @param {String} keyword pre-defined or custom keyword.\n * @return {Object|Boolean} custom keyword definition, `true` if it is a predefined keyword, `false` otherwise.\n */\nfunction getKeyword(keyword) {\n /* jshint validthis: true */\n var rule = this.RULES.custom[keyword];\n return rule ? rule.definition : this.RULES.keywords[keyword] || false;\n}\n\n\n/**\n * Remove keyword\n * @this Ajv\n * @param {String} keyword pre-defined or custom keyword.\n * @return {Ajv} this for method chaining\n */\nfunction removeKeyword(keyword) {\n /* jshint validthis: true */\n var RULES = this.RULES;\n delete RULES.keywords[keyword];\n delete RULES.all[keyword];\n delete RULES.custom[keyword];\n for (var i=0; i<RULES.length; i++) {\n var rules = RULES[i].rules;\n for (var j=0; j<rules.length; j++) {\n if (rules[j].keyword == keyword) {\n rules.splice(j, 1);\n break;\n }\n }\n }\n return this;\n}\n\n\n/**\n * Validate keyword definition\n * @this Ajv\n * @param {Object} definition keyword definition object.\n * @param {Boolean} throwError true to throw exception if definition is invalid\n * @return {boolean} validation result\n */\nfunction validateKeyword(definition, throwError) {\n validateKeyword.errors = null;\n var v = this._validateKeyword = this._validateKeyword\n || this.compile(definitionSchema, true);\n\n if (v(definition)) return true;\n validateKeyword.errors = v.errors;\n if (throwError)\n throw new Error('custom keyword definition is invalid: ' + this.errorsText(v.errors));\n else\n return false;\n}\n","module.exports = require('./lib/axios');","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\nvar defaults = require('../defaults');\nvar Cancel = require('../cancel/Cancel');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n var responseType = config.responseType;\n var 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 if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), 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 var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: 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(createError('Request aborted', config, 'ECONNABORTED', 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(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n var transitional = config.transitional || defaults.transitional;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(createError(\n timeoutErrorMessage,\n config,\n transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\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 if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\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', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = function(cancel) {\n if (!request) {\n return;\n }\n reject(!cancel || (cancel && cancel.type) ? new Cancel('canceled') : 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 if (!requestData) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\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\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\naxios.VERSION = require('./env/data').version;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose isAxiosError\naxios.isAxiosError = require('./helpers/isAxiosError');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(function(cancel) {\n if (!token._listeners) return;\n\n var i;\n var l = token._listeners.length;\n\n for (i = 0; i < l; i++) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = function(onfulfilled) {\n var _resolve;\n // eslint-disable-next-line func-names\n var promise = new Promise(function(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) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Subscribe to the cancel signal\n */\n\nCancelToken.prototype.subscribe = function 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\nCancelToken.prototype.unsubscribe = function unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n var 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 */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\nvar validator = require('../helpers/validator');\n\nvar validators = validator.validators;\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(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 {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function 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 // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n var transitional = config.transitional;\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 // filter out skipped interceptors\n var requestInterceptorChain = [];\n var 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 var responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n var promise;\n\n if (!synchronousRequestInterceptors) {\n var chain = [dispatchRequest, undefined];\n\n Array.prototype.unshift.apply(chain, requestInterceptorChain);\n chain = chain.concat(responseInterceptorChain);\n\n promise = Promise.resolve(config);\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n }\n\n\n var newConfig = config;\n while (requestInterceptorChain.length) {\n var onFulfilled = requestInterceptorChain.shift();\n var onRejected = requestInterceptorChain.shift();\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected(error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest(newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n while (responseInterceptorChain.length) {\n promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\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: method,\n url: url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\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 */\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: 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 */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\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 */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\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 * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n","'use strict';\n\nvar enhanceError = require('./enhanceError');\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 {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar Cancel = require('../cancel/Cancel');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new Cancel('canceled');\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 * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = 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 response.data,\n response.headers,\n config.transformResponse\n );\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 reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.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: this.config,\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n };\n return error;\n};\n","'use strict';\n\nvar utils = require('../utils');\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 * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(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(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(prop) {\n if (prop in config2) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n var 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 '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 'transport': defaultToConfig2,\n 'httpAgent': defaultToConfig2,\n 'httpsAgent': defaultToConfig2,\n 'cancelToken': defaultToConfig2,\n 'socketPath': defaultToConfig2,\n 'responseEncoding': defaultToConfig2,\n 'validateStatus': mergeDirectKeys\n };\n\n utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\n var merge = mergeMap[prop] || mergeDeepProperties;\n var configValue = merge(prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n};\n","'use strict';\n\nvar createError = require('./createError');\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 */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar defaults = require('./../defaults');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n var context = this || defaults;\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn.call(context, data, headers);\n });\n\n return data;\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\nvar enhanceError = require('./core/enhanceError');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n }\n return adapter;\n}\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\nvar defaults = {\n\n transitional: {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n },\n\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data) || (headers && headers['Content-Type'] === 'application/json')) {\n setContentTypeIfUnset(headers, 'application/json');\n return stringifySafely(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n var transitional = this.transitional || defaults.transitional;\n var silentJSONParsing = transitional && transitional.silentJSONParsing;\n var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';\n\n if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw enhanceError(e, this, 'E_JSON_PARSE');\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 validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","module.exports = {\n \"version\": \"0.26.0\"\n};","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\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 * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return 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 * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = 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\nvar utils = require('./../utils');\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\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 var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var 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 var 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);\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\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} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\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 * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","'use strict';\n\nvar VERSION = require('../env/data').version;\n\nvar validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nvar deprecatedWarnings = {};\n\n/**\n * Transitional option validator\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 * @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 function(value, opt, opts) {\n if (validator === false) {\n throw new Error(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')));\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 * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n var keys = Object.keys(options);\n var i = keys.length;\n while (i-- > 0) {\n var opt = keys[i];\n var validator = schema[opt];\n if (validator) {\n var value = options[opt];\n var result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new TypeError('option ' + opt + ' must be ' + result);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw Error('Unknown option ' + opt);\n }\n }\n}\n\nmodule.exports = {\n assertOptions: assertOptions,\n validators: validators\n};\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return Array.isArray(val);\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\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 && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return toString.call(val) === '[object FormData]';\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var 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 {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n if (toString.call(val) !== '[object Object]') {\n return false;\n }\n\n var prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return toString.call(val) === '[object URLSearchParams]';\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\n}\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 */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\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 */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\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 (var 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 for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\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 * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n 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 * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\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 * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM\n};\n","var ___EXPOSE_LOADER_IMPORT___ = require(\"-!./jquery.js\");\nvar ___EXPOSE_LOADER_GET_GLOBAL_THIS___ = require(\"../../expose-loader/dist/runtime/getGlobalThis.js\");\nvar ___EXPOSE_LOADER_GLOBAL_THIS___ = ___EXPOSE_LOADER_GET_GLOBAL_THIS___;\nif (typeof ___EXPOSE_LOADER_GLOBAL_THIS___[\"$\"] === 'undefined') ___EXPOSE_LOADER_GLOBAL_THIS___[\"$\"] = ___EXPOSE_LOADER_IMPORT___;\nif (typeof ___EXPOSE_LOADER_GLOBAL_THIS___[\"jQuery\"] === 'undefined') ___EXPOSE_LOADER_GLOBAL_THIS___[\"jQuery\"] = ___EXPOSE_LOADER_IMPORT___;\nmodule.exports = ___EXPOSE_LOADER_IMPORT___;\n","var ___EXPOSE_LOADER_IMPORT___ = require(\"-!./backbone.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___;\n___EXPOSE_LOADER_GLOBAL_THIS___[\"Backbone\"] = ___EXPOSE_LOADER_IMPORT___;\nmodule.exports = ___EXPOSE_LOADER_IMPORT___;\n","var ___EXPOSE_LOADER_IMPORT___ = require(\"-!./modernizr.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___[\"Modernizr\"] === 'undefined') ___EXPOSE_LOADER_GLOBAL_THIS___[\"Modernizr\"] = ___EXPOSE_LOADER_IMPORT___;\nmodule.exports = ___EXPOSE_LOADER_IMPORT___;\n","var ___EXPOSE_LOADER_IMPORT___ = require(\"-!./underscore.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___[\"_\"] === 'undefined') ___EXPOSE_LOADER_GLOBAL_THIS___[\"_\"] = ___EXPOSE_LOADER_IMPORT___;\nmodule.exports = ___EXPOSE_LOADER_IMPORT___;\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\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","'use strict';\n\nmodule.exports = function (data, opts) {\n if (!opts) opts = {};\n if (typeof opts === 'function') opts = { cmp: opts };\n var cycles = (typeof opts.cycles === 'boolean') ? opts.cycles : false;\n\n var cmp = opts.cmp && (function (f) {\n return function (node) {\n return function (a, b) {\n var aobj = { key: a, value: node[a] };\n var bobj = { key: b, value: node[b] };\n return f(aobj, bobj);\n };\n };\n })(opts.cmp);\n\n var seen = [];\n return (function stringify (node) {\n if (node && node.toJSON && typeof node.toJSON === 'function') {\n node = node.toJSON();\n }\n\n if (node === undefined) return;\n if (typeof node == 'number') return isFinite(node) ? '' + node : 'null';\n if (typeof node !== 'object') return JSON.stringify(node);\n\n var i, out;\n if (Array.isArray(node)) {\n out = '[';\n for (i = 0; i < node.length; i++) {\n if (i) out += ',';\n out += stringify(node[i]) || 'null';\n }\n return out + ']';\n }\n\n if (node === null) return 'null';\n\n if (seen.indexOf(node) !== -1) {\n if (cycles) return JSON.stringify('__cycle__');\n throw new TypeError('Converting circular structure to JSON');\n }\n\n var seenIndex = seen.push(node) - 1;\n var keys = Object.keys(node).sort(cmp && cmp(node));\n out = '';\n for (i = 0; i < keys.length; i++) {\n var key = keys[i];\n var value = stringify(node[key]);\n\n if (!value) continue;\n if (out) out += ',';\n out += JSON.stringify(key) + ':' + value;\n }\n seen.splice(seenIndex, 1);\n return '{' + out + '}';\n })(data);\n};\n","var topLevel = typeof global !== 'undefined' ? global :\n typeof window !== 'undefined' ? window : {}\nvar minDoc = require('min-document');\n\nvar doccy;\n\nif (typeof document !== 'undefined') {\n doccy = document;\n} else {\n doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'];\n\n if (!doccy) {\n doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc;\n }\n}\n\nmodule.exports = doccy;\n","var win;\n\nif (typeof window !== \"undefined\") {\n win = window;\n} else if (typeof global !== \"undefined\") {\n win = global;\n} else if (typeof self !== \"undefined\"){\n win = self;\n} else {\n win = {};\n}\n\nmodule.exports = win;\n","/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function(window, document, exportName, undefined) {\n 'use strict';\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = document.createElement('div');\n\nvar TYPE_FUNCTION = 'function';\n\nvar round = Math.round;\nvar abs = Math.abs;\nvar now = Date.now;\n\n/**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\nfunction setTimeoutContext(fn, timeout, context) {\n return setTimeout(bindFn(fn, context), timeout);\n}\n\n/**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\nfunction invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n return false;\n}\n\n/**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n}\n\n/**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n return function() {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '')\n .replace(/^\\s+at\\s+/gm, '')\n .replace(/^Object.<anonymous>\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n\n var log = window.console && (window.console.warn || window.console.log);\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n return method.apply(this, arguments);\n };\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\nif (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n return output;\n };\n} else {\n assign = Object.assign;\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\nvar extend = deprecate(function extend(dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n while (i < keys.length) {\n if (!merge || (merge && dest[keys[i]] === undefined)) {\n dest[keys[i]] = src[keys[i]];\n }\n i++;\n }\n return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\nvar merge = deprecate(function merge(dest, src) {\n return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\nfunction inherit(child, base, properties) {\n var baseP = base.prototype,\n childP;\n\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign(childP, properties);\n }\n}\n\n/**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n}\n\n/**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\nfunction boolOrFn(val, args) {\n if (typeof val == TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n return val;\n}\n\n/**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\nfunction ifUndefined(val1, val2) {\n return (val1 === undefined) ? val2 : val1;\n}\n\n/**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction addEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.addEventListener(type, handler, false);\n });\n}\n\n/**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction removeEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.removeEventListener(type, handler, false);\n });\n}\n\n/**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n while (node) {\n if (node == parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}\n\n/**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n return str.indexOf(find) > -1;\n}\n\n/**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n return str.trim().split(/\\s+/g);\n}\n\n/**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n while (i < src.length) {\n if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {\n return i;\n }\n i++;\n }\n return -1;\n }\n}\n\n/**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\nfunction uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function sortUniqueArray(a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n}\n\n/**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\nfunction prefixed(obj, property) {\n var prefix, prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n\n var i = 0;\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = (prefix) ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n i++;\n }\n return undefined;\n}\n\n/**\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n return _uniqueId++;\n}\n\n/**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return (doc.defaultView || doc.parentWindow || window);\n}\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n\nvar SUPPORT_TOUCH = ('ontouchstart' in window);\nvar SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\n\nvar COMPUTE_INTERVAL = 25;\n\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\n\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\n\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\nfunction Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget;\n\n // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n this.domHandler = function(ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n\n}\n\nInput.prototype = {\n /**\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n handler: function() { },\n\n /**\n * bind the events\n */\n init: function() {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n },\n\n /**\n * unbind the events\n */\n destroy: function() {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n }\n};\n\n/**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\nfunction createInputInstance(manager) {\n var Type;\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n return new (Type)(manager, inputHandler);\n}\n\n/**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\nfunction inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));\n var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));\n\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n }\n\n // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n input.eventType = eventType;\n\n // compute scale, rotation etc\n computeInputData(manager, input);\n\n // emit secret event\n manager.emit('hammer.input', input);\n\n manager.recognize(input);\n manager.session.prevInput = input;\n}\n\n/**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\nfunction computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length;\n\n // store the first input to calculate the distance and direction\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n }\n\n // to compute scale and rotation we need to store the multiple touches\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput;\n var firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;\n\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n\n input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >\n session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);\n\n computeIntervalInputData(session, input);\n\n // find the correct target\n var target = manager.element;\n if (hasParent(input.srcEvent.target, target)) {\n target = input.srcEvent.target;\n }\n input.target = target;\n}\n\nfunction computeDeltaXY(session, input) {\n var center = input.center;\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\nfunction computeIntervalInputData(session, input) {\n var last = session.lastInterval || input,\n deltaTime = input.timeStamp - last.timeStamp,\n velocity, velocityX, velocityY, direction;\n\n if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n}\n\n/**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\nfunction simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n}\n\n/**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\nfunction getCenter(pointers) {\n var pointersLength = pointers.length;\n\n // no need to loop when only one touch\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0, y = 0, i = 0;\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n}\n\n/**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n}\n\n/**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\nfunction getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\n/**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\nfunction getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n\n return Math.sqrt((x * x) + (y * y));\n}\n\n/**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\nfunction getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\nfunction getRotation(start, end) {\n return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\nfunction getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\n\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n\n/**\n * Mouse events input\n * @constructor\n * @extends Input\n */\nfunction MouseInput() {\n this.evEl = MOUSE_ELEMENT_EVENTS;\n this.evWin = MOUSE_WINDOW_EVENTS;\n\n this.pressed = false; // mousedown state\n\n Input.apply(this, arguments);\n}\n\ninherit(MouseInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function MEhandler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type];\n\n // on start we want to have the left mouse button down\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n }\n\n // mouse must be down\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n }\n});\n\nvar POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n};\n\n// in IE10 the pointer types is defined as an enum\nvar IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n};\n\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\n\n// IE10 has prefixed support, and case-sensitive\nif (window.MSPointerEvent && !window.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n\n/**\n * Pointer events input\n * @constructor\n * @extends Input\n */\nfunction PointerEventInput() {\n this.evEl = POINTER_ELEMENT_EVENTS;\n this.evWin = POINTER_WINDOW_EVENTS;\n\n Input.apply(this, arguments);\n\n this.store = (this.manager.session.pointerEvents = []);\n}\n\ninherit(PointerEventInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function PEhandler(ev) {\n var store = this.store;\n var removePointer = false;\n\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n\n var isTouch = (pointerType == INPUT_TYPE_TOUCH);\n\n // get index of the event in the store\n var storeIndex = inArray(store, ev.pointerId, 'pointerId');\n\n // start and mouse must be down\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n }\n\n // it not found, so the pointer hasn't been down (so it's probably a hover)\n if (storeIndex < 0) {\n return;\n }\n\n // update the event in the store\n store[storeIndex] = ev;\n\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n }\n});\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Touch events input\n * @constructor\n * @extends Input\n */\nfunction SingleTouchInput() {\n this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n this.started = false;\n\n Input.apply(this, arguments);\n}\n\ninherit(SingleTouchInput, Input, {\n handler: function TEhandler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\n\n // should we handle the touch events?\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type);\n\n // when done, reset the started state\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n}\n\nvar TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\nfunction TouchInput() {\n this.evTarget = TOUCH_TARGET_EVENTS;\n this.targetIds = {};\n\n Input.apply(this, arguments);\n}\n\ninherit(TouchInput, Input, {\n handler: function MTEhandler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds;\n\n // when there is only one touch, the process can be simplified\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i,\n targetTouches,\n changedTouches = toArray(ev.changedTouches),\n changedTargetTouches = [],\n target = this.target;\n\n // get target touches from touches\n targetTouches = allTouches.filter(function(touch) {\n return hasParent(touch.target, target);\n });\n\n // collect touches\n if (type === INPUT_START) {\n i = 0;\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n }\n\n // filter changed touches to only contain touches that exist in the collected target ids\n i = 0;\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n }\n\n // cleanup removed touches\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [\n // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),\n changedTargetTouches\n ];\n}\n\n/**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction TouchMouseInput() {\n Input.apply(this, arguments);\n\n var handler = bindFn(this.handler, this);\n this.touch = new TouchInput(this.manager, handler);\n this.mouse = new MouseInput(this.manager, handler);\n\n this.primaryTouch = null;\n this.lastTouches = [];\n}\n\ninherit(TouchMouseInput, Input, {\n /**\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n handler: function TMEhandler(manager, inputEvent, inputData) {\n var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),\n isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n }\n\n // when we're in a touch event, record touches to de-dupe synthetic mouse event\n if (isTouch) {\n recordTouches.call(this, inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n return;\n }\n\n this.callback(manager, inputEvent, inputData);\n },\n\n /**\n * remove the event listeners\n */\n destroy: function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n }\n});\n\nfunction recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n}\n\nfunction setLastTouch(eventData) {\n var touch = eventData.changedPointers[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {x: touch.clientX, y: touch.clientY};\n this.lastTouches.push(lastTouch);\n var lts = this.lastTouches;\n var removeLastTouch = function() {\n var i = lts.indexOf(lastTouch);\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n}\n\nfunction isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n return false;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\n// magical touchAction value\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\n/**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\nfunction TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n}\n\nTouchAction.prototype = {\n /**\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n set: function(value) {\n // find out the touch-action by the event handlers\n if (value == TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n this.actions = value.toLowerCase().trim();\n },\n\n /**\n * just re-set the touchAction value\n */\n update: function() {\n this.set(this.manager.options.touchAction);\n },\n\n /**\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n compute: function() {\n var actions = [];\n each(this.manager.recognizers, function(recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n },\n\n /**\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n preventDefaults: function(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection;\n\n // if the touch action did prevented once this session\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n //do not prevent defaults if this is a tap gesture\n\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone ||\n (hasPanY && direction & DIRECTION_HORIZONTAL) ||\n (hasPanX && direction & DIRECTION_VERTICAL)) {\n return this.preventSrc(srcEvent);\n }\n },\n\n /**\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n preventSrc: function(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n }\n};\n\n/**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\nfunction cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n\n // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n }\n\n // pan-x OR pan-y\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n }\n\n // manipulation\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n}\n\nfunction getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n var touchMap = {};\n var cssSupports = window.CSS && window.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {\n\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n}\n\n/**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\nfunction Recognizer(options) {\n this.options = assign({}, this.defaults, options || {});\n\n this.id = uniqueId();\n\n this.manager = null;\n\n // default is enable true\n this.options.enable = ifUndefined(this.options.enable, true);\n\n this.state = STATE_POSSIBLE;\n\n this.simultaneous = {};\n this.requireFail = [];\n}\n\nRecognizer.prototype = {\n /**\n * @virtual\n * @type {Object}\n */\n defaults: {},\n\n /**\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n set: function(options) {\n assign(this.options, options);\n\n // also update the touchAction, in case something changed about the directions/enabled state\n this.manager && this.manager.touchAction.update();\n return this;\n },\n\n /**\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n recognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n return this;\n },\n\n /**\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRecognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n },\n\n /**\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n requireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n return this;\n },\n\n /**\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRequireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n return this;\n },\n\n /**\n * has require failures boolean\n * @returns {boolean}\n */\n hasRequireFailures: function() {\n return this.requireFail.length > 0;\n },\n\n /**\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n canRecognizeWith: function(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n },\n\n /**\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n emit: function(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n }\n\n // 'panstart' and 'panmove'\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n }\n\n // panend and pancancel\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n },\n\n /**\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n tryEmit: function(input) {\n if (this.canEmit()) {\n return this.emit(input);\n }\n // it's failing anyway\n this.state = STATE_FAILED;\n },\n\n /**\n * can we emit?\n * @returns {boolean}\n */\n canEmit: function() {\n var i = 0;\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n i++;\n }\n return true;\n },\n\n /**\n * update the recognizer\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign({}, inputData);\n\n // is is enabled and allow recognizing?\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n }\n\n // reset when we've reached the end\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone);\n\n // the recognizer has recognized a gesture\n // so trigger an event\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n },\n\n /**\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {Const} STATE\n */\n process: function(inputData) { }, // jshint ignore:line\n\n /**\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n getTouchAction: function() { },\n\n /**\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n reset: function() { }\n};\n\n/**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\nfunction stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n return '';\n}\n\n/**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\nfunction directionStr(direction) {\n if (direction == DIRECTION_DOWN) {\n return 'down';\n } else if (direction == DIRECTION_UP) {\n return 'up';\n } else if (direction == DIRECTION_LEFT) {\n return 'left';\n } else if (direction == DIRECTION_RIGHT) {\n return 'right';\n }\n return '';\n}\n\n/**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n if (manager) {\n return manager.get(otherRecognizer);\n }\n return otherRecognizer;\n}\n\n/**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\nfunction AttrRecognizer() {\n Recognizer.apply(this, arguments);\n}\n\ninherit(AttrRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof AttrRecognizer\n */\n defaults: {\n /**\n * @type {Number}\n * @default 1\n */\n pointers: 1\n },\n\n /**\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n attrTest: function(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n },\n\n /**\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n process: function(input) {\n var state = this.state;\n var eventType = input.eventType;\n\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input);\n\n // on cancel input and we've recognized before, return STATE_CANCELLED\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n return state | STATE_CHANGED;\n }\n return STATE_FAILED;\n }\n});\n\n/**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PanRecognizer() {\n AttrRecognizer.apply(this, arguments);\n\n this.pX = null;\n this.pY = null;\n}\n\ninherit(PanRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PanRecognizer\n */\n defaults: {\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n },\n\n getTouchAction: function() {\n var direction = this.options.direction;\n var actions = [];\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n return actions;\n },\n\n directionTest: function(input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY;\n\n // lock to axis?\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x != this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y != this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n },\n\n attrTest: function(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) &&\n (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));\n },\n\n emit: function(input) {\n\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PinchRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(PinchRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'pinch',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n },\n\n emit: function(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\nfunction PressRecognizer() {\n Recognizer.apply(this, arguments);\n\n this._timer = null;\n this._input = null;\n}\n\ninherit(PressRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PressRecognizer\n */\n defaults: {\n event: 'press',\n pointers: 1,\n time: 251, // minimal time of the pointer to be pressed\n threshold: 9 // a minimal movement is ok, but keep it low\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_AUTO];\n },\n\n process: function(input) {\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n\n this._input = input;\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.time, this);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function(input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && (input.eventType & INPUT_END)) {\n this.manager.emit(this.options.event + 'up', input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction RotateRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(RotateRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof RotateRecognizer\n */\n defaults: {\n event: 'rotate',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n }\n});\n\n/**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction SwipeRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(SwipeRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof SwipeRecognizer\n */\n defaults: {\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n },\n\n getTouchAction: function() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n },\n\n attrTest: function(input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return this._super.attrTest.call(this, input) &&\n direction & input.offsetDirection &&\n input.distance > this.options.threshold &&\n input.maxPointers == this.options.pointers &&\n abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n },\n\n emit: function(input) {\n var direction = directionStr(input.offsetDirection);\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n }\n});\n\n/**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\nfunction TapRecognizer() {\n Recognizer.apply(this, arguments);\n\n // previous time and center,\n // used for tap counting\n this.pTime = false;\n this.pCenter = false;\n\n this._timer = null;\n this._input = null;\n this.count = 0;\n}\n\ninherit(TapRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300, // max time between the multi-tap taps\n time: 250, // max time of the pointer to be down (like finger on the screen)\n threshold: 9, // a minimal movement is ok, but keep it low\n posThreshold: 10 // a multi-tap can be a bit off the initial position\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_MANIPULATION];\n },\n\n process: function(input) {\n var options = this.options;\n\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n\n this.reset();\n\n if ((input.eventType & INPUT_START) && (this.count === 0)) {\n return this.failTimeout();\n }\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType != INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input;\n\n // if tap count matches we have recognized it,\n // else it has began recognizing...\n var tapCount = this.count % options.taps;\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.interval, this);\n return STATE_BEGAN;\n }\n }\n }\n return STATE_FAILED;\n },\n\n failTimeout: function() {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_FAILED;\n }, this.options.interval, this);\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function() {\n if (this.state == STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Hammer(element, options) {\n options = options || {};\n options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n return new Manager(element, options);\n}\n\n/**\n * @const {string}\n */\nHammer.VERSION = '2.0.7';\n\n/**\n * default settings\n * @namespace\n */\nHammer.defaults = {\n /**\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * @type {Array}\n */\n preset: [\n // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n [RotateRecognizer, {enable: false}],\n [PinchRecognizer, {enable: false}, ['rotate']],\n [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],\n [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],\n [TapRecognizer],\n [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],\n [PressRecognizer]\n ],\n\n /**\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: 'none',\n\n /**\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: 'none',\n\n /**\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: 'none',\n\n /**\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: 'none',\n\n /**\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: 'none',\n\n /**\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: 'rgba(0,0,0,0)'\n }\n};\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n\n/**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Manager(element, options) {\n this.options = assign({}, Hammer.defaults, options || {});\n\n this.options.inputTarget = this.options.inputTarget || element;\n\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n\n toggleCssProps(this, true);\n\n each(this.options.recognizers, function(item) {\n var recognizer = this.add(new (item[0])(item[1]));\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n}\n\nManager.prototype = {\n /**\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n set: function(options) {\n assign(this.options, options);\n\n // Options that need a little more setup\n if (options.touchAction) {\n this.touchAction.update();\n }\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n return this;\n },\n\n /**\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n stop: function(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n },\n\n /**\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n var session = this.session;\n if (session.stopped) {\n return;\n }\n\n // run the touch-action polyfill\n this.touchAction.preventDefaults(inputData);\n\n var recognizer;\n var recognizers = this.recognizers;\n\n // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n var curRecognizer = session.curRecognizer;\n\n // reset when the last recognizer is recognized\n // or when we're in a new session\n if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {\n curRecognizer = session.curRecognizer = null;\n }\n\n var i = 0;\n while (i < recognizers.length) {\n recognizer = recognizers[i];\n\n // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer == curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) { // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n }\n\n // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n curRecognizer = session.curRecognizer = recognizer;\n }\n i++;\n }\n },\n\n /**\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n get: function(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event == recognizer) {\n return recognizers[i];\n }\n }\n return null;\n },\n\n /**\n * add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n add: function(recognizer) {\n if (invokeArrayArg(recognizer, 'add', this)) {\n return this;\n }\n\n // remove existing\n var existing = this.get(recognizer.options.event);\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n\n this.touchAction.update();\n return recognizer;\n },\n\n /**\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n remove: function(recognizer) {\n if (invokeArrayArg(recognizer, 'remove', this)) {\n return this;\n }\n\n recognizer = this.get(recognizer);\n\n // let's make sure this recognizer exists\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, recognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n },\n\n /**\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n on: function(events, handler) {\n if (events === undefined) {\n return;\n }\n if (handler === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n },\n\n /**\n * unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n off: function(events, handler) {\n if (events === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n },\n\n /**\n * emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n emit: function(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n }\n\n // no handlers, so skip it all\n var handlers = this.handlers[event] && this.handlers[event].slice();\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n data.preventDefault = function() {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n },\n\n /**\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n destroy: function() {\n this.element && toggleCssProps(this, false);\n\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n }\n};\n\n/**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\nfunction toggleCssProps(manager, add) {\n var element = manager.element;\n if (!element.style) {\n return;\n }\n var prop;\n each(manager.options.cssProps, function(value, name) {\n prop = prefixed(element.style, name);\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || '';\n }\n });\n if (!add) {\n manager.oldCssProps = {};\n }\n}\n\n/**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\nfunction triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent('Event');\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n}\n\nassign(Hammer, {\n INPUT_START: INPUT_START,\n INPUT_MOVE: INPUT_MOVE,\n INPUT_END: INPUT_END,\n INPUT_CANCEL: INPUT_CANCEL,\n\n STATE_POSSIBLE: STATE_POSSIBLE,\n STATE_BEGAN: STATE_BEGAN,\n STATE_CHANGED: STATE_CHANGED,\n STATE_ENDED: STATE_ENDED,\n STATE_RECOGNIZED: STATE_RECOGNIZED,\n STATE_CANCELLED: STATE_CANCELLED,\n STATE_FAILED: STATE_FAILED,\n\n DIRECTION_NONE: DIRECTION_NONE,\n DIRECTION_LEFT: DIRECTION_LEFT,\n DIRECTION_RIGHT: DIRECTION_RIGHT,\n DIRECTION_UP: DIRECTION_UP,\n DIRECTION_DOWN: DIRECTION_DOWN,\n DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n DIRECTION_ALL: DIRECTION_ALL,\n\n Manager: Manager,\n Input: Input,\n TouchAction: TouchAction,\n\n TouchInput: TouchInput,\n MouseInput: MouseInput,\n PointerEventInput: PointerEventInput,\n TouchMouseInput: TouchMouseInput,\n SingleTouchInput: SingleTouchInput,\n\n Recognizer: Recognizer,\n AttrRecognizer: AttrRecognizer,\n Tap: TapRecognizer,\n Pan: PanRecognizer,\n Swipe: SwipeRecognizer,\n Pinch: PinchRecognizer,\n Rotate: RotateRecognizer,\n Press: PressRecognizer,\n\n on: addEventListeners,\n off: removeEventListeners,\n each: each,\n merge: merge,\n extend: extend,\n assign: assign,\n inherit: inherit,\n bindFn: bindFn,\n prefixed: prefixed\n});\n\n// this prevents errors when Hammer is loaded in the presence of an AMD\n// style loader but by script tag, not by the loader.\nvar freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line\nfreeGlobal.Hammer = Hammer;\n\nif (typeof define === 'function' && define.amd) {\n define(function() {\n return Hammer;\n });\n} else if (typeof module != 'undefined' && module.exports) {\n module.exports = Hammer;\n} else {\n window[exportName] = Hammer;\n}\n\n})(window, document, 'Hammer');\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || 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; };\n\nvar defaults = {\n tName: 't',\n i18nName: 'i18n',\n handleName: 'localize',\n selectorAttr: 'data-i18n',\n targetAttr: 'i18n-target',\n optionsAttr: 'i18n-options',\n useOptionsAttr: false,\n parseDefaultValueFromContent: true\n};\n\nfunction init(i18next, $) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n\n options = _extends({}, defaults, options);\n\n function parse(ele, key, opts) {\n if (key.length === 0) return;\n\n var attr = 'text';\n\n if (key.indexOf('[') === 0) {\n var parts = key.split(']');\n key = parts[1];\n attr = parts[0].substr(1, parts[0].length - 1);\n }\n\n if (key.indexOf(';') === key.length - 1) {\n key = key.substr(0, key.length - 2);\n }\n\n function extendDefault(o, val) {\n if (!options.parseDefaultValueFromContent) return o;\n return _extends({}, o, { defaultValue: val });\n }\n\n if (attr === 'html') {\n ele.html(i18next.t(key, extendDefault(opts, ele.html())));\n } else if (attr === 'text') {\n ele.text(i18next.t(key, extendDefault(opts, ele.text())));\n } else if (attr === 'prepend') {\n ele.prepend(i18next.t(key, extendDefault(opts, ele.html())));\n } else if (attr === 'append') {\n ele.append(i18next.t(key, extendDefault(opts, ele.html())));\n } else if (attr.indexOf('data-') === 0) {\n var dataAttr = attr.substr('data-'.length);\n var translated = i18next.t(key, extendDefault(opts, ele.data(dataAttr)));\n\n // we change into the data cache\n ele.data(dataAttr, translated);\n // we change into the dom\n ele.attr(attr, translated);\n } else {\n ele.attr(attr, i18next.t(key, extendDefault(opts, ele.attr(attr))));\n }\n }\n\n function localize(ele, opts) {\n var key = ele.attr(options.selectorAttr);\n if (!key && typeof key !== 'undefined' && key !== false) key = ele.text() || ele.val();\n if (!key) return;\n\n var target = ele,\n targetSelector = ele.data(options.targetAttr);\n\n if (targetSelector) target = ele.find(targetSelector) || ele;\n\n if (!opts && options.useOptionsAttr === true) opts = ele.data(options.optionsAttr);\n\n opts = opts || {};\n\n if (key.indexOf(';') >= 0) {\n var keys = key.split(';');\n\n $.each(keys, function (m, k) {\n // .trim(): Trim the comma-separated parameters on the data-i18n attribute.\n if (k !== '') parse(target, k.trim(), opts);\n });\n } else {\n parse(target, key, opts);\n }\n\n if (options.useOptionsAttr === true) {\n var clone = {};\n clone = _extends({ clone: clone }, opts);\n\n delete clone.lng;\n ele.data(options.optionsAttr, clone);\n }\n }\n\n function handle(opts) {\n return this.each(function () {\n // localize element itself\n localize($(this), opts);\n\n // localize children\n var elements = $(this).find('[' + options.selectorAttr + ']');\n elements.each(function () {\n localize($(this), opts);\n });\n });\n };\n\n // $.t $.i18n shortcut\n $[options.tName] = i18next.t.bind(i18next);\n $[options.i18nName] = i18next;\n\n // selector function $(mySelector).localize(opts);\n $.fn[options.handleName] = handle;\n}\n\nexports.default = {\n init: init\n};","module.exports = require('./dist/commonjs/index.js').default;\n","/*!\n * jQuery JavaScript Library v3.5.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2020-05-04T22:49Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n // Support: Chrome <=57, Firefox <=52\n // In some browsers, typeof returns \"function\" for HTML <object> elements\n // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n // We don't want to classify *any* DOM node as a function.\n return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n };\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.5.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\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\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( _i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.5\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2020-03-14\n */\n( function( window ) {\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ( {} ).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpushNative = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[ i ] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|\" +\n\t\t\"ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5]\n\t\t// or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" +\n\t\twhitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace +\n\t\t\"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\treturn nonHex ?\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\tnonHex :\n\n\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t// Support: IE <=11+\n\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t// surrogate pair\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" +\n\t\t\t\tch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( ( target[ j++ ] = els[ i++ ] ) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t( nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\" ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\tif ( newContext !== context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split( \"|\" ),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[ i ] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( ( cur = cur.nextSibling ) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn ( name === \"input\" || name === \"button\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem.namespaceURI,\n\t\tdocElem = ( elem.ownerDocument || elem ).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( preferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n\t// Safari 4 - 5 only, Opera <=11.6 - 12.x only\n\t// IE/Edge & older browsers don't support the :scope pseudo-class.\n\t// Support: Safari 6.0 only\n\t// Safari 6.0 supports :scope but it's an alias of :root there.\n\tsupport.scope = assert( function( el ) {\n\t\tdocElem.appendChild( el ).appendChild( document.createElement( \"div\" ) );\n\t\treturn typeof el.querySelectorAll !== \"undefined\" &&\n\t\t\t!el.querySelectorAll( \":scope fieldset div\" ).length;\n\t} );\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert( function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute( \"className\" );\n\t} );\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert( function( el ) {\n\t\tel.appendChild( document.createComment( \"\" ) );\n\t\treturn !el.getElementsByTagName( \"*\" ).length;\n\t} );\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[ \"ID\" ] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[ \"ID\" ] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\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\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[ \"TAG\" ] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[ \"CLASS\" ] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {\n\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert( function( el ) {\n\n\t\t\tvar input;\n\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll( \"[msallowcapture^='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"~=\" );\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t// around the issue.\n\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\tinput = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"name\", \"\" );\n\t\t\tel.appendChild( input );\n\t\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\t\trbuggyQSA.push( \":checked\" );\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t\t}\n\n\t\t\t// Support: Firefox <=3.6 - 5 only\n\t\t\t// Old Firefox doesn't throw on a badly-escaped identifier.\n\t\t\tel.querySelectorAll( \"\\\\\\f\" );\n\t\t\trbuggyQSA.push( \"[\\\\r\\\\n\\\\f]\" );\n\t\t} );\n\n\t\tassert( function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll( \"[name=d]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll( \":enabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: Opera 10 - 11 only\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll( \"*,:x\" );\n\t\t\trbuggyQSA.push( \",.*:\" );\n\t\t} );\n\t}\n\n\tif ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector ) ) ) ) {\n\n\t\tassert( function( el ) {\n\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t} );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( \"|\" ) );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t) );\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( ( b = b.parentNode ) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\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/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a == document || a.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b == document || b.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\treturn a == document ? -1 :\n\t\t\t\tb == document ? 1 :\n\t\t\t\t/* eslint-enable eqeqeq */\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[ i ] === bp[ i ] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[ i ], bp[ i ] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\tap[ i ] == preferredDoc ? -1 :\n\t\t\tbp[ i ] == preferredDoc ? 1 :\n\t\t\t/* eslint-enable eqeqeq */\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t// fragment in IE 9\n\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] ||\n\t\t\t\tmatch[ 5 ] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" ) );\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr[ \"CHILD\" ].test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace +\n\t\t\t\t\t\")\" + className + \"(\" + whitespace + \"|$)\" ) ) && classCache(\n\t\t\t\t\t\tclassName, function( elem ) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\t/* eslint-disable max-len */\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t\t/* eslint-enable max-len */\n\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\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\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\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} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\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\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\t\"has\": markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\t\"contains\": markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\t( !document.hasFocus || document.hasFocus() ) &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn ( nodeName === \"input\" && !!elem.checked ) ||\n\t\t\t\t( nodeName === \"option\" && !!elem.selected );\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[ \"empty\" ]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\t\"last\": createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\t\"eq\": createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\t\"even\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"odd\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"lt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"gt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos[ \"nth\" ] = Expr.pseudos[ \"eq\" ];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rcombinators.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrim, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\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\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] ||\n\t\t\t\t\t\t\t( outerCache[ elem.uniqueID ] = {} );\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = uniqueCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn 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}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts(\n\t\t\t\tselector || \"*\",\n\t\t\t\tcontext.nodeType ? [ context ] : context,\n\t\t\t\t[]\n\t\t\t),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\ttokens\n\t\t\t\t\t\t.slice( 0, i - 1 )\n\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[ \"TAG\" ]( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\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 ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache(\n\t\t\tselector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers )\n\t\t);\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find[ \"ID\" ]( token.matches[ 0 ]\n\t\t\t\t.replace( runescape, funescape ), context ) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[ \"needsContext\" ].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert( function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute( \"href\" ) === \"#\";\n} ) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert( function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n} ) ) {\n\taddHandle( \"value\", function( elem, _name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert( function( el ) {\n\treturn el.getAttribute( \"disabled\" ) == null;\n} ) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\t\tnull;\n\t\t}\n\t} );\n}\n\nreturn Sizzle;\n\n} )( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\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\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\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\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\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};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\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\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = \"<option></option>\";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"<select multiple='multiple'>\", \"</select>\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\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// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", returnTrue );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar notAsync, result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\treturn result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering the\n\t\t\t\t// native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\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\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px\";\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = parseInt( trStyle.height ) > 3;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t// .css('filter') (IE 9 only, #12537)\n\t// .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = (\n\t\t\t\t\tdataPriv.get( cur, \"events\" ) || Object.create( null )\n\t\t\t\t)[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\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\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\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\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\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\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script\n\t\t\tif ( !isSuccess && jQuery.inArray( \"script\", s.dataTypes ) > -1 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\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\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\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\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\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\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tif ( typeof props.top === \"number\" ) {\n\t\t\t\tprops.top += \"px\";\n\t\t\t}\n\t\t\tif ( typeof props.left === \"number\" ) {\n\t\t\t\tprops.left += \"px\";\n\t\t\t}\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t// documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( _i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t} );\n\n\n\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t\"\" :\n\t\t( text + \"\" ).replace( rtrim, \"\" );\n};\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n","'use strict';\n\nvar traverse = module.exports = function (schema, opts, cb) {\n // Legacy support for v0.3.1 and earlier.\n if (typeof opts == 'function') {\n cb = opts;\n opts = {};\n }\n\n cb = opts.cb || cb;\n var pre = (typeof cb == 'function') ? cb : cb.pre || function() {};\n var post = cb.post || function() {};\n\n _traverse(opts, pre, post, schema, '', schema);\n};\n\n\ntraverse.keywords = {\n additionalItems: true,\n items: true,\n contains: true,\n additionalProperties: true,\n propertyNames: true,\n not: true\n};\n\ntraverse.arrayKeywords = {\n items: true,\n allOf: true,\n anyOf: true,\n oneOf: true\n};\n\ntraverse.propsKeywords = {\n definitions: true,\n properties: true,\n patternProperties: true,\n dependencies: true\n};\n\ntraverse.skipKeywords = {\n default: true,\n enum: true,\n const: true,\n required: true,\n maximum: true,\n minimum: true,\n exclusiveMaximum: true,\n exclusiveMinimum: true,\n multipleOf: true,\n maxLength: true,\n minLength: true,\n pattern: true,\n format: true,\n maxItems: true,\n minItems: true,\n uniqueItems: true,\n maxProperties: true,\n minProperties: true\n};\n\n\nfunction _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {\n if (schema && typeof schema == 'object' && !Array.isArray(schema)) {\n pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n for (var key in schema) {\n var sch = schema[key];\n if (Array.isArray(sch)) {\n if (key in traverse.arrayKeywords) {\n for (var i=0; i<sch.length; i++)\n _traverse(opts, pre, post, sch[i], jsonPtr + '/' + key + '/' + i, rootSchema, jsonPtr, key, schema, i);\n }\n } else if (key in traverse.propsKeywords) {\n if (sch && typeof sch == 'object') {\n for (var prop in sch)\n _traverse(opts, pre, post, sch[prop], jsonPtr + '/' + key + '/' + escapeJsonPtr(prop), rootSchema, jsonPtr, key, schema, prop);\n }\n } else if (key in traverse.keywords || (opts.allKeys && !(key in traverse.skipKeywords))) {\n _traverse(opts, pre, post, sch, jsonPtr + '/' + key, rootSchema, jsonPtr, key, schema);\n }\n }\n post(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n }\n}\n\n\nfunction escapeJsonPtr(str) {\n return str.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n","'use strict';\n\n(function () {\n var ls = typeof window !== 'undefined' ? window.localStorage : null\n , ms = require('ms')\n , lzstring = require('lz-string');\n\n // Provide an in-memory fallback for\n // older browsers.\n if (!ls) {\n ls = {\n _data: {},\n setItem: function(id, val) {\n return this._data[id] = String(val);\n },\n getItem: function(id) {\n return this._data.hasOwnProperty(id) ? this._data[id] : undefined;\n },\n removeItem: function(id) {\n return delete this._data[id];\n },\n key: function (index) {\n for (var key in this_data) {\n if (!(index--)) {\n return key;\n }\n }\n },\n clear: function() {\n return this._data = {};\n }\n };\n }\n\n // Fastest utility functions for this case.\n // Faster than underscore and lodash.\n // Besides, do I even need them here?\n var utils = {\n each: function (arr, iteratee) {\n var l = arr.length;\n while (l--) iteratee(arr[l], l);\n },\n map : function (arr, iteratee) {\n var newArr = new Array(arr.length)\n , l = arr.length;\n while (l--) newArr[l] = iteratee(arr[l], l);\n return newArr;\n },\n filter: function (arr, iteratee) {\n var newArr = []\n , l = arr.length;\n while (l--) {\n if (iteratee(arr[l], l))\n newArr.push(arr[l]);\n }\n return newArr;\n }\n }\n\n var _keys, _config, _compressAll, _timeouts = {};\n\n var Locally = function (options) {\n // custom options\n options = options || {};\n _compressAll = options.compress;\n\n // load current localStorage state\n _config = ls.getItem('locally-config');\n\n // start anew if no config\n if (!_config) {\n _config = {};\n\n // reads localstorage and updates config\n _rebuildConfig();\n }\n else {\n var deconfig = lzstring.decompressFromUTF16(_config);\n\n try {\n _config = JSON.parse(deconfig || _config);\n } catch (e) {\n if (!!deconfig) {\n try {\n _config = JSON.parse(_config);\n } catch (e) {\n throw new Error('Locally: config is corrupted');\n }\n } else throw new Error('Locally: config is corrupted');\n }\n\n // reads localstorage and updates config\n _rebuildConfig();\n }\n\n _saveConfig();\n\n Object.defineProperty(this, 'length', {\n get: function () {\n return _keys.length;\n }\n });\n };\n\n Locally.prototype.set = function (key, value, options) {\n if (arguments.length < 2)\n throw new Error('Locally: no key or value given');\n\n options = options || {};\n\n if (typeof options !== 'object') {\n options = { ttl: options };\n }\n\n if (typeof options.ttl === 'string') {\n options.ttl = ms(options.ttl);\n }\n\n // Set TTL\n _config[key] = _config[key] || {};\n\n // Add to keys array\n if (_keys.indexOf(key) == -1) {\n _keys.push(key);\n }\n\n // Set TTL\n if (options.ttl && !isNaN(options.ttl)) {\n _clearTimeout(key);\n _setTimeout(key, options.ttl);\n } else if (_config[key].ttl) {\n _clearTimeout(key);\n }\n\n // LocalStorage saves and returns values as strings.\n // Type of values will be saved so that values will be\n // parsed to their original type.\n var res = _getType(value);\n\n value = res.value;\n _config[key].t = res.type;\n\n // compression\n if (options.compress || _compressAll) {\n _config[key].c = 1;\n value = lzstring.compressToUTF16(value.toString());\n }\n\n key = String(key);\n value = String(value);\n\n ls.setItem(key, value);\n _saveConfig();\n }\n\n Locally.prototype.get = function (key) {\n return Array.isArray(key) ? utils.map(key, function (item) { return _get(item); }.bind(this)) : _get(key);\n }\n\n Locally.prototype.keys = function (pattern) {\n // Return all keys\n if (!pattern || pattern == '*') return _keys.slice(0);\n\n // RegExp pattern to be queried\n if (!(pattern instanceof RegExp)) {\n pattern = new RegExp('.*' + pattern + '.*');\n }\n\n return utils.filter(_keys, function (key) {\n return pattern.test(key);\n });\n }\n\n Locally.prototype.remove = function (key) {\n if (typeof key === 'undefined')\n throw new Error('Locally: \\'remove\\' requires a key');\n\n if (Array.isArray(key)) {\n utils.each(key, _remove);\n } else {\n _remove(key);\n }\n }\n\n // callback gets 'value' and 'key' as parameters\n Locally.prototype.scan = function (key, fn) {\n return utils.each(this.keys(key), function (key) {\n fn(_get(key), key);\n });\n }\n\n Locally.prototype.ttl = function (key, returnString) {\n return _config[key] ?\n _config[key].ttl ?\n !returnString ?\n _config[key].ttl - Date.now()\n : ms(_config[key].ttl - Date.now())\n : -1\n : -2;\n }\n\n Locally.prototype.persist = function (key) {\n return _config[key] ? delete _config[key].ttl && _saveConfig() && _clearTimeout(key) : false;\n }\n\n Locally.prototype.expire = function (key, ttl) {\n return _config[key] ? !!(_config[key].ttl = Date.now() + ttl) && _saveConfig() : false;\n }\n\n Locally.prototype.clear = function () {\n ls.clear();\n\n _config = {};\n _keys = [];\n return _saveConfig();\n }\n\n Locally.prototype.key = function (index) {\n return _keys[index];\n }\n\n // Removes a value from localStorage\n function _remove(key) {\n var i = _keys.indexOf(key)\n if (i > -1) {\n ls.removeItem(key);\n _keys.splice(_keys.indexOf(key), 1);\n delete _config[key];\n }\n }\n\n // Saves config to localStorage\n function _saveConfig() {\n ls.setItem('locally-config', lzstring.compressToUTF16( JSON.stringify(_config)) );\n return true;\n }\n\n function _get(key) {\n // Return null if no key is given\n if (typeof key === 'undefined' || !_config[key]) return null;\n\n // Check for TTL\n // If TTL is exceeded delete data\n // and return null\n if (_config[key].ttl && _config[key].ttl < Date.now()) {\n delete _config[key];\n\n _saveConfig();\n _remove(key);\n\n return null;\n }\n\n var temp, value = _config[key].c ? lzstring.decompressFromUTF16( ls.getItem(key) ) : ls.getItem(key);\n\n // Return value in correct type\n switch (_config[key].t) {\n case 'o':\n try {\n value = JSON.parse(value);\n } catch (e) {}\n\n return value;\n break;\n\n case 'd':\n return new Date(parseInt(value, 10));\n break;\n\n case 'r':\n return new RegExp(value.substring(1, value.length - 1));\n break;\n\n case 'f':\n eval('temp = ' + value);\n return temp;\n break;\n\n case 'n':\n return Number(value);\n break;\n\n case 'b':\n return value == '1';\n break;\n\n case 's':\n default:\n if (value === 'null')\n return null;\n else if (value === 'undefined')\n return undefined;\n else return String(value);\n break;\n }\n }\n\n function _getType(value) {\n var type;\n\n switch (typeof value) {\n case 'object':\n // Keep Date objects as timestamps\n if (value instanceof Date) {\n value = value.getTime();\n type = 'd';\n }\n // Keep RegExp objects as strings\n else if (value instanceof RegExp) {\n value = value.toString();\n type = 'r';\n }\n // Otherwise keep them as JSON\n else {\n value = JSON.stringify(value);\n type = 'o';\n }\n break;\n\n case 'function':\n type = 'f';\n break;\n\n case 'number':\n type = 'n';\n break;\n\n case 'boolean':\n value = value ? 1 : 0;\n type = 'b';\n break;\n\n case 'string':\n default:\n type = 's';\n }\n\n return {\n value: value,\n type: type\n };\n }\n\n function _rebuildConfig() {\n var l = ls.length;\n _keys = new Array(l);\n\n // Cache localStorage keys for faster access\n while (l--) {\n _keys[l] = ls.key(l);\n _config[_keys[l]] = _config[_keys[l]] || {};\n\n // _compressAll is given and value is not\n // compressed then compress the value\n if (_compressAll && !_config[_keys[l]].c) {\n _config[_keys[l]].c = true;\n ls.setItem(_keys[l], lzstring.compressToUTF16( ls.getItem(_keys[l]) ));\n }\n // if the value is compressed and\n // compressAll is not given then decompress\n // current value.\n else if (!_compressAll && _config[_keys[l]].c) {\n delete _config[_keys[l]].c;\n ls.setItem(_keys[l], lzstring.decompressFromUTF16( ls.getItem(_keys[l]) ));\n }\n\n if (_config[_keys[l]].ttl) {\n _setTimeout(_keys[l], _config[_keys[l]].ttl - Date.now());\n }\n }\n\n // Exclude locally-config from _keys array\n if (_keys.indexOf('locally-config') > -1) {\n _keys.splice(_keys.indexOf('locally-config'), 1);\n }\n }\n\n function _setTimeout(key, ttl) {\n _config[key].ttl = Date.now() + ttl;\n _timeouts[key] = setTimeout(function () {\n _remove(key);\n }, ttl);\n }\n\n function _clearTimeout(key) {\n if (_keys.indexOf(key) > -1) {\n clearTimeout(_timeouts[key]);\n delete _timeouts[key];\n delete _config[key].ttl;\n return true;\n }\n else return false;\n }\n\n // CommonJS\n if (typeof exports === 'object') {\n module.exports.Store = Locally;\n }\n // AMD. Register as an anonymous module.\n if (typeof define === 'function' && define.amd) {\n define(function() {\n return {\n Store: Locally\n };\n });\n }\n // Browser global.\n if (typeof window === 'object') {\n window.Locally = {\n Store: Locally\n };\n }\n})();\n","// Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>\n// This work is free. You can redistribute it and/or modify it\n// under the terms of the WTFPL, Version 2\n// For more information see LICENSE.txt or http://www.wtfpl.net/\n//\n// For more information, the home page:\n// http://pieroxy.net/blog/pages/lz-string/testing.html\n//\n// LZ-based compression algorithm, version 1.4.5\nvar LZString = (function() {\n\n// private property\nvar f = String.fromCharCode;\nvar keyStrBase64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nvar keyStrUriSafe = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$\";\nvar baseReverseDic = {};\n\nfunction getBaseValue(alphabet, character) {\n if (!baseReverseDic[alphabet]) {\n baseReverseDic[alphabet] = {};\n for (var i=0 ; i<alphabet.length ; i++) {\n baseReverseDic[alphabet][alphabet.charAt(i)] = i;\n }\n }\n return baseReverseDic[alphabet][character];\n}\n\nvar LZString = {\n compressToBase64 : function (input) {\n if (input == null) return \"\";\n var res = LZString._compress(input, 6, function(a){return keyStrBase64.charAt(a);});\n switch (res.length % 4) { // To produce valid Base64\n default: // When could this happen ?\n case 0 : return res;\n case 1 : return res+\"===\";\n case 2 : return res+\"==\";\n case 3 : return res+\"=\";\n }\n },\n\n decompressFromBase64 : function (input) {\n if (input == null) return \"\";\n if (input == \"\") return null;\n return LZString._decompress(input.length, 32, function(index) { return getBaseValue(keyStrBase64, input.charAt(index)); });\n },\n\n compressToUTF16 : function (input) {\n if (input == null) return \"\";\n return LZString._compress(input, 15, function(a){return f(a+32);}) + \" \";\n },\n\n decompressFromUTF16: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 16384, function(index) { return compressed.charCodeAt(index) - 32; });\n },\n\n //compress into uint8array (UCS-2 big endian format)\n compressToUint8Array: function (uncompressed) {\n var compressed = LZString.compress(uncompressed);\n var buf=new Uint8Array(compressed.length*2); // 2 bytes per character\n\n for (var i=0, TotalLen=compressed.length; i<TotalLen; i++) {\n var current_value = compressed.charCodeAt(i);\n buf[i*2] = current_value >>> 8;\n buf[i*2+1] = current_value % 256;\n }\n return buf;\n },\n\n //decompress from uint8array (UCS-2 big endian format)\n decompressFromUint8Array:function (compressed) {\n if (compressed===null || compressed===undefined){\n return LZString.decompress(compressed);\n } else {\n var buf=new Array(compressed.length/2); // 2 bytes per character\n for (var i=0, TotalLen=buf.length; i<TotalLen; i++) {\n buf[i]=compressed[i*2]*256+compressed[i*2+1];\n }\n\n var result = [];\n buf.forEach(function (c) {\n result.push(f(c));\n });\n return LZString.decompress(result.join(''));\n\n }\n\n },\n\n\n //compress into a string that is already URI encoded\n compressToEncodedURIComponent: function (input) {\n if (input == null) return \"\";\n return LZString._compress(input, 6, function(a){return keyStrUriSafe.charAt(a);});\n },\n\n //decompress from an output of compressToEncodedURIComponent\n decompressFromEncodedURIComponent:function (input) {\n if (input == null) return \"\";\n if (input == \"\") return null;\n input = input.replace(/ /g, \"+\");\n return LZString._decompress(input.length, 32, function(index) { return getBaseValue(keyStrUriSafe, input.charAt(index)); });\n },\n\n compress: function (uncompressed) {\n return LZString._compress(uncompressed, 16, function(a){return f(a);});\n },\n _compress: function (uncompressed, bitsPerChar, getCharFromInt) {\n if (uncompressed == null) return \"\";\n var i, value,\n context_dictionary= {},\n context_dictionaryToCreate= {},\n context_c=\"\",\n context_wc=\"\",\n context_w=\"\",\n context_enlargeIn= 2, // Compensate for the first entry which should not count\n context_dictSize= 3,\n context_numBits= 2,\n context_data=[],\n context_data_val=0,\n context_data_position=0,\n ii;\n\n for (ii = 0; ii < uncompressed.length; ii += 1) {\n context_c = uncompressed.charAt(ii);\n if (!Object.prototype.hasOwnProperty.call(context_dictionary,context_c)) {\n context_dictionary[context_c] = context_dictSize++;\n context_dictionaryToCreate[context_c] = true;\n }\n\n context_wc = context_w + context_c;\n if (Object.prototype.hasOwnProperty.call(context_dictionary,context_wc)) {\n context_w = context_wc;\n } else {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<8 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | value;\n if (context_data_position ==bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = 0;\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<16 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n // Add wc to the dictionary.\n context_dictionary[context_wc] = context_dictSize++;\n context_w = String(context_c);\n }\n }\n\n // Output the code for w.\n if (context_w !== \"\") {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<8 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | value;\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = 0;\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<16 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n }\n\n // Mark the end of the stream\n value = 2;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n // Flush the last char\n while (true) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data.push(getCharFromInt(context_data_val));\n break;\n }\n else context_data_position++;\n }\n return context_data.join('');\n },\n\n decompress: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 32768, function(index) { return compressed.charCodeAt(index); });\n },\n\n _decompress: function (length, resetValue, getNextValue) {\n var dictionary = [],\n next,\n enlargeIn = 4,\n dictSize = 4,\n numBits = 3,\n entry = \"\",\n result = [],\n i,\n w,\n bits, resb, maxpower, power,\n c,\n data = {val:getNextValue(0), position:resetValue, index:1};\n\n for (i = 0; i < 3; i += 1) {\n dictionary[i] = i;\n }\n\n bits = 0;\n maxpower = Math.pow(2,2);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (next = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 2:\n return \"\";\n }\n dictionary[3] = c;\n w = c;\n result.push(c);\n while (true) {\n if (data.index > length) {\n return \"\";\n }\n\n bits = 0;\n maxpower = Math.pow(2,numBits);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (c = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 2:\n return result.join('');\n }\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n if (dictionary[c]) {\n entry = dictionary[c];\n } else {\n if (c === dictSize) {\n entry = w + w.charAt(0);\n } else {\n return null;\n }\n }\n result.push(entry);\n\n // Add w+entry[0] to the dictionary.\n dictionary[dictSize++] = w + entry.charAt(0);\n enlargeIn--;\n\n w = entry;\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n }\n }\n};\n return LZString;\n})();\n\nif (typeof define === 'function' && define.amd) {\n define(function () { return LZString; });\n} else if( typeof module !== 'undefined' && module != null ) {\n module.exports = LZString\n} else if( typeof angular !== 'undefined' && angular != null ) {\n angular.module('LZString', [])\n .factory('LZString', function () {\n return LZString;\n });\n}\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","/**\n * @module app/config\n */\n\nimport type {NetxThemeStyles} from '@netx/core-components/Theme/types';\n\nexport default {\n\tCSS_CUSTOM_PROPERTY_PREFIX: '--theme-',\n\tCSS_CUSTOM_PROPERTIES: {\n\t\t'light-primary': '#327FEF',\n\t\t'light-on-primary': '#ffffff',\n\n\t\t'light-secondary': '#327FEF',\n\t\t'light-on-secondary': '#ffffff',\n\n\t\t'dark-primary': '#327FEF',\n\t\t'dark-on-primary': '#eee',\n\n\t\t'dark-secondary': '#327FEF',\n\t\t'dark-on-secondary': '#eee',\n\t} as NetxThemeStyles,\n\tDEFAULT_THEME_MODE: 'light',\n\n\t/**\n\t * The standard date format that all API calls should return\n\t * WARNING: Not all dates have been corrected on the server\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tDATE_FORMAT: 'YYYY-MM-DD HH:mm:ss.SSS',\n\n\t// /**\n\t// * The DAM (server) version this client instance requires,\n\t// * specified in the format of 'semver' -- https://github.com/npm/node-semver\n\t// * @const\n\t// * @type {string}\n\t// * @default\n\t// */\n\t// REQUIRED_SERVER_VERSION: '>=8.12.x', // at least version 8.12\n\t/**\n\t * CSS id of application wrapper\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tCONTAINER_ID: 'wrapper',\n\t/**\n\t * CSS id of login container element\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tLOGIN_CONTAINER_ID: 'login',\n\t/**\n\t * CSS id of alert container element\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tALERT_CONTAINER_ID: 'alerts',\n\t/**\n\t * CSS id of gallery container element\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tGALLERY_CONTAINER_ID: 'gallery',\n\t/**\n\t * CSS id of tack container element\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tTACK_CONTAINER_ID: 'tack',\n\t/**\n\t * CSS id of header container element\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tHEADER_CONTAINER_ID: 'header',\n\t/**\n\t * CSS id of modal container element\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tMODAL_CONTAINER_ID: 'modal',\n\n\t/**\n\t * Interval used for polling in milliseconds\n\t * @const\n\t * @type {number}\n\t * @default\n\t */\n\tPOLL_INTERVAL: 5000,\n\t/**\n\t * Length of time passive alert will display before fade out\n\t * @const\n\t * @type {number}\n\t * @default\n\t */\n\tPASSIVE_ALERT_DELAY: 1000,\n};\n","import Config from 'netxcore@netx/core-app/config';\n\nObject.assign(Config, {\n\tCSS_CUSTOM_PROPERTY_PREFIX: '--mdc-theme-',\n\tPASSIVE_ALERT_DELAY: 2500,\n\tCONTACT_EMAIL: ['support@netx.net'],\n});\n\nexport default Config;\n","// MODULE CONSTANTS\n/////////////////////////\n// Module \"constants\" can be overridden using config.js\n\nexport default {\n\t/**\n\t * items per server fetch in paged assetListViews.\n\t * @const\n\t * @type {number}\n\t * @default\n\t */\n\tCHUNK_SIZE: 40,\n\n\t/**\n\t * max number of items displayed per page in an assetListView; max length of a Netx.Collections.MiniAssets\n\t * @const\n\t * @type {number}\n\t * @default\n\t */\n\tPAGE_SIZE: 200,\n\n\t/**\n\t * Display asset collection thumbnails as equal height images in equal height rows\n\t * @const\n\t * @type {boolean}\n\t * @defaul\n\t */\n\tEQUAL_GRID: true,\n\n\t/**\n\t * AssetListType options\n\t * @const\n\t * @type {array}\n\t * @defaul\n\t */\n\tLIST_TYPE: ['card', 'curator', 'grid', 'list'],\n\n\t/**\n\t * If enabled all asset list views will be managed by Netx.Views.AssetListViewTypeManager epending on the current LIST_TYPE selected\n\t * @const\n\t * @type {boolean}\n\t * @defaul\n\t */\n\tLIST_TYPES_ENABLED: false,\n\n\t/**\n\t * default asset list type if user has no preference stored:\n\t * @const\n\t * @type {array}\n\t * @defaul\n\t */\n\tLIST_TYPE_DEFAULT: 'grid',\n\n\t/**\n\t * id of the DOM element this module installs in\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tASSETS_CONTAINER_ID: 'assets',\n\n\t/**\n\t * id of the DOM element the assetDetailView installs in\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tDETAILS_CONTAINER_ID: 'asset-details',\n\n\t/**\n\t * id of the DOM element the assetVersionsView installs in\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tVERSIONS_CONTAINER_ID: 'asset-versions',\n\n\t/**\n\t * id of the DOM element the assetZoomView installs in\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tZOOM_CONTAINER_ID: 'zoom',\n\n\t/**\n\t * id of the zoom canvas inside the assetZoomView\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tZOOM_CANVAS_ID: 'zoom-canvas',\n\n\t/**\n\t * how many pixels we pan & zoom by, per click.\n\t * @const\n\t * @type {number}\n\t * @default\n\t */\n\tZOOM_SCALE: 20,\n\n\t/**\n\t * How much we zoom on load\n\t * @const\n\t * @type {Number}\n\t * @default\n\t */\n\tZOOM_TOLERANCE: 0.8,\n\n\t/**\n\t * id of the DOM element the document viewer installs in\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tDOCVIEW_CONTAINER_ID: 'docview',\n\n\t/**\n\t * id of the DOM element the assetCheckinView installs in\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tCHECKIN_CONTAINER_ID: 'asset-checkin',\n\n\t/**\n\t * id of the file upload browse button in the assetCheckinView\n\t * @const {string}\n\t * @default\n\t */\n\tCHECKIN_BROWSE_BUTTON_ID: 'asset-checkin-browse',\n\n\t/**\n\t * id of the expiration asset list\n\t * @const {string}\n\t * @default\n\t */\n\tEXPIRATION_ASSET_LIST_ID: 'expiration-assets',\n\n\t/**\n\t * id of the expiration header\n\t * @const {string}\n\t * @default\n\t */\n\tEXPIRATION_HEADER_ID: 'expiration-header',\n\n\t/**\n\t * id the (non-modal) quick-edit panel (aka tag panel) installs in\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tTAGPANEL_CONTAINER_ID: 'quick-edit',\n\n\t/**\n\t * max number of assets to show in the Most Viewed Assets list\n\t * @const\n\t * @type {number}\n\t * @default\n\t */\n\tMOST_VIEWED_SIZE: 40,\n\n\t/**\n\t * ID of the upload button in assetViewsView\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tVIEW_UPLOAD_BUTTON_ID: 'asset-view-upload',\n\n\t/**\n\t * id of the dom element where assetRepurposeView is installed\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tREPURPOSE_CONTAINER_ID: 'asset-repurpose',\n\n\t/**\n\t * Array of the known asset detail tabs; disable a tab by removing it from this list.\n\t * @const\n\t * @type {array}\n\t * @default\n\t */\n\tDETAIL_TABS: [\n\t\t'overview',\n\t\t'preview',\n\t\t'fileinfo',\n\t\t'attributes',\n\t\t'attributeHistory',\n\t\t'views',\n\t\t'reviews',\n\t\t'links',\n\t\t'categories',\n\t\t'clips',\n\t\t'constituents_keyframes',\n\t\t'constituents_layers',\n\t\t'constituents_pages',\n\t\t'versions',\n\t\t'uasge',\n\t\t'index',\n\t\t'metadata',\n\t\t'permissions',\n\t\t'publicLinks',\n\t],\n\n\t/**\n\t * Default tab of assetDetailView to show upon load\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tDETAIL_TABS_DEFAULT: 'fileinfo',\n\n\t/**\n\t * max number of assets to show in the Recently Uploaded Assets list\n\t * @const\n\t * @type {number}\n\t * @default\n\t */\n\tRECENTLY_UPLOADED_SIZE: 40,\n\n\t/**\n\t * Should we initialize the extra uploader for asset reimportation?\n\t * @const\n\t * @type {boolean}\n\t * @default\n\t */\n\tREIMPORT_ENABLE: true,\n\n\t/**\n\t * Should we initialize the extra uploader for asset checkin?\n\t * @const\n\t * @type {boolean}\n\t * @default\n\t */\n\tCHECKIN_ENABLE: true,\n\n\t/**\n\t * Should we initialize asset repurposing?\n\t * @const\n\t * @type {boolean}\n\t * @default\n\t */\n\tREPURPOSE_ENABLE: true,\n\n\t/**\n\t * Should we download an asset after checking it out?\n\t * @const\n\t * @type {boolean}\n\t * @default\n\t */\n\tDOWNLOAD_ON_CHECKOUT: true,\n\n\t/**\n\t * Is the CartAssets class extended from the MiniAssets class (instead of the Assets class)?\n\t * @const\n\t * @type {boolean}\n\t * @default\n\t */\n\t// TODO: why is this in the asset controller instead of the cart controller?\n\tCART_ASSETS_MINI: true,\n\n\t/**\n\t * Is the SearchAssets class extended from the MiniAssets class (instead of the Assets class)?\n\t * @const\n\t * @type {boolean}\n\t * @default\n\t */\n\t// TODO: ditto previous question.\n\tSEARCH_ASSETS_MINI: true,\n\n\t/**\n\t * Should we allow drag actions on assets?\n\t * @const\n\t * @type {boolean}\n\t * @default\n\t */\n\tDRAGGABLE: true,\n\n\t/**\n\t * Should assets re-fetch themselves immediately after saving to the DAM?\n\t * @const\n\t * @type {boolean}\n\t * @default\n\t */\n\tFETCH_ON_SAVE: true,\n\n\t/**\n\t * Should asset collections, by default, fetch via the Faceted Search interface instead of the standard Search interface?\n\t * @const\n\t * @type {boolean}\n\t * @default\n\t */\n\tUSE_FACETED_SEARCH: false,\n};\n","import Config from 'netxcore@netx/core-asset/config';\nimport {isMobile} from '@netx/core/lib/underscore-netx';\n\nObject.assign(Config, {\n\tDETAIL_TABS: [\n\t\t'overview',\n\t\t'fileinfo',\n\t\t'attributes',\n\t\t'attributeHistory',\n\t\t'metadata',\n\t\t'categories',\n\t\t'versions',\n\t\t'reviews',\n\t\t'views',\n\t\t'links',\n\t\t'clips',\n\t\t'constituents_keyframes',\n\t\t'constituents_layers',\n\t\t'constituents_pages',\n\t\t'permissions',\n\t\t'usage',\n\t\t'index',\n\t],\n\tPAGE_SIZE: 200,\n\tCHUNK_SIZE: 40,\n\tEQUAL_GRID: true, // default false\n\tLIST_TYPE: isMobile()\n\t\t? ['card', 'grid']\n\t\t: ['card', 'curator', 'grid', 'list'],\n\tLIST_TYPE_DEFAULT: isMobile() ? 'grid' : 'card',\n\t// Our theme utilizes asset list layout types\n\tLIST_TYPES_ENABLED: true,\n\tCATEGORY_ASSETS_MINI: false,\n\tSEARCH_ASSETS_MINI: false,\n\tCART_ASSETS_MINI: false,\n\t/*\n\t * to allow users to define new tags to an attribute of type 'tags', add the attribute's name to tags.flexbile[], like so:\n\t */\n\ttags: {\n\t\tflexible: ['add searchable tags'],\n\t},\n\tZOOM_CONTAINER_ID: 'modal',\n});\n\nexport default Config;\n","import {publicProperties} from '@netx/core-app/collections/singleton/publicProperties';\n\nexport const getPublicProperty = <Bool extends boolean = false>(\n\tkey: string,\n\tasBoolean?: Bool,\n) => {\n\treturn (\n\t\tasBoolean ? publicProperties.isTrue(key) : publicProperties.getProperty(key)\n\t) as Bool extends true ? boolean : string | undefined;\n};\n\nexport default getPublicProperty;\n","/**\n * Collection of generic label values\n * @class\n */\nimport Base from '@netx/core/lib/netx-collection';\nimport Model from '../models/labelValue';\n\nclass LabelValues extends Base {\n\t/** @override */\n\tconstructor(models, opts = {}) {\n\t\topts.model = opts.model || Model;\n\t\tsuper(models, opts);\n\t}\n\n\t/**\n\t * getProperty returns a value by label, unpacking the LVB.\n\t * @method\n\t * @param {string} label Full name of a property\n\t * @return string or undefined\n\t */\n\tgetProperty(label) {\n\t\tconst lvb = this.findWhere({label: label});\n\t\treturn lvb ? lvb.get('value') : undefined;\n\t}\n\n\t/**\n\t *\n\t * To test the boolean truth of properties that can contain the string \"true\" or \"false\",\n\t * we sometimes want to return true only if the string is \"true\" ... any other string == false.\n\t * Other times, we want the opposite. And you never know when someone might have made a typo,\n\t * since it's a text field ... isTrue and isFalse simplify that.\n\t * @param string label full name of a property\n\t * @returns boolean\n\t *\n\t */\n\tisTrue(label) {\n\t\treturn this.getProperty(label) === 'true';\n\t}\n\tisFalse(label) {\n\t\treturn this.getProperty(label) === 'false';\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'LabelValues';\n\t}\n}\n\nexport default LabelValues;\n","/**\n * @class\n */\nimport Base from '@netx/core/lib/netx-collection';\nimport Model from '../models/batchJob';\n\nclass BatchJobs extends Base {\n\t/** @override */\n\tconstructor(models, opts = {}) {\n\t\topts.model = opts.model || Model;\n\t\tsuper(models, opts);\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'BatchJobs';\n\t}\n}\n\nexport default BatchJobs;\n","import BatchJobsCollection from '../batchJobs';\n\nexport const batchJobs = new BatchJobsCollection([]);\n\nexport default batchJobs;\n\nimport {setGlobal} from '@netx/core-next/utils/setGlobal';\n// TODO: this is still needed as a global due to netx model inception in netx model and batch jobs\n// if (process.env.NODE_ENV !== 'production') {\nsetGlobal({batchJobs});\n//}\n","/**\n * Collection of public properties that are fetched prior to the app initializing.\n * These properties are fetched using the webservice method getPublicProperties()\n * @class\n */\nimport Base from './labelValues';\nimport Model from '../models/labelValue';\n\nclass PublicProperties extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @property {object} methods - Collection RPC methods\n\t * @property {method} methods.read - Fetch public properties\n\t */\n\tget methods() {\n\t\treturn {\n\t\t\tread: ['getPublicProperties'],\n\t\t};\n\t}\n\n\t/** @override */\n\tconstructor(models, opts = {}) {\n\t\topts.model = opts.model || Model;\n\t\tsuper(models, opts);\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'PublicProperties';\n\t}\n}\n\nexport default PublicProperties;\n","import PublicPropertiesCollection from '@netx/core-app/collections/publicProperties';\n\nexport const publicProperties = new PublicPropertiesCollection();\n\nexport default publicProperties;\n","/**\n * @class\n */\nimport Base from '@netx/core/lib/netx-model';\n\nclass Socket extends Base {\n\t/**\n\t * @property {object} defaults - Model defaults\n\t * @property {boolean} defaults.autoConnect - Auto connect to websockets at initialize\n\t * @property {boolean} defaults.autoReconnect - Auto reconnect when disconnected by server\n\t * @property {boolean} defaults.clientDisconnected - We opted to disconnect from websockets\n\t * @property {boolean} defaults.connected - Connected to websockets\n\t * @property {array} defaults.connectionDurations - Connection duration store\n\t * @property {number} defaults.connectionRetries - Current websocket connection retries (will reset after sustaining a successful connection for at least 5s)\n\t * @property {number} defaults.lastConnectTime - The last time we achieved a websocket connection (ms)\n\t * @property {number} defaults.lastDisconnectTime - The last time we were disconnected from websockets (ms)\n\t * @property {number} defaults.maxConnectionRetries - Max times we will try to reconnect without acheiving a successful connection fot at least 5s\n\t * @property {number} defaults.reconnectCount - The number of times the websocket reconnected through the life of our session\n\t * @property {array} defaults.subscriptions - Websocket subscriptions\n\t * @property {string} defaults.url - Websocket endpoint\n\t */\n\tget defaults() {\n\t\treturn {\n\t\t\tautoConnect: true,\n\t\t\tautoReconnect: true,\n\t\t\tclientDisconnected: false,\n\t\t\tconnected: false,\n\t\t\tconnectionDurations: [],\n\t\t\tconnectionRetries: 0,\n\t\t\tdisconnectEvents: [],\n\t\t\tlastConnectTime: 0,\n\t\t\tlastDisconnectTime: 0,\n\t\t\tmaxConnectionRetries: 5,\n\t\t\treconnectCount: 0,\n\t\t\tsubscriptions: [],\n\t\t\turl: '',\n\t\t};\n\t}\n\n\t/**\n\t * @override\n\t * @param {object} attrs Model attributes\n\t * @param {object} opts Request options\n\t */\n\tconstructor(attrs, opts) {\n\t\tsuper(attrs, opts);\n\n\t\t// Debounced/throttled methods\n\t\tthis.reconnect = _.throttle(this.reconnect, 5000, true);\n\n\t\t// Hey, listen!\n\t\tthis.listenTo(\n\t\t\tthis,\n\t\t\t'change:connectionRetries',\n\t\t\t(model, connectionRetries) => {\n\t\t\t\tif (\n\t\t\t\t\t!this.get('connected') &&\n\t\t\t\t\tconnectionRetries >= this.get('maxConnectionRetries')\n\t\t\t\t) {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t'There is an issue connecting to websockets. Max retries reached.',\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\t\t// Auto connect\n\t\t// !Netx.session.get('token') && this.get('autoConnect') && this.connect();\n\t}\n\n\t/**\n\t * @method\n\t */\n\tconnect() {\n\t\tthis.whenConnected && this.whenConnected.reject();\n\n\t\tconst whenConnected = (this.whenConnected = new $.Deferred());\n\n\t\t// DEBUG\n\t\tif (this.fail) {\n\t\t\t_.delay(() => {\n\t\t\t\tthis.disconnected();\n\t\t\t}, 2);\n\t\t\treturn this.whenConnected.resolve();\n\t\t}\n\n\t\tconst socket = (this.socket = new WebSocket(this.get('url')));\n\t\t// Can check the event code here as well if need be\n\t\tsocket.onclose = _.bind(this.disconnected, this);\n\t\tsocket.onmessage = _.bind(this.message, this);\n\n\t\t// When connected\n\t\tsocket.onopen = () => {\n\t\t\tthis.set({\n\t\t\t\tclientDisconnected: false,\n\t\t\t\tconnected: true,\n\t\t\t\tlastConnectTime: _.now(),\n\t\t\t});\n\n\t\t\t// Let's try and maintain a connection for at least 5s\n\t\t\t// before resetting max retries\n\t\t\tthis.resetMaxConnectRetries = setTimeout(() => {\n\t\t\t\tthis.set('connectionRetries', 0);\n\t\t\t}, 5000);\n\n\t\t\twhenConnected.resolve();\n\t\t};\n\n\t\treturn this.whenConnected;\n\t}\n\n\t/**\n\t * @method\n\t */\n\tdisconnect() {\n\t\tif (!this.get('connected')) return this;\n\n\t\tthis.set('clientDisconnected', true);\n\t\t// https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent#Status_codes\n\t\tthis.socket.close(1000);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * @method\n\t * @return {number} Current connection lifetime in ms\n\t */\n\tgetConnectionLifetime() {\n\t\treturn this.get('connected') ? _.now() - this.get('lastConnectTime') : 0;\n\t}\n\n\t/**\n\t * @method\n\t * @param {event} e `close` event\n\t */\n\tdisconnected(e) {\n\t\t// Reset\n\t\tthis.resetMaxConnectRetries && clearTimeout(this.resetMaxConnectRetries);\n\n\t\tconst connectionDurations = this.get('connectionDurations');\n\t\tconst disconnectEvents = this.get('disconnectEvents');\n\n\t\tif (this.get('connected')) {\n\t\t\tthis.set({\n\t\t\t\tconnected: false,\n\t\t\t\tconnectionDurations: connectionDurations.concat([\n\t\t\t\t\t_.now() - this.get('lastConnectTime'),\n\t\t\t\t]),\n\t\t\t\tdisconnectEvents: disconnectEvents.concat([e]),\n\t\t\t\tlastDisconnectTime: _.now(),\n\t\t\t});\n\t\t}\n\n\t\t// We did not ask for this disconnect, assume something went wrong and reconnect\n\t\t// Typically caused by a `Broken pipe` on the server - this should be resolved when\n\t\t// websockets are rebuilt in 9.0\n\t\tif (!this.get('clientDisconnected') && this.get('autoReconnect')) {\n\t\t\tconsole.warn('client did not opt to disconnect');\n\t\t\tthis.reconnect();\n\t\t} else {\n\t\t\tthis.socket.onmessage = null;\n\t\t\tthis.socket.onclose = null;\n\t\t\tthis.off().set({\n\t\t\t\tconnectionRetries: 0,\n\t\t\t\tsubscriptions: [],\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * @method\n\t * @param {event} e `message` event\n\t */\n\tmessage(e) {\n\t\tconst data = JSON.parse(e.data);\n\n\t\tdata.roomName\n\t\t\t? this.trigger(\n\t\t\t\t\t'socket:message:' + data.roomName,\n\t\t\t\t\tJSON.parse(data.message),\n\t\t\t )\n\t\t\t: this.trigger('socket:message', data);\n\t}\n\n\t/**\n\t * @method\n\t */\n\treconnect() {\n\t\tconst connectionRetries = this.get('connectionRetries');\n\t\tconst maxConnectionRetries = this.get('maxConnectionRetries');\n\n\t\tif (connectionRetries < maxConnectionRetries) {\n\t\t\tconsole.warn(\n\t\t\t\t'attempting to reconnect to websocket (' +\n\t\t\t\t\t(connectionRetries + 1) +\n\t\t\t\t\t'/' +\n\t\t\t\t\tmaxConnectionRetries +\n\t\t\t\t\t')',\n\t\t\t);\n\n\t\t\tvar reconnectCount = this.get('reconnectCount');\n\t\t\tthis.set({\n\t\t\t\tconnectionRetries: connectionRetries + 1,\n\t\t\t\treconnectCount: reconnectCount + 1,\n\t\t\t});\n\n\t\t\tthis.connect().then(() => {\n\t\t\t\t// Re-subscribe when connected\n\t\t\t\tthis.overrideSubscriptionCheck = true;\n\t\t\t\t_.each(this.get('subscriptions'), this.subscribe, this);\n\t\t\t\tthis.overrideSubscriptionCheck = false;\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} message Message\n\t */\n\tsend(message) {\n\t\tthis.when(this.get('connected') ? true : this.whenConnected).then(() => {\n\t\t\tthis.socket.send(JSON.stringify(message));\n\t\t});\n\t\treturn this;\n\t}\n\n\t/**\n\t * @method\n\t * @param {string} roomName Room name\n\t */\n\tsubscribe(roomName) {\n\t\tconst subscriptions = this.get('subscriptions');\n\t\tconst inSubscriptions = _.contains(subscriptions, roomName);\n\n\t\tif (\n\t\t\t!roomName ||\n\t\t\t!this.get('connected') ||\n\t\t\t(!this.overrideSubscriptionCheck && inSubscriptions)\n\t\t)\n\t\t\treturn this;\n\n\t\t!inSubscriptions &&\n\t\t\tthis.set('subscriptions', subscriptions.concat([roomName]));\n\n\t\treturn this.send({\n\t\t\tmessage: '',\n\t\t\taction: 6,\n\t\t\troomName: roomName,\n\t\t});\n\t}\n\n\t/**\n\t * @method\n\t * @param {string} roomName Room name\n\t */\n\tunsubscribe(roomName) {\n\t\tconst subscriptions = this.get('subscriptions');\n\n\t\tif (\n\t\t\t!this.get('connected') ||\n\t\t\t(roomName && !_.contains(subscriptions, roomName))\n\t\t)\n\t\t\treturn this;\n\n\t\tthis.set(\n\t\t\t'subscriptions',\n\t\t\troomName ? _.without(subscriptions, roomName) : [],\n\t\t);\n\n\t\treturn this.send({\n\t\t\tmessage: '',\n\t\t\taction: 7,\n\t\t\troomName: roomName,\n\t\t});\n\t}\n\n\t// DEBUG\n\t/** @method */\n\tsimulateFail() {\n\t\tthis.fail = true;\n\t\tthis.disconnected();\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'Socket';\n\t}\n}\n\nexport default Socket;\n","import window from 'global/window';\nimport SocketModel from '../../models/socket';\n\nconst protocol = window.location.toString().split(window.location.host)[0];\nconst websocketProtocol = protocol.replace(/http/, 'ws');\nexport const legacyWebsocketUrl = `${websocketProtocol}${window.location.host}/websocket`;\n\nexport const legacyWebsocket = new SocketModel({url: legacyWebsocketUrl}, {});\n\nexport default legacyWebsocket;\n\nimport {setGlobal} from '@netx/core-next/utils/setGlobal';\n// still needed due to the circular dependency of the netx-model and the websocket model\n// which is only extending netx-model to get events - can easily be turned into a mobx store or similar\n// and the circular dependency goes away.\n// the only reason i am not tackling that now is that we will evenetually have legit websockets and use\n// socket.io - so the whole thing changes and this troublesome file is deleted\n// if (process.env.NODE_ENV !== 'production') {\nsetGlobal({websocket: legacyWebsocket});\n// }\n","/**\n * BatchJob Model\n * @class\n */\nimport Netx from '@netx/core/bootstrap';\nimport Base from '@netx/core/lib/netx-model';\nimport customConfig from '../config';\n\nclass BatchJob extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/** @type {string} */\n\tget idAttribute() {\n\t\treturn 'uuid';\n\t}\n\n\t/**\n\t * @property {object} defaults - The default attribute values\n\t * @property {string} defaults.completeUrl - The default batch job complete URL\n\t * @property {string} defaults.details - The default batch job details\n\t * @property {string} defaults.estimatedTime - The defualt batch job estimated time\n\t * @property {number} defaults.increment - The defualt batch job increment\n\t * @property {string} defaults.jobTitle - The defualt batch job title\n\t * @property {number} defaults.percentComplete - The defualt batch job percent complete\n\t * @property {number} defaults.runningTime - The defualt batch job running time\n\t * @property {string} defaults.runningTimeLabel - The defualt batch job running time label\n\t * @property {number} defaults.secondsToReload - The defualt batch job seconds to reload\n\t * @property {number} defaults.startTime - The defualt batch job start time\n\t * @property {object} defaults.shareData - The defualt batch job share data\n\t * @property {boolean} defaults.shareData.appendMetadata - The defualt batch job share data append metadata\n\t * @property {string} defaults.shareData.errorCatasrophe - The defualt batch job share data error catastrophe\n\t * @property {string} defaults.shareData.errorMessage - The defualt batch job share data error message\n\t * @property {number} defaults.shareData.fileSize - The defualt batch job share data file size\n\t * @property {number} defaults.shareData.hoursToLive - The defualt batch job share data hours to live\n\t * @property {array} defaults.shareData.messages - The defualt batch job share data messages\n\t * @property {string} defaults.shareData.name - The defualt batch job share data name\n\t * @property {string} defaults.shareData.path - The defualt batch job share data path\n\t * @property {string} defaults.shareData.realPath - The defualt batch job share data real path\n\t * @property {string} defaults.shareData.size - The defualt batch job share data size\n\t * @property {string} defaults.shareData.sizeUncompressed - The defualt batch job share data size uncompressed\n\t * @property {string} defaults.shareData.warningMessage - The defualt batch job share data warning message\n\t */\n\tget defaults() {\n\t\treturn {\n\t\t\tcompleteUrl: '',\n\t\t\tdetails: '',\n\t\t\testimatedTime: '',\n\t\t\tincrement: 0,\n\t\t\tjobTitle: '',\n\t\t\tpercentComplete: 0,\n\t\t\trunningTime: 0,\n\t\t\trunningTimeLabel: '',\n\t\t\tsecondsToReload: 0,\n\t\t\tstartTime: 0,\n\t\t\tshareData: {\n\t\t\t\tappendMetadata: false,\n\t\t\t\terrorCatastrophe: '',\n\t\t\t\terrorMessage: '',\n\t\t\t\tfileSize: 0,\n\t\t\t\thoursToLive: 0,\n\t\t\t\tmessages: [],\n\t\t\t\tname: '',\n\t\t\t\tpath: '',\n\t\t\t\trealPath: '',\n\t\t\t\tsize: '', // string\n\t\t\t\tsizeUncompressed: '', // string\n\t\t\t\twarningMessage: '',\n\t\t\t},\n\n\t\t\t// Client attributes\n\t\t\targs: [],\n\t\t\thasResult: false,\n\t\t};\n\t}\n\n\t/** @type {Array} */\n\tget clientAttrs() {\n\t\treturn ['args', 'hasResult'];\n\t}\n\n\t/**\n\t * @memberof BatchJob\n\t * @property {object} methods - Model RPC methods\n\t * @property {method} methods.read - Fetch progress report\n\t *\n\t * @property {method} methods.getShare - Fetch share bean\n\t */\n\tget methods() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tread(opts) {\n\t\t\t\t// If the uuid isn't set, or is zero or undefined or whatever,\n\t\t\t\t// pass a 0 here (instead of zero or undefined or whatever.)\n\t\t\t\treturn ['getProgressReport', this.id ? this.id : 0];\n\t\t\t},\n\t\t\t// Helpers\n\t\t\tgetShare: ['getShareBean'],\n\t\t};\n\t}\n\n\t/**\n\t * @property {object} parsers - The parsers available on this model\n\t * @property {function} parsers.getShare - Parses result of fetched share bean\n\t */\n\tget parsers() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {object} data Share data\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tgetShare(data, opts) {\n\t\t\t\tthis.set('shareData', data, opts);\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * @override\n\t * @param {object} attrs Model attributes\n\t * @param {object} opts Model options\n\t */\n\tconstructor(attrs, opts = {}) {\n\t\tsuper(attrs, opts);\n\n\t\t/**\n\t\t * Promise for job completion\n\t\t * @memberof module:app/models/batchJob\n\t\t * @alias completed\n\t\t * @type {object}\n\t\t */\n\t\tthis.completed = new $.Deferred();\n\n\t\t/**\n\t\t * @memberof module:app/models/batchJob\n\t\t * @alias eventStrs\n\t\t * @type {object}\n\t\t */\n\t\tthis.eventStrs = opts.eventStrs || {};\n\n\t\tthis.pollInterval = opts.pollInterval;\n\n\t\t// Hey, listen!\n\t\tthis.listenTo(this, 'complete', (model) => {\n\t\t\tthis.completed.resolveWith(this, [this]);\n\t\t\tthis.destroy();\n\t\t}).listenTo(this, 'error', (model, error) => {\n\t\t\tthis.completed.rejectWith(this, [error, this]);\n\t\t});\n\n\t\t// Wait until initialize is complete\n\t\t_.defer(this.trackJob.bind(this));\n\t}\n\n\t/**\n\t * Add another event str to notify on batch job complete\n\t * @method\n\t * @param {string} eventStr Event string\n\t * @param {array} args Event arguments\n\t */\n\taddEventStr(eventStr, args) {\n\t\tthis.eventStrs[eventStr] = args || [];\n\t}\n\n\t/**\n\t * We do not have an RPC method - just want cleanup\n\t * @override\n\t * @param {object} opts Request options\n\t */\n\tdestroy(opts) {\n\t\tthis.stopListening();\n\t\tthis.trigger('destroy', this, this.collection, opts);\n\t}\n\n\t/**\n\t * @method\n\t * @fires module:app#app:pollBatchJob:messages\n\t * @fires module:share#share:simpleDownload\n\t */\n\ttrackJob() {\n\t\tthis.pollUntil(\n\t\t\t(status) => {\n\t\t\t\tthis.triggerProgress(this.get('percentComplete'));\n\t\t\t\t// this.trigger('progress', this, this.get('percentComplete'));\n\t\t\t\treturn !status || this.get('percentComplete') >= 100;\n\t\t\t},\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tthis.pollInterval || customConfig.POLL_INTERVAL,\n\t\t).then(() => {\n\t\t\t// Expecting share data results\n\t\t\tif (this.get('hasResult')) {\n\t\t\t\treturn this.getShare().then((shareData) => {\n\t\t\t\t\tshareData = shareData || {};\n\n\t\t\t\t\t// Completed\n\t\t\t\t\tthis.triggerComplete([shareData]);\n\n\t\t\t\t\t// if the sharedata specifies a file, download that.\n\t\t\t\t\tif (shareData.path && shareData.path.length) {\n\t\t\t\t\t\tdispatcher.trigger('share:simpleDownload', shareData.path);\n\t\t\t\t\t}\n\t\t\t\t}, this.triggerError);\n\t\t\t}\n\n\t\t\t// Completed\n\t\t\tthis.triggerComplete();\n\t\t}, this.triggerError.bind(this));\n\t}\n\n\t/**\n\t * @method\n\t * @param {string} error Error\n\t */\n\ttriggerError(error) {\n\t\tconst args = this.get('args') || [];\n\t\t_.each(this.eventStrs, (eventArgs, eventStr) => {\n\t\t\teventArgs = eventArgs || args;\n\t\t\tdispatcher.trigger.apply(\n\t\t\t\tdispatcher,\n\t\t\t\t[eventStr + ':error', error].concat(eventArgs),\n\t\t\t);\n\t\t});\n\n\t\tconst errorMessage = error?.message?.includes('tiles generation failed')\n\t\t\t? i18n.t('i18n.assetZoomTilesUnavailable')\n\t\t\t: error;\n\t\tthis.trigger.apply(this, ['error', this, errorMessage].concat(args));\n\t\tthis.eventStrs = {};\n\t}\n\n\t/**\n\t * @method\n\t * @param {array} additionalArgs Additional arguments\n\t */\n\ttriggerComplete(additionalArgs) {\n\t\tadditionalArgs = additionalArgs || [];\n\t\tconst args = additionalArgs.concat(this.get('args') || []);\n\t\t_.each(this.eventStrs, (eventArgs, eventStr) => {\n\t\t\teventArgs = eventArgs || args;\n\t\t\t// TODO: fix all places using `succeeded` and use `complete`\n\t\t\tdispatcher.trigger.apply(\n\t\t\t\tdispatcher,\n\t\t\t\t[eventStr + ':succeeded'].concat(eventArgs.concat(this)),\n\t\t\t);\n\t\t});\n\t\tthis.trigger.apply(this, ['complete', this].concat(args));\n\t\tthis.eventStrs = {};\n\t}\n\n\ttriggerProgress(progress, additionalArgs) {\n\t\tadditionalArgs = additionalArgs || [];\n\t\tconst args = additionalArgs.concat(this.get('args') || []);\n\t\t_.each(this.eventStrs, (eventArgs, eventStr) => {\n\t\t\teventArgs = eventArgs || args;\n\t\t\tdispatcher.trigger.apply(\n\t\t\t\tdispatcher,\n\t\t\t\t[eventStr + ':progress', progress].concat(eventArgs.concat(this)),\n\t\t\t);\n\t\t});\n\t\tthis.trigger.apply(this, ['progress', this, progress].concat(args));\n\t}\n\n\t/**\n\t * @method\n\t * @return {boolean} Rejected\n\t */\n\t// note: this is currently only used for the checkin error of identical files\n\tisRejected() {\n\t\t// the uploaded file is identical to the current asset version\n\t\tconst messageCode = 2103,\n\t\t\tprogressMessages = this.get('progressMessages') || [],\n\t\t\tmessageArr = progressMessages.filter(\n\t\t\t\t(message) => message.code === messageCode,\n\t\t\t);\n\t\treturn messageArr.length > 0;\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'BatchJob';\n\t}\n}\n\nexport default BatchJob;\n","/**\n * LabelValue model, utilized by every collection whose fetch method returns an array of LabelValueBeans\n * @class\n */\nimport Base from '@netx/core/lib/netx-model';\n\nclass LabelValue extends Base {\n\t/**\n\t * Set the attribute backbone will look to as the id\n\t * @type {string}\n\t */\n\tget idAttribute() {\n\t\treturn 'label';\n\t}\n\t/**\n\t * @property {object} defaults - The default attribute values\n\t * @property {string} defaults.label - The default label\n\t * @property {string} defaults.value - The default value\n\t */\n\tget defaults() {\n\t\treturn {\n\t\t\tlabel: undefined,\n\t\t\tvalue: undefined,\n\t\t};\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'LabelValue';\n\t}\n}\n\nexport default LabelValue;\n","/**\n * Describe your model\n * @class\n */\nimport Base from '@netx/core/lib/netx-model';\nimport {dispatcher} from '@netx/core-next/instance/dispatcher';\n\nclass Pager extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @property {object} defaults - Model defaults\n\t * @property {string} defaults.currentPage - Current page number\n\t * @property {number} defaults.itemTotal - Total number of items\n\t * @property {number} defaults.pageSize - Items per page\n\t * @property {number} defaults.pagesToDisplay - Number of numeric page options to display\n\t * @property {number} defaults.pageTotal - Total number of pages\n\t * @property {boolean} defaults.routesToPage - Changing page causes route (TODO: this should not be handled in the pager model itself)\n\t */\n\tget defaults() {\n\t\treturn {\n\t\t\tcurrentPage: 1,\n\t\t\titemTotal: 0,\n\t\t\tpageSize: 50,\n\t\t\tpagesToDisplay: 8,\n\t\t\tpageTotal: 0,\n\t\t\tstartIndex: null,\n\t\t\troutesToPage: true,\n\t\t};\n\t}\n\n\t/**\n\t * When passing options to a madel, Backbone will look for a definition of the model's collection and if we should parse the initial attributes (which also receives our options object)\n\t * All options are then passed along to the set method which is fired off the bat to set the model's attributes\n\t * @override\n\t * @param {object} attrs Model attributes\n\t * @param {object} opts Model options\n\t */\n\tconstructor(attrs, opts = {}) {\n\t\tsuper(attrs, opts);\n\n\t\t// Debounced/throttled methods\n\t\tthis.changedCurrentPage = _.debounce(this.changedCurrentPage, 50);\n\n\t\t// Hey, listen!\n\t\tthis.on('change:itemTotal change:pageSize', this.calculatePages).on(\n\t\t\t'change:currentPage',\n\t\t\tthis.changedCurrentPage,\n\t\t);\n\n\t\tif (this.collection) {\n\t\t\t// To avoid any pager total collision, when we fetch we do not want to listen\n\t\t\t// for add and removes until after the sync\n\t\t\tthis.listenTo(this.collection, 'request:read', () => {\n\t\t\t\tthis.stopListening(this.collection, 'add').stopListening(\n\t\t\t\t\tthis.collection,\n\t\t\t\t\t'remove',\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tthis.listenTo(this.collection, 'destroy', () => {\n\t\t\t\tconst assetCount = this.get('itemTotal');\n\t\t\t\tassetCount && this.set('itemTotal', assetCount - 1);\n\t\t\t}).listenTo(this.collection, 'sync', (collection, results, opts) => {\n\t\t\t\tif (!collection.selection) return;\n\n\t\t\t\tconst p = {};\n\t\t\t\tp.firstIndex = collection.selection.startPosition;\n\t\t\t\tp.lastIndex = p.firstIndex + collection.length - 1; // i think this is smarter.\n\t\t\t\tp.firstPage = p.firstIndex == 1;\n\t\t\t\tp.lastChunk = this.lastChunk;\n\n\t\t\t\t// logic: imagine chunkSize = 50, then ...\n\t\t\t\t// startPosition 1 = page 1\n\t\t\t\t// startPosition 2 - 51 = page 2 ( < 51 is an abnormal start position, but it's ahead of some assets)\n\t\t\t\t// startPosition 52 = page 3, and so on.\n\t\t\t\tp.currentPage = Math.ceil((p.firstIndex - 1) / collection.pageSize) + 1;\n\n\t\t\t\tif (this.has('itemTotal')) {\n\t\t\t\t\t// 1 = 1 page. 51- 100 = 2 pages. 101 = 3 pages. And so on.\n\t\t\t\t\tp.pageTotal = Math.ceil(this.get('itemTotal') / collection.pageSize);\n\t\t\t\t}\n\n\t\t\t\tthis.set(p);\n\n\t\t\t\t// To be safe, if anything rogue fires syncs without a `request:read`\n\t\t\t\t// cleanup\n\t\t\t\tthis.stopListening(this.collection, 'add')\n\t\t\t\t\t.stopListening(this.collection, 'remove')\n\t\t\t\t\t.listenTo(this.collection, 'add', (model, collection, opts) => {\n\t\t\t\t\t\tif (opts.index == null || opts.success != null) return;\n\t\t\t\t\t\tthis.adjustTotal(1);\n\t\t\t\t\t})\n\t\t\t\t\t.listenTo(this.collection, 'remove', (model, collection, opts) => {\n\t\t\t\t\t\tif (opts.index == null || opts.success != null) return;\n\t\t\t\t\t\tthis.adjustTotal(-1);\n\t\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Calculate the total asset count after add or remove\n\t * @param {number} adj (+1 or -1)\n\t * @method\n\t */\n\tadjustTotal(adj) {\n\t\tconst assetCount = this.get('itemTotal');\n\t\tassetCount && this.set('itemTotal', assetCount + adj);\n\t}\n\n\t/**\n\t * Calculate the total number of pages required given itemTotal and pageSize\n\t * @method\n\t */\n\tcalculatePages() {\n\t\tconst pageTotal = Math.ceil(this.get('itemTotal') / this.get('pageSize'));\n\t\tthis.set('pageTotal', pageTotal);\n\t}\n\n\t/**\n\t * @method\n\t * @param {module:app/models/pager} pager Pager (this)\n\t * @param {number} page Page\n\t * @param {object} opts Options\n\t */\n\tchangedCurrentPage(pager, page, opts) {\n\t\tconst collection = this.collection;\n\n\t\tif (!collection) return;\n\n\t\t// see if this pager uses the route\n\t\tif (this.get('routesToPage')) {\n\t\t\tdispatcher.trigger('router:page', page, this.collection.routeContext);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.collection.gotoPage(page, opts);\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} opts Options\n\t */\n\tfirstPage(opts) {\n\t\tthis.set('currentPage', 1, opts);\n\t}\n\n\t/**\n\t * @method\n\t * @return {object} PageDTO\n\t */\n\tgetPageDTO() {\n\t\tconst pageDTO = {\n\t\t\tsize: this.get('pageSize'),\n\t\t};\n\n\t\tif (this.get('startId') != null) {\n\t\t\tpageDTO.startId = this.get('startId');\n\t\t} else {\n\t\t\t// This is 0 based pager\n\t\t\tpageDTO.startIndex = (this.get('currentPage') - 1) * this.get('pageSize');\n\t\t}\n\n\t\treturn pageDTO;\n\t}\n\n\t/**\n\t * @method\n\t * @param {number} page Page number\n\t * @param {object} opts Options\n\t */\n\tgotoPage(page, opts) {\n\t\tthis.set('currentPage', parseInt(page), opts);\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} opts Options\n\t */\n\tlastPage(opts) {\n\t\tthis.set('currentPage', this.get('pageTotal'), opts);\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} opts Options\n\t */\n\tnextPage(opts) {\n\t\tconst currentPage = this.get('currentPage');\n\t\tif (currentPage >= this.get('pageTotal')) return;\n\n\t\tthis.set('currentPage', currentPage + 1, opts);\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} opts Options\n\t */\n\tprevPage(opts) {\n\t\tconst currentPage = this.get('currentPage');\n\t\tif (currentPage <= 1) return;\n\n\t\tthis.set('currentPage', currentPage - 1, opts);\n\t}\n\n\t/**\n\t * We get back a start index on paging calls\n\t * @method\n\t * @param {number} index Index\n\t */\n\tsetStartIndex(index, opts) {\n\t\treturn this.set(\n\t\t\t{\n\t\t\t\tcurrentPage: Math.floor(index / this.get('pageSize') + 1),\n\t\t\t\tstartIndex: index,\n\t\t\t},\n\t\t\t{fetch: false, ...opts},\n\t\t);\n\t}\n\t/**\n\t * When clearing the current cart we need to reset the pager\n\t * without trashing instance specific attributes\n\t * @method\n\t */\n\tclearPages() {\n\t\tthis.set({\n\t\t\tcurrentPage: 1,\n\t\t\tfirstIndex: 1,\n\t\t\titemTotal: 0,\n\t\t\tpageTotal: 0,\n\t\t});\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'Pager';\n\t}\n}\n\nexport default Pager;\n","/**\n * @class\n * https://kb.netx.net/pages/viewpage.action?spaceKey=ND&title=NetX+Support+Saml\n */\nimport Base from '@netx/core/lib/netx-model';\n\nclass SAMLService extends Base {\n\t/**\n\t * @property {object} defaults - Model defaults\n\t * @property {string} defaults.description - Service description\n\t * @property {string} defaults.label - Service label\n\t * @property {string} defaults.name - Service name\n\t * @property {string} defaults.type - Service type\n\t */\n\tget defaults() {\n\t\treturn {\n\t\t\tdescription: '',\n\t\t\tlabel: '',\n\t\t\tname: '',\n\t\t\ttype: '',\n\t\t};\n\t}\n\n\t/** @type {string} */\n\tget idAttributes() {\n\t\treturn 'name';\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'SAMLService';\n\t}\n}\n\nexport default SAMLService;\n","/**\n * @class\n */\nimport Base from '@netx/core/lib/netx-collection';\nimport Model from '../models/samlService';\n\nclass SAMLServices extends Base {\n\t/** @override */\n\tconstructor(models, opts = {}) {\n\t\topts.model = opts.model || Model;\n\t\tsuper(models, opts);\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'SAMLServices';\n\t}\n}\n\nexport default SAMLServices;\n","/**\n * Netx.Session manages a user authentication key and/or an access token.\n * It is the first object initialized, and it establishes authentication for the rest of X7.\n * @class\n */\nimport _ from 'underscore';\nimport {getPublicProperty} from '@netx/core-app-next/utils/getPublicProperty';\nimport SAMLServicesCollection from '@netx/core-auth/collections/samlServices';\nimport authConfig from '@netx/core-auth/config';\nimport {getCurrentPortalProp} from '@netx/core-cms-next/utils/getCurrentPortalProp';\nimport {isBrandPortal} from '@netx/core-cms-next/utils/isBrandPortal';\nimport coreConfig from '@netx/core-next/config';\nimport {localStore} from '@netx/core-next/instance';\nimport {dispatcher} from '@netx/core-next/instance/dispatcher';\nimport {URL} from '@netx/core-next/url';\nimport {UserPref} from '@netx/core-user-next/constants';\nimport {isPublicUser} from '@netx/core-user-next/utils';\nimport {getPreference} from '@netx/core-user-next/utils/getPreference';\nimport {userSource} from '@netx/core-user/properties/user';\nimport Netx from '@netx/core/bootstrap';\nimport Base from './netx-model';\n\nclass Session extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @type {object}\n\t */\n\tget xhrTrackProgress() {\n\t\treturn {\n\t\t\tgetAdvertisedSamlServices: true,\n\t\t\tgetPublicMethods: true,\n\t\t};\n\t}\n\n\t/**\n\t * @type {object}\n\t */\n\tget xhrLoadingMessages() {\n\t\treturn {\n\t\t\tgetAdvertisedSamlServices: 'Checking SAML services',\n\t\t\tgetPublicMethods: 'Fetching public methods',\n\t\t};\n\t}\n\n\t/**\n\t * @type {object}\n\t */\n\tget xhrLoadedMessages() {\n\t\treturn {\n\t\t\tgetAdvertisedSamlServices: 'Checked SAML services',\n\t\t\tgetPublicMethods: 'Fetched public methods',\n\t\t};\n\t}\n\n\t/**\n\t * @property {object} defaults - Default attributes\n\t * @property {array} defaults.browserInfo - TODO: document\n\t * @property {object} defaults.browserLimits - Lowest supported browser versions\n\t * @property {boolean} defaults.borwserOk - Browser version confirmed\n\t * @property {string} defaults.loginMsg - Message to display at login screen\n\t * @property {string} defaults.loginMsgClass - CSS class for login screen message ( danger, info, success, warning )\n\t * @property {string} defaults.password - Password (authentication)\n\t * @property {array} defaults.publicMethods - Any array of publicly accessible methods\n\t * @property {string} defaults.sessionKey - Session key\n\t * @property {string} defaults.token - Token key\n\t * @property {string} defaults.username - Username (authentication)\n\t * @property {module:core/lib/netx-collection} defaults.samlServices - SAML services\n\t */\n\tget defaults() {\n\t\treturn {\n\t\t\tbrowserInfo: [],\n\t\t\tbrowserLimits: {\n\t\t\t\tchrome: 25,\n\t\t\t\tcrios: 1,\n\t\t\t\tfirefox: 20,\n\t\t\t\tmsie: 10,\n\t\t\t\tphantomjs: 1,\n\t\t\t\tsafari: 5,\n\t\t\t\ttrident: 6,\n\t\t\t},\n\t\t\tbrowserOk: false,\n\t\t\tloginMsg: '',\n\t\t\tloginMsgClass: '',\n\t\t\tpassword: '',\n\t\t\tpublicMethods: [],\n\t\t\tsessionKey: '',\n\t\t\ttoken: '',\n\t\t\tusername: '',\n\t\t\tloggedInAsOtherUser: false,\n\t\t\tsamlServices: new SAMLServicesCollection(),\n\t\t};\n\t}\n\n\t/**\n\t * @todo: Document why we're using clientAttrs here & what is meant by it?\n\t * There's no calls to session.self() in the codebase that I can find...\n\t * @type {array}\n\t */\n\tget clientAttrs() {\n\t\treturn [\n\t\t\t'browserLimits',\n\t\t\t'loggedInAsOtherUser',\n\t\t\t'loginMsg',\n\t\t\t'loginMsgClass',\n\t\t\t'publicMethods',\n\t\t];\n\t}\n\n\t/**\n\t * Methods for this model\n\t * @type {object}\n\t * @memberof Session\n\t * @property {object} methods - Methods for this model\n\t * @property {method} methods.getPublicMethods - Get public methods\n\t * @property {method} methods.getSamlServices - Get SAML services for SSO login\n\t * @property {method} methods.testSession - Test if session is valid\n\t * @property {method} methods.testToken - Test if token is valid\n\t * @property {method} methods.testAuthentication - Test if authenticated\n\t * @property {method} methods.tickle - Tickle the session (keep alive)\n\t * @property {methos} methods.triggerAnAPIError - Sometimes, while testing, it's useful to be able to trigger an api error by calling an undefined api method\n\t */\n\tget methods() {\n\t\treturn {\n\t\t\tgetPublicMethods: ['getPublicMethods'],\n\t\t\tgetSamlServices: ['getAdvertisedSamlServices'],\n\t\t\ttestAuthentication: ['getAuthentication'],\n\t\t\ttestSession: ['getSelf'],\n\t\t\ttestToken: ['isTokenValid', 'token'],\n\t\t\t_tickle: ['getProductVersion'],\n\t\t\ttriggerAnAPIError: ['undefinedAPIMethod'],\n\t\t};\n\t}\n\n\t/**\n\t * Parsers for this model\n\t * @type {object}\n\t */\n\tget parsers() {\n\t\treturn {\n\t\t\tgetPublicMethods(methods) {\n\t\t\t\tthis.set({publicMethods: methods});\n\t\t\t},\n\t\t\t/**\n\t\t\t * Gets saml services and saves them as a collection, used as login childViews\n\t\t\t * @param {array} samlServices\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tgetSamlServices(samlServices, opts) {\n\t\t\t\t// samlServices.push({\n\t\t\t\t// \tname: 'Custom',\n\t\t\t\t// \ttype: 'saml',\n\t\t\t\t// \tdescription: 'Yo, here is a description',\n\t\t\t\t// \tlabel: 'Login with Custom',\n\t\t\t\t// });\n\t\t\t\tthis.get('samlServices').reset(samlServices);\n\t\t\t\t// this.set({samlServices: new SAMLServicesCollection(samlServices)});\n\t\t\t},\n\t\t};\n\t}\n\n\t/** @override */\n\tconstructor(attrs, opts = {}) {\n\t\tsuper(attrs, opts);\n\n\t\t/**\n\t\t * Used?\n\t\t * @type {string}\n\t\t * @default\n\t\t */\n\t\tthis.key = opts.key || null;\n\t\t/**\n\t\t * 30 minutes\n\t\t * @type {number}\n\t\t * @default\n\t\t */\n\t\tthis.length = opts.length || 1800000;\n\n\t\tthis.resetLogoutTimer = _.debounce(this.resetLogoutTimer, 1000);\n\n\t\t// Auto session tickling\n\t\tconst sessionTicklers = (this.sessionTicklers = new Base());\n\t\tthis.addSubModel(sessionTicklers);\n\n\t\t// Listen Up!\n\t\t// Session listens for expiration event\n\t\tthis.listenTo(dispatcher, 'session:expire', this.expireSession)\n\t\t\t.listenTo(dispatcher, 'session:tickle', this.tickle)\n\t\t\t.listenTo(dispatcher, 'session:tickle:add', (key) =>\n\t\t\t\tsessionTicklers.set(key, true),\n\t\t\t)\n\t\t\t.listenTo(dispatcher, 'session:tickle:remove', (key) =>\n\t\t\t\tsessionTicklers.unset(key),\n\t\t\t)\n\t\t\t.listenTo(sessionTicklers, 'change', () => {\n\t\t\t\tthis.shouldBeTickling() ? this.startTickling() : this.stopTickling();\n\t\t\t});\n\n\t\t// Listen for route changes:\n\t\tthis.listenTo(dispatcher, 'routed', this.getToken);\n\t\tthis.getToken();\n\n\t\t// Set portal context on initial load and then listen\n\t\tthis.updatePortalContext();\n\n\t\t// Check against this time to figure out how long user has been inactive\n\t\tthis.lastTickled = this.inactivityStartTime = Date.now();\n\n\t\t// Listen for visbility change\n\t\tdocument.addEventListener(\n\t\t\t'visibilitychange',\n\t\t\tthis.visibilityStateChanged.bind(this),\n\t\t\tfalse,\n\t\t);\n\n\t\t// Establish a connection, and trigger 'netx:configured' upon success.\n\t\t//\n\t\t// These settings from config.js configure our access method.\n\t\t// If DAM_URL is set, configure CORS or proxy\n\t\t// (But if DAM_URL == the local URL, ignore it.)\n\t\tthis.configured = new $.Deferred();\n\n\t\tthis.testAjax(URL.api, {\n\t\t\tsuccess: (data, status, jqX) => {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.configured.resolve(data.result);\n\t\t\t\t}, 0);\n\t\t\t},\n\t\t});\n\n\t\t// Avoid oneself not being defined to those who are listening\n\t\t_.defer(() => {\n\t\t\t// Until we can handle this better\n\t\t\tif (!this.browserTestOk()) {\n\t\t\t\tdispatcher.trigger('app:browser:override:confirmed');\n\t\t\t\tconsole.warn('Your browser may not be 100% supported.');\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * @method\n\t * @return {boolean} Authenticated\n\t */\n\tauthenticated() {\n\t\treturn !this.requiresLogin() || this.get('sessionKey') || this.getToken();\n\t}\n\n\tisAuthenticatedAsPublicUser() {\n\t\treturn isPublicUser() && this.authenticated();\n\t}\n\n\tcanAuthenticateAsPublicUser() {\n\t\treturn getCurrentPortalProp('requireLogin') === false;\n\t}\n\n\t// TODO: test what new portals look like from pre this branch - all the upgrade stuff\n\trequiresLogin() {\n\t\treturn (\n\t\t\t!this.canAuthenticateAsPublicUser() || localStore.get('requestingLogin')\n\t\t);\n\t}\n\n\t/**\n\t * Get session duration\n\t * @param {boolean} asMinutes\n\t */\n\tgetSessionDuration(asMinutes = false) {\n\t\tconst defaultMinutes = this.length / 1000 / 60;\n\t\t// DAM-14660 - keep the timeout under a 32 bit integer\n\t\tconst minutes = Math.min(\n\t\t\tgetPreference(UserPref.SESSION_DURATION) || defaultMinutes,\n\t\t\t35791,\n\t\t);\n\t\treturn asMinutes ? minutes : minutes * 60 * 1000;\n\t}\n\n\t/**\n\t * Get session tickle interval (based on half the defined session duration minus one second)\n\t * @method\n\t * @return Tickle interval in `ms`\n\t */\n\tgetSessionTickleInterval() {\n\t\t// We will attempt to \"tickle\" 4 times in a session duration this way we do not run\n\t\t// into anything funny about timing with the response from the server or our debounce\n\t\t// of the `resetLogoutTimer` method.\n\t\t// This also ensures that if a user had just typed, a short moment after a tickle just\n\t\t// occurred, we do not risk the the session timing out if they immediately stop typing\n\t\t// after that point\n\t\t// Always keep a minimum of 59 seconds between \"tickles\" (no one should be setting the\n\t\t// session duration to less than 2 minutes)\n\t\treturn Math.max(this.getSessionDuration() / 4, 1000 * 59);\n\t}\n\n\t//////////////////////////////////////////////////\n\t//\n\t// General testing methods\n\t//\n\t//////////////////////////////////////////////////\n\n\t/**\n\t * Test for remote DAM access\n\t * @param {string} url API endpoint you are trying to access\n\t * @param {object} opt AJAX options object (jquery)\n\t */\n\ttestAjax(url, opt) {\n\t\treturn $.ajax({\n\t\t\turl: `${url}/getPublicProperties`,\n\t\t\ttype: 'POST',\n\t\t\tcache: false,\n\t\t\txhrFields: {\n\t\t\t\twithCredentials: true,\n\t\t\t},\n\t\t\tdataType: 'json',\n\t\t\tcontentType: 'application/json; charset=UTF-8',\n\t\t\tdata: JSON.stringify({\n\t\t\t\tdataContext: 'json',\n\t\t\t\tjsonrpc: '2.0',\n\t\t\t\tmethod: 'getPublicProperties',\n\t\t\t\tid: _.uniqueId(),\n\t\t\t\tparams: [],\n\t\t\t}),\n\t\t\tparseData: false,\n\t\t\tsuccess: opt.success,\n\t\t\terror: opt.error,\n\t\t});\n\t}\n\n\t/**\n\t * Test for supported browser\n\t * @return {boolean} Broser is supported.\n\t */\n\tbrowserTestOk() {\n\t\tvar ua = navigator.userAgent,\n\t\t\tN = navigator.appName,\n\t\t\ttem,\n\t\t\tM =\n\t\t\t\tua.match(\n\t\t\t\t\t/(opera|chrome|safari|firefox|msie|trident|phantomjs|crios)\\/?\\s*([\\d.]+)/i,\n\t\t\t\t) || [];\n\t\tM = M[2] ? [M[1], M[2]] : [N, navigator.appVersion, '-?'];\n\t\tif (M && (tem = ua.match(/version\\/([.\\d]+)/i)) !== null) {\n\t\t\tM[2] = tem[1];\n\t\t}\n\n\t\tthis.set('browserInfo', M.join(' ').split(' '));\n\n\t\tvar browserInfo = this.get('browserInfo');\n\t\tvar limits = this.get('browserLimits');\n\n\t\tif (browserInfo.length) {\n\t\t\tif (\n\t\t\t\t(browserInfo[0].toLowerCase() === 'chrome' &&\n\t\t\t\t\tparseInt(browserInfo[1]) >= limits.chrome) ||\n\t\t\t\t(browserInfo[0].toLowerCase() === 'firefox' &&\n\t\t\t\t\tparseInt(browserInfo[1]) >= limits.firefox) ||\n\t\t\t\t(browserInfo[0].toLowerCase() === 'msie' &&\n\t\t\t\t\tparseInt(browserInfo[1]) >= limits.msie) ||\n\t\t\t\t(browserInfo[0].toLowerCase() === 'trident' &&\n\t\t\t\t\tparseInt(browserInfo[1]) >= limits.trident) ||\n\t\t\t\t(browserInfo[0].toLowerCase() === 'phantomjs' &&\n\t\t\t\t\tparseInt(browserInfo[1]) >= limits.phantomjs) ||\n\t\t\t\t(browserInfo[0].toLowerCase() === 'crios' &&\n\t\t\t\t\tparseInt(browserInfo[1]) >= limits.crios)\n\t\t\t) {\n\t\t\t\tthis.set('browserOk', true);\n\t\t\t} else if (\n\t\t\t\tbrowserInfo[0].toLowerCase() === 'safari' &&\n\t\t\t\tbrowserInfo.length === 3 &&\n\t\t\t\tparseInt(browserInfo[2]) >= limits.safari\n\t\t\t) {\n\t\t\t\tthis.set('browserOk', true);\n\t\t\t}\n\t\t}\n\t\t// Check that either the browser is actually ok or that there is a cookie override\n\t\tif (this.get('browserOk') || this.getCookie('browserOk')) {\n\t\t\tif (this.getCookie('browserOk')) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t'This browser %o is not officially supported',\n\t\t\t\t\tthis.get('browserInfo'),\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t///////////////////////////////////////////////\n\t//\n\t// Browser cookie CRUD methods:\n\t//\n\t///////////////////////////////////////////////\n\n\t/**\n\t * getCookie Gets the value of a clientside cookie\n\t * @param {string} cookie\n\t * @return {string | undefined}\n\t */\n\tgetCookie(cookie) {\n\t\tvar i,\n\t\t\tx,\n\t\t\ty,\n\t\t\tCookies = document.cookie.split(';');\n\t\tfor (i = 0; i < Cookies.length; i++) {\n\t\t\tx = Cookies[i].substr(0, Cookies[i].indexOf('='));\n\t\t\ty = Cookies[i].substr(Cookies[i].indexOf('=') + 1);\n\t\t\tx = x.replace(/^\\s|\\s+$/g, '');\n\t\t\tif (x == cookie) {\n\t\t\t\treturn unescape(y);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * setCookie Sets the value of a clientside cookie\n\t * @param {string} cname name of cookie\n\t * @param {string} cvalue value of cookies\n\t * @param {number} exdays expire time (in days)\n\t * @param {string} path cookie path (defaults to /)\n\t */\n\tsetCookie(cname, cvalue, exdays = 0, path = '/') {\n\t\tvar expires = '';\n\t\tif (exdays) {\n\t\t\tvar d = new Date();\n\t\t\td.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000); // converting days to milliseconds 24 hours * 60 minutes * 60 seconds * 1000 millisecs.\n\t\t\texpires = `expires=\"${d.toUTCString()}\";`;\n\t\t}\n\t\tdocument.cookie = `${cname}=${escape(cvalue)}; ${expires} path=${path};`;\n\t\t// TODO: return the cookie? Define a cookie object??\n\t}\n\n\t/**\n\t * Delete the clientside cookie\n\t * @param {string} name\n\t */\n\tdeleteCookie(name) {\n\t\tthis.setCookie(name, '', -1);\n\t}\n\n\t///////////////////////////////////////////////\n\t//\n\t// NetX session key CRUD methods:\n\t//\n\t///////////////////////////////////////////////\n\n\t/**\n\t * Session.getKey() Checks to see if we are holding a session key\n\t * @return {Boolean}\n\t */\n\tgetKey() {\n\t\t// Did we already store it?\n\t\tvar sessionKey = this.get('sessionKey');\n\n\t\tif (!sessionKey) {\n\t\t\t// Is there a session key in our route? If so, it should take precedence.\n\t\t\t// (This implements the 'login as other user' feature for admins.\n\t\t\t// Session keys are alphanumeric strings with no other punctuation.\n\t\t\tvar match = window.location.hash.match(/^#session\\/([0-9a-zA-Z]+)/);\n\t\t\tif (match) {\n\t\t\t\tsessionKey = match[1];\n\t\t\t\tthis.set({loggedInAsOtherUser: true}); // note how we found this key\n\t\t\t} else {\n\t\t\t\t// Is a session key cookie set on our browser?\n\t\t\t\tsessionKey = this.getCookie('sessionKey');\n\t\t\t}\n\t\t}\n\n\t\tif (sessionKey) {\n\t\t\t// Cache the key locally.\n\t\t\tthis.setKey(sessionKey);\n\t\t}\n\n\t\treturn sessionKey;\n\t}\n\n\t/**\n\t * Set session key\n\t * @param {string} key\n\t */\n\tsetKey(key) {\n\t\tthis.set({sessionKey: key});\n\t}\n\n\t/**\n\t * Delete session key\n\t */\n\tdeleteKey() {\n\t\tthis.deleteCookie('sessionKey');\n\t\tthis.set('sessionKey', undefined);\n\t}\n\n\t///////////////////////////////////////////////\n\t//\n\t// Access token CRUD methods:\n\t//\n\t///////////////////////////////////////////////\n\n\t/**\n\t * Checks to see if the route contains a token.\n\t * @return {string} the token string\n\t */\n\tgetToken() {\n\t\t// Q: Should we always check the URL, or only check if if we haven't detected a token already?\n\t\t// In other words, should the token, once detected, grant access to other routes that don't contain it?\n\t\t// A: That use case hasn't come up yet. Until it does, we always check the URL.\n\n\t\t// Tokens in URLs match the official UUID spec: https://en.wikipedia.org/wiki/Universally_unique_identifier\n\t\t// They are \"version 4\" UUIDs. The pattern can get more anal that this, but basically it's 36 characters that are either hexadecimal or dash:\n\t\tconst match =\n\t\t\twindow.location.hash.match(/request\\/([0-9a-fA-F-]{36})/) || null;\n\n\t\tmatch == null ? this.deleteToken() : this.setToken(match[1].toString());\n\n\t\treturn this.get('token');\n\t}\n\n\t/**\n\t * Set token\n\t * @param {string} token\n\t */\n\tsetToken(token) {\n\t\tthis.set({token});\n\t}\n\n\t/**\n\t * Delete token\n\t */\n\tdeleteToken() {\n\t\tthis.set({token: undefined});\n\t\tthis.deleteCookie('tokenKey'); // backwards-compatability\n\t}\n\n\t//////////////////////////////////////////////\n\t//\n\t// Session management:\n\t// testing, timing, tickling.\n\t//\n\t//////////////////////////////////////////////\n\n\t/**\n\t * Session.isValid() Return a promise that will resolve or reject on whether we have a valid session,\n\t * either via a session key or an access token\n\t * @return {Promise}\n\t */\n\tisValid() {\n\t\tvar d = new $.Deferred();\n\n\t\t// 1) Do we have an access token set? If so, test it.\n\t\tif (this.getToken()) {\n\t\t\treturn this.testToken();\n\t\t}\n\n\t\t// 2) Do we have a session key at all? If not, we are S.O.L.\n\t\tif (!this.getKey()) {\n\t\t\treturn d.reject().promise(); // no session!\n\t\t}\n\n\t\t// 3) We have a session key, but is it valid?\n\t\tthis.testSession().then(\n\t\t\tfunction (data) {\n\t\t\t\t// If this is an internal user account, check if we\n\t\t\t\t// are logged in as public user and reject\n\t\t\t\tif (\n\t\t\t\t\tthis.requiresLogin() &&\n\t\t\t\t\tdata.userSource === userSource.INTERNAL &&\n\t\t\t\t\tdata.login === getPublicProperty('viewer.userLogin')\n\t\t\t\t) {\n\t\t\t\t\tthis.deleteCookie('sessionKey');\n\t\t\t\t\td.reject(); // public user!\n\t\t\t\t}\n\t\t\t\t// If not public user resolve\n\t\t\t\td.resolve(); // valid session!\n\t\t\t},\n\t\t\tfunction (data) {\n\t\t\t\t// If the sessionKey is not valid, erase it\n\t\t\t\tthis.deleteCookie('sessionKey');\n\t\t\t\td.reject(); // invalid session!\n\t\t\t},\n\t\t);\n\n\t\treturn d.promise();\n\t}\n\n\tshouldBeTickling() {\n\t\treturn (\n\t\t\tauthConfig.TICKLE_SESSION ||\n\t\t\t!!Object.keys(this.sessionTicklers.attributes).length\n\t\t);\n\t}\n\n\t// Session Tickling\n\t// ================\n\t// If enabled, we tickle the server regularly to make sure it doesn't time us out.\n\n\tresetTickler() {\n\t\tif (!this.tickler && !this.shouldBeTickling()) return;\n\n\t\tthis.stopTickling();\n\t\tthis.startTickling(true);\n\t}\n\n\t/**\n\t * Session.startTickling Starts an interval timer to tickle the server regularly\n\t */\n\tstartTickling(noInitialTickle = false) {\n\t\tif (this.tickler) return;\n\n\t\tconst interval = this.getSessionTickleInterval();\n\n\t\tthis.tickler = setInterval(this.tickle.bind(this), interval);\n\t\t!noInitialTickle && this.tickle();\n\t}\n\n\t/**\n\t * Session.stopTickling Removes the interval timer set by startTickling()\n\t */\n\tstopTickling() {\n\t\tthis.tickler && clearInterval(this.tickler);\n\t\tdelete this.tickler;\n\t}\n\n\t/**\n\t * Session.beTickling Starts the tickling if it hasn't already been started.\n\t */\n\tbeTickling() {\n\t\tif (this.tickler) return;\n\t\tthis.startTickling();\n\t}\n\n\t/**\n\t * Tickle while preventing over tickling\n\t * @method\n\t */\n\ttickle() {\n\t\tif (this.getToken() || !this.getKey()) return;\n\n\t\tconst now = Date.now();\n\t\t// Do not tickle more than once per minute\n\t\tif (now - this.lastTickled >= 1000 * 60) {\n\t\t\tthis.lastTickled = now;\n\t\t\tthis._tickle();\n\t\t}\n\t}\n\n\t// Session Timer\n\t// ================\n\t// A session timer counts down how many seconds remain before the server times us out.\n\t// Here, we watch the clock & warn the user when timeout approaches.\n\t// Note that session tickling prevents session timeout. Use one or the other, but not both.\n\n\t/**\n\t * resetLogoutTimer starts an interval timer to trigger an event 60 seconds before the DAM logs us out.\n\t */\n\t// NOTE: the function is debounced because it will be called on every successful RPC call.\n\tresetLogoutTimer() {\n\t\t// DAM-16342 - if on a token, never timeout session,\n\t\t// never dispatch 'netx:session:timeoutWarning'\n\t\tif (this.getToken()) return;\n\n\t\tthis.lastTickled = this.inactivityStartTime = Date.now();\n\t\tconst timeoutMinutes = this.getSessionDuration(true);\n\n\t\tif (this.timer) {\n\t\t\tclearTimeout(this.timer);\n\t\t}\n\n\t\tthis.timer = setTimeout(() => {\n\t\t\t// Only trigger the warning if we are actually logged in, via key or token\n\t\t\t// and if the page is hidden, don't trigger the timeout warning\n\t\t\tif (this.getKey() && document.visibilityState === 'visible') {\n\t\t\t\tdispatcher.trigger('netx:session:timeoutWarning');\n\t\t\t}\n\t\t}, 60 * 1000 * (timeoutMinutes - 1)); // time out 1 minute (60000 milliseconds) before the session duration (which is expressed in minutes)\n\n\t\t// Accidentally removed in 8.8, leading to the \"why am i logged out when i reload\" problem:\n\t\tthis.postponeSessionTimeout(timeoutMinutes);\n\t\t// (In 8.9 we will manage the session entirely on the client, so this will change ...)\n\t}\n\n\t/**\n\t * Manipulate cookies to signal that the session was ended due to a timeout.\n\t * (So that the login screen display a relelevant message.)\n\t */\n\texpireSession() {\n\t\t// DAM-16342 - if on a token, never timeout session\n\t\t// just in case session:expire is dispatched\n\t\tif (this.getToken() || !this.getKey()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.deleteCookie('sessionKey');\n\t\tthis.setCookie('sessionExpired', 'EXPIRED', 1);\n\t\tdispatcher.trigger('app:stop');\n\t}\n\n\t/**\n\t * Postpone session cookie expiration: set the expire time of the session cookie (if any) to 30 minutes from now.\n\t * @param {number} duration Minutes\n\t */\n\tpostponeSessionTimeout(duration) {\n\t\tvar cookie = this.getCookie('sessionKey');\n\t\tif (!cookie) return false;\n\n\t\tif (!duration) duration = this.getSessionDuration(true);\n\n\t\t// NOTE: converting duration from minutes to days: 60 mins * 24 hours = 1 day.\n\t\tthis.setCookie('sessionKey', cookie, duration / (60 * 24));\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Check for, and clear, the session-expired cookie.\n\t */\n\tsessionExpired() {\n\t\tif (this.getCookie('sessionExpired') == 'EXPIRED') {\n\t\t\tthis.deleteCookie('sessionExpired');\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Update the portalContext cookie to reflect the current theme\n\t */\n\tupdatePortalContext() {\n\t\t// Update the portalContext cookie to reflect the current theme\n\t\tthis.setCookie('portalContext', window.location.pathname);\n\t}\n\n\t/**\n\t * The browser page visibility has changed\n\t */\n\tvisibilityStateChanged() {\n\t\tif (document.visibilityState === 'visible') {\n\t\t\t// Set 'portalContext' cookie (DAM-9257)\n\t\t\tthis.updatePortalContext();\n\n\t\t\t// If user backgrounds Netx tab for longer than session,\n\t\t\t// they should be kicked to login screen when tab becomes active.\n\t\t\tconst sessionDuration = this.getSessionDuration();\n\n\t\t\tconst sessionExpired =\n\t\t\t\tDate.now() - this.inactivityStartTime >= sessionDuration;\n\n\t\t\tif (sessionExpired) {\n\t\t\t\t// If multiple Netx tabs are open, this timeout could be triggered.\n\t\t\t\t// Let's ask the server if the session really is expired\n\t\t\t\tthis.testSession()\n\t\t\t\t\t.then(this.resetLogoutTimer.bind(this))\n\t\t\t\t\t.catch(this.expireSession.bind(this));\n\t\t\t}\n\t\t}\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'Session';\n\t}\n}\n\nexport default Session;\n","import {setGlobal} from '@netx/core-next/utils/setGlobal';\nimport Session from '@netx/core/lib/netx-session';\n\nexport const session = new Session();\n\nsetGlobal({session});\n\nexport default session;\n","export default {\n\t/**\n\t * CSS id for cart container element\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tPOST_LOGIN_HASH_NAME: 'postLoginHash',\n\tCUSTOM_LOGIN_TRIGGERED_NAME: 'customLoginTriggered',\n\t/**\n\t * Should the client prevent the server from timing out inactive sessions?\n\t * @const\n\t * @type {boolean}\n\t * @default\n\t */\n\tTICKLE_SESSION: false,\n};\n","import window from 'global/window';\nimport {isBrandPortal} from '@netx/core-cms-next/utils/isBrandPortal';\nimport {type IBrandPortal} from '../schema';\n\n// TODO: if we use the comented out version (preferred) then jest mocks break all over the place\n// why?! this took me hours to hunt down and figure out\n// I would assume this causes a race for all the various imports of netx models out there (like currentPortal)\n// import {currentPortal} from '@netx/core-cms/singletons/currentPortal';\n// const getPortal = () => isBrandPortal() && currentPortal;\nexport const getCurrentPortal = (): IBrandPortal | null =>\n\tisBrandPortal() && window.Netx.cms?.portal?.id\n\t\t? window.Netx.cms.portal.attributes\n\t\t: null;\n","import {type IBrandPortal} from '../schema';\nimport {getCurrentPortal} from './getCurrentPortal';\n\nexport const getCurrentPortalProp = (key: keyof IBrandPortal) =>\n\tgetCurrentPortal()?.[key];\n","/**\n * Check if the app is at a portal endpoint\n */\nexport const isBrandPortal = () => {\n\t// eslint-disable-next-line no-unreachable\n\treturn window.location.pathname.match(/^\\/portals\\//) != null;\n};\n","export enum NetxThemeMode {\n\tDEFAULT = 'default',\n\tDARK = 'dark',\n\tLIGHT = 'light',\n}\n\nexport const NETX_THEME_MODES = Object.values(NetxThemeMode);\n\nexport enum NetxThemePref {\n\tUSER_SELECTED = 'app:brand:mode',\n}\n\nexport enum Severity {\n\tDEFAULT = 'default',\n\tERROR = 'error',\n\tINFO = 'info',\n\tPRIMARY = 'primary',\n\tSECONDARY = 'secondary',\n\tSUCCESS = 'success',\n\tWARNING = 'warning',\n}\n\nexport const SEVERITIES = Object.values(Severity);\n","import {NetxThemeMode} from '../constants';\n\nexport const getBrowserPreferedThemeMode = () => {\n\treturn window.matchMedia?.('(prefers-color-scheme: dark)').matches\n\t\t? NetxThemeMode.DARK\n\t\t: NetxThemeMode.LIGHT;\n};\n","import {session} from '@netx/core-auth/collections/singleton/session';\nimport {isBrandPortal} from '@netx/core-cms-next/utils/isBrandPortal';\nimport {NetxThemeMode} from '../constants';\nimport type {ThemeMode} from '../types';\nimport {getBrowserPreferedThemeMode} from './getBrowserPreferedThemeMode';\n\nconst THEME_MODES = Object.values(NetxThemeMode);\n\nexport const netxThemeModeToThemeMode = (\n\tmode?: NetxThemeMode | string,\n): ThemeMode => {\n\tconst sessionKey = session.getKey();\n\tconst appAuthenticated = sessionKey && sessionKey !== '';\n\tconst tokenAccess = session.getToken() != null;\n\n\t// No `dark` support for portal or login screens currently\n\t// TODO: discuss opening this up to dark mode for non portal token related links?\n\tif (isBrandPortal() || tokenAccess || !appAuthenticated)\n\t\treturn NetxThemeMode.LIGHT;\n\n\treturn !mode ||\n\t\tmode === NetxThemeMode.DEFAULT ||\n\t\t!THEME_MODES.includes(mode as NetxThemeMode)\n\t\t? getBrowserPreferedThemeMode()\n\t\t: (mode as ThemeMode);\n};\n","export const config = {\n\tHOME_ROUTE: 'dashboard',\n\tREQUIRE_LOGIN: true,\n};\n\nexport default config;\n","import Backbone, {EventsMixin} from 'backbone';\nimport window from 'global/window';\n\n/**\n * Backbone dispatcher instance.\n * @see https://backbonejs.org/#Events\n * @example\n * dispatcher.on('foo', () => console.log('bar'));\n * dispatcher.trigger('foo'); // 'bar'\n */\nexport const dispatcher = {...Backbone.Events} as EventsMixin;\n// lots of global use out there still\nwindow.dispatcher = dispatcher;\nexport default dispatcher;\n\n/**\n * Enhanced Backbone dispatcher instance.\\\n * Provides a cleanup function for each event binding method.\n *\n * @example\n * const cleanup = enhancedDispatcher.on('foo', () => console.log('bar'));\n * cleanup(); // removes the event binding\n */\nexport const enhancedDispatcher = {\n\t...dispatcher,\n\tbind: (eventName: string, cb: Backbone.EventHandler, context?: any) => {\n\t\tdispatcher.bind(eventName, cb, context);\n\t\treturn () => {\n\t\t\tdispatcher.unbind(eventName, cb, context);\n\t\t};\n\t},\n\ton: (eventName: string, cb: Backbone.EventHandler, context?: any) => {\n\t\tdispatcher.on(eventName, cb, context);\n\t\treturn () => {\n\t\t\tdispatcher.off(eventName, cb, context);\n\t\t};\n\t},\n\tonce: (eventName: string, cb: Backbone.EventHandler, context?: any) => {\n\t\tdispatcher.once(eventName, cb, context);\n\t\treturn () => {\n\t\t\tdispatcher.off(eventName, cb, context);\n\t\t};\n\t},\n\tlistenTo: (eventName: string, cb: any, context?: any) => {\n\t\tdispatcher.listenTo(eventName, cb, context);\n\t\treturn () => {\n\t\t\tdispatcher.stopListening(eventName, cb, context);\n\t\t};\n\t},\n\tlistenToOnce: (eventName: string, cb: any) => {\n\t\tdispatcher.listenToOnce(eventName, cb);\n\t\treturn () => {\n\t\t\tdispatcher.stopListening(eventName, cb);\n\t\t};\n\t},\n};\n","// @ts-ignore\nimport Locally from 'locallyjs';\n\n/**\n * Local storage instance.\n *\n * @see https://www.npmjs.com/package/locallyjs\n *\n * @example\n * localStore.set('foo', 'bar');\n */\nexport const localStore = new Locally.Store({\n\t// DAM-19220 - set to false\n\tcompress: false,\n});\n\nexport default localStore;\n\nimport {setGlobal} from '@netx/core-next/utils/setGlobal';\nif (process.env.NODE_ENV !== 'production') {\n\tsetGlobal({localStore});\n}\n","export const prettyLogStyles = {\n reset: [0, 0],\n bold: [1, 22],\n dim: [2, 22],\n italic: [3, 23],\n underline: [4, 24],\n overline: [53, 55],\n inverse: [7, 27],\n hidden: [8, 28],\n strikethrough: [9, 29],\n black: [30, 39],\n red: [31, 39],\n green: [32, 39],\n yellow: [33, 39],\n blue: [34, 39],\n magenta: [35, 39],\n cyan: [36, 39],\n white: [37, 39],\n blackBright: [90, 39],\n redBright: [91, 39],\n greenBright: [92, 39],\n yellowBright: [93, 39],\n blueBright: [94, 39],\n magentaBright: [95, 39],\n cyanBright: [96, 39],\n whiteBright: [97, 39],\n bgBlack: [40, 49],\n bgRed: [41, 49],\n bgGreen: [42, 49],\n bgYellow: [43, 49],\n bgBlue: [44, 49],\n bgMagenta: [45, 49],\n bgCyan: [46, 49],\n bgWhite: [47, 49],\n bgBlackBright: [100, 49],\n bgRedBright: [101, 49],\n bgGreenBright: [102, 49],\n bgYellowBright: [103, 49],\n bgBlueBright: [104, 49],\n bgMagentaBright: [105, 49],\n bgCyanBright: [106, 49],\n bgWhiteBright: [107, 49],\n};\n","import { prettyLogStyles } from \"./prettyLogStyles.js\";\nexport function formatTemplate(settings, template, values, hideUnsetPlaceholder = false) {\n const templateString = String(template);\n const ansiColorWrap = (placeholderValue, code) => `\\u001b[${code[0]}m${placeholderValue}\\u001b[${code[1]}m`;\n const styleWrap = (value, style) => {\n if (style != null && typeof style === \"string\") {\n return ansiColorWrap(value, prettyLogStyles[style]);\n }\n else if (style != null && Array.isArray(style)) {\n return style.reduce((prevValue, thisStyle) => styleWrap(prevValue, thisStyle), value);\n }\n else {\n if (style != null && style[value.trim()] != null) {\n return styleWrap(value, style[value.trim()]);\n }\n else if (style != null && style[\"*\"] != null) {\n return styleWrap(value, style[\"*\"]);\n }\n else {\n return value;\n }\n }\n };\n const defaultStyle = null;\n return templateString.replace(/{{(.+?)}}/g, (_, placeholder) => {\n const value = values[placeholder] != null ? String(values[placeholder]) : hideUnsetPlaceholder ? \"\" : _;\n return settings.stylePrettyLogs\n ? styleWrap(value, settings?.prettyLogStyles?.[placeholder] ?? defaultStyle) + ansiColorWrap(\"\", prettyLogStyles.reset)\n : value;\n });\n}\n","export function formatNumberAddZeros(value, digits = 2, addNumber = 0) {\n if (value != null && isNaN(value)) {\n return \"\";\n }\n value = value != null ? value + addNumber : value;\n return digits === 2\n ? value == null\n ? \"--\"\n : value < 10\n ? \"0\" + value\n : value.toString()\n : value == null\n ? \"---\"\n : value < 10\n ? \"00\" + value\n : value < 100\n ? \"0\" + value\n : value.toString();\n}\n","export function urlToObject(url) {\n return {\n href: url.href,\n protocol: url.protocol,\n username: url.username,\n password: url.password,\n host: url.host,\n hostname: url.hostname,\n port: url.port,\n pathname: url.pathname,\n search: url.search,\n searchParams: [...url.searchParams].map(([key, value]) => ({ key, value })),\n hash: url.hash,\n origin: url.origin,\n };\n}\n","export function jsonStringifyRecursive(obj) {\n const cache = new Set();\n return JSON.stringify(obj, (key, value) => {\n if (typeof value === \"object\" && value !== null) {\n if (cache.has(value)) {\n return \"[Circular]\";\n }\n cache.add(value);\n }\n return value;\n });\n}\n","import { prettyLogStyles } from \"../../prettyLogStyles.js\";\nimport { jsonStringifyRecursive } from \"./helper.jsonStringifyRecursive.js\";\nexport function inspect(obj, opts) {\n const ctx = {\n seen: [],\n stylize: stylizeNoColor,\n };\n if (opts != null) {\n _extend(ctx, opts);\n }\n if (isUndefined(ctx.showHidden))\n ctx.showHidden = false;\n if (isUndefined(ctx.depth))\n ctx.depth = 2;\n if (isUndefined(ctx.colors))\n ctx.colors = true;\n if (isUndefined(ctx.customInspect))\n ctx.customInspect = true;\n if (ctx.colors)\n ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\ninspect.colors = prettyLogStyles;\ninspect.styles = {\n special: \"cyan\",\n number: \"yellow\",\n boolean: \"yellow\",\n undefined: \"grey\",\n null: \"bold\",\n string: \"green\",\n date: \"magenta\",\n regexp: \"red\",\n};\nfunction isBoolean(arg) {\n return typeof arg === \"boolean\";\n}\nfunction isUndefined(arg) {\n return arg === undefined;\n}\nfunction stylizeNoColor(str) {\n return str;\n}\nfunction stylizeWithColor(str, styleType) {\n const style = inspect.styles[styleType];\n if (style != null && inspect?.colors?.[style]?.[0] != null && inspect?.colors?.[style]?.[1] != null) {\n return \"\\u001b[\" + inspect.colors[style][0] + \"m\" + str + \"\\u001b[\" + inspect.colors[style][1] + \"m\";\n }\n else {\n return str;\n }\n}\nfunction isFunction(arg) {\n return typeof arg === \"function\";\n}\nfunction isString(arg) {\n return typeof arg === \"string\";\n}\nfunction isNumber(arg) {\n return typeof arg === \"number\";\n}\nfunction isNull(arg) {\n return arg === null;\n}\nfunction hasOwn(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === \"[object RegExp]\";\n}\nfunction isObject(arg) {\n return typeof arg === \"object\" && arg !== null;\n}\nfunction isError(e) {\n return isObject(e) && (objectToString(e) === \"[object Error]\" || e instanceof Error);\n}\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === \"[object Date]\";\n}\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\nfunction arrayToHash(array) {\n const hash = {};\n array.forEach((val) => {\n hash[val] = true;\n });\n return hash;\n}\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n const output = [];\n for (let i = 0, l = value.length; i < l; ++i) {\n if (hasOwn(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, String(i), true));\n }\n else {\n output.push(\"\");\n }\n }\n keys.forEach((key) => {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, key, true));\n }\n });\n return output;\n}\nfunction formatError(value) {\n return \"[\" + Error.prototype.toString.call(value) + \"]\";\n}\nexport function formatValue(ctx, value, recurseTimes = 0) {\n if (ctx.customInspect &&\n value != null &&\n isFunction(value) &&\n value?.inspect !== inspect &&\n !(value?.constructor && value?.constructor.prototype === value)) {\n if (typeof value.inspect !== \"function\" && value.toString != null) {\n return value.toString();\n }\n let ret = value?.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n const primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n let keys = Object.keys(value);\n const visibleKeys = arrayToHash(keys);\n try {\n if (ctx.showHidden && Object.getOwnPropertyNames) {\n keys = Object.getOwnPropertyNames(value);\n }\n }\n catch (e) {\n }\n if (isError(value) && (keys.indexOf(\"message\") >= 0 || keys.indexOf(\"description\") >= 0)) {\n return formatError(value);\n }\n if (keys.length === 0) {\n if (isFunction(ctx.stylize)) {\n if (isFunction(value)) {\n const 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.toISOString.call(value), \"date\");\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n else {\n return value;\n }\n }\n let base = \"\";\n let array = false;\n let braces = [\"{\\n\", \"\\n}\"];\n if (Array.isArray(value)) {\n array = true;\n braces = [\"[\\n\", \"\\n]\"];\n }\n if (isFunction(value)) {\n const n = value.name ? \": \" + value.name : \"\";\n base = \" [Function\" + n + \"]\";\n }\n if (isRegExp(value)) {\n base = \" \" + RegExp.prototype.toString.call(value);\n }\n if (isDate(value)) {\n base = \" \" + Date.prototype.toUTCString.call(value);\n }\n if (isError(value)) {\n base = \" \" + formatError(value);\n }\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), \"regexp\");\n }\n else {\n return ctx.stylize(\"[Object]\", \"special\");\n }\n }\n ctx.seen.push(value);\n let output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n }\n else {\n output = keys.map((key) => {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n ctx.seen.pop();\n return reduceToSingleString(output, base, braces);\n}\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n let name, str;\n let desc = { value: void 0 };\n try {\n desc.value = value[key];\n }\n catch (e) {\n }\n try {\n if (Object.getOwnPropertyDescriptor) {\n desc = Object.getOwnPropertyDescriptor(value, key) || desc;\n }\n }\n catch (e) {\n }\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize(\"[Getter/Setter]\", \"special\");\n }\n else {\n str = ctx.stylize(\"[Getter]\", \"special\");\n }\n }\n else {\n if (desc.set) {\n str = ctx.stylize(\"[Setter]\", \"special\");\n }\n }\n if (!hasOwn(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, undefined);\n }\n else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf(\"\\n\") > -1) {\n if (array) {\n str = str\n .split(\"\\n\")\n .map((line) => {\n return \" \" + line;\n })\n .join(\"\\n\")\n .substr(2);\n }\n else {\n str =\n \"\\n\" +\n str\n .split(\"\\n\")\n .map((line) => {\n return \" \" + line;\n })\n .join(\"\\n\");\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.substr(1, name.length - 2);\n name = ctx.stylize(name, \"name\");\n }\n else {\n name = name\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, \"\\\\'\")\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, \"string\");\n }\n }\n return name + \": \" + str;\n}\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize(\"undefined\", \"undefined\");\n if (isString(value)) {\n const simple = \"'\" + JSON.stringify(value).replace(/^\"|\"$/g, \"\").replace(/'/g, \"\\\\'\").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 if (isNull(value))\n return ctx.stylize(\"null\", \"null\");\n}\nfunction reduceToSingleString(output, base, braces) {\n return braces[0] + (base === \"\" ? \"\" : base + \"\\n\") + \" \" + output.join(\",\\n \") + \" \" + braces[1];\n}\nfunction _extend(origin, add) {\n if (!add || !isObject(add))\n return origin;\n const clonedOrigin = { ...origin };\n const clonedAdd = { ...add };\n const keys = Object.keys(add);\n let i = keys.length;\n while (i--) {\n clonedOrigin[keys[i]] = clonedAdd[keys[i]];\n }\n return origin;\n}\nexport function formatWithOptions(inspectOptions, ...args) {\n const ctx = {\n seen: [],\n stylize: stylizeNoColor,\n };\n if (inspectOptions != null) {\n _extend(ctx, inspectOptions);\n }\n const first = args[0];\n let a = 0;\n let str = \"\";\n let join = \"\";\n if (typeof first === \"string\") {\n if (args.length === 1) {\n return first;\n }\n let tempStr;\n let lastPos = 0;\n for (let i = 0; i < first.length - 1; i++) {\n if (first.charCodeAt(i) === 37) {\n const nextChar = first.charCodeAt(++i);\n if (a + 1 !== args.length) {\n switch (nextChar) {\n case 115: {\n const tempArg = args[++a];\n if (typeof tempArg === \"number\") {\n tempStr = formatPrimitive(ctx, tempArg);\n }\n else if (typeof tempArg === \"bigint\") {\n tempStr = formatPrimitive(ctx, tempArg);\n }\n else if (typeof tempArg !== \"object\" || tempArg === null) {\n tempStr = String(tempArg);\n }\n else {\n tempStr = inspect(tempArg, {\n ...inspectOptions,\n compact: 3,\n colors: false,\n depth: 0,\n });\n }\n break;\n }\n case 106:\n tempStr = jsonStringifyRecursive(args[++a]);\n break;\n case 100: {\n const tempNum = args[++a];\n if (typeof tempNum === \"bigint\") {\n tempStr = formatPrimitive(ctx, tempNum);\n }\n else if (typeof tempNum === \"symbol\") {\n tempStr = \"NaN\";\n }\n else {\n tempStr = formatPrimitive(ctx, tempNum);\n }\n break;\n }\n case 79:\n tempStr = inspect(args[++a], inspectOptions);\n break;\n case 111:\n tempStr = inspect(args[++a], {\n ...inspectOptions,\n showHidden: true,\n showProxy: true,\n depth: 4,\n });\n break;\n case 105: {\n const tempInteger = args[++a];\n if (typeof tempInteger === \"bigint\") {\n tempStr = formatPrimitive(ctx, tempInteger);\n }\n else if (typeof tempInteger === \"symbol\") {\n tempStr = \"NaN\";\n }\n else {\n tempStr = formatPrimitive(ctx, parseInt(tempStr));\n }\n break;\n }\n case 102: {\n const tempFloat = args[++a];\n if (typeof tempFloat === \"symbol\") {\n tempStr = \"NaN\";\n }\n else {\n tempStr = formatPrimitive(ctx, parseInt(tempFloat));\n }\n break;\n }\n case 99:\n a += 1;\n tempStr = \"\";\n break;\n case 37:\n str += first.slice(lastPos, i);\n lastPos = i + 1;\n continue;\n default:\n continue;\n }\n if (lastPos !== i - 1) {\n str += first.slice(lastPos, i - 1);\n }\n str += tempStr;\n lastPos = i + 1;\n }\n else if (nextChar === 37) {\n str += first.slice(lastPos, i);\n lastPos = i + 1;\n }\n }\n }\n if (lastPos !== 0) {\n a++;\n join = \" \";\n if (lastPos < first.length) {\n str += first.slice(lastPos);\n }\n }\n }\n while (a < args.length) {\n const value = args[a];\n str += join;\n str += typeof value !== \"string\" ? inspect(value, inspectOptions) : value;\n join = \" \";\n a++;\n }\n return str;\n}\n","import { formatTemplate } from \"../../formatTemplate.js\";\nimport { formatWithOptions } from \"./util.inspect.polyfil.js\";\nimport { jsonStringifyRecursive } from \"./helper.jsonStringifyRecursive.js\";\nexport default {\n getCallerStackFrame,\n getErrorTrace,\n getMeta,\n transportJSON,\n transportFormatted,\n isBuffer,\n isError,\n prettyFormatLogObj,\n prettyFormatErrorObj,\n};\nconst meta = {\n runtime: ![typeof window, typeof document].includes(\"undefined\") ? \"Browser\" : \"Generic\",\n browser: globalThis?.[\"navigator\"]?.userAgent,\n};\nconst pathRegex = /(?:(?:file|https?|global code|[^@]+)@)?(?:file:)?((?:\\/[^:/]+){2,})(?::(\\d+))?(?::(\\d+))?/;\nexport function getMeta(logLevelId, logLevelName, stackDepthLevel, hideLogPositionForPerformance, name, parentNames) {\n return Object.assign({}, meta, {\n name,\n parentNames,\n date: new Date(),\n logLevelId,\n logLevelName,\n path: !hideLogPositionForPerformance ? getCallerStackFrame(stackDepthLevel) : undefined,\n });\n}\nexport function getCallerStackFrame(stackDepthLevel, error = Error()) {\n return stackLineToStackFrame(error?.stack?.split(\"\\n\")?.filter((line) => !line.includes(\"Error: \"))?.[stackDepthLevel]);\n}\nexport function getErrorTrace(error) {\n return error?.stack\n ?.split(\"\\n\")\n ?.filter((line) => !line.includes(\"Error: \"))\n ?.reduce((result, line) => {\n result.push(stackLineToStackFrame(line));\n return result;\n }, []);\n}\nfunction stackLineToStackFrame(line) {\n const href = globalThis?.location?.origin;\n const pathResult = {\n fullFilePath: undefined,\n fileName: undefined,\n fileNameWithLine: undefined,\n fileColumn: undefined,\n fileLine: undefined,\n filePath: undefined,\n filePathWithLine: undefined,\n method: undefined,\n };\n if (line != null) {\n const match = line.match(pathRegex);\n if (match) {\n pathResult.filePath = match[1].replace(/\\?.*$/, \"\");\n pathResult.fullFilePath = `${href}${pathResult.filePath}`;\n const pathParts = pathResult.filePath.split(\"/\");\n pathResult.fileName = pathParts[pathParts.length - 1];\n pathResult.fileLine = match[2];\n pathResult.fileColumn = match[3];\n pathResult.filePathWithLine = `${pathResult.filePath}:${pathResult.fileLine}`;\n pathResult.fileNameWithLine = `${pathResult.fileName}:${pathResult.fileLine}`;\n }\n }\n return pathResult;\n}\nexport function isError(e) {\n return e instanceof Error;\n}\nexport function prettyFormatLogObj(maskedArgs, settings) {\n return maskedArgs.reduce((result, arg) => {\n isError(arg) ? result.errors.push(prettyFormatErrorObj(arg, settings)) : result.args.push(arg);\n return result;\n }, { args: [], errors: [] });\n}\nexport function prettyFormatErrorObj(error, settings) {\n const errorStackStr = getErrorTrace(error).map((stackFrame) => {\n return formatTemplate(settings, settings.prettyErrorStackTemplate, { ...stackFrame }, true);\n });\n const placeholderValuesError = {\n errorName: ` ${error.name} `,\n errorMessage: Object.getOwnPropertyNames(error)\n .reduce((result, key) => {\n if (key !== \"stack\") {\n result.push(error[key]);\n }\n return result;\n }, [])\n .join(\", \"),\n errorStack: errorStackStr.join(\"\\n\"),\n };\n return formatTemplate(settings, settings.prettyErrorTemplate, placeholderValuesError);\n}\nexport function transportFormatted(logMetaMarkup, logArgs, logErrors, settings) {\n const logErrorsStr = (logErrors.length > 0 && logArgs.length > 0 ? \"\\n\" : \"\") + logErrors.join(\"\\n\");\n settings.prettyInspectOptions.colors = settings.stylePrettyLogs;\n console.log(logMetaMarkup + formatWithOptions(settings.prettyInspectOptions, ...logArgs) + logErrorsStr);\n}\nexport function transportJSON(json) {\n console.log(jsonStringifyRecursive(json));\n}\nexport function isBuffer(arg) {\n return arg ? false : false;\n}\n","import { formatTemplate } from \"./formatTemplate.js\";\nimport { formatNumberAddZeros } from \"./formatNumberAddZeros.js\";\nimport { urlToObject } from \"./urlToObj.js\";\nimport Runtime from \"./runtime/nodejs/index.js\";\nexport * from \"./interfaces.js\";\nexport { Runtime };\nexport class BaseLogger {\n constructor(settings, logObj, stackDepthLevel = 4) {\n this.logObj = logObj;\n this.stackDepthLevel = stackDepthLevel;\n this.runtime = Runtime;\n this.settings = {\n type: settings?.type ?? \"pretty\",\n name: settings?.name,\n parentNames: settings?.parentNames,\n minLevel: settings?.minLevel ?? 0,\n argumentsArrayName: settings?.argumentsArrayName,\n hideLogPositionForProduction: settings?.hideLogPositionForProduction ?? false,\n prettyLogTemplate: settings?.prettyLogTemplate ??\n \"{{yyyy}}.{{mm}}.{{dd}} {{hh}}:{{MM}}:{{ss}}:{{ms}}\\t{{logLevelName}}\\t{{filePathWithLine}}{{nameWithDelimiterPrefix}}\\t\",\n prettyErrorTemplate: settings?.prettyErrorTemplate ?? \"\\n{{errorName}} {{errorMessage}}\\nerror stack:\\n{{errorStack}}\",\n prettyErrorStackTemplate: settings?.prettyErrorStackTemplate ?? \" • {{fileName}}\\t{{method}}\\n\\t{{filePathWithLine}}\",\n prettyErrorParentNamesSeparator: settings?.prettyErrorParentNamesSeparator ?? \":\",\n prettyErrorLoggerNameDelimiter: settings?.prettyErrorLoggerNameDelimiter ?? \"\\t\",\n stylePrettyLogs: settings?.stylePrettyLogs ?? true,\n prettyLogTimeZone: settings?.prettyLogTimeZone ?? \"UTC\",\n prettyLogStyles: settings?.prettyLogStyles ?? {\n logLevelName: {\n \"*\": [\"bold\", \"black\", \"bgWhiteBright\", \"dim\"],\n SILLY: [\"bold\", \"white\"],\n TRACE: [\"bold\", \"whiteBright\"],\n DEBUG: [\"bold\", \"green\"],\n INFO: [\"bold\", \"blue\"],\n WARN: [\"bold\", \"yellow\"],\n ERROR: [\"bold\", \"red\"],\n FATAL: [\"bold\", \"redBright\"],\n },\n dateIsoStr: \"white\",\n filePathWithLine: \"white\",\n name: [\"white\", \"bold\"],\n nameWithDelimiterPrefix: [\"white\", \"bold\"],\n nameWithDelimiterSuffix: [\"white\", \"bold\"],\n errorName: [\"bold\", \"bgRedBright\", \"whiteBright\"],\n fileName: [\"yellow\"],\n fileNameWithLine: \"white\",\n },\n prettyInspectOptions: settings?.prettyInspectOptions ?? {\n colors: true,\n compact: false,\n depth: Infinity,\n },\n metaProperty: settings?.metaProperty ?? \"_meta\",\n maskPlaceholder: settings?.maskPlaceholder ?? \"[***]\",\n maskValuesOfKeys: settings?.maskValuesOfKeys ?? [\"password\"],\n maskValuesOfKeysCaseInsensitive: settings?.maskValuesOfKeysCaseInsensitive ?? false,\n maskValuesRegEx: settings?.maskValuesRegEx,\n prefix: [...(settings?.prefix ?? [])],\n attachedTransports: [...(settings?.attachedTransports ?? [])],\n overwrite: {\n mask: settings?.overwrite?.mask,\n toLogObj: settings?.overwrite?.toLogObj,\n addMeta: settings?.overwrite?.addMeta,\n addPlaceholders: settings?.overwrite?.addPlaceholders,\n formatMeta: settings?.overwrite?.formatMeta,\n formatLogObj: settings?.overwrite?.formatLogObj,\n transportFormatted: settings?.overwrite?.transportFormatted,\n transportJSON: settings?.overwrite?.transportJSON,\n },\n };\n }\n log(logLevelId, logLevelName, ...args) {\n if (logLevelId < this.settings.minLevel) {\n return;\n }\n const logArgs = [...this.settings.prefix, ...args];\n const maskedArgs = this.settings.overwrite?.mask != null\n ? this.settings.overwrite?.mask(logArgs)\n : this.settings.maskValuesOfKeys != null && this.settings.maskValuesOfKeys.length > 0\n ? this._mask(logArgs)\n : logArgs;\n const thisLogObj = this.logObj != null ? this._recursiveCloneAndExecuteFunctions(this.logObj) : undefined;\n const logObj = this.settings.overwrite?.toLogObj != null ? this.settings.overwrite?.toLogObj(maskedArgs, thisLogObj) : this._toLogObj(maskedArgs, thisLogObj);\n const logObjWithMeta = this.settings.overwrite?.addMeta != null\n ? this.settings.overwrite?.addMeta(logObj, logLevelId, logLevelName)\n : this._addMetaToLogObj(logObj, logLevelId, logLevelName);\n let logMetaMarkup;\n let logArgsAndErrorsMarkup = undefined;\n if (this.settings.overwrite?.formatMeta != null) {\n logMetaMarkup = this.settings.overwrite?.formatMeta(logObjWithMeta?.[this.settings.metaProperty]);\n }\n if (this.settings.overwrite?.formatLogObj != null) {\n logArgsAndErrorsMarkup = this.settings.overwrite?.formatLogObj(maskedArgs, this.settings);\n }\n if (this.settings.type === \"pretty\") {\n logMetaMarkup = logMetaMarkup ?? this._prettyFormatLogObjMeta(logObjWithMeta?.[this.settings.metaProperty]);\n logArgsAndErrorsMarkup = logArgsAndErrorsMarkup ?? this.runtime.prettyFormatLogObj(maskedArgs, this.settings);\n }\n if (logMetaMarkup != null && logArgsAndErrorsMarkup != null) {\n this.settings.overwrite?.transportFormatted != null\n ? this.settings.overwrite?.transportFormatted(logMetaMarkup, logArgsAndErrorsMarkup.args, logArgsAndErrorsMarkup.errors, this.settings)\n : this.runtime.transportFormatted(logMetaMarkup, logArgsAndErrorsMarkup.args, logArgsAndErrorsMarkup.errors, this.settings);\n }\n else {\n this.settings.overwrite?.transportJSON != null\n ? this.settings.overwrite?.transportJSON(logObjWithMeta)\n : this.settings.type !== \"hidden\"\n ? this.runtime.transportJSON(logObjWithMeta)\n : undefined;\n }\n if (this.settings.attachedTransports != null && this.settings.attachedTransports.length > 0) {\n this.settings.attachedTransports.forEach((transportLogger) => {\n transportLogger(logObjWithMeta);\n });\n }\n return logObjWithMeta;\n }\n attachTransport(transportLogger) {\n this.settings.attachedTransports.push(transportLogger);\n }\n getSubLogger(settings, logObj) {\n const subLoggerSettings = {\n ...this.settings,\n ...settings,\n parentNames: this.settings?.parentNames != null && this.settings?.name != null\n ? [...this.settings.parentNames, this.settings.name]\n : this.settings?.name != null\n ? [this.settings.name]\n : undefined,\n prefix: [...this.settings.prefix, ...(settings?.prefix ?? [])],\n };\n const subLogger = new this.constructor(subLoggerSettings, logObj ?? this.logObj, this.stackDepthLevel);\n return subLogger;\n }\n _mask(args) {\n const maskValuesOfKeys = this.settings.maskValuesOfKeysCaseInsensitive !== true ? this.settings.maskValuesOfKeys : this.settings.maskValuesOfKeys.map((key) => key.toLowerCase());\n return args?.map((arg) => {\n return this._recursiveCloneAndMaskValuesOfKeys(arg, maskValuesOfKeys);\n });\n }\n _recursiveCloneAndMaskValuesOfKeys(source, keys, seen = []) {\n if (seen.includes(source)) {\n return { ...source };\n }\n if (typeof source === \"object\" && source !== null) {\n seen.push(source);\n }\n if (this.runtime.isError(source) || this.runtime.isBuffer(source)) {\n return source;\n }\n else if (source instanceof Map) {\n return new Map(source);\n }\n else if (source instanceof Set) {\n return new Set(source);\n }\n else if (Array.isArray(source)) {\n return source.map((item) => this._recursiveCloneAndMaskValuesOfKeys(item, keys, seen));\n }\n else if (source instanceof Date) {\n return new Date(source.getTime());\n }\n else if (source instanceof URL) {\n return urlToObject(source);\n }\n else if (source !== null && typeof source === \"object\") {\n const baseObject = this.runtime.isError(source) ? this._cloneError(source) : Object.create(Object.getPrototypeOf(source));\n return Object.getOwnPropertyNames(source).reduce((o, prop) => {\n o[prop] = keys.includes(this.settings?.maskValuesOfKeysCaseInsensitive !== true ? prop : prop.toLowerCase())\n ? this.settings.maskPlaceholder\n : this._recursiveCloneAndMaskValuesOfKeys(source[prop], keys, seen);\n return o;\n }, baseObject);\n }\n else {\n if (typeof source === \"string\") {\n let modifiedSource = source;\n for (const regEx of this.settings?.maskValuesRegEx || []) {\n modifiedSource = modifiedSource.replace(regEx, this.settings?.maskPlaceholder || \"\");\n }\n return modifiedSource;\n }\n return source;\n }\n }\n _recursiveCloneAndExecuteFunctions(source, seen = []) {\n if (this.isObjectOrArray(source) && seen.includes(source)) {\n return this.shallowCopy(source);\n }\n if (this.isObjectOrArray(source)) {\n seen.push(source);\n }\n if (Array.isArray(source)) {\n return source.map((item) => this._recursiveCloneAndExecuteFunctions(item, seen));\n }\n else if (source instanceof Date) {\n return new Date(source.getTime());\n }\n else if (this.isObject(source)) {\n return Object.getOwnPropertyNames(source).reduce((o, prop) => {\n const descriptor = Object.getOwnPropertyDescriptor(source, prop);\n if (descriptor) {\n Object.defineProperty(o, prop, descriptor);\n const value = source[prop];\n o[prop] = typeof value === \"function\" ? value() : this._recursiveCloneAndExecuteFunctions(value, seen);\n }\n return o;\n }, Object.create(Object.getPrototypeOf(source)));\n }\n else {\n return source;\n }\n }\n isObjectOrArray(value) {\n return typeof value === \"object\" && value !== null;\n }\n isObject(value) {\n return typeof value === \"object\" && !Array.isArray(value) && value !== null;\n }\n shallowCopy(source) {\n if (Array.isArray(source)) {\n return [...source];\n }\n else {\n return { ...source };\n }\n }\n _toLogObj(args, clonedLogObj = {}) {\n args = args?.map((arg) => (this.runtime.isError(arg) ? this._toErrorObject(arg) : arg));\n if (this.settings.argumentsArrayName == null) {\n if (args.length === 1 && !Array.isArray(args[0]) && this.runtime.isBuffer(args[0]) !== true && !(args[0] instanceof Date)) {\n clonedLogObj = typeof args[0] === \"object\" && args[0] != null ? { ...args[0], ...clonedLogObj } : { 0: args[0], ...clonedLogObj };\n }\n else {\n clonedLogObj = { ...clonedLogObj, ...args };\n }\n }\n else {\n clonedLogObj = {\n ...clonedLogObj,\n [this.settings.argumentsArrayName]: args,\n };\n }\n return clonedLogObj;\n }\n _cloneError(error) {\n const cloned = new error.constructor();\n Object.getOwnPropertyNames(error).forEach((key) => {\n cloned[key] = error[key];\n });\n return cloned;\n }\n _toErrorObject(error) {\n return {\n nativeError: error,\n name: error.name ?? \"Error\",\n message: error.message,\n stack: this.runtime.getErrorTrace(error),\n };\n }\n _addMetaToLogObj(logObj, logLevelId, logLevelName) {\n return {\n ...logObj,\n [this.settings.metaProperty]: this.runtime.getMeta(logLevelId, logLevelName, this.stackDepthLevel, this.settings.hideLogPositionForProduction, this.settings.name, this.settings.parentNames),\n };\n }\n _prettyFormatLogObjMeta(logObjMeta) {\n if (logObjMeta == null) {\n return \"\";\n }\n let template = this.settings.prettyLogTemplate;\n const placeholderValues = {};\n if (template.includes(\"{{yyyy}}.{{mm}}.{{dd}} {{hh}}:{{MM}}:{{ss}}:{{ms}}\")) {\n template = template.replace(\"{{yyyy}}.{{mm}}.{{dd}} {{hh}}:{{MM}}:{{ss}}:{{ms}}\", \"{{dateIsoStr}}\");\n }\n else {\n if (this.settings.prettyLogTimeZone === \"UTC\") {\n placeholderValues[\"yyyy\"] = logObjMeta?.date?.getUTCFullYear() ?? \"----\";\n placeholderValues[\"mm\"] = formatNumberAddZeros(logObjMeta?.date?.getUTCMonth(), 2, 1);\n placeholderValues[\"dd\"] = formatNumberAddZeros(logObjMeta?.date?.getUTCDate(), 2);\n placeholderValues[\"hh\"] = formatNumberAddZeros(logObjMeta?.date?.getUTCHours(), 2);\n placeholderValues[\"MM\"] = formatNumberAddZeros(logObjMeta?.date?.getUTCMinutes(), 2);\n placeholderValues[\"ss\"] = formatNumberAddZeros(logObjMeta?.date?.getUTCSeconds(), 2);\n placeholderValues[\"ms\"] = formatNumberAddZeros(logObjMeta?.date?.getUTCMilliseconds(), 3);\n }\n else {\n placeholderValues[\"yyyy\"] = logObjMeta?.date?.getFullYear() ?? \"----\";\n placeholderValues[\"mm\"] = formatNumberAddZeros(logObjMeta?.date?.getMonth(), 2, 1);\n placeholderValues[\"dd\"] = formatNumberAddZeros(logObjMeta?.date?.getDate(), 2);\n placeholderValues[\"hh\"] = formatNumberAddZeros(logObjMeta?.date?.getHours(), 2);\n placeholderValues[\"MM\"] = formatNumberAddZeros(logObjMeta?.date?.getMinutes(), 2);\n placeholderValues[\"ss\"] = formatNumberAddZeros(logObjMeta?.date?.getSeconds(), 2);\n placeholderValues[\"ms\"] = formatNumberAddZeros(logObjMeta?.date?.getMilliseconds(), 3);\n }\n }\n const dateInSettingsTimeZone = this.settings.prettyLogTimeZone === \"UTC\" ? logObjMeta?.date : new Date(logObjMeta?.date?.getTime() - logObjMeta?.date?.getTimezoneOffset() * 60000);\n placeholderValues[\"rawIsoStr\"] = dateInSettingsTimeZone?.toISOString();\n placeholderValues[\"dateIsoStr\"] = dateInSettingsTimeZone?.toISOString().replace(\"T\", \" \").replace(\"Z\", \"\");\n placeholderValues[\"logLevelName\"] = logObjMeta?.logLevelName;\n placeholderValues[\"fileNameWithLine\"] = logObjMeta?.path?.fileNameWithLine ?? \"\";\n placeholderValues[\"filePathWithLine\"] = logObjMeta?.path?.filePathWithLine ?? \"\";\n placeholderValues[\"fullFilePath\"] = logObjMeta?.path?.fullFilePath ?? \"\";\n let parentNamesString = this.settings.parentNames?.join(this.settings.prettyErrorParentNamesSeparator);\n parentNamesString = parentNamesString != null && logObjMeta?.name != null ? parentNamesString + this.settings.prettyErrorParentNamesSeparator : undefined;\n placeholderValues[\"name\"] = logObjMeta?.name != null || parentNamesString != null ? (parentNamesString ?? \"\") + logObjMeta?.name ?? \"\" : \"\";\n placeholderValues[\"nameWithDelimiterPrefix\"] =\n placeholderValues[\"name\"].length > 0 ? this.settings.prettyErrorLoggerNameDelimiter + placeholderValues[\"name\"] : \"\";\n placeholderValues[\"nameWithDelimiterSuffix\"] =\n placeholderValues[\"name\"].length > 0 ? placeholderValues[\"name\"] + this.settings.prettyErrorLoggerNameDelimiter : \"\";\n if (this.settings.overwrite?.addPlaceholders != null) {\n this.settings.overwrite?.addPlaceholders(logObjMeta, placeholderValues);\n }\n return formatTemplate(this.settings, template, placeholderValues);\n }\n}\n","import { BaseLogger } from \"./BaseLogger.js\";\nexport * from \"./interfaces.js\";\nexport * from \"./BaseLogger.js\";\nexport class Logger extends BaseLogger {\n constructor(settings, logObj) {\n const isBrowser = typeof window !== \"undefined\" && typeof document !== \"undefined\";\n const isBrowserBlinkEngine = isBrowser ? window.chrome !== undefined && window.CSS !== undefined && window.CSS.supports(\"color\", \"green\") : false;\n const isSafari = isBrowser ? /^((?!chrome|android).)*safari/i.test(navigator.userAgent) : false;\n settings = settings || {};\n settings.stylePrettyLogs = settings.stylePrettyLogs && isBrowser && !isBrowserBlinkEngine ? false : settings.stylePrettyLogs;\n super(settings, logObj, isSafari ? 4 : 5);\n }\n log(logLevelId, logLevelName, ...args) {\n return super.log(logLevelId, logLevelName, ...args);\n }\n silly(...args) {\n return super.log(0, \"SILLY\", ...args);\n }\n trace(...args) {\n return super.log(1, \"TRACE\", ...args);\n }\n debug(...args) {\n return super.log(2, \"DEBUG\", ...args);\n }\n info(...args) {\n return super.log(3, \"INFO\", ...args);\n }\n warn(...args) {\n return super.log(4, \"WARN\", ...args);\n }\n error(...args) {\n return super.log(5, \"ERROR\", ...args);\n }\n fatal(...args) {\n return super.log(6, \"FATAL\", ...args);\n }\n getSubLogger(settings, logObj) {\n return super.getSubLogger(settings, logObj);\n }\n}\n","import {Logger, type ILogObj} from 'tslog';\nimport {isFirefox} from '../utils/browser/isFirefox';\n\n/**\n * Default logger instance\n *\n * @example\n * logger.info('foo');\n */\nexport const logger = new Logger<ILogObj>({\n\thideLogPositionForProduction: true,\n\tmaskValuesOfKeysCaseInsensitive: true,\n\tminLevel: process.env.NODE_ENV === 'development' ? 0 : 3,\n\ttype: 'pretty',\n\t// https://github.com/fullstack-build/tslog/issues/262\n\t// https://bugzilla.mozilla.org/show_bug.cgi?id=1720116\n\tstylePrettyLogs: !isFirefox(),\n});\n\nconst separator = '>';\n\n/**\n * Get a prefixed logger\n * @param prefix What to prefix any logging with\n * @returns A logger with the provided prefix\n *\n * @example\n * const logger = getPrefixedLogger('foo bar');\n * logger.info('baz'); // 'foo bar > baz'\n */\nexport const getPrefixedLogger = (prefix: string) => {\n\treturn {\n\t\tdebug: (...args: any[]) =>\n\t\t\tlogger.debug.apply(logger, [prefix, separator, ...args]),\n\t\terror: (...args: any[]) =>\n\t\t\tlogger.error.apply(logger, [prefix, separator, ...args]),\n\t\tfatal: (...args: any[]) =>\n\t\t\tlogger.fatal.apply(logger, [prefix, separator, ...args]),\n\t\tinfo: (...args: any[]) =>\n\t\t\tlogger.info.apply(logger, [prefix, separator, ...args]),\n\t\tsilly: (...args: any[]) =>\n\t\t\tlogger.silly.apply(logger, [prefix, separator, ...args]),\n\t\ttrace: (...args: any[]) =>\n\t\t\tlogger.trace.apply(logger, [prefix, separator, ...args]),\n\t\twarn: (...args: any[]) =>\n\t\t\tlogger.warn.apply(logger, [prefix, separator, ...args]),\n\t};\n};\n","import Router from '@netx/core/lib/netx-routers-app';\n\n/**\n * App router instance\n */\nexport const appRouter = new Router();\nappRouter.routes = {};\n\nexport default appRouter;\n","/**\n * Supported languages\n */\nexport enum I18nLanguage {\n\tDE = 'de',\n\tEN = 'en',\n\tFR = 'fr',\n\tJA = 'ja',\n}\n\n// TODO: this is related to how these are referenced in the locales sheet\n/**\n * Supported locales as directly referenced in the locales sheet\n */\nexport enum I18nSupportedLocale {\n\tENGLISH = 'en-US',\n\tFRENCH = 'fr-FR',\n\tGERMAN = 'de-DE',\n\tJAPANESE = 'ja-JP',\n}\n\n/**\n * A map of language to its aliases\n */\nexport const I18N_LANGUAGE_ALIASES: Record<I18nLanguage, string[]> = {\n\t[I18nLanguage.DE]: ['de-DE', 'de'],\n\t[I18nLanguage.EN]: ['en-US', 'en'],\n\t[I18nLanguage.FR]: ['fr-CA', 'fr-FR', 'fr'],\n\t[I18nLanguage.JA]: ['ja-JP', 'jp-JP', 'ja'],\n};\n\n/**\n * A list of all supported languages\n */\nexport const I18N_SUPPORTED_LANGUAGES = Object.values(I18N_LANGUAGE_ALIASES)\n\t.flat()\n\t// this allows for no translation in storybook\n\t.concat(['none']);\n","import window from 'global/window';\nimport i18next, {type InitOptions} from 'i18next';\n\nwindow.i18n = window.i18next = i18next;\n// @ts-ignore\nif (globalThis) globalThis.i18n = globalThis.i18next = i18next;\n\nimport i18nextXHRBackend, {type BackendOptions} from 'i18next-xhr-backend';\nimport i18nextBrowserLanguageDetector from 'i18next-browser-languagedetector';\n// @ts-ignore\nimport jqueryI18next from 'jquery-i18next';\nimport {getPrefixedLogger} from '@netx/core-next/instance/logger';\nimport {dispatcher} from '@netx/core-next/instance/dispatcher';\n// importing with full path for webpack/storybook alias support\nimport {backendOptions} from '@netx/core-next/locales/backend';\nimport {I18N_SUPPORTED_LANGUAGES} from './constants';\n\nconst logger = getPrefixedLogger('i18n');\n\n/**\n * Is i18n ready?\n */\nexport let i18nReady: Readonly<boolean> = false;\n\nlet resolver: () => void;\nlet rejector: (reason?: any) => void;\nexport const i18nInitialized = new Promise<void>((resolve, reject) => {\n\tresolver = resolve;\n\trejector = reject;\n});\n\n/**\n * i18next instance\n * @see https://www.i18next.com/\n */\nexport const i18n = i18next;\n\n/**\n * Initialize i18next\n * @returns i18next instance\n */\nexport const initializeI18n = () => {\n\tlogger.info('initializing');\n\n\treturn new Promise((resolve, reject) => {\n\t\t// TODO: make external file for easy overriding in things like storybook\n\t\tconst options: InitOptions<BackendOptions> = {\n\t\t\t// TODO: update translation files to be i18next JSON structure v3\n\t\t\tcompatibilityJSON: 'v1',\n\t\t\tinterpolation: {\n\t\t\t\tprefix: '__',\n\t\t\t\tsuffix: '__',\n\t\t\t\tescapeValue: false,\n\t\t\t},\n\t\t\tbackend: backendOptions,\n\t\t\tsupportedLngs: I18N_SUPPORTED_LANGUAGES,\n\t\t\tfallbackLng: false,\n\t\t\t// missingKeyNoValueFallbackToKey: true,\n\t\t\tload: 'currentOnly',\n\t\t\tns: ['translation'],\n\t\t\tdefaultNS: 'translation',\n\t\t\tdetection: {\n\t\t\t\torder: ['localStorage', 'navigator', 'htmlTag'],\n\t\t\t\tlookupLocalStorage: 'locale',\n\t\t\t\tcaches: ['localStorage'],\n\t\t\t},\n\t\t};\n\n\t\ti18next\n\t\t\t.use(i18nextXHRBackend)\n\t\t\t.use(i18nextBrowserLanguageDetector)\n\t\t\t.init(options, (error, instance) => {\n\t\t\t\t// ugh... backbone views\n\t\t\t\tjqueryI18next.init(i18next, $, {\n\t\t\t\t\t// appends $.t = i18next.t\n\t\t\t\t\ttName: 't',\n\t\t\t\t\t// appends $.i18n = i18next\n\t\t\t\t\ti18nName: 'i18n',\n\t\t\t\t\t// appends $(selector).localize(opts);\n\t\t\t\t\thandleName: 'localize',\n\t\t\t\t\t// selector for translating elements\n\t\t\t\t\tselectorAttr: 'data-i18n',\n\t\t\t\t\t// data-() attribute to grab target element to translate (if diffrent then itself)\n\t\t\t\t\ttargetAttr: 'i18n-target',\n\t\t\t\t\t// data-() attribute that contains options, will load/set if useOptionsAttr = true\n\t\t\t\t\toptionsAttr: 'i18n-options',\n\t\t\t\t\t// see optionsAttr\n\t\t\t\t\tuseOptionsAttr: false,\n\t\t\t\t\t// parses default values from content ele.val or ele.text\n\t\t\t\t\tparseDefaultValueFromContent: true,\n\t\t\t\t});\n\n\t\t\t\tif (error) {\n\t\t\t\t\ti18nReady = true;\n\t\t\t\t\trejector();\n\t\t\t\t\tlogger.error('failed');\n\t\t\t\t\treturn reject(error);\n\t\t\t\t}\n\n\t\t\t\t// Set on html tag\n\t\t\t\tdocument.documentElement.setAttribute('lang', i18next.language);\n\n\t\t\t\ti18nReady = true;\n\t\t\t\tlogger.info('initialized', i18next.language);\n\n\t\t\t\tdispatcher.trigger('app:i18n:ready');\n\t\t\t\t// i18n.on('languageChanged', (lng) => {\n\t\t\t\t// \tdocument.documentElement.setAttribute('lang', lng);\n\t\t\t\t// \tdispatcher.trigger('app:i18n:languageChanged', lng);\n\t\t\t\t// });\n\t\t\t\tresolve(i18next);\n\t\t\t\tresolver();\n\t\t\t});\n\t});\n};\n\nexport default i18next;\n","const consoleLogger = {\n type: 'logger',\n log(args) {\n this.output('log', args);\n },\n warn(args) {\n this.output('warn', args);\n },\n error(args) {\n this.output('error', args);\n },\n output(type, args) {\n if (console && console[type]) console[type].apply(console, args);\n }\n};\nclass Logger {\n constructor(concreteLogger) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.init(concreteLogger, options);\n }\n init(concreteLogger) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.prefix = options.prefix || 'i18next:';\n this.logger = concreteLogger || consoleLogger;\n this.options = options;\n this.debug = options.debug;\n }\n log() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return this.forward(args, 'log', '', true);\n }\n warn() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n return this.forward(args, 'warn', '', true);\n }\n error() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n return this.forward(args, 'error', '');\n }\n deprecate() {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true);\n }\n forward(args, lvl, prefix, debugOnly) {\n if (debugOnly && !this.debug) return null;\n if (typeof args[0] === 'string') args[0] = `${prefix}${this.prefix} ${args[0]}`;\n return this.logger[lvl](args);\n }\n create(moduleName) {\n return new Logger(this.logger, {\n ...{\n prefix: `${this.prefix}:${moduleName}:`\n },\n ...this.options\n });\n }\n clone(options) {\n options = options || this.options;\n options.prefix = options.prefix || this.prefix;\n return new Logger(this.logger, options);\n }\n}\nvar baseLogger = new Logger();\n\nclass EventEmitter {\n constructor() {\n this.observers = {};\n }\n on(events, listener) {\n events.split(' ').forEach(event => {\n this.observers[event] = this.observers[event] || [];\n this.observers[event].push(listener);\n });\n return this;\n }\n off(event, listener) {\n if (!this.observers[event]) return;\n if (!listener) {\n delete this.observers[event];\n return;\n }\n this.observers[event] = this.observers[event].filter(l => l !== listener);\n }\n emit(event) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n if (this.observers[event]) {\n const cloned = [].concat(this.observers[event]);\n cloned.forEach(observer => {\n observer(...args);\n });\n }\n if (this.observers['*']) {\n const cloned = [].concat(this.observers['*']);\n cloned.forEach(observer => {\n observer.apply(observer, [event, ...args]);\n });\n }\n }\n}\n\nfunction defer() {\n let res;\n let rej;\n const promise = new Promise((resolve, reject) => {\n res = resolve;\n rej = reject;\n });\n promise.resolve = res;\n promise.reject = rej;\n return promise;\n}\nfunction makeString(object) {\n if (object == null) return '';\n return '' + object;\n}\nfunction copy(a, s, t) {\n a.forEach(m => {\n if (s[m]) t[m] = s[m];\n });\n}\nfunction getLastOfPath(object, path, Empty) {\n function cleanKey(key) {\n return key && key.indexOf('###') > -1 ? key.replace(/###/g, '.') : key;\n }\n function canNotTraverseDeeper() {\n return !object || typeof object === 'string';\n }\n const stack = typeof path !== 'string' ? [].concat(path) : path.split('.');\n while (stack.length > 1) {\n if (canNotTraverseDeeper()) return {};\n const key = cleanKey(stack.shift());\n if (!object[key] && Empty) object[key] = new Empty();\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n object = object[key];\n } else {\n object = {};\n }\n }\n if (canNotTraverseDeeper()) return {};\n return {\n obj: object,\n k: cleanKey(stack.shift())\n };\n}\nfunction setPath(object, path, newValue) {\n const {\n obj,\n k\n } = getLastOfPath(object, path, Object);\n obj[k] = newValue;\n}\nfunction pushPath(object, path, newValue, concat) {\n const {\n obj,\n k\n } = getLastOfPath(object, path, Object);\n obj[k] = obj[k] || [];\n if (concat) obj[k] = obj[k].concat(newValue);\n if (!concat) obj[k].push(newValue);\n}\nfunction getPath(object, path) {\n const {\n obj,\n k\n } = getLastOfPath(object, path);\n if (!obj) return undefined;\n return obj[k];\n}\nfunction getPathWithDefaults(data, defaultData, key) {\n const value = getPath(data, key);\n if (value !== undefined) {\n return value;\n }\n return getPath(defaultData, key);\n}\nfunction deepExtend(target, source, overwrite) {\n for (const prop in source) {\n if (prop !== '__proto__' && prop !== 'constructor') {\n if (prop in target) {\n if (typeof target[prop] === 'string' || target[prop] instanceof String || typeof source[prop] === 'string' || source[prop] instanceof String) {\n if (overwrite) target[prop] = source[prop];\n } else {\n deepExtend(target[prop], source[prop], overwrite);\n }\n } else {\n target[prop] = source[prop];\n }\n }\n }\n return target;\n}\nfunction regexEscape(str) {\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n}\nvar _entityMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n};\nfunction escape(data) {\n if (typeof data === 'string') {\n return data.replace(/[&<>\"'\\/]/g, s => _entityMap[s]);\n }\n return data;\n}\nconst chars = [' ', ',', '?', '!', ';'];\nfunction looksLikeObjectPath(key, nsSeparator, keySeparator) {\n nsSeparator = nsSeparator || '';\n keySeparator = keySeparator || '';\n const possibleChars = chars.filter(c => nsSeparator.indexOf(c) < 0 && keySeparator.indexOf(c) < 0);\n if (possibleChars.length === 0) return true;\n const r = new RegExp(`(${possibleChars.map(c => c === '?' ? '\\\\?' : c).join('|')})`);\n let matched = !r.test(key);\n if (!matched) {\n const ki = key.indexOf(keySeparator);\n if (ki > 0 && !r.test(key.substring(0, ki))) {\n matched = true;\n }\n }\n return matched;\n}\nfunction deepFind(obj, path) {\n let keySeparator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '.';\n if (!obj) return undefined;\n if (obj[path]) return obj[path];\n const paths = path.split(keySeparator);\n let current = obj;\n for (let i = 0; i < paths.length; ++i) {\n if (!current) return undefined;\n if (typeof current[paths[i]] === 'string' && i + 1 < paths.length) {\n return undefined;\n }\n if (current[paths[i]] === undefined) {\n let j = 2;\n let p = paths.slice(i, i + j).join(keySeparator);\n let mix = current[p];\n while (mix === undefined && paths.length > i + j) {\n j++;\n p = paths.slice(i, i + j).join(keySeparator);\n mix = current[p];\n }\n if (mix === undefined) return undefined;\n if (mix === null) return null;\n if (path.endsWith(p)) {\n if (typeof mix === 'string') return mix;\n if (p && typeof mix[p] === 'string') return mix[p];\n }\n const joinedPath = paths.slice(i + j).join(keySeparator);\n if (joinedPath) return deepFind(mix, joinedPath, keySeparator);\n return undefined;\n }\n current = current[paths[i]];\n }\n return current;\n}\nfunction getCleanedCode(code) {\n if (code && code.indexOf('_') > 0) return code.replace('_', '-');\n return code;\n}\n\nclass ResourceStore extends EventEmitter {\n constructor(data) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n ns: ['translation'],\n defaultNS: 'translation'\n };\n super();\n this.data = data || {};\n this.options = options;\n if (this.options.keySeparator === undefined) {\n this.options.keySeparator = '.';\n }\n if (this.options.ignoreJSONStructure === undefined) {\n this.options.ignoreJSONStructure = true;\n }\n }\n addNamespaces(ns) {\n if (this.options.ns.indexOf(ns) < 0) {\n this.options.ns.push(ns);\n }\n }\n removeNamespaces(ns) {\n const index = this.options.ns.indexOf(ns);\n if (index > -1) {\n this.options.ns.splice(index, 1);\n }\n }\n getResource(lng, ns, key) {\n let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n const ignoreJSONStructure = options.ignoreJSONStructure !== undefined ? options.ignoreJSONStructure : this.options.ignoreJSONStructure;\n let path = [lng, ns];\n if (key && typeof key !== 'string') path = path.concat(key);\n if (key && typeof key === 'string') path = path.concat(keySeparator ? key.split(keySeparator) : key);\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n }\n const result = getPath(this.data, path);\n if (result || !ignoreJSONStructure || typeof key !== 'string') return result;\n return deepFind(this.data && this.data[lng] && this.data[lng][ns], key, keySeparator);\n }\n addResource(lng, ns, key, value) {\n let options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n silent: false\n };\n const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n let path = [lng, ns];\n if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n value = ns;\n ns = path[1];\n }\n this.addNamespaces(ns);\n setPath(this.data, path, value);\n if (!options.silent) this.emit('added', lng, ns, key, value);\n }\n addResources(lng, ns, resources) {\n let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {\n silent: false\n };\n for (const m in resources) {\n if (typeof resources[m] === 'string' || Object.prototype.toString.apply(resources[m]) === '[object Array]') this.addResource(lng, ns, m, resources[m], {\n silent: true\n });\n }\n if (!options.silent) this.emit('added', lng, ns, resources);\n }\n addResourceBundle(lng, ns, resources, deep, overwrite) {\n let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {\n silent: false\n };\n let path = [lng, ns];\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n deep = resources;\n resources = ns;\n ns = path[1];\n }\n this.addNamespaces(ns);\n let pack = getPath(this.data, path) || {};\n if (deep) {\n deepExtend(pack, resources, overwrite);\n } else {\n pack = {\n ...pack,\n ...resources\n };\n }\n setPath(this.data, path, pack);\n if (!options.silent) this.emit('added', lng, ns, resources);\n }\n removeResourceBundle(lng, ns) {\n if (this.hasResourceBundle(lng, ns)) {\n delete this.data[lng][ns];\n }\n this.removeNamespaces(ns);\n this.emit('removed', lng, ns);\n }\n hasResourceBundle(lng, ns) {\n return this.getResource(lng, ns) !== undefined;\n }\n getResourceBundle(lng, ns) {\n if (!ns) ns = this.options.defaultNS;\n if (this.options.compatibilityAPI === 'v1') return {\n ...{},\n ...this.getResource(lng, ns)\n };\n return this.getResource(lng, ns);\n }\n getDataByLanguage(lng) {\n return this.data[lng];\n }\n hasLanguageSomeTranslations(lng) {\n const data = this.getDataByLanguage(lng);\n const n = data && Object.keys(data) || [];\n return !!n.find(v => data[v] && Object.keys(data[v]).length > 0);\n }\n toJSON() {\n return this.data;\n }\n}\n\nvar postProcessor = {\n processors: {},\n addPostProcessor(module) {\n this.processors[module.name] = module;\n },\n handle(processors, value, key, options, translator) {\n processors.forEach(processor => {\n if (this.processors[processor]) value = this.processors[processor].process(value, key, options, translator);\n });\n return value;\n }\n};\n\nconst checkedLoadedFor = {};\nclass Translator extends EventEmitter {\n constructor(services) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super();\n copy(['resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector', 'i18nFormat', 'utils'], services, this);\n this.options = options;\n if (this.options.keySeparator === undefined) {\n this.options.keySeparator = '.';\n }\n this.logger = baseLogger.create('translator');\n }\n changeLanguage(lng) {\n if (lng) this.language = lng;\n }\n exists(key) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n interpolation: {}\n };\n if (key === undefined || key === null) {\n return false;\n }\n const resolved = this.resolve(key, options);\n return resolved && resolved.res !== undefined;\n }\n extractFromKey(key, options) {\n let nsSeparator = options.nsSeparator !== undefined ? options.nsSeparator : this.options.nsSeparator;\n if (nsSeparator === undefined) nsSeparator = ':';\n const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n let namespaces = options.ns || this.options.defaultNS || [];\n const wouldCheckForNsInKey = nsSeparator && key.indexOf(nsSeparator) > -1;\n const seemsNaturalLanguage = !this.options.userDefinedKeySeparator && !options.keySeparator && !this.options.userDefinedNsSeparator && !options.nsSeparator && !looksLikeObjectPath(key, nsSeparator, keySeparator);\n if (wouldCheckForNsInKey && !seemsNaturalLanguage) {\n const m = key.match(this.interpolator.nestingRegexp);\n if (m && m.length > 0) {\n return {\n key,\n namespaces\n };\n }\n const parts = key.split(nsSeparator);\n if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.indexOf(parts[0]) > -1) namespaces = parts.shift();\n key = parts.join(keySeparator);\n }\n if (typeof namespaces === 'string') namespaces = [namespaces];\n return {\n key,\n namespaces\n };\n }\n translate(keys, options, lastKey) {\n if (typeof options !== 'object' && this.options.overloadTranslationOptionHandler) {\n options = this.options.overloadTranslationOptionHandler(arguments);\n }\n if (typeof options === 'object') options = {\n ...options\n };\n if (!options) options = {};\n if (keys === undefined || keys === null) return '';\n if (!Array.isArray(keys)) keys = [String(keys)];\n const returnDetails = options.returnDetails !== undefined ? options.returnDetails : this.options.returnDetails;\n const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n const {\n key,\n namespaces\n } = this.extractFromKey(keys[keys.length - 1], options);\n const namespace = namespaces[namespaces.length - 1];\n const lng = options.lng || this.language;\n const appendNamespaceToCIMode = options.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;\n if (lng && lng.toLowerCase() === 'cimode') {\n if (appendNamespaceToCIMode) {\n const nsSeparator = options.nsSeparator || this.options.nsSeparator;\n if (returnDetails) {\n return {\n res: `${namespace}${nsSeparator}${key}`,\n usedKey: key,\n exactUsedKey: key,\n usedLng: lng,\n usedNS: namespace,\n usedParams: this.getUsedParamsDetails(options)\n };\n }\n return `${namespace}${nsSeparator}${key}`;\n }\n if (returnDetails) {\n return {\n res: key,\n usedKey: key,\n exactUsedKey: key,\n usedLng: lng,\n usedNS: namespace,\n usedParams: this.getUsedParamsDetails(options)\n };\n }\n return key;\n }\n const resolved = this.resolve(keys, options);\n let res = resolved && resolved.res;\n const resUsedKey = resolved && resolved.usedKey || key;\n const resExactUsedKey = resolved && resolved.exactUsedKey || key;\n const resType = Object.prototype.toString.apply(res);\n const noObject = ['[object Number]', '[object Function]', '[object RegExp]'];\n const joinArrays = options.joinArrays !== undefined ? options.joinArrays : this.options.joinArrays;\n const handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject;\n const handleAsObject = typeof res !== 'string' && typeof res !== 'boolean' && typeof res !== 'number';\n if (handleAsObjectInI18nFormat && res && handleAsObject && noObject.indexOf(resType) < 0 && !(typeof joinArrays === 'string' && resType === '[object Array]')) {\n if (!options.returnObjects && !this.options.returnObjects) {\n if (!this.options.returnedObjectHandler) {\n this.logger.warn('accessing an object - but returnObjects options is not enabled!');\n }\n const r = this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, res, {\n ...options,\n ns: namespaces\n }) : `key '${key} (${this.language})' returned an object instead of string.`;\n if (returnDetails) {\n resolved.res = r;\n resolved.usedParams = this.getUsedParamsDetails(options);\n return resolved;\n }\n return r;\n }\n if (keySeparator) {\n const resTypeIsArray = resType === '[object Array]';\n const copy = resTypeIsArray ? [] : {};\n const newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey;\n for (const m in res) {\n if (Object.prototype.hasOwnProperty.call(res, m)) {\n const deepKey = `${newKeyToUse}${keySeparator}${m}`;\n copy[m] = this.translate(deepKey, {\n ...options,\n ...{\n joinArrays: false,\n ns: namespaces\n }\n });\n if (copy[m] === deepKey) copy[m] = res[m];\n }\n }\n res = copy;\n }\n } else if (handleAsObjectInI18nFormat && typeof joinArrays === 'string' && resType === '[object Array]') {\n res = res.join(joinArrays);\n if (res) res = this.extendTranslation(res, keys, options, lastKey);\n } else {\n let usedDefault = false;\n let usedKey = false;\n const needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n const hasDefaultValue = Translator.hasDefaultValue(options);\n const defaultValueSuffix = needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count, options) : '';\n const defaultValueSuffixOrdinalFallback = options.ordinal && needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count, {\n ordinal: false\n }) : '';\n const defaultValue = options[`defaultValue${defaultValueSuffix}`] || options[`defaultValue${defaultValueSuffixOrdinalFallback}`] || options.defaultValue;\n if (!this.isValidLookup(res) && hasDefaultValue) {\n usedDefault = true;\n res = defaultValue;\n }\n if (!this.isValidLookup(res)) {\n usedKey = true;\n res = key;\n }\n const missingKeyNoValueFallbackToKey = options.missingKeyNoValueFallbackToKey || this.options.missingKeyNoValueFallbackToKey;\n const resForMissing = missingKeyNoValueFallbackToKey && usedKey ? undefined : res;\n const updateMissing = hasDefaultValue && defaultValue !== res && this.options.updateMissing;\n if (usedKey || usedDefault || updateMissing) {\n this.logger.log(updateMissing ? 'updateKey' : 'missingKey', lng, namespace, key, updateMissing ? defaultValue : res);\n if (keySeparator) {\n const fk = this.resolve(key, {\n ...options,\n keySeparator: false\n });\n if (fk && fk.res) this.logger.warn('Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.');\n }\n let lngs = [];\n const fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, options.lng || this.language);\n if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) {\n for (let i = 0; i < fallbackLngs.length; i++) {\n lngs.push(fallbackLngs[i]);\n }\n } else if (this.options.saveMissingTo === 'all') {\n lngs = this.languageUtils.toResolveHierarchy(options.lng || this.language);\n } else {\n lngs.push(options.lng || this.language);\n }\n const send = (l, k, specificDefaultValue) => {\n const defaultForMissing = hasDefaultValue && specificDefaultValue !== res ? specificDefaultValue : resForMissing;\n if (this.options.missingKeyHandler) {\n this.options.missingKeyHandler(l, namespace, k, defaultForMissing, updateMissing, options);\n } else if (this.backendConnector && this.backendConnector.saveMissing) {\n this.backendConnector.saveMissing(l, namespace, k, defaultForMissing, updateMissing, options);\n }\n this.emit('missingKey', l, namespace, k, res);\n };\n if (this.options.saveMissing) {\n if (this.options.saveMissingPlurals && needsPluralHandling) {\n lngs.forEach(language => {\n this.pluralResolver.getSuffixes(language, options).forEach(suffix => {\n send([language], key + suffix, options[`defaultValue${suffix}`] || defaultValue);\n });\n });\n } else {\n send(lngs, key, defaultValue);\n }\n }\n }\n res = this.extendTranslation(res, keys, options, resolved, lastKey);\n if (usedKey && res === key && this.options.appendNamespaceToMissingKey) res = `${namespace}:${key}`;\n if ((usedKey || usedDefault) && this.options.parseMissingKeyHandler) {\n if (this.options.compatibilityAPI !== 'v1') {\n res = this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey ? `${namespace}:${key}` : key, usedDefault ? res : undefined);\n } else {\n res = this.options.parseMissingKeyHandler(res);\n }\n }\n }\n if (returnDetails) {\n resolved.res = res;\n resolved.usedParams = this.getUsedParamsDetails(options);\n return resolved;\n }\n return res;\n }\n extendTranslation(res, key, options, resolved, lastKey) {\n var _this = this;\n if (this.i18nFormat && this.i18nFormat.parse) {\n res = this.i18nFormat.parse(res, {\n ...this.options.interpolation.defaultVariables,\n ...options\n }, options.lng || this.language || resolved.usedLng, resolved.usedNS, resolved.usedKey, {\n resolved\n });\n } else if (!options.skipInterpolation) {\n if (options.interpolation) this.interpolator.init({\n ...options,\n ...{\n interpolation: {\n ...this.options.interpolation,\n ...options.interpolation\n }\n }\n });\n const skipOnVariables = typeof res === 'string' && (options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables);\n let nestBef;\n if (skipOnVariables) {\n const nb = res.match(this.interpolator.nestingRegexp);\n nestBef = nb && nb.length;\n }\n let data = options.replace && typeof options.replace !== 'string' ? options.replace : options;\n if (this.options.interpolation.defaultVariables) data = {\n ...this.options.interpolation.defaultVariables,\n ...data\n };\n res = this.interpolator.interpolate(res, data, options.lng || this.language, options);\n if (skipOnVariables) {\n const na = res.match(this.interpolator.nestingRegexp);\n const nestAft = na && na.length;\n if (nestBef < nestAft) options.nest = false;\n }\n if (!options.lng && this.options.compatibilityAPI !== 'v1' && resolved && resolved.res) options.lng = resolved.usedLng;\n if (options.nest !== false) res = this.interpolator.nest(res, function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (lastKey && lastKey[0] === args[0] && !options.context) {\n _this.logger.warn(`It seems you are nesting recursively key: ${args[0]} in key: ${key[0]}`);\n return null;\n }\n return _this.translate(...args, key);\n }, options);\n if (options.interpolation) this.interpolator.reset();\n }\n const postProcess = options.postProcess || this.options.postProcess;\n const postProcessorNames = typeof postProcess === 'string' ? [postProcess] : postProcess;\n if (res !== undefined && res !== null && postProcessorNames && postProcessorNames.length && options.applyPostProcessor !== false) {\n res = postProcessor.handle(postProcessorNames, res, key, this.options && this.options.postProcessPassResolved ? {\n i18nResolved: {\n ...resolved,\n usedParams: this.getUsedParamsDetails(options)\n },\n ...options\n } : options, this);\n }\n return res;\n }\n resolve(keys) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let found;\n let usedKey;\n let exactUsedKey;\n let usedLng;\n let usedNS;\n if (typeof keys === 'string') keys = [keys];\n keys.forEach(k => {\n if (this.isValidLookup(found)) return;\n const extracted = this.extractFromKey(k, options);\n const key = extracted.key;\n usedKey = key;\n let namespaces = extracted.namespaces;\n if (this.options.fallbackNS) namespaces = namespaces.concat(this.options.fallbackNS);\n const needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n const needsZeroSuffixLookup = needsPluralHandling && !options.ordinal && options.count === 0 && this.pluralResolver.shouldUseIntlApi();\n const needsContextHandling = options.context !== undefined && (typeof options.context === 'string' || typeof options.context === 'number') && options.context !== '';\n const codes = options.lngs ? options.lngs : this.languageUtils.toResolveHierarchy(options.lng || this.language, options.fallbackLng);\n namespaces.forEach(ns => {\n if (this.isValidLookup(found)) return;\n usedNS = ns;\n if (!checkedLoadedFor[`${codes[0]}-${ns}`] && this.utils && this.utils.hasLoadedNamespace && !this.utils.hasLoadedNamespace(usedNS)) {\n checkedLoadedFor[`${codes[0]}-${ns}`] = true;\n this.logger.warn(`key \"${usedKey}\" for languages \"${codes.join(', ')}\" won't get resolved as namespace \"${usedNS}\" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n }\n codes.forEach(code => {\n if (this.isValidLookup(found)) return;\n usedLng = code;\n const finalKeys = [key];\n if (this.i18nFormat && this.i18nFormat.addLookupKeys) {\n this.i18nFormat.addLookupKeys(finalKeys, key, code, ns, options);\n } else {\n let pluralSuffix;\n if (needsPluralHandling) pluralSuffix = this.pluralResolver.getSuffix(code, options.count, options);\n const zeroSuffix = `${this.options.pluralSeparator}zero`;\n const ordinalPrefix = `${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;\n if (needsPluralHandling) {\n finalKeys.push(key + pluralSuffix);\n if (options.ordinal && pluralSuffix.indexOf(ordinalPrefix) === 0) {\n finalKeys.push(key + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n }\n if (needsZeroSuffixLookup) {\n finalKeys.push(key + zeroSuffix);\n }\n }\n if (needsContextHandling) {\n const contextKey = `${key}${this.options.contextSeparator}${options.context}`;\n finalKeys.push(contextKey);\n if (needsPluralHandling) {\n finalKeys.push(contextKey + pluralSuffix);\n if (options.ordinal && pluralSuffix.indexOf(ordinalPrefix) === 0) {\n finalKeys.push(contextKey + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n }\n if (needsZeroSuffixLookup) {\n finalKeys.push(contextKey + zeroSuffix);\n }\n }\n }\n }\n let possibleKey;\n while (possibleKey = finalKeys.pop()) {\n if (!this.isValidLookup(found)) {\n exactUsedKey = possibleKey;\n found = this.getResource(code, ns, possibleKey, options);\n }\n }\n });\n });\n });\n return {\n res: found,\n usedKey,\n exactUsedKey,\n usedLng,\n usedNS\n };\n }\n isValidLookup(res) {\n return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === '');\n }\n getResource(code, ns, key) {\n let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n if (this.i18nFormat && this.i18nFormat.getResource) return this.i18nFormat.getResource(code, ns, key, options);\n return this.resourceStore.getResource(code, ns, key, options);\n }\n getUsedParamsDetails() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const optionsKeys = ['defaultValue', 'ordinal', 'context', 'replace', 'lng', 'lngs', 'fallbackLng', 'ns', 'keySeparator', 'nsSeparator', 'returnObjects', 'returnDetails', 'joinArrays', 'postProcess', 'interpolation'];\n const useOptionsReplaceForData = options.replace && typeof options.replace !== 'string';\n let data = useOptionsReplaceForData ? options.replace : options;\n if (useOptionsReplaceForData && typeof options.count !== 'undefined') {\n data.count = options.count;\n }\n if (this.options.interpolation.defaultVariables) {\n data = {\n ...this.options.interpolation.defaultVariables,\n ...data\n };\n }\n if (!useOptionsReplaceForData) {\n data = {\n ...data\n };\n for (const key of optionsKeys) {\n delete data[key];\n }\n }\n return data;\n }\n static hasDefaultValue(options) {\n const prefix = 'defaultValue';\n for (const option in options) {\n if (Object.prototype.hasOwnProperty.call(options, option) && prefix === option.substring(0, prefix.length) && undefined !== options[option]) {\n return true;\n }\n }\n return false;\n }\n}\n\nfunction capitalize(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\nclass LanguageUtil {\n constructor(options) {\n this.options = options;\n this.supportedLngs = this.options.supportedLngs || false;\n this.logger = baseLogger.create('languageUtils');\n }\n getScriptPartFromCode(code) {\n code = getCleanedCode(code);\n if (!code || code.indexOf('-') < 0) return null;\n const p = code.split('-');\n if (p.length === 2) return null;\n p.pop();\n if (p[p.length - 1].toLowerCase() === 'x') return null;\n return this.formatLanguageCode(p.join('-'));\n }\n getLanguagePartFromCode(code) {\n code = getCleanedCode(code);\n if (!code || code.indexOf('-') < 0) return code;\n const p = code.split('-');\n return this.formatLanguageCode(p[0]);\n }\n formatLanguageCode(code) {\n if (typeof code === 'string' && code.indexOf('-') > -1) {\n const specialCases = ['hans', 'hant', 'latn', 'cyrl', 'cans', 'mong', 'arab'];\n let p = code.split('-');\n if (this.options.lowerCaseLng) {\n p = p.map(part => part.toLowerCase());\n } else if (p.length === 2) {\n p[0] = p[0].toLowerCase();\n p[1] = p[1].toUpperCase();\n if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n } else if (p.length === 3) {\n p[0] = p[0].toLowerCase();\n if (p[1].length === 2) p[1] = p[1].toUpperCase();\n if (p[0] !== 'sgn' && p[2].length === 2) p[2] = p[2].toUpperCase();\n if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n if (specialCases.indexOf(p[2].toLowerCase()) > -1) p[2] = capitalize(p[2].toLowerCase());\n }\n return p.join('-');\n }\n return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code;\n }\n isSupportedCode(code) {\n if (this.options.load === 'languageOnly' || this.options.nonExplicitSupportedLngs) {\n code = this.getLanguagePartFromCode(code);\n }\n return !this.supportedLngs || !this.supportedLngs.length || this.supportedLngs.indexOf(code) > -1;\n }\n getBestMatchFromCodes(codes) {\n if (!codes) return null;\n let found;\n codes.forEach(code => {\n if (found) return;\n const cleanedLng = this.formatLanguageCode(code);\n if (!this.options.supportedLngs || this.isSupportedCode(cleanedLng)) found = cleanedLng;\n });\n if (!found && this.options.supportedLngs) {\n codes.forEach(code => {\n if (found) return;\n const lngOnly = this.getLanguagePartFromCode(code);\n if (this.isSupportedCode(lngOnly)) return found = lngOnly;\n found = this.options.supportedLngs.find(supportedLng => {\n if (supportedLng === lngOnly) return supportedLng;\n if (supportedLng.indexOf('-') < 0 && lngOnly.indexOf('-') < 0) return;\n if (supportedLng.indexOf(lngOnly) === 0) return supportedLng;\n });\n });\n }\n if (!found) found = this.getFallbackCodes(this.options.fallbackLng)[0];\n return found;\n }\n getFallbackCodes(fallbacks, code) {\n if (!fallbacks) return [];\n if (typeof fallbacks === 'function') fallbacks = fallbacks(code);\n if (typeof fallbacks === 'string') fallbacks = [fallbacks];\n if (Object.prototype.toString.apply(fallbacks) === '[object Array]') return fallbacks;\n if (!code) return fallbacks.default || [];\n let found = fallbacks[code];\n if (!found) found = fallbacks[this.getScriptPartFromCode(code)];\n if (!found) found = fallbacks[this.formatLanguageCode(code)];\n if (!found) found = fallbacks[this.getLanguagePartFromCode(code)];\n if (!found) found = fallbacks.default;\n return found || [];\n }\n toResolveHierarchy(code, fallbackCode) {\n const fallbackCodes = this.getFallbackCodes(fallbackCode || this.options.fallbackLng || [], code);\n const codes = [];\n const addCode = c => {\n if (!c) return;\n if (this.isSupportedCode(c)) {\n codes.push(c);\n } else {\n this.logger.warn(`rejecting language code not found in supportedLngs: ${c}`);\n }\n };\n if (typeof code === 'string' && (code.indexOf('-') > -1 || code.indexOf('_') > -1)) {\n if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code));\n if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code));\n if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code));\n } else if (typeof code === 'string') {\n addCode(this.formatLanguageCode(code));\n }\n fallbackCodes.forEach(fc => {\n if (codes.indexOf(fc) < 0) addCode(this.formatLanguageCode(fc));\n });\n return codes;\n }\n}\n\nlet sets = [{\n lngs: ['ach', 'ak', 'am', 'arn', 'br', 'fil', 'gun', 'ln', 'mfe', 'mg', 'mi', 'oc', 'pt', 'pt-BR', 'tg', 'tl', 'ti', 'tr', 'uz', 'wa'],\n nr: [1, 2],\n fc: 1\n}, {\n lngs: ['af', 'an', 'ast', 'az', 'bg', 'bn', 'ca', 'da', 'de', 'dev', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fi', 'fo', 'fur', 'fy', 'gl', 'gu', 'ha', 'hi', 'hu', 'hy', 'ia', 'it', 'kk', 'kn', 'ku', 'lb', 'mai', 'ml', 'mn', 'mr', 'nah', 'nap', 'nb', 'ne', 'nl', 'nn', 'no', 'nso', 'pa', 'pap', 'pms', 'ps', 'pt-PT', 'rm', 'sco', 'se', 'si', 'so', 'son', 'sq', 'sv', 'sw', 'ta', 'te', 'tk', 'ur', 'yo'],\n nr: [1, 2],\n fc: 2\n}, {\n lngs: ['ay', 'bo', 'cgg', 'fa', 'ht', 'id', 'ja', 'jbo', 'ka', 'km', 'ko', 'ky', 'lo', 'ms', 'sah', 'su', 'th', 'tt', 'ug', 'vi', 'wo', 'zh'],\n nr: [1],\n fc: 3\n}, {\n lngs: ['be', 'bs', 'cnr', 'dz', 'hr', 'ru', 'sr', 'uk'],\n nr: [1, 2, 5],\n fc: 4\n}, {\n lngs: ['ar'],\n nr: [0, 1, 2, 3, 11, 100],\n fc: 5\n}, {\n lngs: ['cs', 'sk'],\n nr: [1, 2, 5],\n fc: 6\n}, {\n lngs: ['csb', 'pl'],\n nr: [1, 2, 5],\n fc: 7\n}, {\n lngs: ['cy'],\n nr: [1, 2, 3, 8],\n fc: 8\n}, {\n lngs: ['fr'],\n nr: [1, 2],\n fc: 9\n}, {\n lngs: ['ga'],\n nr: [1, 2, 3, 7, 11],\n fc: 10\n}, {\n lngs: ['gd'],\n nr: [1, 2, 3, 20],\n fc: 11\n}, {\n lngs: ['is'],\n nr: [1, 2],\n fc: 12\n}, {\n lngs: ['jv'],\n nr: [0, 1],\n fc: 13\n}, {\n lngs: ['kw'],\n nr: [1, 2, 3, 4],\n fc: 14\n}, {\n lngs: ['lt'],\n nr: [1, 2, 10],\n fc: 15\n}, {\n lngs: ['lv'],\n nr: [1, 2, 0],\n fc: 16\n}, {\n lngs: ['mk'],\n nr: [1, 2],\n fc: 17\n}, {\n lngs: ['mnk'],\n nr: [0, 1, 2],\n fc: 18\n}, {\n lngs: ['mt'],\n nr: [1, 2, 11, 20],\n fc: 19\n}, {\n lngs: ['or'],\n nr: [2, 1],\n fc: 2\n}, {\n lngs: ['ro'],\n nr: [1, 2, 20],\n fc: 20\n}, {\n lngs: ['sl'],\n nr: [5, 1, 2, 3],\n fc: 21\n}, {\n lngs: ['he', 'iw'],\n nr: [1, 2, 20, 21],\n fc: 22\n}];\nlet _rulesPluralsTypes = {\n 1: function (n) {\n return Number(n > 1);\n },\n 2: function (n) {\n return Number(n != 1);\n },\n 3: function (n) {\n return 0;\n },\n 4: function (n) {\n return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n },\n 5: function (n) {\n return Number(n == 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5);\n },\n 6: function (n) {\n return Number(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2);\n },\n 7: function (n) {\n return Number(n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n },\n 8: function (n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : n != 8 && n != 11 ? 2 : 3);\n },\n 9: function (n) {\n return Number(n >= 2);\n },\n 10: function (n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4);\n },\n 11: function (n) {\n return Number(n == 1 || n == 11 ? 0 : n == 2 || n == 12 ? 1 : n > 2 && n < 20 ? 2 : 3);\n },\n 12: function (n) {\n return Number(n % 10 != 1 || n % 100 == 11);\n },\n 13: function (n) {\n return Number(n !== 0);\n },\n 14: function (n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : n == 3 ? 2 : 3);\n },\n 15: function (n) {\n return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n },\n 16: function (n) {\n return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n !== 0 ? 1 : 2);\n },\n 17: function (n) {\n return Number(n == 1 || n % 10 == 1 && n % 100 != 11 ? 0 : 1);\n },\n 18: function (n) {\n return Number(n == 0 ? 0 : n == 1 ? 1 : 2);\n },\n 19: function (n) {\n return Number(n == 1 ? 0 : n == 0 || n % 100 > 1 && n % 100 < 11 ? 1 : n % 100 > 10 && n % 100 < 20 ? 2 : 3);\n },\n 20: function (n) {\n return Number(n == 1 ? 0 : n == 0 || n % 100 > 0 && n % 100 < 20 ? 1 : 2);\n },\n 21: function (n) {\n return Number(n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0);\n },\n 22: function (n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : (n < 0 || n > 10) && n % 10 == 0 ? 2 : 3);\n }\n};\nconst nonIntlVersions = ['v1', 'v2', 'v3'];\nconst intlVersions = ['v4'];\nconst suffixesOrder = {\n zero: 0,\n one: 1,\n two: 2,\n few: 3,\n many: 4,\n other: 5\n};\nfunction createRules() {\n const rules = {};\n sets.forEach(set => {\n set.lngs.forEach(l => {\n rules[l] = {\n numbers: set.nr,\n plurals: _rulesPluralsTypes[set.fc]\n };\n });\n });\n return rules;\n}\nclass PluralResolver {\n constructor(languageUtils) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.languageUtils = languageUtils;\n this.options = options;\n this.logger = baseLogger.create('pluralResolver');\n if ((!this.options.compatibilityJSON || intlVersions.includes(this.options.compatibilityJSON)) && (typeof Intl === 'undefined' || !Intl.PluralRules)) {\n this.options.compatibilityJSON = 'v3';\n this.logger.error('Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.');\n }\n this.rules = createRules();\n }\n addRule(lng, obj) {\n this.rules[lng] = obj;\n }\n getRule(code) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (this.shouldUseIntlApi()) {\n try {\n return new Intl.PluralRules(getCleanedCode(code), {\n type: options.ordinal ? 'ordinal' : 'cardinal'\n });\n } catch (err) {\n return;\n }\n }\n return this.rules[code] || this.rules[this.languageUtils.getLanguagePartFromCode(code)];\n }\n needsPlural(code) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const rule = this.getRule(code, options);\n if (this.shouldUseIntlApi()) {\n return rule && rule.resolvedOptions().pluralCategories.length > 1;\n }\n return rule && rule.numbers.length > 1;\n }\n getPluralFormsOfKey(code, key) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n return this.getSuffixes(code, options).map(suffix => `${key}${suffix}`);\n }\n getSuffixes(code) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const rule = this.getRule(code, options);\n if (!rule) {\n return [];\n }\n if (this.shouldUseIntlApi()) {\n return rule.resolvedOptions().pluralCategories.sort((pluralCategory1, pluralCategory2) => suffixesOrder[pluralCategory1] - suffixesOrder[pluralCategory2]).map(pluralCategory => `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${pluralCategory}`);\n }\n return rule.numbers.map(number => this.getSuffix(code, number, options));\n }\n getSuffix(code, count) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n const rule = this.getRule(code, options);\n if (rule) {\n if (this.shouldUseIntlApi()) {\n return `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${rule.select(count)}`;\n }\n return this.getSuffixRetroCompatible(rule, count);\n }\n this.logger.warn(`no plural rule found for: ${code}`);\n return '';\n }\n getSuffixRetroCompatible(rule, count) {\n const idx = rule.noAbs ? rule.plurals(count) : rule.plurals(Math.abs(count));\n let suffix = rule.numbers[idx];\n if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n if (suffix === 2) {\n suffix = 'plural';\n } else if (suffix === 1) {\n suffix = '';\n }\n }\n const returnSuffix = () => this.options.prepend && suffix.toString() ? this.options.prepend + suffix.toString() : suffix.toString();\n if (this.options.compatibilityJSON === 'v1') {\n if (suffix === 1) return '';\n if (typeof suffix === 'number') return `_plural_${suffix.toString()}`;\n return returnSuffix();\n } else if (this.options.compatibilityJSON === 'v2') {\n return returnSuffix();\n } else if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n return returnSuffix();\n }\n return this.options.prepend && idx.toString() ? this.options.prepend + idx.toString() : idx.toString();\n }\n shouldUseIntlApi() {\n return !nonIntlVersions.includes(this.options.compatibilityJSON);\n }\n}\n\nfunction deepFindWithDefaults(data, defaultData, key) {\n let keySeparator = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '.';\n let ignoreJSONStructure = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n let path = getPathWithDefaults(data, defaultData, key);\n if (!path && ignoreJSONStructure && typeof key === 'string') {\n path = deepFind(data, key, keySeparator);\n if (path === undefined) path = deepFind(defaultData, key, keySeparator);\n }\n return path;\n}\nclass Interpolator {\n constructor() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.logger = baseLogger.create('interpolator');\n this.options = options;\n this.format = options.interpolation && options.interpolation.format || (value => value);\n this.init(options);\n }\n init() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (!options.interpolation) options.interpolation = {\n escapeValue: true\n };\n const iOpts = options.interpolation;\n this.escape = iOpts.escape !== undefined ? iOpts.escape : escape;\n this.escapeValue = iOpts.escapeValue !== undefined ? iOpts.escapeValue : true;\n this.useRawValueToEscape = iOpts.useRawValueToEscape !== undefined ? iOpts.useRawValueToEscape : false;\n this.prefix = iOpts.prefix ? regexEscape(iOpts.prefix) : iOpts.prefixEscaped || '{{';\n this.suffix = iOpts.suffix ? regexEscape(iOpts.suffix) : iOpts.suffixEscaped || '}}';\n this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || ',';\n this.unescapePrefix = iOpts.unescapeSuffix ? '' : iOpts.unescapePrefix || '-';\n this.unescapeSuffix = this.unescapePrefix ? '' : iOpts.unescapeSuffix || '';\n this.nestingPrefix = iOpts.nestingPrefix ? regexEscape(iOpts.nestingPrefix) : iOpts.nestingPrefixEscaped || regexEscape('$t(');\n this.nestingSuffix = iOpts.nestingSuffix ? regexEscape(iOpts.nestingSuffix) : iOpts.nestingSuffixEscaped || regexEscape(')');\n this.nestingOptionsSeparator = iOpts.nestingOptionsSeparator ? iOpts.nestingOptionsSeparator : iOpts.nestingOptionsSeparator || ',';\n this.maxReplaces = iOpts.maxReplaces ? iOpts.maxReplaces : 1000;\n this.alwaysFormat = iOpts.alwaysFormat !== undefined ? iOpts.alwaysFormat : false;\n this.resetRegExp();\n }\n reset() {\n if (this.options) this.init(this.options);\n }\n resetRegExp() {\n const regexpStr = `${this.prefix}(.+?)${this.suffix}`;\n this.regexp = new RegExp(regexpStr, 'g');\n const regexpUnescapeStr = `${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`;\n this.regexpUnescape = new RegExp(regexpUnescapeStr, 'g');\n const nestingRegexpStr = `${this.nestingPrefix}(.+?)${this.nestingSuffix}`;\n this.nestingRegexp = new RegExp(nestingRegexpStr, 'g');\n }\n interpolate(str, data, lng, options) {\n let match;\n let value;\n let replaces;\n const defaultData = this.options && this.options.interpolation && this.options.interpolation.defaultVariables || {};\n function regexSafe(val) {\n return val.replace(/\\$/g, '$$$$');\n }\n const handleFormat = key => {\n if (key.indexOf(this.formatSeparator) < 0) {\n const path = deepFindWithDefaults(data, defaultData, key, this.options.keySeparator, this.options.ignoreJSONStructure);\n return this.alwaysFormat ? this.format(path, undefined, lng, {\n ...options,\n ...data,\n interpolationkey: key\n }) : path;\n }\n const p = key.split(this.formatSeparator);\n const k = p.shift().trim();\n const f = p.join(this.formatSeparator).trim();\n return this.format(deepFindWithDefaults(data, defaultData, k, this.options.keySeparator, this.options.ignoreJSONStructure), f, lng, {\n ...options,\n ...data,\n interpolationkey: k\n });\n };\n this.resetRegExp();\n const missingInterpolationHandler = options && options.missingInterpolationHandler || this.options.missingInterpolationHandler;\n const skipOnVariables = options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables;\n const todos = [{\n regex: this.regexpUnescape,\n safeValue: val => regexSafe(val)\n }, {\n regex: this.regexp,\n safeValue: val => this.escapeValue ? regexSafe(this.escape(val)) : regexSafe(val)\n }];\n todos.forEach(todo => {\n replaces = 0;\n while (match = todo.regex.exec(str)) {\n const matchedVar = match[1].trim();\n value = handleFormat(matchedVar);\n if (value === undefined) {\n if (typeof missingInterpolationHandler === 'function') {\n const temp = missingInterpolationHandler(str, match, options);\n value = typeof temp === 'string' ? temp : '';\n } else if (options && Object.prototype.hasOwnProperty.call(options, matchedVar)) {\n value = '';\n } else if (skipOnVariables) {\n value = match[0];\n continue;\n } else {\n this.logger.warn(`missed to pass in variable ${matchedVar} for interpolating ${str}`);\n value = '';\n }\n } else if (typeof value !== 'string' && !this.useRawValueToEscape) {\n value = makeString(value);\n }\n const safeValue = todo.safeValue(value);\n str = str.replace(match[0], safeValue);\n if (skipOnVariables) {\n todo.regex.lastIndex += value.length;\n todo.regex.lastIndex -= match[0].length;\n } else {\n todo.regex.lastIndex = 0;\n }\n replaces++;\n if (replaces >= this.maxReplaces) {\n break;\n }\n }\n });\n return str;\n }\n nest(str, fc) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n let match;\n let value;\n let clonedOptions;\n function handleHasOptions(key, inheritedOptions) {\n const sep = this.nestingOptionsSeparator;\n if (key.indexOf(sep) < 0) return key;\n const c = key.split(new RegExp(`${sep}[ ]*{`));\n let optionsString = `{${c[1]}`;\n key = c[0];\n optionsString = this.interpolate(optionsString, clonedOptions);\n const matchedSingleQuotes = optionsString.match(/'/g);\n const matchedDoubleQuotes = optionsString.match(/\"/g);\n if (matchedSingleQuotes && matchedSingleQuotes.length % 2 === 0 && !matchedDoubleQuotes || matchedDoubleQuotes.length % 2 !== 0) {\n optionsString = optionsString.replace(/'/g, '\"');\n }\n try {\n clonedOptions = JSON.parse(optionsString);\n if (inheritedOptions) clonedOptions = {\n ...inheritedOptions,\n ...clonedOptions\n };\n } catch (e) {\n this.logger.warn(`failed parsing options string in nesting for key ${key}`, e);\n return `${key}${sep}${optionsString}`;\n }\n delete clonedOptions.defaultValue;\n return key;\n }\n while (match = this.nestingRegexp.exec(str)) {\n let formatters = [];\n clonedOptions = {\n ...options\n };\n clonedOptions = clonedOptions.replace && typeof clonedOptions.replace !== 'string' ? clonedOptions.replace : clonedOptions;\n clonedOptions.applyPostProcessor = false;\n delete clonedOptions.defaultValue;\n let doReduce = false;\n if (match[0].indexOf(this.formatSeparator) !== -1 && !/{.*}/.test(match[1])) {\n const r = match[1].split(this.formatSeparator).map(elem => elem.trim());\n match[1] = r.shift();\n formatters = r;\n doReduce = true;\n }\n value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions);\n if (value && match[0] === str && typeof value !== 'string') return value;\n if (typeof value !== 'string') value = makeString(value);\n if (!value) {\n this.logger.warn(`missed to resolve ${match[1]} for nesting ${str}`);\n value = '';\n }\n if (doReduce) {\n value = formatters.reduce((v, f) => this.format(v, f, options.lng, {\n ...options,\n interpolationkey: match[1].trim()\n }), value.trim());\n }\n str = str.replace(match[0], value);\n this.regexp.lastIndex = 0;\n }\n return str;\n }\n}\n\nfunction parseFormatStr(formatStr) {\n let formatName = formatStr.toLowerCase().trim();\n const formatOptions = {};\n if (formatStr.indexOf('(') > -1) {\n const p = formatStr.split('(');\n formatName = p[0].toLowerCase().trim();\n const optStr = p[1].substring(0, p[1].length - 1);\n if (formatName === 'currency' && optStr.indexOf(':') < 0) {\n if (!formatOptions.currency) formatOptions.currency = optStr.trim();\n } else if (formatName === 'relativetime' && optStr.indexOf(':') < 0) {\n if (!formatOptions.range) formatOptions.range = optStr.trim();\n } else {\n const opts = optStr.split(';');\n opts.forEach(opt => {\n if (!opt) return;\n const [key, ...rest] = opt.split(':');\n const val = rest.join(':').trim().replace(/^'+|'+$/g, '');\n if (!formatOptions[key.trim()]) formatOptions[key.trim()] = val;\n if (val === 'false') formatOptions[key.trim()] = false;\n if (val === 'true') formatOptions[key.trim()] = true;\n if (!isNaN(val)) formatOptions[key.trim()] = parseInt(val, 10);\n });\n }\n }\n return {\n formatName,\n formatOptions\n };\n}\nfunction createCachedFormatter(fn) {\n const cache = {};\n return function invokeFormatter(val, lng, options) {\n const key = lng + JSON.stringify(options);\n let formatter = cache[key];\n if (!formatter) {\n formatter = fn(getCleanedCode(lng), options);\n cache[key] = formatter;\n }\n return formatter(val);\n };\n}\nclass Formatter {\n constructor() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.logger = baseLogger.create('formatter');\n this.options = options;\n this.formats = {\n number: createCachedFormatter((lng, opt) => {\n const formatter = new Intl.NumberFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n }),\n currency: createCachedFormatter((lng, opt) => {\n const formatter = new Intl.NumberFormat(lng, {\n ...opt,\n style: 'currency'\n });\n return val => formatter.format(val);\n }),\n datetime: createCachedFormatter((lng, opt) => {\n const formatter = new Intl.DateTimeFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n }),\n relativetime: createCachedFormatter((lng, opt) => {\n const formatter = new Intl.RelativeTimeFormat(lng, {\n ...opt\n });\n return val => formatter.format(val, opt.range || 'day');\n }),\n list: createCachedFormatter((lng, opt) => {\n const formatter = new Intl.ListFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n })\n };\n this.init(options);\n }\n init(services) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n interpolation: {}\n };\n const iOpts = options.interpolation;\n this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || ',';\n }\n add(name, fc) {\n this.formats[name.toLowerCase().trim()] = fc;\n }\n addCached(name, fc) {\n this.formats[name.toLowerCase().trim()] = createCachedFormatter(fc);\n }\n format(value, format, lng) {\n let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n const formats = format.split(this.formatSeparator);\n const result = formats.reduce((mem, f) => {\n const {\n formatName,\n formatOptions\n } = parseFormatStr(f);\n if (this.formats[formatName]) {\n let formatted = mem;\n try {\n const valOptions = options && options.formatParams && options.formatParams[options.interpolationkey] || {};\n const l = valOptions.locale || valOptions.lng || options.locale || options.lng || lng;\n formatted = this.formats[formatName](mem, l, {\n ...formatOptions,\n ...options,\n ...valOptions\n });\n } catch (error) {\n this.logger.warn(error);\n }\n return formatted;\n } else {\n this.logger.warn(`there was no format function for ${formatName}`);\n }\n return mem;\n }, value);\n return result;\n }\n}\n\nfunction removePending(q, name) {\n if (q.pending[name] !== undefined) {\n delete q.pending[name];\n q.pendingCount--;\n }\n}\nclass Connector extends EventEmitter {\n constructor(backend, store, services) {\n let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n super();\n this.backend = backend;\n this.store = store;\n this.services = services;\n this.languageUtils = services.languageUtils;\n this.options = options;\n this.logger = baseLogger.create('backendConnector');\n this.waitingReads = [];\n this.maxParallelReads = options.maxParallelReads || 10;\n this.readingCalls = 0;\n this.maxRetries = options.maxRetries >= 0 ? options.maxRetries : 5;\n this.retryTimeout = options.retryTimeout >= 1 ? options.retryTimeout : 350;\n this.state = {};\n this.queue = [];\n if (this.backend && this.backend.init) {\n this.backend.init(services, options.backend, options);\n }\n }\n queueLoad(languages, namespaces, options, callback) {\n const toLoad = {};\n const pending = {};\n const toLoadLanguages = {};\n const toLoadNamespaces = {};\n languages.forEach(lng => {\n let hasAllNamespaces = true;\n namespaces.forEach(ns => {\n const name = `${lng}|${ns}`;\n if (!options.reload && this.store.hasResourceBundle(lng, ns)) {\n this.state[name] = 2;\n } else if (this.state[name] < 0) ; else if (this.state[name] === 1) {\n if (pending[name] === undefined) pending[name] = true;\n } else {\n this.state[name] = 1;\n hasAllNamespaces = false;\n if (pending[name] === undefined) pending[name] = true;\n if (toLoad[name] === undefined) toLoad[name] = true;\n if (toLoadNamespaces[ns] === undefined) toLoadNamespaces[ns] = true;\n }\n });\n if (!hasAllNamespaces) toLoadLanguages[lng] = true;\n });\n if (Object.keys(toLoad).length || Object.keys(pending).length) {\n this.queue.push({\n pending,\n pendingCount: Object.keys(pending).length,\n loaded: {},\n errors: [],\n callback\n });\n }\n return {\n toLoad: Object.keys(toLoad),\n pending: Object.keys(pending),\n toLoadLanguages: Object.keys(toLoadLanguages),\n toLoadNamespaces: Object.keys(toLoadNamespaces)\n };\n }\n loaded(name, err, data) {\n const s = name.split('|');\n const lng = s[0];\n const ns = s[1];\n if (err) this.emit('failedLoading', lng, ns, err);\n if (data) {\n this.store.addResourceBundle(lng, ns, data);\n }\n this.state[name] = err ? -1 : 2;\n const loaded = {};\n this.queue.forEach(q => {\n pushPath(q.loaded, [lng], ns);\n removePending(q, name);\n if (err) q.errors.push(err);\n if (q.pendingCount === 0 && !q.done) {\n Object.keys(q.loaded).forEach(l => {\n if (!loaded[l]) loaded[l] = {};\n const loadedKeys = q.loaded[l];\n if (loadedKeys.length) {\n loadedKeys.forEach(n => {\n if (loaded[l][n] === undefined) loaded[l][n] = true;\n });\n }\n });\n q.done = true;\n if (q.errors.length) {\n q.callback(q.errors);\n } else {\n q.callback();\n }\n }\n });\n this.emit('loaded', loaded);\n this.queue = this.queue.filter(q => !q.done);\n }\n read(lng, ns, fcName) {\n let tried = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n let wait = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : this.retryTimeout;\n let callback = arguments.length > 5 ? arguments[5] : undefined;\n if (!lng.length) return callback(null, {});\n if (this.readingCalls >= this.maxParallelReads) {\n this.waitingReads.push({\n lng,\n ns,\n fcName,\n tried,\n wait,\n callback\n });\n return;\n }\n this.readingCalls++;\n const resolver = (err, data) => {\n this.readingCalls--;\n if (this.waitingReads.length > 0) {\n const next = this.waitingReads.shift();\n this.read(next.lng, next.ns, next.fcName, next.tried, next.wait, next.callback);\n }\n if (err && data && tried < this.maxRetries) {\n setTimeout(() => {\n this.read.call(this, lng, ns, fcName, tried + 1, wait * 2, callback);\n }, wait);\n return;\n }\n callback(err, data);\n };\n const fc = this.backend[fcName].bind(this.backend);\n if (fc.length === 2) {\n try {\n const r = fc(lng, ns);\n if (r && typeof r.then === 'function') {\n r.then(data => resolver(null, data)).catch(resolver);\n } else {\n resolver(null, r);\n }\n } catch (err) {\n resolver(err);\n }\n return;\n }\n return fc(lng, ns, resolver);\n }\n prepareLoading(languages, namespaces) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n let callback = arguments.length > 3 ? arguments[3] : undefined;\n if (!this.backend) {\n this.logger.warn('No backend was added via i18next.use. Will not load resources.');\n return callback && callback();\n }\n if (typeof languages === 'string') languages = this.languageUtils.toResolveHierarchy(languages);\n if (typeof namespaces === 'string') namespaces = [namespaces];\n const toLoad = this.queueLoad(languages, namespaces, options, callback);\n if (!toLoad.toLoad.length) {\n if (!toLoad.pending.length) callback();\n return null;\n }\n toLoad.toLoad.forEach(name => {\n this.loadOne(name);\n });\n }\n load(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {}, callback);\n }\n reload(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {\n reload: true\n }, callback);\n }\n loadOne(name) {\n let prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n const s = name.split('|');\n const lng = s[0];\n const ns = s[1];\n this.read(lng, ns, 'read', undefined, undefined, (err, data) => {\n if (err) this.logger.warn(`${prefix}loading namespace ${ns} for language ${lng} failed`, err);\n if (!err && data) this.logger.log(`${prefix}loaded namespace ${ns} for language ${lng}`, data);\n this.loaded(name, err, data);\n });\n }\n saveMissing(languages, namespace, key, fallbackValue, isUpdate) {\n let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n let clb = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : () => {};\n if (this.services.utils && this.services.utils.hasLoadedNamespace && !this.services.utils.hasLoadedNamespace(namespace)) {\n this.logger.warn(`did not save key \"${key}\" as the namespace \"${namespace}\" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n return;\n }\n if (key === undefined || key === null || key === '') return;\n if (this.backend && this.backend.create) {\n const opts = {\n ...options,\n isUpdate\n };\n const fc = this.backend.create.bind(this.backend);\n if (fc.length < 6) {\n try {\n let r;\n if (fc.length === 5) {\n r = fc(languages, namespace, key, fallbackValue, opts);\n } else {\n r = fc(languages, namespace, key, fallbackValue);\n }\n if (r && typeof r.then === 'function') {\n r.then(data => clb(null, data)).catch(clb);\n } else {\n clb(null, r);\n }\n } catch (err) {\n clb(err);\n }\n } else {\n fc(languages, namespace, key, fallbackValue, clb, opts);\n }\n }\n if (!languages || !languages[0]) return;\n this.store.addResource(languages[0], namespace, key, fallbackValue);\n }\n}\n\nfunction get() {\n return {\n debug: false,\n initImmediate: true,\n ns: ['translation'],\n defaultNS: ['translation'],\n fallbackLng: ['dev'],\n fallbackNS: false,\n supportedLngs: false,\n nonExplicitSupportedLngs: false,\n load: 'all',\n preload: false,\n simplifyPluralSuffix: true,\n keySeparator: '.',\n nsSeparator: ':',\n pluralSeparator: '_',\n contextSeparator: '_',\n partialBundledLanguages: false,\n saveMissing: false,\n updateMissing: false,\n saveMissingTo: 'fallback',\n saveMissingPlurals: true,\n missingKeyHandler: false,\n missingInterpolationHandler: false,\n postProcess: false,\n postProcessPassResolved: false,\n returnNull: false,\n returnEmptyString: true,\n returnObjects: false,\n joinArrays: false,\n returnedObjectHandler: false,\n parseMissingKeyHandler: false,\n appendNamespaceToMissingKey: false,\n appendNamespaceToCIMode: false,\n overloadTranslationOptionHandler: function handle(args) {\n let ret = {};\n if (typeof args[1] === 'object') ret = args[1];\n if (typeof args[1] === 'string') ret.defaultValue = args[1];\n if (typeof args[2] === 'string') ret.tDescription = args[2];\n if (typeof args[2] === 'object' || typeof args[3] === 'object') {\n const options = args[3] || args[2];\n Object.keys(options).forEach(key => {\n ret[key] = options[key];\n });\n }\n return ret;\n },\n interpolation: {\n escapeValue: true,\n format: value => value,\n prefix: '{{',\n suffix: '}}',\n formatSeparator: ',',\n unescapePrefix: '-',\n nestingPrefix: '$t(',\n nestingSuffix: ')',\n nestingOptionsSeparator: ',',\n maxReplaces: 1000,\n skipOnVariables: true\n }\n };\n}\nfunction transformOptions(options) {\n if (typeof options.ns === 'string') options.ns = [options.ns];\n if (typeof options.fallbackLng === 'string') options.fallbackLng = [options.fallbackLng];\n if (typeof options.fallbackNS === 'string') options.fallbackNS = [options.fallbackNS];\n if (options.supportedLngs && options.supportedLngs.indexOf('cimode') < 0) {\n options.supportedLngs = options.supportedLngs.concat(['cimode']);\n }\n return options;\n}\n\nfunction noop() {}\nfunction bindMemberFunctions(inst) {\n const mems = Object.getOwnPropertyNames(Object.getPrototypeOf(inst));\n mems.forEach(mem => {\n if (typeof inst[mem] === 'function') {\n inst[mem] = inst[mem].bind(inst);\n }\n });\n}\nclass I18n extends EventEmitter {\n constructor() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let callback = arguments.length > 1 ? arguments[1] : undefined;\n super();\n this.options = transformOptions(options);\n this.services = {};\n this.logger = baseLogger;\n this.modules = {\n external: []\n };\n bindMemberFunctions(this);\n if (callback && !this.isInitialized && !options.isClone) {\n if (!this.options.initImmediate) {\n this.init(options, callback);\n return this;\n }\n setTimeout(() => {\n this.init(options, callback);\n }, 0);\n }\n }\n init() {\n var _this = this;\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let callback = arguments.length > 1 ? arguments[1] : undefined;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n if (!options.defaultNS && options.defaultNS !== false && options.ns) {\n if (typeof options.ns === 'string') {\n options.defaultNS = options.ns;\n } else if (options.ns.indexOf('translation') < 0) {\n options.defaultNS = options.ns[0];\n }\n }\n const defOpts = get();\n this.options = {\n ...defOpts,\n ...this.options,\n ...transformOptions(options)\n };\n if (this.options.compatibilityAPI !== 'v1') {\n this.options.interpolation = {\n ...defOpts.interpolation,\n ...this.options.interpolation\n };\n }\n if (options.keySeparator !== undefined) {\n this.options.userDefinedKeySeparator = options.keySeparator;\n }\n if (options.nsSeparator !== undefined) {\n this.options.userDefinedNsSeparator = options.nsSeparator;\n }\n function createClassOnDemand(ClassOrObject) {\n if (!ClassOrObject) return null;\n if (typeof ClassOrObject === 'function') return new ClassOrObject();\n return ClassOrObject;\n }\n if (!this.options.isClone) {\n if (this.modules.logger) {\n baseLogger.init(createClassOnDemand(this.modules.logger), this.options);\n } else {\n baseLogger.init(null, this.options);\n }\n let formatter;\n if (this.modules.formatter) {\n formatter = this.modules.formatter;\n } else if (typeof Intl !== 'undefined') {\n formatter = Formatter;\n }\n const lu = new LanguageUtil(this.options);\n this.store = new ResourceStore(this.options.resources, this.options);\n const s = this.services;\n s.logger = baseLogger;\n s.resourceStore = this.store;\n s.languageUtils = lu;\n s.pluralResolver = new PluralResolver(lu, {\n prepend: this.options.pluralSeparator,\n compatibilityJSON: this.options.compatibilityJSON,\n simplifyPluralSuffix: this.options.simplifyPluralSuffix\n });\n if (formatter && (!this.options.interpolation.format || this.options.interpolation.format === defOpts.interpolation.format)) {\n s.formatter = createClassOnDemand(formatter);\n s.formatter.init(s, this.options);\n this.options.interpolation.format = s.formatter.format.bind(s.formatter);\n }\n s.interpolator = new Interpolator(this.options);\n s.utils = {\n hasLoadedNamespace: this.hasLoadedNamespace.bind(this)\n };\n s.backendConnector = new Connector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options);\n s.backendConnector.on('*', function (event) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n _this.emit(event, ...args);\n });\n if (this.modules.languageDetector) {\n s.languageDetector = createClassOnDemand(this.modules.languageDetector);\n if (s.languageDetector.init) s.languageDetector.init(s, this.options.detection, this.options);\n }\n if (this.modules.i18nFormat) {\n s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);\n if (s.i18nFormat.init) s.i18nFormat.init(this);\n }\n this.translator = new Translator(this.services, this.options);\n this.translator.on('*', function (event) {\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 _this.emit(event, ...args);\n });\n this.modules.external.forEach(m => {\n if (m.init) m.init(this);\n });\n }\n this.format = this.options.interpolation.format;\n if (!callback) callback = noop;\n if (this.options.fallbackLng && !this.services.languageDetector && !this.options.lng) {\n const codes = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n if (codes.length > 0 && codes[0] !== 'dev') this.options.lng = codes[0];\n }\n if (!this.services.languageDetector && !this.options.lng) {\n this.logger.warn('init: no languageDetector is used and no lng is defined');\n }\n const storeApi = ['getResource', 'hasResourceBundle', 'getResourceBundle', 'getDataByLanguage'];\n storeApi.forEach(fcName => {\n this[fcName] = function () {\n return _this.store[fcName](...arguments);\n };\n });\n const storeApiChained = ['addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle'];\n storeApiChained.forEach(fcName => {\n this[fcName] = function () {\n _this.store[fcName](...arguments);\n return _this;\n };\n });\n const deferred = defer();\n const load = () => {\n const finish = (err, t) => {\n if (this.isInitialized && !this.initializedStoreOnce) this.logger.warn('init: i18next is already initialized. You should call init just once!');\n this.isInitialized = true;\n if (!this.options.isClone) this.logger.log('initialized', this.options);\n this.emit('initialized', this.options);\n deferred.resolve(t);\n callback(err, t);\n };\n if (this.languages && this.options.compatibilityAPI !== 'v1' && !this.isInitialized) return finish(null, this.t.bind(this));\n this.changeLanguage(this.options.lng, finish);\n };\n if (this.options.resources || !this.options.initImmediate) {\n load();\n } else {\n setTimeout(load, 0);\n }\n return deferred;\n }\n loadResources(language) {\n let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n let usedCallback = callback;\n const usedLng = typeof language === 'string' ? language : this.language;\n if (typeof language === 'function') usedCallback = language;\n if (!this.options.resources || this.options.partialBundledLanguages) {\n if (usedLng && usedLng.toLowerCase() === 'cimode' && (!this.options.preload || this.options.preload.length === 0)) return usedCallback();\n const toLoad = [];\n const append = lng => {\n if (!lng) return;\n if (lng === 'cimode') return;\n const lngs = this.services.languageUtils.toResolveHierarchy(lng);\n lngs.forEach(l => {\n if (l === 'cimode') return;\n if (toLoad.indexOf(l) < 0) toLoad.push(l);\n });\n };\n if (!usedLng) {\n const fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n fallbacks.forEach(l => append(l));\n } else {\n append(usedLng);\n }\n if (this.options.preload) {\n this.options.preload.forEach(l => append(l));\n }\n this.services.backendConnector.load(toLoad, this.options.ns, e => {\n if (!e && !this.resolvedLanguage && this.language) this.setResolvedLanguage(this.language);\n usedCallback(e);\n });\n } else {\n usedCallback(null);\n }\n }\n reloadResources(lngs, ns, callback) {\n const deferred = defer();\n if (!lngs) lngs = this.languages;\n if (!ns) ns = this.options.ns;\n if (!callback) callback = noop;\n this.services.backendConnector.reload(lngs, ns, err => {\n deferred.resolve();\n callback(err);\n });\n return deferred;\n }\n use(module) {\n if (!module) throw new Error('You are passing an undefined module! Please check the object you are passing to i18next.use()');\n if (!module.type) throw new Error('You are passing a wrong module! Please check the object you are passing to i18next.use()');\n if (module.type === 'backend') {\n this.modules.backend = module;\n }\n if (module.type === 'logger' || module.log && module.warn && module.error) {\n this.modules.logger = module;\n }\n if (module.type === 'languageDetector') {\n this.modules.languageDetector = module;\n }\n if (module.type === 'i18nFormat') {\n this.modules.i18nFormat = module;\n }\n if (module.type === 'postProcessor') {\n postProcessor.addPostProcessor(module);\n }\n if (module.type === 'formatter') {\n this.modules.formatter = module;\n }\n if (module.type === '3rdParty') {\n this.modules.external.push(module);\n }\n return this;\n }\n setResolvedLanguage(l) {\n if (!l || !this.languages) return;\n if (['cimode', 'dev'].indexOf(l) > -1) return;\n for (let li = 0; li < this.languages.length; li++) {\n const lngInLngs = this.languages[li];\n if (['cimode', 'dev'].indexOf(lngInLngs) > -1) continue;\n if (this.store.hasLanguageSomeTranslations(lngInLngs)) {\n this.resolvedLanguage = lngInLngs;\n break;\n }\n }\n }\n changeLanguage(lng, callback) {\n var _this2 = this;\n this.isLanguageChangingTo = lng;\n const deferred = defer();\n this.emit('languageChanging', lng);\n const setLngProps = l => {\n this.language = l;\n this.languages = this.services.languageUtils.toResolveHierarchy(l);\n this.resolvedLanguage = undefined;\n this.setResolvedLanguage(l);\n };\n const done = (err, l) => {\n if (l) {\n setLngProps(l);\n this.translator.changeLanguage(l);\n this.isLanguageChangingTo = undefined;\n this.emit('languageChanged', l);\n this.logger.log('languageChanged', l);\n } else {\n this.isLanguageChangingTo = undefined;\n }\n deferred.resolve(function () {\n return _this2.t(...arguments);\n });\n if (callback) callback(err, function () {\n return _this2.t(...arguments);\n });\n };\n const setLng = lngs => {\n if (!lng && !lngs && this.services.languageDetector) lngs = [];\n const l = typeof lngs === 'string' ? lngs : this.services.languageUtils.getBestMatchFromCodes(lngs);\n if (l) {\n if (!this.language) {\n setLngProps(l);\n }\n if (!this.translator.language) this.translator.changeLanguage(l);\n if (this.services.languageDetector && this.services.languageDetector.cacheUserLanguage) this.services.languageDetector.cacheUserLanguage(l);\n }\n this.loadResources(l, err => {\n done(err, l);\n });\n };\n if (!lng && this.services.languageDetector && !this.services.languageDetector.async) {\n setLng(this.services.languageDetector.detect());\n } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) {\n if (this.services.languageDetector.detect.length === 0) {\n this.services.languageDetector.detect().then(setLng);\n } else {\n this.services.languageDetector.detect(setLng);\n }\n } else {\n setLng(lng);\n }\n return deferred;\n }\n getFixedT(lng, ns, keyPrefix) {\n var _this3 = this;\n const fixedT = function (key, opts) {\n let options;\n if (typeof opts !== 'object') {\n for (var _len3 = arguments.length, rest = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n rest[_key3 - 2] = arguments[_key3];\n }\n options = _this3.options.overloadTranslationOptionHandler([key, opts].concat(rest));\n } else {\n options = {\n ...opts\n };\n }\n options.lng = options.lng || fixedT.lng;\n options.lngs = options.lngs || fixedT.lngs;\n options.ns = options.ns || fixedT.ns;\n options.keyPrefix = options.keyPrefix || keyPrefix || fixedT.keyPrefix;\n const keySeparator = _this3.options.keySeparator || '.';\n let resultKey;\n if (options.keyPrefix && Array.isArray(key)) {\n resultKey = key.map(k => `${options.keyPrefix}${keySeparator}${k}`);\n } else {\n resultKey = options.keyPrefix ? `${options.keyPrefix}${keySeparator}${key}` : key;\n }\n return _this3.t(resultKey, options);\n };\n if (typeof lng === 'string') {\n fixedT.lng = lng;\n } else {\n fixedT.lngs = lng;\n }\n fixedT.ns = ns;\n fixedT.keyPrefix = keyPrefix;\n return fixedT;\n }\n t() {\n return this.translator && this.translator.translate(...arguments);\n }\n exists() {\n return this.translator && this.translator.exists(...arguments);\n }\n setDefaultNamespace(ns) {\n this.options.defaultNS = ns;\n }\n hasLoadedNamespace(ns) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (!this.isInitialized) {\n this.logger.warn('hasLoadedNamespace: i18next was not initialized', this.languages);\n return false;\n }\n if (!this.languages || !this.languages.length) {\n this.logger.warn('hasLoadedNamespace: i18n.languages were undefined or empty', this.languages);\n return false;\n }\n const lng = options.lng || this.resolvedLanguage || this.languages[0];\n const fallbackLng = this.options ? this.options.fallbackLng : false;\n const lastLng = this.languages[this.languages.length - 1];\n if (lng.toLowerCase() === 'cimode') return true;\n const loadNotPending = (l, n) => {\n const loadState = this.services.backendConnector.state[`${l}|${n}`];\n return loadState === -1 || loadState === 2;\n };\n if (options.precheck) {\n const preResult = options.precheck(this, loadNotPending);\n if (preResult !== undefined) return preResult;\n }\n if (this.hasResourceBundle(lng, ns)) return true;\n if (!this.services.backendConnector.backend || this.options.resources && !this.options.partialBundledLanguages) return true;\n if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n return false;\n }\n loadNamespaces(ns, callback) {\n const deferred = defer();\n if (!this.options.ns) {\n if (callback) callback();\n return Promise.resolve();\n }\n if (typeof ns === 'string') ns = [ns];\n ns.forEach(n => {\n if (this.options.ns.indexOf(n) < 0) this.options.ns.push(n);\n });\n this.loadResources(err => {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n loadLanguages(lngs, callback) {\n const deferred = defer();\n if (typeof lngs === 'string') lngs = [lngs];\n const preloaded = this.options.preload || [];\n const newLngs = lngs.filter(lng => preloaded.indexOf(lng) < 0);\n if (!newLngs.length) {\n if (callback) callback();\n return Promise.resolve();\n }\n this.options.preload = preloaded.concat(newLngs);\n this.loadResources(err => {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n dir(lng) {\n if (!lng) lng = this.resolvedLanguage || (this.languages && this.languages.length > 0 ? this.languages[0] : this.language);\n if (!lng) return 'rtl';\n const rtlLngs = ['ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ug', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam', 'ckb'];\n const languageUtils = this.services && this.services.languageUtils || new LanguageUtil(get());\n return rtlLngs.indexOf(languageUtils.getLanguagePartFromCode(lng)) > -1 || lng.toLowerCase().indexOf('-arab') > 1 ? 'rtl' : 'ltr';\n }\n static createInstance() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let callback = arguments.length > 1 ? arguments[1] : undefined;\n return new I18n(options, callback);\n }\n cloneInstance() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n const forkResourceStore = options.forkResourceStore;\n if (forkResourceStore) delete options.forkResourceStore;\n const mergedOptions = {\n ...this.options,\n ...options,\n ...{\n isClone: true\n }\n };\n const clone = new I18n(mergedOptions);\n if (options.debug !== undefined || options.prefix !== undefined) {\n clone.logger = clone.logger.clone(options);\n }\n const membersToCopy = ['store', 'services', 'language'];\n membersToCopy.forEach(m => {\n clone[m] = this[m];\n });\n clone.services = {\n ...this.services\n };\n clone.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n if (forkResourceStore) {\n clone.store = new ResourceStore(this.store.data, mergedOptions);\n clone.services.resourceStore = clone.store;\n }\n clone.translator = new Translator(clone.services, mergedOptions);\n clone.translator.on('*', function (event) {\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 clone.emit(event, ...args);\n });\n clone.init(mergedOptions, callback);\n clone.translator.options = mergedOptions;\n clone.translator.backendConnector.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n return clone;\n }\n toJSON() {\n return {\n options: this.options,\n store: this.store,\n language: this.language,\n languages: this.languages,\n resolvedLanguage: this.resolvedLanguage\n };\n }\n}\nconst instance = I18n.createInstance();\ninstance.createInstance = I18n.createInstance;\n\nconst createInstance = instance.createInstance;\nconst dir = instance.dir;\nconst init = instance.init;\nconst loadResources = instance.loadResources;\nconst reloadResources = instance.reloadResources;\nconst use = instance.use;\nconst changeLanguage = instance.changeLanguage;\nconst getFixedT = instance.getFixedT;\nconst t = instance.t;\nconst exists = instance.exists;\nconst setDefaultNamespace = instance.setDefaultNamespace;\nconst hasLoadedNamespace = instance.hasLoadedNamespace;\nconst loadNamespaces = instance.loadNamespaces;\nconst loadLanguages = instance.loadLanguages;\n\nexport { changeLanguage, createInstance, instance as default, dir, exists, getFixedT, hasLoadedNamespace, init, loadLanguages, loadNamespaces, loadResources, reloadResources, setDefaultNamespace, t, use };\n","import _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\nimport _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport _typeof from '@babel/runtime/helpers/esm/typeof';\n\nvar arr = [];\nvar each = arr.forEach;\nvar slice = arr.slice;\nfunction defaults(obj) {\n each.call(slice.call(arguments, 1), function (source) {\n if (source) {\n for (var prop in source) {\n if (obj[prop] === undefined) obj[prop] = source[prop];\n }\n }\n });\n return obj;\n}\n\nfunction addQueryString(url, params) {\n if (params && _typeof(params) === 'object') {\n var queryString = '',\n e = encodeURIComponent; // Must encode data\n\n for (var paramName in params) {\n queryString += '&' + e(paramName) + '=' + e(params[paramName]);\n }\n\n if (!queryString) {\n return url;\n }\n\n url = url + (url.indexOf('?') !== -1 ? '&' : '?') + queryString.slice(1);\n }\n\n return url;\n} // https://gist.github.com/Xeoncross/7663273\n\n\nfunction ajax(url, options, callback, data, cache) {\n if (data && _typeof(data) === 'object') {\n if (!cache) {\n data['_t'] = new Date();\n } // URL encoded form data must be in querystring format\n\n\n data = addQueryString('', data).slice(1);\n }\n\n if (options.queryStringParams) {\n url = addQueryString(url, options.queryStringParams);\n }\n\n try {\n var x;\n\n if (XMLHttpRequest) {\n x = new XMLHttpRequest();\n } else {\n x = new ActiveXObject('MSXML2.XMLHTTP.3.0');\n }\n\n x.open(data ? 'POST' : 'GET', url, 1);\n\n if (!options.crossDomain) {\n x.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n }\n\n x.withCredentials = !!options.withCredentials;\n\n if (data) {\n x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');\n }\n\n if (x.overrideMimeType) {\n x.overrideMimeType(\"application/json\");\n }\n\n var h = options.customHeaders;\n h = typeof h === 'function' ? h() : h;\n\n if (h) {\n for (var i in h) {\n x.setRequestHeader(i, h[i]);\n }\n }\n\n x.onreadystatechange = function () {\n x.readyState > 3 && callback && callback(x.responseText, x);\n };\n\n x.send(data);\n } catch (e) {\n console && console.log(e);\n }\n}\n\nfunction getDefaults() {\n return {\n loadPath: '/locales/{{lng}}/{{ns}}.json',\n addPath: '/locales/add/{{lng}}/{{ns}}',\n allowMultiLoading: false,\n parse: JSON.parse,\n parsePayload: function parsePayload(namespace, key, fallbackValue) {\n return _defineProperty({}, key, fallbackValue || '');\n },\n crossDomain: false,\n ajax: ajax\n };\n}\n\nvar Backend =\n/*#__PURE__*/\nfunction () {\n function Backend(services) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Backend);\n\n this.init(services, options);\n this.type = 'backend';\n }\n\n _createClass(Backend, [{\n key: \"init\",\n value: function init(services) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.services = services;\n this.options = defaults(options, this.options || {}, getDefaults());\n }\n }, {\n key: \"readMulti\",\n value: function readMulti(languages, namespaces, callback) {\n var loadPath = this.options.loadPath;\n\n if (typeof this.options.loadPath === 'function') {\n loadPath = this.options.loadPath(languages, namespaces);\n }\n\n var url = this.services.interpolator.interpolate(loadPath, {\n lng: languages.join('+'),\n ns: namespaces.join('+')\n });\n this.loadUrl(url, callback);\n }\n }, {\n key: \"read\",\n value: function read(language, namespace, callback) {\n var loadPath = this.options.loadPath;\n\n if (typeof this.options.loadPath === 'function') {\n loadPath = this.options.loadPath([language], [namespace]);\n }\n\n var url = this.services.interpolator.interpolate(loadPath, {\n lng: language,\n ns: namespace\n });\n this.loadUrl(url, callback);\n }\n }, {\n key: \"loadUrl\",\n value: function loadUrl(url, callback) {\n var _this = this;\n\n this.options.ajax(url, this.options, function (data, xhr) {\n if (xhr.status >= 500 && xhr.status < 600) return callback('failed loading ' + url, true\n /* retry */\n );\n if (xhr.status >= 400 && xhr.status < 500) return callback('failed loading ' + url, false\n /* no retry */\n );\n var ret, err;\n\n try {\n ret = _this.options.parse(data, url);\n } catch (e) {\n err = 'failed parsing ' + url + ' to json';\n }\n\n if (err) return callback(err, false);\n callback(null, ret);\n });\n }\n }, {\n key: \"create\",\n value: function create(languages, namespace, key, fallbackValue) {\n var _this2 = this;\n\n if (typeof languages === 'string') languages = [languages];\n var payload = this.options.parsePayload(namespace, key, fallbackValue);\n languages.forEach(function (lng) {\n var url = _this2.services.interpolator.interpolate(_this2.options.addPath, {\n lng: lng,\n ns: namespace\n });\n\n _this2.options.ajax(url, _this2.options, function (data, xhr) {//const statusCode = xhr.status.toString();\n // TODO: if statusCode === 4xx do log\n }, payload);\n });\n }\n }]);\n\n return Backend;\n}();\n\nBackend.type = 'backend';\n\nexport default Backend;\n","import _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\n\nvar arr = [];\nvar each = arr.forEach;\nvar slice = arr.slice;\nfunction defaults(obj) {\n each.call(slice.call(arguments, 1), function (source) {\n if (source) {\n for (var prop in source) {\n if (obj[prop] === undefined) obj[prop] = source[prop];\n }\n }\n });\n return obj;\n}\n\n// eslint-disable-next-line no-control-regex\nvar fieldContentRegExp = /^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;\nvar serializeCookie = function serializeCookie(name, val, options) {\n var opt = options || {};\n opt.path = opt.path || '/';\n var value = encodeURIComponent(val);\n var str = \"\".concat(name, \"=\").concat(value);\n if (opt.maxAge > 0) {\n var maxAge = opt.maxAge - 0;\n if (Number.isNaN(maxAge)) throw new Error('maxAge should be a Number');\n str += \"; Max-Age=\".concat(Math.floor(maxAge));\n }\n if (opt.domain) {\n if (!fieldContentRegExp.test(opt.domain)) {\n throw new TypeError('option domain is invalid');\n }\n str += \"; Domain=\".concat(opt.domain);\n }\n if (opt.path) {\n if (!fieldContentRegExp.test(opt.path)) {\n throw new TypeError('option path is invalid');\n }\n str += \"; Path=\".concat(opt.path);\n }\n if (opt.expires) {\n if (typeof opt.expires.toUTCString !== 'function') {\n throw new TypeError('option expires is invalid');\n }\n str += \"; Expires=\".concat(opt.expires.toUTCString());\n }\n if (opt.httpOnly) str += '; HttpOnly';\n if (opt.secure) str += '; Secure';\n if (opt.sameSite) {\n var sameSite = typeof opt.sameSite === 'string' ? opt.sameSite.toLowerCase() : opt.sameSite;\n switch (sameSite) {\n case true:\n str += '; SameSite=Strict';\n break;\n case 'lax':\n str += '; SameSite=Lax';\n break;\n case 'strict':\n str += '; SameSite=Strict';\n break;\n case 'none':\n str += '; SameSite=None';\n break;\n default:\n throw new TypeError('option sameSite is invalid');\n }\n }\n return str;\n};\nvar cookie = {\n create: function create(name, value, minutes, domain) {\n var cookieOptions = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n path: '/',\n sameSite: 'strict'\n };\n if (minutes) {\n cookieOptions.expires = new Date();\n cookieOptions.expires.setTime(cookieOptions.expires.getTime() + minutes * 60 * 1000);\n }\n if (domain) cookieOptions.domain = domain;\n document.cookie = serializeCookie(name, encodeURIComponent(value), cookieOptions);\n },\n read: function read(name) {\n var nameEQ = \"\".concat(name, \"=\");\n var ca = document.cookie.split(';');\n for (var i = 0; i < ca.length; i++) {\n var c = ca[i];\n while (c.charAt(0) === ' ') c = c.substring(1, c.length);\n if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);\n }\n return null;\n },\n remove: function remove(name) {\n this.create(name, '', -1);\n }\n};\nvar cookie$1 = {\n name: 'cookie',\n lookup: function lookup(options) {\n var found;\n if (options.lookupCookie && typeof document !== 'undefined') {\n var c = cookie.read(options.lookupCookie);\n if (c) found = c;\n }\n return found;\n },\n cacheUserLanguage: function cacheUserLanguage(lng, options) {\n if (options.lookupCookie && typeof document !== 'undefined') {\n cookie.create(options.lookupCookie, lng, options.cookieMinutes, options.cookieDomain, options.cookieOptions);\n }\n }\n};\n\nvar querystring = {\n name: 'querystring',\n lookup: function lookup(options) {\n var found;\n if (typeof window !== 'undefined') {\n var search = window.location.search;\n if (!window.location.search && window.location.hash && window.location.hash.indexOf('?') > -1) {\n search = window.location.hash.substring(window.location.hash.indexOf('?'));\n }\n var query = search.substring(1);\n var params = query.split('&');\n for (var i = 0; i < params.length; i++) {\n var pos = params[i].indexOf('=');\n if (pos > 0) {\n var key = params[i].substring(0, pos);\n if (key === options.lookupQuerystring) {\n found = params[i].substring(pos + 1);\n }\n }\n }\n }\n return found;\n }\n};\n\nvar hasLocalStorageSupport = null;\nvar localStorageAvailable = function localStorageAvailable() {\n if (hasLocalStorageSupport !== null) return hasLocalStorageSupport;\n try {\n hasLocalStorageSupport = window !== 'undefined' && window.localStorage !== null;\n var testKey = 'i18next.translate.boo';\n window.localStorage.setItem(testKey, 'foo');\n window.localStorage.removeItem(testKey);\n } catch (e) {\n hasLocalStorageSupport = false;\n }\n return hasLocalStorageSupport;\n};\nvar localStorage = {\n name: 'localStorage',\n lookup: function lookup(options) {\n var found;\n if (options.lookupLocalStorage && localStorageAvailable()) {\n var lng = window.localStorage.getItem(options.lookupLocalStorage);\n if (lng) found = lng;\n }\n return found;\n },\n cacheUserLanguage: function cacheUserLanguage(lng, options) {\n if (options.lookupLocalStorage && localStorageAvailable()) {\n window.localStorage.setItem(options.lookupLocalStorage, lng);\n }\n }\n};\n\nvar hasSessionStorageSupport = null;\nvar sessionStorageAvailable = function sessionStorageAvailable() {\n if (hasSessionStorageSupport !== null) return hasSessionStorageSupport;\n try {\n hasSessionStorageSupport = window !== 'undefined' && window.sessionStorage !== null;\n var testKey = 'i18next.translate.boo';\n window.sessionStorage.setItem(testKey, 'foo');\n window.sessionStorage.removeItem(testKey);\n } catch (e) {\n hasSessionStorageSupport = false;\n }\n return hasSessionStorageSupport;\n};\nvar sessionStorage = {\n name: 'sessionStorage',\n lookup: function lookup(options) {\n var found;\n if (options.lookupSessionStorage && sessionStorageAvailable()) {\n var lng = window.sessionStorage.getItem(options.lookupSessionStorage);\n if (lng) found = lng;\n }\n return found;\n },\n cacheUserLanguage: function cacheUserLanguage(lng, options) {\n if (options.lookupSessionStorage && sessionStorageAvailable()) {\n window.sessionStorage.setItem(options.lookupSessionStorage, lng);\n }\n }\n};\n\nvar navigator$1 = {\n name: 'navigator',\n lookup: function lookup(options) {\n var found = [];\n if (typeof navigator !== 'undefined') {\n if (navigator.languages) {\n // chrome only; not an array, so can't use .push.apply instead of iterating\n for (var i = 0; i < navigator.languages.length; i++) {\n found.push(navigator.languages[i]);\n }\n }\n if (navigator.userLanguage) {\n found.push(navigator.userLanguage);\n }\n if (navigator.language) {\n found.push(navigator.language);\n }\n }\n return found.length > 0 ? found : undefined;\n }\n};\n\nvar htmlTag = {\n name: 'htmlTag',\n lookup: function lookup(options) {\n var found;\n var htmlTag = options.htmlTag || (typeof document !== 'undefined' ? document.documentElement : null);\n if (htmlTag && typeof htmlTag.getAttribute === 'function') {\n found = htmlTag.getAttribute('lang');\n }\n return found;\n }\n};\n\nvar path = {\n name: 'path',\n lookup: function lookup(options) {\n var found;\n if (typeof window !== 'undefined') {\n var language = window.location.pathname.match(/\\/([a-zA-Z-]*)/g);\n if (language instanceof Array) {\n if (typeof options.lookupFromPathIndex === 'number') {\n if (typeof language[options.lookupFromPathIndex] !== 'string') {\n return undefined;\n }\n found = language[options.lookupFromPathIndex].replace('/', '');\n } else {\n found = language[0].replace('/', '');\n }\n }\n }\n return found;\n }\n};\n\nvar subdomain = {\n name: 'subdomain',\n lookup: function lookup(options) {\n // If given get the subdomain index else 1\n var lookupFromSubdomainIndex = typeof options.lookupFromSubdomainIndex === 'number' ? options.lookupFromSubdomainIndex + 1 : 1;\n // get all matches if window.location. is existing\n // first item of match is the match itself and the second is the first group macht which sould be the first subdomain match\n // is the hostname no public domain get the or option of localhost\n var language = typeof window !== 'undefined' && window.location && window.location.hostname && window.location.hostname.match(/^(\\w{2,5})\\.(([a-z0-9-]{1,63}\\.[a-z]{2,6})|localhost)/i);\n\n // if there is no match (null) return undefined\n if (!language) return undefined;\n // return the given group match\n return language[lookupFromSubdomainIndex];\n }\n};\n\nfunction getDefaults() {\n return {\n order: ['querystring', 'cookie', 'localStorage', 'sessionStorage', 'navigator', 'htmlTag'],\n lookupQuerystring: 'lng',\n lookupCookie: 'i18next',\n lookupLocalStorage: 'i18nextLng',\n lookupSessionStorage: 'i18nextLng',\n // cache user language\n caches: ['localStorage'],\n excludeCacheFor: ['cimode'],\n // cookieMinutes: 10,\n // cookieDomain: 'myDomain'\n\n convertDetectedLanguage: function convertDetectedLanguage(l) {\n return l;\n }\n };\n}\nvar Browser = /*#__PURE__*/function () {\n function Browser(services) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _classCallCheck(this, Browser);\n this.type = 'languageDetector';\n this.detectors = {};\n this.init(services, options);\n }\n _createClass(Browser, [{\n key: \"init\",\n value: function init(services) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var i18nOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n this.services = services || {\n languageUtils: {}\n }; // this way the language detector can be used without i18next\n this.options = defaults(options, this.options || {}, getDefaults());\n if (typeof this.options.convertDetectedLanguage === 'string' && this.options.convertDetectedLanguage.indexOf('15897') > -1) {\n this.options.convertDetectedLanguage = function (l) {\n return l.replace('-', '_');\n };\n }\n\n // backwards compatibility\n if (this.options.lookupFromUrlIndex) this.options.lookupFromPathIndex = this.options.lookupFromUrlIndex;\n this.i18nOptions = i18nOptions;\n this.addDetector(cookie$1);\n this.addDetector(querystring);\n this.addDetector(localStorage);\n this.addDetector(sessionStorage);\n this.addDetector(navigator$1);\n this.addDetector(htmlTag);\n this.addDetector(path);\n this.addDetector(subdomain);\n }\n }, {\n key: \"addDetector\",\n value: function addDetector(detector) {\n this.detectors[detector.name] = detector;\n }\n }, {\n key: \"detect\",\n value: function detect(detectionOrder) {\n var _this = this;\n if (!detectionOrder) detectionOrder = this.options.order;\n var detected = [];\n detectionOrder.forEach(function (detectorName) {\n if (_this.detectors[detectorName]) {\n var lookup = _this.detectors[detectorName].lookup(_this.options);\n if (lookup && typeof lookup === 'string') lookup = [lookup];\n if (lookup) detected = detected.concat(lookup);\n }\n });\n detected = detected.map(function (d) {\n return _this.options.convertDetectedLanguage(d);\n });\n if (this.services.languageUtils.getBestMatchFromCodes) return detected; // new i18next v19.5.0\n return detected.length > 0 ? detected[0] : null; // a little backward compatibility\n }\n }, {\n key: \"cacheUserLanguage\",\n value: function cacheUserLanguage(lng, caches) {\n var _this2 = this;\n if (!caches) caches = this.options.caches;\n if (!caches) return;\n if (this.options.excludeCacheFor && this.options.excludeCacheFor.indexOf(lng) > -1) return;\n caches.forEach(function (cacheName) {\n if (_this2.detectors[cacheName]) _this2.detectors[cacheName].cacheUserLanguage(lng, _this2.options);\n });\n }\n }]);\n return Browser;\n}();\nBrowser.type = 'languageDetector';\n\nexport { Browser as default };\n","import {type BackendOptions} from 'i18next-xhr-backend';\nimport {I18N_SUPPORTED_LANGUAGES} from './constants';\n\n/**\n * i18next backend options\n */\nexport const backendOptions: BackendOptions = {\n\tallowMultiLoading: false,\n\tloadPath: (lngs) => {\n\t\tconst lng = I18N_SUPPORTED_LANGUAGES.includes(lngs[0]) ? lngs[0] : 'en-US';\n\t\treturn `/locales/${lng}/locales`;\n\t},\n};\n\nexport default backendOptions;\n","import {I18nSupportedLocale} from './constants';\nimport {Locales} from './utils';\n\nexport const I18nSupportedLocaleLabel = Locales<\n\tRecord<I18nSupportedLocale, string>\n>((i18n) => ({\n\t[I18nSupportedLocale.ENGLISH]: i18n('i18n.languageEnglish'),\n\t[I18nSupportedLocale.FRENCH]: i18n('i18n.languageFrench'),\n\t[I18nSupportedLocale.GERMAN]: i18n('i18n.languageGerman'),\n\t[I18nSupportedLocale.JAPANESE]: i18n('i18n.languageJapanese'),\n}));\n","import {getPreference} from '@netx/core-user-next/utils/getPreference';\nimport {I18nSupportedLocale} from '../constants';\n\nexport const getAvailableLocales = () => {\n\tconst localesPref = getPreference('i18n.userSelectableLocales');\n\tif (!localesPref) return Object.values(I18nSupportedLocale);\n\tconst localesFilter = localesPref.split(/[ ,]+/);\n\treturn Object.values(I18nSupportedLocale).filter((locale) =>\n\t\tlocalesFilter.includes(locale),\n\t);\n};\n\nexport default getAvailableLocales;\n","import {i18n} from '../i18n';\n\nexport const i18nLocaleCompare = (a: string, b: string) =>\n\tIntl.Collator(i18n.language).compare(a, b);\n\nexport default i18nLocaleCompare;\n","import {i18n as _i18n, i18nInitialized, i18nReady} from '../i18n';\n\n/**\n * Locales wrapper to ensure that values are set when i18n has been initialized\n * @param cb Callback function that returns the localized strings\n * @returns Localized strings\n *\n * @example\n * export const SchemaValidationErrorLabel = Locales((i18n) => ({\n * \tDATE_INVALID: i18n('i18n.invalidDate'),\n * \tREQUIRED: i18n('i18n.required'),\n * }));\n */\nexport const Locales = <\n\tT extends Record<string | number, string> = Record<string | number, string>,\n\tF extends (...args: any[]) => any = (\n\t\ti18n: typeof _i18n.t,\n\t\tlanguage: string,\n\t) => T,\n>(\n\tcb: F,\n): ReturnType<F> => {\n\tlet currentLanguage = _i18n.language;\n\n\tconst listen = () => {\n\t\t_i18n.on('languageChanged', (lng) => {\n\t\t\tif (currentLanguage === lng) return;\n\n\t\t\tif (!_i18n.hasResourceBundle(lng, 'translation')) {\n\t\t\t\tconst handleLoaded = () => {\n\t\t\t\t\tObject.assign(results, cb(_i18n.t.bind(_i18n), _i18n.language));\n\t\t\t\t\t_i18n.off('loaded', handleLoaded);\n\t\t\t\t};\n\t\t\t\t_i18n.on('loaded', handleLoaded);\n\t\t\t} else {\n\t\t\t\tObject.assign(results, cb(_i18n.t.bind(_i18n), _i18n.language));\n\t\t\t}\n\t\t\tcurrentLanguage = _i18n.language;\n\t\t});\n\t};\n\n\t// we will just abuse the object reference\n\t// we are still going to need to make a react hook for locales\n\t// so that one day we don't have to reload the entire site when that changes\n\t// just update the app context and any components rendered will re-render with\n\t// the updated locales\n\t// in any event, still think it may be nice to keep things wrapped in this so\n\t// that we can deal with the lib directly here and not a thousand places\n\tconst results = {} as ReturnType<F>;\n\tif (!i18nReady) {\n\t\tObject.assign(results, cb(_i18n.t.bind(_i18n), _i18n.language));\n\t\ti18nInitialized.then(() => {\n\t\t\tObject.assign(results, cb(_i18n.t.bind(_i18n), _i18n.language));\n\t\t\tlisten();\n\t\t});\n\t} else {\n\t\tObject.assign(results, cb(_i18n.t.bind(_i18n), _i18n.language));\n\t\tlisten();\n\t}\n\n\treturn results;\n};\n\nexport default Locales;\n","import window from 'global/window';\n\n/*******\n * The following logic builds the Netx.URL object\n * which contains all relevant path information\n * such as host, protocol, query string, base, api\n * endpoint, etc.\n */\n\nexport const apiVersion = `v1.2`;\nexport const apiEndpoint = `/x7/${apiVersion}/json`;\n\nconst host: string = window.location.host;\nconst location: string = window.location.href.toString();\nconst protocol: string = location.split(host)[0];\nconst queryString = location.split(host)[1];\nconst baseDir: string = window.location.pathname;\nconst base = protocol + host + baseDir;\n\nexport let themeName = baseDir.match(/\\/portals\\/(.*)\\//)?.[1] || 'netx';\n\nconst api = protocol + host + apiEndpoint;\nconst proxyApiEndpoint = '/core/proxy/';\nconst proxyApi = protocol + host + proxyApiEndpoint;\n\nconst uploadEndpoint = '/servlet/FileUploader';\nconst upload = protocol + host + uploadEndpoint;\nconst uploads3Endpoint = `${protocol}${host}/`;\n\n/** Asset retrieval servlet (for zoom) */\nconst assetEndpoint = '/file/asset';\nconst asset = protocol + host + assetEndpoint;\n\nconst assetFileApiEndpoint = `${protocol}${host}/api/file/asset/`;\n\n// Branding\n// Login background (only for netx theme currently)\nconst loginBackgroundEndpoint = '/theme/netx/background';\nconst loginBackground = protocol + host + loginBackgroundEndpoint;\n\nconst watermarkEndpoint = `/theme/${themeName}/watermark`;\nconst watermark = `${protocol}${host}${watermarkEndpoint}`;\n\n// CSS Properties (vars)\nconst customCssPropertiesEndpoint = `/theme/${themeName}/cssCustomProperties`;\nconst customCssProperties = protocol + host + customCssPropertiesEndpoint;\n\n// Logos (only for netx theme currently)\nconst logoLightEndpoint = '/theme/netx/logo-light';\nconst logoDarkEndpoint = '/theme/netx/logo-dark';\nconst logoLight = protocol + host + logoLightEndpoint;\nconst logoDark = protocol + host + logoDarkEndpoint;\n\n// This is to holdover portal until both `netx` and `portal` use the same branding mechanism\nconst themeLogo = themeName !== 'netx' ? `/theme/${themeName}/logo` : '';\n\n/**\n * Common URLs\n */\nexport const URL = {\n\tapi,\n\tasset,\n\tassetEndpoint,\n\tassetFileApiEndpoint,\n\tbase,\n\tbaseDir,\n\tcustomCssProperties,\n\tcustomCssPropertiesEndpoint,\n\thost,\n\tlocation,\n\tloginBackground,\n\tloginBackgroundEndpoint,\n\tlogoDarkEndpoint,\n\tlogoDark,\n\tlogoLightEndpoint,\n\tlogoLight,\n\tprotocol,\n\tproxyApi,\n\tproxyApiEndpoint,\n\tqueryString,\n\tthemeLogo,\n\tupload,\n\tuploadEndpoint,\n\tuploads3Endpoint,\n\twatermark,\n\twatermarkEndpoint,\n};\n\nexport default URL;\n","/**\n * Convert an array to a CSV string\n * @param array Array to convert\n * @param spaces Add spaces after commas\n * @returns CSV string\n *\n * @example\n * ```ts\n * const csv = arrayToCsv(['a', 'b', 'c']); // \"a\",\"b\",\"c\"\n * ```\n */\nexport const arrayToCsv = (\n\tarray?: string | (number | string)[],\n\tspaces?: boolean,\n) => {\n\tif (typeof array === 'string') return array;\n\tif (!array || !Array.isArray(array)) return '';\n\treturn array.map((v) => `\"${v}\"`).join(`,${spaces ? ' ' : ''}`);\n};\n\nexport default arrayToCsv;\n","/**\n * Util to convert from the DAM's quoted-csv format for multiselects to a normal array\n * @param csv CSV string to convert\n * @param sep Separator\n * @returns Array\n *\n * @example\n * ```ts\n * const array = csvToArray('a,b,c'); // ['a', 'b', 'c']\n * ```\n */\nexport const csvToArray = (csv?: string[] | string, sep = ',') => {\n\tif (!csv) return [];\n\tif (Array.isArray(csv)) return csv;\n\n\t// the server will not wrap values in additional quotes if there is only 1 value\n\t// if we parse that one value we may end up splitting a value that contains commas\n\t// so, if we start with a \" and end with a \"\n\t// single value example string: \"Half sunk a shattered visage lies, whose frown,\"\n\t// multiple value example string: \"\\\"Who said—“Two vast and trunkless legs of stone\\\",\\\"\\\"I met a traveller from an antique land,\\\"\"\n\tif (csv.slice(0, 1) !== '\"' && csv.slice(-1) !== '\"') {\n\t\treturn [csv];\n\t}\n\n\t// https://greywyvern.com/?post=258\n\tfor (\n\t\t// eslint-disable-next-line no-var\n\t\tvar foo = csv.split((sep = sep || ',')), x = foo.length - 1, tl;\n\t\tx >= 0;\n\t\tx--\n\t) {\n\t\tif (foo[x].replace(/\"\\s+$/, '\"').charAt(foo[x].length - 1) == '\"') {\n\t\t\tif (\n\t\t\t\t(tl = foo[x].replace(/^\\s+\"/, '\"')).length > 1 &&\n\t\t\t\ttl.charAt(0) == '\"'\n\t\t\t) {\n\t\t\t\tfoo[x] = foo[x].replace(/^\\s*\"|\"\\s*$/g, '').replace(/\"\"/g, '\"');\n\t\t\t} else if (x) {\n\t\t\t\tfoo.splice(x - 1, 2, [foo[x - 1], foo[x]].join(sep));\n\t\t\t} else foo = foo.shift()?.split(sep).concat(foo) || [''];\n\t\t} else foo[x].replace(/\"\"/g, '\"');\n\t}\n\treturn foo\n\t\t.map((f) => f.replace(/\\\\'/g, \"'\"))\n\t\t.filter((f) => f != null && f !== '');\n};\n\nexport default csvToArray;\n","export const isFirefox = () =>\n\tnavigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n","// https://www.typescriptlang.org/play?exactOptionalPropertyTypes=true#code/C4TwDgpgBAKgrmANhAogO2AJxAHhlCAD2AjQBMBnKTCAQzIHs1EQo40BrNBgdzQG0AugBooASQLFSlNp258hUALxQhogErKoaCADcImAHzKAUFFiSS5KjXpMWqgJZoAZgagAJOmVEA6f85umLC0joiCUAD8ZuawCMjoWLgwoYii-P6+YqLsXLxoIlCaAD6qAAYAJADeYvwA5MhoAObAABZ1ggC+ZaJe9ILGAFwx5uomJqCQUADyAEYAVhAAxsCJ2HiW0lRVncZKMfhEVjIMC8vAUSNQVaoA0lDOUBwQIAwusIKDdxoQAI5wjhoZDwhn4t0EEU6-Ger3eMAiRy2D1c7hQl1isTRiOsThRwVuokC7gAahFohiMfdsTIKFhnE0oKU0HAALazdzkikY-iVKq3bqiUlQYZcjE6fTBEWi8XuKVivSyq4yzDjIhgBiYC6TaBrZKbHE7PYHfUyWyMZisfi5eRoPz+a35IRkq7wJCoDDrGBDF0mqjqbz2EAAQUwmFouCJwQAqsZOdzecy2QYBVAoxE5bE5osVrqQarCOrNVAXOwVo4mFBtWQ1o4IBQNtTtrsABSnbPAL4wACUX39dgtIbDuFzXuMVRiNGAcEwaBmZxWvlIdLrrfnwC7UFoVAdfE3foDA9D4ZwI8MhgA3CZOuNtVAAMp05q3F7+pYa6se1gqXOv984WmYPSoizAwDDILQaBniYAD00GqABQFQCBYF0AUN7gNAAByrLspgz4gL+mAfkkWg-ssf6JrhwGgeBkGGDBcE8tUlHJj0SE0ahgjoVMUZoOWaD4YRxHYKRn44EJOB1C4oF1IyUB1LMtCYHU1EoRBUGwaoUkyaptERKU9SKcpumcdx0BZucMAYVo47mLQXwsZgwgxLMkRfAhzTOeYSwOTh7ilOwZAQC4zgQD4MRkG5UAeQyAXkMFoVkFeZlzu2VmQLqolJDgFkrOlED0ZpjjvGQjgULQszIGQki0Cs0xgMA-G0IgAAKmAMJAmogPlVAdY1TAMbE-AAES0MNoiOfpqjDbM43RY+TRTSNSxzY5cmBQlOhkEtw1kHNMVcUV7ykBVVU1XVDVNa17WdaAPVQH1-GDeYI1jRNfmYDts2iAdcnLatH3rfFIVbTte0-QtQNBSDYVcSYb5oLSUAI7SuUXCotmbl8w3SQw40uV8AAsABMXnI18LjNRQEBkwAjF8NzatjjnDVA16dHuyNMLSl4TNZADC3PAGjmXfmJ2pvFziPC2uhWMaNc046Bw1fXNJM7StoiU4g1M7bTc03GagaVhhzMfcN55s3Dt68fxaNaM2MQ3C0UVrRzABkTtQIgwCu4D14bsUXvssAPAQKQXz8I571Jp9bMpbbTAi5+WXrInaBo3L00tADsc7T7ue4V9ECh+HaBzVHH0x0XcMoxcFAMCyEB3iAbJgVoLdt4gzZ1A3Td1F2vPOCQmCU0s0BiC1BgN7OmO0E0EB+7Hl7mGgtBN+5C0r-BjfN63IHhF8AAitAkMlfNTGIGAGGP7okWL2WT9PTBZ69C+FwYO1r03+0Ldb1mDnDKLKAuZAG4EchpRiCYPopkmilPs5oWBgOAWRfsSCjy4GQrRSB5RmIwLYlg0yF9oDp2QSnB+6wwE4DWqUQh6lX7QNjrAwGtCOIQX-lMV0yAyH3xAWJfgMVq4GBMuw1+w0AAMv9ALND1h-OOBlhrEzmnQtC8MhZS1pFw6AKgRq4zVqTa4TwXjY10M1OAEBWadAiFuDRwBea3kFtLLRPCRIUNwBLd4dctFiMkaIJWeNZGiHVn9RRBtqAHgcDCExZiLGWysUAA\n\ntype TupleEntry<\n\tT extends readonly unknown[],\n\tI extends unknown[] = [],\n\tR = never,\n> = T extends readonly [infer Head, ...infer Tail]\n\t? TupleEntry<Tail, [...I, unknown], R | [`${I['length']}`, Head]>\n\t: R;\n\ntype ObjectEntry<T extends {}> = T extends object\n\t? {[K in keyof T]: [K, Required<T>[K]]}[keyof T] extends infer E\n\t\t? E extends [infer K, infer V]\n\t\t\t? K extends string | number\n\t\t\t\t? [`${K}`, V]\n\t\t\t\t: never\n\t\t\t: never\n\t\t: never\n\t: never;\n\n/**\n * Helper for casting typed `Object.entries`\n *\n * @typeParam T - The infered object type\n *\n * @example\n * const typedEntries = Object.entries({a: 1, b: 2}) as unknown as ReadonlyArray<Entry<{a: number, b: number}>>;\n */\nexport type Entry<T extends {}> = T extends readonly [unknown, ...unknown[]]\n\t? TupleEntry<T>\n\t: T extends ReadonlyArray<infer U>\n\t? [`${number}`, U]\n\t: ObjectEntry<T>;\n\n/**\n * This is a typed version of `Object.entries`\n * @typeParam T - The infered object type\n * @param object The object to get entries from\n * @returns A typed array of entries from the object\n *\n * @example\n * ```ts\n * typedEntries(obj).some(([key, value]) => {...});\n * ```\n */\nexport const typedEntries = <T extends {}>(\n\tobject: T,\n): ReadonlyArray<Entry<T>> =>\n\tObject.entries(object) as unknown as ReadonlyArray<Entry<T>>;\n","import window from 'global/window';\n\nimport {getPrefixedLogger} from '@netx/core-next/instance/logger';\nconst logger = getPrefixedLogger('core/utils/setGlobal');\n\n/**\n * We have a global namespace issue in our app.\\\n * With old backbone code we have a lot of circular dependencies that are only\n * resolved by using a global namespace at the moment. There is also just a lot\n * of old code expecting to find things in the global namespace.\\\n * Rather than have all of that code just use `window.Netx` directly, we can\n * use this function to set the global namespace in a more controlled way - while\n * also logging its usage.\n * @param object An object or an function that returns an object to add to the global namespace\n *\n * @example\n * // adding to/overriding on the global namespace\n * setGlobal({\n * \tcms: {\n * \t\tportal: 'foo',\n * \t}\n * }); // accessible at Netx.cms\n *\n * @example\n * // merging with an existing object\n * setGlobal((Netx) => ({\n * \tcms: {\n * \t\t...Netx.cms,\n * \t\tportal: 'foo',\n *\t},\n * }));\n */\nexport const setGlobal = (object: Object | ((object: Object) => Object)) => {\n\t// the netx global object may not have been setup yet\n\tconst Netx = (window.Netx = window.Netx || {});\n\tconst obj = typeof object === 'function' ? object(Netx) : object;\n\tlogger.silly('adding to `Netx` namespace >', Object.keys(obj).join(', '));\n\tObject.assign(Netx, obj);\n};\n\nexport default setGlobal;\n","export enum UserPref {\n\tSESSION_DURATION = 'user.sessionDuration',\n\tPUBLIC_USER_LOGIN = 'viewer.userLogin',\n\tEMAIL_IMPORT_SETTING = 'email.asset.import',\n\tEMAIL_REVIEW_SETTING = 'email.asset.review',\n}\n\nexport enum EmailFrequency {\n\tIMMEDIATE = 'immediately',\n\tDAILY = 'daily',\n\tNEVER = 'never',\n}\n\nexport enum UserLevel {\n\tNO_ACCESS = 0,\n\tBROWSER = 1,\n\tCONSUMER = 2,\n\tIMPORTER = 3,\n\tPRODUCER = 4,\n\tMANAGER = 7,\n\tDIRECTOR = 8,\n\tADMIN = 9,\n}\n\nexport enum UserSource {\n\tINTERNAL = 0,\n\tLDAP = 1,\n\tSAML = 2,\n\tPING_ONE = 3,\n\tLIVE_CONNECT = 4,\n}\n\nexport enum UserPermission {\n\tREAD = 1,\n\tDOWNLOAD = 2,\n\tADD = 3,\n\tMODIFY = 5,\n\tDELETE = 7,\n\tALL = 9,\n}\n\nexport enum UserGroupItemType {\n\tGROUP = 'group',\n\tUSER = 'user',\n}\n\nexport enum UserImportOption {\n\tADD_NEW_USERS_ONLY = 1,\n\tUPDATE_EXISTING_USERS_ONLY = 2,\n\tADD_AND_UPDATE = 3,\n\tDELETE = 4,\n}\n","import type {UserLevel} from '../constants';\nimport {getUserLevel} from './getUserLevel';\nexport {UserLevel} from '../constants';\n\nexport const currentUserMeetsUserLevel = (userLevel: UserLevel) =>\n\tgetUserLevel() >= userLevel;\n\nexport default currentUserMeetsUserLevel;\n","import {userPrefs} from '@netx/core-user/collections/singletons/userPreferences';\n\nexport const getPreference = <Bool extends boolean = false>(\n\tkey: string,\n\tasBoolean?: Bool,\n) => {\n\treturn userPrefs[asBoolean ? 'isTrue' : 'getPreference'](\n\t\tkey,\n\t) as Bool extends true ? boolean : string | undefined;\n};\n\nexport default getPreference;\n","import {userProfile} from '@netx/core-user/collections/singletons/userProfile';\n\nexport const getUserLevel = () => userProfile.get('type');\n\nexport default getUserLevel;\n","import {userProfile} from '@netx/core-user/collections/singletons/userProfile';\n\nexport const getUserId = () => userProfile.id;\n\nexport default getUserId;\n","import {getPublicProperty} from '@netx/core-app-next/utils/getPublicProperty';\nimport {userProfile} from '@netx/core-user/collections/singletons/userProfile';\nimport {isBrandPortal} from '@netx/core-cms-next/utils/isBrandPortal';\nimport {UserPref} from '../constants';\n\nexport const isPublicUser = () => {\n\tconst publicUserLogin = getPublicProperty(UserPref.PUBLIC_USER_LOGIN);\n\treturn (\n\t\tisBrandPortal() &&\n\t\tpublicUserLogin != null &&\n\t\tpublicUserLogin === userProfile.get('login')\n\t);\n};\n\nexport default isPublicUser;\n","import {userPrefs} from '@netx/core-user/collections/singletons/userPreferences';\n\nexport const setPreference = (key: string, value: any) =>\n\tuserPrefs.setUserPreference(key, value);\n\nexport default setPreference;\n","/**\n * Group model\n * @class\n */\nimport Base from '@netx/core/lib/netx-model';\n\nimport UsersCollection from '../collections/users';\n\nexport default class Group extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/** @type {string} */\n\tget idAttribute() {\n\t\treturn 'groupId';\n\t}\n\n\t/** @type {string} */\n\tget titleAttribute() {\n\t\treturn 'name';\n\t}\n\n\t/** @type {boolean} */\n\tget xhrTrackProgress() {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @property {object} defaults - The default attribute values\n\t * @property {number} defaults.groupId - The default system group id\n\t * @property {string} defaults.name - The default system group name\n\t * @property {array} defaults.memberIds - The defualt array of system group users\n\t *\n\t * @todo it's unfortunate that this uses 'memberIds' and not 'userIds'. Refactor?\n\t */\n\tget defaults() {\n\t\treturn {\n\t\t\t//groupId: 0,\n\t\t\tname: '',\n\t\t\tmemberIds: [],\n\t\t};\n\t}\n\n\t/** @type {array} */\n\tget clientAttrs() {\n\t\treturn ['members'];\n\t}\n\n\t/**\n\t * @property {object} methods - The methods available on this model\n\t * @property {method} methods.create - The create method (post)\n\t * @property {method} methods.read - The read method (get)\n\t * @property {method} methods.remove - The destroy method (delete)\n\t * @property {method} methods.update - The update method (put)\n\t *\n\t * @property {method} methods.getGroupObjects - Fetches group objects by id\n\t * @property {method} methods.getUserIds - Fetches user ids for system group\n\t * @property {method} methods.getUsers - Fetches users for system group\n\t * @property {method} methods.setUserIds - Sets users on system group\n\t * @property {method} methods.exportData - Exports system group user data\n\t */\n\tget methods() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tcreate: function (opts) {\n\t\t\t\treturn ['setGroup', this.self()];\n\t\t\t},\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tread: function (opts) {\n\t\t\t\t// We do not have a call to get a single group\n\t\t\t\t// We do have a call to get groups by id, and so we use that and fix the array return part\n\t\t\t\treturn this.getGroupObjects(opts).then(function (groups) {\n\t\t\t\t\tif (!groups.length) return null;\n\n\t\t\t\t\tif (!opts.ignoreUsers) {\n\t\t\t\t\t\treturn this.getUsers(opts).then(function () {\n\t\t\t\t\t\t\treturn groups[0];\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn groups[0];\n\t\t\t\t});\n\t\t\t},\n\t\t\t/** @method */\n\t\t\tremove(opts) {\n\t\t\t\treturn ['deleteGroup', this.id];\n\t\t\t},\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tupdate: function (opts) {\n\t\t\t\treturn [\n\t\t\t\t\t'setGroup',\n\t\t\t\t\t{\n\t\t\t\t\t\tgroupId: this.id,\n\t\t\t\t\t\tname: this.get('name'),\n\t\t\t\t\t},\n\t\t\t\t];\n\t\t\t},\n\t\t\t// Helpers\n\t\t\tautolist(name, opts) {\n\t\t\t\treturn ['getGroupAutoList', name];\n\t\t\t},\n\t\t\t// downloadUserData takes a `UserSelector` object - though it currently only supports all, none and groupIds\n\t\t\t// See: package com.netxposure.module.user.selector.UserSelector for more deails on this object\n\t\t\t// TODO: once this object is fully supported we should mirror it with our own model - then we could pass params and get a valid `UserSelector` to send\n\t\t\t// to any call that will expect one\n\t\t\tdownloadUserData: function (opts) {\n\t\t\t\treturn ['downloadUserData', {groupIds: [this.id]}];\n\t\t\t},\n\t\t\t/** @method */\n\t\t\tgetByName(name, opts) {\n\t\t\t\treturn this.autolist(name, opts).then((results) => {\n\t\t\t\t\tconst result = results.find((result) => result.label === name);\n\t\t\t\t\tif (!result) {\n\t\t\t\t\t\treturn new Error(`Group \"${name}\" not found`);\n\t\t\t\t\t}\n\t\t\t\t\tthis.set({[this.idAttribute]: parseInt(result.value)});\n\t\t\t\t\treturn this.fetch();\n\t\t\t\t});\n\t\t\t},\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tgetGroupObjects: function (opts) {\n\t\t\t\treturn ['getGroupObjects', [this.id]];\n\t\t\t},\n\t\t\t/** @method */\n\t\t\tgetUserIds(opts) {\n\t\t\t\treturn ['getUsersForGroup', this.id];\n\t\t\t},\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @deprecated See `this.users`\n\t\t\t */\n\t\t\tgetUsers: ['getUserObjects', 'memberIds'],\n\t\t\t/** @method */\n\t\t\tsetUserIds(opts) {\n\t\t\t\treturn ['setGroupUsers', this.id, this.get('memberIds')];\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * @property {object} parsers - The parsers available on this model\n\t * @property {function} parsers.create - Parses result of create method\n\t * @property {function} parsers.update - Parses result of update method\n\t * @property {function} parsers.getUserIds - Parses result of fetched user ids for system group\n\t * @property {function} parsers.getUsers - Parses result of fetched users for system group\n\t */\n\tget parsers() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {object} response Response\n\t\t\t * @param {object} opts Request options\n\t\t\t * @todo return full beans\n\t\t\t */\n\t\t\tcreate: function (response, opts) {\n\t\t\t\t// We just get that messy validation object\n\t\t\t\treturn {\n\t\t\t\t\tgroupId: response.id,\n\t\t\t\t};\n\t\t\t},\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {object} response Response\n\t\t\t * @param {object} opts Request options\n\t\t\t * @todo return full updated beans\n\t\t\t */\n\t\t\tupdate: function (response, opts) {\n\t\t\t\t// TODO: We were setting the id again to avoid the backbone code\n\t\t\t\t// to add that whole messy validation object to our model\n\t\t\t\t// our id will never change after a creation and we can just\n\t\t\t\t// return `null` until we are getting back useful data from an update\n\t\t\t\t// this.set( { groupId: response.id }, opts );\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {array} userIds User ids\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tgetUserIds: function (userIds, opts) {\n\t\t\t\tthis.set('memberIds', userIds, opts);\n\t\t\t},\n\t\t};\n\t}\n\n\t/** @override */\n\tconstructor(attrs, opts) {\n\t\tsuper(attrs, opts);\n\n\t\t/**\n\t\t * @memberof module:user/models/group\n\t\t * @alias users\n\t\t * @type {module:user/collections/users}\n\t\t */\n\t\tthis.users = new UsersCollection([], {\n\t\t\t// Used in a selection mode our labels get tangled\n\t\t\t// see userProfile\n\t\t\tcomparator: function (a, b) {\n\t\t\t\treturn a.getAutocompleteLabel() < b.getAutocompleteLabel() ? -1 : 1;\n\t\t\t},\n\t\t\tgroupId: this.id,\n\t\t\t// We do not have a good solution for paging selected items as of yet\n\t\t\tpager: {\n\t\t\t\tpageSize: 0x7fffffff,\n\t\t\t},\n\t\t});\n\n\t\t// Hey, listen!\n\t\tthis.listenTo(this, 'change:groupId', function (model) {\n\t\t\tthis.users.groupId = this.id;\n\t\t});\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} opts Request options\n\t */\n\tfetchUsers(opts) {\n\t\treturn this.users.fetch(\n\t\t\t_.extend(\n\t\t\t\t{\n\t\t\t\t\tduplicateQueryPolicy: 'abort',\n\t\t\t\t\treset: true,\n\t\t\t\t},\n\t\t\t\topts,\n\t\t\t),\n\t\t);\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} data Data\n\t * @param {object} opts Options\n\t * @return {boolean} Members updated\n\t */\n\tparseAndSave(data, opts) {\n\t\t// Save changes\n\t\treturn this.save(\n\t\t\t{\n\t\t\t\tname: data.name,\n\t\t\t\tmemberIds: data.ids,\n\t\t\t},\n\t\t\t_.extend({wait: true}, opts),\n\t\t).then(function () {\n\t\t\t// currently setGroupUsers(setUserIds) returns\n\t\t\t// errors that setGroup(setUserIds) does not.\n\t\t\t// so we must call this every time\n\t\t\treturn this.setUserIds().then(\n\t\t\t\t() => {\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\t(e) => {\n\t\t\t\t\tthis.fetchUsers();\n\t\t\t\t\tthrow e;\n\t\t\t\t},\n\t\t\t);\n\t\t});\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'Group';\n\t}\n}\n","/**\n * Group collection\n * @class\n */\nimport Base from '@netx/core/lib/netx-collection';\nimport Model from '../models/group';\n\nimport PagerModel from '@netx/core-app/models/pager';\n\nexport default class Groups extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/** @type {boolean} */\n\tget xhrTrackProgress() {\n\t\treturn true;\n\t}\n\n\t/** @type {object} */\n\tget xhrLoadingMessages() {\n\t\treturn {\n\t\t\tgetGroupObjects: 'Loading groups',\n\t\t\tgetGroups: 'Loading groups',\n\t\t\tgetUsersForGroup: 'Loading users for group',\n\t\t};\n\t}\n\n\t/** @type {object} */\n\tget xhrLoadedMessages() {\n\t\treturn {\n\t\t\tgetGroupObjects: 'Loaded groups',\n\t\t\tgetGroups: 'Loaded groups',\n\t\t\tgetUsersForGroup: 'Loaded users for group',\n\t\t};\n\t}\n\n\t/**\n\t * @property {object} methods - The methods available on this model\n\t * @property {method} methods.read - The read method (get)\n\t * @property {method} methods.getByIds - Fetch groups by passed ids\n\t * @property {method} methods.getGroups - Fetch groups by `this.ids()`\n\t */\n\tget methods() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tread(opts) {\n\t\t\t\treturn [\n\t\t\t\t\t'getGroups',\n\t\t\t\t\tthis.filterStr,\n\t\t\t\t\t{field: 'name', order: 'asc'},\n\t\t\t\t\tthis.pager.getPageDTO(),\n\t\t\t\t];\n\t\t\t},\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {array} ids Group ids\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tgetByIds(ids, opts) {\n\t\t\t\tif (!_.isArray(ids)) ids = [ids];\n\t\t\t\treturn ['getGroupObjects', ids];\n\t\t\t},\n\t\t\t// One day, the above method will be a pageable method - will still want access to a full fetch (like users)\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tgetGroups(opts) {\n\t\t\t\treturn this.getByIds(this.ids(), opts);\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * @property {object} parsers - Collection parsers\n\t * @property {function} parsers.getByIds - Groups fetched by passed id\n\t * @property {function} parsers.getGroups - Groups fetched\n\t */\n\tget parsers() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {array} groups Groups\n\t\t\t * @param {array} ids Group ids\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tgetByIds(groups, ids, opts = {}) {\n\t\t\t\tthis.set(groups, opts);\n\t\t\t\t!opts.silent && this.trigger('sync', this, groups, opts);\n\t\t\t},\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {array} groups Groups\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tgetGroups(groups, opts = {}) {\n\t\t\t\tthis.set(groups, opts);\n\t\t\t\t!opts.silent && this.trigger('sync', this, groups, opts);\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * @override\n\t * @param {array} models An array of models or model attributes\n\t * @param {object} opts Collection options\n\t */\n\tconstructor(models, opts = {}) {\n\t\topts.model = opts.model || Model;\n\n\t\tsuper(models, opts);\n\n\t\t/**\n\t\t * Paging model\n\t\t * @memberof module:user/collections/groups\n\t\t * @alias pager\n\t\t * @type {module:app/models/pager}\n\t\t */\n\t\tthis.pager = new PagerModel(\n\t\t\t{\n\t\t\t\t// TODO: collections/models should not need to know about routes/routing\n\t\t\t\troutesToPage: false,\n\t\t\t\tpageSize: 25,\n\t\t\t\t...opts.pager,\n\t\t\t},\n\t\t\t{collection: this},\n\t\t);\n\n\t\t// Hey, listen\n\t\tthis.listenTo(this, 'sync', (collection, data, opts) => {\n\t\t\tif (collection !== this) return;\n\t\t\tif (!opts.ignoreUsers) this.invoke('getUserIds');\n\n\t\t\tthis.stopListening(this, 'add', this.addedGroup).listenTo(\n\t\t\t\tthis,\n\t\t\t\t'add',\n\t\t\t\tthis.addedGroup,\n\t\t\t);\n\t\t}).listenTo(\n\t\t\tthis,\n\t\t\t['request:getGroups', 'request:getByIds'].join(' '),\n\t\t\t(collection, xhr, opts) => {\n\t\t\t\tthis.trigger('request:read', this, xhr, opts);\n\t\t\t},\n\t\t);\n\t}\n\n\t/**\n\t * Retrieve users for newly added group\n\t * @method\n\t * @param {Netx.Models.Group} group Group model\n\t */\n\taddedGroup(group, groups, opts = {}) {\n\t\tif (opts.ignoreUsers === true) return;\n\t\tgroup.getUserIds();\n\t}\n\n\t/**\n\t * @method\n\t * @param {array} groups An array of group objects `{name: <name>}`\n\t * @param {object} opts Options\n\t */\n\tcreateNewGroups(groups, opts = {}) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (!groups) resolve();\n\n\t\t\tconst existingPromises = [];\n\n\t\t\tconst newGroups = [];\n\t\t\t// Save each group after the other has completed to avoid data locks on the server\n\t\t\tconst next = () => {\n\t\t\t\tif (!groups.length) {\n\t\t\t\t\tPromise.all(existingPromises).then(() => {\n\t\t\t\t\t\tresolve(newGroups);\n\t\t\t\t\t}, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst group = new Model(groups.shift());\n\t\t\t\tgroup.save(opts).then(\n\t\t\t\t\t() => {\n\t\t\t\t\t\tnewGroups.push(group);\n\t\t\t\t\t\tnext();\n\t\t\t\t\t},\n\t\t\t\t\t(err) => {\n\t\t\t\t\t\t// Duplicate name - just pass back and get users added\n\t\t\t\t\t\tif (err.code === -103) {\n\t\t\t\t\t\t\tconst _group = new Model();\n\t\t\t\t\t\t\texistingPromises.push(\n\t\t\t\t\t\t\t\tnew Promise((resolve, reject) => {\n\t\t\t\t\t\t\t\t\t_group.getByName(group.get('name')).then(\n\t\t\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\t\t\tnewGroups.push(_group);\n\t\t\t\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t(err) => {\n\t\t\t\t\t\t\t\t\t\t\treject(err);\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\treturn next();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t};\n\n\t\t\tnext();\n\t\t});\n\t}\n\n\t/**\n\t * @method\n\t * @param {array} ids Group ids\n\t */\n\tdeleteGroups(ids) {\n\t\treturn this.deleteMultiple.apply(this, arguments);\n\t}\n\n\t/*\n\t * @method\n\t * @param {number} page Page number\n\t * @param {object} opts Options\n\t */\n\tgotoPage(page, opts) {\n\t\tif (page === this.curPage) {\n\t\t\treturn new $.Deferred().resolveWith(this);\n\t\t}\n\n\t\tthis.curPage = parseInt(page);\n\t\t// Getting a page for detail view\n\t\treturn this.fetch(\n\t\t\tnull,\n\t\t\t_.extend(\n\t\t\t\t{\n\t\t\t\t\tcurrentPage: page,\n\t\t\t\t\tduplicateQueryPolicy: 'abort',\n\t\t\t\t},\n\t\t\t\topts,\n\t\t\t),\n\t\t);\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'Groups';\n\t}\n}\n","// https://stackoverflow.com/questions/49682569/typescript-merge-object-types\ntype OptionalPropertyNames<T> = {\n\t[K in keyof T]-?: {} extends {[P in K]: T[K]} ? K : never;\n}[keyof T];\n\ntype SpreadProperties<L, R, K extends keyof L & keyof R> = {\n\t[P in K]: L[P] | Exclude<R[P], undefined>;\n};\n\ntype Id<T> = T extends infer U ? {[K in keyof U]: U[K]} : never;\n\ntype SpreadTwo<L, R> = Id<\n\tPick<L, Exclude<keyof L, keyof R>> &\n\t\tPick<R, Exclude<keyof R, OptionalPropertyNames<R>>> &\n\t\tPick<R, Exclude<OptionalPropertyNames<R>, keyof L>> &\n\t\tSpreadProperties<L, R, OptionalPropertyNames<R> & keyof L>\n>;\n\ntype Spread<A extends readonly [...any]> = A extends [infer L, ...infer R]\n\t? SpreadTwo<L, Spread<R>>\n\t: unknown;\n\n/**\n * Deeply extends an object with another object\n * @param target The object to extend\n * @param source The object to extend with\n * @returns The extended object\n *\n * @example\n * ```ts\n * const obj1 = {a: 1, b: {c: 2}};\n * const obj2 = {b: {d: 3}};\n * const obj3 = deepObjectExtend(obj1, obj2); // {a: 1, b: {c: 2, d: 3}}\n * ```\n */\nexport const deepObjectExtend = <\n\tT extends Record<string | number | symbol, any>,\n\tS extends Record<string | number | symbol, any>,\n>(\n\ttarget: T,\n\tsource: S,\n): Spread<[T, S]> => {\n\tfor (const prop in source) {\n\t\tif (source.hasOwnProperty(prop)) {\n\t\t\tif (target[prop] && typeof source[prop] === 'object') {\n\t\t\t\tdeepObjectExtend(target[prop], source[prop]);\n\t\t\t} else {\n\t\t\t\ttarget[prop] = source[prop];\n\t\t\t}\n\t\t}\n\t}\n\treturn target as unknown as Spread<[T, S]>;\n};\n","import Base from '@netx/core/lib/netx-model';\nimport {i18n} from '@netx/core/i18n';\n\nimport assetCustomConfig from '@netx/core-asset/config';\n\nimport {deepObjectExtend} from '@netx/core-next/utils/object';\n\n/**\n * UserPrefs: Stores the user preferences returned by the server\n *\n * @class\n */\n// TODO: Parsing user prefs into a multi-level object delimited by dots\n// was an interesting exercise, but it's quite complicated, leads to a\n// non-standard interface, and doesn't actually deliver any benefits\n// over doing it the easy way.\n// (Hindsight: if we only had it sooner ...)\n// This code is tested & works & we should't mess with it for no reason,\n// but rather than ever fix or extend this approach, we should just replace\n// it with a very simple, generic Netx.Model where every property is a\n// seperate attribute, manipulated by get/set/save.\n//\n\nexport default class UserPrefs extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/** @type {array} */\n\tget xhrTrackProgress() {\n\t\treturn ['getUserPreferences'];\n\t}\n\n\t/**\n\t * @type {object}\n\t */\n\tget xhrLoadingMessages() {\n\t\treturn {\n\t\t\tgetUserPreferences: 'Loading user preferences',\n\t\t};\n\t}\n\n\t/**\n\t * @type {object}\n\t */\n\tget xhrLoadedMessages() {\n\t\treturn {\n\t\t\tgetUserPreferences: 'Loaded user preferences',\n\t\t};\n\t}\n\n\t/**\n\t * All of our user prefs are in dot.syntax and then we parse with `_.lvbsToDeepObject` - to list them here would be exhaustive at the moment\n\t * Once we have cleaned up al lthe namespace issues in our naming, though laboring, would be very useful for our docs to describe each property\n\t * @property {object} defaults - The default attribute values\n\t * @property {array} defaults.attributeDisplay - The default attributes to display (used in asset list/card mode)\n\t */\n\tget defaults() {\n\t\treturn {\n\t\t\tattributeDisplay: [],\n\t\t};\n\t}\n\n\t/** @type {Array} */\n\tget clientAttrs() {\n\t\treturn ['attributeDisplay'];\n\t}\n\n\t/**\n\t * @property {object} methods - Model RPC methods\n\t * @property {method} methods.read - Fetch user preferences\n\t * @property {method} methods.saveUserPreferences - Save user preferences\n\t * @property {method} methods._setUserPreference - Save a single user preference\n\t */\n\tget methods() {\n\t\treturn {\n\t\t\t/** @method */\n\t\t\tread: ['getUserPreferences'],\n\t\t\t// NOTE: this is an id-less hash (not really an object) and as such, save/update/create\n\t\t\t// is not the correct route to go. instead see setUserPreferences() below.\n\t\t\t// NOTE: you can remove these harsh reminder methods as you see fit, :) -jon\n\t\t\tcreate: function () {\n\t\t\t\tconsole.error('no save/create on non-objects plz');\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tupdate: function () {\n\t\t\t\tconsole.error('no save/update on non-objects plz');\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tsaveUserPreferences: function (opts) {\n\t\t\t\tif (\n\t\t\t\t\t!_.isUndefined(this.setUserPreferenceValues) &&\n\t\t\t\t\tthis.setUserPreferenceValues.length\n\t\t\t\t) {\n\t\t\t\t\treturn ['setUserPreferences', this.setUserPreferenceValues];\n\t\t\t\t} else {\n\t\t\t\t\treturn false; // do nothing at all.\n\t\t\t\t}\n\t\t\t},\n\t\t\t/**\n\t\t\t * Set one preference on the server.\n\t\t\t * @param {string} pref Preference to set - Dot seperated preference key \"tagpanel.collection\" for nested values\n\t\t\t * @param {array|number|object|string} val Model attribute value\n\t\t\t * @param {object} opts sync/bRPC options\n\t\t\t * @todo I would call that setPreference(); setUserPreference should be renamed savePreference() or similar. - albert einstein\n\t\t\t * @see this.setPreferenceLocally\n\t\t\t */\n\t\t\t_setUserPreference: function (pref, val, opts) {\n\t\t\t\tthis.setPreferenceLocally(pref, val);\n\t\t\t\t// API call wants an LVB:\n\t\t\t\treturn ['setUserPreference', {label: pref, value: val}];\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * @property {object} parsers - Model RPC methods\n\t * @property {function} parsers.read - Parse fetch of user preferences\n\t * @property {function} parsers.saveUserPreferences - Save user preferences\n\t */\n\tget parsers() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {array} prefs User preferences (lvb)\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tread: function (prefs, opts) {\n\t\t\t\t// Java programmers don't have abstract, typeless objects & therefore must encode such things in arrays of LabelValueBeans.\n\t\t\t\treturn _.lvbsToDeepObject(prefs);\n\t\t\t},\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {null} response Null response\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tsaveUserPreferences: function (response, opts) {\n\t\t\t\tthis.setUserPreferenceValues = [];\n\t\t\t\tthis.trigger('saved');\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * @override\n\t * @param {object} attr Model attributes\n\t * @param {object} opts Model options\n\t * @listens module:system#system:property:edit:success\n\t */\n\tconstructor(attrs, opts = {}) {\n\t\tsuper(attrs, opts);\n\n\t\t/** @type {string} */\n\t\tthis.setUserPreferenceValue = opts.setUserPreferenceValue || '';\n\t\tthis.setUserPreferenceValues = opts.setUserPreferenceValues || [];\n\t\t/** @type {array} */\n\t\tthis._allChangedAttributes = opts._allChangedAttributes || [];\n\n\t\t////////////////////////////////////////\n\t\t// QUEUE\n\t\t////////////////////////////////////////\n\t\t/**\n\t\t * Lets not hit the server as fast as we can\n\t\t * @memberOf Netx.Models.UserPrefs\n\t\t * @alias queue\n\t\t * @type {Netx.Model}\n\t\t */\n\t\tthis.queue = new Base();\n\t\tthis.addSubModel(this.queue);\n\n\t\t// Setup our deferred for queuing\n\t\tthis.queueDeferred = new $.Deferred();\n\t\t// We will save and clear our queue after 500ms of \"inactivity\"\n\t\tthis.listenTo(\n\t\t\tthis.queue,\n\t\t\t'change',\n\t\t\t_.debounce(function () {\n\t\t\t\t// Do we have anything to save?\n\t\t\t\tif (!_.isEmpty(this.queue.attributes)) {\n\t\t\t\t\tvar done = _.bind(function () {\n\t\t\t\t\t\tthis.queueDeferred = new $.Deferred();\n\t\t\t\t\t\tthis.queue.clear();\n\t\t\t\t\t}, this);\n\t\t\t\t\t// Map to an array of lvbs\n\t\t\t\t\tthis.setUserPreferenceValues = _.objectToLvbs(this.queue.attributes);\n\t\t\t\t\t// Save on server\n\t\t\t\t\tthis.saveUserPreferences().then(\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\tthis.queueDeferred.resolveWith(this, [\n\t\t\t\t\t\t\t\tdeepObjectExtend({}, this.queue.attributes),\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\tdone();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\tthis.queueDeferred.reject();\n\t\t\t\t\t\t\tdone();\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}, 500),\n\t\t);\n\t\t////////////////////////////////////////\n\t\t// !QUEUE\n\t\t////////////////////////////////////////\n\n\t\t// Hey, listen!\n\t\t// Listen for properties changes that affect us\n\t\tthis.listenTo(dispatcher, 'system:property:edit:success', function (prop) {\n\t\t\t// TODO: in 8.10 we want to do this for any system property that's also a user preference:\n\t\t\t// if (! _.isUndefined(this.getPreference(prop.get('label')))) {\n\t\t\t//\n\t\t\t// but for 8.9 we're only adressing DAM-8338 and this one property:\n\t\t\t//\n\t\t\t// And...... for 8.11/8.12? -jse-\n\t\t\tif (prop.get('label') == 'adbuilder.enabled') {\n\t\t\t\t// Update with the new value\n\t\t\t\tthis.setPreferenceLocally(prop.get('label'), prop.get('value'));\n\t\t\t\tthis.trigger('sync', this, prop);\n\t\t\t}\n\t\t});\n\n\t\t// Fix some renamed (deprecated) pref keys\n\t\tthis.listenTo(this, 'sync', function () {\n\t\t\t// Added in 8.11\n\t\t\tif (\n\t\t\t\t!this.getPreference('asset.list.type') &&\n\t\t\t\tthis.getPreference('assetListType')\n\t\t\t) {\n\t\t\t\tthis.setUserPreference(\n\t\t\t\t\t'asset.list.type',\n\t\t\t\t\tthis.getPreference('assetListType'),\n\t\t\t\t);\n\t\t\t\tthis.setUserPreference('assetListType', '');\n\t\t\t}\n\t\t\t// Added in 8.11\n\t\t\tif (\n\t\t\t\t!this.getPreference('asset.list.sort.field') &&\n\t\t\t\tthis.getPreference('assetListSortField')\n\t\t\t) {\n\t\t\t\tthis.setUserPreference(\n\t\t\t\t\t'asset.list.sort.field',\n\t\t\t\t\tthis.getPreference('assetListSortField'),\n\t\t\t\t);\n\t\t\t\tthis.setUserPreference('assetListSortField', '');\n\t\t\t}\n\t\t\t// Added in 8.11\n\t\t\tif (\n\t\t\t\t!this.getPreference('asset.list.sort.order') &&\n\t\t\t\tthis.getPreference('assetListSortOrder')\n\t\t\t) {\n\t\t\t\tthis.setUserPreference(\n\t\t\t\t\t'asset.list.sort.order',\n\t\t\t\t\tthis.getPreference('assetListSortOrder'),\n\t\t\t\t);\n\t\t\t\tthis.setUserPreference('assetListSortOrder', '');\n\t\t\t}\n\t\t\t// Added in 8.11\n\t\t\tif (\n\t\t\t\t!this.getPreference('asset.list.cardSize') &&\n\t\t\t\tthis.getPreference('assetList.thumbSize')\n\t\t\t) {\n\t\t\t\tthis.setUserPreference(\n\t\t\t\t\t'asset.list.cardSize',\n\t\t\t\t\tthis.getPreference('assetList.thumbSize'),\n\t\t\t\t);\n\t\t\t\tthis.setUserPreference('assetList.thumbSize', '');\n\t\t\t}\n\t\t\t// Added in 8.11\n\t\t\tif (\n\t\t\t\t!this.getPreference('asset.list.cardSize') &&\n\t\t\t\tthis.getPreference('assetList.thumbSize')\n\t\t\t) {\n\t\t\t\tthis.setUserPreference(\n\t\t\t\t\t'asset.list.cardSize',\n\t\t\t\t\tthis.getPreference('assetList.thumbSize'),\n\t\t\t\t);\n\t\t\t\tthis.setUserPreference('assetList.thumbSize', '');\n\t\t\t}\n\t\t\t// Added in 8.11\n\t\t\t// Fixes legacy attribute set selection as best as possible\n\t\t\tif (\n\t\t\t\t!this.getPreference('attribute.attributeSets.selected.gallery.card') &&\n\t\t\t\tthis.getPreference('attributeSet.selected')\n\t\t\t) {\n\t\t\t\tthis.setUserPreference(\n\t\t\t\t\t'attribute.attributeSets.selected.gallery.card',\n\t\t\t\t\tthis.getPreference('attributeSet.selected'),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\t!this.getPreference(\n\t\t\t\t\t'attribute.attributeSets.selected.gallery.curator',\n\t\t\t\t) &&\n\t\t\t\tthis.getPreference('attributeSet.selected')\n\t\t\t) {\n\t\t\t\tthis.setUserPreference(\n\t\t\t\t\t'attribute.attributeSets.selected.gallery.list',\n\t\t\t\t\tthis.getPreference('attributeSet.selected'),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\t!this.getPreference('attribute.attributeSets.selected.gallery.list') &&\n\t\t\t\tthis.getPreference('attributeSet.selected')\n\t\t\t) {\n\t\t\t\tthis.setUserPreference(\n\t\t\t\t\t'attribute.attributeSets.selected.gallery.list',\n\t\t\t\t\tthis.getPreference('attributeSet.selected'),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\t!this.getPreference('attribute.attributeSets.selected.tagPanel') &&\n\t\t\t\tthis.getPreference('attributeSet.selected')\n\t\t\t) {\n\t\t\t\tthis.setUserPreference(\n\t\t\t\t\t'attribute.attributeSets.selected.tagPanel',\n\t\t\t\t\tthis.getPreference('attributeSet.selected'),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\t!this.getPreference('attribute.attributeSets.selected.tagPanelGrid') &&\n\t\t\t\tthis.getPreference('attributeSet.selected')\n\t\t\t) {\n\t\t\t\tthis.setUserPreference(\n\t\t\t\t\t'attribute.attributeSets.selected.tagPanelGrid',\n\t\t\t\t\tthis.getPreference('attributeSet.selected'),\n\t\t\t\t);\n\t\t\t\tthis.setUserPreference('attributeSet.selected', '');\n\t\t\t}\n\t\t\tif (\n\t\t\t\t!this.getPreference('attribute.attributeSets.selected.detail') &&\n\t\t\t\tthis.getPreference('asset.attribute.selected-sets')\n\t\t\t) {\n\t\t\t\tthis.setUserPreference(\n\t\t\t\t\t'attribute.attributeSets.selected.detail',\n\t\t\t\t\tthis.getPreference('asset.attribute.selected-sets'),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\t!this.getPreference('attribute.attributeSets.selected.upload') &&\n\t\t\t\tthis.getPreference('asset.attribute.selected-sets')\n\t\t\t) {\n\t\t\t\tthis.setUserPreference(\n\t\t\t\t\t'attribute.attributeSets.selected.upload',\n\t\t\t\t\tthis.getPreference('asset.attribute.selected-sets'),\n\t\t\t\t);\n\t\t\t\tthis.setUserPreference('asset.attribute.selected-sets', '');\n\t\t\t}\n\t\t\t// Added in 8.12\n\t\t\t// Fixes legacy asset detail\n\t\t\tif (\n\t\t\t\t!this.getPreference('asset.detail.layout') &&\n\t\t\t\tthis.getPreference('assetDetail.layout')\n\t\t\t) {\n\t\t\t\tthis.setUserPreference(\n\t\t\t\t\t'asset.detail.layout',\n\t\t\t\t\tthis.getPreference('assetDetail.layout'),\n\t\t\t\t);\n\t\t\t\tthis.setUserPreference('assetDetail.layout', '');\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * User prefs is never new\n\t * @override\n\t * @return {boolean}\n\t */\n\tisNew() {\n\t\treturn false;\n\t}\n\n\t/**\n\t * Use in tandem with setUserPreference/setUserPreferences\n\t * This is a simple utility for setting one preference on the model\n\t * It updates the model immediately so the preference is reflected.\n\t * It can take up to 5 seconds after the request for the new/updated preference to be reflected by the server\n\t * @method\n\t * @param {string} pref Preference to set - Dot seperated preference key \"tagpanel.collection\" for nested values\n\t * @param {array|number|object|string} val Model attribute value\n\t */\n\tsetPreferenceLocally(pref, val) {\n\t\tvar i, keys, prefObj, prefToSet, value;\n\t\t// ====================\n\t\t// Model local update\n\t\t// ====================\n\t\t// Convert dot formatted string to array of keys\n\t\tkeys = pref.split('.');\n\t\t// New/modified pref object\n\t\tprefObj = {};\n\t\t// Iterations\n\t\ti = 0;\n\t\t// Convert array of keys to a nested object with the end value being the value passed to this method\n\t\t_.reduce(\n\t\t\tkeys,\n\t\t\tfunction (memo, key) {\n\t\t\t\ti++;\n\t\t\t\t// Check that we still have more keys to get to\n\t\t\t\tmemo[key] = i < keys.length ? {} : val;\n\t\t\t\treturn memo[key];\n\t\t\t},\n\t\t\tprefObj,\n\t\t);\n\t\t// Look for existing top level pref\n\t\tprefToSet = this.get(keys[0]);\n\t\t// Has exisiting top level pref - extend it or replace it\n\t\tif (prefToSet) {\n\t\t\tvalue = prefObj[keys[0]];\n\t\t\t_.isObject(value)\n\t\t\t\t? this.set(keys[0], deepObjectExtend(prefToSet, value))\n\t\t\t\t: this.set(prefObj);\n\t\t}\n\t\t// No exisiting top level pref - create it all\n\t\telse {\n\t\t\tthis.set(keys[0], prefObj[keys[0]]);\n\t\t}\n\t\t// ====================\n\t\t// !Model local update\n\t\t// ====================\n\t}\n\n\t/**\n\t * This is a simple utility for setting one preference on the server.\n\t * @method\n\t * @param {string} pref Preference to set - Dot seperated preference key \"tagpanel.collection\" for nested values\n\t * @param {array|number|object|string} val Model attribute value\n\t * @todo I would call that setPreference(); setUserPreference should be renamed savePreference() or similar. - albert einstein\n\t * @see this.setPreferenceLocally\n\t */\n\tsetUserPreference(pref, val) {\n\t\tif (!pref) {\n\t\t\treturn;\n\t\t}\n\t\tif (_.isObject(pref)) {\n\t\t\treturn this.setUserPreferences(pref);\n\t\t}\n\t\tthis.setPreferenceLocally(pref, val);\n\t\tthis.queue.set(pref, val);\n\t\treturn this.queueDeferred.promise();\n\t}\n\t/**\n\t * This is a simple utility for setting multiple preference on the server.\n\t * @method\n\t * @param {object} prefs Preferences to set - Dot seperated preference key \"tagpanel.collection\" for nested values\n\t * @todo I would call that setPreferences(); setUserPreference should be renamed savePreference() or similar. - albert einstein\n\t * @see this.setPreferenceLocally\n\t */\n\tsetUserPreferences(prefs) {\n\t\t// Loop over preferences where 'val' is value and 'pref' is the [dot seperated] preference name\n\t\t_.each(\n\t\t\tprefs,\n\t\t\tfunction (val, pref) {\n\t\t\t\t// ====================\n\t\t\t\t// Model local update\n\t\t\t\t// ====================\n\t\t\t\tthis.setPreferenceLocally(pref, val);\n\t\t\t\t// ====================\n\t\t\t\t// !Model local update\n\t\t\t\t// ====================\n\t\t\t\t// Set for update\n\t\t\t\tthis.queue.set(pref, val);\n\t\t\t},\n\t\t\tthis,\n\t\t);\n\t\treturn this.queueDeferred.promise();\n\t}\n\n\t/**\n\t * This does equivalent of .get(attr) but using .getDotPath('tree.val1.val2') notation for deep objects\n\t * @method\n\t * @pram {string} dotPath Dot path\n\t * @todo maybe move by other bean/obj/tree madness in netx.js? or even (gasp) add to all models???\n\t */\n\tgetDotPath(dotPath) {\n\t\tconsole.warn(\n\t\t\t'getDotPath() is deprecated, gone in 8.13 . Use getPreference().',\n\t\t);\n\t\treturn this.getPreference(dotPath);\n\t}\n\n\t/**\n\t * @method\n\t * @param {string} pref Preference to get - Dot seperated preference key \"tagpanel.collection\" for nested values\n\t * @return {mixed} Prefernce value\n\t */\n\tgetPreference(pref) {\n\t\tif (!pref) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Vars\n\t\tvar keys, val;\n\n\t\t// Convert dot formatted string to array of keys\n\t\tkeys = pref.split('.');\n\t\t// See if we are lucky enough that this is a top level preference\n\t\tval = this.get(keys.shift());\n\t\t// Maybe not- look deeper\n\t\twhile (!_.isUndefined(val) && keys.length > 0) {\n\t\t\tval = val[keys.shift()];\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t * Retrieve locales and filter on the i18n.userSelectableLocales system property\n\t * @method\n\t * @return {string}\n\t */\n\tgetAvailableLocales() {\n\t\tconst availableLocales = [\n\t\t\t{\n\t\t\t\tlabel: i18n.t('i18n.languageEnglish'),\n\t\t\t\tvalue: 'en-US',\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: i18n.t('i18n.languageFrench'),\n\t\t\t\tvalue: 'fr-FR',\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: i18n.t('i18n.languageGerman'),\n\t\t\t\tvalue: 'de-DE',\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: i18n.t('i18n.languageJapanese'),\n\t\t\t\tvalue: 'ja-JP',\n\t\t\t},\n\t\t];\n\t\t// Get available locale keys from server\n\t\t// Returns a CSV string \"en-US, fr-FR\"\n\t\tlet localeFilter = this.getPreference('i18n.userSelectableLocales');\n\t\tif (!localeFilter) return availableLocales;\n\n\t\t// If system property is set filter the system locales\n\t\t// Support mixed space or no space \"en-US,fr-FR, en-GB\"\n\t\tlocaleFilter = localeFilter.split(/[ ,]+/);\n\t\treturn availableLocales.filter((locale) => {\n\t\t\treturn localeFilter.includes(locale.value);\n\t\t});\n\t}\n\t/**\n\t * Gets either the user preference or the systemwide default for sorting\n\t * @method\n\t * @return {string}\n\t */\n\tgetListPreference() {\n\t\tvar prefType = this.getPreference('asset.list.type'),\n\t\t\tdefaultType = assetCustomConfig.LIST_TYPE_DEFAULT;\n\n\t\t// make sure our preference is available on this device\n\t\tif (assetCustomConfig.LIST_TYPE.indexOf(prefType) === -1) {\n\t\t\tprefType = false;\n\n\t\t\t// no preference, make sure our default is available on this device\n\t\t\tif (assetCustomConfig.LIST_TYPE_DEFAULT.indexOf(defaultType) === -1) {\n\t\t\t\tdefaultType = false;\n\t\t\t}\n\t\t}\n\n\t\treturn prefType || defaultType || 'grid';\n\t}\n\n\t/**\n\t * @method\n\t * @param {string} pref Preference key\n\t * @return {boolean}\n\t */\n\tisFalse(pref) {\n\t\tconst _pref = this.getPreference(pref);\n\t\tif (_pref == null) return false;\n\t\treturn _pref === false || _pref.toString().toLowerCase() == 'false';\n\t}\n\t/**\n\t * @method\n\t * @param {string} pref Preference key\n\t * @return {boolean}\n\t */\n\tisTrue(pref) {\n\t\tconst _pref = this.getPreference(pref);\n\t\tif (_pref == null) return false;\n\t\treturn _pref === true || _pref.toString().toLowerCase() == 'true';\n\t}\n\t/**\n\t * @method\n\t * @param {string} attr Model attribute\n\t */\n\t_rememberChanged(attr) {\n\t\tif (this._allChangedAttributes.indexOf(attr) < 0) {\n\t\t\tthis._allChangedAttributes.push(attr);\n\t\t}\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'UserPrefs';\n\t}\n}\n","import UserPrefs from '@netx/core-user/models/userPrefs';\n\nexport const userPrefs = new UserPrefs();\n\nexport default userPrefs;\n","import UserProfile from '../../models/userProfile';\nexport type {UserProfileAttributes} from '../../models/userProfile';\nexport type {default as UserProfile} from '../../models/userProfile';\n\nexport const userProfile = new UserProfile();\n\n// Make sure that our current user's profile instance is updated when/if we edit it in the system area:\nuserProfile.listenTo(dispatcher, 'system:user:edit:success', function (model) {\n\tmodel.id == userProfile.id && userProfile.fetch();\n});\n\nexport default userProfile;\n\nimport {setGlobal} from '@netx/core-next/utils/setGlobal';\n// circular dependency\n// userProfile relies on this to determine if the profile being edited is the user editing it or not\n// will get worked out as we continue switching out data sources\n// if (process.env.NODE_ENV !== 'production') {\nsetGlobal({userProfile});\n//}\n","/**\n * Collection of all users' profiles. Useful for general-purpose how's-it-going stuff between users.\n * @class\n */\nimport PagerModel from '@netx/core-app/models/pager';\nimport Base from '@netx/core/lib/netx-collection';\nimport Model from '../models/userProfile';\n\nexport default class Users extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/** @type {boolean} */\n\tget xhrTrackProgress() {\n\t\treturn true;\n\t}\n\n\t/** @type {object} */\n\tget xhrLoadingMessages() {\n\t\treturn {\n\t\t\tsearchUsers() {\n\t\t\t\treturn this.isFiltered() ? 'Filtering users' : 'Loading users';\n\t\t\t},\n\t\t};\n\t}\n\n\t/** @type {object} */\n\tget xhrLoadedMessages() {\n\t\treturn {\n\t\t\tsearchUsers() {\n\t\t\t\treturn this.isFiltered() ? 'Filtered users' : 'Loaded users';\n\t\t\t},\n\t\t};\n\t}\n\n\t// Everywhere else uses `filterStr` for the, well, filter string\n\t// just mirror what it would have been onto our search params until\n\t// we can sort this out in develop\n\t/** @type {string} */\n\tget filterStr() {\n\t\tif (!this.searchParams) return '';\n\t\treturn this.searchParams.str;\n\t}\n\n\t/** @type {string} */\n\tset filterStr(str) {\n\t\tif (!this.searchParams) return '';\n\t\treturn (this.searchParams.str = str);\n\t}\n\n\t/**\n\t * @property {object} methods - Collection RPC methods\n\t * @property {method} methods.read - Fetch users\n\t * @property {method} methods.downloadUserData - Download all user data\n\t * @property {method} methods._getUsersForCart - Get users for saved cart\n\t * @property {method} methods.getByIds - Fetch users by passed ids\n\t * @property {method} methods.getUserObjectsForGroup - Fetch users by `groupId`\n\t * @property {method} methods.getUsers - Fetch users by `this.ids()`\n\t * @property {method} methods.importUserData - Import users via CSV/XLS\n\t *\n\t * @property {method} methods.getUsersLength - Deprecated - the total user count is on the paging object after a `read`\n\t */\n\tget methods() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * Return user objects for users matching search criteria\n\t\t\t * @param {string} str Search phrase to filter by\n\t\t\t * @param {number} level User type to return, or <code>0</code> for all user types\n\t\t\t * @param {object} paging Page DTO object\n\t\t\t * @type {function}\n\t\t\t */\n\t\t\tread(opts) {\n\t\t\t\tif (this.groupId != null) {\n\t\t\t\t\treturn this.getUserObjectsForGroup(this.groupId, opts);\n\t\t\t\t}\n\t\t\t\tvar searchParams = this.searchParams;\n\t\t\t\treturn [\n\t\t\t\t\t'searchUsers',\n\t\t\t\t\tsearchParams.str,\n\t\t\t\t\tsearchParams.level,\n\t\t\t\t\tthis.pager.getPageDTO(),\n\t\t\t\t];\n\t\t\t},\n\t\t\t// Helpers\n\t\t\t// downloadUserData takes a `UserSelector` object - though it currently only supports all, none and groupIds\n\t\t\t// See: package com.netxposure.module.user.selector.UserSelector for more deails on this object\n\t\t\t// TODO: once this object is fully supported we should mirror it with our own model - then we could pass params and get a valid `UserSelector` to send\n\t\t\t// to any call that will expect one\n\t\t\tdownloadUserData: ['downloadUserData', {all: true}],\n\t\t\t_getUsersForCart: ['getUsersForCart', 'cartId'],\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {array} ids User ids\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tgetByIds(ids, opts) {\n\t\t\t\tif (!_.isArray(ids)) ids = [ids];\n\t\t\t\treturn ['getUserObjects', ids];\n\t\t\t},\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {number} groupId Group id\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tgetUserObjectsForGroup(groupId, opts) {\n\t\t\t\treturn ['getUserObjectsForGroup', groupId, this.pager.getPageDTO()];\n\t\t\t},\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tgetUsers(opts) {\n\t\t\t\treturn this.getByIds(this.ids(), opts);\n\t\t\t},\n\t\t\t// Deprecated - Check the pager\n\t\t\tgetUsersLength: [\n\t\t\t\t'getUsersLength',\n\t\t\t\t'searchParams.str',\n\t\t\t\t'searchParams.level',\n\t\t\t\t'searchParams.field',\n\t\t\t],\n\t\t};\n\t}\n\n\t/**\n\t * @property {object} parsers - Collection parsers\n\t * @property {function} parsers.getUsers - Parse the results of our users (fetched by id)\n\t * @property {function} parsers.getByIds - Parse the results of our users (fetched by id)\n\t * @property {function} parsers.importUserData - Parse the results of importing user data\n\t */\n\tget parsers() {\n\t\treturn {\n\t\t\tread(users, opts = {}) {\n\t\t\t\treturn users.map((user) => ({\n\t\t\t\t\t...user,\n\t\t\t\t\tpassword1: null,\n\t\t\t\t\tpassword2: null,\n\t\t\t\t}));\n\t\t\t},\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {array} users Results\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tgetUsers(users, opts = {}) {\n\t\t\t\tthis.set(\n\t\t\t\t\tusers.map((user) => ({...user, password1: null, password2: null})),\n\t\t\t\t\topts,\n\t\t\t\t);\n\t\t\t\t!opts.silent && this.trigger('sync', this, users, opts);\n\t\t\t},\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {array} users Results\n\t\t\t * @param {array} ids User ids\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tgetByIds(users, ids, opts = {}) {\n\t\t\t\tthis.set(users, opts);\n\t\t\t\t!opts.silent && this.trigger('sync', this, users, opts);\n\t\t\t},\n\t\t};\n\t}\n\n\t/** @override */\n\tconstructor(models, opts = {}) {\n\t\topts.model = opts.model || Model;\n\n\t\tsuper(models, opts);\n\n\t\t/**\n\t\t * Param for `getUsersForCart` call\n\t\t * @type {number}\n\t\t * @default\n\t\t */\n\t\tthis.cartId = opts.cartId;\n\n\t\t/**\n\t\t * Default search params\n\t\t * @memberOf Netx.Collections.Users\n\t\t * @private\n\t\t * @alias defaultSearchParams\n\t\t * @property {object} searchParams - The default search params\n\t\t * @property {string} searchParams.str - The default search param string for user\n\t\t * @property {number} searchParams.level - The default search param number for user level\n\t\t * @default\n\t\t */\n\t\tthis.defaultSearchParams = {\n\t\t\tstr: '',\n\t\t\tlevel: 0,\n\t\t};\n\n\t\t/**\n\t\t * When exporting users you can specify a `group` id\n\t\t * @type {number}\n\t\t * @default\n\t\t */\n\t\tthis.exportGroupId = opts.exportGroup || 0;\n\n\t\t/**\n\t\t * Fetch users based on `groupId`\n\t\t * @type {number}\n\t\t */\n\t\tthis.groupId = opts.groupId;\n\n\t\t/**\n\t\t * Paging model\n\t\t * @memberOf Netx.Collections.Users\n\t\t * @alias pager\n\t\t * @type {Netx.Models.Pager}\n\t\t */\n\t\tthis.pager = new PagerModel(\n\t\t\t_.extend(\n\t\t\t\t{\n\t\t\t\t\t// TODO: collections/models should not need to know about routes/routing\n\t\t\t\t\troutesToPage: false,\n\t\t\t\t},\n\t\t\t\topts.pager,\n\t\t\t),\n\t\t\t{collection: this},\n\t\t);\n\n\t\t/**\n\t\t * Search params\n\t\t * @memberOf Netx.Collections.Users\n\t\t * @alias searchParams\n\t\t * @property {object} searchParams - The default search params\n\t\t * @property {string} searchParams.str - The default search param string for user\n\t\t * @property {number} searchParams.level - The default search param number for user level\n\t\t * @default\n\t\t */\n\t\tthis.searchParams = _.extend(\n\t\t\t{},\n\t\t\tthis.defaultSearchParams,\n\t\t\topts.searchParams,\n\t\t);\n\n\t\t// Hey, listen!\n\t\tthis.listenTo(\n\t\t\tthis,\n\t\t\t['request:getUsers', 'request:getByIds'].join(' '),\n\t\t\t(collection, xhr, opts) => {\n\t\t\t\tthis.trigger('request:read', this, xhr, opts);\n\t\t\t},\n\t\t);\n\t}\n\n\t// TODO: find a way to make this more \"agnostic to where it lives\" and move to netx-collection\n\t// If we agree all paging colelctions with search/filter capabilities will utilize this.searchParams\n\t// clearSearch is all ready to go to Netx.Collection\n\t/**\n\t * Clear search\n\t * @method\n\t * @param {object} opts Request options\n\t */\n\tclearSearch(opts) {\n\t\t// No longer filtered\n\t\tthis.filtered = false;\n\n\t\t// Make sure we actually need to clear\n\t\tconst defaults = this.defaultSearchParams;\n\t\tif (_.isEqual(defaults, this.searchParams)) {\n\t\t\treturn new $.Deferred().resolve();\n\t\t}\n\n\t\t// Put back to defaults\n\t\t_.extend(this.searchParams, defaults);\n\t\treturn this.fetch(opts);\n\t}\n\n\t/**\n\t * @method\n\t * @param {number} id Saved cart id\n\t * @param {object} opts Request options\n\t */\n\tgetUsersForCart(id, opts) {\n\t\tthis.cartId = id;\n\t\treturn this._getUsersForCart(opts);\n\t}\n\n\t/**\n\t * Search users\n\t * @method\n\t * @param {object} searchParams Search params\n\t * @param {object} opts Request options\n\t */\n\tsearch(searchParams, opts) {\n\t\tsearchParams = searchParams || {};\n\n\t\t// TODO: search and user level do not work together?\n\n\t\tlet userLevel = parseInt(searchParams.level);\n\t\t// We have to convert this to no access\n\t\tif (userLevel === 0) {\n\t\t\tuserLevel = -1;\n\t\t}\n\t\t// Trully a 'no filter'\n\t\telse if (isNaN(userLevel)) {\n\t\t\tuserLevel = 0;\n\t\t}\n\n\t\t// Extend search params\n\t\t_.extend(this.searchParams, {\n\t\t\tstr: searchParams.str || '',\n\t\t\tlevel: userLevel,\n\t\t});\n\n\t\t// Filtered?\n\t\tconst defaults = this.defaultSearchParams;\n\t\tthis.filtered = !_.isEqual(defaults, this.searchParams);\n\n\t\t// Reset paging start\n\t\t// Pager fires off a fetch when currentPage changes\n\t\t// We are planning on fetching ourselves just below\n\t\t// TODO: it does not fire off a fetch becuase we have set routesToPage: false\n\t\t// since that is false it will not auto fetch - but silent will prevent the pager\n\t\t// view from updating the currently selected page\n\t\t// this is all so gross - refactor one day :pray:\n\t\t// Basically it goes:\n\t\t// pagerModel: page changed, if it does not route to page calls `collection.gotoPage`\n\t\t// let our goto page method handle the fetch\n\t\tif (this.pager.get('currentPage') !== 1) {\n\t\t\tthis.pager.set({currentPage: 1}, opts);\n\t\t} else {\n\t\t\treturn this.fetch(opts);\n\t\t}\n\t}\n\n\t/*\n\t * @method\n\t * @param {number} page Page number\n\t * @param {object} opts Options\n\t */\n\tgotoPage(page, opts) {\n\t\tif (page === this.curPage) {\n\t\t\treturn new $.Deferred().resolveWith(this);\n\t\t}\n\n\t\tthis.curPage = parseInt(page);\n\t\treturn this.fetch(opts);\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'Users';\n\t}\n}\n","/**\n * UserProfile: The Netx user object\n * @class\n * @todo DAM-8523\n */\nimport Base from '@netx/core/lib/netx-model';\nimport GroupsCollection from '../collections/groups';\nimport {types as userTypes} from '../properties/user';\n\nexport default class UserProfile extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/** @type {string} */\n\tget idAttribute() {\n\t\treturn 'userId';\n\t}\n\t/** @type {string} */\n\tget titleAttribute() {\n\t\treturn 'login';\n\t}\n\n\t/**\n\t * @type {string}\n\t * @default\n\t * @todo This does not belong here - this belongs in Netx.user.options\n\t */\n\tget resetUrl() {\n\t\treturn window.location.href.replace(/#.*$/, '') + '#password-reset';\n\t}\n\n\t/** @type {boolean} */\n\tget xhrTrackProgress() {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @property {object} defaults - The default attribute values\n\t * @property {string} defaults.address1 - Default address line 1\n\t * @property {string} defaults.address2 - Default address line 2\n\t * @property {string} defaults.city - Default city\n\t * @property {string} defaults.country - Default country\n\t * @property {string} defaults.email - Default email address\n\t * @property {string} defaults.expirationDate - Default expiration date as an ANSI-formatted date string (\"2003-11-13\")\n\t * @property {array} defaults.groupIds - Default group ids this user is a member of\n\t * @property {array} defaults.groupNames - Default group names this user is a member of\n\t * @property {string} defaults.login - Default login (username)\n\t * @property {string} defaults.name1 - Default first name\n\t * @property {string} defaults.name2 - Default middle name\n\t * @property {string} defaults.name3 - Default last name\n\t * @property {string} defaults.name4 - Default (???) This value is generally only used with Japanese names\n\t * @property {number} defaults.notify - Default notify (boolean as number). Signifies whether this user should receive email from the application.\n\t * @property {string} defaults.organization - Default organization\n\t * @property {string} defaults.password1 - Default password\n\t * @property {string} defaults.password2 - Default password confirmed\n\t * @property {string} defaults.phone1 - Default home phone\n\t * @property {string} defaults.phone2 - Default work phone\n\t * @property {string} defaults.phone3 - Default cell phone\n\t * @property {string} defaults.phone4 - Default (???) phone\n\t * @property {array} defaults.propertyNames - Default ???\n\t * @property {array} defaults.propertyValues - Default ???\n\t * @property {string} defaults.state - Default state (region)\n\t * @property {number} defaults.type - Default type (user level). See `user/properties/user`\n\t * @property {number} defaults.userId - Default id\n\t * @property {number} defaults.userSource - Default user source. 0 - INTERNAL, 1 - LDAP, 2 - SAML, 3 - PING_ONE, 4 LIVE_CONNECT\n\t * @property {number} defaults.zip - Default postal code\n\t *\n\t * @property {number} defaults.category - Default upload category. See `this.parsers.getUserUploadCategory`\n\t * @property {number} defaults.minimumPasswordLength - Minimum password length. See `this.decodeUserToken`\n\t * @property {string} defaults.passwordChange - ??? Can not find it being utilized anywhere (perhaps it is supposed to be `passwordReset` as seen in `this.passwordChange`? )\n\t * @property {string} defaults.passwordRequest - A string signifying the \"success\" of a password request. See `this.passwordRequest`\n\t * @property {string} defaults.registration - A string signifying the \"success\" of a registration attempt. See `this.registerNewUser`\n\t * @property {string} defaults.strictPasswordInstructions - Strict password instructions. See `this.decodeUserToken`\n\t */\n\tget defaults() {\n\t\treturn {\n\t\t\taddress1: '',\n\t\t\taddress2: '',\n\t\t\tcity: '',\n\t\t\tcountry: '',\n\t\t\temail: '',\n\t\t\texpirationDate: '',\n\t\t\tgroupIds: [],\n\t\t\tgroupNames: [],\n\t\t\tlogin: '',\n\t\t\tname1: '',\n\t\t\tname2: '',\n\t\t\tname3: '',\n\t\t\tname4: '',\n\t\t\tnotify: 1,\n\t\t\torganization: '',\n\t\t\tpassword1: '',\n\t\t\tpassword2: '',\n\t\t\tphone1: '',\n\t\t\tphone2: '',\n\t\t\tphone3: '',\n\t\t\tphone4: 'NA',\n\t\t\tpropertyNames: [],\n\t\t\tpropertyValues: [],\n\t\t\tstate: 'NA',\n\t\t\ttoken: '',\n\t\t\ttype: -1,\n\t\t\t// userId: 0,\n\t\t\tuserSource: 0,\n\t\t\tzip: '',\n\n\t\t\t// Client side attributes\n\t\t\tcategory: 0,\n\t\t\tminimumPasswordLength: 8,\n\t\t\tpasswordChange: '',\n\t\t\tpasswordRequest: '',\n\t\t\tregistration: '',\n\t\t\tstrictPasswordInstructions: '',\n\t\t};\n\t}\n\n\t/** @type {array} */\n\tget clientAttrs() {\n\t\treturn [\n\t\t\t'category',\n\t\t\t'minimumPasswordLength',\n\t\t\t'strictPasswordInstructions',\n\t\t\t'passwordRequest',\n\t\t\t'passwordChange',\n\t\t\t'registration',\n\t\t];\n\t}\n\n\t/**\n\t * @property {object} methods - Model RPC methods\n\t * @property {method} methods.create - Create new user\n\t * @property {method} methods.read - Fetch user\n\t * @property {method} methods.remove - Destroy user\n\t * @property {method} methods.update - Update user\n\t * @property {method} methods.authenticate - Authenticate user\n\t * @property {method} methods.getGroupForUser - Fetch user's groups\n\t * @property {method} methods.getSessionKeyForUser - Fetch user's session key (admin only)\n\t * @property {method} methods.getUserUploadCategory - Fetch user's upload category\n\t * @property {method} methods.login - Login user\n\t * @property {method} methods.logout - Lougout user\n\t * @property {method} methods.logoutUser - Logout specific user by id (spiderman pointing at spiderman.jpg)\n\t * @property {method} methods.passwordReset - Step 2 in reset: Update user password via token from `requestPasswordReset`\n\t * @property {method} methods.requestPasswordReset - Step 1 in reset: Requests that a password reset link be emailed to the user\n\t * @property {method} methods.setUserGroups - Update user groups\n\t * @property {method} methods.userSelfRegistration - Register as user\n\t */\n\tget methods() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tcreate: function (opts) {\n\t\t\t\treturn ['setUser', this.self()];\n\t\t\t},\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tread: function (opts) {\n\t\t\t\tif (!this.isMe()) {\n\t\t\t\t\t// returns an *array*, see parsers.read()\n\t\t\t\t\treturn ['getUserObjects', [this.id]];\n\t\t\t\t}\n\t\t\t\treturn this.getSelf().then((self) => {\n\t\t\t\t\treturn this._canCreateAPITokens(opts).then((canCreateAPITokens) => {\n\t\t\t\t\t\tthis.canCreateAPITokens = canCreateAPITokens;\n\t\t\t\t\t\treturn opts?.parse ? this.parsers.read(self, opts) : self;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\t_canCreateAPITokens: ['canCreateAPITokens'],\n\t\t\tgetSelf: ['getSelf'],\n\t\t\t/** @method */\n\t\t\t// note: according to flex docs, user cannot delete themselves (returns 0). -1 = fail, 1 = success\n\t\t\tremove: ['deleteUser', 'id'],\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tupdate: function (opts) {\n\t\t\t\t// DAM-5605\n\t\t\t\tif (!this.isMe()) {\n\t\t\t\t\treturn ['setUser', this.self()];\n\t\t\t\t}\n\t\t\t\treturn ['modifyCurrentUserData', this.self()];\n\t\t\t},\n\n\t\t\t/** @method */\n\t\t\tauthenticate: ['authenticate', 'login', 'password1'],\n\t\t\t/** @method */\n\t\t\tgetGroups(opts) {\n\t\t\t\treturn this.getGroupsForUser(opts).then((groupIds) => {\n\t\t\t\t\tthis.set('groupIds', groupIds);\n\n\t\t\t\t\tthis.groups.reset(\n\t\t\t\t\t\tgroupIds.map((id) => {\n\t\t\t\t\t\t\treturn {groupId: id};\n\t\t\t\t\t\t}),\n\t\t\t\t\t\topts,\n\t\t\t\t\t);\n\n\t\t\t\t\tthis.groups.pager.set(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcurrentPage: 1,\n\t\t\t\t\t\t\tpageSize: groupIds.length,\n\t\t\t\t\t\t},\n\t\t\t\t\t\topts,\n\t\t\t\t\t);\n\n\t\t\t\t\treturn this.groups.getGroups(opts);\n\t\t\t\t});\n\t\t\t},\n\t\t\t/** @method */\n\t\t\tgetGroupsForUser(opts) {\n\t\t\t\treturn [\n\t\t\t\t\t'getGroupsForUser',\n\t\t\t\t\tthis.id,\n\t\t\t\t\t{name: null},\n\t\t\t\t\t{field: 'name', order: 'asc'},\n\t\t\t\t\t{startIndex: 0, size: 0x7fff},\n\t\t\t\t];\n\t\t\t},\n\t\t\t/** @method */\n\t\t\tgetSessionKeyForUser: ['getSessionKeyForUser', 'userId'],\n\t\t\t/** @method */\n\t\t\tgetUserUploadCategory: ['getUserUploadCategory'],\n\t\t\t/** @method */\n\t\t\tlogin: ['authenticateAndGetUserBean', 'login', 'password1'],\n\t\t\t/** @method */\n\t\t\tlogout: ['logoutUser'],\n\t\t\t/** @method */\n\t\t\tlogoutUser: ['logout', 'userId'],\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tpasswordReset: function (opts) {\n\t\t\t\treturn [\n\t\t\t\t\t'changePassword',\n\t\t\t\t\tthis.get('login'),\n\t\t\t\t\t'',\n\t\t\t\t\tthis.get('token'),\n\t\t\t\t\tthis.get('password'),\n\t\t\t\t];\n\t\t\t},\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\trequestPasswordReset: function (opts) {\n\t\t\t\treturn ['changePassword', this.get('login'), this.resetUrl, '', ''];\n\t\t\t},\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {array} ids Group ids\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tsetUserGroups(ids, opts) {\n\t\t\t\treturn ['setUserGroups', this.id, ids];\n\t\t\t},\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tuserSelfRegistration: function (opts) {\n\t\t\t\treturn ['userSelfRegistration', this.self()];\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * @property {object} parsers - Model parsers\n\t * @property {function} parsers.create - Parse from creation of new user\n\t * @property {function} parsers.read - Parse fetch of user\n\t * @property {function} parsers.update - Parse update of user\n\t * @property {function} parsers.getGroupForUser - Parse fetch of user's groups\n\t * @property {function} parsers.getUserUploadCategory - Parse fetch of user's upload category\n\t * @property {function} parsers.passwordReset - Parse update of user password via token from `requestPasswordReset`\n\t * @property {function} parsers.requestPasswordReset - Parse request that a password reset link be emailed to the user\n\t * @property {function} parsers.userSelfRegistration - Parse register as user\n\t */\n\tget parsers() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {object} data Data (validation bean)\n\t\t\t * @param {object} opts Request options\n\t\t\t * @todo Get full beans\n\t\t\t */\n\t\t\tcreate: function (data, opts) {\n\t\t\t\treturn {userId: data.id, password1: null, password2: null};\n\t\t\t},\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {object} data Data (validation bean)\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tread: function (data, opts) {\n\t\t\t\t// kinda hacktacular, but... ? getUsers returns an *array* of user object but we just want one. but getSelf just returns the obj.\n\t\t\t\tif (data instanceof Array) {\n\t\t\t\t\tif (!data.length) return null;\n\n\t\t\t\t\tdata[0].password1 = data[0].password2 = null;\n\t\t\t\t\treturn data[0];\n\t\t\t\t}\n\n\t\t\t\t// modifyCurrentData won't ignore the password fields unless they're set to '********'\n\t\t\t\tdata.password1 = data.password2 = null;\n\t\t\t\treturn data;\n\t\t\t},\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {object} data Data\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tupdate: function (data, opts) {\n\t\t\t\t// get rid of the result entirely, so BackboneRPC doesn't extend it onto Netx.User\n\t\t\t\treturn {\n\t\t\t\t\tpassword1: null,\n\t\t\t\t\tpassword2: null,\n\t\t\t\t};\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {number} categoryId Category id\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tgetUserUploadCategory: function (categoryId, opts) {\n\t\t\t\tthis.set('category', categoryId, opts);\n\t\t\t},\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {boolean} resultBool Result\n\t\t\t * @param {object} opts Request options\n\t\t\t * @todo Can someone document why we are doing this?\n\t\t\t * The code that makes this call would get the `resultBool` and would already have\n\t\t\t * reference to `this` in order to do so...\n\t\t\t */\n\t\t\tpasswordReset: function (resultBool, opts) {\n\t\t\t\treturn {\n\t\t\t\t\tprofile: this,\n\t\t\t\t\tresultBool: resultBool,\n\t\t\t\t};\n\t\t\t},\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {boolean} resultBool Result\n\t\t\t * @param {object} opts Request options\n\t\t\t * @todo Can someone document why we are doing this?\n\t\t\t * The code that makes this call would get the `resultBool` and would already have\n\t\t\t * reference to `this` in order to do so...\n\t\t\t */\n\t\t\trequestPasswordReset: function (resultBool, opts) {\n\t\t\t\treturn {\n\t\t\t\t\tprofile: this,\n\t\t\t\t\tresultBool: resultBool,\n\t\t\t\t};\n\t\t\t},\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {boolean} result Result\n\t\t\t * @param {array} ids Group ids\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tsetUserGroups(result, ids, opts) {\n\t\t\t\tthis.set('groupIds', ids, opts);\n\t\t\t},\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {null} response Null response\n\t\t\t * @param {object} opts Request options\n\t\t\t * @todo Can someone document why we are doing this?\n\t\t\t * The code that makes this call would already have reference to `this` in order to do so...\n\t\t\t */\n\t\t\tuserSelfRegistration: function (response, opts) {\n\t\t\t\treturn {profile: this};\n\t\t\t},\n\t\t};\n\t}\n\n\t/** @override */\n\tconstructor(attrs, opts) {\n\t\tsuper(attrs, opts);\n\n\t\tthis.canCreateAPITokens = false;\n\n\t\t/**\n\t\t * @memberof module:user/models/userProfile\n\t\t * @alias groups\n\t\t * @type {module:user/collections/groups}\n\t\t */\n\t\tthis.groups = new GroupsCollection([], {\n\t\t\tcomparator: 'name',\n\t\t\t// We do not have a good solution for paging selected items as of yet\n\t\t\tpager: {\n\t\t\t\tpageSize: 0x7fffffff,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @method\n\t * @return Lexicographic name (\"Doe, Jane\")\n\t */\n\tgetLexicographicName() {\n\t\treturn _.without(_.values(this.pick('name3', 'name1')), '').join(', ');\n\t}\n\n\t/**\n\t * returns true if profile instance is the logined user\n\t * @method\n\t * @return {boolean}\n\t */\n\tisMe() {\n\t\treturn Netx.userProfile.id === this.id;\n\t}\n\n\t/**\n\t * some(all?) of this will/should be caught via in-form validation js\n\t * @todo document\n\t */\n\t// TODO: we generally don't use the validate feature of Backbone.Model, so maybe we should take this out.\n\t// The form handler does the same kind of checking ...\n\t//\n\tvalidate(attrs, options) {\n\t\tvar err = [];\n\t\tif (attrs.userId < 1) {\n\t\t\t//only check for new user\n\t\t\tif (Netx.system && Netx.system.users && Netx.system.users.length) {\n\t\t\t\t_.each(Netx.system.users.models, function (u) {\n\t\t\t\t\tif (u.get('login').toLowerCase() == attrs.login.toLowerCase()) {\n\t\t\t\t\t\terr.push('Login <b>' + attrs.login + '</b> already in use.');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tif (!/^\\S+@\\S+\\.\\S+/.test(attrs.email)) {\n\t\t\terr.push('Invalid email address');\n\t\t}\n\t\tvar req = {\n\t\t\temail: 'email address',\n\t\t\tname1: 'first name',\n\t\t\tlogin: 'login',\n\t\t}; //TODO generalize (e.g. passed from server) - could read from form. :(\n\t\t_.each(req, function (name, prop) {\n\t\t\tif (attrs[prop] === '') {\n\t\t\t\terr.push('you must have a value for ' + name);\n\t\t\t}\n\t\t});\n\t\tif (attrs.password1 != attrs.password2) {\n\t\t\terr.push('passwords do not match');\n\t\t}\n\t\tif (err.length > 0) {\n\t\t\treturn '<ul><li>' + err.join('</li><li>') + '</li><ul>';\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Test for profile usertype by name\n\t * @method\n\t * @param {string} typeName Type name\n\t * @returns {boolean}\n\t */\n\tisType(typeName) {\n\t\t// keys in this object are all ucfirst ...\n\t\treturn (\n\t\t\tthis.get('type') == _.invert(userTypes)[_.ucfirst(typeName.toLowerCase())]\n\t\t);\n\t}\n\t/**\n\t * Test for profile usertype by name\n\t * @param {string} typeName Type name\n\t * @returns {boolean}\n\t */\n\tisTypeOrGreater(typeName) {\n\t\treturn (\n\t\t\tthis.get('type') >= _.invert(userTypes)[_.ucfirst(typeName.toLowerCase())]\n\t\t);\n\t}\n\n\t/**\n\t * Sets model(itself), calls requestPasswordReset x7 api\n\t * @method\n\t * @param {object} loginObj Login data\n\t */\n\tuserLogin(loginObj, opts) {\n\t\tthis.set({\n\t\t\tlogin: loginObj.username,\n\t\t\tpassword1: loginObj.password,\n\t\t});\n\t\treturn this.authenticate(opts);\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} data Data\n\t * @param {object} opts Options\n\t */\n\tparseAndSave(data, opts) {\n\t\t// Get only the values pertinant to our model's attributes\n\t\tvar parsed = _.pick.apply(\n\t\t\tnull,\n\t\t\t[data].concat(_.keys(this.constructor.GetDefaults())),\n\t\t);\n\n\t\t// No point in setting this here\n\t\t// neither setUser nor modifyCurrentUserData sets propertyNames and propertyValues\n\t\t// custom user data\n\t\t// model.setPropertyArrays(values);\n\n\t\t// Adjust notify boolean to int\n\t\tparsed.notify = parsed.notify ? 1 : 0;\n\n\t\t// TODO: https://jira.netx.net/browse/DAM-8541\n\t\tif (parseInt(parsed.type) === 0) {\n\t\t\tparsed.type = -1;\n\t\t}\n\n\t\t// Password has not changed\n\t\tif (\n\t\t\t!data.autogeneratePassword &&\n\t\t\t(parsed.password1 === '' || parsed.password2 === '')\n\t\t) {\n\t\t\tparsed = _.omit(parsed, 'password1', 'password2');\n\t\t}\n\t\t// Autogenerate password (send empty strings to server)\n\t\telse if (data.autogeneratePassword) {\n\t\t\tparsed.password1 = parsed.password2 = '';\n\t\t}\n\n\t\treturn this.set(parsed, opts).save(opts);\n\t}\n\n\t/**\n\t * Sets model(itself), calls requestPasswordReset x7 api\n\t * @method\n\t * @param {object} passObj Login data\n\t * @param {object} opts Request options\n\t */\n\tpasswordRequest(loginObj, opts) {\n\t\tthis.set({\n\t\t\tlogin: loginObj.login,\n\t\t\tpasswordRequest: '',\n\t\t});\n\t\treturn this.requestPasswordReset(opts).then(function (response) {\n\t\t\tthis.set({\n\t\t\t\tlogin: '',\n\t\t\t\tpasswordRequest: response.resultBool ? 'success' : 'failure',\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Sets model(itself), calls passwordReset x7 api\n\t * @method\n\t * @param {object} passObj Password data\n\t * @param {object} opts Request options\n\t */\n\tpasswordChange(passObj, opts) {\n\t\tthis.set({password: passObj.newPassword});\n\t\treturn this.passwordReset(opts).then(function (response) {\n\t\t\tthis.set({passwordReset: response.resultBool ? 'success' : 'failure'});\n\t\t\treturn response;\n\t\t});\n\t}\n\n\t/**\n\t * Sets model(itself) and calls userSelfRegistration x7 api\n\t * @method\n\t * @param {object} userObj User data\n\t * @param {object} opts Request options\n\t * todo: have Java send back useful information\n\t */\n\tregisterNewUser(userObj, opts) {\n\t\tthis.set(userObj);\n\t\treturn this.userSelfRegistration(opts).then(function (response) {\n\t\t\tthis.set({registration: 'success'});\n\t\t\treturn response;\n\t\t});\n\t}\n\n\tself() {\n\t\tconst self = super.self();\n\t\tif (self.password1 == null) self.password1 = '********';\n\t\tif (self.password2 == null) self.password2 = '********';\n\t\treturn self;\n\t}\n\n\t/**\n\t * Login as this user in a new browser.\n\t * Admin only\n\t * @method\n\t * @param {object} opts Request options\n\t * @returns {string} key\n\t */\n\tloginAs(opts) {\n\t\treturn this.getSessionKeyForUser(opts);\n\t}\n\n\t/**\n\t * Handles decoding the token for password restrictions if there are any\n\t * @param {object} loginTokenObj Login token data\n\t */\n\tdecodeUserToken(loginTokenOb) {\n\t\tthis.set(loginTokenOb);\n\t\tvar decodedTokenArr = window\n\t\t\t.atob(decodeURIComponent(this.get('token')))\n\t\t\t.split('~');\n\n\t\t// did java pass strict password info?\n\t\tif (decodedTokenArr.length > 3) {\n\t\t\tthis.set({\n\t\t\t\tminimumPasswordLength: decodedTokenArr[2].length\n\t\t\t\t\t? parseInt(decodedTokenArr[2])\n\t\t\t\t\t: 8,\n\t\t\t});\n\n\t\t\tvar strictMsg = '';\n\n\t\t\t// required password pattern\n\t\t\tif (decodedTokenArr[3].length) {\n\t\t\t\t_.each(\n\t\t\t\t\tdecodedTokenArr[3].split(','),\n\t\t\t\t\tfunction (pat, idx, all) {\n\t\t\t\t\t\tvar value = parseInt(pat.slice(0, -1)),\n\t\t\t\t\t\t\tleadIn =\n\t\t\t\t\t\t\t\tidx === all.length - 1\n\t\t\t\t\t\t\t\t\t? ' ' + i18n.t('i18n.passwordAnd') + ' '\n\t\t\t\t\t\t\t\t\t: idx > 0\n\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\ti18nString = value > 1 ? '_plural' : '';\n\t\t\t\t\t\tswitch (pat.slice(-1)) {\n\t\t\t\t\t\t\t// required number count\n\t\t\t\t\t\t\tcase 'N':\n\t\t\t\t\t\t\t\ti18nString = 'i18n.passwordNumberCount' + i18nString;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t// required lowercase count\n\t\t\t\t\t\t\tcase 'L':\n\t\t\t\t\t\t\t\ti18nString = 'i18n.passwordLowercaseCount' + i18nString;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t// required uppercase count\n\t\t\t\t\t\t\tcase 'U':\n\t\t\t\t\t\t\t\ti18nString = 'i18n.passwordUppercaseCount' + i18nString;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t// required special character count\n\t\t\t\t\t\t\tcase 'S':\n\t\t\t\t\t\t\t\ti18nString = 'i18n.passwordSpecialCount' + i18nString;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstrictMsg += leadIn + i18n.t(i18nString, {count: value});\n\t\t\t\t\t},\n\t\t\t\t\tthis,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (strictMsg.length) {\n\t\t\t\tthis.set({\n\t\t\t\t\tstrictPasswordInstructions:\n\t\t\t\t\t\ti18n.t('i18n.passwordStrict') + ' ' + strictMsg,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * We have a fun issue with users\n\t * Our autocompletes do not return `login` but full names\n\t * We want labels to match up between a select from a collection\n\t * and a select from an autolookup - so...\n\t * @override\n\t * @return {string} Autocomplete label\n\t */\n\tgetAutocompleteLabel() {\n\t\treturn this.fullName() || this.getLabel();\n\t}\n\n\t/**\n\t * Converts propertyNames/propertyValues parallel arrays into usable object\n\t * @method\n\t * @returns {object} formData\n\t */\n\tgetPropertyObject() {\n\t\t// create a userValues object for the CustomForm collection\n\t\tvar formData = {},\n\t\t\tvalues = this.get('propertyValues');\n\t\t_.each(this.get('propertyNames'), function (propName, idx, all) {\n\t\t\tformData[propName] = values[idx];\n\t\t});\n\n\t\treturn formData;\n\t}\n\t/**\n\t * Converts form data object into propertyNames/propertyValues parallel arrays\n\t * and sets them\n\t * @method\n\t * @param {object} values Form values\n\t */\n\tsetPropertyArrays(values) {\n\t\t// overriding to store custom fields, the dam just loves parallel arrays\n\t\tvar propertyNames = [],\n\t\t\tpropertyValues = [],\n\t\t\tmodelAttrs = [];\n\n\t\t_.each(\n\t\t\tvalues,\n\t\t\t_.bind(function (empty, idx, all) {\n\t\t\t\tvar prefix = idx.slice(0, 4),\n\t\t\t\t\tattrName = idx.slice(4),\n\t\t\t\t\tisOurAttr;\n\n\t\t\t\tif (prefix === 'cfe-') {\n\t\t\t\t\tisOurAttr = _.keys(this.attributes).indexOf(attrName) !== -1;\n\t\t\t\t\tif (!isOurAttr) {\n\t\t\t\t\t\tpropertyNames.push(attrName);\n\t\t\t\t\t\tpropertyValues.push(all[idx]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tattrName = idx;\n\t\t\t\t\tisOurAttr = _.keys(this.attributes).indexOf(attrName) !== -1;\n\t\t\t\t}\n\n\t\t\t\tif (isOurAttr) {\n\t\t\t\t\tmodelAttrs[attrName] = all[idx];\n\t\t\t\t}\n\t\t\t}, this),\n\t\t);\n\n\t\tthis.set('propertyNames', propertyNames);\n\t\tthis.set('propertyValues', propertyValues);\n\n\t\treturn modelAttrs;\n\t}\n\n\t/**\n\t * Return a 'full name' string for the user.\n\t *\n\t * The DAM maintains 4 'name' fields (name1 - name4) but our UI only uses two of them (name1 & name3).\n\t * Other names (middle name, suffix) might exist out there somewhere, so we check for those too.\n\t *\n\t * @method\n\t * @returns {string} Full name.\n\t */\n\tfullName() {\n\t\treturn (\n\t\t\tthis.chain()\n\t\t\t\t// Get an object containing the four name fields:\n\t\t\t\t.pick('name1', 'name2', 'name3', 'name4')\n\t\t\t\t// Get an array of just the values (not the keys)\n\t\t\t\t.values()\n\t\t\t\t// Take out any empty strings\n\t\t\t\t.without('')\n\t\t\t\t// Join the rest with single spaces\n\t\t\t\t.join(' ')\n\t\t\t\t// Finish the chain().\n\t\t\t\t.value()\n\t\t);\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'UserProfile';\n\t}\n}\n","/**\n * Useful user-related properties\n */\nimport {i18n} from '@netx/core/i18n';\n\nexport let test = 'testString';\n\nexport let types = {\n\t// TODO: https://jira.netx.net/browse/DAM-8541\n\t0: i18n.t('i18n.userLevel0'), // No access\n\t1: i18n.t('i18n.userLevel1'), // Browser\n\t2: i18n.t('i18n.userLevel2'), // Consumer\n\t3: i18n.t('i18n.userLevel3'), // Importer\n\t4: i18n.t('i18n.userLevel4'), // Producer\n\t//5: \"User Level 5\",\n\t//6: \"User Level 6\",\n\t7: i18n.t('i18n.userLevel7'), // Manager\n\t8: i18n.t('i18n.userLevel8'), // Director\n\t9: i18n.t('i18n.userLevel9'), // Admin\n};\n\nexport let userSource = {\n\tINTERNAL: 0,\n\tLDAP: 1,\n\tSAML: 2,\n\tPING_ONE: 3,\n\tLIVE_CONNECT: 4,\n\tNETX: 5,\n};\n\nexport let groupErrors = {\n\t3008: i18n.t('i18n.errorGroupSelfRemovalWithFilter_3008'),\n\tdefault: i18n.t('i18n.error'),\n};\n\nexport default {test, types, userSource};\n","import Backbone from 'backbone';\n\n/**\n * NetX Enhancements to Backbone.sync:\n *\n * A HTTP header is added if Netx.Session is storing an authentication token.\n */\n// NOTE: this doesn't deal properly with multiple simultaneous syncs of the same model ... will that ever come up?\nBackbone.sync = _.wrap(Backbone.sync, function (sync, method, model, options) {\n\t// Add token header to options if we have a token.\n\tvar token = Netx.session?.getToken();\n\tif (token) {\n\t\toptions = options || {};\n\t\toptions.headers = _.extend(\n\t\t\t{\n\t\t\t\t'NX-Auth-Token': token,\n\t\t\t},\n\t\t\toptions.headers || {},\n\t\t);\n\t}\n\t// should be a no-op.\n\treturn sync(method, model, options);\n});\n\n/**\n * NetX Enhancements to Backbone.Events:\n *\n * retrigger\n *\n * A listener often needs to re-trigger an event on a different object, passing along the arguments it received.\n * Our current pattern do that looks like this:\n *\n * object.trigger.apply(object, ['eventName'].concat(_.toArray(arguments)));\n *\n * Backbone.Events.retrigger() takes an event name and an 'args' parameter that's either a normal array or an arguments object,\n * so that we may instead use this much prettier pattern:\n *\n * object.retrigger(eventName, arguments);\n *\n * @param {string} eventName\n * @param {arguments|array} args\n */\nBackbone.Events.retrigger = function (eventName, args) {\n\treturn this.trigger.apply(this, [eventName].concat(_.toArray(args)));\n};\n\nexport default Backbone;\n","/**\n * NetX extensions to jQuery.\n * It seems necessary to install these before Backbone is loaded in order to get\n * these new functions copied onto the scoped jQuery instances provided by Backbone.View.\n *\n * NOTE: Be sure to document new items in https://confluence.netx.net/display/DEV/X7+Library+Overrides%2C+Extensions+and+Mixins\n */\nimport jQuery from 'jquery';\n\nconst _show = jQuery.fn.show;\nconst _val = jQuery.fn.val;\n\n/**\n * Special event to listen for destroyed elements\n */\njQuery.event.special.destroyed = {\n\tremove(o) {\n\t\tif (o.handler) {\n\t\t\to.handler.apply(this, arguments);\n\t\t}\n\t},\n};\n\njQuery.extend(jQuery.expr[':'], {\n\t/**\n\t * Data pseudo selector\n\t */\n\tdata: jQuery.expr.createPseudo(function (dataName) {\n\t\treturn function (elem) {\n\t\t\treturn !!jQuery.data(elem, dataName);\n\t\t};\n\t}),\n});\n\n//\n// Added functions:\n//\njQuery.fn.extend({\n\t//\n\t// A HACK to support bootstrap-select: call refresh on the selectpicker plugin when we change the value.\n\t// (Really this should be done inside the plugin with a mutation observer).\n\t//\n\tval(val) {\n\t\t// Super\n\t\tvar ret = _val.apply(this, arguments);\n\n\t\t// If we have a selectpicker and we are trying to set a value (not get)\n\t\tif (this.data('selectpicker')) {\n\t\t\tif (!_.isUndefined(val)) {\n\t\t\t\tthis.selectpicker('render');\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t},\n\t/**\n\t * With $.nxVal, data-nx-value can override the nominal values of form elements.\n\t */\n\tnxVal() {\n\t\tvar d = this.data('nx-value');\n\t\tif (typeof d !== 'undefined') {\n\t\t\treturn d;\n\t\t} else {\n\t\t\treturn this.val();\n\t\t}\n\t},\n\t/**\n\t * turn the values of a set of checked checkboxes into an array --\n\t * you'd think jQuery would just do that, but no.\n\t * http://stackoverflow.com/questions/19766044/best-way-to-get-all-selected-checkboxes-values-in-jquery\n\t */\n\tboxesToVal() {\n\t\treturn this.find(':checked')\n\t\t\t.map(function () {\n\t\t\t\treturn this.value;\n\t\t\t})\n\t\t\t.get();\n\t},\n\t/**\n\t * NetX preferred method to enable/disable an element\n\t *\n\t * Disable element.\n\t * @returns {object} The jQuery object\n\t */\n\tdisable() {\n\t\tthis.attr('disabled', true);\n\t\tthis.addClass('disabled');\n\t\treturn this;\n\t},\n\t/**\n\t * NetX preferred method to enable/disable an element\n\t *\n\t * Enable element.\n\t * @returns {object} The jQuery object\n\t */\n\tenable() {\n\t\tthis.attr('disabled', false);\n\t\tthis.removeClass('disabled');\n\t\treturn this;\n\t},\n\t/**\n\t * NetX preferred method to enable/disable an element\n\t *\n\t * Enable/Disable element based on the bool passed.\n\t * @param {bool} bool True or false\n\t * @returns {object} The jQuery object\n\t */\n\tenableIf(bool) {\n\t\treturn bool ? this.enable() : this.disable();\n\t},\n\t/**\n\t * Check if typeahead menu is open\n\t * @method\n\t * @return {boolean}\n\t */\n\thasActiveTypeahead() {\n\t\tvar tt = this.data('ttTypeahead');\n\t\tvar $menu = tt && tt.menu.$node;\n\t\treturn $menu && $menu.hasClass('tt-open') && !$menu.hasClass('tt-empty');\n\t},\n\t/**\n\t * Check for collision between two elements\n\t * @param {object} b The jQuery object to test collision with\n\t * @returns {bool} Whether or not element has collision\n\t */\n\thasCollision(b) {\n\t\tvar aTop = this.offset().top,\n\t\t\taLeft = this.offset().left,\n\t\t\tbTop = b.offset().top,\n\t\t\tbLeft = b.offset().left;\n\n\t\treturn !(\n\t\t\taTop + this.outerHeight() < bTop ||\n\t\t\taTop > bTop + b.outerHeight() ||\n\t\t\taLeft + this.outerWidth() < bLeft ||\n\t\t\taLeft > bLeft + b.outerWidth()\n\t\t);\n\t},\n\t/**\n\t * Check if event is already bound to an element\n\t * @param {string} type The event type\n\t * @param {string} namespace The event namespace\n\t * @param {function} fn The function tied to the event\n\t * @returns {object} The jQuery object\n\t */\n\tisBound(type, namespace, fn) {\n\t\tvar data = jQuery._data(this[0], 'events')[type];\n\t\tif (typeof namespace === 'undefined') {\n\t\t\tnamespace = '';\n\t\t}\n\t\tif (data === undefined || data.length === 0) {\n\t\t\treturn false;\n\t\t}\n\t\tif (typeof fn !== 'undefined') {\n\t\t\treturn -1 !== jQuery.inArray(fn, data);\n\t\t}\n\t\tvar found = false;\n\t\tjQuery.each(data, function (d) {\n\t\t\tif (typeof d === 'object') {\n\t\t\t\tif (\n\t\t\t\t\ttypeof d.type !== 'undefined' &&\n\t\t\t\t\td.type == type &&\n\t\t\t\t\ttypeof d.namespace !== 'undefined' &&\n\t\t\t\t\td.namespace == namespace\n\t\t\t\t) {\n\t\t\t\t\tfound = true;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn found;\n\t},\n\t/**\n\t * Checks whether or not an element is hidden.\n\t * @returns {bool} True if hidden, else false\n\t */\n\tisHidden() {\n\t\treturn !this.is(':visible'); // http://stackoverflow.com/questions/178325/testing-if-something-is-hidden-with-jquery\n\t},\n\t/**\n\t * Checks whether or not an element is within a modal.\n\t * @returns {bool} True if modal, else false\n\t */\n\tisModal() {\n\t\treturn Boolean(this.closest('.modal').length);\n\t},\n\n\t/**\n\t * Checks the boolean data-nx-ignore condition of this element, for a particular key.\n\t * If not found on the current element, we search for it up the tree using .closest()\n\t * We can use this for overriding NX behaviours on various elements.\n\t *\n\t * So far the supported keys are all used by FormView form processing:\n\t *\n\t * 'change': (was data-nx-form-ignore) FormView ignores change events on fields for which this is set.\n\t * 'validate': (was data-nx-ignore-field) Form validation does not validate form fields for which this is set.\n\t * 'matrix': FormView's read-only mode will not disable form fields for which this is set.\n\t *\n\t * However, this is intended to be extensible for overriding any Netx.View behaviors that need it.\n\t *\n\t * @param {string} key\n\t * @returns {bool}\n\t */\n\tnxIgnores(key) {\n\t\t// Search for our key in this list of deprecations:\n\t\tvar deprecations = {\n\t\t\tchange: 'form-ignore',\n\t\t\tvalidation: 'ignore-field',\n\t\t};\n\n\t\tvar selector = '[data-nx-ignore~=\"' + key + '\"]';\n\t\t// hopefully undef.\n\t\tvar dep = deprecations[key];\n\t\tif (dep) {\n\t\t\tselector += ',[data-nx-' + dep + ']';\n\t\t}\n\n\t\tvar el = this.closest(selector);\n\t\tif (el.length) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Okay, deprecation is over, the rest is more logical.\n\t\t// Split by whitespace:\n\t\tvar keys = this.nxData('ignore');\n\t\tif (keys) {\n\t\t\tkeys = keys.split(/\\s+/);\n\t\t\treturn keys.indexOf(key) >= 0;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Adds a key to the data-nx-ignore attribute\n\t * @return this\n\t */\n\tnxIgnore(key) {\n\t\tlet keys = this.nxData('ignore') || '';\n\t\tkeys = _.uniq(keys.split(/\\s+/).concat(key)).join(' ');\n\t\tthis.nxData('ignore', keys);\n\t\treturn this;\n\t},\n\n\t/**\n\t * Removes a key from the data-nx-ingore attribute\n\t * @return this\n\t */\n\tnxUnignore(key) {\n\t\tlet keys = this.nxData('ignore');\n\t\tif (keys == null) return this;\n\n\t\tkeys = keys\n\t\t\t.split(/\\s+/)\n\t\t\t.filter((k) => k !== key)\n\t\t\t.join(' ');\n\t\tthis.nxData('ignore', keys);\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Gets/sets a data-nx-* key (X7-specific element data.)\n\t */\n\tnxData(key, newVal) {\n\t\t// Return all `nx-<key>`\n\t\tif (!key) {\n\t\t\treturn _.pick(this.data(), (v, k) => k.match(/^nx/));\n\t\t}\n\n\t\t// Set new value\n\t\tif (newVal != null) {\n\t\t\treturn this.data(`nx-${key}`, newVal);\n\t\t}\n\n\t\t// Return specific `nx-<key>`\n\t\treturn this.data(`nx-${key}`);\n\t},\n\n\t/**\n\t * Removes a data-nx-* key.\n\t */\n\tnxRemoveData(key) {\n\t\tkey = 'nx-' + key;\n\t\t// https://api.jquery.com/removeData/\n\t\tthis.removeData(key);\n\t\tthis.removeAttr(key);\n\t\treturn;\n\t},\n\t/**\n\t * wrap $.show() to also remove our deprecated 'hide' class\n\t */\n\tshow() {\n\t\tif (this.hasClass('hide')) {\n\t\t\t// TODO: Discuss this deprecation\n\t\t\t// console.warn('v8 \"hide\" class is deprecated, gone in 8.10');\n\t\t\tthis.removeClass('hide');\n\t\t}\n\t\treturn _show.apply(this, arguments);\n\t},\n\t/**\n\t * turn an array value into the state of a set of checkboxes\n\t */\n\tvalToBoxes(val) {\n\t\t_.each(this.find('checkbox'), function (c) {\n\t\t\tjQuery(c).prop('checked', val.indexOf(c.value) > -1);\n\t\t});\n\t},\n\t/**\n\t * Set or get the zIndex of an element\n\t * Brought over from jQuery UI\n\t * http://jqueryui.com/\n\t * @param {integer} zIndex The zIndex to set for the element (if omitted it will get the zIndex of the element)\n\t * @returns {*} Either the jQuery object or the zIndex of the element\n\t */\n\tzIndex(zIndex) {\n\t\tif (zIndex !== undefined) {\n\t\t\treturn this.css('zIndex', zIndex);\n\t\t}\n\n\t\tif (this.length) {\n\t\t\tvar elem = $(this[0]),\n\t\t\t\tposition,\n\t\t\t\tvalue;\n\t\t\twhile (elem.length && elem[0] !== document) {\n\t\t\t\t// Ignore z-index if position is set to a value where z-index is ignored by the browser\n\t\t\t\t// This makes behavior of this function consistent across browsers\n\t\t\t\t// WebKit always returns auto if the element is positioned\n\t\t\t\tposition = elem.css('position');\n\t\t\t\tif (\n\t\t\t\t\tposition === 'absolute' ||\n\t\t\t\t\tposition === 'relative' ||\n\t\t\t\t\tposition === 'fixed'\n\t\t\t\t) {\n\t\t\t\t\t// IE returns 0 when zIndex is not specified\n\t\t\t\t\t// other browsers return a string\n\t\t\t\t\t// we ignore the case of nested elements with an explicit value of 0\n\t\t\t\t\t// <div style=\"z-index: -10;\"><div style=\"z-index: 0;\"></div></div>\n\t\t\t\t\tvalue = parseInt(elem.css('zIndex'), 10);\n\t\t\t\t\tif (!isNaN(value) && value !== 0) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telem = elem.parent();\n\t\t\t}\n\t\t}\n\n\t\treturn 0;\n\t},\n\t/**\n\t * Purge a selection. That is, remove from this jQuery array any selection\n\t * that is a descendant of one of the arguments. Useful for removing the contents\n\t * of child views from a parent view's selection.\n\t *\n\t * This is different from jQuery's :not() selector, which can only filter a\n\t * selection based on its own contents. purge() specifically removes items in the\n\t * selection array which have one of the provided arguments as an ancestor.\n\t *\n\t * Parameters are either a set of DOM elements, or a single array containing such a set of elements (ala jQuery)\n\t */\n\tpurge() {\n\t\t// flexible args\n\t\tif (arguments.length === 0) {\n\t\t\treturn this;\n\t\t} // an optimization for the most common case\n\n\t\tif (arguments.length === 1 && _.isArray(arguments[0])) {\n\t\t\t// if we were passed an array,\n\t\t\treturn this.purge.apply(this, arguments[0]); // convert that array to arguments\n\t\t}\n\n\t\tvar args = _.toArray(arguments);\n\t\tvar result = this.filter(function (idx, el) {\n\t\t\tvar allowed = true;\n\t\t\t_.each(args, function (arg) {\n\t\t\t\tif (allowed === false) {\n\t\t\t\t\treturn;\n\t\t\t\t} // optimization\n\t\t\t\tif ($(arg).has(el).length) {\n\t\t\t\t\tallowed = false;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn allowed;\n\t\t});\n\t\treturn result;\n\t},\n});\n\n// Turn tap events into clicks\njQuery.event.special.tapToClick = {\n\tsetup: function (data, namespaces) {\n\t\tvar $elem = $(this);\n\t\t$elem\n\t\t\t.bind('touchstart', $.event.special.tapToClick.handler)\n\t\t\t.bind('touchmove', $.event.special.tapToClick.handler)\n\t\t\t.bind('touchend', $.event.special.tapToClick.handler);\n\t},\n\tteardown: function (namespaces) {\n\t\tvar $elem = $(this);\n\t\t$elem\n\t\t\t.unbind('touchstart', $.event.special.tapToClick.handler)\n\t\t\t.unbind('touchmove', $.event.special.tapToClick.handler)\n\t\t\t.unbind('touchend', $.event.special.tapToClick.handler);\n\t},\n\thandler: function (event) {\n\t\tvar $elem = $(this);\n\t\t$elem.data(event.type, 1);\n\t\tif (event.type === 'touchend' && !$elem.data('touchmove')) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.click();\n\t\t} else if ($elem.data('touchend')) {\n\t\t\t$elem.removeData('touchstart touchmove touchend');\n\t\t}\n\t},\n};\n\nexport default jQuery;\n","import jQuery from 'netxcore@netx/core/lib/jquery-netx';\n\njQuery.fn.extend({\n\t/**\n\t * Material design\n\t * @override\n\t */\n\tdisable() {\n\t\tthis.attr('disabled', true);\n\t\tthis.addClass('disabled');\n\t\tif (this.hasClass('mdc-list-item')) {\n\t\t\tthis.addClass('mdc-list-item--disabled');\n\t\t}\n\t\treturn this;\n\t},\n\t/**\n\t * Material design\n\t * @override\n\t */\n\tenable() {\n\t\tthis.attr('disabled', false);\n\t\tthis.removeClass('disabled');\n\t\tif (this.hasClass('mdc-list-item')) {\n\t\t\tthis.removeClass('mdc-list-item--disabled');\n\t\t}\n\t\treturn this;\n\t},\n});\n\nexport default jQuery;\n","// Modernizr\nimport 'core-libs/modernizr/modernizr';\n// Polyfills\nimport 'core-libs/polyfills/polyfills-netx';\nimport window from 'global/window';\n// Hammerjs (for cross platform gestures)\nimport Hammer from 'hammerjs';\n// need this loaded\nimport '@netx/core-app/collections/singleton';\nimport {setGlobal} from '@netx/core-next';\n// Create global event dispatcher\nimport '@netx/core-next/instance/dispatcher';\nimport '@netx/core-next/instance/localStore';\nimport {getPrefixedLogger} from '@netx/core-next/instance/logger';\nimport {appRouter} from '@netx/core-next/instance/router';\nimport NetxURL from '@netx/core-next/url';\n// Load in backbone\nimport './lib/backbone-netx';\n// jQuery overrides/enhancements\nimport './lib/jquery-netx';\n////////////////////////////////////////////\n// !Netx global namespace\n////////////////////////////////////////////\n////////////////////////////////////////////\n// App utility libraries\n////////////////////////////////////////////\n// Underscore overrides/enhancements\nimport './lib/underscore-netx';\n\nconst logger = getPrefixedLogger('bootstrap');\n\n// Netx global namespace\n\n// Setup global namespace\n/**\n * @namespace\n * @static\n */\nconst Netx = window.Netx || {};\nObject.assign(Netx, {\n\tversion: '3.11.5.0f839ec2e',\n\t/**\n\t * @namespace\n\t * @static\n\t */\n\tcustom: {},\n\tgetUserLevel: () => -1,\n\tgetPreference: () => false,\n\tsetPreference: () => true,\n\t/**\n\t * Various DAM-related static properties\n\t * @memberOf Netx\n\t * @namespace\n\t * @static\n\t * @property {array} states - A list of states (provided by the DAM)\n\t * @property {array} countries - A list of countries (provided by the DAM)\n\t * @property {array} attributes - A list of i18n labels for asset properties\n\t * @property {array} assetAttributes.ids - Map from label to IDs for asset metadata types\n\t * @property {array} assetAttributes.numberTypes - Labels, warnings & validators for the various numeric sub-types\n\t * @property {array} assetAttributes.types - Map from IDs to labels for asset metadata types\n\t * @property {array} search - Labels and metadata for the various fields of a searchAssetListObjects() RPC call, as used by Netx.Collections.Assets & others\n\t * @todo refactor 'attributes' to 'attributeLabels'\n\t * @todo assetAttributes.ids and .types are redundant; refactor.\n\t * @private\n\t */\n\tproperties: {},\n\t/**\n\t * Netx.router is our instance of Backbone.Router\n\t * @memberOf Netx\n\t * @namespace\n\t * @static\n\t */\n\trouter: {\n\t\troutes: {},\n\t},\n\t/**\n\t * We create a dummy Netx.user.profile here describing an unauthenticated user;\n\t * This will be overwritten with real user data when we authenticate.\n\t * @memberOf Netx\n\t * @namespace\n\t * @static\n\t */\n\tuser: {},\n\t/**\n\t * When controllers need a View to have a public name -- i.e. when several listeners need to operate on the same View --\n\t * the controller can put that Views in Netx.views; it can be named anything, but by convention it's usually given the\n\t * name of the template, which by convention is the View class name lowercased.\n\t * For instance, Netx.views.assetDetailView is an instance of Netx.Views.AssetDetailView used by the asset controller.\n\t * @memberOf Netx\n\t * @namespace\n\t * @static\n\t */\n\tviews: {},\n\t/**\n\t * Netx.Collections namespace\n\t * @memberof Netx\n\t * @namespace\n\t * @static\n\t */\n\tCollections: {},\n\t/**\n\t * Netx.Models namespace maintains model class definitions\n\t * @memberof Netx\n\t * @namespace\n\t * @static\n\t */\n\tModels: {},\n\t/**\n\t * Netx.Routers namespace\n\t * @memberof Netx\n\t * @namespace\n\t * @static\n\t */\n\tRouters: {},\n\t/**\n\t * Netx.ShareableTypes holds objects describing things that the DAM can share, along with verbiage to describe those things.\n\t * @memberof Netx\n\t * @namespace\n\t * @static\n\t */\n\tShareableTypes: {},\n\tURL: NetxURL,\n\t/**\n\t * Netx.Views namespace\n\t * @memberof Netx\n\t * @namespace\n\t * @static\n\t */\n\tViews: {},\n});\nexport default Netx;\n\n// this is dead, leaving in the event of a cannnot access x of undefined\n// should not come up... think all references have been removed\nwindow.custom = {};\n\n////////////////////////////////////////////\n\n////////////////////////////////////////////\n\nwindow.Hammer = Hammer;\n////////////////////////////////////////////\n// !App utility libraries\n////////////////////////////////////////////\n\n////////////////////////////////////////////\n// Netx module intialization\n////////////////////////////////////////////\n/**\n * Modules already initialized indexed by namespace\n * @type {Array<any>}\n */\nconst initializedModules = [];\n/**\n * Modules currently initializing indexed by namespace and storing the promise to the original initialization call for that module\n * @type {object}\n */\nconst initializingModules = {};\n\n/**\n * Module initialization helper\n * @function\n * @global\n * @param {Array<any>|object} modules Module(s) to initialize\n * @param {object} opts Options\n */\n// https://stackoverflow.com/questions/37787123/is-it-possible-to-let-webpacks-system-import-use-ajax-for-progress-events\n// One day we could look into extending the webpack functionality with our own plugin to allow for XHR requests of\n// all of our bundles - then we could use a `progress` event on it and dispatch refined progress\nconst initializeModule = function (modules, opts = {}) {\n\t// Convert to array if not already\n\tmodules = Array.isArray(modules) ? modules : [modules];\n\n\treturn new Promise((resolve, reject) => {\n\t\tvar idx = 0,\n\t\t\tnewModules = 0,\n\t\t\troutesToAdd = {},\n\t\t\ttotal = modules.length;\n\n\t\t// Go on to next module (or resolve)\n\t\tfunction next() {\n\t\t\tidx++;\n\t\t\tidx < total ? init() : finished();\n\t\t}\n\n\t\t// Initialize module\n\t\tfunction init() {\n\t\t\tvar m = modules[idx],\n\t\t\t\tnamespace = m.namespace;\n\n\t\t\tlogger.debug('initializing module >', namespace);\n\n\t\t\t// Check if already initialized\n\t\t\tif (_.contains(initializedModules, namespace)) {\n\t\t\t\tlogger.debug('module already initialized >', namespace);\n\t\t\t\treturn next();\n\t\t\t}\n\n\t\t\t// Are we already initializing this module - listen for its completion\n\t\t\t// and then continue on\n\t\t\tif (!_.isUndefined(initializingModules[namespace])) {\n\t\t\t\tlogger.debug('module already initializing >', namespace);\n\t\t\t\treturn initializingModules[namespace].then(next);\n\t\t\t}\n\n\t\t\t// We are initializing this module now\n\t\t\tdispatcher.trigger(\n\t\t\t\t'netx:initializing:module',\n\t\t\t\tnamespace,\n\t\t\t\t(idx / total) * 100,\n\t\t\t\topts.deferred,\n\t\t\t\topts.loadUrl,\n\t\t\t);\n\n\t\t\t// Store promise\n\t\t\tinitializingModules[namespace] = m.initialize().then(\n\t\t\t\tfunction (routes) {\n\t\t\t\t\tlogger.debug('module initialized >', namespace);\n\t\t\t\t\t// If the module was deferred remove its wildcard route now\n\t\t\t\t\tif (opts.deferred && appRouter.routes[m.namespace + '(/*anything)']) {\n\t\t\t\t\t\tdelete appRouter.routes[m.namespace + '(/*anything)'];\n\t\t\t\t\t}\n\t\t\t\t\t// Add routes to queue\n\t\t\t\t\troutes && _.extend(routesToAdd, routes);\n\t\t\t\t\t// Store namespace in modules initialized array\n\t\t\t\t\tinitializedModules.push(namespace);\n\t\t\t\t\t// A new module was initialized\n\t\t\t\t\tnewModules++;\n\t\t\t\t\t// Remove initialize promise from the initializing array\n\t\t\t\t\tdelete initializingModules[namespace];\n\t\t\t\t\t// Dispatche event\n\t\t\t\t\tdispatcher.trigger(\n\t\t\t\t\t\t'netx:initialized:module',\n\t\t\t\t\t\tnamespace,\n\t\t\t\t\t\t((idx + 1) / total) * 100,\n\t\t\t\t\t\topts.deferred,\n\t\t\t\t\t\topts.loadUrl,\n\t\t\t\t\t);\n\t\t\t\t\t// Next module or resolve\n\t\t\t\t\tnext();\n\t\t\t\t},\n\t\t\t\t(err) => {\n\t\t\t\t\tconsole.error(err);\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\n\t\t// When all modules are initialized\n\t\tfunction finished() {\n\t\t\t// Defer to allow anything hooked on any of the module initialized promises to respond\n\t\t\t_.defer(function () {\n\t\t\t\t// Only if new modules were intialized\n\t\t\t\tif (newModules) {\n\t\t\t\t\t// Add all new routes\n\t\t\t\t\tappRouter.addRoutes(routesToAdd);\n\t\t\t\t\t// Load route url when all modules are loaded\n\t\t\t\t\topts.loadUrl && appRouter.ready && Backbone.history.loadUrl();\n\t\t\t\t}\n\t\t\t});\n\t\t\tresolve(modules);\n\t\t}\n\n\t\t// Start\n\t\tinit();\n\t});\n};\n\n/**\n * @event module:netx#netx:load:module\n * @param {array|object} modules Module object or an array of module objects\n * @param {object} opts Options\n */\ndispatcher.on('netx:load:module', function (modules, opts) {\n\topts = opts || {};\n\tinitializeModule(\n\t\tmodules,\n\t\t_.extend(\n\t\t\t{\n\t\t\t\tdeferred: false,\n\t\t\t\tloadUrl: false,\n\t\t\t},\n\t\t\t_.pick(opts, 'deferred', 'loadUrl'),\n\t\t),\n\t).then(\n\t\tfunction () {\n\t\t\t_.isFunction(opts.initialized) && opts.initialized();\n\t\t},\n\t\tfunction (err) {\n\t\t\t_.isFunction(opts.error) && opts.error(err);\n\t\t},\n\t);\n});\n\n/**\n * @event module:netx#netx:load:deferred:module\n * @param {array|object} modules Module object or an array of module objects\n * @param {object} opts Options\n */\ndispatcher.on('netx:load:deferred:module', function (modules, opts) {\n\tdispatcher.trigger(\n\t\t'netx:load:module',\n\t\tmodules,\n\t\t_.extend({deferred: true}, opts),\n\t);\n});\n////////////////////////////////////////////\n// !Netx module intialization\n////////////////////////////////////////////\n","import axios from 'axios';\nimport {\n\tNetxThemeMode,\n\tNetxThemePref,\n\tNETX_THEME_MODES,\n} from '@netx/core-components/Theme/constants';\nimport type {\n\tThemeMode,\n\tNetxThemeStyles,\n\tNetxCustomCssProperties,\n} from '@netx/core-components/Theme/types';\nimport {netxThemeModeToThemeMode} from '@netx/core-components/Theme/utils/netxThemeModeToThemeMode';\nimport {typedEntries} from '@netx/core-next/utils/object/typedEntries';\nimport config from '@netx/core-app/config';\nimport {isBrandPortal} from '@netx/core-cms-next/utils/isBrandPortal';\nimport {getPreference} from '@netx/core-user-next/utils/getPreference';\nimport {URL} from '@netx/core-next/url';\nimport {dispatcher} from '@netx/core-next/instance/dispatcher';\nimport {setGlobal} from '@netx/core-next/utils/setGlobal';\n\nconst customPropertyPrefix = config.CSS_CUSTOM_PROPERTY_PREFIX;\n\n// Will store all css properties here\nlet currentProperties: NetxCustomCssProperties = {\n\tupdated: '0',\n\t'login-background-assetId': '',\n\t'light-on-primary-custom': 'false',\n\t'light-on-secondary-custom': 'false',\n\t'dark-on-primary-custom': 'false',\n\t'dark-on-secondary-custom': 'false',\n\t...config.CSS_CUSTOM_PROPERTIES,\n};\n\nlet currentThemeMode: ThemeMode = NetxThemeMode.LIGHT;\nlet fetchedCSS = false;\n\nconst documentElement = document.documentElement;\nconst style = documentElement.style;\n\n/**\n * @function\n * @param key Style property key\n * @param value Style property value\n */\nconst _setStyleProperty = (key: string, value?: string) => {\n\t// setting a value\n\tif (value) {\n\t\tstyle.setProperty(key, value);\n\t\tdispatcher.trigger('css:variable:updated', key, value);\n\t\treturn;\n\t}\n\n\t// clearing a value\n\n\t// Look for default value\n\tconst _key = `${currentThemeMode}-${key.replace(\n\t\tcustomPropertyPrefix,\n\t\t'',\n\t)}` as keyof NetxThemeStyles;\n\tconst defaultValue = config.CSS_CUSTOM_PROPERTIES[_key];\n\n\tdefaultValue\n\t\t? style.setProperty(key, defaultValue)\n\t\t: // If no default value, remove the property\n\t\t style.removeProperty(key);\n\n\tdispatcher.trigger('css:variable:updated', key, defaultValue);\n};\n\n/**\n * Get the current theme mode\n * @function\n * @return Theme mode\n */\nexport const getThemeMode = () =>\n\tnetxThemeModeToThemeMode(getPreference(NetxThemePref.USER_SELECTED));\n\nsetGlobal({getThemeMode});\n\n/**\n * Get style property from DOM\n * @function\n * @return Style property\n */\nexport const getStyleProperty = (key: string) => {\n\tconst style = getComputedStyle(document.body);\n\treturn style.getPropertyValue(`${customPropertyPrefix}${key}`).trim();\n};\n\nsetGlobal({getStyleProperty});\n\n/**\n * @function\n * @returns string | undefined\n */\nexport const getLoginBackgroundUrl = () =>\n\t!isBrandPortal()\n\t\t? `${URL.loginBackground}?cb=${currentProperties.updated || Date.now()}`\n\t\t: undefined;\n\nsetGlobal({getLoginBackgroundUrl});\n\n/**\n * Changes address bar color in supported browsers\n * @function\n */\nexport const setMetaThemeColor = (value: string) =>\n\tdocument\n\t\t.querySelector('meta[name=theme-color]')\n\t\t?.setAttribute('content', value);\n\nsetGlobal({setMetaThemeColor});\n\n/**\n * Set style property on DOM\n * @function\n * @param key Style property key\n * @param value Style property value\n */\nexport const setStyleProperty = (\n\tkey: keyof NetxCustomCssProperties,\n\tvalue: string,\n) => {\n\tObject.assign(currentProperties, {[key]: value});\n\n\t// We use this for cachebusting the background image since last update\n\tif (key === 'updated') return false;\n\n\tconst simpleKey = key.replace(`${currentThemeMode}-`, '');\n\n\tif (simpleKey === 'primary') setMetaThemeColor(value);\n\n\t_setStyleProperty(`${customPropertyPrefix}${simpleKey}`, value);\n\n\treturn true;\n};\n\nsetGlobal({setStyleProperty});\n\n/**\n * @function\n * @param name Theme mode name\n * @fires module:netx#theme:toggled\n */\nexport const setThemeMode = (\n\tname?: NetxThemeMode | ThemeMode,\n\tforce = false,\n) => {\n\tname = netxThemeModeToThemeMode(name);\n\n\tconst themeChanged = currentThemeMode !== name;\n\n\tcurrentThemeMode = name as ThemeMode;\n\n\ttypedEntries(currentProperties).forEach(([key, value]) => {\n\t\tif (\n\t\t\t!key.includes(`${currentThemeMode}-`) ||\n\t\t\tgetStyleProperty(key) === value\n\t\t)\n\t\t\treturn;\n\t\tsetStyleProperty(key, value);\n\t});\n\n\tif (themeChanged) {\n\t\t// Clear all possible theme-mode classes\n\t\tNETX_THEME_MODES.forEach((mode) =>\n\t\t\tdocumentElement.classList.remove(`theme-${mode}`),\n\t\t);\n\t\t// Add selected theme-mode class\n\t\tdocument.documentElement.classList.add(`theme-${currentThemeMode}`);\n\t}\n\n\t// Dispatch event for the rest of the app to listen to\n\t(themeChanged || force) && dispatcher.trigger('theme:toggled', name);\n};\n\nsetGlobal({setThemeMode});\n\n/**\n * When user prefs are available we can set the theme mode to the user's selection\n * @event module:app#app:user:prefs:ready\n */\n// TODO: these `once` dispatchers on the global scope of a file are hard to test from multiple ways\n// having a hard time testing the the initialize thoroughly and this having not `fetchedCSS`\ndispatcher.once('app:user:prefs:ready', () => {\n\twindow\n\t\t.matchMedia('(prefers-color-scheme: dark)')\n\t\t.addEventListener('change', (event) => {\n\t\t\tif (!fetchedCSS) return;\n\t\t\tsetThemeMode(getThemeMode());\n\t\t});\n\t// we will call set theme mode when the css is done fetching\n\tif (!fetchedCSS) return;\n\tsetThemeMode(getThemeMode());\n});\n\nconst initialize = async () => {\n\t// Set the default theme mode class\n\tdocumentElement.classList.add(`theme-${currentThemeMode}`);\n\n\t// Load css properties from server\n\treturn await axios\n\t\t.get<NetxCustomCssProperties>(\n\t\t\t`${URL.customCssProperties}?cb=${Date.now()}`,\n\t\t\t{\n\t\t\t\tresponseType: 'json',\n\t\t\t},\n\t\t)\n\t\t.then(({data}) => {\n\t\t\t// Store all data\n\t\t\tcurrentProperties = {\n\t\t\t\t...config.CSS_CUSTOM_PROPERTIES,\n\t\t\t\t...data,\n\t\t\t};\n\t\t\t// Set current theme (will loop over data and set based on theme mode)\n\t\t\tsetThemeMode(getThemeMode(), true);\n\n\t\t\tfetchedCSS = true;\n\t\t});\n};\n\nexport default () => initialize();\n","/**\n * Netx.Collection extends Backbone.Collection and allows us to add functionality\n * outside of the default Backbone methods and properties\n * @class\n */\n\nimport Backbone from 'backbone';\nimport Rpc from 'core-libs/backbone.rpc';\nimport Model from './netx-model';\nimport {URL} from '@netx/core-next/url';\nimport {localStore} from '@netx/core-next/instance/localStore';\n\nconst BBCollection = Backbone.Collection;\nBBCollection.prototype.reset = _.wrap(\n\tBBCollection.prototype.reset,\n\tfunction (reset, models, options = {}) {\n\t\t// WARNING: Do not get it in your head, as I did, that we can and should trigger 'add'/'remove' events here\n\t\t// it really messes up backgrid and I am sure there is a reason why reset is used in some cases and that it\n\t\t// is so sneaky about its operations\n\n\t\t// With reset Backbone basically just circumvents all the official channels of removing models and does it all in hush hush secrecy\n\t\t// Two things:\n\t\t// We want tour models to know that they have been removed so they can have a chance to clean themselves up\n\t\t// We want to handle any local storage cleanup resulting from this reset as well\n\n\t\t!options.filtering &&\n\t\t\tthis.each((model) => {\n\t\t\t\t// Reference to collection\n\t\t\t\tif (model.removeCollectionReference) {\n\t\t\t\t\tmodel.removeCollectionReference(this);\n\t\t\t\t}\n\t\t\t\t// Local storage\n\t\t\t\tif (_.isFunction(this.modelRemoved)) {\n\t\t\t\t\tthis.modelRemoved(model);\n\t\t\t\t}\n\t\t\t});\n\n\t\t// Super - let backbone do its thing\n\t\treset.call(this, models, options);\n\n\t\t// Let any models that came in know\n\t\t// This also deals with `new Netx.Collection( models )` as in Bacbone.Collection constructor\n\t\t// they use this.reset( models, _.extend( { silent: true }, options ) );\n\t\tthis.each((model) => {\n\t\t\t// Reference to collection\n\t\t\tif (model.addCollectionReference) model.addCollectionReference(this);\n\t\t\t// Local storage\n\t\t\tif (_.isFunction(this.modelAdded)) this.modelAdded(model);\n\t\t});\n\t},\n);\n\n// Make a Collection we can extend from in other classes\nclass ES6Collection {\n\t/** @override */\n\tconstructor(models, opts) {\n\t\tBBCollection.apply(this, arguments);\n\t}\n}\n_.extend(ES6Collection.prototype, BBCollection.prototype, {\n\t/**\n\t * The underscore `indexOf` extension here is always returning -1\n\t * but a vanilla `indexOf` works just fine :/\n\t * @override\n\t */\n\tindexOf(model) {\n\t\treturn this.models.indexOf(model);\n\t},\n\t/**\n\t * Check for our es6 instance instead\n\t * @override\n\t */\n\t_isModel(model) {\n\t\treturn (\n\t\t\tmodel instanceof Backbone.ES6Model || model instanceof Backbone.Model\n\t\t);\n\t},\n});\nBackbone.ES6Collection = ES6Collection;\n\nexport class Collection extends ES6Collection {\n\t/** @type {boolean} */\n\tget isCollection() {\n\t\treturn this.constructor.__isCollection__;\n\t}\n\n\t// Whelp\n\t// Need to fix in backbone.rpc - the model get's a property of `syncing`\n\t// whether the call is a syncable (read) or not\n\t// And since our loading indication relies on the `request:read` event and the `sync` event\n\t// we will get false loading positives by checking `this.syncing`\n\t// So, check for the `read` method in our current calls list\n\tget isSyncing() {\n\t\treturn this._rpc && this.syncing && this._rpc.callsByName.read != null;\n\t}\n\n\t/** @type {object} */\n\tget methods() {\n\t\treturn {};\n\t}\n\n\t/** @type {object} */\n\tget parsers() {\n\t\treturn {};\n\t}\n\n\t/** @type {object} */\n\tget rpc() {\n\t\treturn false;\n\t}\n\n\tget url() {\n\t\treturn URL.api;\n\t}\n\n\t/** @type {object} */\n\tget templateProps() {\n\t\treturn this;\n\t}\n\n\t/** @type {object} */\n\tget xhrLoadedMessages() {\n\t\treturn {};\n\t}\n\n\t/** @type {object} */\n\tget xhrLoadingMessages() {\n\t\treturn {};\n\t}\n\n\t/**\n\t * @override\n\t * @param {array} models Models array\n\t * @param {object} options Collection options\n\t */\n\tconstructor(models, opts = {}) {\n\t\t// Circular reference\n\t\t// Model = require('./netx-model.js');\n\n\t\topts.model = opts.model || Model;\n\t\tsuper(models, opts);\n\n\t\tconst rpc = opts.rpc != null ? opts.rpc : this.rpc;\n\t\tif (rpc === true) {\n\t\t\tthis._rpc = new Rpc();\n\t\t}\n\n\t\tthis.sorter = opts.sorter;\n\n\t\t/**\n\t\t * Override this in your collection if you want to store your models locally\n\t\t * If you create two collections of the same type and wish to keep the data seperate in the store\n\t\t * override this in your initialization of the collection and give a different name\n\t\t * Like var secondaryNotifications = new Netx.Collection.Notifications([], { localStorageKey: 'secondary-notifications' })\n\t\t * @note: This will only store the attributes - you can not store object references, etc\n\t\t * @param {object} options\n\t\t */\n\t\tthis.localStorageKey = opts.localStorageKey || null;\n\t\t/** @type {number} */\n\t\tthis.maxStore = opts.maxStore || 100;\n\n\t\t/**\n\t\t * @type {string}\n\t\t */\n\t\tthis.filterStr = opts.filterStr || '';\n\n\t\t/**\n\t\t * Tracks models in local storage\n\t\t * @memberof module:core/lib/netx-collection\n\t\t * @alias stored\n\t\t * @type {array}\n\t\t */\n\t\tthis.stored = [];\n\n\t\t// Hey, listen!\n\t\tthis.listenTo(this, 'add', this.modelAdded)\n\t\t\t.listenTo(this, 'change', this.modelChanged)\n\t\t\t.listenTo(this, 'remove', this.modelRemoved)\n\t\t\t.listenTo(this, 'sync', () => {\n\t\t\t\tthis.syncedOnce = true;\n\t\t\t});\n\n\t\t// Load data\n\t\t// Defer to give everything a chance to finish initialization\n\t\t// TODO: deferLocalStorage property here is not used elsewhere, and is weird\n\t\t// TODO: defering pager listening\n\t\t// allows inherrting class construtors\n\t\t// to go first, not ideal, hard to test\n\t\t_.defer(() => {\n\t\t\tif (!this.deferLocalStorage && this.localStorageKey) {\n\t\t\t\tthis.loadLocalStorage();\n\t\t\t}\n\n\t\t\tif (this.pager) {\n\t\t\t\tthis.listenTo(this.pager, 'change:itemTotal', (pager, total) => {\n\t\t\t\t\tthis.trigger('updatedTotal', this);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * We have some models that utilize the key `attributes` for things like attribute templates\n\t * @override\n\t * @param {number|object|string|Backbone.Model} obj Either a model, raw model attribute data, or a model cid/id\n\t * @return {Backbone.Model}\n\t */\n\tget(obj) {\n\t\tif (obj == null) {\n\t\t\treturn void 0;\n\t\t}\n\n\t\t// There is no reason, I can find in the backbone code to be passing models to this - you could just use\n\t\t// `collection.get(<id/cid>)`\n\t\t// I suppose it is for brevity, they do not have to check if the object is a model or raw attributes when looping\n\t\t// over the data provided in add/reset/set, it can just check if the model exists in the collection by passing the object or model\n\t\t// But to assume that the existence of an `attributes` property makes this a model is not good for us\n\t\tif (obj.attributes && this._isModel(obj)) {\n\t\t\tif (obj.cid && this._byId[obj.cid]) {\n\t\t\t\treturn this._byId[obj.cid];\n\t\t\t}\n\t\t\tobj = obj.attributes;\n\t\t}\n\t\t// At this point it should either by an id, cid or a raw object of attributes (set/reset/add)\n\t\t// `_byId` is an object indexed twice, once by id and then cid\n\t\t// If you are ever having issues with this method, check the state of `this._byId`.\n\t\treturn this._byId[obj] || this._byId[this.modelId(obj)];\n\t}\n\n\t/**\n\t * Add model to session storage\n\t * @note It will only store the attributes (and only the attributes which do not reference other objects directly)\n\t * This is because we can only store json strings in the local/session storage\n\t * @param {Netx.Model} model Instance of Netx.Model\n\t */\n\taddToLocalStorage(model) {\n\t\tif (!model || !this.localStorageKey) return;\n\t\t// Keep in bounds of this.maxStore\n\t\tthis.checkMaxStore();\n\t\t// Model key\n\t\tconst keyName = [this.localStorageKey, model.id].join('');\n\t\t// To persist or not\n\t\tconst persist = model.storeOptions.persist;\n\n\t\t// Set the value\n\t\t// TODO: implement this in the model itself? (model.toLocalStorage() or similar.)\n\t\tlocalStore.set(\n\t\t\tkeyName,\n\t\t\tthis.parseLocalStorageModelOut(_.clone(model.self())),\n\t\t);\n\t\t// Add to beginning of this.stored array\n\t\tthis.stored.unshift(model.id);\n\t\t// Keep until explicitly removed\n\t\tif (persist === true) {\n\t\t\tlocalStore.persist(keyName);\n\t\t}\n\t\t// Expires\n\t\telse if (_.isString(persist) || _.isNumber(persist)) {\n\t\t\tlocalStore.expire(keyName, persist);\n\t\t}\n\t}\n\n\t/**\n\t * Enforce this.maxStore\n\t * @method\n\t */\n\tcheckMaxStore() {\n\t\tif (!this.maxStore || this.stored.length < this.maxStore - 1) return;\n\n\t\t// Amount to rmeove\n\t\tconst count = this.stored.length - this.maxStore + 1;\n\t\t// Items to remove\n\t\tconst items = _.last(this.stored, count);\n\t\t// Loop over and remove them\n\t\t_.each(items, (id) => this.removeFromLocalStorage(this.get(id)));\n\t}\n\n\t/**\n\t * Clear out session storage for this.localStorageKey\n\t * @method\n\t */\n\tclearLocalStorage() {\n\t\tif (!this.localStorageKey) return;\n\n\t\t// Match all my model keys\n\t\tconst regexp = new RegExp(['^', this.localStorageKey, '.*'].join(''));\n\t\tlocalStore.remove(localStore.keys(regexp));\n\t\tthis.stored = [];\n\t}\n\n\t/**\n\t * Perform a deeper clone than the Backbone standard: also clone the collection's models.\n\t * @method\n\t */\n\tdeepClone() {\n\t\tconst clone = this.clone();\n\t\tclone.reset([], {silent: true});\n\t\tclone.set(this.map((model) => model.attributes));\n\n\t\t// Make sure our pagers match as well\n\t\t// todo: this would fail for collections\n\t\t// that don't create a pager on init\n\t\t// like netx-collection\n\t\tif (this.pager) {\n\t\t\tclone.pager.set({...this.pager.attributes});\n\t\t}\n\n\t\treturn clone;\n\t}\n\n\t/**\n\t * @method\n\t * @param {array} ids Model ids to delete\n\t */\n\tdeleteMultiple(ids) {\n\t\tif (ids.isCollection) {\n\t\t\tids = ids.ids();\n\t\t}\n\n\t\treturn $.when.apply(\n\t\t\t$,\n\t\t\tthis.chain() // .chain() lets us perform a stream of tasks.\n\t\t\t\t.filter((item) => ids.indexOf(item.id) > -1) // returns just the objects on the list.\n\t\t\t\t.invoke('destroy', {wait: true}) // calls 'destroy' on each one of those objects, waits for server response\n\t\t\t\t.value(), // returns an array of promises, one returned by each 'destroy' call.\n\t\t);\n\t}\n\n\t/**\n\t * Now that all model views contain the [data-nx-model-id] attribute on their elements,\n\t * this utility function can find a model given a DOM event from that model's view\n\t */\n\tgetModelIdFromEvent(e) {\n\t\tconst id = parseInt(\n\t\t\t$(e.target).closest('[data-nx-model-id]').attr('data-nx-model-id'),\n\t\t);\n\t\treturn this.get(id);\n\t}\n\n\t/**\n\t * Get size information on localStorage\n\t * http://blog.blakesimpson.co.uk/read/46-check-size-of-localstorage-usage-in-chrome\n\t * @method\n\t * @deprecate\n\t * @note not to be used heavily\n\t * @return {object} totals\n\t */\n\tgetLocalStorageSize() {\n\t\tlet amount = 0;\n\t\tlet total = 0;\n\t\tlet myTotal = 0;\n\t\tconst regexp = new RegExp(['^', this.localStorageKey, '.*'].join(''));\n\n\t\tfor (let x in localStorage) {\n\t\t\tamount = (localStorage[x].length * 2) / 1024 / 1024;\n\t\t\ttotal += amount;\n\t\t\tif (x.match(regexp)) myTotal += amount;\n\t\t}\n\n\t\tconsole.log('My total: ' + myTotal.toFixed(10) + ' MB');\n\t\tconsole.log('Total: ' + total.toFixed(10) + ' MB');\n\n\t\treturn {\n\t\t\tmyTotal: myTotal,\n\t\t\ttotal: total,\n\t\t};\n\t}\n\n\t/**\n\t * @method\n\t * @return {number} Total\n\t */\n\tgetTotal() {\n\t\tif (this.length && this.pager) {\n\t\t\tconst total = this.pager.get('itemTotal');\n\t\t\tif (total < this.length) {\n\t\t\t\treturn this.length;\n\t\t\t}\n\t\t\treturn total;\n\t\t}\n\n\t\tif (_.isFunction(this.assetCount)) {\n\t\t\treturn this.assetCount();\n\t\t}\n\n\t\treturn this.length;\n\t}\n\n\t/*\n\t * @method\n\t * @param {number} page Page number\n\t * @param {object} opts Options\n\t */\n\tgotoPage(page, opts) {\n\t\tif (page === this.curPage) {\n\t\t\treturn new $.Deferred().resolveWith(this);\n\t\t}\n\n\t\tthis.curPage = parseInt(page);\n\t\t// Getting a page for detail view\n\t\treturn this.fetch(_.extend({duplicateQueryPolicy: 'abort'}, opts));\n\t}\n\n\t/**\n\t * Return an array of the IDs of the models in this collection.\n\t * @method\n\t */\n\tids() {\n\t\treturn this.pluck(this.model.prototype.idAttribute);\n\t}\n\n\t/**\n\t * @method\n\t * @return {boolean}\n\t */\n\tisFiltered() {\n\t\treturn this.filterStr !== '' || this.filtered === true;\n\t}\n\n\t/**\n\t * Load session storage - happens at this.initialize\n\t * Looks for this.localStorageKey in sessionStorage and loads the data if available\n\t */\n\tloadLocalStorage() {\n\t\tif (!this.localStorageKey) return;\n\n\t\tthis.trigger('request:read', this, null);\n\n\t\t// Reset stored array\n\t\tthis.stored = [];\n\t\t// My model keys\n\t\tconst regexp = new RegExp(['^', this.localStorageKey, '.*'].join(''));\n\t\t// My stored models\n\t\tconst things = localStore.get(localStore.keys(regexp));\n\t\t// We have some things\n\t\tif (things && _.isArray(things)) {\n\t\t\t_.each(things, (t) => {\n\t\t\t\t// TODO: implement this in the model itself? (model.fromLocalStorage(t) or similar.)\n\t\t\t\tt = this.parseLocalStorageModelIn(t);\n\t\t\t\tif (!t) return;\n\t\t\t\t// Silent to avoid a loop\n\t\t\t\t// Collection hears model added- check to add to local storage - adds to local storage - check to add to loval storage - repeat repeat\n\t\t\t\t// I feel like adding an additional property isn't worth it when we have things like \"silent\" at our disposal\n\t\t\t\tthis.add(t, {silent: true});\n\t\t\t});\n\t\t\tthis.stored = this.ids();\n\t\t}\n\t\tthis.trigger('sync', this);\n\t}\n\n\t/**\n\t * Model was added to collection\n\t * @method\n\t * @param {Netx.Model} model Instance of Netx.Model\n\t */\n\tmodelAdded(model) {\n\t\tif (this.localStorageKey && model.storeOptions.persist) {\n\t\t\tthis.addToLocalStorage(model);\n\t\t}\n\t}\n\n\t/**\n\t * Model was changed in collection\n\t * @method\n\t * @param {Netx.Model} model Instance of Netx.Model\n\t */\n\tmodelChanged(model) {\n\t\tif (!this.localStorageKey) return;\n\n\t\t// Model key\n\t\tconst keyName = [this.localStorageKey, model.id].join('');\n\t\t// To persist or not\n\t\tconst persist = model.storeOptions.persist;\n\n\t\t// Set the value\n\t\tconst parsed = this.parseLocalStorageModelOut(_.clone(model.self()));\n\t\tif (!parsed) return;\n\n\t\tlocalStore.set(keyName, parsed);\n\t\t// Keep until explicitly removed\n\t\tif (persist === true) {\n\t\t\tlocalStore.persist(keyName);\n\t\t}\n\t\t// Expire\n\t\telse if (_.isString(persist) || _.isNumber(persist)) {\n\t\t\tlocalStore.expire(keyName, persist);\n\t\t}\n\t}\n\n\t/**\n\t * Model was removed from collection\n\t * @method\n\t * @param {Netx.Model} model Instance of Netx.Model\n\t */\n\tmodelRemoved(model) {\n\t\tif (!model || !this.localStorageKey) return;\n\n\t\tthis.removeFromLocalStorage(model);\n\t}\n\n\t/**\n\t * We often need to suggest a name for a new model. \"New Model\" works the first time, but\n\t * after that it's not a unique name any more, so we want to try \"New Model 2\", \"New Model 3\", et cetera,\n\t * until we find a good one.\n\t *\n\t * @method\n\t * @param {string} prefix Prefix of the model name (\"New Model\"), or i18n key of same (\"i18n.newModel\")\n\t * \t\t\t\t\t\t\t\t\t\t\t\t\t\t (i18n key should implement the numeric index via i18next plurals: http://i18next.com/translate/pluralSimple)\n\t * @param {string} attr The 'name' attribute of this model. If undefined, we'll try \"name\", \"title\" and \"label\" in that order.\n\t * @returns {string} Returns a unique name, not yet used by any model in this collection.\n\t */\n\tmakeUniqueName(prefix, attr) {\n\t\tlet index = 1;\n\t\tlet translate = false;\n\t\tlet title = prefix;\n\n\t\tif (prefix.match(/^i18n\\./)) {\n\t\t\ttranslate = true;\n\t\t\t// Translate prefix.\n\t\t\ttitle = i18n.t(prefix, {count: index});\n\n\t\t\t// If pluralization isn't working, we could get an endless loop.\n\t\t\t// Test that here:\n\t\t\tconst testTitle = i18n.t(prefix, {count: index + 1});\n\t\t\tif (title === testTitle) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"makeUniqueName: i18n key '\" + prefix + \"' is not pluralized.\",\n\t\t\t\t); // http://i18next.com/translate/pluralSimple\n\t\t\t\treturn title;\n\t\t\t}\n\t\t}\n\n\t\t// Check the easy case: there are no other models!\n\t\tif (!this.length) {\n\t\t\treturn title;\n\t\t}\n\n\t\t// If attr wasn't given, try to guess it.\n\t\tif (!attr) {\n\t\t\tif (this.at(0).has('name')) {\n\t\t\t\tattr = 'name';\n\t\t\t} else if (this.at(0).has('title')) {\n\t\t\t\tattr = 'title';\n\t\t\t} else if (this.at(0).has('label')) {\n\t\t\t\tattr = 'label';\n\t\t\t} else {\n\t\t\t\tthrow 'Undefined attr for model name';\n\t\t\t}\n\t\t}\n\n\t\t// If we can find a model matching this title, make a new title & try again.\n\t\tconst obj = {\n\t\t\t[attr]: title,\n\t\t};\n\t\twhile (this.findWhere(obj)) {\n\t\t\tindex++;\n\t\t\tif (translate) {\n\t\t\t\ttitle = i18n.t(prefix, {count: index});\n\t\t\t} else {\n\t\t\t\ttitle = prefix + ' ' + index;\n\t\t\t}\n\t\t\tobj[attr] = title;\n\t\t}\n\n\t\treturn title;\n\t}\n\n\t/**\n\t * Modify the model object that came back from local storage before inserting it into the collection\n\t * @method\n\t * @param {object} obj Model data object\n\t * @return {object} Model data\n\t */\n\tparseLocalStorageModelIn(obj) {\n\t\treturn obj;\n\t}\n\n\t/**\n\t * Modify the model object that is going to local storage before it does\n\t * @method\n\t * @param {object} obj Model attributes\n\t * @return {object} Model data\n\t */\n\tparseLocalStorageModelOut(obj) {\n\t\treturn obj;\n\t}\n\n\t/**\n\t * Remove model from session storage\n\t * @method\n\t * @param {Netx.Model} model Instance of Netx.Model\n\t */\n\tremoveFromLocalStorage(model) {\n\t\tif (!model || !this.localStorageKey) return;\n\n\t\t// Find by id in this.stored\n\t\tconst idx = _.indexOf(this.stored, model.id);\n\t\tif (idx > -1) {\n\t\t\tthis.stored.splice(idx, 1);\n\t\t}\n\t\tlocalStore.remove([this.localStorageKey, model.id].join(''));\n\t}\n\n\t/**\n\t * this.self() returns just the data in a collection that's reflected in the DAM.\n\t * It can be used in method definitions to omit models or model attributes that should *not* be synced.\n\t * We use it for cases where the data is structured differently in the\n\t * model than on the wire, and for models/collections that want to have additional attributes\n\t * for local-only reasons. .self() is intended to be called from method-definition functions,\n\t * when the API call is looking for a single JSON object to represent the entire collection.\n\t *\n\t * The default Netx.Collection.self() implemetation uses this.invoke() to call model.self() on each model,\n\t * and returns the resulting array.\n\t *\n\t * @return {object}\n\t * @method\n\t */\n\tself() {\n\t\treturn this.invoke('self');\n\t}\n\n\t/**\n\t * @method\n\t * @param {string} str Filter\n\t */\n\tsetFilterStr(str) {\n\t\tstr = str != null ? str.toString() : '';\n\n\t\tif (this.filterStr === str) return new $.Deferred().resolve();\n\n\t\tthis.filterStr = str;\n\t\t// Reset to first page\n\t\tthis.pager.firstPage({fetch: false});\n\n\t\treturn this[this.preferredFetchMethod || 'fetch']({\n\t\t\tduplicateQueryPolicy: 'abort',\n\t\t});\n\t}\n\n\t/**\n\t * Set sort is to be used when sorting on the server with a `sortDTO`\n\t * Otherwise, use the standard backbone/backgrid sorting or override this method\n\t * @method\n\t * @param {string} field Field name\n\t * @param {string} order Order\n\t * @param {object} opts Request options\n\t */\n\tsetSort(field, order, opts) {\n\t\tif (!this.sorter) return;\n\t\tthis.sorter.setSort(field, order, opts);\n\t}\n\n\t/**\n\t * Subscribe to websocket\n\t * @method\n\t */\n\tsubscribe() {\n\t\treturn Model.prototype.subscribe.apply(this, arguments);\n\t}\n\n\t/**\n\t * Message received from websocket channel\n\t * @method\n\t * @param {object} data Message data\n\t */\n\tsubscriptionMessage(data) {\n\t\tconst model = this.get(data.id);\n\t\tswitch (data.action) {\n\t\t\tcase 'add':\n\t\t\t\t!model && this.add(data.dto);\n\t\t\t\tbreak;\n\t\t\tcase 'edit':\n\t\t\t\tmodel ? model.set(data.dto) : this.add(data.dto);\n\t\t\t\tbreak;\n\t\t\tcase 'delete':\n\t\t\t\tmodel && this.remove(model);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/**\n\t * Takes an autocomplete object and returns model with enough data\n\t * for a selection interface\n\t * @method\n\t * @param {object} data Data (an object of autocomplete data)\n\t * @return {module:core/lib/netx-model} Instance of `netx-model`\n\t * @example\n\t * <collection>.toSelectedItemFromAutocomplete({\n\t * id: \"1\",\n\t * text: \"Item label\"\n\t * });\n\t */\n\ttoSelectedItemFromAutocomplete(data, additionalAttrs = {}, opts = {}) {\n\t\tconst model = this.model;\n\t\tconst modelProto = model.prototype;\n\n\t\tlet id = parseInt(data.id);\n\t\tif (_.isNaN(id)) {\n\t\t\tid = data.id;\n\t\t}\n\t\t// This is where computed keys would be cool\n\t\treturn new model(\n\t\t\t{\n\t\t\t\t[modelProto.idAttribute]: id,\n\t\t\t\t[modelProto.titleAttribute]: data.text,\n\t\t\t\t...additionalAttrs,\n\t\t\t},\n\t\t\topts,\n\t\t);\n\t}\n\n\t/**\n\t * Unsubscribe from websocket\n\t * @method\n\t */\n\tunsubscribe() {\n\t\t// If models have an `unsubscribe` method, call them\n\t\tif (_.isFunction(this.model.prototype.unsubscribe)) {\n\t\t\tthis.invoke('unsubscribe');\n\t\t}\n\t\t// Super (of sorts)\n\t\treturn Model.prototype.unsubscribe.apply(this, arguments);\n\t}\n\n\t/**\n\t * @method\n\t */\n\tbatchJobComplete() {\n\t\treturn Model.prototype.batchJobComplete.apply(this, arguments);\n\t}\n\n\t/**\n\t * @method\n\t */\n\tbatchJobError() {\n\t\treturn Model.prototype.batchJobError.apply(this, arguments);\n\t}\n\n\t/**\n\t * @method\n\t */\n\tbatchJobProgress() {\n\t\treturn Model.prototype.batchJobProgress.apply(this, arguments);\n\t}\n\n\t/**\n\t * @method\n\t */\n\tgetRestLoadedMessage() {\n\t\treturn Model.prototype.getRestLoadedMessage.apply(this, arguments);\n\t}\n\n\t/**\n\t * @method\n\t */\n\tgetRestLoadingMessage() {\n\t\treturn Model.prototype.getRestLoadingMessage.apply(this, arguments);\n\t}\n\n\t/**\n\t * @method\n\t */\n\ttrackBatchJob() {\n\t\treturn Model.prototype.trackBatchJob.apply(this, arguments);\n\t}\n\n\t/**\n\t * A scoped version of jQuery.when(), that always uses 'this' as the context for the promise it returns.\n\t * It's also able to accept an array of promises, so we don't need to use .apply to make it go.\n\t * @method\n\t */\n\twhen() {\n\t\treturn Model.prototype.when.apply(this, arguments);\n\t}\n\n\t/**\n\t * Object Polling:\n\t * pollUntil() tells any model/collection to do something repeatedly until a conditional test passes,\n\t * emitting appropriate events along the way. Use this to follow DAM changes to certain object properties,\n\t * or to check status until a status change.\n\t *\n\t * @param function doneTest A function that returns true if polling should finish. (Required)\n\t * @param string eventPrefix Event string prefix for polling events. If undefined, no events are triggered.\n\t * @param function pollMethod A function that causes a poll. Must return a promise. Defaults to this.fetch;\n\t * @param number pollInterval Milliseconds between polls. Defaults to 500.\n\t * @method\n\t */\n\tpollUntil() {\n\t\treturn Model.prototype.pollUntil.apply(this, arguments);\n\t}\n\tpausePolling() {\n\t\treturn Model.prototype.pausePolling.apply(this, arguments);\n\t}\n\tresumePolling() {\n\t\treturn Model.prototype.resumePolling.apply(this, arguments);\n\t}\n\n\t//////////////////////////////////////////\n\t// LAZYLOADING\n\t//////////////////////////////////////////\n\t/**\n\t * @method\n\t * @param {number} index Index\n\t */\n\tcheckReachedBeginning(index) {\n\t\tthis.reachedBeginning = this.reachedBeginning || index === 0;\n\t\treturn this;\n\t}\n\n\t/**\n\t * @method\n\t * @param {number} index Index\n\t */\n\tcheckReachedEnd(index) {\n\t\tthis.reachedEnd =\n\t\t\tthis.reachedEnd ||\n\t\t\tindex + this.pager.get('pageSize') >= this.pager.get('itemTotal');\n\t\treturn this;\n\t}\n\n\t/**\n\t * @method\n\t */\n\tinitializeLazyLoad() {\n\t\tthis.reachedBeginning = this.reachedEnd = false;\n\t\tthis.lazyStartIndex = this.pager.get('startIndex');\n\t\tthis.lowestIndex = this.highestIndex = this.lazyStartIndex;\n\n\t\t// No routing\n\t\tthis.pager.set({\n\t\t\t// TODO: collections/models should not need to know about routes/routing\n\t\t\troutesToPage: false,\n\t\t});\n\n\t\tthis.checkReachedBeginning(this.lazyStartIndex)\n\t\t\t.checkReachedEnd(this.lazyStartIndex)\n\t\t\t.stopListening(this.pager, 'change:startIndex', this.startIndexUpdated)\n\t\t\t.listenTo(this.pager, 'change:startIndex', this.startIndexUpdated);\n\t}\n\n\t/**\n\t * @method\n\t * @param {boolean} forward Forward\n\t * @deprecate - unused\n\t * @return {number} Items loading\n\t */\n\tlazyLoadItems(forward) {\n\t\tif (\n\t\t\tthis.syncing ||\n\t\t\t(!forward && this.reachedBeginning) ||\n\t\t\t(forward && this.reachedEnd)\n\t\t)\n\t\t\treturn false;\n\n\t\tconst pageSize = this.pager.get('pageSize');\n\t\tconst page = forward\n\t\t\t? (this.highestIndex + pageSize) / pageSize + 1\n\t\t\t: (this.lowestIndex - pageSize) / pageSize + 1;\n\n\t\tif (page < 1 || page > this.pager.get('pageTotal')) return false;\n\n\t\tthis.lazyLoadedForward = forward;\n\n\t\t// Update pager\n\t\tthis.pager.set(\n\t\t\t{\n\t\t\t\tcurrentPage: page,\n\t\t\t},\n\t\t\t{\n\t\t\t\tat: forward ? this.length : 0,\n\t\t\t\tmerge: true,\n\t\t\t\tremove: false,\n\t\t\t\tsort: false,\n\t\t\t},\n\t\t);\n\n\t\t// Calculate items that will load\n\t\tif (this.pager.get('pageTotal')) {\n\t\t\tlet diff = page * pageSize - this.pager.get('itemTotal');\n\t\t\tif (diff < 0) diff = 0;\n\t\t\treturn pageSize - diff;\n\t\t}\n\n\t\treturn pageSize;\n\t}\n\n\t/**\n\t * @method\n\t * @param {module:app/models/pager} pager Pager\n\t * @param {number} startIndex Start index\n\t */\n\tstartIndexUpdated(pager, startIndex) {\n\t\t// Was not able to set at lazy load initialize\n\t\tif (this.lazyStartIndex == null) {\n\t\t\tthis.lazyStartIndex = startIndex;\n\t\t}\n\n\t\tif (this.lowestIndex == null || startIndex < this.lowestIndex) {\n\t\t\tthis.lowestIndex = startIndex;\n\t\t}\n\n\t\tif (this.highestIndex == null || startIndex > this.highestIndex) {\n\t\t\tthis.highestIndex = startIndex;\n\t\t}\n\n\t\tthis.checkReachedBeginning(startIndex);\n\t\tthis.checkReachedEnd(startIndex);\n\t}\n\t//////////////////////////////////////////\n\t// !LAZYLOADING\n\t//////////////////////////////////////////\n\n\t//////////////////////////////////////////\n\t// HOUSEKEEPING\n\t//////////////////////////////////////////\n\taddSubCollection() {\n\t\treturn Model.prototype.addSubCollection.apply(this, arguments);\n\t}\n\tremoveSubCollection() {\n\t\treturn Model.prototype.removeSubCollection.apply(this, arguments);\n\t}\n\taddSubModel() {\n\t\treturn Model.prototype.addSubModel.apply(this, arguments);\n\t}\n\tremoveSubModel() {\n\t\treturn Model.prototype.removeSubModel.apply(this, arguments);\n\t}\n\t/**\n\t * Severs all ties to the world so it can be eligible for garbage collection\n\t * @method\n\t */\n\tgarbageCollect() {\n\t\tthis._rpc && this._rpc.garbageCollect();\n\n\t\t// Let go of any websocket channels\n\t\tthis.unsubscribe();\n\t\t// Empty out models - see our reset override\n\t\tthis.reset([]);\n\t\t// Kill all event listeners\n\t\tthis.stopListening().off();\n\n\t\tif (this.pager) {\n\t\t\tthis.pager.garbageCollect();\n\t\t}\n\t\tdelete this.subModels;\n\n\t\t// Loop over sub collection and trigger their cleanup\n\t\tif (_.isObject(this.subCollections)) {\n\t\t\t_.each(this.subCollections, function (c) {\n\t\t\t\tc.garbageCollect();\n\t\t\t});\n\t\t\tdelete this.subCollections;\n\t\t}\n\n\t\tthis.garbageCollected = true;\n\n\t\treturn this;\n\t}\n\t//////////////////////////////////////////\n\t// !HOUSEKEEPING\n\t//////////////////////////////////////////\n\n\t// TODO: Implement the class method Load() for testing\n\t// see Netx.Model definition for implementation guidelines'\n\t//\n\t/**\n\t * @method\n\t * @static\n\t * unused\n\t */\n\tstatic Load(selection) {\n\t\tconst collection = new this();\n\t\tif (selection != null) {\n\t\t\tcollection.selection = selection;\n\t\t}\n\t\treturn collection.fetch().then(() => {\n\t\t\treturn collection;\n\t\t});\n\t}\n\n\t/** @type {boolean} */\n\tstatic get __isCollection__() {\n\t\treturn true;\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'Collection';\n\t}\n}\n\nexport default Collection;\n","/**\n * Given an object it will return a protected version that object\n * @param object Object\n * @return Object\n */\nexport const protectObjectProxy = <T extends Record<string | symbol, any>>(\n\tobject: T,\n) => {\n\treturn new Proxy(object, {\n\t\t// Will return any object/arrays as their own copies\n\t\t// elminating the ability to pollute items in the object\n\t\tget(obj, prop) {\n\t\t\tconst value = obj[prop];\n\t\t\tif (typeof value === 'object') return JSON.parse(JSON.stringify(value));\n\t\t\treturn value;\n\t\t},\n\t\t// No setting\n\t\tset(obj, prop, value) {\n\t\t\treturn false;\n\t\t},\n\t});\n};\n\nexport default protectObjectProxy;\n","/**\n * Netx.Model extends Backbone.Model, adding just a few handy methods.\n * @class\n * @extends Backbone.ES6Model\n */\n// Setup ajv for data validation\nimport Ajv from 'ajv';\nimport Backbone from 'backbone';\nimport Rpc from 'core-libs/backbone.rpc';\nimport {URL} from '@netx/core-next/url';\nimport {protectObjectProxy} from '@netx/core/utils/protectObjectProxy';\n\n// these are circular references\n// import {batchJobs} from '@netx/core-app/collections/singleton/batchJobs';\n// import {legacyWebsocket} from '@netx/core-app/collections/singleton/websocket';\n\n// Wrap an optional error callback with a fallback error event.\n// This is from the backbone.js file and allows us to override the save\n// method so that we can support rejecting promises when validation fails\nconst wrapError = (model, options) => {\n\tconst error = options.error;\n\toptions.error = function (resp) {\n\t\tif (error) error.call(options.context, model, resp, options);\n\t\tmodel.trigger('error', model, resp, options);\n\t};\n};\n\nconst ajv = new Ajv({\n\tallErrors: true,\n\tcoerceTypes: true,\n\t$data: true,\n\tmissingRefs: 'ignore',\n\tuseDefaults: 'empty',\n\tnullable: true,\n});\n\n/**\n * Get default values from schema\n * Used to define `this.defaults`\n * @function\n * @param {schema} schema Schema\n * @return {object} Defaults\n */\nconst getDefaultsFromSchema = (schema) => {\n\tconst {properties} = schema;\n\tconst defaults = {};\n\tfor (let key in properties) {\n\t\tif (properties.hasOwnProperty(key)) {\n\t\t\tconst defaultValue = properties[key].default;\n\t\t\tif (typeof defaultValue !== 'undefined') {\n\t\t\t\tdefaults[key] = defaultValue;\n\t\t\t}\n\t\t}\n\t}\n\treturn defaults;\n};\n\nconst BBModel = Backbone.Model;\n// Make a Model we can extend from in other classes\nclass ES6Model {\n\tget schema() {\n\t\treturn this.constructor.Schema;\n\t}\n\n\t/** @override */\n\tconstructor(attrs, opts) {\n\t\tconst schema = this.schema;\n\t\tif (schema) {\n\t\t\t// If we have not explicitely setup our own validation\n\t\t\t// validate via ajv and our provided schema\n\t\t\tif (!this.validate) {\n\t\t\t\tconst ValidateSchema = ajv.compile(schema);\n\t\t\t\tthis.validate = (attrs, opts) => {\n\t\t\t\t\tconst isValid = ValidateSchema(attrs);\n\t\t\t\t\treturn !isValid ? [...ValidateSchema.errors] : false;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Set our defaults based on the schema provided\n\t\t\t// If you are coming from the old backbone stuff and want to use schema and extend from another schema\n\t\t\t// you will need to do that in your schema file and not in the model \"defaults\" getter that we have\n\t\t\t// been using\n\t\t\tObject.defineProperty(this, 'defaults', {\n\t\t\t\tget() {\n\t\t\t\t\treturn getDefaultsFromSchema(schema);\n\t\t\t\t},\n\t\t\t\tconfigurable: false,\n\t\t\t});\n\t\t}\n\n\t\tBBModel.call(this, attrs, opts);\n\n\t\t// Always represent `id` on the model's attributes regardless of what the key actually is\n\t\t// I have yet to find a model that is utilizing a key of id for anything but the id\n\t\t// DEVNOTE: Setting this after call to backbone model as `this.attributes` does not exist until then\n\t\tif (schema && schema.primary !== 'id') {\n\t\t\tObject.defineProperty(this.attributes, 'id', {\n\t\t\t\tget: () => {\n\t\t\t\t\treturn this.id;\n\t\t\t\t},\n\t\t\t\tconfigurable: false,\n\t\t\t});\n\t\t}\n\t}\n}\n// Object.assign(ES6Model.prototype, BBModel.prototype);\n_.extend(ES6Model.prototype, BBModel.prototype);\nBackbone.ES6Model = ES6Model;\n\nclass Model extends ES6Model {\n\t/** @override */\n\tget idAttribute() {\n\t\tconst schema = this.schema;\n\t\t// The backbone way (so that we do not have to do every model at once)\n\t\t// Any model that does not use `id` will already be overriding this getter\n\t\tif (!schema) return 'id';\n\n\t\t// The new schema way\n\t\treturn schema.primary;\n\t}\n\n\t/** @type {boolean} */\n\tget isModel() {\n\t\treturn this.constructor.__isModel__;\n\t}\n\n\t// Whelp\n\t// Need to fix in backbone.rpc - the model get's a property of `syncing`\n\t// whether the call is a syncable (read) or not\n\t// And since our loading indication relies on the `request:read` event and the `sync` event\n\t// we will get false loading positives by checking `this.syncing`\n\t// So, check for the `read` method in our current calls list\n\tget isSyncing() {\n\t\treturn this._rpc && this.syncing && this._rpc.callsByName.read != null;\n\t}\n\n\t/**\n\t * The attribute key to find the model's \"title\"\n\t * @type {string}\n\t */\n\tget titleAttribute() {\n\t\treturn 'title';\n\t}\n\n\tget url() {\n\t\treturn URL.api;\n\t}\n\n\t// TODO: when we have switched all the way over to the schema pattern we can remove this\n\tget defaults() {\n\t\treturn {};\n\t}\n\n\t/** @type {array} */\n\tget clientAttrs() {\n\t\treturn [];\n\t}\n\n\t/** @type {object} */\n\tget xhrLoadedMessages() {\n\t\treturn {};\n\t}\n\n\t/** @type {object} */\n\tget xhrLoadingMessages() {\n\t\treturn {};\n\t}\n\n\t/** @type {object} */\n\tget methods() {\n\t\treturn {};\n\t}\n\n\t/** @type {object} */\n\tget parsers() {\n\t\treturn {};\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} attrs Model attributes\n\t * @param {object} opts Model options\n\t */\n\tconstructor(attrs, opts = {}) {\n\t\tsuper(attrs, opts);\n\n\t\t// Init backbone.rpc if requested:\n\t\tconst rpc = opts.rpc != null ? opts.rpc : this.rpc;\n\t\tif (rpc === true) {\n\t\t\tthis._rpc = new Rpc();\n\t\t}\n\n\t\t/**\n\t\t * When a stored model should expire\n\t\t * Set to true to persist until explicitly deleted\n\t\t * https://github.com/ozantunca/locally\n\t\t * Forever/Milliseconds/TTL\n\t\t * @type {boolean|integer|string}\n\t\t * @default\n\t\t * @see Netx.Collection\n\t\t */\n\t\tthis.storeOptions = {\n\t\t\tpersist: false,\n\t\t};\n\t\t// Store options\n\t\tif (opts && _.isObject(opts.storeOptions)) {\n\t\t\tthis.storeOptions = _.extend({}, this.storeOptions, opts.storeOptions);\n\t\t\tdelete opts.storeOptions;\n\t\t}\n\n\t\t/**\n\t\t * If we defined the object _unsavedChanges on a Netx.Model, that\n\t\t * object will track every change between syncs. This is useful\n\t\t * for tracking unsaved local changes over time.\n\t\t */\n\t\t// On change events, store the changes.\n\t\tthis.listenTo(this, 'change', (model, options) => {\n\t\t\tif (!_.isObject(this._unsavedChanges)) return;\n\t\t\tif (options && options.silent) return;\n\t\t\t_.extend(this._unsavedChanges, model.changedAttributes());\n\t\t});\n\t\t// On sync events, flush the changes.\n\t\tthis.listenTo(this, 'sync', () => {\n\t\t\tthis.syncedOnce = true;\n\t\t\tif (_.isObject(this._unsavedChanges)) {\n\t\t\t\tthis._unsavedChanges = {};\n\t\t\t}\n\t\t});\n\n\t\t//////////////////////////////////////////\n\t\t// HOUSEKEEPING\n\t\t//////////////////////////////////////////\n\n\t\t// Where will store references to the collection we belong to. We use the _listenId and store only that\n\t\t// That way we are not creating any circular references and do not risk making our garbage collection\n\t\t// even more difficult to deal with in regards to our ghost models\n\t\t// On one hand- it is great to see details about the collection the model claims to belong to in cases\n\t\t// where you are not sure why it still belongs to one - but the cost of storing the actual collection\n\t\t// coul be that neither the model nor the collection ever get collected as the model is listening to some\n\t\t// global object and maintiaining a reference to a collection that should have been garbage collected\n\t\t// which then could be referencing other objects that would have otherwise been garbage collected and so on.\n\t\t// this.debugCollections = [];\n\t\tthis.collections = [];\n\t\t// Backbone never really anticipated (on purpose) that models\n\t\t// would create models and listen to other things (not self) (especially global variables like our dispatcher)\n\t\t// Cleanup\n\t\tthis.listenTo(this, 'remove', (model, collection, opts) => {\n\t\t\t// Each model that creates sub models should be listening for remove and then triggering the same on its sub models\n\t\t\t// That way everything gets cleaned up and memory leaks decline\n\t\t\tthis.removeCollectionReference(collection);\n\t\t});\n\t\tthis.listenTo(this, 'add', (model, collection, opts) => {\n\t\t\t// If we are not already storing a reference - store one\n\t\t\tthis.addCollectionReference(collection);\n\t\t});\n\t\t//////////////////////////////////////////\n\t\t// !HOUSEKEEPING\n\t\t//////////////////////////////////////////\n\t}\n\n\t/**\n\t * @method\n\t * @param {string} perm Permission\n\t * @return {boolean} Allowed\n\t */\n\tallows(perm) {\n\t\tif (perm === 'read' || perm === 'r' || perm === 'download') return true;\n\n\t\tvar permitted = this.get('permission');\n\n\t\t// Nothing we can check\n\t\tif (!permitted) return true;\n\n\t\tswitch (perm) {\n\t\t\tcase 'd':\n\t\t\tcase 'delete':\n\t\t\t\treturn permitted === 'delete' || permitted === 'd';\n\t\t\tcase 'modify':\n\t\t\tcase 'w':\n\t\t\tcase 'edit':\n\t\t\tcase 'write':\n\t\t\t\treturn (\n\t\t\t\t\tpermitted === 'delete' ||\n\t\t\t\t\tpermitted === 'write' ||\n\t\t\t\t\tpermitted === 'd' ||\n\t\t\t\t\tpermitted === 'w'\n\t\t\t\t);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * @override\n\t * @param {Netx.Models.BatchJob} Batch job model\n\t */\n\tbatchJobComplete(batchJob) {\n\t\tvar args = batchJob.get('args') || [];\n\t\tthis.trigger.apply(this, ['complete', this, batchJob].concat(args));\n\t}\n\t/**\n\t * @override\n\t * @param {Netx.Models.BatchJob} Batch job model\n\t * @param {string} error Error\n\t */\n\tbatchJobError(batchJob, error) {\n\t\tvar args = batchJob.get('args') || [];\n\t\tthis.trigger.apply(this, ['error', this, error].concat(args));\n\t}\n\t/**\n\t * @override\n\t * @param {Netx.Models.BatchJob} Batch job model\n\t * @param {number} progress Progress\n\t */\n\tbatchJobProgress(batchJob, progress) {\n\t\tvar args = batchJob.get('args') || [];\n\t\tthis.trigger.apply(\n\t\t\tthis,\n\t\t\t['progress', this, batchJob, progress].concat(args),\n\t\t);\n\t}\n\n\t/**\n\t * There is a fun labels game we play with some of our objects; particularly users\n\t * We need to get our labels on the same page as what we might get from an autolookup\n\t * This method allows less than ideal models to modify how this label is gathered\n\t * @method\n\t * @return {string} Atuocomplete label\n\t */\n\tgetAutocompleteLabel() {\n\t\treturn this.getLabel();\n\t}\n\n\t/**\n\t * @method\n\t * @param {string} method Method name\n\t */\n\tgetRestLoadedMessage(method) {\n\t\tvar messages = this.xhrLoadedMessages || {};\n\t\treturn messages[method];\n\t}\n\t/**\n\t * @method\n\t * @param {string} method Method name\n\t */\n\tgetRestLoadingMessage(method) {\n\t\tvar messages = this.xhrLoadingMessages || {};\n\t\treturn messages[method];\n\t}\n\n\t/**\n\t * this.self() returns just the attributes of a model that are reflected in the DAM;\n\t * it is used in method definitions to omit model attributes that should *not* be\n\t * synced. We use it for cases where the data is structured differently in the\n\t * model than on the wire, and for models that want to have additional attributes\n\t * for local-only reasons.\n\t *\n\t * The default implementation removes any/all client-only attributes defined in the optional array property this.clientAttrs,\n\t * and aggregates ny/all attributes defined in the optional array property this.gooAttrs\n\t * into a single attribute called 'goo'. If neither of those optional properties\n\t * is defined, this.self() returns all model attributes.\n\t * @return {object}\n\t * @method\n\t */\n\tself() {\n\t\t// If we have goo attrs, this will pack them. Otherwise it will return a clone of this.attributes.\n\t\tlet attrs = this.packAttrs();\n\n\t\tconst schema = this.schema;\n\t\t// If we have client-only attrs, omit them.\n\t\t// The new schema way\n\t\tif (schema) {\n\t\t\tattrs = _.omit(attrs, schema.clientSide);\n\t\t}\n\t\t// The old way\n\t\telse if (this.clientAttrs) {\n\t\t\tattrs = _.omit(attrs, this.clientAttrs);\n\t\t}\n\t\t// Cloning so we don't accidentally modify model properties while preparing attributes to be sent to RPC methods\n\t\treturn _.clone(attrs);\n\t}\n\n\t/**\n\t * this.packAttrs(), given an attributes object (usually this.attributes), returns the JSON string\n\t * representation of any/all model properties listed in this.gooAttrs.\n\t * It's used by this.self, when converting from the client-side to the server-side representation.\n\t * @param {string} goo an attributes object. If undefined, this.attributes is used.\n\t * @return {string}\n\t * @method\n\t */\n\tpackAttrs(ungooeyObj) {\n\t\tungooeyObj = ungooeyObj || this.attributes;\n\t\tif (this.gooAttrs) {\n\t\t\tvar clientGoo = JSON.stringify(_.pick(ungooeyObj, this.gooAttrs));\n\n\t\t\t// HACK around bugs in the DAM JSON parser: triple-escape escaped quotes!\n\t\t\tvar serverGoo = clientGoo.replace(/\"/g, '\\\\\"');\n\n\t\t\treturn _.extend({}, _.omit(ungooeyObj, this.gooAttrs), {goo: serverGoo});\n\t\t} else {\n\t\t\treturn ungooeyObj;\n\t\t}\n\t}\n\n\t/**\n\t * this.unpackAttrs(), given an object with packed goo, returns an unpacked version.\n\t * It's used by parsers converting from server-side to client-side representations.\n\t * @param {object} gooeyObj the goo-encoded object\n\t * @return {object} the goo-decoded version.\n\t */\n\tunpackAttrs(gooeyObj) {\n\t\tif (!(this.gooAttrs && gooeyObj && gooeyObj.goo)) {\n\t\t\t// do nothing if model defines no goo.\n\t\t\treturn gooeyObj;\n\t\t}\n\n\t\tvar serverGoo = gooeyObj.goo;\n\t\t// HACK around bugs in the DAM JSON parser: unescape triple-escaped quotes!\n\t\tvar clientGoo = serverGoo.replace(/\\\\\"/g, '\"');\n\n\t\t// with _.omit, delete the goo key\n\t\treturn _.omit(\n\t\t\t_.extend(\n\t\t\t\t{},\n\t\t\t\tgooeyObj,\n\t\t\t\t// with _.pick, only allow goo we've defined in .gooAttrs!\n\t\t\t\t_.pick(JSON.parse(clientGoo), this.gooAttrs),\n\t\t\t),\n\t\t\t'goo',\n\t\t);\n\t}\n\n\t/**\n\t * Overriding because we expect to get back a promise\n\t * when validation or an error in set occurs backbone just returns false\n\t * @override\n\t */\n\tsave(key, val, options) {\n\t\t// Handle both `\"key\", value` and `{key: value}` -style arguments.\n\t\tvar attrs;\n\t\tif (key == null || typeof key === 'object') {\n\t\t\tattrs = key;\n\t\t\toptions = val;\n\t\t} else {\n\t\t\t(attrs = {})[key] = val;\n\t\t}\n\n\t\toptions = _.extend({validate: true, parse: true}, options);\n\t\tvar wait = options.wait;\n\n\t\t// If we're not waiting and attributes exist, save acts as\n\t\t// `set(attr).save(null, opts)` with validation. Otherwise, check if\n\t\t// the model will be valid when the attributes, if any, are set.\n\t\tif (attrs && !wait) {\n\t\t\tif (!this.set(attrs, options)) {\n\t\t\t\tconst error = new Error(`Error setting data`);\n\t\t\t\treturn new $.Deferred().reject(error);\n\t\t\t\t// return false;\n\t\t\t}\n\t\t} else if (!this._validate(attrs, options)) {\n\t\t\tconst error = new Error(`Validation error`);\n\t\t\terror.details = this.validationError;\n\t\t\treturn new $.Deferred().reject(error);\n\t\t\t// return false;\n\t\t}\n\n\t\t// After a successful server-side save, the client is (optionally)\n\t\t// updated with the server-side state.\n\t\tvar model = this;\n\t\tvar success = options.success;\n\t\tvar attributes = this.attributes;\n\t\toptions.success = function (resp) {\n\t\t\t// Ensure attributes are restored during synchronous saves.\n\t\t\tmodel.attributes = attributes;\n\t\t\tvar serverAttrs = options.parse ? model.parse(resp, options) : resp;\n\t\t\tif (wait) serverAttrs = _.extend({}, attrs, serverAttrs);\n\t\t\tif (serverAttrs && !model.set(serverAttrs, options)) return false;\n\t\t\tif (success) success.call(options.context, model, resp, options);\n\t\t\tmodel.trigger('sync', model, resp, options);\n\t\t};\n\t\twrapError(this, options);\n\n\t\t// Set temporary attributes if `{wait: true}` to properly find new ids.\n\t\tif (attrs && wait) this.attributes = _.extend({}, attributes, attrs);\n\n\t\tvar method = this.isNew() ? 'create' : options.patch ? 'patch' : 'update';\n\t\tif (method === 'patch' && !options.attrs) options.attrs = attrs;\n\t\tvar xhr = this.sync(method, this, options);\n\n\t\t// Restore attributes.\n\t\tthis.attributes = attributes;\n\n\t\treturn xhr;\n\t}\n\n\t/**\n\t * Keep track of any models or collections that may be attributes on the model\n\t * @override\n\t */\n\tset(key, val, options) {\n\t\tif (_.isObject(key)) {\n\t\t\t_.each(\n\t\t\t\tkey,\n\t\t\t\tfunction (v, k) {\n\t\t\t\t\tif (!v) return;\n\n\t\t\t\t\tif (v instanceof this.constructor) {\n\t\t\t\t\t\tthis.addSubModel(v);\n\t\t\t\t\t} else if (v && v.isModel) {\n\t\t\t\t\t\tthis.addSubCollection(v);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tthis,\n\t\t\t);\n\t\t} else if (val) {\n\t\t\tif (val instanceof this.constructor) {\n\t\t\t\tthis.addSubModel(val);\n\t\t\t} else if (val.isCollection) {\n\t\t\t\tthis.addSubCollection(val);\n\t\t\t}\n\t\t}\n\n\t\treturn super.set(key, val, options);\n\t}\n\n\t/**\n\t * @method\n\t * @return {object} Defaults\n\t */\n\tgetDefaults() {\n\t\treturn this.constructor.GetDefaults();\n\t}\n\n\t/**\n\t * @method\n\t * @return {number}\n\t */\n\tgetIndex() {\n\t\treturn this.collection ? this.collection.indexOf(this) : -1;\n\t}\n\n\t/**\n\t * A general-purpose function for getting a UI-compliant label for an object.\n\t * This function can & should be overridden in all child classes.\n\t * @method\n\t * @return {string} Label (title)\n\t */\n\tgetLabel() {\n\t\treturn this.get(this.titleAttribute);\n\t}\n\n\t/**\n\t * Object Polling:\n\t * pollUntil() tells any model/collection to do something repeatedly until a conditional test passes,\n\t * emitting appropriate events along the way. Use this to follow DAM changes to certain object properties,\n\t * or to check status until a status change.\n\t *\n\t * @param {function} doneTest A function that returns true if polling should finish. (Required)\n\t * @param {string} eventPrefix Event string prefix for polling events. If undefined, no events are triggered.\n\t * @param {function} pollMethod A function that causes a poll. Must return a promise. Defaults to this.fetch;\n\t * @param {number} pollInterval Milliseconds between polls. Defaults to 500.\n\t * @param {object} pollMethodOptions Options to pass to the RPC method\n\t * @method\n\t * @todo convert params to a single object so that we can add/remove options without needing to modify every piece of code that utilizes this method\n\t * (you know, unless they NEED to be updated)\n\t */\n\tpollUntil(\n\t\tdoneTest,\n\t\teventPrefix,\n\t\tpollMethod,\n\t\tpollInterval,\n\t\tpollMethodOptions,\n\t) {\n\t\t// Vars\n\t\tvar d = new $.Deferred(),\n\t\t\tself = this;\n\n\t\tif (!_.isFunction(doneTest)) {\n\t\t\tthrow new Error('pollUntil: doneTest argument is not a function.');\n\t\t}\n\n\t\tpollMethodOptions = pollMethodOptions || {};\n\t\tpollInterval = pollInterval || 500; // ms\n\n\t\tpollMethod =\n\t\t\tpollMethod ||\n\t\t\tfunction () {\n\t\t\t\tif (_.isFunction(self.fetch)) return self.fetch(pollMethodOptions);\n\t\t\t\tthrow new Error('default poll method (fetch) not defined.');\n\t\t\t};\n\n\t\tif (this._polling) {\n\t\t\t// We are already polling.\n\t\t\tconsole.warn('This instance is already polling');\n\t\t\treturn this._polling.promise();\n\t\t}\n\n\t\t// Method for when we're finished:\n\t\tvar finished = function () {\n\t\t\tself._polling.resolveWith(self);\n\t\t\tif (eventPrefix) {\n\t\t\t\tdispatcher.trigger.apply(\n\t\t\t\t\tdispatcher,\n\t\t\t\t\t[\n\t\t\t\t\t\teventPrefix +\n\t\t\t\t\t\t\t(self._stopPolling ? ':stoppedPolling' : ':donePolling'),\n\t\t\t\t\t].concat(_.toArray(arguments)),\n\t\t\t\t);\n\t\t\t}\n\t\t\tdelete self._polling;\n\t\t\tdelete self._pausedPolling;\n\t\t\tdelete self._stopPolling;\n\t\t};\n\n\t\ttry {\n\t\t\t// Pass undefined so that we may differentiate between the first test and the rest\n\t\t\tif (doneTest.apply(this, [undefined])) {\n\t\t\t\t// We don't even need to poll.\n\t\t\t\tfinished();\n\t\t\t\treturn d.promise();\n\t\t\t}\n\t\t} catch (ex) {\n\t\t\t// doneTest() might fail without proper arguments. If so, assume that means 'false'.\n\t\t\t// That means we're going to have to poll at least once in order to perform this test.\n\t\t}\n\n\t\tvar loop = function () {\n\t\t\tif (self._pausedPolling) {\n\t\t\t\t_.delay(loop, pollInterval);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tpollMethod.call(self, pollMethodOptions).then(\n\t\t\t\tfunction (response) {\n\t\t\t\t\t// For those cases that the server sends an error as a success\n\t\t\t\t\tif (_.isObject(response) && response.error) {\n\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t'Server sent error as success. \\nModule :',\n\t\t\t\t\t\t\tself.module,\n\t\t\t\t\t\t\t'\\nModel :',\n\t\t\t\t\t\t\tself,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn d.reject(\n\t\t\t\t\t\t\tnew Error(response.error.message || response.error),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (eventPrefix) {\n\t\t\t\t\t\tdispatcher.trigger.apply(\n\t\t\t\t\t\t\tdispatcher,\n\t\t\t\t\t\t\t[eventPrefix + ':polled'].concat(_.toArray(arguments)),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (this._stopPolling || doneTest.apply(self, arguments)) {\n\t\t\t\t\t\t// Done!\n\t\t\t\t\t\tfinished.apply(self, arguments);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_.delay(loop, pollInterval);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t},\n\t\t\t\tfunction (err) {\n\t\t\t\t\tif (self._pausedPolling) {\n\t\t\t\t\t\t_.delay(loop, pollInterval);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\td.reject(err);\n\t\t\t\t\tif (eventPrefix) {\n\t\t\t\t\t\tdispatcher.trigger.apply(\n\t\t\t\t\t\t\tdispatcher,\n\t\t\t\t\t\t\t[eventPrefix + ':errorPolling', err.message].concat(\n\t\t\t\t\t\t\t\t_.toArray(arguments),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t); // use instead (becuase verbs are better?)\n\t\t\t\t\t\t// This would be nicer & more right:\n\t\t\t\t\t\t// dispatcher.applyTrigger( eventPrefix + ':errorPolling', arguments);\n\t\t\t\t\t}\n\t\t\t\t\tdelete this._polling;\n\t\t\t\t\tdelete this._pausedPolling;\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\n\t\t// Save the deferred as this._polling, to show we're polling.\n\t\tthis._polling = d;\n\t\tif (eventPrefix) {\n\t\t\tdispatcher.trigger.apply(\n\t\t\t\tdispatcher,\n\t\t\t\t[eventPrefix + ':startedPolling'].concat(_.toArray(arguments)),\n\t\t\t);\n\t\t}\n\t\tloop();\n\n\t\treturn this._polling.promise();\n\t}\n\n\tpausePolling() {\n\t\tif (this._polling) {\n\t\t\tthis._pausedPolling = true;\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tresumePolling() {\n\t\tif (this._polling) {\n\t\t\tthis._pausedPolling = false;\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * stopPolling() halts any poll loop currently in process.\n\t */\n\tstopPolling() {\n\t\tif (this._polling) {\n\t\t\tthis._stopPolling = true;\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * @method\n\t * @param {string} uuid UUID\n\t * @param {array} args Arguments\n\t * @return {Netx.Models.BatchJob}\n\t * @fires module:app#app:pollBatchJob\n\t */\n\ttrackBatchJob(uuid, args, pollInterval) {\n\t\t// Poll\n\t\tvar batchJob = Netx.batchJobs.get(uuid);\n\t\tif (!batchJob) {\n\t\t\tdispatcher.trigger(\n\t\t\t\t'app:pollBatchJob',\n\t\t\t\tuuid,\n\t\t\t\tnull,\n\t\t\t\tfalse,\n\t\t\t\targs,\n\t\t\t\tpollInterval,\n\t\t\t);\n\t\t\tbatchJob = Netx.batchJobs.get(uuid);\n\t\t}\n\t\tif (batchJob) {\n\t\t\tthis.listenToOnce(batchJob, 'complete', function (batchJob) {\n\t\t\t\tthis.stopListening(batchJob);\n\t\t\t\tthis.batchJobComplete(batchJob);\n\t\t\t});\n\t\t\tthis.listenToOnce(batchJob, 'error', function (batchJob, error) {\n\t\t\t\tthis.stopListening(batchJob);\n\t\t\t\tthis.batchJobError(batchJob, error);\n\t\t\t});\n\t\t\tthis.listenTo(\n\t\t\t\tbatchJob,\n\t\t\t\t'change:percentComplete',\n\t\t\t\tfunction (batchJob, progress) {\n\t\t\t\t\tthis.batchJobProgress(batchJob, progress);\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t\treturn batchJob;\n\t}\n\n\t/**\n\t * A scoped version of jQuery.when(), that always uses 'this' as the context for the promise it returns.\n\t * It's also able to accept an array of promises, so we don't need to use .apply to make it go.\n\t */\n\twhen() {\n\t\t// Vars\n\t\tvar d = new $.Deferred(),\n\t\t\tself = this,\n\t\t\tresolve = function () {\n\t\t\t\td.resolveWith(self, arguments);\n\t\t\t},\n\t\t\treject = function () {\n\t\t\t\td.rejectWith(self, arguments);\n\t\t\t},\n\t\t\tprogress = function () {\n\t\t\t\td.notifyWith(self, arguments);\n\t\t\t};\n\n\t\t// If the first argument is an array of promises, we ignore the others.\n\t\tvar arg0 = _.first(arguments);\n\t\tif (_.isArray(arg0) && arg0.length > 0) {\n\t\t\t$.when.apply($, arg0).then(resolve, reject, progress);\n\t\t} else {\n\t\t\t$.when.apply($, arguments).then(resolve, reject, progress);\n\t\t}\n\n\t\treturn d.promise();\n\t}\n\n\t//////////////////////////////////////////\n\t// HOUSEKEEPING\n\t//////////////////////////////////////////\n\t/**\n\t * Keep track of the collections I belong to\n\t * @method\n\t * @param {Netx.Collection} collection Collection\n\t */\n\taddCollectionReference(collection) {\n\t\tif (collection && this.collections) {\n\t\t\tif (_.indexOf(this.collections, collection._listenId) < 0) {\n\t\t\t\tif (!collection._listenId) return;\n\t\t\t\tthis.collections.push(collection._listenId);\n\t\t\t\t// this.debugCollections[ collection._listenId ] = collection;\n\t\t\t}\n\t\t}\n\t}\n\t/**\n\t * Keep track of the collections I belong to\n\t * @method\n\t * @param {Netx.Collection} collection Collection\n\t */\n\tremoveCollectionReference(collection) {\n\t\tif (this.collections) {\n\t\t\tif (collection) {\n\t\t\t\tvar idx = _.indexOf(this.collections, collection._listenId);\n\t\t\t\tif (idx > -1) {\n\t\t\t\t\tthis.collections.splice(idx, 1);\n\t\t\t\t\t// delete this.debugCollections[ collection._listenId ];\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Give it time and see if we may have been added to another collection before checking length\n\t\t\t_.defer(\n\t\t\t\t_.bind(function () {\n\t\t\t\t\tif (!this.collections.length) {\n\t\t\t\t\t\tthis.garbageCollect();\n\t\t\t\t\t}\n\t\t\t\t}, this),\n\t\t\t);\n\t\t}\n\t}\n\t/**\n\t * Call this when manually adding a sub collection\n\t * @method\n\t * @param {Netx.Collection} collection Collection to track\n\t */\n\taddSubCollection(collection) {\n\t\tif (collection) {\n\t\t\tif (!_.isObject(this.subCollections)) this.subCollections = {};\n\t\t\t// In very rare situations some collections do not have their _listenId yet\n\t\t\t// Defer seems to solve it and I cannot recreate any further\n\t\t\t_.defer(\n\t\t\t\t_.bind(function () {\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis.subCollections &&\n\t\t\t\t\t\t_.isUndefined(this.subCollections[collection._listenId])\n\t\t\t\t\t) {\n\t\t\t\t\t\tthis.subCollections[collection._listenId] = collection;\n\t\t\t\t\t}\n\t\t\t\t}, this),\n\t\t\t);\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t * Call this when manually removing a sub collection\n\t * @method\n\t * @param {Netx.Collection} collection Collection to cleanup\n\t */\n\tremoveSubCollection(collection) {\n\t\tif (\n\t\t\tcollection &&\n\t\t\tcollection._listenId &&\n\t\t\t!_.isUndefined(this.subCollections[collection._listenId])\n\t\t) {\n\t\t\tcollection.garbageCollect();\n\t\t\tdelete this.subCollections[collection._listenId];\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t * Call this when manually adding a sub model\n\t * @method\n\t * @param {Netx.Model} model Model to track\n\t */\n\taddSubModel(model) {\n\t\tif (!_.isObject(this.subModels)) this.subModels = {};\n\t\tif (_.isUndefined(this.subModels[model._listenId])) {\n\t\t\tthis.subModels[model._listenId] = model;\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t * Call this when manually removing a sub model\n\t * @method\n\t * @param {Netx.Model} model Model to cleanup\n\t */\n\tremoveSubModel(model) {\n\t\tif (\n\t\t\tmodel &&\n\t\t\tmodel._listenId &&\n\t\t\t!_.isUndefined(this.subModels[model._listenId])\n\t\t) {\n\t\t\t// Hotfix for DAM-6402 -- revisit in 8.6 . This solves a mistaken assumption about references,\n\t\t\t// but it un-solves a memory leak ...\n\t\t\t// model.trigger('remove', model, null, null);\n\t\t\tdelete this.subModels[model._listenId];\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Subscribe to websocket\n\t * @method\n\t */\n\tsubscribe() {\n\t\tif (!this.socket) {\n\t\t\tif (this.roomName == null) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'`this.roomName` is not set. Cannot subscribe to websocket channel.',\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tvar socket = (this.socket = Netx.websocket);\n\t\t\tthis.listenTo(\n\t\t\t\tsocket,\n\t\t\t\t'socket:message:' + this.roomName,\n\t\t\t\tthis.subscriptionMessage,\n\t\t\t);\n\t\t\tsocket.subscribe(this.roomName);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Message received from websocket channel\n\t * @method\n\t * @param {object} data Message data\n\t */\n\tsubscriptionMessage(data) {\n\t\tswitch (data.action) {\n\t\t\tcase 'edit':\n\t\t\t\tthis.set(data.dto);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/**\n\t * Unsubscribe from websocket\n\t * @method\n\t */\n\tunsubscribe() {\n\t\tif (this.socket) {\n\t\t\tif (this.roomName == null) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'`this.roomName` is not set. Cannot unsubscribe from websocket channel.',\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.socket.unsubscribe(this.roomName);\n\t\t\tthis.stopListening(this.socket);\n\t\t\tthis.socket = false;\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Severs all ties to the world so it can be eligible for garbage collection\n\t * @method\n\t */\n\tgarbageCollect() {\n\t\tthis._rpc && this._rpc.garbageCollect();\n\n\t\t// Let go of any websocket channels\n\t\tthis.unsubscribe();\n\t\t// Let go of event listeners\n\t\tthis.stopListening().off();\n\t\tthis.clear();\n\n\t\t// Loop over sub models and trigger their cleanup\n\t\tif (_.isObject(this.subModels)) {\n\t\t\t// Hotfix for DAM-6402 -- ditto to above.\n\t\t\t// _.each( this.subModels, function( m ) {\n\t\t\t// \tm.trigger('remove', m, null, null);\n\t\t\t// } );\n\t\t\tdelete this.subModels;\n\t\t}\n\t\t// Loop over sub collection and trigger their cleanup\n\t\tif (_.isObject(this.subCollections)) {\n\t\t\t_.each(this.subCollections, function (c) {\n\t\t\t\tc.garbageCollect();\n\t\t\t});\n\t\t\tdelete this.subCollections;\n\t\t}\n\n\t\tthis.garbageCollected = true;\n\n\t\treturn this;\n\t}\n\t/**\n\t * Backbone.Model.destroy() returns false -- not a promise -- if the model is new;\n\t * it presumes the server doesn't have the model, and doesn't need to be contacted.\n\t *\n\t * That's reasonable ... but every other sync method always returns a promise,\n\t * and we've written all our code presuming destroy() always returns a promise,\n\t * so at this point we're making it Netx policy that Netx.Model.destroy()\n\t * _always_ returns a promise.\n\t *\n\t * @param {objct} opts sync args\n\t * @returns {Promise}\n\t */\n\tdestroy(opts) {\n\t\tconst retVal = super.destroy(opts);\n\t\tif (!_.isPromise(retVal)) {\n\t\t\treturn this.when(); // a pre-resolved promise with correct context.\n\t\t} else {\n\t\t\treturn retVal;\n\t\t}\n\t}\n\t//////////////////////////////////////////\n\t// !HOUSEKEEPING\n\t//////////////////////////////////////////\n\n\t/**\n\t * Our defaults could be an object or a function that returns an object\n\t * Do not make others figure this out everytime the defaults are neeeded\n\t * @method\n\t * @return {object} Model defaults (cloned so you do not risk polluting the prototype)\n\t */\n\tstatic GetDefaults() {\n\t\tif (!this.Schema) return this.prototype.defaults;\n\t\treturn getDefaultsFromSchema(this.Schema);\n\t}\n\n\t/**\n\t * The attribute key to find the model's \"title\"\n\t * @type {string}\n\t */\n\tstatic get TitleAttribute() {\n\t\treturn this.prototype.titleAttribute;\n\t}\n\n\t/**\n\t * Netx.Model.*.Load() (experimental) takes a unique ID and converts into a server populated model instance.\n\t * It returns a promise for the eventual object.\n\t * @param {number} id Id that corresponds to the model's idAttribute.\n\t * @todo Load() would be handy for a wide variety of collections.\n\t * To get it to all of them we'd need to add the Load class method to Netx.Collection.\n\t */\n\tstatic Load(id) {\n\t\t// Setting the idAttribute on instantiation does not work in Backbone.\n\t\t// So we must explicitly set idAttribute after the instance has been created\n\t\tconst a = new this();\n\t\tconst idAttr = this.prototype.idAttribute || 'id';\n\n\t\treturn a\n\t\t\t.set(idAttr, id)\n\t\t\t.fetch()\n\t\t\t.then(() => {\n\t\t\t\treturn a;\n\t\t\t});\n\t}\n\n\t/**\n\t * @method\n\t * @param {schema} schema Schema\n\t */\n\tstatic SetSchema(schema) {\n\t\tObject.defineProperty(this, 'Schema', {\n\t\t\tvalue: protectObjectProxy(schema),\n\t\t\tconfigurable: false,\n\t\t\twritable: false,\n\t\t});\n\t}\n\n\t/** @type {boolean} */\n\tstatic get __isModel__() {\n\t\treturn true;\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'Model';\n\t}\n}\n\nexport default Model;\n","/**\n * Netx.Routers.App is the class of our sole router instance, Netx.router\n * @class\n * @param {object} opts Options\n * @extends Backbone.ES6Router\n * @todo: This is an interesting idea\n * http://stackoverflow.com/questions/25806608/how-to-detect-browser-back-button-event-cross-browser\n */\nimport Backbone from 'backbone';\nimport _ from 'underscore';\nimport {session} from '@netx/core-auth/collections/singleton/session';\nimport coreConfig from '@netx/core-next/config';\nimport {dispatcher} from '@netx/core-next/instance/dispatcher';\nimport {escapeURI} from '@netx/core/utils/escapeURI';\nimport {unescapeURI} from '@netx/core/utils/unescapeURI';\n\n// base64 search routes, good times! ¯\\_(ツ)_/¯\n// we need to unescape and then re-escape since things get escaped automagically\n// by either the browser, backbone, or the two\n// note: need to trim and re-add the base route as that will get mangled in an escape\nconst BASE64_ROUTES_BASES = ['search/attribute/history/', 'search/advanced/'];\nconst routeIsBase64 = (route) =>\n\tBASE64_ROUTES_BASES.find((base) => route.includes(base));\nconst correctBase64RouteIfNeeded = (route) => {\n\tconst base = routeIsBase64(route);\n\tif (!base) return route;\n\treturn base + escapeURI(unescapeURI(route.replace(base, '')));\n};\n\n/**\n * Only the most recent interceptor will be used. The reason for allowing the setting this\n * way is to try and prevent one view creating while another is removing, and the removing one\n * removed its interceptor\n */\nconst routeInterceptors = new Map();\n\n/*****************\n * NetX extensions to Backbone.History:\n *\n * Certain parts of X7 need to know whether they're being executed in the context\n * of a route change. Backbone.History.isRouting() returns the boolean value of a flag\n * that is set when Backbone.History.loadUrl() begins, and cleared when it ends.\n *\n */\nconst History = Backbone.History;\nHistory.prototype.loadUrl = _.wrap(\n\tHistory.prototype.loadUrl,\n\tfunction (loadUrl) {\n\t\tthis._isRouting = true;\n\t\tvar args = _.rest(arguments);\n\t\tvar ret = loadUrl.apply(this, args);\n\t\tdelete this._isRouting;\n\t\treturn ret;\n\t},\n);\n\nHistory.prototype.isRouting = function () {\n\treturn this._isRouting || false;\n};\n\nconst Router = Backbone.Router;\nclass ES6Router {\n\t/** @override */\n\tconstructor(opts) {\n\t\tRouter.apply(this, arguments);\n\t}\n}\n_.extend(ES6Router.prototype, Router.prototype);\nBackbone.ES6Router = ES6Router;\n\nclass AppRouter extends ES6Router {\n\tready = false;\n\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\tsuper(opts);\n\n\t\t/** @type {array} */\n\t\tthis.history = [];\n\n\t\t/**\n\t\t * @type {number}\n\t\t * @default\n\t\t */\n\t\tthis.size = opts.size || 50;\n\n\t\tthis.listenTo(this, 'route', this.routeChanged);\n\t\t// listen for route paging from pager.js\n\t\tthis.listenTo(dispatcher, 'router:page', (page, routeContext) => {\n\t\t\tlet {hash} = window.location;\n\t\t\t// We need to escape things like `'` (%27) and ` ` (%20)\n\t\t\t// Our `routeContext` encodes, but only some things are encoded in the route by backbone, like spaces,\n\t\t\t// where things like apostrophes are not encoded by backbone ¯\\_(ツ)_/¯\n\t\t\tif (!unescapeURI(hash).includes(unescapeURI(routeContext))) return;\n\n\t\t\tif (!routeIsBase64(routeContext)) {\n\t\t\t\t// We have to handle this a bit specially - see the wonderful search controller\n\t\t\t\thash = hash.replace(/ /g, '%20');\n\t\t\t}\n\n\t\t\t// see notes about function\n\t\t\trouteContext = correctBase64RouteIfNeeded(routeContext);\n\n\t\t\tlet pageRoute = `/page/${page}`;\n\n\t\t\t// Do not specify a page in the hash if one was not specified already\n\t\t\t// (can end up in a loop if you use the browser's back button)\n\t\t\tif (page === 1 && !/page\\/\\d/.test(hash)) {\n\t\t\t\tpageRoute = '';\n\t\t\t}\n\n\t\t\tthis.navigate(`${routeContext}${pageRoute}`, true);\n\t\t});\n\n\t\t// USE RESPONSIBLY\n\t\t// Currently, \"routed\" only gets dispatched when {trigger:false} is not set.\n\t\t// This code is for skins, etc that have pieces that would like to know when the route changes\n\t\t// whether or not it was silenced.\n\t\t// A good example:\n\t\t// When you run a search and then navigate into an asset detail view- when done you close the detail\n\t\t// view and return to your search results... Rather than running the search over again we put the\n\t\t// search string back into the hash and silence the change.\n\t\t// @fires 'hash:changed' and provides newHash and oldHash (if you are into that sort of thing)\n\n\t\t// In IE originalEvent.newURL and originalEvent.oldURL are not a thing. We will fake it.\n\t\tif (_.isUndefined(this.oldHash)) {\n\t\t\tthis.oldHash = window.location.hash ? window.location.hash : '';\n\t\t}\n\t\t$(window).on('hashchange.router', (e) => {\n\t\t\tconst newHash = window.location.hash;\n\t\t\tdispatcher.trigger(\n\t\t\t\t'hash:changed',\n\t\t\t\tnewHash,\n\t\t\t\tthis.oldHash ? this.oldHash : '',\n\t\t\t);\n\t\t\tthis.oldHash = newHash;\n\t\t});\n\t}\n\n\t/**\n\t * Add route interceptor\n\t * Note: Only the most recent interceptor will be used. The reason for allowing the setting this\n\t * way is to try and prevent one view creating while another is removing, and the removing one\n\t * removed its interceptor\n\t * @param {string} key\n\t * @param {Function} func\n\t */\n\taddRouteInterceptor(key, func) {\n\t\trouteInterceptors.set(key, func);\n\t}\n\n\t/**\n\t * Remove route interceptor\n\t * @param {string} key\n\t * @param {Function} func\n\t */\n\tremoveRouteInterceptor(key) {\n\t\trouteInterceptors.delete(key);\n\t}\n\n\t/**\n\t * Rewind the route one step. Just like window.history.back(), except it also manages our\n\t * local history cache.\n\t *\n\t * WARNING: intersecting back() with push()/pop() can lead to unknown, probably-wrong behavior.\n\t * @param {object} opts Options\n\t */\n\tback(opts = {}) {\n\t\tif (this.history.length > 1) {\n\t\t\twindow.history.back();\n\t\t} else {\n\t\t\tthis.home(opts);\n\t\t}\n\t}\n\n\t/**\n\t * @param {string} page Page\n\t */\n\t// TODO: provide a proper 404 error here.\n\tdefaultRoute(page) {\n\t\tconsole.warn('The page you are trying to reach: %s, does not exist.', page);\n\t}\n\n\t/**\n\t * @method\n\t * @param {string} route Route event (or route if ananymous function was used)\n\t */\n\trouteChanged(route) {\n\t\t// TODO: This is a band-aid until we can get some finer\n\t\t// control over our routes (white listing etc)\n\t\tconst validUnauthenticatedRoutes = [\n\t\t\t'auth:user:login',\n\t\t\t'auth:user:register:approvalNeeded',\n\t\t\t'auth:user:register',\n\t\t\t'auth:user:password:reset',\n\t\t\t'auth:user:password:change',\n\t\t\t'auth:user:sessionKey',\n\t\t\t// share request bundle will handle invalid token messaging\n\t\t\t'share:request',\n\t\t];\n\t\tif (\n\t\t\tsession.requiresLogin() &&\n\t\t\t!session.authenticated() &&\n\t\t\t!_.contains(validUnauthenticatedRoutes, route)\n\t\t) {\n\t\t\t// If empty route send them to the login page\n\t\t\tif (route === '') {\n\t\t\t\tdispatcher.trigger('auth:session:invalid');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn window.location.reload();\n\t\t}\n\n\t\t// Maintains routing history. Keeps up to the value of 'this.size' in history.\n\t\t// Accessible from the history object where index 0 is the current route\n\t\tif (this.history.length >= this.size) {\n\t\t\tthis.history.pop();\n\t\t}\n\n\t\tconst oldRoute = this.history[0];\n\t\tif (Backbone.history.fragment != history[0]) {\n\t\t\tthis.history.unshift(Backbone.history.fragment);\n\t\t}\n\n\t\t// Triggers a decoupled 'routed' event that view instances can listen to\n\t\t// to perform custom tasks. Ex. Netx.views.assetDetailView listens to the\n\t\t// dispatcher for the 'routed' event and pauses the video player.\n\t\tdispatcher.trigger('routed', Backbone.history.fragment, oldRoute);\n\t}\n\n\t/**\n\t * Support promises\n\t * @override\n\t * @param {string} route Route\n\t * @param {string} name Route name\n\t * @param {function} callback Route collback\n\t */\n\troute(route, name, callback) {\n\t\tif (!_.isRegExp(route)) {\n\t\t\troute = this._routeToRegExp(route);\n\t\t}\n\t\tif (_.isFunction(name)) {\n\t\t\tcallback = name;\n\t\t\tname = '';\n\t\t}\n\t\tif (!callback) {\n\t\t\tcallback = this[name];\n\t\t}\n\n\t\tBackbone.history.route(route, (fragment) => {\n\t\t\tconst args = this._extractParameters(route, fragment);\n\n\t\t\tconst _route = () => {\n\t\t\t\t// Strip trailing lone slash `asset/3/` -> `asset/3`\n\t\t\t\tif (fragment.length - 1 === fragment.lastIndexOf('/')) {\n\t\t\t\t\tfragment = fragment.substr(0, fragment.length - 1);\n\t\t\t\t\twindow.location.hash = `#${fragment}`;\n\t\t\t\t}\n\n\t\t\t\tconst ret = this.execute(callback, args, name);\n\n\t\t\t\t// Execute route\n\t\t\t\tconst executeRoute = () => {\n\t\t\t\t\tthis.trigger.apply(this, [`route:${name}`].concat(args));\n\t\t\t\t\tthis.trigger('route', name, args);\n\t\t\t\t\tBackbone.history.trigger('route', this, name, args);\n\t\t\t\t};\n\n\t\t\t\tif (!_.isPromise(ret)) {\n\t\t\t\t\tret !== false && executeRoute();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tret.then((execute) => {\n\t\t\t\t\texecute !== false && executeRoute();\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tif (routeInterceptors.size) {\n\t\t\t\t// See note on `routeInterceptors`\n\t\t\t\trouteInterceptors.get(\n\t\t\t\t\tArray.from(routeInterceptors.keys())[routeInterceptors.size - 1],\n\t\t\t\t)(_route, fragment, name, args);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_route();\n\t\t});\n\t\treturn this;\n\t}\n\n\t/*\n\t * reroute() is useful in a route handler that wants to trigger a route;\n\t * it uses replaceState() to delete the intermediate route from the history.\n\t * @param {string} frag The url component\n\t * @param {object} opts Options for .navigate();\n\t */\n\treroute(frag, opts) {\n\t\t// Replace the #upload in the browser history so that the back button won't re-forward:\n\t\t// Note the blank 'state object' because I haven't found the doc on what that should contain;\n\t\t// I think it's up to us, but i hope Backbone isn't using it ...\n\t\thistory.replaceState({}, '', `#${frag}`);\n\n\t\t// Tidy up our local .history\n\t\tthis.history[0] = frag;\n\n\t\t// This will trigger the route, even though our href is here already:\n\t\tthis.navigate(frag, opts);\n\t}\n\n\t/**\n\t * Add a set of new routes to the routes we already have.\n\t * @param {object} routes Routes\n\t */\n\taddRoutes(routes) {\n\t\t// apparently, routes must be added in reverse order to their position in the object.\n\t\t_.keys(routes)\n\t\t\t.reverse()\n\t\t\t.forEach((routePattern) =>\n\t\t\t\tthis.route(routePattern, routes[routePattern]),\n\t\t\t);\n\t}\n\n\t/**\n\t * inCategory() parses the current route to see if it's a category route\n\t * @return {number} a route ID, or undefined if not a category route.\n\t */\n\tinCategory() {\n\t\tif (Backbone.history.fragment?.match(/category\\/(\\d+)/)) {\n\t\t\treturn parseInt(\n\t\t\t\tBackbone.history.fragment.match(/category\\/(\\d+)/)[1],\n\t\t\t\t10,\n\t\t\t);\n\t\t} else {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\t/**\n\t * push() and pop() have had problems.\n\t * New strategy: find the most recent route that does *not* match a pattern, and go to that.\n\t * @param {string} pattern Pattern\n\t * @param {object} opts Options\n\t */\n\texitRoute(pattern, opts = {}) {\n\t\tconst targetRoute = _.find(this.history, (r) => {\n\t\t\t// Only use match if RegExp was passed\n\t\t\tif (pattern instanceof RegExp) {\n\t\t\t\t// Find the first route that doesn't match this pattern\n\t\t\t\treturn !r.match(pattern);\n\t\t\t}\n\t\t\t// Otheriwse we do an exact comparison\n\t\t\treturn r !== pattern;\n\t\t});\n\n\t\tconst {force, ...sendOpts} = opts;\n\t\t// If there is no available history, or it happens to be the last route\n\t\t// use this.back(), it will fall back on home()\n\t\tif (!targetRoute || (!force && targetRoute === this.history[1])) {\n\t\t\tif (force && !targetRoute && this.history.length) return this.home();\n\t\t\treturn this.back({trigger: true});\n\t\t}\n\n\t\tthis.navigate(targetRoute || '', {trigger: true, ...sendOpts});\n\t}\n\n\t/**\n\t * Route to the HOME_ROUTE, or the null route if HOME_ROUTE is not defined.\n\t * If no options provided, we set {trigger: true} to actually fire the route handler -- which is what we usually want.\n\t * @param {object} opts Options\n\t */\n\thome(opts = {}) {\n\t\topts.trigger = opts.trigger !== false;\n\t\tthis.navigate(coreConfig.HOME_ROUTE || '#', opts);\n\t}\n}\n\nexport default AppRouter;\n","/***************\n * NetX extensions to Underscore's _ object, adding miscellaneous utility functions.\n * NOTE: Be sure to document new items in https://confluence.netx.net/display/DEV/X7+Library+Overrides%2C+Extensions+and+Mixins\n */\nimport _ from 'underscore';\nimport Modernizr from 'core-libs/modernizr/modernizr';\n\nimport {arrayToCsv, csvToArray} from '@netx/core-next/utils/array';\n\n/**\n * Convert arguments to array\n * @param {arguments} args Arguments\n * @return {array}\n */\nexport const argsToArray = (args) => {\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments\n\treturn args.length === 1 ? [args[0]] : Array.apply(null, args);\n};\n\n/**\n * Convert integer byte counts into human-readable strings\n * @param {number} bytes Bytes to be formatted\n * @param {boolean} floor Whether to Math.floor the return\n * @param {string} maxScale The maximum unit\n * @returns {string} converted bytes affixed with units\n */\nexport const bytes = (bytes, floor, maxScale) => {\n\tbytes = parseFloat((bytes || 0).toString());\n\tvar i = -1;\n\tvar byteUnits = ['kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n\n\tvar idx = _.indexOf(byteUnits, maxScale);\n\tif (idx > -1) {\n\t\ti = idx;\n\t\tbytes = bytes ? bytes / Math.pow(1000, idx + 1) : 0;\n\t} else {\n\t\tdo {\n\t\t\tbytes = bytes / 1000;\n\t\t\ti++;\n\t\t} while (bytes >= 1000);\n\t}\n\n\tif (bytes > 0) {\n\t\tif (floor) {\n\t\t\treturn Math.floor(bytes) + ' ' + byteUnits[i];\n\t\t} else {\n\t\t\t// We need more info when it comes to over a gig\n\t\t\tif (i > 1) {\n\t\t\t\treturn Math.max(bytes, 0.01).toFixed(2) + ' ' + byteUnits[i];\n\t\t\t} else {\n\t\t\t\treturn Math.max(bytes, 0.1).toFixed(1) + ' ' + byteUnits[i];\n\t\t\t}\n\t\t}\n\t} else {\n\t\treturn idx > -1 ? '0 ' + byteUnits[idx] : '0 kB';\n\t}\n};\n\n/**\n * Returns str without quotes and spaces commas\n * @param {string} str String to clean up\n * @returns {string} Clean spaced string\n */\nexport const cleanQuotes = (str) => {\n\treturn str.replace(/\"/g, '').replace(/,/g, ', ');\n};\n\n/**\n * @param {Date|number|string} d Date string\n * @returns {string} HTML date string (YYYY-MM-DD)\n */\nexport const dateToHTML = (d) => {\n\tif (!_.isUndefined(d) && d) {\n\t\t// Support milliseconds\n\t\tif (_.isNumber(d)) {\n\t\t\td = new Date(d);\n\t\t}\n\n\t\tif (d instanceof Date) {\n\t\t\treturn [\n\t\t\t\td.getFullYear(),\n\t\t\t\tpad(d.getMonth() + 1, 2),\n\t\t\t\tpad(d.getDate(), 2),\n\t\t\t].join('-');\n\t\t}\n\n\t\tvar temp = d.split('/');\n\t\tif (temp.length && temp[0].length === 4)\n\t\t\treturn d.replace(/(\\d+)\\/(\\d+)\\/(\\d+)/, '$1-$2-$3');\n\n\t\treturn d.replace(/(\\d+)\\/(\\d+)\\/(\\d+)/, '$3-$1-$2');\n\t}\n\treturn '';\n};\n\n/**\n * Escape asset attribute name\n * (Do what underscore's _.escape does, then encode any open & close parens as HTML entities.)\n *\n * @param {string} string Attribute name\n * @return {string} Escaped attribute name\n */\nexport const escapeAttributeName = (string) => {\n\tstring = _.escape(string);\n\tstring = string\n\t\t.replace(/\\(/g, '(')\n\t\t.replace(/\\)/g, ')')\n\t\t.replace(/\\[/g, '[')\n\t\t.replace(/\\]/g, ']');\n\treturn string;\n};\n\n/**\n * @param {object} exports module.exports\n * @param {array} actions Actions\n * @return {array} Extended actions\n */\nexport const extendActions = (exports, actions) => {\n\tvar _action;\n\t_.each(actions, function (action) {\n\t\t_action = _.findWhere(exports, {event: action.event});\n\t\t_action && _.extend(_action, action);\n\t});\n\treturn exports;\n};\n\n/**\n * Get the body of a function as string\n * https://stackoverflow.com/questions/3179861/javascript-get-function-body\n * @method\n * @param {function} func Function\n * @return {string} Function body\n */\nexport const getFunctionBody = (func) => {\n\tvar fstring = func.toString();\n\treturn fstring.substring(fstring.indexOf('{') + 1, fstring.lastIndexOf('}'));\n};\n\n/**\n * Returns a worker\n * @method\n * @param {function} func Worker function\n * @return {Worker} Worker\n */\nexport const getInlineWorker = (func) => {\n\tvar blob = new Blob([getFunctionBody(func)]);\n\n\tvar worker = new Worker(window.URL.createObjectURL(blob));\n\treturn worker;\n};\n\n/**\n * @param {mixed} value Value\n * @return {boolean}\n */\nexport const isEmptyValue = (value) => {\n\tif (Array.isArray(value)) {\n\t\treturn value.length === 0 || (value.length === 1 && value[0] === '');\n\t}\n\treturn value == null || (value + '').trim() === '';\n};\n\n/**\n * Is this a touch device and smaller than mobile-breakpoint-max?\n * @function\n * @param {boolean} testTouch Inlcude testing for touch\n */\nexport const isMobile = (testTocuh = true) => {\n\treturn (!testTocuh || Modernizr.touch) && window.innerWidth < 767;\n};\n\n/**\n * Returns str (perhaps representing an integer)\n * left-padded with zeroes to at least 'max' characters in width\n * example: pad(\"3\",4) == \"0003\"\n * @param {string} str String to pad\n * @param {integer} max The amount of '0's to pad to\n * @returns {string} Padded string\n */\nexport const pad = (str, max) => {\n\tstr = str + '';\n\twhile (str.length < max) {\n\t\tstr = '0' + str;\n\t}\n\treturn str;\n};\n\n/**\n * Provided with full dimensions and dimensions to fit, will return resized dimensions\n * @param {object} dimensions Full dimensions of thing to fit\n * @param {object} fitDimensions Dimensions to fit to\n * @return {object} Resized dimensions\n */\nexport const resizeToFit = (dimensions, fitDimensions) => {\n\tlet height = dimensions.height;\n\tlet width = dimensions.width;\n\tlet newDimensions = _.clone(dimensions);\n\n\tconst aspectRatio = dimensions.aspectRatio || width / height;\n\tconst maxWidth = fitDimensions.width;\n\tconst maxHeight = fitDimensions.height;\n\n\tif (maxHeight && maxWidth) {\n\t\tif (maxWidth < width) {\n\t\t\twidth = maxWidth;\n\t\t\theight = Math.round(width / aspectRatio);\n\t\t}\n\t\tif (maxHeight < height) {\n\t\t\theight = maxHeight;\n\t\t\twidth = Math.round(height * aspectRatio);\n\t\t}\n\t\t// Make a second pass to be sure our resize did not cause the height or width to exceed the fitDimensions\n\t\tif (maxHeight < height) {\n\t\t\theight = maxHeight;\n\t\t\twidth = Math.round(height * aspectRatio);\n\t\t}\n\t\tif (maxWidth < width) {\n\t\t\twidth = maxWidth;\n\t\t\theight = Math.round(width / aspectRatio);\n\t\t}\n\t\tnewDimensions = {\n\t\t\theight: height,\n\t\t\twidth: width,\n\t\t};\n\t}\n\treturn newDimensions;\n};\n\n/**\n * Unescape asset attribute name in form fields.\n * (Specifically, do everything underscore's _.unescape method does,\n * and also decode the HTML entities for open & close parens, if present.)\n *\n * @param {string} string Attribute name\n * @return {string} Unescaped attribute name\n */\nexport const unescapeAttributeName = (string) => {\n\tstring = _.unescape(string);\n\tstring = string\n\t\t.replace(/(/g, '(')\n\t\t.replace(/)/g, ')')\n\t\t.replace(/[/g, '[')\n\t\t.replace(/]/g, ']');\n\treturn string;\n};\n\n_.mixin({\n\tbytes,\n\n\t/**\n\t * @param {array|number} items Either an array of items or a number\n\t * @param {number} currentIndex Current index in items\n\t * @param {number} itemsToDisplay Number of items to display\n\t * @param {mixed} ellipsis What to use for ellipis\n\t * @returns {array} array of crumbs\n\t */\n\tcrumbs: function (items, currentIndex, itemsToDisplay, ellipsis) {\n\t\tcurrentIndex = parseInt(currentIndex) || 1;\n\t\titemsToDisplay = parseInt(itemsToDisplay) || 2;\n\t\tellipsis = ellipsis || '...';\n\n\t\tvar crumbArray = [],\n\t\t\ttotalItems = _.isArray(items) ? items.length : parseInt(items) || 0,\n\t\t\tfirstItem = 1;\n\n\t\tif (totalItems) {\n\t\t\t// Subtract 2 ( for 1 on each side ) then divide by 2\n\t\t\tvar adjacentCount = Math.floor((itemsToDisplay - 2) / 2),\n\t\t\t\tfirstAdjacentItem,\n\t\t\t\tlastAdjacentItem;\n\n\t\t\t// Page count must be greater than pages to display\n\t\t\tif (totalItems >= itemsToDisplay) {\n\t\t\t\tif (currentIndex <= adjacentCount + adjacentCount) {\n\t\t\t\t\tfirstAdjacentItem = firstItem;\n\t\t\t\t\tlastAdjacentItem = Math.min(\n\t\t\t\t\t\tfirstItem + adjacentCount + adjacentCount,\n\t\t\t\t\t\ttotalItems,\n\t\t\t\t\t);\n\t\t\t\t} else if (currentIndex > totalItems - adjacentCount - adjacentCount) {\n\t\t\t\t\tlastAdjacentItem = totalItems;\n\t\t\t\t\tfirstAdjacentItem = totalItems - adjacentCount - adjacentCount;\n\t\t\t\t} else {\n\t\t\t\t\tfirstAdjacentItem = currentIndex - adjacentCount;\n\t\t\t\t\tlastAdjacentItem = currentIndex + adjacentCount;\n\t\t\t\t}\n\n\t\t\t\tif (firstAdjacentItem > firstItem) {\n\t\t\t\t\tcrumbArray.push(_.isArray(items) ? items[firstItem - 1] : firstItem);\n\t\t\t\t\tif (firstAdjacentItem > firstItem + 1) {\n\t\t\t\t\t\tcrumbArray.push(ellipsis);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (var i = firstAdjacentItem; i <= lastAdjacentItem; i++) {\n\t\t\t\t\tcrumbArray.push(_.isArray(items) ? items[i - 1] : i);\n\t\t\t\t}\n\t\t\t\tif (lastAdjacentItem < totalItems) {\n\t\t\t\t\tif (lastAdjacentItem < totalItems - 1) {\n\t\t\t\t\t\tcrumbArray.push(ellipsis);\n\t\t\t\t\t}\n\t\t\t\t\tcrumbArray.push(\n\t\t\t\t\t\t_.isArray(items) ? items[totalItems - 1] : totalItems,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Just spit em all out\n\t\t\telse {\n\t\t\t\t_.times(totalItems, function (n) {\n\t\t\t\t\tcrumbArray.push(_.isArray(items) ? items[n] : n + 1);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn crumbArray;\n\t},\n\n\t/**\n\t * isURL: returns true if a string is a valid URL.\n\t * @param {string} str the string to be tested\n\t * @return {boolean} Is URL\n\t */\n\tisURL: function (str) {\n\t\treturn !!_.matchURL(str);\n\t},\n\n\t/**\n\t * This is harder than it seems.\n\t * The following page shows a fairly complete test suite for regexp URL validation\n\t * using several popular internet options:\n\t *\n\t * \thttps://mathiasbynens.be/demo/url-regex\n\t *\n\t * isURL uses the only algorithm on this page that passed all tests --\n\t * \thttps://gist.github.com/dperini/729294 -- by Diego Perini\n\t *\n\t * @param {string} str the string to be tested\n\t * @return {array|null} the result of String.match()\n\t */\n\tmatchURL: function (str) {\n\t\treturn str.match(\n\t\t\tnew RegExp(\n\t\t\t\t'^' +\n\t\t\t\t\t// protocol identifier\n\t\t\t\t\t'(?:(?:https?|ftp)://)' +\n\t\t\t\t\t// user:pass authentication\n\t\t\t\t\t'(?:\\\\S+(?::\\\\S*)?@)?' +\n\t\t\t\t\t'(?:' +\n\t\t\t\t\t// IP address exclusion\n\t\t\t\t\t// private & local networks\n\t\t\t\t\t'(?!(?:10|127)(?:\\\\.\\\\d{1,3}){3})' +\n\t\t\t\t\t'(?!(?:169\\\\.254|192\\\\.168)(?:\\\\.\\\\d{1,3}){2})' +\n\t\t\t\t\t'(?!172\\\\.(?:1[6-9]|2\\\\d|3[0-1])(?:\\\\.\\\\d{1,3}){2})' +\n\t\t\t\t\t// IP address dotted notation octets\n\t\t\t\t\t// excludes loopback network 0.0.0.0\n\t\t\t\t\t// excludes reserved space >= 224.0.0.0\n\t\t\t\t\t// excludes network & broacast addresses\n\t\t\t\t\t// (first & last IP address of each class)\n\t\t\t\t\t'(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])' +\n\t\t\t\t\t'(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}' +\n\t\t\t\t\t'(?:\\\\.(?:[1-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))' +\n\t\t\t\t\t'|' +\n\t\t\t\t\t// host name\n\t\t\t\t\t'(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)' +\n\t\t\t\t\t// domain name\n\t\t\t\t\t'(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*' +\n\t\t\t\t\t// TLD identifier\n\t\t\t\t\t'(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,}))' +\n\t\t\t\t\t// TLD may end with dot\n\t\t\t\t\t'\\\\.?' +\n\t\t\t\t\t')' +\n\t\t\t\t\t// port number\n\t\t\t\t\t'(?::\\\\d{2,5})?' +\n\t\t\t\t\t// resource path\n\t\t\t\t\t'(?:[/?#]\\\\S*)?' +\n\t\t\t\t\t'$',\n\t\t\t\t'i',\n\t\t\t),\n\t\t);\n\t},\n\n\t/**\n\t * Determine if a string (or number) is numeric; different from _.isNumber, which just tests type\n\t * http://stackoverflow.com/questions/18082/validate-numbers-in-javascript-isnumeric\n\t * @param {*} String/Integer\n\t * @returns {bool} Whether or not it is a number to test\n\t */\n\tisNumeric: function (n) {\n\t\treturn !isNaN(parseFloat(n)) && isFinite(n);\n\t},\n\n\t/**\n\t * @method\n\t * @param {string} str String to parse\n\t * @return {string} Parsed URL string\n\t */\n\tparseURLS: function (str) {\n\t\treturn (\n\t\t\tstr &&\n\t\t\tstr.replace(\n\t\t\t\t/(https?:\\/\\/.*?[^\\s|'|\"]+)/g,\n\t\t\t\t'<a title=\"$1\" class=\"url-link\" target=\"_blank\" href=\"$1\">$1</a>',\n\t\t\t)\n\t\t);\n\t},\n\n\t/**\n\t * Convert a string \"true\"/\"false\" to boolean\n\t * @param {string} val String to convert\n\t * @returns {bool} The string as a boolean\n\t */\n\ttoBoolean: function (val) {\n\t\tif (val.toLowerCase() == 'false') return false;\n\t\treturn true;\n\t},\n\n\t/**\n\t * For historical reasons, the DAM sometimes encodes object data as an array of LabelValueBeans.\n\t * objectToLvbs and lvbsToObject are utilities to convert in and out of that format.\n\t * @param {object} obj Label value bean object to convert to array\n\t * @returns {array} Label value been object as array\n\t */\n\tobjectToLvbs: function (obj) {\n\t\treturn _.map(obj, function (v, l) {\n\t\t\treturn {label: l, value: v};\n\t\t});\n\t},\n\n\t/**\n\t * For historical reasons, the DAM sometimes encodes object data as an array of LabelValueBeans.\n\t * objectToLvbs and lvbsToObject are utilities to convert in and out of that format.\n\t * @param {array} lvb Label value bean array to convert to object\n\t * @returns {array} Label value been array as object\n\t */\n\tlvbsToObject: function (lvb) {\n\t\tif (_.isUndefined(lvb) || _.isNull(lvb)) return undefined; // undefined array == undefined object.\n\t\tif (!_.isArray(lvb)) lvb = [lvb]; // convert a single LVB into an array of one.\n\t\tif (lvb.length == 0) return {}; // empty array == empty object.\n\n\t\tvar memo = {};\n\t\t_.reduce(\n\t\t\tlvb,\n\t\t\tfunction (memo, b) {\n\t\t\t\tmemo[b.label] = b.value;\n\t\t\t\treturn memo;\n\t\t\t},\n\t\t\tmemo,\n\t\t);\n\t\treturn memo;\n\t},\n\n\t/**\n\t * An attempt at a utility function to turn a bean label-value array like [ {label: 'foo', value: 123 }, ... ] into\n\t * a more useful object like { foo: 123, ... }\n\t * NOTE: it expands into sub-objects when label has dots. or should. (see _dotExpand() above)\n\t * NOTE: this is destructive to the passed in array lv, as it would otherwise get set on the model\n\t * TODO: should this be done instead outside of this function? probably maybe.\n\t * @param {array} lv Bean label-value array\n\t * @returns {object} Bean label-value array as object\n\t */\n\tlvbsToDeepObject: function (lv) {\n\t\tvar obj = {};\n\t\tfor (var i = 0; i < lv.length; i++) {\n\t\t\tvar val = lv[i].value;\n\t\t\t//being outrageously bold here and assuming no string in user prefs wants to be literal \"true\" or \"false\"\n\t\t\t// if this turns out not to be the case, my apologies and this will have to do a case-by-case check on what to turn into boolean. :( -jon\n\t\t\tif (val == 'true' || val == 'false') val = _.toBoolean(val);\n\t\t\t_._dotExpand(obj, lv[i].label.split('.'), val);\n\t\t}\n\t\tlv.length = 0; //the destructive part\n\t\treturn obj;\n\t},\n\n\t/**\n\t * Really just a utility function for beanArrayToObject.\n\t * This will take (obj, [foo, bar, baz, fu], val) and alter obj to be: obj[foo][bar][baz][fu] = val (creating sub-objects iff necessary)\n\t * NOTE: this will alter/affect the passed-in obj, and the return value is only useful for recursing here\n\t * @param {object} obj Object to expand from array\n\t * @param {array} levels An array of levels which to expand the object to\n\t * @param {*} value The value to assign to this new object level\n\t */\n\t_dotExpand: function (obj, levels, value) {\n\t\tvar key = levels.shift();\n\n\t\t//trivial case where initial levels = [] ... just to do the right thing (i think?)\n\t\tif (_.isUndefined(key)) {\n\t\t\tobj = value;\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (levels.length === 0) {\n\t\t\tobj[key] = value;\n\t\t\treturn obj;\n\t\t}\n\n\t\t//still more levels to go, so lets make sure this has a home\n\t\tif (!obj[key]) obj[key] = {};\n\t\t//if (typeof obj[key] != 'object') return; //???????? TODO\n\n\t\treturn _._dotExpand(obj[key], levels, value);\n\t},\n\n\t/**\n\t * Complement to _dotExpand(). Will return an array of [{label: value}, {label: value},...] of leaf nodes\n\t * e.g. {a: {b: 1, c: 2}} -> [ {a.b: 1}, {a.c: 2} ]\n\t * @param {object} obj Object to collapse to an array\n\t * @returns {array} Collapsed object as an array\n\t */\n\t_dotCollapse: function (obj) {\n\t\tvar arr = [];\n\t\tvar o = {};\n\t\tfor (var key in obj) {\n\t\t\tif (typeof obj[key] == 'object') {\n\t\t\t\tvar r = _._dotCollapse(obj[key]);\n\t\t\t\tfor (var i = 0; i < r.length; i++) {\n\t\t\t\t\tfor (var rk in r[i]) {\n\t\t\t\t\t\t//should really only be one key but how to do this shorthand?\n\t\t\t\t\t\to = {};\n\t\t\t\t\t\to[key + '.' + rk] = r[i][rk];\n\t\t\t\t\t\tarr.push(o);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\to = {};\n\t\t\t\t/////////////TODO deal with conversion to boolean !?!\n\t\t\t\to[key] = obj[key];\n\t\t\t\tarr.push(o);\n\t\t\t}\n\t\t}\n\t\treturn arr;\n\t},\n\n\tdateToHTML,\n\n\t/**\n\t * The DAM (sometimes) stores dates on asset attributes in dd/mm/yyyy format, but HTML forms use yyyy-mm-dd format.\n\t * @param {string} d Date string\n\t * @returns {string} DAM date string\n\t */\n\tdateToDAM: function (d) {\n\t\tif (!_.isUndefined(d)) {\n\t\t\tvar temp = d.split('-');\n\t\t\tif (temp.length && temp[0].length === 4)\n\t\t\t\treturn d.replace(/(\\d+)-(\\d+)-(\\d+)/, '$1/$2/$3');\n\n\t\t\treturn d.replace(/(\\d+)-(\\d+)-(\\d+)/, '$3/$1/$2');\n\t\t}\n\t},\n\t/**\n\t * Provided with a date or time (in milliseconds), get a new date in the users timezone\n\t * If nothing is provided you will get now\n\t * @param {date|number} d Date or time\n\t * @return {date} Local date\n\t */\n\tdateToLocalTimezone: function (d) {\n\t\tif (!(d instanceof Date)) {\n\t\t\tif (_.isNumber(d)) {\n\t\t\t\td = new Date(d);\n\t\t\t} else {\n\t\t\t\treturn new Date();\n\t\t\t}\n\t\t}\n\n\t\tvar time = d.getTime(),\n\t\t\ttimezoneOffset = new Date().getTimezoneOffset() * 60 * 1000;\n\n\t\treturn new Date(time + timezoneOffset);\n\t},\n\t/**\n\t * The DAM stores timestamps on assets (and some other objects) in a completely different format:\n\t * yyyy-mm-dd hh:mm:ss.s\n\t * (.s == tenths of a second ... sometimes there and sometimes not)\n\t * This function takes one of those strings, and returns a JS Date object.\n\t * @param {string} d asset timestamp\n\t * @returns {Date} JS Date object\n\t */\n\tdateFromAsset: function (d) {\n\t\tvar t = d.match(/(\\d+)-(\\d+)-(\\d+) (\\d+):(\\d+):(\\d+)/);\n\t\tif (!t || !t.length) {\n\t\t\tthrow new Error(\"dateFromAsset: bad date '\" + d + \"'\");\n\t\t}\n\n\t\treturn new Date(t[1], t[2] - 1, t[3], t[4], t[5], t[6]);\n\t},\n\n\t/**\n\t * The opposite: turn a js Date object into a DAM asset timestamp\n\t * @param {Date} d A Date object. If omitted, we create one with the current time.\n\t * @param {boolean} omitTime Omit the time piece\n\t * @returns {string} asset timestamp in local timezone\n\t */\n\tdateToAsset: function (d, omitTime) {\n\t\td = d || new Date();\n\t\tvar ret =\n\t\t\td.getFullYear() +\n\t\t\t'-' +\n\t\t\tpad(d.getMonth() + 1, 2) +\n\t\t\t'-' +\n\t\t\tpad(d.getDate(), 2);\n\t\tif (!omitTime) {\n\t\t\tret +=\n\t\t\t\t' ' +\n\t\t\t\tpad(d.getHours(), 2) +\n\t\t\t\t':' +\n\t\t\t\tpad(d.getMinutes(), 2) +\n\t\t\t\t':' +\n\t\t\t\tpad(d.getSeconds(), 2) +\n\t\t\t\t'.0';\n\t\t}\n\t\treturn ret;\n\t},\n\n\t/**\n\t * Same thing, but in UTC.\n\t * @param {Date} d A Date object. If omitted, we create one with the current time.\n\t * @returns {string} asset timestamp in UTC\n\t */\n\tdateToAssetUTC: function (d) {\n\t\treturn [\n\t\t\td.getUTCFullYear(),\n\t\t\t'-',\n\t\t\tpad(d.getUTCMonth(), 2),\n\t\t\t'-',\n\t\t\tpad(d.getUTCDate(), 2),\n\t\t\t' ',\n\t\t\tpad(d.getUTCHours(), 2),\n\t\t\t':',\n\t\t\tpad(d.getUTCMinutes(), 2),\n\t\t\t':',\n\t\t\tpad(d.getUTCSeconds(), 2),\n\t\t\t'.0',\n\t\t].join('');\n\t},\n\n\t/**\n\t * Convert string date 'yyyy-mm-dd' to JavaScript Date object\n\t * @param {string} dateString Date string formatted 'yyyy-mm-dd'\n\t * @returns {date} JavaScript Date object\n\t */\n\tdateFromString: function (d) {\n\t\t// Try with \"-\"\n\t\tvar t = d.match(/(\\d+)-(\\d+)-(\\d+)/);\n\t\tif (!t || !t.length) {\n\t\t\t// Try with \"/\"\n\t\t\tt = d.match(/(\\d+)\\/(\\d+)\\/(\\d+)/);\n\t\t\tif (!t || !t.length) {\n\t\t\t\tthrow new Error(\"dateFromString: bad date '\" + d + \"'\");\n\t\t\t}\n\t\t}\n\n\t\tvar nd = new Date(t[1], t[2] - 1, t[3]);\n\t\treturn nd;\n\t},\n\t/**\n\t * Convert month integer to month name string\n\t * @param {integer} m Month from 0 - 11\n\t * @returns {string} month name\n\t */\n\tgetMonthString: function (m) {\n\t\tif (!_.isUndefined(m) && m < 12 && m > -1) {\n\t\t\tvar months = [\n\t\t\t\t'January',\n\t\t\t\t'February',\n\t\t\t\t'March',\n\t\t\t\t'April',\n\t\t\t\t'May',\n\t\t\t\t'June',\n\t\t\t\t'July',\n\t\t\t\t'August',\n\t\t\t\t'September',\n\t\t\t\t'October',\n\t\t\t\t'November',\n\t\t\t\t'December',\n\t\t\t];\n\t\t\treturn months[m];\n\t\t}\n\t\treturn '';\n\t},\n\t/**\n\t * Convert day integer to day name string\n\t * @param {integer} d Day from 0 - 6\n\t * @returns {string} day name\n\t */\n\tgetDayString: function (d) {\n\t\tif (!_.isUndefined(d) && d < 7 && d > -1) {\n\t\t\tvar days = [\n\t\t\t\t'Sunday',\n\t\t\t\t'Monday',\n\t\t\t\t'Tuesday',\n\t\t\t\t'Wednesday',\n\t\t\t\t'Thursday',\n\t\t\t\t'Friday',\n\t\t\t\t'Saturday',\n\t\t\t];\n\t\t\treturn days[d];\n\t\t}\n\t\treturn '';\n\t},\n\t/**\n\t * Convert integer to a stylized string (1000000 -> \"1,000,000\")\n\t * @param {integer} number Number you want formatted\n\t * @returns {string} formatted number string\n\t */\n\tformatNumber: function (number) {\n\t\treturn number.toString().replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, '$1,');\n\t},\n\t/**\n\t * The jQuery Promise implementation uses some crazy internal class-hackery\n\t * such that 'instanceof' is useless for detecting either $.Promise or $.Deferred classes.\n\t * This is our go-to pattern for detecting either thing:\n\t * Is it an object with a then() function?\n\t * (Please update as the pattern improves, or we use more/different Promise libraries.)\n\t *\n\t * @param {object} obj Something that is or is not a promise\n\t * @returns {boolean} True if a promise was passed\n\t */\n\tisPromise: function (obj) {\n\t\treturn obj && _.isFunction(obj.then);\n\t},\n\n\t/**\n\t * Takes an array and moves item at index to another index\n\t * @param {Array} array Array that in being modified\n\t * @param {Int} fromIndex Index of item that is being moved\n\t * @param {Int} toIndex Index where item should be placed\n\t */\n\tmove: function (array, fromIndex, toIndex) {\n\t\tarray.splice(toIndex, 0, array.splice(fromIndex, 1)[0]);\n\t\treturn array;\n\t},\n\t/**\n\t * Convert milliseconds to a date string yyyy-mm-dd\n\t * @param {string|number} ms Milliseconds\n\t * @return {string} Date str\n\t */\n\tmillisecondsToDateStr: function (ms) {\n\t\tms = parseInt(ms) || 0;\n\t\tif (ms) {\n\t\t\treturn new Date(ms).toISOString().substring(0, 10);\n\t\t}\n\t\treturn '';\n\t},\n\t/**\n\t * Convert milliseconds to a date string `November 30, 2016 (13:55:42)`\n\t * @param {string|number} ms Milliseconds\n\t * @return {string} Date str\n\t */\n\tmillisecondsToFullDateStr: function (ms) {\n\t\tms = parseInt(ms) || 0;\n\t\tif (ms) {\n\t\t\tvar date = new Date(ms);\n\t\t\treturn (\n\t\t\t\t_.getMonthString(date.getMonth()) +\n\t\t\t\t' ' +\n\t\t\t\tdate.getDate() +\n\t\t\t\t', ' +\n\t\t\t\tdate.getFullYear() +\n\t\t\t\t' (' +\n\t\t\t\tpad(date.getHours(), 2) +\n\t\t\t\t':' +\n\t\t\t\tpad(date.getMinutes(), 2) +\n\t\t\t\t':' +\n\t\t\t\tpad(date.getSeconds(), 2) +\n\t\t\t\t')'\n\t\t\t);\n\t\t}\n\t\treturn '';\n\t},\n\t/**\n\t * Convert milliseconds to a time string hh::mm::ss.ms\n\t * @param {string|number} ms Milliseconds\n\t * @return {string} Time str\n\t */\n\tmillisecondsToTimeStr: function (ms) {\n\t\t// Vars\n\t\tvar floor = Math.floor,\n\t\t\ttime = parseInt(ms),\n\t\t\thour,\n\t\t\tminute,\n\t\t\tsecond;\n\n\t\thour = floor(time / 3600000);\n\t\ttime -= hour * 3600000;\n\t\tminute = floor(time / 60000);\n\t\ttime -= floor(minute * 60000);\n\t\tsecond = floor(time / 1000);\n\t\ttime -= floor(second * 1000);\n\n\t\treturn (\n\t\t\tpad(hour, 2) +\n\t\t\t':' +\n\t\t\tpad(minute, 2) +\n\t\t\t':' +\n\t\t\tpad(second, 2) +\n\t\t\t'.' +\n\t\t\tpad(time, 3)\n\t\t);\n\t},\n\t/**\n\t * Convert string to first letter capitalized. You might recognize me from PHP.\n\t * @param {string} str String to have the first letter capitalized\n\t * @returns {string} String with first letter capitalized\n\t */\n\tucfirst: function (str) {\n\t\tif (!_.isUndefined(str)) {\n\t\t\tif (str.length > 1) {\n\t\t\t\treturn str.charAt(0).toUpperCase() + str.substring(1);\n\t\t\t} else {\n\t\t\t\treturn str.toUpperCase();\n\t\t\t}\n\t\t}\n\t\treturn '';\n\t},\n\t/**\n\t * You can't have one without the other ... Lowercase the first character of a string.\n\t * @param {string} str String needing decapitalization\n\t * @returns {string} String with the first letter lowercased.\n\t */\n\tlcfirst: function (str) {\n\t\tif (_.isUndefined(str)) {\n\t\t\treturn str;\n\t\t}\n\t\tif (str.length > 1) {\n\t\t\treturn str.slice(0, 1).toLowerCase() + str.slice(1);\n\t\t} else {\n\t\t\treturn str.toLowerCase();\n\t\t}\n\t},\n\t/**\n\t * Convert string to a proper camelCased string\n\t * @param {string} str String you want camelCased\n\t * @returns {string} camelCased string\n\t */\n\ttoCamelCase: function (str) {\n\t\tif (_.isUndefined(str)) {\n\t\t\t//console.warn('undefined argument');\n\t\t\treturn undefined;\n\t\t}\n\t\tstr = str.toString();\n\t\t// First check if the first character is alphanumeric and strip it if it is not\n\t\t// Otherwise we will end up with a capital first word once non alphanumeric characters are removed\n\t\t// We dont' want to remove all of them yet as things like underscors and dashes symbolize a need for a new capitalized word\n\t\tstr = str.replace(/^[\\W]+/g, '');\n\n\t\t// Characters we will consider as markers for new words\n\t\tvar newWordCharacters = new RegExp(/[-_ .](.)/g);\n\t\tvar stripCharacters = new RegExp(/[\\W_]+/g);\n\n\t\t// Then check if we have capital letters already (\"GEO\", \"NLO / Country\", \"FileType\", etc)\n\t\tvar capitalizedArray = str.match(/([A-Z]?[^A-Z]*)/g).slice(0, -1);\n\t\tvar newStr = '';\n\n\t\t// If we have more than one capital letter we need to do and check some things ourselves\n\t\tif (capitalizedArray.length > 1) {\n\t\t\tfor (var i = 0, c = capitalizedArray.length; i < c; i++) {\n\t\t\t\t// If we are not at the last index\n\t\t\t\t// and this char is capital\n\t\t\t\t// and next char is capital as well\n\t\t\t\t// this maintains all cap words in the string\n\t\t\t\tif (\n\t\t\t\t\ti < c - 1 &&\n\t\t\t\t\tcapitalizedArray[i].toUpperCase() === capitalizedArray[i] &&\n\t\t\t\t\tcapitalizedArray[i + 1].toUpperCase() === capitalizedArray[i + 1]\n\t\t\t\t) {\n\t\t\t\t\tnewStr += capitalizedArray[i];\n\t\t\t\t} else {\n\t\t\t\t\t// If this is the first word and it contains a new word chartacter as defined above\n\t\t\t\t\tif (!i && newWordCharacters.test(capitalizedArray[i])) {\n\t\t\t\t\t\tcapitalizedArray[i] = capitalizedArray[i]\n\t\t\t\t\t\t\t.replace(newWordCharacters, function ($1) {\n\t\t\t\t\t\t\t\treturn $1.toUpperCase();\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.replace(/^(.)/, function ($1) {\n\t\t\t\t\t\t\t\treturn $1.toLowerCase();\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.replace(stripCharacters, '');\n\n\t\t\t\t\t\tnewStr += capitalizedArray[i];\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// If it is the first word then we want it lowercase\n\t\t\t\t\t\tif (!i) {\n\t\t\t\t\t\t\tnewStr += capitalizedArray[i]\n\t\t\t\t\t\t\t\t.toLowerCase()\n\t\t\t\t\t\t\t\t.replace(/[\\W_]+/g, '');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnewStr += capitalizedArray[i]\n\t\t\t\t\t\t\t\t.replace(newWordCharacters, function ($1) {\n\t\t\t\t\t\t\t\t\treturn $1.toUpperCase();\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.replace(stripCharacters, '');\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 newStr.replace(/[\\W_]+/g, '');\n\t\t}\n\n\t\t// If we are here than this is a standard camelCase issue\n\t\treturn str\n\t\t\t.replace(newWordCharacters, function ($1) {\n\t\t\t\treturn $1.toUpperCase();\n\t\t\t})\n\t\t\t.replace(/^(.)/, function ($1) {\n\t\t\t\treturn $1.toLowerCase();\n\t\t\t})\n\t\t\t.replace(/[\\W_]+/g, '');\n\t},\n\n\t/**\n\t * Convert a camel cased string and returns an underscored string\n\t * @param {string} str camelCased string you want under_scored\n\t * @returns {string} under_scored string\n\t */\n\tcamelCaseToUnderscore: function (str) {\n\t\tif (typeof str !== 'undefined') {\n\t\t\treturn str.replace(/([A-Z])/g, function ($1) {\n\t\t\t\treturn '_' + $1.toLowerCase();\n\t\t\t});\n\t\t}\n\t\treturn '';\n\t},\n\n\t/**\n\t * Convert a camel cased string and returns an dashed string\n\t * @param {string} str camelCased string you want dash-ed\n\t * @returns {string} dash-ed string\n\t */\n\tcamelCaseToDash: function (str) {\n\t\tif (typeof str !== 'undefined') {\n\t\t\treturn str.replace(/([A-Z])/g, function ($1) {\n\t\t\t\treturn '-' + $1.toLowerCase();\n\t\t\t});\n\t\t}\n\t\treturn '';\n\t},\n\n\t/**\n\t * Convert a camel cased string to a titled string\n\t * @param {string} str camelCased string you want To Turn Into A Titled String\n\t * @returns {string} titlelized string\n\t */\n\tcamelCaseToTitle: function (str) {\n\t\tif (typeof str !== 'undefined') {\n\t\t\tvar _str = _.ucfirst(\n\t\t\t\tstr.replace(/([A-Z])/g, function ($1) {\n\t\t\t\t\treturn ' ' + _.ucfirst($1.toLowerCase());\n\t\t\t\t}),\n\t\t\t);\n\t\t\tif (!_str.includes(' ')) {\n\t\t\t\t_str = _str.toUpperCase();\n\t\t\t}\n\t\t\treturn _str;\n\t\t}\n\t\treturn '';\n\t},\n\t/**\n\t * Given a collection, an array of models, an array of objects or a single object,\n\t * return a Backbone.Collection of the given class.\n\t * @param {*} obj Item to be converted to Collection.\n\t * @param {Object} targetClass Target Collection type -- a Backbone class extended from Backbone.Collection.\n\t * @param {Object} classOptions Any Backbone options to pass to the collection instantiation call.\n\t */\n\ttoCollection: function (obj, targetClass, classOptions) {\n\t\tif (_.isUndefined(targetClass)) {\n\t\t\tthrow new Error('Undefined target class');\n\t\t}\n\n\t\t// If we got an undefined object but a defined class,\n\t\t// return an empty collection of that class.\n\t\tif (_.isUndefined(obj)) {\n\t\t\treturn new targetClass([], classOptions);\n\t\t}\n\n\t\t// Maybe obj needs no conversion?\n\t\tif (obj instanceof targetClass) {\n\t\t\treturn obj;\n\t\t}\n\n\t\t// if obj is an array of models or bare objects, Backbone will convert it as needed.\n\t\tif (_.isArray(obj)) {\n\t\t\t//return new targetClass( obj, classOptions );\n\t\t\treturn new targetClass(\n\t\t\t\t_.map(obj, function (item) {\n\t\t\t\t\t// Don't process models.\n\t\t\t\t\tif (item.isModel) {\n\t\t\t\t\t\treturn item;\n\t\t\t\t\t}\n\t\t\t\t\t// Let Backbone convert bare objects into models.\n\t\t\t\t\tif (_.isObject(item)) {\n\t\t\t\t\t\treturn item;\n\t\t\t\t\t}\n\t\t\t\t\tif (_.isNumeric(item)) {\n\t\t\t\t\t\t// Convert objectIds into objects.\n\t\t\t\t\t\tvar model = new targetClass.prototype.model();\n\t\t\t\t\t\t// Fetch them, too.\n\t\t\t\t\t\tmodel.set(model.idAttribute, item);\n\t\t\t\t\t\tmodel.fetch();\n\t\t\t\t\t\treturn model;\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tclassOptions,\n\t\t\t);\n\t\t}\n\n\t\t// TODO: this is a troublesome mixin and will no longer work as models are defined at constructor time\n\n\t\t// If obj is a Model of the correct type, it just needs wrapping.\n\t\t// If obj is a bare object, Backbone will convert it to the correct type.\n\t\tif (obj instanceof targetClass.prototype.model || _.isObject(obj)) {\n\t\t\treturn new targetClass([obj], classOptions);\n\t\t}\n\n\t\tthrow new Error(\"can't convert \" + obj + ' to class ' + targetClass);\n\t},\n\n\t/**\n\t * Given a DOM object, a jQuery object, a jQuery selector or a DOM ID\n\t * return a jQuery object.\n\t * @param {*} obj Item to be converted to jQuery object\n\t * @returns jQuery object\n\t */\n\ttoJQ: function (obj) {\n\t\tif (typeof obj === 'string') {\n\t\t\t/*\n\t\t\t * Upgrading this to handle a selector is easy, but most of the system still passes bare IDs.\n\t\t\t * The following bit of logic tries to avoid excess query work:\n\t\t\t */\n\t\t\tvar jqObj = [];\n\n\t\t\t// this string of yours ... is it a jquery selector?\n\t\t\tif (obj.search(/[#.]/)) {\n\t\t\t\t// does it have id or class selector sigils?\n\t\t\t\tjqObj = $(obj);\n\t\t\t}\n\n\t\t\t// if that failed (or wasn't tried), try backwards-compability: we used to accept a bare element ID\n\t\t\tif (jqObj.length === 0 && obj.indexOf('#') === -1) {\n\t\t\t\tjqObj = $('#' + obj);\n\t\t\t}\n\t\t\t// if that failed, maybe it's a selector after all.\n\t\t\tif (jqObj.length === 0) {\n\t\t\t\tjqObj = $(obj);\n\t\t\t}\n\n\t\t\tobj = jqObj;\n\t\t} else if (typeof obj === 'object') {\n\t\t\tif (obj.nodeType) {\n\t\t\t\tobj = $(obj);\n\t\t\t} else if (typeof obj.jquery === 'string') {\n\t\t\t\t// already jQuery. leave it alone\n\t\t\t\treturn obj;\n\t\t\t} else {\n\t\t\t\tconsole.warn('toJQ received bogus object: ', obj);\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn('toJQ received bogus argument: ', obj);\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t/**\n\t * Convert various things (an assetId, an asset model, or an array of either)\n\t * to an array of 1 or more assetIDs.\n\t *\n\t * 'assets' may be integer assetIDs or full-on asset models,\n\t * and it can be either an array of them or just one.\n\t * @param {*} assets Array of assetIDs or asset models\n\t * @returns {array} A tidy array of assets\n\t */\n\ttidyAssetList: function (assets) {\n\t\tif (_.isArguments(assets)) {\n\t\t\tassets = _.rest(assets, 0);\n\t\t} else if (!_.isArray(assets)) {\n\t\t\tassets = [assets];\n\t\t}\n\n\t\tvar tidyAssets = [];\n\n\t\t_.each(assets, function (a, idx, all) {\n\t\t\tif (_.isObject(a)) {\n\t\t\t\ttidyAssets.push(a.id);\n\t\t\t} else {\n\t\t\t\ttidyAssets.push(a);\n\t\t\t}\n\t\t});\n\n\t\treturn tidyAssets;\n\t},\n\n\t/**\n\t * Determine where to place a pop-up context menu; takes the click event and a menu element\n\t * @param {event} e MouseEvent\n\t * @param {object} $menu jQuery object for the context menu\n\t * @returns {object} Position\n\t */\n\tgetMenuPosition: function (e, $menu) {\n\t\t$menu = _.toJQ($menu);\n\n\t\tvar mouseX = e.clientX,\n\t\t\tmouseY = e.clientY,\n\t\t\tboundsX = $(window).width(),\n\t\t\tboundsY = $(window).height(),\n\t\t\tmenuWidth = $menu.find('.dropdown-menu').outerWidth(),\n\t\t\tmenuHeight = $menu.find('.dropdown-menu [role=\"menu\"]').outerHeight(),\n\t\t\ttp = {position: 'absolute'},\n\t\t\tY,\n\t\t\tX;\n\n\t\tif (mouseX == null) mouseX = e.pageX;\n\t\tif (mouseY == null) mouseY = e.pageY;\n\n\t\t// If menu is going to be cutoff at bottom of screen, move it up\n\t\t// The +15 is for padding, otherwise menu can open right to the bottom\n\t\t// of the screen and look cutoff, even though it isn't\n\t\tif (mouseY + menuHeight + 15 > boundsY) {\n\t\t\tY = {top: mouseY - menuHeight + $(window).scrollTop()};\n\t\t} else {\n\t\t\tY = {top: mouseY + $(window).scrollTop()};\n\t\t}\n\n\t\t// If menu is going ot be cutoff at right of screen, move it left\n\t\tif (mouseX + menuWidth > boundsX && mouseX - menuWidth > 0) {\n\t\t\tX = {left: mouseX - menuWidth + $(window).scrollLeft()};\n\t\t} else {\n\t\t\tX = {left: mouseX + $(window).scrollLeft()};\n\t\t}\n\n\t\t// Adjust the position of the menu by its offset parent position.\n\t\tvar selectorPosition = $menu.offsetParent().offset();\n\t\tX.left = X.left - selectorPosition.left;\n\t\tY.top = Y.top - selectorPosition.top;\n\n\t\treturn $.extend(tp, Y, X);\n\t},\n\n\t/**\n\t * Utils to convert back & forth between the DAM's quoted-csv format for multiselects <-> a normal array.\n\t * TODO: escape and unescape double-quotes!\n\t * @param {string} csv CSV string\n\t * @returns {array} CSV as array\n\t */\n\tcsvToArray,\n\n\t/**\n\t * Utils to convert back & forth between the DAM's quoted-csv format for multiselects <-> a normal array.\n\t * TODO: escape and unescape double-quotes and commas!\n\t * @param {array} array Array to convert to CSV string\n\t * @returns {string} Array as CSV string\n\t */\n\tarrayToCsv,\n\n\t// Color utilities\n\t/**\n\t * Convert a color to a new shade\n\t * @param {hex} color Hex color '#000000'\n\t * @param {integer} percent Percentage of shading as an integer\n\t * @returns {hex} New shade of color '#000000'\n\t */\n\tshadeColor: function (color, percent) {\n\t\tvar R = parseInt(color.substring(1, 3), 16),\n\t\t\tG = parseInt(color.substring(3, 5), 16),\n\t\t\tB = parseInt(color.substring(5, 7), 16);\n\n\t\tR = parseInt((R * (100 + percent)) / 100);\n\t\tG = parseInt((G * (100 + percent)) / 100);\n\t\tB = parseInt((B * (100 + percent)) / 100);\n\n\t\tR = R < 255 ? R : 255;\n\t\tG = G < 255 ? G : 255;\n\t\tB = B < 255 ? B : 255;\n\n\t\tvar RR = R.toString(16).length == 1 ? '0' + R.toString(16) : R.toString(16),\n\t\t\tGG = G.toString(16).length == 1 ? '0' + G.toString(16) : G.toString(16),\n\t\t\tBB = B.toString(16).length == 1 ? '0' + B.toString(16) : B.toString(16);\n\n\t\treturn '#' + RR + GG + BB;\n\t},\n\n\t/**\n\t * Convert Hex color to RGB color\n\t * @param {hex} color Hex color to be converted to RGB\n\t * @returns {object} RGB color '{ r: 0, g: 0, b: 0 }'\n\t */\n\thexToRgb: function (hex) {\n\t\tvar result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n\t\treturn result\n\t\t\t? {\n\t\t\t\t\tr: parseInt(result[1], 16),\n\t\t\t\t\tg: parseInt(result[2], 16),\n\t\t\t\t\tb: parseInt(result[3], 16),\n\t\t\t }\n\t\t\t: {r: 0, g: 0, b: 0};\n\t},\n\t/**\n\t * Convert RGB color to HSL color\n\t * @param {hex} color Hex color to be converted to RGB\n\t * @returns {object} HSL color '{ h: 0, s: 0, l: 0 }'\n\t */\n\n\trgbToHsl: function (rgb) {\n\t\tvar r = rgb[0],\n\t\t\tg = rgb[1],\n\t\t\tb = rgb[2];\n\n\t\t// DEVNOTE: eslint flags this as an error -- https://github.com/eslint/eslint/blob/master/docs/rules/no-sequences.md\n\t\t(r /= 255), (g /= 255), (b /= 255);\n\t\t// Any reason not to use semicolons instead of commas here? -m-\n\n\t\tvar max = Math.max(r, g, b),\n\t\t\tmin = Math.min(r, g, b),\n\t\t\th,\n\t\t\ts,\n\t\t\tl = (max + min) / 2;\n\n\t\tif (max == min) {\n\t\t\th = s = 0; // achromatic\n\t\t} else {\n\t\t\tvar d = max - min;\n\t\t\ts = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\t\t\tswitch (max) {\n\t\t\t\tcase r:\n\t\t\t\t\th = (g - b) / d + (g < b ? 6 : 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase g:\n\t\t\t\t\th = (b - r) / d + 2;\n\t\t\t\t\tbreak;\n\t\t\t\tcase b:\n\t\t\t\t\th = (r - g) / d + 4;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\th /= 6;\n\t\t}\n\t\treturn {h: h, s: s, l: l};\n\t},\n\n\t/**\n\t * I feel I must me missing something here. Is it really the case that\n\t * neither JS, jQuery or underscore have a function to parse the URI query string\n\t * into an object? Please prove me wrong. -m-\n\t */\n\tparseQuery: function () {\n\t\treturn (\n\t\t\t_.chain(\n\t\t\t\t// get the query string (if any) without the leading ?\n\t\t\t\twindow.location.search\n\t\t\t\t\t.slice(1)\n\t\t\t\t\t// chop it up by &\n\t\t\t\t\t.split('&'),\n\t\t\t)\n\t\t\t\t// clean out any weird undefined stuff\n\t\t\t\t.compact()\n\t\t\t\t// chop each string into a tuple by its equals (if any)\n\t\t\t\t.map(function (item) {\n\t\t\t\t\tif (item) return item.split('=');\n\t\t\t\t})\n\t\t\t\t// uri-decode the values, if any\n\t\t\t\t// (NOTE: not sure if i'm supposed to decode the keys or not. There is no standard, apparently ...)\n\t\t\t\t.map(function (array) {\n\t\t\t\t\treturn array.length == 2 ? [array[0], decodeURI(array[1])] : array;\n\t\t\t\t})\n\t\t\t\t// Make that an object.\n\t\t\t\t.object()\n\t\t\t\t.value()\n\t\t);\n\t},\n\n\t/**\n\t * This seems like something underscore would have, but it doesn't:\n\t * http://stackoverflow.com/questions/8747561/is-there-any-way-to-rename-js-object-keys-using-underscore-js\n\t */\n\tmapKeys: function (obj, map) {\n\t\tvar result = {};\n\t\t_.chain(obj)\n\t\t\t.keys()\n\t\t\t.each(function (key) {\n\t\t\t\tvar newKey;\n\t\t\t\tif (_.isFunction(map)) {\n\t\t\t\t\tnewKey = map(key) || key;\n\t\t\t\t} else {\n\t\t\t\t\tnewKey = map[key] || key;\n\t\t\t\t}\n\t\t\t\tresult[newKey] = obj[key];\n\t\t\t});\n\t\treturn result;\n\t},\n});\n\nexport default _;\n","/**\n * Escape special characters in the URI function escapes [']\n * @param str URI string to be escaped\n * @return Escaped URI string\n * @deprecated\n * @see `@netx/core-next/utils/string/enhancedEncodeURIComponent`\n */\nexport const escapeURI = (str: string) => {\n\treturn encodeURIComponent(str).replace(\"'\", '%27');\n};\n\nexport default escapeURI;\n","/**\n * Unescape special characters in the URI function unescape [%27]\n * @param {string} str URI string to be unescaped\n * @return {string} Unescaped URI string\n *\n * @deprecated Use `decodeURIComponent` directly\\\n * Even though encodeURIComponent does not encode EVERYTHING, decodeURIComponent will decode everything\n */\nexport const unescapeURI = (str: string) => {\n\treturn decodeURIComponent(str.replace('%27', \"'\"));\n};\n\nexport default unescapeURI;\n","/** @license URI.js v4.4.1 (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n\ttypeof define === 'function' && define.amd ? define(['exports'], factory) :\n\t(factory((global.URI = global.URI || {})));\n}(this, (function (exports) { 'use strict';\n\nfunction merge() {\n for (var _len = arguments.length, sets = Array(_len), _key = 0; _key < _len; _key++) {\n sets[_key] = arguments[_key];\n }\n\n if (sets.length > 1) {\n sets[0] = sets[0].slice(0, -1);\n var xl = sets.length - 1;\n for (var x = 1; x < xl; ++x) {\n sets[x] = sets[x].slice(1, -1);\n }\n sets[xl] = sets[xl].slice(1);\n return sets.join('');\n } else {\n return sets[0];\n }\n}\nfunction subexp(str) {\n return \"(?:\" + str + \")\";\n}\nfunction typeOf(o) {\n return o === undefined ? \"undefined\" : o === null ? \"null\" : Object.prototype.toString.call(o).split(\" \").pop().split(\"]\").shift().toLowerCase();\n}\nfunction toUpperCase(str) {\n return str.toUpperCase();\n}\nfunction toArray(obj) {\n return obj !== undefined && obj !== null ? obj instanceof Array ? obj : typeof obj.length !== \"number\" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj) : [];\n}\nfunction assign(target, source) {\n var obj = target;\n if (source) {\n for (var key in source) {\n obj[key] = source[key];\n }\n }\n return obj;\n}\n\nfunction buildExps(isIRI) {\n var ALPHA$$ = \"[A-Za-z]\",\n CR$ = \"[\\\\x0D]\",\n DIGIT$$ = \"[0-9]\",\n DQUOTE$$ = \"[\\\\x22]\",\n HEXDIG$$ = merge(DIGIT$$, \"[A-Fa-f]\"),\n //case-insensitive\n LF$$ = \"[\\\\x0A]\",\n SP$$ = \"[\\\\x20]\",\n PCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)),\n //expanded\n GEN_DELIMS$$ = \"[\\\\:\\\\/\\\\?\\\\#\\\\[\\\\]\\\\@]\",\n SUB_DELIMS$$ = \"[\\\\!\\\\$\\\\&\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\=]\",\n RESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$),\n UCSCHAR$$ = isIRI ? \"[\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF]\" : \"[]\",\n //subset, excludes bidi control characters\n IPRIVATE$$ = isIRI ? \"[\\\\uE000-\\\\uF8FF]\" : \"[]\",\n //subset\n UNRESERVED$$ = merge(ALPHA$$, DIGIT$$, \"[\\\\-\\\\.\\\\_\\\\~]\", UCSCHAR$$),\n SCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\") + \"*\"),\n USERINFO$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\")) + \"*\"),\n DEC_OCTET$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"[1-9]\" + DIGIT$$) + \"|\" + DIGIT$$),\n DEC_OCTET_RELAXED$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"0?[1-9]\" + DIGIT$$) + \"|0?0?\" + DIGIT$$),\n //relaxed parsing rules\n IPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$),\n H16$ = subexp(HEXDIG$$ + \"{1,4}\"),\n LS32$ = subexp(subexp(H16$ + \"\\\\:\" + H16$) + \"|\" + IPV4ADDRESS$),\n IPV6ADDRESS1$ = subexp(subexp(H16$ + \"\\\\:\") + \"{6}\" + LS32$),\n // 6( h16 \":\" ) ls32\n IPV6ADDRESS2$ = subexp(\"\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{5}\" + LS32$),\n // \"::\" 5( h16 \":\" ) ls32\n IPV6ADDRESS3$ = subexp(subexp(H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{4}\" + LS32$),\n //[ h16 ] \"::\" 4( h16 \":\" ) ls32\n IPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,1}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{3}\" + LS32$),\n //[ *1( h16 \":\" ) h16 ] \"::\" 3( h16 \":\" ) ls32\n IPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,2}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{2}\" + LS32$),\n //[ *2( h16 \":\" ) h16 ] \"::\" 2( h16 \":\" ) ls32\n IPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,3}\" + H16$) + \"?\\\\:\\\\:\" + H16$ + \"\\\\:\" + LS32$),\n //[ *3( h16 \":\" ) h16 ] \"::\" h16 \":\" ls32\n IPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,4}\" + H16$) + \"?\\\\:\\\\:\" + LS32$),\n //[ *4( h16 \":\" ) h16 ] \"::\" ls32\n IPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,5}\" + H16$) + \"?\\\\:\\\\:\" + H16$),\n //[ *5( h16 \":\" ) h16 ] \"::\" h16\n IPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,6}\" + H16$) + \"?\\\\:\\\\:\"),\n //[ *6( h16 \":\" ) h16 ] \"::\"\n IPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join(\"|\")),\n ZONEID$ = subexp(subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$) + \"+\"),\n //RFC 6874\n IPV6ADDRZ$ = subexp(IPV6ADDRESS$ + \"\\\\%25\" + ZONEID$),\n //RFC 6874\n IPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + ZONEID$),\n //RFC 6874, with relaxed parsing rules\n IPVFUTURE$ = subexp(\"[vV]\" + HEXDIG$$ + \"+\\\\.\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\") + \"+\"),\n IP_LITERAL$ = subexp(\"\\\\[\" + subexp(IPV6ADDRZ_RELAXED$ + \"|\" + IPV6ADDRESS$ + \"|\" + IPVFUTURE$) + \"\\\\]\"),\n //RFC 6874\n REG_NAME$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$)) + \"*\"),\n HOST$ = subexp(IP_LITERAL$ + \"|\" + IPV4ADDRESS$ + \"(?!\" + REG_NAME$ + \")\" + \"|\" + REG_NAME$),\n PORT$ = subexp(DIGIT$$ + \"*\"),\n AUTHORITY$ = subexp(subexp(USERINFO$ + \"@\") + \"?\" + HOST$ + subexp(\"\\\\:\" + PORT$) + \"?\"),\n PCHAR$ = subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@]\")),\n SEGMENT$ = subexp(PCHAR$ + \"*\"),\n SEGMENT_NZ$ = subexp(PCHAR$ + \"+\"),\n SEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\@]\")) + \"+\"),\n PATH_ABEMPTY$ = subexp(subexp(\"\\\\/\" + SEGMENT$) + \"*\"),\n PATH_ABSOLUTE$ = subexp(\"\\\\/\" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + \"?\"),\n //simplified\n PATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$),\n //simplified\n PATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$),\n //simplified\n PATH_EMPTY$ = \"(?!\" + PCHAR$ + \")\",\n PATH$ = subexp(PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n QUERY$ = subexp(subexp(PCHAR$ + \"|\" + merge(\"[\\\\/\\\\?]\", IPRIVATE$$)) + \"*\"),\n FRAGMENT$ = subexp(subexp(PCHAR$ + \"|[\\\\/\\\\?]\") + \"*\"),\n HIER_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n URI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n RELATIVE_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$),\n RELATIVE$ = subexp(RELATIVE_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n URI_REFERENCE$ = subexp(URI$ + \"|\" + RELATIVE$),\n ABSOLUTE_URI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\"),\n GENERIC_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n RELATIVE_REF$ = \"^(){0}\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n ABSOLUTE_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?$\",\n SAMEDOC_REF$ = \"^\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n AUTHORITY_REF$ = \"^\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?$\";\n return {\n NOT_SCHEME: new RegExp(merge(\"[^]\", ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\"), \"g\"),\n NOT_USERINFO: new RegExp(merge(\"[^\\\\%\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n NOT_HOST: new RegExp(merge(\"[^\\\\%\\\\[\\\\]\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n NOT_PATH: new RegExp(merge(\"[^\\\\%\\\\/\\\\:\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n NOT_PATH_NOSCHEME: new RegExp(merge(\"[^\\\\%\\\\/\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n NOT_QUERY: new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\", IPRIVATE$$), \"g\"),\n NOT_FRAGMENT: new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\"), \"g\"),\n ESCAPE: new RegExp(merge(\"[^]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n UNRESERVED: new RegExp(UNRESERVED$$, \"g\"),\n OTHER_CHARS: new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, RESERVED$$), \"g\"),\n PCT_ENCODED: new RegExp(PCT_ENCODED$, \"g\"),\n IPV4ADDRESS: new RegExp(\"^(\" + IPV4ADDRESS$ + \")$\"),\n IPV6ADDRESS: new RegExp(\"^\\\\[?(\" + IPV6ADDRESS$ + \")\" + subexp(subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + \"(\" + ZONEID$ + \")\") + \"?\\\\]?$\") //RFC 6874, with relaxed parsing rules\n };\n}\nvar URI_PROTOCOL = buildExps(false);\n\nvar IRI_PROTOCOL = buildExps(true);\n\nvar slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_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\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n}();\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar toConsumableArray = function (arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n } else {\n return Array.from(arr);\n }\n};\n\n/** Highest positive signed 32-bit float value */\n\nvar maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nvar base = 36;\nvar tMin = 1;\nvar tMax = 26;\nvar skew = 38;\nvar damp = 700;\nvar initialBias = 72;\nvar initialN = 128; // 0x80\nvar delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nvar regexPunycode = /^xn--/;\nvar regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nvar regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nvar errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nvar baseMinusTMin = base - tMin;\nvar floor = Math.floor;\nvar stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error$1(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n\tvar result = [];\n\tvar length = array.length;\n\twhile (length--) {\n\t\tresult[length] = fn(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n\tvar parts = string.split('@');\n\tvar result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tstring = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tstring = string.replace(regexSeparators, '\\x2E');\n\tvar labels = string.split('.');\n\tvar encoded = map(labels, fn).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tvar output = [];\n\tvar counter = 0;\n\tvar length = string.length;\n\twhile (counter < length) {\n\t\tvar value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tvar extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) {\n\t\t\t\t// Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nvar ucs2encode = function ucs2encode(array) {\n\treturn String.fromCodePoint.apply(String, toConsumableArray(array));\n};\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nvar basicToDigit = function basicToDigit(codePoint) {\n\tif (codePoint - 0x30 < 0x0A) {\n\t\treturn codePoint - 0x16;\n\t}\n\tif (codePoint - 0x41 < 0x1A) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint - 0x61 < 0x1A) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nvar digitToBasic = function digitToBasic(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nvar adapt = function adapt(delta, numPoints, firstTime) {\n\tvar k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (; /* no initialization */delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nvar decode = function decode(input) {\n\t// Don't use UCS-2.\n\tvar output = [];\n\tvar inputLength = input.length;\n\tvar i = 0;\n\tvar n = initialN;\n\tvar bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tvar basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (var j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror$1('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (var index = basic > 0 ? basic + 1 : 0; index < inputLength;) /* no final expression */{\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tvar oldi = i;\n\t\tfor (var w = 1, k = base;; /* no condition */k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror$1('invalid-input');\n\t\t\t}\n\n\t\t\tvar digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\terror$1('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tvar t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tvar baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror$1('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\t\t}\n\n\t\tvar out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror$1('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\t}\n\n\treturn String.fromCodePoint.apply(String, output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nvar encode = function encode(input) {\n\tvar output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tvar inputLength = input.length;\n\n\t// Initialize the state.\n\tvar n = initialN;\n\tvar delta = 0;\n\tvar bias = initialBias;\n\n\t// Handle the basic code points.\n\tvar _iteratorNormalCompletion = true;\n\tvar _didIteratorError = false;\n\tvar _iteratorError = undefined;\n\n\ttry {\n\t\tfor (var _iterator = input[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t\t\tvar _currentValue2 = _step.value;\n\n\t\t\tif (_currentValue2 < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(_currentValue2));\n\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\t_didIteratorError = true;\n\t\t_iteratorError = err;\n\t} finally {\n\t\ttry {\n\t\t\tif (!_iteratorNormalCompletion && _iterator.return) {\n\t\t\t\t_iterator.return();\n\t\t\t}\n\t\t} finally {\n\t\t\tif (_didIteratorError) {\n\t\t\t\tthrow _iteratorError;\n\t\t\t}\n\t\t}\n\t}\n\n\tvar basicLength = output.length;\n\tvar handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tvar m = maxInt;\n\t\tvar _iteratorNormalCompletion2 = true;\n\t\tvar _didIteratorError2 = false;\n\t\tvar _iteratorError2 = undefined;\n\n\t\ttry {\n\t\t\tfor (var _iterator2 = input[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n\t\t\t\tvar currentValue = _step2.value;\n\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow.\n\t\t} catch (err) {\n\t\t\t_didIteratorError2 = true;\n\t\t\t_iteratorError2 = err;\n\t\t} finally {\n\t\t\ttry {\n\t\t\t\tif (!_iteratorNormalCompletion2 && _iterator2.return) {\n\t\t\t\t\t_iterator2.return();\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tif (_didIteratorError2) {\n\t\t\t\t\tthrow _iteratorError2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror$1('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tvar _iteratorNormalCompletion3 = true;\n\t\tvar _didIteratorError3 = false;\n\t\tvar _iteratorError3 = undefined;\n\n\t\ttry {\n\t\t\tfor (var _iterator3 = input[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n\t\t\t\tvar _currentValue = _step3.value;\n\n\t\t\t\tif (_currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror$1('overflow');\n\t\t\t\t}\n\t\t\t\tif (_currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\t\tvar q = delta;\n\t\t\t\t\tfor (var k = base;; /* no condition */k += base) {\n\t\t\t\t\t\tvar t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar qMinusT = q - t;\n\t\t\t\t\t\tvar baseMinusT = base - t;\n\t\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)));\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (err) {\n\t\t\t_didIteratorError3 = true;\n\t\t\t_iteratorError3 = err;\n\t\t} finally {\n\t\t\ttry {\n\t\t\t\tif (!_iteratorNormalCompletion3 && _iterator3.return) {\n\t\t\t\t\t_iterator3.return();\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tif (_didIteratorError3) {\n\t\t\t\t\tthrow _iteratorError3;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nvar toUnicode = function toUnicode(input) {\n\treturn mapDomain(input, function (string) {\n\t\treturn regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nvar toASCII = function toASCII(input) {\n\treturn mapDomain(input, function (string) {\n\t\treturn regexNonASCII.test(string) ? 'xn--' + encode(string) : string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nvar punycode = {\n\t/**\n * A string representing the current Punycode.js version number.\n * @memberOf punycode\n * @type String\n */\n\t'version': '2.1.0',\n\t/**\n * An object of methods to convert from JavaScript's internal character\n * representation (UCS-2) to Unicode code points, and back.\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode\n * @type Object\n */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\n/**\n * URI.js\n *\n * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript.\n * @author <a href=\"mailto:gary.court@gmail.com\">Gary Court</a>\n * @see http://github.com/garycourt/uri-js\n */\n/**\n * Copyright 2011 Gary Court. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this list of\n * conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice, this list\n * of conditions and the following disclaimer in the documentation and/or other materials\n * provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY GARY COURT ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of Gary Court.\n */\nvar SCHEMES = {};\nfunction pctEncChar(chr) {\n var c = chr.charCodeAt(0);\n var e = void 0;\n if (c < 16) e = \"%0\" + c.toString(16).toUpperCase();else if (c < 128) e = \"%\" + c.toString(16).toUpperCase();else if (c < 2048) e = \"%\" + (c >> 6 | 192).toString(16).toUpperCase() + \"%\" + (c & 63 | 128).toString(16).toUpperCase();else e = \"%\" + (c >> 12 | 224).toString(16).toUpperCase() + \"%\" + (c >> 6 & 63 | 128).toString(16).toUpperCase() + \"%\" + (c & 63 | 128).toString(16).toUpperCase();\n return e;\n}\nfunction pctDecChars(str) {\n var newStr = \"\";\n var i = 0;\n var il = str.length;\n while (i < il) {\n var c = parseInt(str.substr(i + 1, 2), 16);\n if (c < 128) {\n newStr += String.fromCharCode(c);\n i += 3;\n } else if (c >= 194 && c < 224) {\n if (il - i >= 6) {\n var c2 = parseInt(str.substr(i + 4, 2), 16);\n newStr += String.fromCharCode((c & 31) << 6 | c2 & 63);\n } else {\n newStr += str.substr(i, 6);\n }\n i += 6;\n } else if (c >= 224) {\n if (il - i >= 9) {\n var _c = parseInt(str.substr(i + 4, 2), 16);\n var c3 = parseInt(str.substr(i + 7, 2), 16);\n newStr += String.fromCharCode((c & 15) << 12 | (_c & 63) << 6 | c3 & 63);\n } else {\n newStr += str.substr(i, 9);\n }\n i += 9;\n } else {\n newStr += str.substr(i, 3);\n i += 3;\n }\n }\n return newStr;\n}\nfunction _normalizeComponentEncoding(components, protocol) {\n function decodeUnreserved(str) {\n var decStr = pctDecChars(str);\n return !decStr.match(protocol.UNRESERVED) ? str : decStr;\n }\n if (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, \"\");\n if (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n if (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n if (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n if (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n if (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n return components;\n}\n\nfunction _stripLeadingZeros(str) {\n return str.replace(/^0*(.*)/, \"$1\") || \"0\";\n}\nfunction _normalizeIPv4(host, protocol) {\n var matches = host.match(protocol.IPV4ADDRESS) || [];\n\n var _matches = slicedToArray(matches, 2),\n address = _matches[1];\n\n if (address) {\n return address.split(\".\").map(_stripLeadingZeros).join(\".\");\n } else {\n return host;\n }\n}\nfunction _normalizeIPv6(host, protocol) {\n var matches = host.match(protocol.IPV6ADDRESS) || [];\n\n var _matches2 = slicedToArray(matches, 3),\n address = _matches2[1],\n zone = _matches2[2];\n\n if (address) {\n var _address$toLowerCase$ = address.toLowerCase().split('::').reverse(),\n _address$toLowerCase$2 = slicedToArray(_address$toLowerCase$, 2),\n last = _address$toLowerCase$2[0],\n first = _address$toLowerCase$2[1];\n\n var firstFields = first ? first.split(\":\").map(_stripLeadingZeros) : [];\n var lastFields = last.split(\":\").map(_stripLeadingZeros);\n var isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]);\n var fieldCount = isLastFieldIPv4Address ? 7 : 8;\n var lastFieldsStart = lastFields.length - fieldCount;\n var fields = Array(fieldCount);\n for (var x = 0; x < fieldCount; ++x) {\n fields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || '';\n }\n if (isLastFieldIPv4Address) {\n fields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol);\n }\n var allZeroFields = fields.reduce(function (acc, field, index) {\n if (!field || field === \"0\") {\n var lastLongest = acc[acc.length - 1];\n if (lastLongest && lastLongest.index + lastLongest.length === index) {\n lastLongest.length++;\n } else {\n acc.push({ index: index, length: 1 });\n }\n }\n return acc;\n }, []);\n var longestZeroFields = allZeroFields.sort(function (a, b) {\n return b.length - a.length;\n })[0];\n var newHost = void 0;\n if (longestZeroFields && longestZeroFields.length > 1) {\n var newFirst = fields.slice(0, longestZeroFields.index);\n var newLast = fields.slice(longestZeroFields.index + longestZeroFields.length);\n newHost = newFirst.join(\":\") + \"::\" + newLast.join(\":\");\n } else {\n newHost = fields.join(\":\");\n }\n if (zone) {\n newHost += \"%\" + zone;\n }\n return newHost;\n } else {\n return host;\n }\n}\nvar URI_PARSE = /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:([^\\/?#@]*)@)?(\\[[^\\/?#\\]]+\\]|[^\\/?#:]*)(?:\\:(\\d*))?))?([^?#]*)(?:\\?([^#]*))?(?:#((?:.|\\n|\\r)*))?/i;\nvar NO_MATCH_IS_UNDEFINED = \"\".match(/(){0}/)[1] === undefined;\nfunction parse(uriString) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var components = {};\n var protocol = options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL;\n if (options.reference === \"suffix\") uriString = (options.scheme ? options.scheme + \":\" : \"\") + \"//\" + uriString;\n var matches = uriString.match(URI_PARSE);\n if (matches) {\n if (NO_MATCH_IS_UNDEFINED) {\n //store each component\n components.scheme = matches[1];\n components.userinfo = matches[3];\n components.host = matches[4];\n components.port = parseInt(matches[5], 10);\n components.path = matches[6] || \"\";\n components.query = matches[7];\n components.fragment = matches[8];\n //fix port number\n if (isNaN(components.port)) {\n components.port = matches[5];\n }\n } else {\n //IE FIX for improper RegExp matching\n //store each component\n components.scheme = matches[1] || undefined;\n components.userinfo = uriString.indexOf(\"@\") !== -1 ? matches[3] : undefined;\n components.host = uriString.indexOf(\"//\") !== -1 ? matches[4] : undefined;\n components.port = parseInt(matches[5], 10);\n components.path = matches[6] || \"\";\n components.query = uriString.indexOf(\"?\") !== -1 ? matches[7] : undefined;\n components.fragment = uriString.indexOf(\"#\") !== -1 ? matches[8] : undefined;\n //fix port number\n if (isNaN(components.port)) {\n components.port = uriString.match(/\\/\\/(?:.|\\n)*\\:(?:\\/|\\?|\\#|$)/) ? matches[4] : undefined;\n }\n }\n if (components.host) {\n //normalize IP hosts\n components.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol);\n }\n //determine reference type\n if (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) {\n components.reference = \"same-document\";\n } else if (components.scheme === undefined) {\n components.reference = \"relative\";\n } else if (components.fragment === undefined) {\n components.reference = \"absolute\";\n } else {\n components.reference = \"uri\";\n }\n //check for reference errors\n if (options.reference && options.reference !== \"suffix\" && options.reference !== components.reference) {\n components.error = components.error || \"URI is not a \" + options.reference + \" reference.\";\n }\n //find scheme handler\n var schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n //check if scheme can't handle IRIs\n if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {\n //if host component is a domain name\n if (components.host && (options.domainHost || schemeHandler && schemeHandler.domainHost)) {\n //convert Unicode IDN -> ASCII IDN\n try {\n components.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase());\n } catch (e) {\n components.error = components.error || \"Host's domain name can not be converted to ASCII via punycode: \" + e;\n }\n }\n //convert IRI -> URI\n _normalizeComponentEncoding(components, URI_PROTOCOL);\n } else {\n //normalize encodings\n _normalizeComponentEncoding(components, protocol);\n }\n //perform scheme specific parsing\n if (schemeHandler && schemeHandler.parse) {\n schemeHandler.parse(components, options);\n }\n } else {\n components.error = components.error || \"URI can not be parsed.\";\n }\n return components;\n}\n\nfunction _recomposeAuthority(components, options) {\n var protocol = options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL;\n var uriTokens = [];\n if (components.userinfo !== undefined) {\n uriTokens.push(components.userinfo);\n uriTokens.push(\"@\");\n }\n if (components.host !== undefined) {\n //normalize IP hosts, add brackets and escape zone separator for IPv6\n uriTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, function (_, $1, $2) {\n return \"[\" + $1 + ($2 ? \"%25\" + $2 : \"\") + \"]\";\n }));\n }\n if (typeof components.port === \"number\" || typeof components.port === \"string\") {\n uriTokens.push(\":\");\n uriTokens.push(String(components.port));\n }\n return uriTokens.length ? uriTokens.join(\"\") : undefined;\n}\n\nvar RDS1 = /^\\.\\.?\\//;\nvar RDS2 = /^\\/\\.(\\/|$)/;\nvar RDS3 = /^\\/\\.\\.(\\/|$)/;\nvar RDS5 = /^\\/?(?:.|\\n)*?(?=\\/|$)/;\nfunction removeDotSegments(input) {\n var output = [];\n while (input.length) {\n if (input.match(RDS1)) {\n input = input.replace(RDS1, \"\");\n } else if (input.match(RDS2)) {\n input = input.replace(RDS2, \"/\");\n } else if (input.match(RDS3)) {\n input = input.replace(RDS3, \"/\");\n output.pop();\n } else if (input === \".\" || input === \"..\") {\n input = \"\";\n } else {\n var im = input.match(RDS5);\n if (im) {\n var s = im[0];\n input = input.slice(s.length);\n output.push(s);\n } else {\n throw new Error(\"Unexpected dot segment condition\");\n }\n }\n }\n return output.join(\"\");\n}\n\nfunction serialize(components) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var protocol = options.iri ? IRI_PROTOCOL : URI_PROTOCOL;\n var uriTokens = [];\n //find scheme handler\n var schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n //perform scheme specific serialization\n if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options);\n if (components.host) {\n //if host component is an IPv6 address\n if (protocol.IPV6ADDRESS.test(components.host)) {}\n //TODO: normalize IPv6 address as per RFC 5952\n\n //if host component is a domain name\n else if (options.domainHost || schemeHandler && schemeHandler.domainHost) {\n //convert IDN via punycode\n try {\n components.host = !options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host);\n } catch (e) {\n components.error = components.error || \"Host's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n }\n }\n }\n //normalize encoding\n _normalizeComponentEncoding(components, protocol);\n if (options.reference !== \"suffix\" && components.scheme) {\n uriTokens.push(components.scheme);\n uriTokens.push(\":\");\n }\n var authority = _recomposeAuthority(components, options);\n if (authority !== undefined) {\n if (options.reference !== \"suffix\") {\n uriTokens.push(\"//\");\n }\n uriTokens.push(authority);\n if (components.path && components.path.charAt(0) !== \"/\") {\n uriTokens.push(\"/\");\n }\n }\n if (components.path !== undefined) {\n var s = components.path;\n if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n s = removeDotSegments(s);\n }\n if (authority === undefined) {\n s = s.replace(/^\\/\\//, \"/%2F\"); //don't allow the path to start with \"//\"\n }\n uriTokens.push(s);\n }\n if (components.query !== undefined) {\n uriTokens.push(\"?\");\n uriTokens.push(components.query);\n }\n if (components.fragment !== undefined) {\n uriTokens.push(\"#\");\n uriTokens.push(components.fragment);\n }\n return uriTokens.join(\"\"); //merge tokens into a string\n}\n\nfunction resolveComponents(base, relative) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var skipNormalization = arguments[3];\n\n var target = {};\n if (!skipNormalization) {\n base = parse(serialize(base, options), options); //normalize base components\n relative = parse(serialize(relative, options), options); //normalize relative components\n }\n options = options || {};\n if (!options.tolerant && relative.scheme) {\n target.scheme = relative.scheme;\n //target.authority = relative.authority;\n target.userinfo = relative.userinfo;\n target.host = relative.host;\n target.port = relative.port;\n target.path = removeDotSegments(relative.path || \"\");\n target.query = relative.query;\n } else {\n if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n //target.authority = relative.authority;\n target.userinfo = relative.userinfo;\n target.host = relative.host;\n target.port = relative.port;\n target.path = removeDotSegments(relative.path || \"\");\n target.query = relative.query;\n } else {\n if (!relative.path) {\n target.path = base.path;\n if (relative.query !== undefined) {\n target.query = relative.query;\n } else {\n target.query = base.query;\n }\n } else {\n if (relative.path.charAt(0) === \"/\") {\n target.path = removeDotSegments(relative.path);\n } else {\n if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n target.path = \"/\" + relative.path;\n } else if (!base.path) {\n target.path = relative.path;\n } else {\n target.path = base.path.slice(0, base.path.lastIndexOf(\"/\") + 1) + relative.path;\n }\n target.path = removeDotSegments(target.path);\n }\n target.query = relative.query;\n }\n //target.authority = base.authority;\n target.userinfo = base.userinfo;\n target.host = base.host;\n target.port = base.port;\n }\n target.scheme = base.scheme;\n }\n target.fragment = relative.fragment;\n return target;\n}\n\nfunction resolve(baseURI, relativeURI, options) {\n var schemelessOptions = assign({ scheme: 'null' }, options);\n return serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions);\n}\n\nfunction normalize(uri, options) {\n if (typeof uri === \"string\") {\n uri = serialize(parse(uri, options), options);\n } else if (typeOf(uri) === \"object\") {\n uri = parse(serialize(uri, options), options);\n }\n return uri;\n}\n\nfunction equal(uriA, uriB, options) {\n if (typeof uriA === \"string\") {\n uriA = serialize(parse(uriA, options), options);\n } else if (typeOf(uriA) === \"object\") {\n uriA = serialize(uriA, options);\n }\n if (typeof uriB === \"string\") {\n uriB = serialize(parse(uriB, options), options);\n } else if (typeOf(uriB) === \"object\") {\n uriB = serialize(uriB, options);\n }\n return uriA === uriB;\n}\n\nfunction escapeComponent(str, options) {\n return str && str.toString().replace(!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE, pctEncChar);\n}\n\nfunction unescapeComponent(str, options) {\n return str && str.toString().replace(!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED, pctDecChars);\n}\n\nvar handler = {\n scheme: \"http\",\n domainHost: true,\n parse: function parse(components, options) {\n //report missing host\n if (!components.host) {\n components.error = components.error || \"HTTP URIs must have a host.\";\n }\n return components;\n },\n serialize: function serialize(components, options) {\n var secure = String(components.scheme).toLowerCase() === \"https\";\n //normalize the default port\n if (components.port === (secure ? 443 : 80) || components.port === \"\") {\n components.port = undefined;\n }\n //normalize the empty path\n if (!components.path) {\n components.path = \"/\";\n }\n //NOTE: We do not parse query strings for HTTP URIs\n //as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n //and not the HTTP spec.\n return components;\n }\n};\n\nvar handler$1 = {\n scheme: \"https\",\n domainHost: handler.domainHost,\n parse: handler.parse,\n serialize: handler.serialize\n};\n\nfunction isSecure(wsComponents) {\n return typeof wsComponents.secure === 'boolean' ? wsComponents.secure : String(wsComponents.scheme).toLowerCase() === \"wss\";\n}\n//RFC 6455\nvar handler$2 = {\n scheme: \"ws\",\n domainHost: true,\n parse: function parse(components, options) {\n var wsComponents = components;\n //indicate if the secure flag is set\n wsComponents.secure = isSecure(wsComponents);\n //construct resouce name\n wsComponents.resourceName = (wsComponents.path || '/') + (wsComponents.query ? '?' + wsComponents.query : '');\n wsComponents.path = undefined;\n wsComponents.query = undefined;\n return wsComponents;\n },\n serialize: function serialize(wsComponents, options) {\n //normalize the default port\n if (wsComponents.port === (isSecure(wsComponents) ? 443 : 80) || wsComponents.port === \"\") {\n wsComponents.port = undefined;\n }\n //ensure scheme matches secure flag\n if (typeof wsComponents.secure === 'boolean') {\n wsComponents.scheme = wsComponents.secure ? 'wss' : 'ws';\n wsComponents.secure = undefined;\n }\n //reconstruct path from resource name\n if (wsComponents.resourceName) {\n var _wsComponents$resourc = wsComponents.resourceName.split('?'),\n _wsComponents$resourc2 = slicedToArray(_wsComponents$resourc, 2),\n path = _wsComponents$resourc2[0],\n query = _wsComponents$resourc2[1];\n\n wsComponents.path = path && path !== '/' ? path : undefined;\n wsComponents.query = query;\n wsComponents.resourceName = undefined;\n }\n //forbid fragment component\n wsComponents.fragment = undefined;\n return wsComponents;\n }\n};\n\nvar handler$3 = {\n scheme: \"wss\",\n domainHost: handler$2.domainHost,\n parse: handler$2.parse,\n serialize: handler$2.serialize\n};\n\nvar O = {};\nvar isIRI = true;\n//RFC 3986\nvar UNRESERVED$$ = \"[A-Za-z0-9\\\\-\\\\.\\\\_\\\\~\" + (isIRI ? \"\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF\" : \"\") + \"]\";\nvar HEXDIG$$ = \"[0-9A-Fa-f]\"; //case-insensitive\nvar PCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)); //expanded\n//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; =\n//const ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\#\\\\$\\\\%\\\\&\\\\'\\\\*\\\\+\\\\-\\\\/\\\\=\\\\?\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QTEXT$$ = \"[\\\\x01-\\\\x08\\\\x0B\\\\x0C\\\\x0E-\\\\x1F\\\\x7F]\"; //(%d1-8 / %d11-12 / %d14-31 / %d127)\n//const QTEXT$$ = merge(\"[\\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E]\", OBS_QTEXT$$); //%d33 / %d35-91 / %d93-126 / obs-qtext\n//const VCHAR$$ = \"[\\\\x21-\\\\x7E]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QP$ = subexp(\"\\\\\\\\\" + merge(\"[\\\\x00\\\\x0D\\\\x0A]\", OBS_QTEXT$$)); //%d0 / CR / LF / obs-qtext\n//const FWS$ = subexp(subexp(WSP$$ + \"*\" + \"\\\\x0D\\\\x0A\") + \"?\" + WSP$$ + \"+\");\n//const QUOTED_PAIR$ = subexp(subexp(\"\\\\\\\\\" + subexp(VCHAR$$ + \"|\" + WSP$$)) + \"|\" + OBS_QP$);\n//const QUOTED_STRING$ = subexp('\\\\\"' + subexp(FWS$ + \"?\" + QCONTENT$) + \"*\" + FWS$ + \"?\" + '\\\\\"');\nvar ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\$\\\\%\\\\'\\\\*\\\\+\\\\-\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\nvar QTEXT$$ = \"[\\\\!\\\\$\\\\%\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\-\\\\.0-9\\\\<\\\\>A-Z\\\\x5E-\\\\x7E]\";\nvar VCHAR$$ = merge(QTEXT$$, \"[\\\\\\\"\\\\\\\\]\");\nvar SOME_DELIMS$$ = \"[\\\\!\\\\$\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\:\\\\@]\";\nvar UNRESERVED = new RegExp(UNRESERVED$$, \"g\");\nvar PCT_ENCODED = new RegExp(PCT_ENCODED$, \"g\");\nvar NOT_LOCAL_PART = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", '[\\\\\"]', VCHAR$$), \"g\");\nvar NOT_HFNAME = new RegExp(merge(\"[^]\", UNRESERVED$$, SOME_DELIMS$$), \"g\");\nvar NOT_HFVALUE = NOT_HFNAME;\nfunction decodeUnreserved(str) {\n var decStr = pctDecChars(str);\n return !decStr.match(UNRESERVED) ? str : decStr;\n}\nvar handler$4 = {\n scheme: \"mailto\",\n parse: function parse$$1(components, options) {\n var mailtoComponents = components;\n var to = mailtoComponents.to = mailtoComponents.path ? mailtoComponents.path.split(\",\") : [];\n mailtoComponents.path = undefined;\n if (mailtoComponents.query) {\n var unknownHeaders = false;\n var headers = {};\n var hfields = mailtoComponents.query.split(\"&\");\n for (var x = 0, xl = hfields.length; x < xl; ++x) {\n var hfield = hfields[x].split(\"=\");\n switch (hfield[0]) {\n case \"to\":\n var toAddrs = hfield[1].split(\",\");\n for (var _x = 0, _xl = toAddrs.length; _x < _xl; ++_x) {\n to.push(toAddrs[_x]);\n }\n break;\n case \"subject\":\n mailtoComponents.subject = unescapeComponent(hfield[1], options);\n break;\n case \"body\":\n mailtoComponents.body = unescapeComponent(hfield[1], options);\n break;\n default:\n unknownHeaders = true;\n headers[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options);\n break;\n }\n }\n if (unknownHeaders) mailtoComponents.headers = headers;\n }\n mailtoComponents.query = undefined;\n for (var _x2 = 0, _xl2 = to.length; _x2 < _xl2; ++_x2) {\n var addr = to[_x2].split(\"@\");\n addr[0] = unescapeComponent(addr[0]);\n if (!options.unicodeSupport) {\n //convert Unicode IDN -> ASCII IDN\n try {\n addr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase());\n } catch (e) {\n mailtoComponents.error = mailtoComponents.error || \"Email address's domain name can not be converted to ASCII via punycode: \" + e;\n }\n } else {\n addr[1] = unescapeComponent(addr[1], options).toLowerCase();\n }\n to[_x2] = addr.join(\"@\");\n }\n return mailtoComponents;\n },\n serialize: function serialize$$1(mailtoComponents, options) {\n var components = mailtoComponents;\n var to = toArray(mailtoComponents.to);\n if (to) {\n for (var x = 0, xl = to.length; x < xl; ++x) {\n var toAddr = String(to[x]);\n var atIdx = toAddr.lastIndexOf(\"@\");\n var localPart = toAddr.slice(0, atIdx).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar);\n var domain = toAddr.slice(atIdx + 1);\n //convert IDN via punycode\n try {\n domain = !options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain);\n } catch (e) {\n components.error = components.error || \"Email address's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n }\n to[x] = localPart + \"@\" + domain;\n }\n components.path = to.join(\",\");\n }\n var headers = mailtoComponents.headers = mailtoComponents.headers || {};\n if (mailtoComponents.subject) headers[\"subject\"] = mailtoComponents.subject;\n if (mailtoComponents.body) headers[\"body\"] = mailtoComponents.body;\n var fields = [];\n for (var name in headers) {\n if (headers[name] !== O[name]) {\n fields.push(name.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) + \"=\" + headers[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar));\n }\n }\n if (fields.length) {\n components.query = fields.join(\"&\");\n }\n return components;\n }\n};\n\nvar URN_PARSE = /^([^\\:]+)\\:(.*)/;\n//RFC 2141\nvar handler$5 = {\n scheme: \"urn\",\n parse: function parse$$1(components, options) {\n var matches = components.path && components.path.match(URN_PARSE);\n var urnComponents = components;\n if (matches) {\n var scheme = options.scheme || urnComponents.scheme || \"urn\";\n var nid = matches[1].toLowerCase();\n var nss = matches[2];\n var urnScheme = scheme + \":\" + (options.nid || nid);\n var schemeHandler = SCHEMES[urnScheme];\n urnComponents.nid = nid;\n urnComponents.nss = nss;\n urnComponents.path = undefined;\n if (schemeHandler) {\n urnComponents = schemeHandler.parse(urnComponents, options);\n }\n } else {\n urnComponents.error = urnComponents.error || \"URN can not be parsed.\";\n }\n return urnComponents;\n },\n serialize: function serialize$$1(urnComponents, options) {\n var scheme = options.scheme || urnComponents.scheme || \"urn\";\n var nid = urnComponents.nid;\n var urnScheme = scheme + \":\" + (options.nid || nid);\n var schemeHandler = SCHEMES[urnScheme];\n if (schemeHandler) {\n urnComponents = schemeHandler.serialize(urnComponents, options);\n }\n var uriComponents = urnComponents;\n var nss = urnComponents.nss;\n uriComponents.path = (nid || options.nid) + \":\" + nss;\n return uriComponents;\n }\n};\n\nvar UUID = /^[0-9A-Fa-f]{8}(?:\\-[0-9A-Fa-f]{4}){3}\\-[0-9A-Fa-f]{12}$/;\n//RFC 4122\nvar handler$6 = {\n scheme: \"urn:uuid\",\n parse: function parse(urnComponents, options) {\n var uuidComponents = urnComponents;\n uuidComponents.uuid = uuidComponents.nss;\n uuidComponents.nss = undefined;\n if (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) {\n uuidComponents.error = uuidComponents.error || \"UUID is not valid.\";\n }\n return uuidComponents;\n },\n serialize: function serialize(uuidComponents, options) {\n var urnComponents = uuidComponents;\n //normalize UUID\n urnComponents.nss = (uuidComponents.uuid || \"\").toLowerCase();\n return urnComponents;\n }\n};\n\nSCHEMES[handler.scheme] = handler;\nSCHEMES[handler$1.scheme] = handler$1;\nSCHEMES[handler$2.scheme] = handler$2;\nSCHEMES[handler$3.scheme] = handler$3;\nSCHEMES[handler$4.scheme] = handler$4;\nSCHEMES[handler$5.scheme] = handler$5;\nSCHEMES[handler$6.scheme] = handler$6;\n\nexports.SCHEMES = SCHEMES;\nexports.pctEncChar = pctEncChar;\nexports.pctDecChars = pctDecChars;\nexports.parse = parse;\nexports.removeDotSegments = removeDotSegments;\nexports.serialize = serialize;\nexports.resolveComponents = resolveComponents;\nexports.resolve = resolve;\nexports.normalize = normalize;\nexports.equal = equal;\nexports.escapeComponent = escapeComponent;\nexports.unescapeComponent = unescapeComponent;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n//# sourceMappingURL=uri.all.js.map\n","// Backbone.js 1.3.3\n\n// (c) 2010-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n// Backbone may be freely distributed under the MIT license.\n// For all details and documentation:\n// http://backbonejs.org\n\n(function(factory) {\n\n // Establish the root object, `window` (`self`) in the browser, or `global` on the server.\n // We use `self` instead of `window` for `WebWorker` support.\n var root = (typeof self == 'object' && self.self === self && self) ||\n (typeof global == 'object' && global.global === global && global);\n\n // Set up Backbone appropriately for the environment. Start with AMD.\n if (typeof define === 'function' && define.amd) {\n define(['underscore', 'jquery', 'exports'], function(_, $, exports) {\n // Export global even in AMD case in case this script is loaded with\n // others that may still expect a global Backbone.\n root.Backbone = factory(root, exports, _, $);\n });\n\n // Next for Node.js or CommonJS. jQuery may not be needed as a module.\n } else if (typeof exports !== 'undefined') {\n var _ = require('underscore'), $;\n try { $ = require('jquery'); } catch (e) {}\n factory(root, exports, _, $);\n\n // Finally, as a browser global.\n } else {\n root.Backbone = factory(root, {}, root._, (root.jQuery || root.Zepto || root.ender || root.$));\n }\n\n})(function(root, Backbone, _, $) {\n\n // Initial Setup\n // -------------\n\n // Save the previous value of the `Backbone` variable, so that it can be\n // restored later on, if `noConflict` is used.\n var previousBackbone = root.Backbone;\n\n // Create a local reference to a common array method we'll want to use later.\n var slice = Array.prototype.slice;\n\n // Current version of the library. Keep in sync with `package.json`.\n Backbone.VERSION = '1.3.3';\n\n // For Backbone's purposes, jQuery, Zepto, Ender, or My Library (kidding) owns\n // the `$` variable.\n Backbone.$ = $;\n\n // Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable\n // to its previous owner. Returns a reference to this Backbone object.\n Backbone.noConflict = function() {\n root.Backbone = previousBackbone;\n return this;\n };\n\n // Turn on `emulateHTTP` to support legacy HTTP servers. Setting this option\n // will fake `\"PATCH\"`, `\"PUT\"` and `\"DELETE\"` requests via the `_method` parameter and\n // set a `X-Http-Method-Override` header.\n Backbone.emulateHTTP = false;\n\n // Turn on `emulateJSON` to support legacy servers that can't deal with direct\n // `application/json` requests ... this will encode the body as\n // `application/x-www-form-urlencoded` instead and will send the model in a\n // form param named `model`.\n Backbone.emulateJSON = false;\n\n // Proxy Backbone class methods to Underscore functions, wrapping the model's\n // `attributes` object or collection's `models` array behind the scenes.\n //\n // collection.filter(function(model) { return model.get('age') > 10 });\n // collection.each(this.addView);\n //\n // `Function#apply` can be slow so we use the method's arg count, if we know it.\n var addMethod = function(length, method, attribute) {\n switch (length) {\n case 1: return function() {\n return _[method](this[attribute]);\n };\n case 2: return function(value) {\n return _[method](this[attribute], value);\n };\n case 3: return function(iteratee, context) {\n return _[method](this[attribute], cb(iteratee, this), context);\n };\n case 4: return function(iteratee, defaultVal, context) {\n return _[method](this[attribute], cb(iteratee, this), defaultVal, context);\n };\n default: return function() {\n var args = slice.call(arguments);\n args.unshift(this[attribute]);\n return _[method].apply(_, args);\n };\n }\n };\n var addUnderscoreMethods = function(Class, methods, attribute) {\n _.each(methods, function(length, method) {\n if (_[method]) Class.prototype[method] = addMethod(length, method, attribute);\n });\n };\n\n // Support `collection.sortBy('attr')` and `collection.findWhere({id: 1})`.\n var cb = function(iteratee, instance) {\n if (_.isFunction(iteratee)) return iteratee;\n if (_.isObject(iteratee) && !instance._isModel(iteratee)) return modelMatcher(iteratee);\n if (_.isString(iteratee)) return function(model) { return model.get(iteratee); };\n return iteratee;\n };\n var modelMatcher = function(attrs) {\n var matcher = _.matches(attrs);\n return function(model) {\n return matcher(model.attributes);\n };\n };\n\n // Backbone.Events\n // ---------------\n\n // A module that can be mixed in to *any object* in order to provide it with\n // a custom event channel. You may bind a callback to an event with `on` or\n // remove with `off`; `trigger`-ing an event fires all callbacks in\n // succession.\n //\n // var object = {};\n // _.extend(object, Backbone.Events);\n // object.on('expand', function(){ alert('expanded'); });\n // object.trigger('expand');\n //\n var Events = Backbone.Events = {};\n\n // Regular expression used to split event strings.\n var eventSplitter = /\\s+/;\n\n // Iterates over the standard `event, callback` (as well as the fancy multiple\n // space-separated events `\"change blur\", callback` and jQuery-style event\n // maps `{event: callback}`).\n var eventsApi = function(iteratee, events, name, callback, opts) {\n var i = 0, names;\n if (name && typeof name === 'object') {\n // Handle event maps.\n if (callback !== void 0 && 'context' in opts && opts.context === void 0) opts.context = callback;\n for (names = _.keys(name); i < names.length ; i++) {\n events = eventsApi(iteratee, events, names[i], name[names[i]], opts);\n }\n } else if (name && eventSplitter.test(name)) {\n // Handle space-separated event names by delegating them individually.\n for (names = name.split(eventSplitter); i < names.length; i++) {\n events = iteratee(events, names[i], callback, opts);\n }\n } else {\n // Finally, standard events.\n events = iteratee(events, name, callback, opts);\n }\n return events;\n };\n\n // Bind an event to a `callback` function. Passing `\"all\"` will bind\n // the callback to all events fired.\n Events.on = function(name, callback, context) {\n return internalOn(this, name, callback, context);\n };\n\n // Guard the `listening` argument from the public API.\n var internalOn = function(obj, name, callback, context, listening) {\n obj._events = eventsApi(onApi, obj._events || {}, name, callback, {\n context: context,\n ctx: obj,\n listening: listening\n });\n\n if (listening) {\n var listeners = obj._listeners || (obj._listeners = {});\n listeners[listening.id] = listening;\n }\n\n return obj;\n };\n\n // Inversion-of-control versions of `on`. Tell *this* object to listen to\n // an event in another object... keeping track of what it's listening to\n // for easier unbinding later.\n Events.listenTo = function(obj, name, callback) {\n if (!obj) return this;\n var id = obj._listenId || (obj._listenId = _.uniqueId('l'));\n var listeningTo = this._listeningTo || (this._listeningTo = {});\n var listening = listeningTo[id];\n\n // This object is not listening to any other events on `obj` yet.\n // Setup the necessary references to track the listening callbacks.\n if (!listening) {\n var thisId = this._listenId || (this._listenId = _.uniqueId('l'));\n listening = listeningTo[id] = {obj: obj, objId: id, id: thisId, listeningTo: listeningTo, count: 0};\n }\n\n // Bind callbacks on obj, and keep track of them on listening.\n internalOn(obj, name, callback, this, listening);\n return this;\n };\n\n // The reducing API that adds a callback to the `events` object.\n var onApi = function(events, name, callback, options) {\n if (callback) {\n var handlers = events[name] || (events[name] = []);\n var context = options.context, ctx = options.ctx, listening = options.listening;\n if (listening) listening.count++;\n\n handlers.push({callback: callback, context: context, ctx: context || ctx, listening: listening});\n }\n return events;\n };\n\n // Remove one or many callbacks. If `context` is null, removes all\n // callbacks with that function. If `callback` is null, removes all\n // callbacks for the event. If `name` is null, removes all bound\n // callbacks for all events.\n Events.off = function(name, callback, context) {\n if (!this._events) return this;\n this._events = eventsApi(offApi, this._events, name, callback, {\n context: context,\n listeners: this._listeners\n });\n return this;\n };\n\n // Tell this object to stop listening to either specific events ... or\n // to every object it's currently listening to.\n Events.stopListening = function(obj, name, callback) {\n var listeningTo = this._listeningTo;\n if (!listeningTo) return this;\n\n var ids = obj ? [obj._listenId] : _.keys(listeningTo);\n\n for (var i = 0; i < ids.length; i++) {\n var listening = listeningTo[ids[i]];\n\n // If listening doesn't exist, this object is not currently\n // listening to obj. Break out early.\n if (!listening) break;\n\n listening.obj.off(name, callback, this);\n }\n\n return this;\n };\n\n // The reducing API that removes a callback from the `events` object.\n var offApi = function(events, name, callback, options) {\n if (!events) return;\n\n var i = 0, listening;\n var context = options.context, listeners = options.listeners;\n\n // Delete all events listeners and \"drop\" events.\n if (!name && !callback && !context) {\n var ids = _.keys(listeners);\n for (; i < ids.length; i++) {\n listening = listeners[ids[i]];\n delete listeners[listening.id];\n delete listening.listeningTo[listening.objId];\n }\n return;\n }\n\n var names = name ? [name] : _.keys(events);\n for (; i < names.length; i++) {\n name = names[i];\n var handlers = events[name];\n\n // Bail out if there are no events stored.\n if (!handlers) break;\n\n // Replace events if there are any remaining. Otherwise, clean up.\n var remaining = [];\n for (var j = 0; j < handlers.length; j++) {\n var handler = handlers[j];\n if (\n callback && callback !== handler.callback &&\n callback !== handler.callback._callback ||\n context && context !== handler.context\n ) {\n remaining.push(handler);\n } else {\n listening = handler.listening;\n if (listening && --listening.count === 0) {\n delete listeners[listening.id];\n delete listening.listeningTo[listening.objId];\n }\n }\n }\n\n // Update tail event if the list has any events. Otherwise, clean up.\n if (remaining.length) {\n events[name] = remaining;\n } else {\n delete events[name];\n }\n }\n return events;\n };\n\n // Bind an event to only be triggered a single time. After the first time\n // the callback is invoked, its listener will be removed. If multiple events\n // are passed in using the space-separated syntax, the handler will fire\n // once for each event, not once for a combination of all events.\n Events.once = function(name, callback, context) {\n // Map the event into a `{event: once}` object.\n var events = eventsApi(onceMap, {}, name, callback, _.bind(this.off, this));\n if (typeof name === 'string' && context == null) callback = void 0;\n return this.on(events, callback, context);\n };\n\n // Inversion-of-control versions of `once`.\n Events.listenToOnce = function(obj, name, callback) {\n // Map the event into a `{event: once}` object.\n var events = eventsApi(onceMap, {}, name, callback, _.bind(this.stopListening, this, obj));\n return this.listenTo(obj, events);\n };\n\n // Reduces the event callbacks into a map of `{event: onceWrapper}`.\n // `offer` unbinds the `onceWrapper` after it has been called.\n var onceMap = function(map, name, callback, offer) {\n if (callback) {\n var once = map[name] = _.once(function() {\n offer(name, once);\n callback.apply(this, arguments);\n });\n once._callback = callback;\n }\n return map;\n };\n\n // Trigger one or many events, firing all bound callbacks. Callbacks are\n // passed the same arguments as `trigger` is, apart from the event name\n // (unless you're listening on `\"all\"`, which will cause your callback to\n // receive the true name of the event as the first argument).\n Events.trigger = function(name) {\n if (!this._events) return this;\n\n var length = Math.max(0, arguments.length - 1);\n var args = Array(length);\n for (var i = 0; i < length; i++) args[i] = arguments[i + 1];\n\n eventsApi(triggerApi, this._events, name, void 0, args);\n return this;\n };\n\n // Handles triggering the appropriate event callbacks.\n var triggerApi = function(objEvents, name, callback, args) {\n if (objEvents) {\n var events = objEvents[name];\n var allEvents = objEvents.all;\n if (events && allEvents) allEvents = allEvents.slice();\n if (events) triggerEvents(events, args);\n if (allEvents) triggerEvents(allEvents, [name].concat(args));\n }\n return objEvents;\n };\n\n // A difficult-to-believe, but optimized internal dispatch function for\n // triggering events. Tries to keep the usual cases speedy (most internal\n // Backbone events have 3 arguments).\n var triggerEvents = function(events, args) {\n var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2];\n switch (args.length) {\n case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return;\n case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return;\n case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return;\n case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return;\n default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args); return;\n }\n };\n\n // Aliases for backwards compatibility.\n Events.bind = Events.on;\n Events.unbind = Events.off;\n\n // Allow the `Backbone` object to serve as a global event bus, for folks who\n // want global \"pubsub\" in a convenient place.\n _.extend(Backbone, Events);\n\n // Backbone.Model\n // --------------\n\n // Backbone **Models** are the basic data object in the framework --\n // frequently representing a row in a table in a database on your server.\n // A discrete chunk of data and a bunch of useful, related methods for\n // performing computations and transformations on that data.\n\n // Create a new model with the specified attributes. A client id (`cid`)\n // is automatically generated and assigned for you.\n var Model = Backbone.Model = function(attributes, options) {\n var attrs = attributes || {};\n options || (options = {});\n this.cid = _.uniqueId(this.cidPrefix);\n this.attributes = {};\n if (options.collection) this.collection = options.collection;\n if (options.parse) attrs = this.parse(attrs, options) || {};\n var defaults = _.result(this, 'defaults');\n attrs = _.defaults(_.extend({}, defaults, attrs), defaults);\n this.set(attrs, options);\n this.changed = {};\n this.initialize.apply(this, arguments);\n };\n\n // Attach all inheritable methods to the Model prototype.\n _.extend(Model.prototype, Events, {\n\n // A hash of attributes whose current and previous value differ.\n changed: null,\n\n // The value returned during the last failed validation.\n validationError: null,\n\n // The default name for the JSON `id` attribute is `\"id\"`. MongoDB and\n // CouchDB users may want to set this to `\"_id\"`.\n idAttribute: 'id',\n\n // The prefix is used to create the client id which is used to identify models locally.\n // You may want to override this if you're experiencing name clashes with model ids.\n cidPrefix: 'c',\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // Return a copy of the model's `attributes` object.\n toJSON: function(options) {\n return _.clone(this.attributes);\n },\n\n // Proxy `Backbone.sync` by default -- but override this if you need\n // custom syncing semantics for *this* particular model.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n\n // Get the value of an attribute.\n get: function(attr) {\n return this.attributes[attr];\n },\n\n // Get the HTML-escaped value of an attribute.\n escape: function(attr) {\n return _.escape(this.get(attr));\n },\n\n // Returns `true` if the attribute contains a value that is not null\n // or undefined.\n has: function(attr) {\n return this.get(attr) != null;\n },\n\n // Special-cased proxy to underscore's `_.matches` method.\n matches: function(attrs) {\n return !!_.iteratee(attrs, this)(this.attributes);\n },\n\n // Set a hash of model attributes on the object, firing `\"change\"`. This is\n // the core primitive operation of a model, updating the data and notifying\n // anyone who needs to know about the change in state. The heart of the beast.\n set: function(key, val, options) {\n if (key == null) return this;\n\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n var attrs;\n if (typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n\n options || (options = {});\n\n // Run validation.\n if (!this._validate(attrs, options)) return false;\n\n // Extract attributes and options.\n var unset = options.unset;\n var silent = options.silent;\n var changes = [];\n var changing = this._changing;\n this._changing = true;\n\n if (!changing) {\n this._previousAttributes = _.clone(this.attributes);\n this.changed = {};\n }\n\n var current = this.attributes;\n var changed = this.changed;\n var prev = this._previousAttributes;\n\n // For each `set` attribute, update or delete the current value.\n for (var attr in attrs) {\n val = attrs[attr];\n if (!_.isEqual(current[attr], val)) changes.push(attr);\n if (!_.isEqual(prev[attr], val)) {\n changed[attr] = val;\n } else {\n delete changed[attr];\n }\n unset ? delete current[attr] : current[attr] = val;\n }\n\n // Update the `id`.\n if (this.idAttribute in attrs) this.id = this.get(this.idAttribute);\n\n // Trigger all relevant attribute changes.\n if (!silent) {\n if (changes.length) this._pending = options;\n for (var i = 0; i < changes.length; i++) {\n this.trigger('change:' + changes[i], this, current[changes[i]], options);\n }\n }\n\n // You might be wondering why there's a `while` loop here. Changes can\n // be recursively nested within `\"change\"` events.\n if (changing) return this;\n if (!silent) {\n while (this._pending) {\n options = this._pending;\n this._pending = false;\n this.trigger('change', this, options);\n }\n }\n this._pending = false;\n this._changing = false;\n return this;\n },\n\n // Remove an attribute from the model, firing `\"change\"`. `unset` is a noop\n // if the attribute doesn't exist.\n unset: function(attr, options) {\n return this.set(attr, void 0, _.extend({}, options, {unset: true}));\n },\n\n // Clear all attributes on the model, firing `\"change\"`.\n clear: function(options) {\n var attrs = {};\n for (var key in this.attributes) attrs[key] = void 0;\n return this.set(attrs, _.extend({}, options, {unset: true}));\n },\n\n // Determine if the model has changed since the last `\"change\"` event.\n // If you specify an attribute name, determine if that attribute has changed.\n hasChanged: function(attr) {\n if (attr == null) return !_.isEmpty(this.changed);\n return _.has(this.changed, attr);\n },\n\n // Return an object containing all the attributes that have changed, or\n // false if there are no changed attributes. Useful for determining what\n // parts of a view need to be updated and/or what attributes need to be\n // persisted to the server. Unset attributes will be set to undefined.\n // You can also pass an attributes object to diff against the model,\n // determining if there *would be* a change.\n changedAttributes: function(diff) {\n if (!diff) return this.hasChanged() ? _.clone(this.changed) : false;\n var old = this._changing ? this._previousAttributes : this.attributes;\n var changed = {};\n for (var attr in diff) {\n var val = diff[attr];\n if (_.isEqual(old[attr], val)) continue;\n changed[attr] = val;\n }\n return _.size(changed) ? changed : false;\n },\n\n // Get the previous value of an attribute, recorded at the time the last\n // `\"change\"` event was fired.\n previous: function(attr) {\n if (attr == null || !this._previousAttributes) return null;\n return this._previousAttributes[attr];\n },\n\n // Get all of the attributes of the model at the time of the previous\n // `\"change\"` event.\n previousAttributes: function() {\n return _.clone(this._previousAttributes);\n },\n\n // Fetch the model from the server, merging the response with the model's\n // local attributes. Any changed attributes will trigger a \"change\" event.\n fetch: function(options) {\n options = _.extend({parse: true}, options);\n var model = this;\n var success = options.success;\n options.success = function(resp) {\n var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n if (!model.set(serverAttrs, options)) return false;\n if (success) success.call(options.context, model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n\n // Set a hash of model attributes, and sync the model to the server.\n // If the server returns an attributes hash that differs, the model's\n // state will be `set` again.\n save: function(key, val, options) {\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n var attrs;\n if (key == null || typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n\n options = _.extend({validate: true, parse: true}, options);\n var wait = options.wait;\n\n // If we're not waiting and attributes exist, save acts as\n // `set(attr).save(null, opts)` with validation. Otherwise, check if\n // the model will be valid when the attributes, if any, are set.\n if (attrs && !wait) {\n if (!this.set(attrs, options)) return false;\n } else if (!this._validate(attrs, options)) {\n return false;\n }\n\n // After a successful server-side save, the client is (optionally)\n // updated with the server-side state.\n var model = this;\n var success = options.success;\n var attributes = this.attributes;\n options.success = function(resp) {\n // Ensure attributes are restored during synchronous saves.\n model.attributes = attributes;\n var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n if (wait) serverAttrs = _.extend({}, attrs, serverAttrs);\n if (serverAttrs && !model.set(serverAttrs, options)) return false;\n if (success) success.call(options.context, model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n\n // Set temporary attributes if `{wait: true}` to properly find new ids.\n if (attrs && wait) this.attributes = _.extend({}, attributes, attrs);\n\n var method = this.isNew() ? 'create' : (options.patch ? 'patch' : 'update');\n if (method === 'patch' && !options.attrs) options.attrs = attrs;\n var xhr = this.sync(method, this, options);\n\n // Restore attributes.\n this.attributes = attributes;\n\n return xhr;\n },\n\n // Destroy this model on the server if it was already persisted.\n // Optimistically removes the model from its collection, if it has one.\n // If `wait: true` is passed, waits for the server to respond before removal.\n destroy: function(options) {\n options = options ? _.clone(options) : {};\n var model = this;\n var success = options.success;\n var wait = options.wait;\n\n var destroy = function() {\n model.stopListening();\n model.trigger('destroy', model, model.collection, options);\n };\n\n options.success = function(resp) {\n if (wait) destroy();\n if (success) success.call(options.context, model, resp, options);\n if (!model.isNew()) model.trigger('sync', model, resp, options);\n };\n\n var xhr = false;\n if (this.isNew()) {\n _.defer(options.success);\n } else {\n wrapError(this, options);\n xhr = this.sync('delete', this, options);\n }\n if (!wait) destroy();\n return xhr;\n },\n\n // Default URL for the model's representation on the server -- if you're\n // using Backbone's restful methods, override this to change the endpoint\n // that will be called.\n url: function() {\n var base =\n _.result(this, 'urlRoot') ||\n _.result(this.collection, 'url') ||\n urlError();\n if (this.isNew()) return base;\n var id = this.get(this.idAttribute);\n return base.replace(/[^\\/]$/, '$&/') + encodeURIComponent(id);\n },\n\n // **parse** converts a response into the hash of attributes to be `set` on\n // the model. The default implementation is just to pass the response along.\n parse: function(resp, options) {\n return resp;\n },\n\n // Create a new model with identical attributes to this one.\n clone: function() {\n return new this.constructor(this.attributes);\n },\n\n // A model is new if it has never been saved to the server, and lacks an id.\n isNew: function() {\n return !this.has(this.idAttribute);\n },\n\n // Check if the model is currently in a valid state.\n isValid: function(options) {\n return this._validate({}, _.extend({}, options, {validate: true}));\n },\n\n // Run validation against the next complete set of model attributes,\n // returning `true` if all is well. Otherwise, fire an `\"invalid\"` event.\n _validate: function(attrs, options) {\n if (!options.validate || !this.validate) return true;\n attrs = _.extend({}, this.attributes, attrs);\n var error = this.validationError = this.validate(attrs, options) || null;\n if (!error) return true;\n this.trigger('invalid', this, error, _.extend(options, {validationError: error}));\n return false;\n }\n\n });\n\n // Underscore methods that we want to implement on the Model, mapped to the\n // number of arguments they take.\n var modelMethods = {keys: 1, values: 1, pairs: 1, invert: 1, pick: 0,\n omit: 0, chain: 1, isEmpty: 1};\n\n // Mix in each Underscore method as a proxy to `Model#attributes`.\n addUnderscoreMethods(Model, modelMethods, 'attributes');\n\n // Backbone.Collection\n // -------------------\n\n // If models tend to represent a single row of data, a Backbone Collection is\n // more analogous to a table full of data ... or a small slice or page of that\n // table, or a collection of rows that belong together for a particular reason\n // -- all of the messages in this particular folder, all of the documents\n // belonging to this particular author, and so on. Collections maintain\n // indexes of their models, both in order, and for lookup by `id`.\n\n // Create a new **Collection**, perhaps to contain a specific type of `model`.\n // If a `comparator` is specified, the Collection will maintain\n // its models in sort order, as they're added and removed.\n var Collection = Backbone.Collection = function(models, options) {\n options || (options = {});\n if (options.model) this.model = options.model;\n if (options.comparator !== void 0) this.comparator = options.comparator;\n this._reset();\n this.initialize.apply(this, arguments);\n if (models) this.reset(models, _.extend({silent: true}, options));\n };\n\n // Default options for `Collection#set`.\n var setOptions = {add: true, remove: true, merge: true};\n var addOptions = {add: true, remove: false};\n\n // Splices `insert` into `array` at index `at`.\n var splice = function(array, insert, at) {\n at = Math.min(Math.max(at, 0), array.length);\n var tail = Array(array.length - at);\n var length = insert.length;\n var i;\n for (i = 0; i < tail.length; i++) tail[i] = array[i + at];\n for (i = 0; i < length; i++) array[i + at] = insert[i];\n for (i = 0; i < tail.length; i++) array[i + length + at] = tail[i];\n };\n\n // Define the Collection's inheritable methods.\n _.extend(Collection.prototype, Events, {\n\n // The default model for a collection is just a **Backbone.Model**.\n // This should be overridden in most cases.\n model: Model,\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // The JSON representation of a Collection is an array of the\n // models' attributes.\n toJSON: function(options) {\n return this.map(function(model) { return model.toJSON(options); });\n },\n\n // Proxy `Backbone.sync` by default.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n\n // Add a model, or list of models to the set. `models` may be Backbone\n // Models or raw JavaScript objects to be converted to Models, or any\n // combination of the two.\n add: function(models, options) {\n return this.set(models, _.extend({merge: false}, options, addOptions));\n },\n\n // Remove a model, or a list of models from the set.\n remove: function(models, options) {\n options = _.extend({}, options);\n var singular = !_.isArray(models);\n models = singular ? [models] : models.slice();\n var removed = this._removeModels(models, options);\n if (!options.silent && removed.length) {\n options.changes = {added: [], merged: [], removed: removed};\n this.trigger('update', this, options);\n }\n return singular ? removed[0] : removed;\n },\n\n // Update a collection by `set`-ing a new list of models, adding new ones,\n // removing models that are no longer present, and merging models that\n // already exist in the collection, as necessary. Similar to **Model#set**,\n // the core operation for updating the data contained by the collection.\n set: function(models, options) {\n if (models == null) return;\n\n options = _.extend({}, setOptions, options);\n if (options.parse && !this._isModel(models)) {\n models = this.parse(models, options) || [];\n }\n\n var singular = !_.isArray(models);\n models = singular ? [models] : models.slice();\n\n var at = options.at;\n if (at != null) at = +at;\n if (at > this.length) at = this.length;\n if (at < 0) at += this.length + 1;\n\n var set = [];\n var toAdd = [];\n var toMerge = [];\n var toRemove = [];\n var modelMap = {};\n\n var add = options.add;\n var merge = options.merge;\n var remove = options.remove;\n\n var sort = false;\n var sortable = this.comparator && at == null && options.sort !== false;\n var sortAttr = _.isString(this.comparator) ? this.comparator : null;\n\n // Turn bare objects into model references, and prevent invalid models\n // from being added.\n var model, i;\n for (i = 0; i < models.length; i++) {\n model = models[i];\n\n // If a duplicate is found, prevent it from being added and\n // optionally merge it into the existing model.\n var existing = this.get(model);\n if (existing) {\n if (merge && model !== existing) {\n var attrs = this._isModel(model) ? model.attributes : model;\n if (options.parse) attrs = existing.parse(attrs, options);\n existing.set(attrs, options);\n toMerge.push(existing);\n if (sortable && !sort) sort = existing.hasChanged(sortAttr);\n }\n if (!modelMap[existing.cid]) {\n modelMap[existing.cid] = true;\n set.push(existing);\n }\n models[i] = existing;\n\n // If this is a new, valid model, push it to the `toAdd` list.\n } else if (add) {\n model = models[i] = this._prepareModel(model, options);\n if (model) {\n toAdd.push(model);\n this._addReference(model, options);\n modelMap[model.cid] = true;\n set.push(model);\n }\n }\n }\n\n // Remove stale models.\n if (remove) {\n for (i = 0; i < this.length; i++) {\n model = this.models[i];\n if (!modelMap[model.cid]) toRemove.push(model);\n }\n if (toRemove.length) this._removeModels(toRemove, options);\n }\n\n // See if sorting is needed, update `length` and splice in new models.\n var orderChanged = false;\n var replace = !sortable && add && remove;\n if (set.length && replace) {\n orderChanged = this.length !== set.length || _.some(this.models, function(m, index) {\n return m !== set[index];\n });\n this.models.length = 0;\n splice(this.models, set, 0);\n this.length = this.models.length;\n } else if (toAdd.length) {\n if (sortable) sort = true;\n splice(this.models, toAdd, at == null ? this.length : at);\n this.length = this.models.length;\n }\n\n // Silently sort the collection if appropriate.\n if (sort) this.sort({silent: true});\n\n // Unless silenced, it's time to fire all appropriate add/sort/update events.\n if (!options.silent) {\n for (i = 0; i < toAdd.length; i++) {\n if (at != null) options.index = at + i;\n model = toAdd[i];\n model.trigger('add', model, this, options);\n }\n if (sort || orderChanged) this.trigger('sort', this, options);\n if (toAdd.length || toRemove.length || toMerge.length) {\n options.changes = {\n added: toAdd,\n removed: toRemove,\n merged: toMerge\n };\n this.trigger('update', this, options);\n }\n }\n\n // Return the added (or merged) model (or models).\n return singular ? models[0] : models;\n },\n\n // When you have more items than you want to add or remove individually,\n // you can reset the entire set with a new list of models, without firing\n // any granular `add` or `remove` events. Fires `reset` when finished.\n // Useful for bulk operations and optimizations.\n reset: function(models, options) {\n options = options ? _.clone(options) : {};\n for (var i = 0; i < this.models.length; i++) {\n this._removeReference(this.models[i], options);\n }\n options.previousModels = this.models;\n this._reset();\n models = this.add(models, _.extend({silent: true}, options));\n if (!options.silent) this.trigger('reset', this, options);\n return models;\n },\n\n // Add a model to the end of the collection.\n push: function(model, options) {\n return this.add(model, _.extend({at: this.length}, options));\n },\n\n // Remove a model from the end of the collection.\n pop: function(options) {\n var model = this.at(this.length - 1);\n return this.remove(model, options);\n },\n\n // Add a model to the beginning of the collection.\n unshift: function(model, options) {\n return this.add(model, _.extend({at: 0}, options));\n },\n\n // Remove a model from the beginning of the collection.\n shift: function(options) {\n var model = this.at(0);\n return this.remove(model, options);\n },\n\n // Slice out a sub-array of models from the collection.\n slice: function() {\n return slice.apply(this.models, arguments);\n },\n\n // Get a model from the set by id, cid, model object with id or cid\n // properties, or an attributes object that is transformed through modelId.\n get: function(obj) {\n if (obj == null) return void 0;\n return this._byId[obj] ||\n this._byId[this.modelId(obj.attributes || obj)] ||\n obj.cid && this._byId[obj.cid];\n },\n\n // Returns `true` if the model is in the collection.\n has: function(obj) {\n return this.get(obj) != null;\n },\n\n // Get the model at the given index.\n at: function(index) {\n if (index < 0) index += this.length;\n return this.models[index];\n },\n\n // Return models with matching attributes. Useful for simple cases of\n // `filter`.\n where: function(attrs, first) {\n return this[first ? 'find' : 'filter'](attrs);\n },\n\n // Return the first model with matching attributes. Useful for simple cases\n // of `find`.\n findWhere: function(attrs) {\n return this.where(attrs, true);\n },\n\n // Force the collection to re-sort itself. You don't need to call this under\n // normal circumstances, as the set will maintain sort order as each item\n // is added.\n sort: function(options) {\n var comparator = this.comparator;\n if (!comparator) throw new Error('Cannot sort a set without a comparator');\n options || (options = {});\n\n var length = comparator.length;\n if (_.isFunction(comparator)) comparator = _.bind(comparator, this);\n\n // Run sort based on type of `comparator`.\n if (length === 1 || _.isString(comparator)) {\n this.models = this.sortBy(comparator);\n } else {\n this.models.sort(comparator);\n }\n if (!options.silent) this.trigger('sort', this, options);\n return this;\n },\n\n // Pluck an attribute from each model in the collection.\n pluck: function(attr) {\n return this.map(attr + '');\n },\n\n // Fetch the default set of models for this collection, resetting the\n // collection when they arrive. If `reset: true` is passed, the response\n // data will be passed through the `reset` method instead of `set`.\n fetch: function(options) {\n options = _.extend({parse: true}, options);\n var success = options.success;\n var collection = this;\n options.success = function(resp) {\n var method = options.reset ? 'reset' : 'set';\n collection[method](resp, options);\n if (success) success.call(options.context, collection, resp, options);\n collection.trigger('sync', collection, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n\n // Create a new instance of a model in this collection. Add the model to the\n // collection immediately, unless `wait: true` is passed, in which case we\n // wait for the server to agree.\n create: function(model, options) {\n options = options ? _.clone(options) : {};\n var wait = options.wait;\n model = this._prepareModel(model, options);\n if (!model) return false;\n if (!wait) this.add(model, options);\n var collection = this;\n var success = options.success;\n options.success = function(m, resp, callbackOpts) {\n if (wait) collection.add(m, callbackOpts);\n if (success) success.call(callbackOpts.context, m, resp, callbackOpts);\n };\n model.save(null, options);\n return model;\n },\n\n // **parse** converts a response into a list of models to be added to the\n // collection. The default implementation is just to pass it through.\n parse: function(resp, options) {\n return resp;\n },\n\n // Create a new collection with an identical list of models as this one.\n clone: function() {\n return new this.constructor(this.models, {\n model: this.model,\n comparator: this.comparator\n });\n },\n\n // Define how to uniquely identify models in the collection.\n modelId: function(attrs) {\n return attrs[this.model.prototype.idAttribute || 'id'];\n },\n\n // Private method to reset all internal state. Called when the collection\n // is first initialized or reset.\n _reset: function() {\n this.length = 0;\n this.models = [];\n this._byId = {};\n },\n\n // Prepare a hash of attributes (or other model) to be added to this\n // collection.\n _prepareModel: function(attrs, options) {\n if (this._isModel(attrs)) {\n if (!attrs.collection) attrs.collection = this;\n return attrs;\n }\n options = options ? _.clone(options) : {};\n options.collection = this;\n var model = new this.model(attrs, options);\n if (!model.validationError) return model;\n this.trigger('invalid', this, model.validationError, options);\n return false;\n },\n\n // Internal method called by both remove and set.\n _removeModels: function(models, options) {\n var removed = [];\n for (var i = 0; i < models.length; i++) {\n var model = this.get(models[i]);\n if (!model) continue;\n\n var index = this.indexOf(model);\n this.models.splice(index, 1);\n this.length--;\n\n // Remove references before triggering 'remove' event to prevent an\n // infinite loop. #3693\n delete this._byId[model.cid];\n var id = this.modelId(model.attributes);\n if (id != null) delete this._byId[id];\n\n if (!options.silent) {\n options.index = index;\n model.trigger('remove', model, this, options);\n }\n\n removed.push(model);\n this._removeReference(model, options);\n }\n return removed;\n },\n\n // Method for checking whether an object should be considered a model for\n // the purposes of adding to the collection.\n _isModel: function(model) {\n return model instanceof Model;\n },\n\n // Internal method to create a model's ties to a collection.\n _addReference: function(model, options) {\n this._byId[model.cid] = model;\n var id = this.modelId(model.attributes);\n if (id != null) this._byId[id] = model;\n model.on('all', this._onModelEvent, this);\n },\n\n // Internal method to sever a model's ties to a collection.\n _removeReference: function(model, options) {\n delete this._byId[model.cid];\n var id = this.modelId(model.attributes);\n if (id != null) delete this._byId[id];\n if (this === model.collection) delete model.collection;\n model.off('all', this._onModelEvent, this);\n },\n\n // Internal method called every time a model in the set fires an event.\n // Sets need to update their indexes when models change ids. All other\n // events simply proxy through. \"add\" and \"remove\" events that originate\n // in other collections are ignored.\n _onModelEvent: function(event, model, collection, options) {\n if (model) {\n if ((event === 'add' || event === 'remove') && collection !== this) return;\n if (event === 'destroy') this.remove(model, options);\n if (event === 'change') {\n var prevId = this.modelId(model.previousAttributes());\n var id = this.modelId(model.attributes);\n if (prevId !== id) {\n if (prevId != null) delete this._byId[prevId];\n if (id != null) this._byId[id] = model;\n }\n }\n }\n this.trigger.apply(this, arguments);\n }\n\n });\n\n // Underscore methods that we want to implement on the Collection.\n // 90% of the core usefulness of Backbone Collections is actually implemented\n // right here:\n var collectionMethods = {forEach: 3, each: 3, map: 3, collect: 3, reduce: 0,\n foldl: 0, inject: 0, reduceRight: 0, foldr: 0, find: 3, detect: 3, filter: 3,\n select: 3, reject: 3, every: 3, all: 3, some: 3, any: 3, include: 3, includes: 3,\n contains: 3, invoke: 0, max: 3, min: 3, toArray: 1, size: 1, first: 3,\n head: 3, take: 3, initial: 3, rest: 3, tail: 3, drop: 3, last: 3,\n without: 0, difference: 0, indexOf: 3, shuffle: 1, lastIndexOf: 3,\n isEmpty: 1, chain: 1, sample: 3, partition: 3, groupBy: 3, countBy: 3,\n sortBy: 3, indexBy: 3, findIndex: 3, findLastIndex: 3};\n\n // Mix in each Underscore method as a proxy to `Collection#models`.\n addUnderscoreMethods(Collection, collectionMethods, 'models');\n\n // Backbone.View\n // -------------\n\n // Backbone Views are almost more convention than they are actual code. A View\n // is simply a JavaScript object that represents a logical chunk of UI in the\n // DOM. This might be a single item, an entire list, a sidebar or panel, or\n // even the surrounding frame which wraps your whole app. Defining a chunk of\n // UI as a **View** allows you to define your DOM events declaratively, without\n // having to worry about render order ... and makes it easy for the view to\n // react to specific changes in the state of your models.\n\n // Creating a Backbone.View creates its initial element outside of the DOM,\n // if an existing element is not provided...\n var View = Backbone.View = function(options) {\n this.cid = _.uniqueId('view');\n _.extend(this, _.pick(options, viewOptions));\n this._ensureElement();\n this.initialize.apply(this, arguments);\n };\n\n // Cached regex to split keys for `delegate`.\n var delegateEventSplitter = /^(\\S+)\\s*(.*)$/;\n\n // List of view options to be set as properties.\n var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events'];\n\n // Set up all inheritable **Backbone.View** properties and methods.\n _.extend(View.prototype, Events, {\n\n // The default `tagName` of a View's element is `\"div\"`.\n tagName: 'div',\n\n // jQuery delegate for element lookup, scoped to DOM elements within the\n // current view. This should be preferred to global lookups where possible.\n $: function(selector) {\n return this.$el.find(selector);\n },\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // **render** is the core function that your view should override, in order\n // to populate its element (`this.el`), with the appropriate HTML. The\n // convention is for **render** to always return `this`.\n render: function() {\n return this;\n },\n\n // Remove this view by taking the element out of the DOM, and removing any\n // applicable Backbone.Events listeners.\n remove: function() {\n this._removeElement();\n this.stopListening();\n return this;\n },\n\n // Remove this view's element from the document and all event listeners\n // attached to it. Exposed for subclasses using an alternative DOM\n // manipulation API.\n _removeElement: function() {\n this.$el.remove();\n },\n\n // Change the view's element (`this.el` property) and re-delegate the\n // view's events on the new element.\n setElement: function(element) {\n this.undelegateEvents();\n this._setElement(element);\n this.delegateEvents();\n return this;\n },\n\n // Creates the `this.el` and `this.$el` references for this view using the\n // given `el`. `el` can be a CSS selector or an HTML string, a jQuery\n // context or an element. Subclasses can override this to utilize an\n // alternative DOM manipulation API and are only required to set the\n // `this.el` property.\n _setElement: function(el) {\n this.$el = el instanceof Backbone.$ ? el : Backbone.$(el);\n this.el = this.$el[0];\n },\n\n // Set callbacks, where `this.events` is a hash of\n //\n // *{\"event selector\": \"callback\"}*\n //\n // {\n // 'mousedown .title': 'edit',\n // 'click .button': 'save',\n // 'click .open': function(e) { ... }\n // }\n //\n // pairs. Callbacks will be bound to the view, with `this` set properly.\n // Uses event delegation for efficiency.\n // Omitting the selector binds the event to `this.el`.\n delegateEvents: function(events) {\n events || (events = _.result(this, 'events'));\n if (!events) return this;\n this.undelegateEvents();\n for (var key in events) {\n var method = events[key];\n if (!_.isFunction(method)) method = this[method];\n if (!method) continue;\n var match = key.match(delegateEventSplitter);\n this.delegate(match[1], match[2], _.bind(method, this));\n }\n return this;\n },\n\n // Add a single event listener to the view's element (or a child element\n // using `selector`). This only works for delegate-able events: not `focus`,\n // `blur`, and not `change`, `submit`, and `reset` in Internet Explorer.\n delegate: function(eventName, selector, listener) {\n this.$el.on(eventName + '.delegateEvents' + this.cid, selector, listener);\n return this;\n },\n\n // Clears all callbacks previously bound to the view by `delegateEvents`.\n // You usually don't need to use this, but may wish to if you have multiple\n // Backbone views attached to the same DOM element.\n undelegateEvents: function() {\n if (this.$el) this.$el.off('.delegateEvents' + this.cid);\n return this;\n },\n\n // A finer-grained `undelegateEvents` for removing a single delegated event.\n // `selector` and `listener` are both optional.\n undelegate: function(eventName, selector, listener) {\n this.$el.off(eventName + '.delegateEvents' + this.cid, selector, listener);\n return this;\n },\n\n // Produces a DOM element to be assigned to your view. Exposed for\n // subclasses using an alternative DOM manipulation API.\n _createElement: function(tagName) {\n return document.createElement(tagName);\n },\n\n // Ensure that the View has a DOM element to render into.\n // If `this.el` is a string, pass it through `$()`, take the first\n // matching element, and re-assign it to `el`. Otherwise, create\n // an element from the `id`, `className` and `tagName` properties.\n _ensureElement: function() {\n if (!this.el) {\n var attrs = _.extend({}, _.result(this, 'attributes'));\n if (this.id) attrs.id = _.result(this, 'id');\n if (this.className) attrs['class'] = _.result(this, 'className');\n this.setElement(this._createElement(_.result(this, 'tagName')));\n this._setAttributes(attrs);\n } else {\n this.setElement(_.result(this, 'el'));\n }\n },\n\n // Set attributes from a hash on this view's element. Exposed for\n // subclasses using an alternative DOM manipulation API.\n _setAttributes: function(attributes) {\n this.$el.attr(attributes);\n }\n\n });\n\n // Backbone.sync\n // -------------\n\n // Override this function to change the manner in which Backbone persists\n // models to the server. You will be passed the type of request, and the\n // model in question. By default, makes a RESTful Ajax request\n // to the model's `url()`. Some possible customizations could be:\n //\n // * Use `setTimeout` to batch rapid-fire updates into a single request.\n // * Send up the models as XML instead of JSON.\n // * Persist models via WebSockets instead of Ajax.\n //\n // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests\n // as `POST`, with a `_method` parameter containing the true HTTP method,\n // as well as all requests with the body as `application/x-www-form-urlencoded`\n // instead of `application/json` with the model in a param named `model`.\n // Useful when interfacing with server-side languages like **PHP** that make\n // it difficult to read the body of `PUT` requests.\n Backbone.sync = function(method, model, options) {\n var type = methodMap[method];\n\n // Default options, unless specified.\n _.defaults(options || (options = {}), {\n emulateHTTP: Backbone.emulateHTTP,\n emulateJSON: Backbone.emulateJSON\n });\n\n // Default JSON-request options.\n var params = {type: type, dataType: 'json'};\n\n // Ensure that we have a URL.\n if (!options.url) {\n params.url = _.result(model, 'url') || urlError();\n }\n\n // Ensure that we have the appropriate request data.\n if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {\n params.contentType = 'application/json';\n params.data = JSON.stringify(options.attrs || model.toJSON(options));\n }\n\n // For older servers, emulate JSON by encoding the request into an HTML-form.\n if (options.emulateJSON) {\n params.contentType = 'application/x-www-form-urlencoded';\n params.data = params.data ? {model: params.data} : {};\n }\n\n // For older servers, emulate HTTP by mimicking the HTTP method with `_method`\n // And an `X-HTTP-Method-Override` header.\n if (options.emulateHTTP && (type === 'PUT' || type === 'DELETE' || type === 'PATCH')) {\n params.type = 'POST';\n if (options.emulateJSON) params.data._method = type;\n var beforeSend = options.beforeSend;\n options.beforeSend = function(xhr) {\n xhr.setRequestHeader('X-HTTP-Method-Override', type);\n if (beforeSend) return beforeSend.apply(this, arguments);\n };\n }\n\n // Don't process data on a non-GET request.\n if (params.type !== 'GET' && !options.emulateJSON) {\n params.processData = false;\n }\n\n // Pass along `textStatus` and `errorThrown` from jQuery.\n var error = options.error;\n options.error = function(xhr, textStatus, errorThrown) {\n options.textStatus = textStatus;\n options.errorThrown = errorThrown;\n if (error) error.call(options.context, xhr, textStatus, errorThrown);\n };\n\n // Make the request, allowing the user to override any Ajax options.\n var xhr = options.xhr = Backbone.ajax(_.extend(params, options));\n model.trigger('request', model, xhr, options);\n return xhr;\n };\n\n // Map from CRUD to HTTP for our default `Backbone.sync` implementation.\n var methodMap = {\n 'create': 'POST',\n 'update': 'PUT',\n 'patch': 'PATCH',\n 'delete': 'DELETE',\n 'read': 'GET'\n };\n\n // Set the default implementation of `Backbone.ajax` to proxy through to `$`.\n // Override this if you'd like to use a different library.\n Backbone.ajax = function() {\n return Backbone.$.ajax.apply(Backbone.$, arguments);\n };\n\n // Backbone.Router\n // ---------------\n\n // Routers map faux-URLs to actions, and fire events when routes are\n // matched. Creating a new one sets its `routes` hash, if not set statically.\n var Router = Backbone.Router = function(options) {\n options || (options = {});\n if (options.routes) this.routes = options.routes;\n this._bindRoutes();\n this.initialize.apply(this, arguments);\n };\n\n // Cached regular expressions for matching named param parts and splatted\n // parts of route strings.\n var optionalParam = /\\((.*?)\\)/g;\n var namedParam = /(\\(\\?)?:\\w+/g;\n var splatParam = /\\*\\w+/g;\n var escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n\n // Set up all inheritable **Backbone.Router** properties and methods.\n _.extend(Router.prototype, Events, {\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // Manually bind a single named route to a callback. For example:\n //\n // this.route('search/:query/p:num', 'search', function(query, num) {\n // ...\n // });\n //\n route: function(route, name, callback) {\n if (!_.isRegExp(route)) route = this._routeToRegExp(route);\n if (_.isFunction(name)) {\n callback = name;\n name = '';\n }\n if (!callback) callback = this[name];\n var router = this;\n Backbone.history.route(route, function(fragment) {\n var args = router._extractParameters(route, fragment);\n if (router.execute(callback, args, name) !== false) {\n router.trigger.apply(router, ['route:' + name].concat(args));\n router.trigger('route', name, args);\n Backbone.history.trigger('route', router, name, args);\n }\n });\n return this;\n },\n\n // Execute a route handler with the provided parameters. This is an\n // excellent place to do pre-route setup or post-route cleanup.\n execute: function(callback, args, name) {\n if (callback) callback.apply(this, args);\n },\n\n // Simple proxy to `Backbone.history` to save a fragment into the history.\n navigate: function(fragment, options) {\n Backbone.history.navigate(fragment, options);\n return this;\n },\n\n // Bind all defined routes to `Backbone.history`. We have to reverse the\n // order of the routes here to support behavior where the most general\n // routes can be defined at the bottom of the route map.\n _bindRoutes: function() {\n if (!this.routes) return;\n this.routes = _.result(this, 'routes');\n var route, routes = _.keys(this.routes);\n while ((route = routes.pop()) != null) {\n this.route(route, this.routes[route]);\n }\n },\n\n // Convert a route string into a regular expression, suitable for matching\n // against the current location hash.\n _routeToRegExp: function(route) {\n route = route.replace(escapeRegExp, '\\\\$&')\n .replace(optionalParam, '(?:$1)?')\n .replace(namedParam, function(match, optional) {\n return optional ? match : '([^/?]+)';\n })\n .replace(splatParam, '([^?]*?)');\n return new RegExp('^' + route + '(?:\\\\?([\\\\s\\\\S]*))?$');\n },\n\n // Given a route, and a URL fragment that it matches, return the array of\n // extracted decoded parameters. Empty or unmatched parameters will be\n // treated as `null` to normalize cross-browser behavior.\n _extractParameters: function(route, fragment) {\n var params = route.exec(fragment).slice(1);\n return _.map(params, function(param, i) {\n // Don't decode the search params.\n if (i === params.length - 1) return param || null;\n return param ? decodeURIComponent(param) : null;\n });\n }\n\n });\n\n // Backbone.History\n // ----------------\n\n // Handles cross-browser history management, based on either\n // [pushState](http://diveintohtml5.info/history.html) and real URLs, or\n // [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange)\n // and URL fragments. If the browser supports neither (old IE, natch),\n // falls back to polling.\n var History = Backbone.History = function() {\n this.handlers = [];\n this.checkUrl = _.bind(this.checkUrl, this);\n\n // Ensure that `History` can be used outside of the browser.\n if (typeof window !== 'undefined') {\n this.location = window.location;\n this.history = window.history;\n }\n };\n\n // Cached regex for stripping a leading hash/slash and trailing space.\n var routeStripper = /^[#\\/]|\\s+$/g;\n\n // Cached regex for stripping leading and trailing slashes.\n var rootStripper = /^\\/+|\\/+$/g;\n\n // Cached regex for stripping urls of hash.\n var pathStripper = /#.*$/;\n\n // Has the history handling already been started?\n History.started = false;\n\n // Set up all inheritable **Backbone.History** properties and methods.\n _.extend(History.prototype, Events, {\n\n // The default interval to poll for hash changes, if necessary, is\n // twenty times a second.\n interval: 50,\n\n // Are we at the app root?\n atRoot: function() {\n var path = this.location.pathname.replace(/[^\\/]$/, '$&/');\n return path === this.root && !this.getSearch();\n },\n\n // Does the pathname match the root?\n matchRoot: function() {\n var path = this.decodeFragment(this.location.pathname);\n var rootPath = path.slice(0, this.root.length - 1) + '/';\n return rootPath === this.root;\n },\n\n // Unicode characters in `location.pathname` are percent encoded so they're\n // decoded for comparison. `%25` should not be decoded since it may be part\n // of an encoded parameter.\n decodeFragment: function(fragment) {\n return decodeURI(fragment.replace(/%25/g, '%2525'));\n },\n\n // In IE6, the hash fragment and search params are incorrect if the\n // fragment contains `?`.\n getSearch: function() {\n var match = this.location.href.replace(/#.*/, '').match(/\\?.+/);\n return match ? match[0] : '';\n },\n\n // Gets the true hash value. Cannot use location.hash directly due to bug\n // in Firefox where location.hash will always be decoded.\n getHash: function(window) {\n var match = (window || this).location.href.match(/#(.*)$/);\n return match ? match[1] : '';\n },\n\n // Get the pathname and search params, without the root.\n getPath: function() {\n var path = this.decodeFragment(\n this.location.pathname + this.getSearch()\n ).slice(this.root.length - 1);\n return path.charAt(0) === '/' ? path.slice(1) : path;\n },\n\n // Get the cross-browser normalized URL fragment from the path or hash.\n getFragment: function(fragment) {\n if (fragment == null) {\n if (this._usePushState || !this._wantsHashChange) {\n fragment = this.getPath();\n } else {\n fragment = this.getHash();\n }\n }\n return fragment.replace(routeStripper, '');\n },\n\n // Start the hash change handling, returning `true` if the current URL matches\n // an existing route, and `false` otherwise.\n start: function(options) {\n if (History.started) throw new Error('Backbone.history has already been started');\n History.started = true;\n\n // Figure out the initial configuration. Do we need an iframe?\n // Is pushState desired ... is it available?\n this.options = _.extend({root: '/'}, this.options, options);\n this.root = this.options.root;\n this._wantsHashChange = this.options.hashChange !== false;\n this._hasHashChange = 'onhashchange' in window && (document.documentMode === void 0 || document.documentMode > 7);\n this._useHashChange = this._wantsHashChange && this._hasHashChange;\n this._wantsPushState = !!this.options.pushState;\n this._hasPushState = !!(this.history && this.history.pushState);\n this._usePushState = this._wantsPushState && this._hasPushState;\n this.fragment = this.getFragment();\n\n // Normalize root to always include a leading and trailing slash.\n this.root = ('/' + this.root + '/').replace(rootStripper, '/');\n\n // Transition from hashChange to pushState or vice versa if both are\n // requested.\n if (this._wantsHashChange && this._wantsPushState) {\n\n // If we've started off with a route from a `pushState`-enabled\n // browser, but we're currently in a browser that doesn't support it...\n if (!this._hasPushState && !this.atRoot()) {\n var rootPath = this.root.slice(0, -1) || '/';\n this.location.replace(rootPath + '#' + this.getPath());\n // Return immediately as browser will do redirect to new url\n return true;\n\n // Or if we've started out with a hash-based route, but we're currently\n // in a browser where it could be `pushState`-based instead...\n } else if (this._hasPushState && this.atRoot()) {\n this.navigate(this.getHash(), {replace: true});\n }\n\n }\n\n // Proxy an iframe to handle location events if the browser doesn't\n // support the `hashchange` event, HTML5 history, or the user wants\n // `hashChange` but not `pushState`.\n if (!this._hasHashChange && this._wantsHashChange && !this._usePushState) {\n this.iframe = document.createElement('iframe');\n this.iframe.src = 'javascript:0';\n this.iframe.style.display = 'none';\n this.iframe.tabIndex = -1;\n var body = document.body;\n // Using `appendChild` will throw on IE < 9 if the document is not ready.\n var iWindow = body.insertBefore(this.iframe, body.firstChild).contentWindow;\n iWindow.document.open();\n iWindow.document.close();\n iWindow.location.hash = '#' + this.fragment;\n }\n\n // Add a cross-platform `addEventListener` shim for older browsers.\n var addEventListener = window.addEventListener || function(eventName, listener) {\n return attachEvent('on' + eventName, listener);\n };\n\n // Depending on whether we're using pushState or hashes, and whether\n // 'onhashchange' is supported, determine how we check the URL state.\n if (this._usePushState) {\n addEventListener('popstate', this.checkUrl, false);\n } else if (this._useHashChange && !this.iframe) {\n addEventListener('hashchange', this.checkUrl, false);\n } else if (this._wantsHashChange) {\n this._checkUrlInterval = setInterval(this.checkUrl, this.interval);\n }\n\n if (!this.options.silent) return this.loadUrl();\n },\n\n // Disable Backbone.history, perhaps temporarily. Not useful in a real app,\n // but possibly useful for unit testing Routers.\n stop: function() {\n // Add a cross-platform `removeEventListener` shim for older browsers.\n var removeEventListener = window.removeEventListener || function(eventName, listener) {\n return detachEvent('on' + eventName, listener);\n };\n\n // Remove window listeners.\n if (this._usePushState) {\n removeEventListener('popstate', this.checkUrl, false);\n } else if (this._useHashChange && !this.iframe) {\n removeEventListener('hashchange', this.checkUrl, false);\n }\n\n // Clean up the iframe if necessary.\n if (this.iframe) {\n document.body.removeChild(this.iframe);\n this.iframe = null;\n }\n\n // Some environments will throw when clearing an undefined interval.\n if (this._checkUrlInterval) clearInterval(this._checkUrlInterval);\n History.started = false;\n },\n\n // Add a route to be tested when the fragment changes. Routes added later\n // may override previous routes.\n route: function(route, callback) {\n this.handlers.unshift({route: route, callback: callback});\n },\n\n // Checks the current URL to see if it has changed, and if it has,\n // calls `loadUrl`, normalizing across the hidden iframe.\n checkUrl: function(e) {\n var current = this.getFragment();\n\n // If the user pressed the back button, the iframe's hash will have\n // changed and we should use that for comparison.\n if (current === this.fragment && this.iframe) {\n current = this.getHash(this.iframe.contentWindow);\n }\n\n if (current === this.fragment) return false;\n if (this.iframe) this.navigate(current);\n this.loadUrl();\n },\n\n // Attempt to load the current URL fragment. If a route succeeds with a\n // match, returns `true`. If no defined routes matches the fragment,\n // returns `false`.\n loadUrl: function(fragment) {\n // If the root doesn't match, no routes can match either.\n if (!this.matchRoot()) return false;\n fragment = this.fragment = this.getFragment(fragment);\n return _.some(this.handlers, function(handler) {\n if (handler.route.test(fragment)) {\n handler.callback(fragment);\n return true;\n }\n });\n },\n\n // Save a fragment into the hash history, or replace the URL state if the\n // 'replace' option is passed. You are responsible for properly URL-encoding\n // the fragment in advance.\n //\n // The options object can contain `trigger: true` if you wish to have the\n // route callback be fired (not usually desirable), or `replace: true`, if\n // you wish to modify the current URL without adding an entry to the history.\n navigate: function(fragment, options) {\n if (!History.started) return false;\n if (!options || options === true) options = {trigger: !!options};\n\n // Normalize the fragment.\n fragment = this.getFragment(fragment || '');\n\n // Don't include a trailing slash on the root.\n var rootPath = this.root;\n if (fragment === '' || fragment.charAt(0) === '?') {\n rootPath = rootPath.slice(0, -1) || '/';\n }\n var url = rootPath + fragment;\n\n // Strip the hash and decode for matching.\n fragment = this.decodeFragment(fragment.replace(pathStripper, ''));\n\n if (this.fragment === fragment) return;\n this.fragment = fragment;\n\n // If pushState is available, we use it to set the fragment as a real URL.\n if (this._usePushState) {\n this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url);\n\n // If hash changes haven't been explicitly disabled, update the hash\n // fragment to store history.\n } else if (this._wantsHashChange) {\n this._updateHash(this.location, fragment, options.replace);\n if (this.iframe && fragment !== this.getHash(this.iframe.contentWindow)) {\n var iWindow = this.iframe.contentWindow;\n\n // Opening and closing the iframe tricks IE7 and earlier to push a\n // history entry on hash-tag change. When replace is true, we don't\n // want this.\n if (!options.replace) {\n iWindow.document.open();\n iWindow.document.close();\n }\n\n this._updateHash(iWindow.location, fragment, options.replace);\n }\n\n // If you've told us that you explicitly don't want fallback hashchange-\n // based history, then `navigate` becomes a page refresh.\n } else {\n return this.location.assign(url);\n }\n if (options.trigger) return this.loadUrl(fragment);\n },\n\n // Update the hash location, either replacing the current entry, or adding\n // a new one to the browser history.\n _updateHash: function(location, fragment, replace) {\n if (replace) {\n var href = location.href.replace(/(javascript:|#).*$/, '');\n location.replace(href + '#' + fragment);\n } else {\n // Some browsers require that `hash` contains a leading #.\n location.hash = '#' + fragment;\n }\n }\n\n });\n\n // Create the default Backbone.history.\n Backbone.history = new History;\n\n // Helpers\n // -------\n\n // Helper function to correctly set up the prototype chain for subclasses.\n // Similar to `goog.inherits`, but uses a hash of prototype properties and\n // class properties to be extended.\n var extend = function(protoProps, staticProps) {\n var parent = this;\n var child;\n\n // The constructor function for the new subclass is either defined by you\n // (the \"constructor\" property in your `extend` definition), or defaulted\n // by us to simply call the parent constructor.\n if (protoProps && _.has(protoProps, 'constructor')) {\n child = protoProps.constructor;\n } else {\n child = function(){ return parent.apply(this, arguments); };\n }\n\n // Add static properties to the constructor function, if supplied.\n _.extend(child, parent, staticProps);\n\n // Set the prototype chain to inherit from `parent`, without calling\n // `parent`'s constructor function and add the prototype properties.\n child.prototype = _.create(parent.prototype, protoProps);\n child.prototype.constructor = child;\n\n // Set a convenience property in case the parent's prototype is needed\n // later.\n child.__super__ = parent.prototype;\n\n return child;\n };\n\n // Set up inheritance for the model, collection, router, view and history.\n Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend;\n\n // Throw an error when a URL is needed, and none is supplied.\n var urlError = function() {\n throw new Error('A \"url\" property or function must be specified');\n };\n\n // Wrap an optional error callback with a fallback error event.\n var wrapError = function(model, options) {\n var error = options.error;\n options.error = function(resp) {\n if (error) error.call(options.context, model, resp, options);\n model.trigger('error', model, resp, options);\n };\n };\n\n return Backbone;\n});\n","/*! Backbone.Rpc - v0.1.1\n------------------------------\nBuild @ 2012-11-15\nDocumentation and Full License Available at:\nhttp://asciidisco.github.com/Backbone.Rpc/index.html\ngit://github.com/asciidisco/Backbone.Rpc.git\nCopyright (c) 2012 Sebastian Golasch <public@asciidisco.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the \"Software\"),\nto deal in the Software without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense,\nand/or sell copies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following conditions:\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,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,\nARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\nIN THE SOFTWARE.*/\n\n//////////////////////////////////////////////////////////////\n// BEGIN Module inclusion pattern for Node, AMD or globals: //\n//////////////////////////////////////////////////////////////\n(function(root, define, require, exports, module, factory, undef) {\n\t'use strict';\n\tif (typeof exports === 'object') {\n\t\t// Node. Does not work with strict CommonJS, but\n\t\t// only CommonJS-like enviroments that support module.exports,\n\t\t// like Node.\n\t\tmodule.exports = factory(\n\t\t\trequire('underscore'),\n\t\t\trequire('backbone'),\n\t\t\trequire('jquery'),\n\t\t);\n\t} else if (typeof define === 'function' && define.amd) {\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine(['underscore', 'backbone', 'jquery'], function(_, Backbone, $) {\n\t\t\t// Check if\n\t\t\t_ = _ === undef ? root._ : _;\n\t\t\tBackbone = Backbone === undef ? root.Backbone : Backbone;\n\t\t\t$ = $ === undef ? root.$ : $;\n\t\t\treturn (root.Backbone = factory(_, Backbone, $));\n\t\t});\n\t} else {\n\t\t// Browser globals\n\t\troot.returnExportsGlobal = factory(root._, root.Backbone, root.$);\n\t}\n})(this, this.define, this.require, this.exports, this.module, function(\n\t_,\n\tBackbone,\n\t$,\n\tundef,\n) {\n\t////////////////////////////////////////////////////////////\n\t// END Module inclusion pattern for Node, AMD or globals: //\n\t////////////////////////////////////////////////////////////\n\n\t// Backbone.Rpc\n\t// Plugin for using the backbone js library with a remote json-rpc handler\n\t// instead of the default REST one\n\t//\n\t// Heavily modified by NetXposure.\n\t//\n\t// FYI when debugging:\n\t// The code path when firing a query is: sync() -> checkMethods() -> triggerQuery() -> _query() -> $.ajax(args, callback ...)\n\t// The code path when receiving a bad result is: callback() -> parseReply() -> onError -> (handleException, sync.error(), promise.reject)\n\t// The code path when receiving a good result is: callback() -> parseReply() -> (method parser) -> (sync.success(), promise.resolve)\n\t//\n\n\t'use strict';\n\n\t_ = _ || window._;\n\t$ = $ || window.$;\n\tBackbone = Backbone || window.Backbone;\n\n\tvar Rpc = function(options) {\n\t\t\t// merge the users options\n\t\t\tthis.options = options = options || {};\n\n\t\t\tthis.garbageCollect = () => {\n\t\t\t\tthis.garbageCollected = true;\n\t\t\t\tthis.callsByName && Object.entries(this.callsByName, ([key, value]) => {\n\t\t\t\t\tconsole.warn(`aborting calls: ${key}`);\n\t\t\t\t\tconst xhr = value && value.xhr;\n\t\t\t\t\tif (xhr && xhr.state && xhr.state() === 'pending') {\n\t\t\t\t\t\txhr.abort && xhr.abort();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\n\t\t\t// check if we have a non std. namespace delimter\n\t\t\tthis.namespaceDelimiter =\n\t\t\t\toptions.namespaceDelimiter || this.namespaceDelimiter;\n\t\t\t// check if we have a non std. content-type\n\t\t\tthis.contentType = options.contentType || this.contentType;\n\t\t\t// check for duplicate query policy\n\t\t\tthis.duplicateQueryPolicy =\n\t\t\t\toptions.duplicateQueryPolicy || this.duplicateQueryPolicy;\n\t\t\t// fix issue with the loss of this\n\t\t\t_.bindAll(\n\t\t\t\tthis,\n\t\t\t\t'onError',\n\t\t\t\t'_query',\n\t\t\t\t'query',\n\t\t\t\t'checkMethods',\n\t\t\t\t'handleExceptions',\n\t\t\t);\n\t\t},\n\t\t// store the old Backbone.Model & Collection constructors\n\t\toldModelConst = Backbone.Model.prototype.constructor,\n\t\toldCollectionConst = Backbone.Collection.prototype.constructor,\n\t\t// wrap the new constructor around Backbone's old ones:\n\t\tnewConst = function(model, my_ctxt) {\n\t\t\t// check if the model has the rpc property and methods defined\n\t\t\tif (my_ctxt.rpc && my_ctxt.methods) {\n\t\t\t\t// walk through the methods, attaching rpc functions for anything other than the CRUD set supported by Backbone.sync:\n\t\t\t\t_.each(\n\t\t\t\t\tmy_ctxt.methods,\n\t\t\t\t\t_.bind(function(method, signature) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t(!_.contains[('create', 'read', 'update', 'remove')], signature)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t// This is the part that binds the non-CRUD rpc methods to model/collection methods:\n\t\t\t\t\t\t\t// generate the method for the signature\n\t\t\t\t\t\t\tmy_ctxt[signature] = _.bind(function() {\n\t\t\t\t\t\t\t\t// DAM-8468: method definition functions should receive arguments and options\n\t\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t\t// Allowing backbone RPC methods to take arguments is tricky, because\n\t\t\t\t\t\t\t\t// execution passes through backbone.sync, which has a very specific signature.\n\t\t\t\t\t\t\t\t// So we try to detect the situations where other arguments are expected by method signature functions,\n\t\t\t\t\t\t\t\t// and pull them from the arguments object as neeed.\n\t\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t\t// To get this right we need the method signature functions to define the number of arguments\n\t\t\t\t\t\t\t\t// they're expecting, including a final options argument. If the method signature defines other\n\t\t\t\t\t\t\t\t// expected arguments but does *not* include an options argument, this algorithm breaks.\n\t\t\t\t\t\t\t\t// Therefore: methods functions that define any other arguments MUST ALSO DEFINE AN OPTIONS ARGUMENT.\n\t\t\t\t\t\t\t\t// That's not ideal, but it's manageable. I don't yet know a better way. -m-\n\n\t\t\t\t\t\t\t\tvar options;\n\n\t\t\t\t\t\t\t\t// JS stores the number of args in a function definition as the function's .length property:\n\t\t\t\t\t\t\t\tvar argsExpected = _.isFunction(this.methods[signature])\n\t\t\t\t\t\t\t\t\t? this.methods[signature].length\n\t\t\t\t\t\t\t\t\t: 0;\n\t\t\t\t\t\t\t\tif (argsExpected == 0) {\n\t\t\t\t\t\t\t\t\t// It's also possible that the method signature is a plain array but one of its elements is a function ....\n\t\t\t\t\t\t\t\t\t_.each(this.methods[signature], function(param) {\n\t\t\t\t\t\t\t\t\t\tif (_.isFunction(param)) {\n\t\t\t\t\t\t\t\t\t\t\t// If that's the case, they had better all expect the same arguments, or there'll be hell to pay ....\n\t\t\t\t\t\t\t\t\t\t\t// (Not even going to test for that. Just do it right.)\n\t\t\t\t\t\t\t\t\t\t\targsExpected = param.length;\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\n\t\t\t\t\t\t\t\tif (argsExpected == 0) {\n\t\t\t\t\t\t\t\t\t// nothing mentions in the method function, but standard backbone/bRPC args could still have been passed.\n\t\t\t\t\t\t\t\t\toptions = arguments[0]; // maybe undefined\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// Get the options object from the defined position (must always be the last argument expected)\n\t\t\t\t\t\t\t\t\toptions = arguments[argsExpected - 1]; // maybe undefined\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (argsExpected > 1) {\n\t\t\t\t\t\t\t\t\t// args other than 'opts' are also expected\n\t\t\t\t\t\t\t\t\toptions = options || {};\n\t\t\t\t\t\t\t\t\t// Preserve the args as an option.\n\t\t\t\t\t\t\t\t\toptions.invokedArguments = [];\n\t\t\t\t\t\t\t\t\targsExpected--; // don't include the options argument\n\t\t\t\t\t\t\t\t\tfor (var i = 0; i < argsExpected; i++) {\n\t\t\t\t\t\t\t\t\t\toptions.invokedArguments[i] = arguments[i];\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 defaultExceptionHandler = this.defaultExceptionHandler;\n\t\t\t\t\t\t\t\t// invoke the dynamicly created method\n\t\t\t\t\t\t\t\treturn Backbone.sync(\n\t\t\t\t\t\t\t\t\tsignature,\n\t\t\t\t\t\t\t\t\tmy_ctxt,\n\t\t\t\t\t\t\t\t\t_.extend(\n\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\t\t// If options.error isn't set, set it to our default exception handler:\n\t\t\t\t\t\t\t\t\t\t\terror: defaultExceptionHandler\n\t\t\t\t\t\t\t\t\t\t\t\t? function(model, error) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdefaultExceptionHandler(error);\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\t: undefined,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\toptions,\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}, my_ctxt);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, my_ctxt),\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\t// store the old Backbone.sync method for later use\n\t\toldSync = Backbone.sync;\n\n\t/////////////////\n\t// Custom RPC errors we can throw:\n\t/////////////////\n\t_.extend(Rpc, {\n\t\t/**\n\t\t * A generic JSON-RPC error: adds 'code' and 'data' to the JS Error object.\n\t\t */\n\t\tRpcError: function(code, message, data) {\n\t\t\tvar me = new Error(message || 'JSON-RPC error');\n\t\t\tme.code = code || 0;\n\t\t\tme.message = message || 'JSON-RPC error';\n\t\t\tme.data = data;\n\t\t\treturn me;\n\t\t},\n\n\t\t/***\n\t\t * The parser for an object's backbone.rpc method can decide that the\n\t\t * DAM sent invalid data and throw this error in order to tell X7 that\n\t\t * the result should be considered an error. Sometimes we get errors\n\t\t * encoded in success handlers ...\n\t\t */\n\t\tParseError: function(message, data) {\n\t\t\treturn new Rpc.RpcError(\n\t\t\t\t-101,\n\t\t\t\tmessage || 'invalid data in JSON RPC response',\n\t\t\t\tdata,\n\t\t\t);\n\t\t},\n\n\t\t/***\n\t\t * The DAM sometimes provides responses that are not JSON-RPC compliant.\n\t\t * Backbone.RPC defines several codes for specific problems; our generic problem code will be -102\n\t\t */\n\t\tProtocolError: function(message, data) {\n\t\t\treturn new Rpc.RpcError(\n\t\t\t\t-102,\n\t\t\t\tmessage || 'invalid data in JSON RPC response',\n\t\t\t\tdata,\n\t\t\t);\n\t\t},\n\n\t\t/***\n\t\t * If JSON-RPC reports an error, we can throw one of these:\n\t\t */\n\t\tMethodError: function(code, message, data) {\n\t\t\treturn new Rpc.RpcError(code, message, data);\n\t\t},\n\n\t\t/***\n\t\t * In the case where we get a bad ValidationBean back from the server, the\n\t\t * server is sending error as success again. A special error for that case:\n\t\t */\n\t\tServerValidationError: function(message, data) {\n\t\t\treturn new Rpc.RpcError(-103, message, data);\n\t\t},\n\n\t\t/***\n\t\t * HTTP Transport errors:\n\t\t */\n\t\tHttp404Error: function(message, data) {\n\t\t\treturn new Rpc.RpcError(-1, message || '404', data);\n\t\t},\n\n\t\tHttp500Error: function(message, data) {\n\t\t\treturn new Rpc.RpcError(-2, message || '500', data);\n\t\t},\n\n\t\t/**\n\t\t * Syntax/misc errors in the model definition of the RPC methods/parsers data\n\t\t */\n\t\tDefinitionError: function(message, data) {\n\t\t\treturn new Rpc.RpcError(-3, message || 'Type mismatch', data);\n\t\t},\n\t});\n\n\t// http://stackoverflow.com/questions/783818/how-do-i-create-a-custom-error-in-javascript\n\tRpc.RpcError.prototype = Rpc.MethodError.prototype = Rpc.ProtocolError.prototype = Rpc.ParseError.prototype = Rpc.ServerValidationError.prototype = Rpc.Http404Error.prototype = Rpc.Http500Error.prototype = Rpc.DefinitionError.prototype =\n\t\tError.prototype;\n\n\t// TODO: Document\n\tRpc.prototype = {\n\t\t// User defined options placeholder\n\t\toptions: {},\n\n\t\t// Default charset\n\t\tcharset: 'iso-8859-1',\n\n\t\t// Default namespace\n\t\tnamespace: '',\n\n\t\t// Default namespace delimiter\n\t\t//namespaceDelimiter: '/',\n\t\t// For Netx:\n\t\tnamespaceDelimiter: '',\n\n\t\t// Default content type\n\t\tcontentType: 'application/json',\n\n\t\t// User set url placeholder\n\t\turl: '',//Netx.URL.api, // FYI this doesn't work if Netx.URL isn't set yet, as happens in develop (lately). (Causes DAM-9677, as addressed in netx.js)\n\n\t\t/**\n\t\t * By default, if an RPC method is called multiple times in quick succession, each query eventually\n\t\t * returns its success or failure. But there are situations in which we want each new call of a method\n\t\t * to abort any currently-pending call to that method.\n\t\t *\n\t\t * When calling Netx RPC methods, you can provide the option duplicateQueryPolicy = \"abort\" to\n\t\t * obtain this behavior. Aborted requests neither succeed nor fail, and their promises never\n\t\t * resolve.\n\t\t *\n\t\t * Or, you can provide a policy of 'merge', to prevent the second query & return the promise\n\t\t * of the first one. Both queries will receive the same response, at the same time (or rather, in immediate successive threads.)\n\t\t *\n\t\t * The default policy of 'ignore' changes nothing, which means both queries are processed -- in unknown order.\n\t\t *\n\t\t * An entire RPC instance can be assigned this behavior for all method calls by providing that same option to its constructor.\n\t\t */\n\t\tduplicateQueryPolicy: 'ignore', // standard do-nothing policy == we send two queries.\n\n\t\tnewConst: newConst,\n\n\t\t/**\n\t\t * parseReply() looks at the response from a succesful RPC call. It detects\n\t\t * errors & bad JSON-RPC behavior. If it all looks good, it invokes the\n\t\t * parser for the method (if any), and detects errors from that. If this\n\t\t * method detects no error then the RPC call is successful.\n\t\t */\n\n\t\tparseReply: function(reply, status, fn, id) {\n\t\t\tif (this.garbageCollected) return;\n\n\t\t\t// DAM-3261 dispatch to app:server:error to reset the count of errors\n\t\t\tdispatcher.trigger('app:server:success');\n\n\t\t\tvar replyParsed = false;\n\n\t\t\ttry {\n\t\t\t\t// Occasionally we are seeing the call being declared as undefined\n\t\t\t\t// which causes call.deferred to fail\n\t\t\t\tvar call = this.callsById[id];\n\t\t\t\tvar d = call.deferred;\n\t\t\t\t// So many ways JSON-RPC can go wrong ....\n\n\t\t\t\t// If the reply is empty (null, undefined or empty string), that's a bogus response.\n\t\t\t\tif (_.isUndefined(reply) || _.isNull(reply)) {\n\t\t\t\t\tthrow new Rpc.ProtocolError(\n\t\t\t\t\t\t'\"' + fn + '\": Null reply from server (no reply)',\n\t\t\t\t\t\t{reply: reply, status: status, call: call},\n\t\t\t\t\t);\n\t\t\t\t} else if (!_.isObject(reply)) {\n\t\t\t\t\tthrow new Rpc.ProtocolError(\n\t\t\t\t\t\t'\"' + fn + '\": bad reply from server (no an object)',\n\t\t\t\t\t\t{reply: reply, status: status, call: call},\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// If the ID field doesn't match our id, something is way bogus:\n\t\t\t\telse if (_.isUndefined(reply.id) || reply.id !== id) {\n\t\t\t\t\tthrow new Rpc.ProtocolError('\"' + fn + '\": bad request ID', {\n\t\t\t\t\t\treply: reply,\n\t\t\t\t\t\tstatus: status,\n\t\t\t\t\t\tcall: call,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// If the reply doesn't have either a .result or an .error property, that's bogus JSON-RPC.\n\t\t\t\telse if (\n\t\t\t\t\t!_.isObject(reply) ||\n\t\t\t\t\t(_.isUndefined(reply.result) && _.isUndefined(reply.error))\n\t\t\t\t) {\n\t\t\t\t\tthrow new Rpc.ProtocolError(\n\t\t\t\t\t\t'\"' + fn + '\": Garbled JSON from server',\n\t\t\t\t\t\t{reply: reply, status: status, call: call},\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// If the reply has a .error property that's not an object, that's also bogus JSON-RPC. Trigger an error.\n\t\t\t\telse if (!_.isUndefined(reply.error) && !_.isObject(reply.error)) {\n\t\t\t\t\tthrow new Rpc.ProtocolError(\n\t\t\t\t\t\t'\"' + fn + '\": Garbled JSON from server',\n\t\t\t\t\t\t{reply: reply, status: status, call: call},\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// If the reply does have a .error property, then JSON-RPC is reporting a server error, which we pass along.\n\t\t\t\telse if (reply.error) {\n\t\t\t\t\tthrow new Rpc.MethodError(\n\t\t\t\t\t\treply.error.code,\n\t\t\t\t\t\t'\"' + fn + '\": error: ' + reply.error.message,\n\t\t\t\t\t\t{reply: reply, status: status, call: call},\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Vestigial residue of the DAM's former error handling system:\n\t\t\t\t// If we see a validationData object in the result, check for a failed ValidationBean: an error disguised as success.\n\t\t\t\telse if (\n\t\t\t\t\treply.result &&\n\t\t\t\t\treply.result.validationData &&\n\t\t\t\t\treply.result.validationData.length &&\n\t\t\t\t\t(reply.result.status < 0 ||\n\t\t\t\t\t\treply.result.validationData[0].label == 'Error')\n\t\t\t\t) {\n\t\t\t\t\tconsole.warn('Server sent error as success!');\n\n\t\t\t\t\t// reconfigure the data object to look like proper JSON/RPC error return: http://www.jsonrpc.org/specification#response_object\n\t\t\t\t\treply.error = {\n\t\t\t\t\t\tcode: -32099, // Let's call this a \"Server Validation Error\"\n\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t'Server Validation Error: ' +\n\t\t\t\t\t\t\treply.result.validationData[0].value, // TODO: parse the whole array of N validation beans.\n\t\t\t\t\t\treply: reply.result.validationData,\n\t\t\t\t\t};\n\n\t\t\t\t\tdelete reply.result;\n\n\t\t\t\t\tthrow new Rpc.ServerValidationError(\n\t\t\t\t\t\t'\"' + fn + '\": error: ' + reply.error.message,\n\t\t\t\t\t\t{reply: reply, status: status, call: call},\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Anything else is a valid result, we hope.\n\t\t\t\telse {\n\t\t\t\t\tvar result;\n\t\t\t\t\tif (\n\t\t\t\t\t\t// asset collections now have pager models\n\t\t\t\t\t\tcall.rpcMethod !== 'facetedSearch' &&\n\t\t\t\t\t\tcall.rpcMethod !== 'searchAssetsByAttributeHistory' &&\n\t\t\t\t\t\tcall.model &&\n\t\t\t\t\t\tcall.model.isCollection &&\n\t\t\t\t\t\t(call.model.pager && call.model.pager.constructor.__name__ === 'Pager') &&\n\t\t\t\t\t\t_.isObject(reply.result) &&\n\t\t\t\t\t\t_.size(reply.result) >= 2 &&\n\t\t\t\t\t\t(_.isArray(reply.result.results) || _.isArray(reply.result.items)) &&\n\t\t\t\t\t\t(_.isNumeric(reply.result.size) || _.isNumeric(reply.result.totalItems))\n\t\t\t\t\t) {\n\t\t\t\t\t\t// We have detected a paged reply, and a collection with paging\n\t\t\t\t\t\t// For paged replies, the API returns an object containg both a page\n\t\t\t\t\t\t// of results and a total item count: { results: [], size: 0 }\n\t\t\t\t\t\t// The total item count should be set on the collection's pager object:\n\t\t\t\t\t\t// console.debug('updating pager with paged result count');\n\t\t\t\t\t\tcall.model.pager.set('itemTotal', reply.result.size || reply.result.totalItems || 0);\n\t\t\t\t\t\tif (reply.result.startIndex != null) {\n\t\t\t\t\t\t\tcall.model.pager.setStartIndex(reply.result.startIndex);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// The rest can be passed on:\n\t\t\t\t\t\tresult = reply.result.results || reply.result.items;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// A normal, unpaged reply\n\t\t\t\t\t\tresult = reply.result;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Things to warn about that aren't necessarily wrong:\n\t\t\t\t\t// If the reply has a .result property that's null or undefined, that's maybe legit JSON-RPC but not how we want things to work; emit a warning.\n\t\t\t\t\tif (_.isNull(result) || _.isUndefined(result)) {\n\t\t\t\t\t\t// For now, just emit a warning and move on:\n\t\t\t\t\t\t// (The rpc method parser can still throw an exception if a null result is truly problematic.)\n\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t'API error: RPC method \"' + fn + '\" returned null result',\n\t\t\t\t\t\t); // we should file bugs on these.\n\t\t\t\t\t\t//console.warn(call.stack);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (call.model) {\n\t\t\t\t\t\t// Convert 'goo' attributes, if defined\n\t\t\t\t\t\tif (call.model.gooAttrs) {\n\t\t\t\t\t\t\tresult = call.model.unpackAttrs(result);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// invoke method parser, if defined\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tcall.model.parsers &&\n\t\t\t\t\t\t\t_.isFunction(call.model.parsers[call.method])\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tvar parsed = call.model.parsers[call.method].apply(\n\t\t\t\t\t\t\t\tcall.model,\n\t\t\t\t\t\t\t\t[result].concat(this.decodeArguments(call.options)),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (!_.isUndefined(parsed)) {\n\t\t\t\t\t\t\t\t// allow the parser to change the result, unless it returned undef.\n\t\t\t\t\t\t\t\tresult = parsed;\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\t// All done.\n\t\t\t\t\treplyParsed = true;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tthis.onError(e, call, reply, status);\n\t\t\t}\n\n\t\t\t// DEVNOTE: we must do these next things outside of the try/catch loop, so\n\t\t\t// that future exceptions are not caught. That's why we set/check this replyParsed flag.\n\t\t\tif (replyParsed) {\n\t\t\t\t// All done!\n\t\t\t\t// TODO: corrall all the various calls to unregisterCall() ... ideally we'd only call it in one place.\n\t\t\t\t// (How critical is the timing, really?)\n\t\t\t\tthis.unregisterCall(call);\n\n\t\t\t\t// Every succesful sync resets the server's logout timer; reset our client one too:\n\t\t\t\tif (Netx && Netx.session) {\n\t\t\t\t\tNetx.session.resetLogoutTimer(); // every succesful sync resets the server's logout timer; reset our client one too.\n\t\t\t\t}\n\n\t\t\t\t// If this is a backbone sync method, here is where Backbone picks up the changes:\n\t\t\t\tif (_.isFunction(call.options.success)) {\n\t\t\t\t\tcall.options.success(result);\n\t\t\t\t}\n\n\t\t\t\t// Resolve the promise:\n\t\t\t\td.resolveWith(call.model ? call.model : this, [result]);\n\t\t\t}\n\t\t},\n\n\t\t// Handle the fallout from a JSON-RPC error or exception:\n\t\t// find the right error params to call the error handler (if any),\n\t\t// then reject the promise, or call the exceptionHandler if there are no reject handlers on the promise.\n\t\tonError: function(error, call, reply, status) {\n\t\t\tif (!(error instanceof Error)) {\n\t\t\t\t// If the \"error\" argument is the string \"abort\" something\n\t\t\t\t// has triggered our duplicateQueryPolicy and we need to break out of the error method.\n\t\t\t\tif (error === 'abort') {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t'Call: %s, aborted by duplicateQueryPolicy',\n\t\t\t\t\t\tcall.method,\n\t\t\t\t\t);\n\t\t\t\t\tthis.unregisterCall(call);\n\t\t\t\t\treturn;\n\t\t\t\t} else {\n\t\t\t\t\t// this should not happen, period.\n\n\t\t\t\t\t// except it does happen any time the dam is unresponsive, no error is passed back\n\t\t\t\t\tconsole.warn('rpc.onError called with non-error!');\n\t\t\t\t\t// DAM-3261 dispatch to app:server:error to count the errors\n\t\t\t\t\tdispatcher.trigger('app:server:error');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Hang on to some knowledge if possible, while trying to absorb the contents of a JSON-RPC error object into a JS Error object.\n\t\t\t// TODO: do this somewhere higher up the tree maybe?\n\t\t\terror.data = error.data || {};\n\t\t\terror.data.call = error.data.call || call;\n\t\t\terror.data.reply = error.data.reply || reply;\n\t\t\tif (!error.code && reply.code) {\n\t\t\t\terror.code = reply.code;\n\t\t\t}\n\n\t\t\t// If we came here from the error handler of the ajax call, then 'reply' is an jqXHR object.\n\t\t\tif (reply instanceof XMLHttpRequest) {\n\t\t\t\tif (status == 'abort') {\n\t\t\t\t\t// We aborted a request. Call no handlers or anything. Just clean up.\n\t\t\t\t\tthis.unregisterCall(call);\n\t\t\t\t\treturn this;\n\t\t\t\t} else {\n\t\t\t\t\t// TODO: this won't be a 500 ... maybe we need a generic HTTP error that includes the code somewhere?\n\t\t\t\t\t//this.handleExceptions(new Rpc.Http500Error(reply.status));\n\t\t\t\t\terror = new Rpc.Http500Error(reply.status);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If the sync() call defined an error callback, call it.\n\t\t\t// NOTE: this callback calls Backbone's callback, triggering 'error' on the object, unless overridden\n\t\t\t// with the 'error' option to a sync method.\n\t\t\t// We have moved away from that pattern in X7, and prefer to use promises.\n\n\t\t\tif (call && call.options && _.isFunction(call.options.error)) {\n\t\t\t\t// TODO: return error instead of reply.error ? Not sure where this is being parsed.\n\t\t\t\tcall.options.error.apply(this, [reply.error]);\n\t\t\t} else {\n\t\t\t\tconsole.warn('Error in unknown service method. Call is undefined.');\n\t\t\t}\n\n\t\t\t// if there are no reject handlers on the deferred, we should always call the exception handler.\n\t\t\t// This sometimes throws errors after updating the DAM and trying to log back in - `deferred of undefined`\n\t\t\tif (call) {\n\t\t\t\tcall.deferred.rejectWith(call.model ? call.model : this, [\n\t\t\t\t\terror,\n\t\t\t\t\tstatus,\n\t\t\t\t\tcall.xhr,\n\t\t\t\t]);\n\t\t\t}\n\n\t\t\t// TODO: why not just throw this error, causing an exception, and allow it to be\n\t\t\t// handled by an exception-handling mechanism? Why reinvent the wheel with handleExceptions()?\n\t\t\t// (vanilla bRPC came with weird error-munging that never made sense to me ...)\n\t\t\tthis.handleExceptions(error);\n\n\t\t\t// }\n\t\t},\n\n\t\t//////////////////////////////////////////////////////////////////////////////////\n\t\t// Perform a query, sandwiched between a request:* event and a complete:* event .\n\t\t//\n\t\ttriggerQuery: function(method, exec, parsedParameters, options, model) {\n\t\t\t// DEVNOTE:\n\t\t\t// For models & collections, Backbone 1.1.2 'request' events include a jqXHR object\n\t\t\t// from which one can probably deduce the method name.\n\t\t\t// But this 'request:*' event is nicer for most of our needs,\n\t\t\t// and because we use a colon & they don't, there's no conflict.\n\t\t\t// (We added this when we were still using Backbone v1.1.1 .)\n\n\t\t\t// Trigger request:* event as the call goes out:\n\t\t\tmodel.trigger('request:' + method, model, undefined, options);\n\n\t\t\t// Make the call:\n\t\t\tvar p = this._query(method, exec, parsedParameters, options, model);\n\n\t\t\t// Trigger complete:* event when the call finishes:\n\t\t\tp.then(function(result) {\n\t\t\t\tif (!(options && options.silent)) {\n\t\t\t\t\tmodel.trigger(\n\t\t\t\t\t\t'complete:' + method,\n\t\t\t\t\t\tmodel,\n\t\t\t\t\t\tresult,\n\t\t\t\t\t\t_.omit(options, 'invokedArguments'),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn p;\n\t\t},\n\n\t\t//////////////////////////////////////////////////////////////\n\t\t// Our public query method: query()\n\t\t//\n\t\t// Backwards compatability fix: a recent refactor changed the signature of .query(),\n\t\t// which is supposed to be an internal method to this file. However, it turns\n\t\t// out that various other parts of Netx/X7 have been reaching in here and calling\n\t\t// Netx.Rpc.query() directly. So here is a public .query() method which translates the former\n\t\t// method signature into the signature of our internal method, now renamed ._query() .\n\t\t//\n\t\tquery: function(fn, params, callback) {\n\t\t\treturn this._query(fn, fn, params).then(callback);\n\t\t},\n\n\t\t//////////////////////////////////////////////////////////////\n\t\t// Our internal query method: _query()\n\t\t//\n\t\t// This manages the call-tracking bureaucracy (registerCall/unregisterCall) for this request,\n\t\t// and then -- if the call is not already a wrapped call -- builds & executes an AJAX query .\n\t\t//\n\t\t_query: function(method, fn, params, options, model) {\n\t\t\toptions = options || {};\n\t\t\toptions.duplicateQueryPolicy =\n\t\t\t\toptions.duplicateQueryPolicy || this.duplicateQueryPolicy;\n\n\t\t\t// Keep track of in-progress RPC calls & all their state:\n\t\t\tthis.callsById = this.callsById || {};\n\t\t\tthis.callsByName = this.callsByName || {};\n\n\t\t\t// Is this meant to be a normal AJAX query, or did a method function return a promise that we're just wrapping?\n\t\t\tvar isAjax = !_.isPromise(fn);\n\n\t\t\t// This is what _query now returns, instead of the raw promise from $.ajax:\n\t\t\tvar d = isAjax ? new $.Deferred() : fn;\n\n\t\t\t// generate unique request id (timestamp)\n\t\t\tvar id = _.uniqueId(String(new Date().getTime()));\n\n\t\t\t// Create a record describing this API call:\n\t\t\tvar call = {\n\t\t\t\tid: id,\n\t\t\t\tdeferred: d,\n\t\t\t\tmodel: model,\n\t\t\t\tmethod: method, // the key of the call in model.methods & model.parsers\n\t\t\t\tparams: params,\n\t\t\t\trpcMethod: isAjax ? fn : method + ':promise', // the name of the API function on the DAM\n\t\t\t\toptions: options,\n\t\t\t};\n\n\t\t\t// Grab the stack:\n\t\t\ttry {\n\t\t\t\tthrow new Error('API call from:');\n\t\t\t} catch (e) {\n\t\t\t\tcall.stack = e.stack;\n\t\t\t}\n\n\t\t\t// Enforce duplicate query policy if there's a duplicate:\n\t\t\tif (\n\t\t\t\toptions.duplicateQueryPolicy !== 'ignore' &&\n\t\t\t\tthis.callsByName[call.rpcMethod]\n\t\t\t) {\n\t\t\t\tswitch (options.duplicateQueryPolicy) {\n\t\t\t\t\tcase 'abort':\n\t\t\t\t\t\tvar otherXhr =\n\t\t\t\t\t\t\tthis.callsByName[call.rpcMethod] &&\n\t\t\t\t\t\t\tthis.callsByName[call.rpcMethod].xhr;\n\t\t\t\t\t\t// Is there another pending call to abort?\n\t\t\t\t\t\tif (otherXhr && otherXhr.state && otherXhr.state() == 'pending') {\n\t\t\t\t\t\t\totherXhr.abort && otherXhr.abort();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'merge':\n\t\t\t\t\t\t// Hand back the previous query's promise\n\t\t\t\t\t\treturn this.callsByName[call.rpcMethod].deferred.promise();\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (isAjax) {\n\t\t\t\t// check if params and the function name are ok.\n\t\t\t\tif (!_.isArray(params) || !_.isString(fn)) {\n\t\t\t\t\t// TODO: again, why not just throw errors? why 'onError' them?\n\t\t\t\t\treturn this.onError(\n\t\t\t\t\t\tnew Rpc.DefinitionError(\n\t\t\t\t\t\t\t'Type Mismatch in RPC function definition for \"' +\n\t\t\t\t\t\t\t\tcall.method +\n\t\t\t\t\t\t\t\t'\"',\n\t\t\t\t\t\t),\n\t\t\t\t\t\tcall,\n\t\t\t\t\t\tparams,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\t// DAM-6494: prepend session key to parameters list for all non-public API calls:\n\t\t\t\t\tif (Netx && Netx.session) {\n\t\t\t\t\t\tif ((Netx.session.get('publicMethods') || []).indexOf(fn) == -1) {\n\t\t\t\t\t\t\tvar authParam = Netx.session.getToken() || Netx.session.getKey();\n\t\t\t\t\t\t\tif (authParam) {\n\t\t\t\t\t\t\t\t// ... prepend the session key to the parameters\n\t\t\t\t\t\t\t\tparams.unshift(authParam);\n\t\t\t\t\t\t\t\t// console.log('added key to method call'); //DEBUG\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// There would be no access key for the public method `getPublicMethods`\n\t\t\t\t\t\t\t\tif (fn !== 'getPublicMethods') {\n\t\t\t\t\t\t\t\t\tconsole.warn('no access key for private method \"' + fn + '\"');\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\n\t\t\t\t////////////////////////////////////////\n\t\t\t\t// XHR PROGRESS TRACKING\n\t\t\t\t////////////////////////////////////////\n\t\t\t\tvar xhrCompletedProgress = false,\n\t\t\t\t\ttrackProgress = false;\n\n\t\t\t\t// REST progress/messaging\n\t\t\t\tvar _xhrComplete = function() {\n\t\t\t\t\tif (!model || !trackProgress) return;\n\t\t\t\t\txhrCompletedProgress = true;\n\t\t\t\t\tdispatcher.trigger('netx:rest:loaded', model, this.namespace, fn);\n\t\t\t\t}.bind(this);\n\n\t\t\t\tif (model && model.xhrTrackProgress) {\n\t\t\t\t\tvar xhrExcludeProgress = model.xhrExcludeProgress || [];\n\t\t\t\t\tif (xhrExcludeProgress.indexOf(fn) < 0) {\n\t\t\t\t\t\tvar xhrTrackProgress = model.xhrTrackProgress;\n\t\t\t\t\t\txhrTrackProgress =\n\t\t\t\t\t\t\txhrTrackProgress === true || xhrTrackProgress[fn];\n\n\t\t\t\t\t\ttrackProgress =\n\t\t\t\t\t\t\txhrTrackProgress != null &&\n\t\t\t\t\t\t\t(xhrTrackProgress === true || xhrTrackProgress.call(model));\n\n\t\t\t\t\t\ttrackProgress &&\n\t\t\t\t\t\t\t_.delay(\n\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t!xhrCompletedProgress &&\n\t\t\t\t\t\t\t\t\t\tdispatcher.trigger(\n\t\t\t\t\t\t\t\t\t\t\t'netx:rest:loading',\n\t\t\t\t\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\t\t\t\t\tthis.namespace,\n\t\t\t\t\t\t\t\t\t\t\tfn,\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}.bind(this),\n\t\t\t\t\t\t\t\t15,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t////////////////////////////////////////\n\t\t\t\t// !XHR PROGRESS TRACKING\n\t\t\t\t////////////////////////////////////////\n\n\t\t\t\t// create Ajax query:\n\t\t\t\tvar ajaxArgs = {\n\t\t\t\t\tcontentType: this.contentType + '; charset=' + this.charset,\n\t\t\t\t\ttype: 'POST',\n\t\t\t\t\tdataType: 'json',\n\t\t\t\t\turl: (this.url || Netx.URL.api) + '/' + fn,\n\t\t\t\t\tdata: JSON.stringify({\n\t\t\t\t\t\tdataContext: 'json',\n\t\t\t\t\t\tjsonrpc: '2.0',\n\t\t\t\t\t\tmethod: this.namespace + this.namespaceDelimiter + fn,\n\t\t\t\t\t\tid: id,\n\t\t\t\t\t\tparams: params,\n\t\t\t\t\t}),\n\t\t\t\t\tstatusCode: {\n\t\t\t\t\t\t// Convert errorThrown to special HTTP errors ... why?\n\t\t\t\t\t\t404: _.bind(function(jXhr, status, errorThrown) {\n\t\t\t\t\t\t\t_xhrComplete();\n\t\t\t\t\t\t\tthis.onError(\n\t\t\t\t\t\t\t\tnew Rpc.Http404Error(errorThrown.message),\n\t\t\t\t\t\t\t\tcall,\n\t\t\t\t\t\t\t\tjXhr,\n\t\t\t\t\t\t\t\tstatus,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}, this),\n\t\t\t\t\t\t500: _.bind(function(jXhr, status, errorThrown) {\n\t\t\t\t\t\t\t_xhrComplete();\n\t\t\t\t\t\t\tthis.onError(\n\t\t\t\t\t\t\t\tnew Rpc.Http500Error(errorThrown.message),\n\t\t\t\t\t\t\t\tcall,\n\t\t\t\t\t\t\t\tjXhr,\n\t\t\t\t\t\t\t\tstatus,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}, this),\n\t\t\t\t\t},\n\t\t\t\t\tsuccess: _.bind(function(data, status, xhr) {\n\t\t\t\t\t\tif (this.garbageCollected) return;\n\t\t\t\t\t\t_xhrComplete();\n\t\t\t\t\t\tthis.parseReply(data, status, fn, id);\n\t\t\t\t\t}, this),\n\t\t\t\t\terror: _.bind(function(jXhr, status, errorThrown) {\n\t\t\t\t\t\tif (this.garbageCollected) return;\n\t\t\t\t\t\t_xhrComplete();\n\t\t\t\t\t\t// these two error types are handled by statusCode, above...\n\t\t\t\t\t\tif (jXhr.status !== 404 && jXhr.status !== 500) {\n\t\t\t\t\t\t\t// for all other errors, jump to the error handler\n\t\t\t\t\t\t\tthis.onError(errorThrown, call, jXhr, status);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this),\n\t\t\t\t\theaders: options.headers,\n\t\t\t\t};\n\n\t\t\t\t// @if NODE_ENV=\"development\"\n\t\t\t\t////////////////////////////////\n\n\t\t\t\t// TODO: push this logic into jQuery, using sinon.js.\n\t\t\t\t//\n\t\t\t\t// If this object has a test fixture for this method, return the test data directly & don't bother the server\n\n\t\t\t\tif (model && model.fixtures && model.fixtures[fn]) {\n\t\t\t\t\tvar data = {\n\t\t\t\t\t\tid: id,\n\t\t\t\t\t\tresult: model.fixtures[fn].valid,\n\t\t\t\t\t};\n\t\t\t\t\tif (_.isString(data.result)) {\n\t\t\t\t\t\tdata.result = JSON.parse(data.result);\n\t\t\t\t\t} else if (_.isFunction(data.result)) {\n\t\t\t\t\t\tdata.result = data.result.apply(model, params);\n\t\t\t\t\t}\n\t\t\t\t\t// call.xhr = {}; // TODO: a more convincing fake XHR object?\n\t\t\t\t\t_.defer(\n\t\t\t\t\t\t_.bind(function() {\n\t\t\t\t\t\t\tthis.parseReply(data, 200, fn, id);\n\t\t\t\t\t\t}, this),\n\t\t\t\t\t);\n\t\t\t\t\tconsole.debug('faking server response for method \"' + fn + '\"');\n\t\t\t\t} else {\n\t\t\t\t\t// send the real query:\n\n\t\t\t\t\t///////////////////////////////\n\t\t\t\t\t// @endif\n\n\t\t\t\t\tcall.xhr = $.ajax(ajaxArgs);\n\n\t\t\t\t\t// @if NODE_ENV=\"development\"\n\t\t\t\t\t///////////////////////////////\n\t\t\t\t}\n\t\t\t\t///////////////////////////////\n\t\t\t\t// @endif\n\t\t\t} else {\n\t\t\t\t// We are wrapping a promise\n\t\t\t\t// Just in case it was an ajax promise, and .xhr is defined:\n\t\t\t\tcall.xhr = d.xhr;\n\n\t\t\t\td.then(\n\t\t\t\t\t_.bind(function(result) {\n\t\t\t\t\t\t// Clean up the call record when we're done,\n\t\t\t\t\t\t// since parseReply won't ever be called.\n\t\t\t\t\t\tthis.unregisterCall(call);\n\n\t\t\t\t\t\tif (this.garbageCollected) return;\n\n\t\t\t\t\t\t// Call the success method if defined,\n\t\t\t\t\t\tif (call.options.success) {\n\t\t\t\t\t\t\tcall.options.success(result);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this),\n\t\t\t\t\t// on reject, call the error method if defined:\n\t\t\t\t\tcall.options.error,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Store our record of the call:\n\t\t\tthis.registerCall(call);\n\n\t\t\treturn isAjax ? d.promise() : d;\n\t\t},\n\n\t\t// registerCall() keeps track of an API call in progress, in the hashes this.callsByName and this.callsById.\n\t\t// It also sets .syncing on the call's model, to indicate that the model has unresolved API calls in progress.\n\t\t//\n\t\t// unregisterCall() clears tracking of a call, and removes .syncing from the model if it has no more API calls in progress.\n\n\t\tregisterCall: function(call) {\n\t\t\tthis.callsByName[call.rpcMethod] = this.callsById[call.id] = call;\n\t\t\tif (call.model) {\n\t\t\t\tcall.model.syncing = true;\n\t\t\t}\n\t\t},\n\n\t\tunregisterCall: function(call) {\n\t\t\tdelete this.callsById[call.id];\n\t\t\tdelete this.callsByName[call.rpcMethod];\n\t\t\tif (call.model) {\n\t\t\t\t// If there are no more calls, deleting the 'syncing' flag:\n\t\t\t\tif (!(_.size(this.callsById) || _.size(this.callsByName))) {\n\t\t\t\t\tdelete call.model.syncing;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * checkParameters\n\t\t * Check the parameters of a method definition\n\t\t *\n\t\t * @param {Netx.Model} model model\n\t\t * @param {Array} params Parameters of a method definition\n\t\t * @param {Object} options RPC options\n\t\t * @param {boolean} wasFunction Was this parameter generated by a function? Those are parsed differently ...\n\t\t * @returns {Object} The parsed value\n\t\t * @see checkParameter\n\t\t */\n\t\tcheckParameters: function(model, params, options, wasFunction) {\n\t\t\tvar parsedParams = [];\n\n\t\t\t_.each(\n\t\t\t\tparams,\n\t\t\t\tfunction(param) {\n\t\t\t\t\tparsedParams.push(\n\t\t\t\t\t\tthis.checkParameter(model, param, options, wasFunction),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tthis,\n\t\t\t);\n\n\t\t\treturn parsedParams;\n\t\t},\n\n\t\t/**\n\t\t * checkParameter\n\t\t * Check one parameter of a method definition\n\t\t *\n\t\t * @param {Netx.Model} model model\n\t\t * @param {} param Parameter of a method definition\n\t\t * @param {} options RPC options\n\t\t * @param {boolean} wasFunction Was this parameter generated by a function? Those are parsed differently ...\n\t\t * @returns {Object} The parsed value\n\t\t */\n\t\tcheckParameter: function(model, param, options, wasFunction) {\n\t\t\toptions = options || {};\n\n\t\t\t// is the param a function?\n\t\t\tif (_.isFunction(param)) {\n\t\t\t\tvar result = param.apply(model, this.decodeArguments(options));\n\t\t\t\tif (_.isFunction(result)) {\n\t\t\t\t\tthrow new Rpc.DefinitionError(\n\t\t\t\t\t\t'rpc method parameter functions cannot return other functions',\n\t\t\t\t\t\titem,\n\t\t\t\t\t);\n\t\t\t\t} else if (_.isUndefined(result)) {\n\t\t\t\t\tthrow new Rpc.DefinitionError(\n\t\t\t\t\t\t'rpc method parameter functions cannot return undefined parameters',\n\t\t\t\t\t\titem,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (param.isModel || param.isCollection) {\n\t\t\t\treturn param.toJSON();\n\t\t\t}\n\n\t\t\tif (_.isObject(param)) return param;\n\n\t\t\tif (_.isNumber(param)) return param;\n\n\t\t\tif (_.isBoolean(param)) return param;\n\n\t\t\tif (_.isUndefined(param)) {\n\t\t\t\tthrow new Rpc.DefinitionError(\n\t\t\t\t\t'rpc method parameters cannot be undefined',\n\t\t\t\t\titem,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (_.isNull(param)) {\n\t\t\t\t// We dislike using NULL in X7. Backbone doesn't play well with NULL. We prefer to pass\n\t\t\t\t// empty strings in json-rpc calls. But during development we have sometimes found API\n\t\t\t\t// calls that require a null, and until those get fixed we have to allow NULLs.\n\t\t\t\tconsole.warn('passing a NULL rpc parameter!');\n\t\t\t\treturn param;\n\t\t\t}\n\n\t\t\tif (!_.isString(param)) {\n\t\t\t\t// Programmer Hat-Eat Error:\n\t\t\t\t// Somebody defined a seventh fundamental data type in Javascript without consulting the ECMA standards committee!\n\t\t\t\t// Night is day, dogs are cats, society has collapsed, all bets are off, anything could happen.\n\t\t\t\t// Loot some RMEs, retreat to your safe room & await further instructions.\n\t\t\t\tthrow new Rpc.DefinitionError('Unknown parameter data type!');\n\t\t\t}\n\n\t\t\t// From here on can safely assume param is a string.\n\t\t\tif (param == '') {\n\t\t\t\treturn param; // totally valid to specify empty strings as API args.\n\t\t\t}\n\n\t\t\tif (param == 'attributes') {\n\t\t\t\tconsole.warn(\"'attributes' rpc argument removed in 8.12\");\n\t\t\t\t// ... but you can still pass a string called \"attributes\". It just doesn't get any special treatment.\n\t\t\t}\n\n\t\t\t// Encode 'goo' attributes if there are some and 'goo' is specified.\n\t\t\tif (param == 'goo' && model.attributes && model.gooAttrs) {\n\t\t\t\treturn JSON.stringify(_.pick(model.attributes, model.gooAttrs));\n\t\t\t}\n\n\t\t\t// If this parameter was returned by a function, we're done with it.\n\t\t\tif (wasFunction) {\n\t\t\t\treturn param;\n\t\t\t}\n\n\t\t\t// If the parameter was defined in an array,\n\t\t\t// try to use it as a reference on the model/collection,\n\t\t\t// ala vanilla Backbone.RPC :\n\t\t\tif (param.indexOf('.') < 0) {\n\t\t\t\t// nothing special here.\n\t\t\t\tif (model.isModel) {\n\t\t\t\t\t//if (model.has(param))\n\t\t\t\t\t// HACK: Backbone (darn it!) returns false if a property exists but is null ....\n\t\t\t\t\tif (typeof model.attributes[param] !== 'undefined') {\n\t\t\t\t\t\t// String refers to a model attribute. Return the attribute.\n\t\t\t\t\t\treturn model.get(param);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if the key can't be found in the attributes, it may just be a JS object property\n\t\t\t\tif (!_.isUndefined(model[param])) {\n\t\t\t\t\t// String refers to a model property. Return the property.\n\t\t\t\t\t// TODO: now that we have method arguments, maybe deprecate this feature?\n\t\t\t\t\treturn model[param];\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Rpc.DefinitionError(\n\t\t\t\t\t\t'rpc method parameter \"' + param + '\" is undefined',\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Parameters containing dots: recurse into objects.\n\t\t\t\tconsole.warn(\n\t\t\t\t\t'dot-notation in method arguments deprecated, gone in 8.13',\n\t\t\t\t);\n\n\t\t\t\tvar parts = param.split('.');\n\t\t\t\t//console.debug(\"split \", param, ' into ', parts.join(','));\n\t\t\t\tif (typeof model[parts[0]] !== 'undefined') {\n\t\t\t\t\t// extract the child property from the parent property\n\t\t\t\t\treturn model[parts[0]][parts[1]];\n\t\t\t\t} else if (model.isModel && model.has(parts[0])) {\n\t\t\t\t\t// extract the child property from the attribute\n\t\t\t\t\treturn model.get(parts[0])[parts[1]];\n\t\t\t\t} else {\n\t\t\t\t\t// parent property doesn't exist\n\t\t\t\t\t//console.debug('bonk');\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}, // checkParameter\n\n\t\t/**\n\t\t * When method definitions, method parameter definitions or method parsers are functions,\n\t\t * they are invoked with the original arguments + an enhanced options object. (DAM-8469/DAM-8468)\n\t\t * We encode the original arguments in the options object, and decode them here:\n\t\t * @param {object} options - Sync options\n\t\t * @returns {array} Arguments array. Last argument *must* be an options object.\n\t\t */\n\t\tdecodeArguments: function(options) {\n\t\t\tif (options.invokedArguments) {\n\t\t\t\t// arguments were encoded. Use them.\n\t\t\t\treturn options.invokedArguments.concat(\n\t\t\t\t\t_.omit(options, 'invokedArguments'),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// The default case with no arguments:\n\t\t\t\treturn [options];\n\t\t\t}\n\t\t},\n\n\t\t// checkMethods() parses the model.methods array to create the RPC signature, then calls _query().\n\t\tcheckMethods: function(model, method, options) {\n\t\t\t//if (this === window) debugger; // DEBUG\n\n\t\t\tvar definition = null,\n\t\t\t\tdeeperNested = false,\n\t\t\t\texec = null,\n\t\t\t\tparsedParameters = [],\n\t\t\t\twasFunction = false,\n\t\t\t\thadArguments = false,\n\t\t\t\tfunctionArgs = 0;\n\n\t\t\toptions = options || {};\n\n\t\t\t// Rewrite method if name is delete\n\t\t\t// NOTE: this is pretty screwy: you must name your delete method \"remove\" in your model.\n\t\t\t// but you must call the model's \"delete\" method to execute it.\n\t\t\tmethod = method === 'delete' ? 'remove' : method;\n\n\t\t\t// This can only be an array or a function:\n\t\t\tdefinition = model.methods[method];\n\t\t\t// If function, replace with return value (which must be an array)\n\t\t\tif (_.isFunction(definition)) {\n\t\t\t\twasFunction = true;\n\t\t\t\thadArguments = definition.length > 0;\n\n\t\t\t\t// Decode any encoded arguments into an array:\n\t\t\t\t//\n\t\t\t\tvar decodedArguments = this.decodeArguments(options);\n\n\t\t\t\t// DAM-9216: (bug with multi-call methods and success/error)\n\t\t\t\t//\n\t\t\t\t// If this method function wraps any other inner RPC methods, then it should,\n\t\t\t\t// and probably does, pass along its options argument when calling those inner methods.\n\t\t\t\t// However, if options.success or options.error are defined, they're intended\n\t\t\t\t// to reflect the status of this outer method, not of any inner ones.\n\t\t\t\t// Therefore, we must omit those two options when calling this method function,\n\t\t\t\t// so they don't get passed to other RPC functions & cause backbone.sync\n\t\t\t\t// (or whatever) to finish prematurely.\n\t\t\t\t//\n\t\t\t\t// Assertion:\n\t\t\t\t// For the next bit, we depend on decodedArguments() always returning an array,\n\t\t\t\t// always having at least one element in the array,\n\t\t\t\t// and the last element always being an options argument.\n\t\t\t\tif (\n\t\t\t\t\tdecodedArguments.length == 0 ||\n\t\t\t\t\t_.isString(_.last(decodedArguments)) ||\n\t\t\t\t\t_.isNumber(_.last(decodedArguments)) ||\n\t\t\t\t\t_.isArray(_.last(decodedArguments))\n\t\t\t\t) {\n\t\t\t\t\tthrow 'Assertion error in decoded arguments!'; // should never happen.\n\t\t\t\t}\n\t\t\t\t// Omit those two:\n\t\t\t\tdecodedArguments[decodedArguments.length - 1] = _.omit(\n\t\t\t\t\tdecodedArguments[decodedArguments.length - 1],\n\t\t\t\t\t'success',\n\t\t\t\t\t'error',\n\t\t\t\t);\n\n\t\t\t\t// Execute method function with arguments:\n\t\t\t\tdefinition = definition.apply(model, decodedArguments);\n\n\t\t\t\t// SPECIAL CASE #1:\n\t\t\t\t// (DAM-8470: let method functions chain multiple RPC calls)\n\t\t\t\t//\n\t\t\t\t// If an RPC method definition function returns a promise,\n\t\t\t\t// short-circuit everything else and hand that promise to triggerQuery:\n\t\t\t\tif (_.isPromise(definition)) {\n\t\t\t\t\treturn this.triggerQuery(method, definition, [], options, model);\n\t\t\t\t}\n\n\t\t\t\t// SPECIAL CASE #2:\n\t\t\t\t// (DAM-8220: let method functions supress RPC calls entirely)\n\t\t\t\t//\n\t\t\t\t// If an RPC methods definition function returns false,\n\t\t\t\t// it has decided that no actual RPC call should be made.\n\t\t\t\t// In that case, hand a pre-resolved promise to _query,\n\t\t\t\t// and it will get handled the same way as in special case #1.\n\t\t\t\t//\n\t\t\t\t// (Of course a method function could do this internally,\n\t\t\t\t// and return a resolved promise -- same effect.)\n\t\t\t\tif (definition === false) {\n\t\t\t\t\tconsole.warn('RPC call suppressed by method function.'); //DEBUG -- remove before shipping ... just want to watch for a while & notice if anything's already doing this.\n\t\t\t\t\t// DEVNOTE:\n\t\t\t\t\t// I don't *think* we want to trigger the request: and complete: events here,\n\t\t\t\t\t// since no actual request went out. Fake events ... just say no!\n\t\t\t\t\t// (But if we change our mind for some reason, replace _query with triggerQuery .)\n\t\t\t\t\treturn this._query(\n\t\t\t\t\t\tmethod,\n\t\t\t\t\t\tnew $.Deferred().resolve(),\n\t\t\t\t\t\t[],\n\t\t\t\t\t\toptions,\n\t\t\t\t\t\tmodel,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!_.isArray(definition)) {\n\t\t\t\t// Not even giving you the option to override this one, since it\n\t\t\t\t// can only be a bug in an object definition & can't be fixed\n\t\t\t\t// except by writing code correctly!\n\t\t\t\tthrow new Rpc.DefinitionError(\n\t\t\t\t\t'Bad rpc method \"' + method + \"'\",\n\t\t\t\t\tdefinition,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// check if array is deeper nested\n\t\t\tif (_.isArray(definition[0])) {\n\t\t\t\tdeeperNested = true;\n\t\t\t}\n\n\t\t\t// execute a single call\n\t\t\tif (deeperNested !== true && _.isArray(definition)) {\n\t\t\t\tparsedParameters = _.clone(definition);\n\t\t\t\texec = parsedParameters.shift();\n\n\t\t\t\t// TODO: deprecate this after 8.12. Method functions should stop needing/expecting any further parsing of the method array they return.\n\t\t\t\tif (!hadArguments) {\n\t\t\t\t\tparsedParameters = this.checkParameters(\n\t\t\t\t\t\tmodel,\n\t\t\t\t\t\tparsedParameters,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t\twasFunction,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\t// DAM-5552: as of 8.10, do no further parsing of parameters returned from method signature functions that take arguments\n\t\t\t\t\t// console.debug('not parsing ...');//DEBUG\n\t\t\t\t}\n\n\t\t\t\treturn this.triggerQuery(\n\t\t\t\t\tmethod,\n\t\t\t\t\texec,\n\t\t\t\t\tparsedParameters,\n\t\t\t\t\toptions,\n\t\t\t\t\tmodel,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Execute nested calls in parallel:\n\t\t\t_.each(\n\t\t\t\tdefinition,\n\t\t\t\tfunction(localdef) {\n\t\t\t\t\tparsedParameters = _.clone(localdef);\n\t\t\t\t\texec = parsedParameters.shift();\n\n\t\t\t\t\tif (!hadArguments) {\n\t\t\t\t\t\tparsedParameters = this.checkParameters(\n\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\tparsedParameters,\n\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t\twasFunction,\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// DAM-5552: during deprecation, do no further parsing of parameters returned from method signature functions that take arguments\n\t\t\t\t\t\t// console.debug('not parsing ...');//DEBUG\n\t\t\t\t\t}\n\n\t\t\t\t\t// TODO: (MAYBE) In the case of these nested calls, we're not returning a promise because\n\t\t\t\t\t// this 'return this._query(...)' only exits the _.each loop ... so we fall through to the \"return null;\" below the loop.\n\t\t\t\t\t// Instead, we should amalgamate these promises into a super-promise using $.when().\n\t\t\t\t\t// (However, we're not currently using the \"nested calls\" feature of BRPC at all, except by accident...)\n\t\t\t\t\treturn this.triggerQuery(\n\t\t\t\t\t\tmethod,\n\t\t\t\t\t\texec,\n\t\t\t\t\t\tparsedParameters,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t\tmodel,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tthis,\n\t\t\t);\n\n\t\t\treturn null;\n\t\t},\n\n\t\t// Netx default exception handler\n\t\tdefaultExceptionHandler: function(exception) {\n\t\t\t// NOTE: Backbone.RPC is sending custom Error subclasses here, which we could test for using instanceof.\n\t\t\tvar sessionErrors = [6, 3001, 3002, 3003];\n\t\t\tif (sessionErrors.includes(exception.code)) {\n\t\t\t\t// If we have a token, some calls with give sessionErrors while others will pass.\n\t\t\t\tif (!Netx.session.getToken()) {\n\t\t\t\t\t// If not, a session error means our key is invalid.\n\t\t\t\t\tdispatcher.trigger('session:expire');\n\t\t\t\t}\n\t\t\t\tconsole.error(\n\t\t\t\t\texception.data.call.method +\n\t\t\t\t\t\t'() API exception ' +\n\t\t\t\t\t\texception.code +\n\t\t\t\t\t\t': ' +\n\t\t\t\t\t\texception.message,\n\t\t\t\t);\n\t\t\t\tconsole.error(exception.stack); // return stack\n\t\t\t\tconsole.error(exception.data.call.stack); // entry stack\n\t\t\t} else if (exception.code === -1) {\n\t\t\t\t// TODO: https://jira.netx.net/browse/DAM-10129\n\t\t\t\t// 400 error -- URL not found\n\t\t\t\tvar details = i18n.t('i18n.error400');\n\t\t\t\tif (exception.data.call.method) {\n\t\t\t\t\tdetails += '<br />' + exception.data.call.method;\n\t\t\t\t}\n\t\t\t\tdispatcher.trigger('app:alert', details);\n\n\t\t\t\tconsole.error('exception:');\n\t\t\t\tconsole.error(exception.stack);\n\t\t\t} else if (exception.code === -2) {\n\t\t\t\t// TODO: https://jira.netx.net/browse/DAM-10129\n\t\t\t\t// 500 error -- server not available\n\t\t\t\tvar details = i18n.t('i18n.error500');\n\t\t\t\tif (exception.data.call.method) {\n\t\t\t\t\tdetails +=\n\t\t\t\t\t\t'<br />' +\n\t\t\t\t\t\texception.data.call.method +\n\t\t\t\t\t\t'(): Server Not Available (Error 500)';\n\t\t\t\t}\n\t\t\t\tdispatcher.trigger('app:alert', details);\n\n\t\t\t\tconsole.error('exception:');\n\t\t\t\tconsole.error(exception.stack);\n\t\t\t} else if (exception.code === -32602) {\n\t\t\t\t// RPC Invalid Params\n\t\t\t\t// HACK, HACK, HACK, ACK, ACK, CK, K\n\t\t\t\t// https://jira.netx.net/browse/DAM-5803\n\t\t\t\t// TODO: Remove in 8.12? Shouldn't be necessary any more ....\n\t\t\t\tconsole.warn('server claims no API key ... '); // We should never see this ...\n\t\t\t\tif (!Netx.session.getKey()) {\n\t\t\t\t\tdispatcher.trigger('session:expire');\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Do not spit out an error for downloads needing justification or approval\n\t\t\t// 4003 is for an asset bean not existing - let the controllers handle this - the asset wont exist on an upload request form!\n\t\t\telse if (\n\t\t\t\texception.code !== 221 &&\n\t\t\t\texception.code !== 220 &&\n\t\t\t\texception.code !== 4003\n\t\t\t) {\n\t\t\t\t// Some other problem:\n\t\t\t\t//\n\t\t\t\t// DAM-5802: don't ever show this fairly useless error alert window.\n\t\t\t\t// if (! _.isUndefined(Netx.custom.SHOW_RPC_ALERT) && Netx.custom.SHOW_RPC_ALERT == true) {\n\t\t\t\t// \tdispatcher.trigger('app:alert', \"RPC Error: \" + exception.message,'Danger');\n\t\t\t\t// }\n\n\t\t\t\t// ... but always log to the console.\n\t\t\t\tconsole.error(\n\t\t\t\t\texception.data.call.method +\n\t\t\t\t\t\t'() API exception ' +\n\t\t\t\t\t\texception.code +\n\t\t\t\t\t\t': ' +\n\t\t\t\t\t\texception.message,\n\t\t\t\t);\n\t\t\t\tconsole.error(exception.stack); // return stack\n\t\t\t\tconsole.error(exception.data.call.stack); // entry stack\n\t\t\t}\n\n\t\t\t//throw exception;\n\t\t},\n\n\t\t// Exception handler\n\t\thandleExceptions: function(error) {\n\t\t\tvar exceptionHandler;\n\t\t\tif (\n\t\t\t\terror &&\n\t\t\t\terror.data &&\n\t\t\t\terror.data.call &&\n\t\t\t\terror.data.call.options &&\n\t\t\t\terror.data.call.options.exceptionHandler\n\t\t\t) {\n\t\t\t\texceptionHandler = error.data.call.options.exceptionHandler; // as overridden in sync options\n\t\t\t} else {\n\t\t\t\texceptionHandler = _.isFunction(this.options.exceptionHandler)\n\t\t\t\t\t? this.options.exceptionHandler\n\t\t\t\t\t: this.defaultExceptionHandler; // as specified when Rpc was instantiated\n\t\t\t}\n\n\t\t\texceptionHandler.call(this, error);\n\t\t\treturn this;\n\t\t},\n\t}; // Rpc.prototype\n\n\tObject.defineProperty(Rpc, 'url', {\n\t\tget function() {\n\t\t\treturn Netx.URL.api;\n\t\t},\n\t});\n\n\t///////////////\n\t//\n\t// Extend RPC onto Backbone:\n\t//\n\t//\n\t// assign rpc to backbone itself\n\tBackbone.Rpc = Rpc;\n\n\t// overwrite backbones model constructor\n\tBackbone.Model = Backbone.Model.extend({\n\t\tconstructor: function(model) {\n\t\t\tnewConst(model, this);\n\t\t\t// call the original constructor\n\t\t\toldModelConst.apply(this, arguments);\n\t\t},\n\t});\n\n\t// overwrite backbones collection constructor\n\tBackbone.Collection = Backbone.Collection.extend({\n\t\t// Should this take the model or the collection?\n\t\tconstructor: function(model) {\n\t\t\tnewConst(model, this);\n\t\t\t// call the original constructor\n\t\t\toldCollectionConst.apply(this, arguments);\n\t\t},\n\t});\n\n\t// overwrite Backbone.sync\n\t// (using the anonymous function pattern to keep the internal variables private.)\n\tBackbone.sync = (function(Rpc) {\n\t\t// Generate a new Sync Method for JSON RPC Queuing\n\t\tvar rpc = null,\n\t\t\tsync = function(method, model, options) {\n\t\t\t\t// skip all this RPC stuff if this model doesn't use RPC:\n\t\t\t\tif (!(model._rpc instanceof Rpc)) {\n\t\t\t\t\treturn sync.previous.apply(model, arguments);\n\t\t\t\t}\n\n\t\t\t\t// define a local error callback that will hand over the data to the backbone error handler\n\t\t\t\tvar errorCb = function(data) {\n\t\t\t\t\toptions.error(model, data);\n\t\t\t\t};\n\n\t\t\t\t// assign the models JsonRpc instance locally\n\t\t\t\t// (closure from enclosing method)\n\t\t\t\trpc = model._rpc;\n\n\t\t\t\t// First, set the api url\n\t\t\t\trpc.url = _.isFunction(model.url) ? model.url() : model.url;\n\n\t\t\t\t// Second, set the namespace\n\t\t\t\tif (_.isString(model.namespace) === true) {\n\t\t\t\t\trpc.namespace = model.namespace;\n\t\t\t\t}\n\n\t\t\t\t// go on and check the rpc methods\n\t\t\t\t// TODO: not totally sure why this 'apply' is necessary ....\n\t\t\t\treturn rpc.checkMethods.apply(rpc, [model, method, options]);\n\t\t\t};\n\n\t\t// Expose the previous Backbone.sync as Backbone.sync.previous in case\n\t\t// the caller wishes to switch provider\n\t\tsync.previous = oldSync;\n\t\treturn sync;\n\t})(Rpc);\n\n\tmodule.exports = Rpc;\n\n\treturn Backbone;\n});\n\n/////////////////////////////////////////\n// Close the module inclusion pattern: //\n/////////////////////////////////////////\n","/*!\n * Modernizr v2.7.2\n * www.modernizr.com\n *\n * Copyright (c) Faruk Ates, Paul Irish, Alex Sexton\n * Available under the BSD and MIT licenses: www.modernizr.com/license/\n */\n\n/*\n * Modernizr tests which native CSS3 and HTML5 features are available in\n * the current UA and makes the results available to you in two ways:\n * as properties on a global Modernizr object, and as classes on the\n * <html> element. This information allows you to progressively enhance\n * your pages with a granular level of control over the experience.\n *\n * Modernizr has an optional (not included) conditional resource loader\n * called Modernizr.load(), based on Yepnope.js (yepnopejs.com).\n * To get a build that includes Modernizr.load(), as well as choosing\n * which tests to include, go to www.modernizr.com/download/\n *\n * Authors Faruk Ates, Paul Irish, Alex Sexton\n * Contributors Ryan Seddon, Ben Alman\n */\n\n+function( root, factory ) {\n\t// CommonJS\n\tif (typeof exports == \"object\") {\n\t\tmodule.exports = factory( require('global/window'), require('global/document') );\n\t}\n\t// Browser\n\telse {\n\t\tfactory( this, this.document );\n\t}\n}( this, function ( window, document ) {\n\n var version = '2.7.2',\n\n Modernizr = {},\n\n /*>>cssclasses*/\n // option for enabling the HTML classes to be added\n enableClasses = true,\n /*>>cssclasses*/\n\n docElement = document.documentElement,\n\n /**\n * Create our \"modernizr\" element that we do most feature tests on.\n */\n mod = 'modernizr',\n modElem = document.createElement(mod),\n mStyle = modElem.style,\n\n /**\n * Create the input element for various Web Forms feature tests.\n */\n inputElem /*>>inputelem*/ = document.createElement('input') /*>>inputelem*/ ,\n\n /*>>smile*/\n smile = ':)',\n /*>>smile*/\n\n toString = {}.toString,\n\n // TODO :: make the prefixes more granular\n /*>>prefixes*/\n // List of property values to set for css tests. See ticket #21\n prefixes = ' -webkit- -moz- -o- -ms- '.split(' '),\n /*>>prefixes*/\n\n /*>>domprefixes*/\n // Following spec is to expose vendor-specific style properties as:\n // elem.style.WebkitBorderRadius\n // and the following would be incorrect:\n // elem.style.webkitBorderRadius\n\n // Webkit ghosts their properties in lowercase but Opera & Moz do not.\n // Microsoft uses a lowercase `ms` instead of the correct `Ms` in IE8+\n // erik.eae.net/archives/2008/03/10/21.48.10/\n\n // More here: github.com/Modernizr/Modernizr/issues/issue/21\n omPrefixes = 'Webkit Moz O ms',\n\n cssomPrefixes = omPrefixes.split(' '),\n\n domPrefixes = omPrefixes.toLowerCase().split(' '),\n /*>>domprefixes*/\n\n /*>>ns*/\n ns = {'svg': 'http://www.w3.org/2000/svg'},\n /*>>ns*/\n\n tests = {},\n inputs = {},\n attrs = {},\n\n classes = [],\n\n slice = classes.slice,\n\n featureName, // used in testing loop\n\n\n /*>>teststyles*/\n // Inject element with style element and some CSS rules\n injectElementWithStyles = function( rule, callback, nodes, testnames ) {\n\n var style, ret, node, docOverflow,\n div = document.createElement('div'),\n // After page load injecting a fake body doesn't work so check if body exists\n body = document.body,\n // IE6 and 7 won't return offsetWidth or offsetHeight unless it's in the body element, so we fake it.\n fakeBody = body || document.createElement('body');\n\n if ( parseInt(nodes, 10) ) {\n // In order not to give false positives we create a node for each test\n // This also allows the method to scale for unspecified uses\n while ( nodes-- ) {\n node = document.createElement('div');\n node.id = testnames ? testnames[nodes] : mod + (nodes + 1);\n div.appendChild(node);\n }\n }\n\n // <style> elements in IE6-9 are considered 'NoScope' elements and therefore will be removed\n // when injected with innerHTML. To get around this you need to prepend the 'NoScope' element\n // with a 'scoped' element, in our case the soft-hyphen entity as it won't mess with our measurements.\n // msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx\n // Documents served as xml will throw if using ­ so use xml friendly encoded version. See issue #277\n style = ['­','<style id=\"s', mod, '\">', rule, '</style>'].join('');\n div.id = mod;\n // IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody.\n // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270\n (body ? div : fakeBody).innerHTML += style;\n fakeBody.appendChild(div);\n if ( !body ) {\n //avoid crashing IE8, if background image is used\n fakeBody.style.background = '';\n //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible\n fakeBody.style.overflow = 'hidden';\n docOverflow = docElement.style.overflow;\n docElement.style.overflow = 'hidden';\n docElement.appendChild(fakeBody);\n }\n\n ret = callback(div, rule);\n // If this is done after page load we don't want to remove the body so check if body exists\n if ( !body ) {\n fakeBody.parentNode.removeChild(fakeBody);\n docElement.style.overflow = docOverflow;\n } else {\n div.parentNode.removeChild(div);\n }\n\n return !!ret;\n\n },\n /*>>teststyles*/\n\n /*>>mq*/\n // adapted from matchMedia polyfill\n // by Scott Jehl and Paul Irish\n // gist.github.com/786768\n testMediaQuery = function( mq ) {\n\n var matchMedia = window.matchMedia || window.msMatchMedia;\n if ( matchMedia ) {\n return matchMedia(mq).matches;\n }\n\n var bool;\n\n injectElementWithStyles('@media ' + mq + ' { #' + mod + ' { position: absolute; } }', function( node ) {\n bool = (window.getComputedStyle ?\n getComputedStyle(node, null) :\n node.currentStyle)['position'] == 'absolute';\n });\n\n return bool;\n\n },\n /*>>mq*/\n\n\n /*>>hasevent*/\n //\n // isEventSupported determines if a given element supports the given event\n // kangax.github.com/iseventsupported/\n //\n // The following results are known incorrects:\n // Modernizr.hasEvent(\"webkitTransitionEnd\", elem) // false negative\n // Modernizr.hasEvent(\"textInput\") // in Webkit. github.com/Modernizr/Modernizr/issues/333\n // ...\n isEventSupported = (function() {\n\n var TAGNAMES = {\n 'select': 'input', 'change': 'input',\n 'submit': 'form', 'reset': 'form',\n 'error': 'img', 'load': 'img', 'abort': 'img'\n };\n\n function isEventSupported( eventName, element ) {\n\n element = element || document.createElement(TAGNAMES[eventName] || 'div');\n eventName = 'on' + eventName;\n\n // When using `setAttribute`, IE skips \"unload\", WebKit skips \"unload\" and \"resize\", whereas `in` \"catches\" those\n var isSupported = eventName in element;\n\n if ( !isSupported ) {\n // If it has no `setAttribute` (i.e. doesn't implement Node interface), try generic element\n if ( !element.setAttribute ) {\n element = document.createElement('div');\n }\n if ( element.setAttribute && element.removeAttribute ) {\n element.setAttribute(eventName, '');\n isSupported = is(element[eventName], 'function');\n\n // If property was created, \"remove it\" (by setting value to `undefined`)\n if ( !is(element[eventName], 'undefined') ) {\n element[eventName] = undefined;\n }\n element.removeAttribute(eventName);\n }\n }\n\n element = null;\n return isSupported;\n }\n return isEventSupported;\n })(),\n /*>>hasevent*/\n\n // TODO :: Add flag for hasownprop ? didn't last time\n\n // hasOwnProperty shim by kangax needed for Safari 2.0 support\n _hasOwnProperty = ({}).hasOwnProperty, hasOwnProp;\n\n if ( !is(_hasOwnProperty, 'undefined') && !is(_hasOwnProperty.call, 'undefined') ) {\n hasOwnProp = function (object, property) {\n return _hasOwnProperty.call(object, property);\n };\n }\n else {\n hasOwnProp = function (object, property) { /* yes, this can give false positives/negatives, but most of the time we don't care about those */\n return ((property in object) && is(object.constructor.prototype[property], 'undefined'));\n };\n }\n\n // Adapted from ES5-shim https://github.com/kriskowal/es5-shim/blob/master/es5-shim.js\n // es5.github.com/#x15.3.4.5\n\n if (!Function.prototype.bind) {\n Function.prototype.bind = function bind(that) {\n\n var target = this;\n\n if (typeof target != \"function\") {\n throw new TypeError();\n }\n\n var args = slice.call(arguments, 1),\n bound = function () {\n\n if (this instanceof bound) {\n\n var F = function(){};\n F.prototype = target.prototype;\n var self = new F();\n\n var result = target.apply(\n self,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return self;\n\n } else {\n\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n\n }\n\n };\n\n return bound;\n };\n }\n\n /**\n * setCss applies given styles to the Modernizr DOM node.\n */\n function setCss( str ) {\n mStyle.cssText = str;\n }\n\n /**\n * setCssAll extrapolates all vendor-specific css strings.\n */\n function setCssAll( str1, str2 ) {\n return setCss(prefixes.join(str1 + ';') + ( str2 || '' ));\n }\n\n /**\n * is returns a boolean for if typeof obj is exactly type.\n */\n function is( obj, type ) {\n return typeof obj === type;\n }\n\n /**\n * contains returns a boolean for if substr is found within str.\n */\n function contains( str, substr ) {\n return !!~('' + str).indexOf(substr);\n }\n\n /*>>testprop*/\n\n // testProps is a generic CSS / DOM property test.\n\n // In testing support for a given CSS property, it's legit to test:\n // `elem.style[styleName] !== undefined`\n // If the property is supported it will return an empty string,\n // if unsupported it will return undefined.\n\n // We'll take advantage of this quick test and skip setting a style\n // on our modernizr element, but instead just testing undefined vs\n // empty string.\n\n // Because the testing of the CSS property names (with \"-\", as\n // opposed to the camelCase DOM properties) is non-portable and\n // non-standard but works in WebKit and IE (but not Gecko or Opera),\n // we explicitly reject properties with dashes so that authors\n // developing in WebKit or IE first don't end up with\n // browser-specific content by accident.\n\n function testProps( props, prefixed ) {\n for ( var i in props ) {\n var prop = props[i];\n if ( !contains(prop, \"-\") && mStyle[prop] !== undefined ) {\n return prefixed == 'pfx' ? prop : true;\n }\n }\n return false;\n }\n /*>>testprop*/\n\n // TODO :: add testDOMProps\n /**\n * testDOMProps is a generic DOM property test; if a browser supports\n * a certain property, it won't return undefined for it.\n */\n function testDOMProps( props, obj, elem ) {\n for ( var i in props ) {\n var item = obj[props[i]];\n if ( item !== undefined) {\n\n // return the property name as a string\n if (elem === false) return props[i];\n\n // let's bind a function\n if (is(item, 'function')){\n // default to autobind unless override\n return item.bind(elem || obj);\n }\n\n // return the unbound function or obj or value\n return item;\n }\n }\n return false;\n }\n\n /*>>testallprops*/\n /**\n * testPropsAll tests a list of DOM properties we want to check against.\n * We specify literally ALL possible (known and/or likely) properties on\n * the element including the non-vendor prefixed one, for forward-\n * compatibility.\n */\n function testPropsAll( prop, prefixed, elem ) {\n\n var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1),\n props = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');\n\n // did they call .prefixed('boxSizing') or are we just testing a prop?\n if(is(prefixed, \"string\") || is(prefixed, \"undefined\")) {\n return testProps(props, prefixed);\n\n // otherwise, they called .prefixed('requestAnimationFrame', window[, elem])\n } else {\n props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' ');\n return testDOMProps(props, prefixed, elem);\n }\n }\n /*>>testallprops*/\n\n\n /**\n * Tests\n * -----\n */\n\n // The *new* flexbox\n // dev.w3.org/csswg/css3-flexbox\n\n tests['flexbox'] = function() {\n return testPropsAll('flexWrap');\n };\n\n // The *old* flexbox\n // www.w3.org/TR/2009/WD-css3-flexbox-20090723/\n\n tests['flexboxlegacy'] = function() {\n return testPropsAll('boxDirection');\n };\n\n // On the S60 and BB Storm, getContext exists, but always returns undefined\n // so we actually have to call getContext() to verify\n // github.com/Modernizr/Modernizr/issues/issue/97/\n\n // tests['canvas'] = function() {\n // var elem = document.createElement('canvas');\n // return !!(elem.getContext && elem.getContext('2d'));\n // };\n\n // tests['canvastext'] = function() {\n // return !!(Modernizr['canvas'] && is(document.createElement('canvas').getContext('2d').fillText, 'function'));\n // };\n\n // webk.it/70117 is tracking a legit WebGL feature detect proposal\n\n // We do a soft detect which may false positive in order to avoid\n // an expensive context creation: bugzil.la/732441\n\n tests['webgl'] = function() {\n return !!window.WebGLRenderingContext;\n };\n\n /*\n * The Modernizr.touch test only indicates if the browser supports\n * touch events, which does not necessarily reflect a touchscreen\n * device, as evidenced by tablets running Windows 7 or, alas,\n * the Palm Pre / WebOS (touch) phones.\n *\n * Additionally, Chrome (desktop) used to lie about its support on this,\n * but that has since been rectified: crbug.com/36415\n *\n * We also test for Firefox 4 Multitouch Support.\n *\n * For more info, see: modernizr.github.com/Modernizr/touch.html\n */\n\n tests['touch'] = function() {\n var bool;\n\n if(('ontouchstart' in window) || (window.DocumentTouch && document instanceof DocumentTouch)) {\n bool = true;\n } else {\n injectElementWithStyles(['@media (',prefixes.join('touch-enabled),('),mod,')','{#modernizr{top:9px;position:absolute}}'].join(''), function( node ) {\n bool = node.offsetTop === 9;\n });\n }\n\n return bool;\n };\n\n\n // geolocation is often considered a trivial feature detect...\n // Turns out, it's quite tricky to get right:\n //\n // Using !!navigator.geolocation does two things we don't want. It:\n // 1. Leaks memory in IE9: github.com/Modernizr/Modernizr/issues/513\n // 2. Disables page caching in WebKit: webk.it/43956\n //\n // Meanwhile, in Firefox < 8, an about:config setting could expose\n // a false positive that would throw an exception: bugzil.la/688158\n\n tests['geolocation'] = function() {\n return 'geolocation' in navigator;\n };\n\n\n tests['postmessage'] = function() {\n return !!window.postMessage;\n };\n\n\n // Chrome incognito mode used to throw an exception when using openDatabase\n // It doesn't anymore.\n tests['websqldatabase'] = function() {\n return !!window.openDatabase;\n };\n\n // Vendors had inconsistent prefixing with the experimental Indexed DB:\n // - Webkit's implementation is accessible through webkitIndexedDB\n // - Firefox shipped moz_indexedDB before FF4b9, but since then has been mozIndexedDB\n // For speed, we don't test the legacy (and beta-only) indexedDB\n tests['indexedDB'] = function() {\n return !!testPropsAll(\"indexedDB\", window);\n };\n\n // documentMode logic from YUI to filter out IE8 Compat Mode\n // which false positives.\n tests['hashchange'] = function() {\n return isEventSupported('hashchange', window) && (document.documentMode === undefined || document.documentMode > 7);\n };\n\n // Per 1.6:\n // This used to be Modernizr.historymanagement but the longer\n // name has been deprecated in favor of a shorter and property-matching one.\n // The old API is still available in 1.6, but as of 2.0 will throw a warning,\n // and in the first release thereafter disappear entirely.\n tests['history'] = function() {\n return !!(window.history && history.pushState);\n };\n\n tests['draganddrop'] = function() {\n var div = document.createElement('div');\n return ('draggable' in div) || ('ondragstart' in div && 'ondrop' in div);\n };\n\n // FF3.6 was EOL'ed on 4/24/12, but the ESR version of FF10\n // will be supported until FF19 (2/12/13), at which time, ESR becomes FF17.\n // FF10 still uses prefixes, so check for it until then.\n // for more ESR info, see: mozilla.org/en-US/firefox/organizations/faq/\n tests['websockets'] = function() {\n return 'WebSocket' in window || 'MozWebSocket' in window;\n };\n\n\n // css-tricks.com/rgba-browser-support/\n tests['rgba'] = function() {\n // Set an rgba() color and check the returned value\n\n setCss('background-color:rgba(150,255,150,.5)');\n\n return contains(mStyle.backgroundColor, 'rgba');\n };\n\n tests['hsla'] = function() {\n // Same as rgba(), in fact, browsers re-map hsla() to rgba() internally,\n // except IE9 who retains it as hsla\n\n setCss('background-color:hsla(120,40%,100%,.5)');\n\n return contains(mStyle.backgroundColor, 'rgba') || contains(mStyle.backgroundColor, 'hsla');\n };\n\n tests['multiplebgs'] = function() {\n // Setting multiple images AND a color on the background shorthand property\n // and then querying the style.background property value for the number of\n // occurrences of \"url(\" is a reliable method for detecting ACTUAL support for this!\n\n setCss('background:url(https://),url(https://),red url(https://)');\n\n // If the UA supports multiple backgrounds, there should be three occurrences\n // of the string \"url(\" in the return value for elemStyle.background\n\n return (/(url\\s*\\(.*?){3}/).test(mStyle.background);\n };\n\n\n\n // this will false positive in Opera Mini\n // github.com/Modernizr/Modernizr/issues/396\n\n tests['backgroundsize'] = function() {\n return testPropsAll('backgroundSize');\n };\n\n tests['borderimage'] = function() {\n return testPropsAll('borderImage');\n };\n\n\n // Super comprehensive table about all the unique implementations of\n // border-radius: muddledramblings.com/table-of-css3-border-radius-compliance\n\n tests['borderradius'] = function() {\n return testPropsAll('borderRadius');\n };\n\n // WebOS unfortunately false positives on this test.\n tests['boxshadow'] = function() {\n return testPropsAll('boxShadow');\n };\n\n // FF3.0 will false positive on this test\n tests['textshadow'] = function() {\n return document.createElement('div').style.textShadow === '';\n };\n\n\n tests['opacity'] = function() {\n // Browsers that actually have CSS Opacity implemented have done so\n // according to spec, which means their return values are within the\n // range of [0.0,1.0] - including the leading zero.\n\n setCssAll('opacity:.55');\n\n // The non-literal . in this regex is intentional:\n // German Chrome returns this value as 0,55\n // github.com/Modernizr/Modernizr/issues/#issue/59/comment/516632\n return (/^0.55$/).test(mStyle.opacity);\n };\n\n\n // Note, Android < 4 will pass this test, but can only animate\n // a single property at a time\n // goo.gl/v3V4Gp\n tests['cssanimations'] = function() {\n return testPropsAll('animationName');\n };\n\n\n tests['csscolumns'] = function() {\n return testPropsAll('columnCount');\n };\n\n\n tests['cssgradients'] = function() {\n /**\n * For CSS Gradients syntax, please see:\n * webkit.org/blog/175/introducing-css-gradients/\n * developer.mozilla.org/en/CSS/-moz-linear-gradient\n * developer.mozilla.org/en/CSS/-moz-radial-gradient\n * dev.w3.org/csswg/css3-images/#gradients-\n */\n\n var str1 = 'background-image:',\n str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));',\n str3 = 'linear-gradient(left top,#9f9, white);';\n\n setCss(\n // legacy webkit syntax (FIXME: remove when syntax not in use anymore)\n (str1 + '-webkit- '.split(' ').join(str2 + str1) +\n // standard syntax // trailing 'background-image:'\n prefixes.join(str3 + str1)).slice(0, -str1.length)\n );\n\n return contains(mStyle.backgroundImage, 'gradient');\n };\n\n\n tests['cssreflections'] = function() {\n return testPropsAll('boxReflect');\n };\n\n\n tests['csstransforms'] = function() {\n return !!testPropsAll('transform');\n };\n\n\n tests['csstransforms3d'] = function() {\n\n var ret = !!testPropsAll('perspective');\n\n // Webkit's 3D transforms are passed off to the browser's own graphics renderer.\n // It works fine in Safari on Leopard and Snow Leopard, but not in Chrome in\n // some conditions. As a result, Webkit typically recognizes the syntax but\n // will sometimes throw a false positive, thus we must do a more thorough check:\n if ( ret && 'webkitPerspective' in docElement.style ) {\n\n // Webkit allows this media query to succeed only if the feature is enabled.\n // `@media (transform-3d),(-webkit-transform-3d){ ... }`\n injectElementWithStyles('@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}', function( node, rule ) {\n ret = node.offsetLeft === 9 && node.offsetHeight === 3;\n });\n }\n return ret;\n };\n\n\n tests['csstransitions'] = function() {\n return testPropsAll('transition');\n };\n\n\n /*>>fontface*/\n // @font-face detection routine by Diego Perini\n // javascript.nwbox.com/CSSSupport/\n\n // false positives:\n // WebOS github.com/Modernizr/Modernizr/issues/342\n // WP7 github.com/Modernizr/Modernizr/issues/538\n tests['fontface'] = function() {\n var bool;\n\n injectElementWithStyles('@font-face {font-family:\"font\";src:url(\"https://\")}', function( node, rule ) {\n var style = document.getElementById('smodernizr'),\n sheet = style.sheet || style.styleSheet,\n cssText = sheet ? (sheet.cssRules && sheet.cssRules[0] ? sheet.cssRules[0].cssText : sheet.cssText || '') : '';\n\n bool = /src/i.test(cssText) && cssText.indexOf(rule.split(' ')[0]) === 0;\n });\n\n return bool;\n };\n /*>>fontface*/\n\n // CSS generated content detection\n tests['generatedcontent'] = function() {\n var bool;\n\n injectElementWithStyles(['#',mod,'{font:0/0 a}#',mod,':after{content:\"',smile,'\";visibility:hidden;font:3px/1 a}'].join(''), function( node ) {\n bool = node.offsetHeight >= 3;\n });\n\n return bool;\n };\n\n\n\n // These tests evaluate support of the video/audio elements, as well as\n // testing what types of content they support.\n //\n // We're using the Boolean constructor here, so that we can extend the value\n // e.g. Modernizr.video // true\n // Modernizr.video.ogg // 'probably'\n //\n // Codec values from : github.com/NielsLeenheer/html5test/blob/9106a8/index.html#L845\n // thx to NielsLeenheer and zcorpan\n\n // Note: in some older browsers, \"no\" was a return value instead of empty string.\n // It was live in FF3.5.0 and 3.5.1, but fixed in 3.5.2\n // It was also live in Safari 4.0.0 - 4.0.4, but fixed in 4.0.5\n\n tests['video'] = function() {\n var elem = document.createElement('video'),\n bool = false;\n\n // IE9 Running on Windows Server SKU can cause an exception to be thrown, bug #224\n try {\n if ( bool = !!elem.canPlayType ) {\n bool = new Boolean(bool);\n bool.ogg = elem.canPlayType('video/ogg; codecs=\"theora\"') .replace(/^no$/,'');\n\n // Without QuickTime, this value will be `undefined`. github.com/Modernizr/Modernizr/issues/546\n bool.h264 = elem.canPlayType('video/mp4; codecs=\"avc1.42E01E\"') .replace(/^no$/,'');\n\n bool.webm = elem.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/^no$/,'');\n }\n\n } catch(e) { }\n\n return bool;\n };\n\n tests['audio'] = function() {\n var elem = document.createElement('audio'),\n bool = false;\n\n try {\n if ( bool = !!elem.canPlayType ) {\n bool = new Boolean(bool);\n bool.ogg = elem.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/^no$/,'');\n bool.mp3 = elem.canPlayType('audio/mpeg;') .replace(/^no$/,'');\n\n // Mimetypes accepted:\n // developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements\n // bit.ly/iphoneoscodecs\n bool.wav = elem.canPlayType('audio/wav; codecs=\"1\"') .replace(/^no$/,'');\n bool.m4a = ( elem.canPlayType('audio/x-m4a;') ||\n elem.canPlayType('audio/aac;')) .replace(/^no$/,'');\n }\n } catch(e) { }\n\n return bool;\n };\n\n\n // In FF4, if disabled, window.localStorage should === null.\n\n // Normally, we could not test that directly and need to do a\n // `('localStorage' in window) && ` test first because otherwise Firefox will\n // throw bugzil.la/365772 if cookies are disabled\n\n // Also in iOS5 Private Browsing mode, attempting to use localStorage.setItem\n // will throw the exception:\n // QUOTA_EXCEEDED_ERRROR DOM Exception 22.\n // Peculiarly, getItem and removeItem calls do not throw.\n\n // Because we are forced to try/catch this, we'll go aggressive.\n\n // Just FWIW: IE8 Compat mode supports these features completely:\n // www.quirksmode.org/dom/html5.html\n // But IE8 doesn't support either with local files\n\n tests['localstorage'] = function() {\n try {\n localStorage.setItem(mod, mod);\n localStorage.removeItem(mod);\n return true;\n } catch(e) {\n return false;\n }\n };\n\n tests['sessionstorage'] = function() {\n try {\n sessionStorage.setItem(mod, mod);\n sessionStorage.removeItem(mod);\n return true;\n } catch(e) {\n return false;\n }\n };\n\n\n tests['webworkers'] = function() {\n return !!window.Worker;\n };\n\n\n tests['applicationcache'] = function() {\n return !!window.applicationCache;\n };\n\n\n // Thanks to Erik Dahlstrom\n tests['svg'] = function() {\n return !!document.createElementNS && !!document.createElementNS(ns.svg, 'svg').createSVGRect;\n };\n\n // specifically for SVG inline in HTML, not within XHTML\n // test page: paulirish.com/demo/inline-svg\n tests['inlinesvg'] = function() {\n var div = document.createElement('div');\n div.innerHTML = '<svg/>';\n return (div.firstChild && div.firstChild.namespaceURI) == ns.svg;\n };\n\n // SVG SMIL animation\n tests['smil'] = function() {\n return !!document.createElementNS && /SVGAnimate/.test(toString.call(document.createElementNS(ns.svg, 'animate')));\n };\n\n // This test is only for clip paths in SVG proper, not clip paths on HTML content\n // demo: srufaculty.sru.edu/david.dailey/svg/newstuff/clipPath4.svg\n\n // However read the comments to dig into applying SVG clippaths to HTML content here:\n // github.com/Modernizr/Modernizr/issues/213#issuecomment-1149491\n tests['svgclippaths'] = function() {\n return !!document.createElementNS && /SVGClipPath/.test(toString.call(document.createElementNS(ns.svg, 'clipPath')));\n };\n\n /*>>webforms*/\n // input features and input types go directly onto the ret object, bypassing the tests loop.\n // Hold this guy to execute in a moment.\n function webforms() {\n /*>>input*/\n // Run through HTML5's new input attributes to see if the UA understands any.\n // We're using f which is the <input> element created early on\n // Mike Taylr has created a comprehensive resource for testing these attributes\n // when applied to all input types:\n // miketaylr.com/code/input-type-attr.html\n // spec: www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary\n\n // Only input placeholder is tested while textarea's placeholder is not.\n // Currently Safari 4 and Opera 11 have support only for the input placeholder\n // Both tests are available in feature-detects/forms-placeholder.js\n Modernizr['input'] = (function( props ) {\n for ( var i = 0, len = props.length; i < len; i++ ) {\n attrs[ props[i] ] = !!(props[i] in inputElem);\n }\n if (attrs.list){\n // safari false positive's on datalist: webk.it/74252\n // see also github.com/Modernizr/Modernizr/issues/146\n attrs.list = !!(document.createElement('datalist') && window.HTMLDataListElement);\n }\n return attrs;\n })('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' '));\n /*>>input*/\n\n /*>>inputtypes*/\n // Run through HTML5's new input types to see if the UA understands any.\n // This is put behind the tests runloop because it doesn't return a\n // true/false like all the other tests; instead, it returns an object\n // containing each input type with its corresponding true/false value\n\n // Big thanks to @miketaylr for the html5 forms expertise. miketaylr.com/\n Modernizr['inputtypes'] = (function(props) {\n\n for ( var i = 0, bool, inputElemType, defaultView, len = props.length; i < len; i++ ) {\n\n inputElem.setAttribute('type', inputElemType = props[i]);\n bool = inputElem.type !== 'text';\n\n // We first check to see if the type we give it sticks..\n // If the type does, we feed it a textual value, which shouldn't be valid.\n // If the value doesn't stick, we know there's input sanitization which infers a custom UI\n if ( bool ) {\n\n inputElem.value = smile;\n inputElem.style.cssText = 'position:absolute;visibility:hidden;';\n\n if ( /^range$/.test(inputElemType) && inputElem.style.WebkitAppearance !== undefined ) {\n\n docElement.appendChild(inputElem);\n defaultView = document.defaultView;\n\n // Safari 2-4 allows the smiley as a value, despite making a slider\n bool = defaultView.getComputedStyle &&\n defaultView.getComputedStyle(inputElem, null).WebkitAppearance !== 'textfield' &&\n // Mobile android web browser has false positive, so must\n // check the height to see if the widget is actually there.\n (inputElem.offsetHeight !== 0);\n\n docElement.removeChild(inputElem);\n\n } else if ( /^(search|tel)$/.test(inputElemType) ){\n // Spec doesn't define any special parsing or detectable UI\n // behaviors so we pass these through as true\n\n // Interestingly, opera fails the earlier test, so it doesn't\n // even make it here.\n\n } else if ( /^(url|email)$/.test(inputElemType) ) {\n // Real url and email support comes with prebaked validation.\n bool = inputElem.checkValidity && inputElem.checkValidity() === false;\n\n } else {\n // If the upgraded input compontent rejects the :) text, we got a winner\n bool = inputElem.value != smile;\n }\n }\n\n inputs[ props[i] ] = !!bool;\n }\n return inputs;\n })('search tel url email datetime date month week time datetime-local number range color'.split(' '));\n /*>>inputtypes*/\n }\n /*>>webforms*/\n\n\n // End of test definitions\n // -----------------------\n\n\n\n // Run through all tests and detect their support in the current UA.\n // todo: hypothetically we could be doing an array of tests and use a basic loop here.\n for ( var feature in tests ) {\n if ( hasOwnProp(tests, feature) ) {\n // run the test, throw the return value into the Modernizr,\n // then based on that boolean, define an appropriate className\n // and push it into an array of classes we'll join later.\n featureName = feature.toLowerCase();\n Modernizr[featureName] = tests[feature]();\n\n classes.push((Modernizr[featureName] ? '' : 'no-') + featureName);\n }\n }\n\n /*>>webforms*/\n // input tests need to run.\n Modernizr.input || webforms();\n /*>>webforms*/\n\n\n /**\n * addTest allows the user to define their own feature tests\n * the result will be added onto the Modernizr object,\n * as well as an appropriate className set on the html element\n *\n * @param feature - String naming the feature\n * @param test - Function returning true if feature is supported, false if not\n */\n Modernizr.addTest = function ( feature, test ) {\n if ( typeof feature == 'object' ) {\n for ( var key in feature ) {\n if ( hasOwnProp( feature, key ) ) {\n Modernizr.addTest( key, feature[ key ] );\n }\n }\n } else {\n\n feature = feature.toLowerCase();\n\n if ( Modernizr[feature] !== undefined ) {\n // we're going to quit if you're trying to overwrite an existing test\n // if we were to allow it, we'd do this:\n // var re = new RegExp(\"\\\\b(no-)?\" + feature + \"\\\\b\");\n // docElement.className = docElement.className.replace( re, '' );\n // but, no rly, stuff 'em.\n return Modernizr;\n }\n\n test = typeof test == 'function' ? test() : test;\n\n if (typeof enableClasses !== \"undefined\" && enableClasses) {\n docElement.className += ' ' + (test ? '' : 'no-') + feature;\n }\n Modernizr[feature] = test;\n\n }\n\n return Modernizr; // allow chaining.\n };\n\n\n // Reset modElem.cssText to nothing to reduce memory footprint.\n setCss('');\n modElem = inputElem = null;\n\n /*>>shiv*/\n /**\n * @preserve HTML5 Shiv prev3.7.1 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed\n */\n ;(function(window, document) {\n /*jshint evil:true */\n /** version */\n var version = '3.7.0';\n\n /** Preset options */\n var options = window.html5 || {};\n\n /** Used to skip problem elements */\n var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;\n\n /** Not all elements can be cloned in IE **/\n var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;\n\n /** Detect whether the browser supports default html5 styles */\n var supportsHtml5Styles;\n\n /** Name of the expando, to work with multiple documents or to re-shiv one document */\n var expando = '_html5shiv';\n\n /** The id for the the documents expando */\n var expanID = 0;\n\n /** Cached data for each document */\n var expandoData = {};\n\n /** Detect whether the browser supports unknown elements */\n var supportsUnknownElements;\n\n (function() {\n try {\n var a = document.createElement('a');\n a.innerHTML = '<xyz></xyz>';\n //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles\n supportsHtml5Styles = ('hidden' in a);\n\n supportsUnknownElements = a.childNodes.length == 1 || (function() {\n // assign a false positive if unable to shiv\n (document.createElement)('a');\n var frag = document.createDocumentFragment();\n return (\n typeof frag.cloneNode == 'undefined' ||\n typeof frag.createDocumentFragment == 'undefined' ||\n typeof frag.createElement == 'undefined'\n );\n }());\n } catch(e) {\n // assign a false positive if detection fails => unable to shiv\n supportsHtml5Styles = true;\n supportsUnknownElements = true;\n }\n\n }());\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Creates a style sheet with the given CSS text and adds it to the document.\n * @private\n * @param {Document} ownerDocument The document.\n * @param {String} cssText The CSS text.\n * @returns {StyleSheet} The style element.\n */\n function addStyleSheet(ownerDocument, cssText) {\n var p = ownerDocument.createElement('p'),\n parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;\n\n p.innerHTML = 'x<style>' + cssText + '</style>';\n return parent.insertBefore(p.lastChild, parent.firstChild);\n }\n\n /**\n * Returns the value of `html5.elements` as an array.\n * @private\n * @returns {Array} An array of shived element node names.\n */\n function getElements() {\n var elements = html5.elements;\n return typeof elements == 'string' ? elements.split(' ') : elements;\n }\n\n /**\n * Returns the data associated to the given document\n * @private\n * @param {Document} ownerDocument The document.\n * @returns {Object} An object of data.\n */\n function getExpandoData(ownerDocument) {\n var data = expandoData[ownerDocument[expando]];\n if (!data) {\n data = {};\n expanID++;\n ownerDocument[expando] = expanID;\n expandoData[expanID] = data;\n }\n return data;\n }\n\n /**\n * returns a shived element for the given nodeName and document\n * @memberOf html5\n * @param {String} nodeName name of the element\n * @param {Document} ownerDocument The context document.\n * @returns {Object} The shived element.\n */\n function createElement(nodeName, ownerDocument, data){\n if (!ownerDocument) {\n ownerDocument = document;\n }\n if(supportsUnknownElements){\n return ownerDocument.createElement(nodeName);\n }\n if (!data) {\n data = getExpandoData(ownerDocument);\n }\n var node;\n\n if (data.cache[nodeName]) {\n node = data.cache[nodeName].cloneNode();\n } else if (saveClones.test(nodeName)) {\n node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();\n } else {\n node = data.createElem(nodeName);\n }\n\n // Avoid adding some elements to fragments in IE < 9 because\n // * Attributes like `name` or `type` cannot be set/changed once an element\n // is inserted into a document/fragment\n // * Link elements with `src` attributes that are inaccessible, as with\n // a 403 response, will cause the tab/window to crash\n // * Script elements appended to fragments will execute when their `src`\n // or `text` property is set\n return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node;\n }\n\n /**\n * returns a shived DocumentFragment for the given document\n * @memberOf html5\n * @param {Document} ownerDocument The context document.\n * @returns {Object} The shived DocumentFragment.\n */\n function createDocumentFragment(ownerDocument, data){\n if (!ownerDocument) {\n ownerDocument = document;\n }\n if(supportsUnknownElements){\n return ownerDocument.createDocumentFragment();\n }\n data = data || getExpandoData(ownerDocument);\n var clone = data.frag.cloneNode(),\n i = 0,\n elems = getElements(),\n l = elems.length;\n for(;i<l;i++){\n clone.createElement(elems[i]);\n }\n return clone;\n }\n\n /**\n * Shivs the `createElement` and `createDocumentFragment` methods of the document.\n * @private\n * @param {Document|DocumentFragment} ownerDocument The document.\n * @param {Object} data of the document.\n */\n function shivMethods(ownerDocument, data) {\n if (!data.cache) {\n data.cache = {};\n data.createElem = ownerDocument.createElement;\n data.createFrag = ownerDocument.createDocumentFragment;\n data.frag = data.createFrag();\n }\n\n\n ownerDocument.createElement = function(nodeName) {\n //abort shiv\n if (!html5.shivMethods) {\n return data.createElem(nodeName);\n }\n return createElement(nodeName, ownerDocument, data);\n };\n\n ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' +\n 'var n=f.cloneNode(),c=n.createElement;' +\n 'h.shivMethods&&(' +\n // unroll the `createElement` calls\n getElements().join().replace(/[\\w\\-]+/g, function(nodeName) {\n data.createElem(nodeName);\n data.frag.createElement(nodeName);\n return 'c(\"' + nodeName + '\")';\n }) +\n ');return n}'\n )(html5, data.frag);\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Shivs the given document.\n * @memberOf html5\n * @param {Document} ownerDocument The document to shiv.\n * @returns {Document} The shived document.\n */\n function shivDocument(ownerDocument) {\n if (!ownerDocument) {\n ownerDocument = document;\n }\n var data = getExpandoData(ownerDocument);\n\n if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) {\n data.hasCSS = !!addStyleSheet(ownerDocument,\n // corrects block display not defined in IE6/7/8/9\n 'article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}' +\n // adds styling not present in IE6/7/8/9\n 'mark{background:#FF0;color:#000}' +\n // hides non-rendered elements\n 'template{display:none}'\n );\n }\n if (!supportsUnknownElements) {\n shivMethods(ownerDocument, data);\n }\n return ownerDocument;\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * The `html5` object is exposed so that more elements can be shived and\n * existing shiving can be detected on iframes.\n * @type Object\n * @example\n *\n * // options can be changed before the script is included\n * html5 = { 'elements': 'mark section', 'shivCSS': false, 'shivMethods': false };\n */\n var html5 = {\n\n /**\n * An array or space separated string of node names of the elements to shiv.\n * @memberOf html5\n * @type Array|String\n */\n 'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video',\n\n /**\n * current version of html5shiv\n */\n 'version': version,\n\n /**\n * A flag to indicate that the HTML5 style sheet should be inserted.\n * @memberOf html5\n * @type Boolean\n */\n 'shivCSS': (options.shivCSS !== false),\n\n /**\n * Is equal to true if a browser supports creating unknown/HTML5 elements\n * @memberOf html5\n * @type boolean\n */\n 'supportsUnknownElements': supportsUnknownElements,\n\n /**\n * A flag to indicate that the document's `createElement` and `createDocumentFragment`\n * methods should be overwritten.\n * @memberOf html5\n * @type Boolean\n */\n 'shivMethods': (options.shivMethods !== false),\n\n /**\n * A string to describe the type of `html5` object (\"default\" or \"default print\").\n * @memberOf html5\n * @type String\n */\n 'type': 'default',\n\n // shivs the document according to the specified `html5` object options\n 'shivDocument': shivDocument,\n\n //creates a shived element\n createElement: createElement,\n\n //creates a shived documentFragment\n createDocumentFragment: createDocumentFragment\n };\n\n /*--------------------------------------------------------------------------*/\n\n // expose html5\n window.html5 = html5;\n\n // shiv the document\n shivDocument(document);\n\n }(window, document));\n /*>>shiv*/\n\n // Assign private properties to the return object with prefix\n Modernizr._version = version;\n\n // expose these for the plugin API. Look in the source for how to join() them against your input\n /*>>prefixes*/\n Modernizr._prefixes = prefixes;\n /*>>prefixes*/\n /*>>domprefixes*/\n Modernizr._domPrefixes = domPrefixes;\n Modernizr._cssomPrefixes = cssomPrefixes;\n /*>>domprefixes*/\n\n /*>>mq*/\n // Modernizr.mq tests a given media query, live against the current state of the window\n // A few important notes:\n // * If a browser does not support media queries at all (eg. oldIE) the mq() will always return false\n // * A max-width or orientation query will be evaluated against the current state, which may change later.\n // * You must specify values. Eg. If you are testing support for the min-width media query use:\n // Modernizr.mq('(min-width:0)')\n // usage:\n // Modernizr.mq('only screen and (max-width:768)')\n Modernizr.mq = testMediaQuery;\n /*>>mq*/\n\n /*>>hasevent*/\n // Modernizr.hasEvent() detects support for a given event, with an optional element to test on\n // Modernizr.hasEvent('gesturestart', elem)\n Modernizr.hasEvent = isEventSupported;\n /*>>hasevent*/\n\n /*>>testprop*/\n // Modernizr.testProp() investigates whether a given style property is recognized\n // Note that the property names must be provided in the camelCase variant.\n // Modernizr.testProp('pointerEvents')\n Modernizr.testProp = function(prop){\n return testProps([prop]);\n };\n /*>>testprop*/\n\n /*>>testallprops*/\n // Modernizr.testAllProps() investigates whether a given style property,\n // or any of its vendor-prefixed variants, is recognized\n // Note that the property names must be provided in the camelCase variant.\n // Modernizr.testAllProps('boxSizing')\n Modernizr.testAllProps = testPropsAll;\n /*>>testallprops*/\n\n\n /*>>teststyles*/\n // Modernizr.testStyles() allows you to add custom styles to the document and test an element afterwards\n // Modernizr.testStyles('#modernizr { position:absolute }', function(elem, rule){ ... })\n Modernizr.testStyles = injectElementWithStyles;\n /*>>teststyles*/\n\n\n /*>>prefixed*/\n // Modernizr.prefixed() returns the prefixed or nonprefixed property name variant of your input\n // Modernizr.prefixed('boxSizing') // 'MozBoxSizing'\n\n // Properties must be passed as dom-style camelcase, rather than `box-sizing` hypentated style.\n // Return values will also be the camelCase variant, if you need to translate that to hypenated style use:\n //\n // str.replace(/([A-Z])/g, function(str,m1){ return '-' + m1.toLowerCase(); }).replace(/^ms-/,'-ms-');\n\n // If you're trying to ascertain which transition end event to bind to, you might do something like...\n //\n // var transEndEventNames = {\n // 'WebkitTransition' : 'webkitTransitionEnd',\n // 'MozTransition' : 'transitionend',\n // 'OTransition' : 'oTransitionEnd',\n // 'msTransition' : 'MSTransitionEnd',\n // 'transition' : 'transitionend'\n // },\n // transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ];\n\n Modernizr.prefixed = function(prop, obj, elem){\n if(!obj) {\n return testPropsAll(prop, 'pfx');\n } else {\n // Testing DOM property e.g. Modernizr.prefixed('requestAnimationFrame', window) // 'mozRequestAnimationFrame'\n return testPropsAll(prop, obj, elem);\n }\n };\n /*>>prefixed*/\n\n Modernizr.addTest('ipad', function () {\n return !!navigator.userAgent.match(/iPad/i);\n });\n \n Modernizr.addTest('iphone', function () {\n return !!navigator.userAgent.match(/iPhone/i);\n });\n \n Modernizr.addTest('ipod', function () {\n return !!navigator.userAgent.match(/iPod/i);\n });\n \n Modernizr.addTest('appleios', function () {\n return (Modernizr.ipad || Modernizr.ipod || Modernizr.iphone);\n });\n\n Modernizr.addTest('chrome', function () {\n return !!navigator.userAgent.match(/chrome/i);\n });\n // Add test for firefox\n Modernizr.addTest('firefox', function () {\n return !!navigator.userAgent.match(/firefox/i);\n });\n Modernizr.addTest('webaudioapi', function () {\n return !!(\n window.webkitAudioContext ||\n window.mozAudioContext ||\n window.oAudioContext ||\n window.msAudioContext ||\n window.AudioContext\n );\n });\n\n\n /*>>cssclasses*/\n // Remove \"no-js\" class from <html> element, if it exists:\n docElement.className = docElement.className.replace(/(^|\\s)no-js(\\s|$)/, '$1$2') +\n\n // Add the new classes to the <html> element.\n (enableClasses ? ' js ' + classes.join(' ') : '');\n /*>>cssclasses*/\n\n //window.Modernizr = Modernizr;\n\n return Modernizr;\n\n});\n","/***************************\n\tPOLYFILLS\n***************************/\n// TODO: this is non standard and needs to be abandoned\nif (!('format' in String.prototype)) {\n\tString.prototype.format = function() {\n\t\tvar formatted = this;\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar regexp = new RegExp('\\\\{' + i + '\\\\}', 'gi');\n\t\t\tformatted = formatted.replace(regexp, arguments[i]);\n\t\t}\n\t\treturn formatted;\n\t};\n}\n\n/**\n * Prototype extendion for Element and NodeList\n * http://stackoverflow.com/questions/3387427/remove-element-by-id/18120786#18120786\n */\nif (!('remove' in Element.prototype)) {\n\tElement.prototype.remove = function() {\n\t\tthis.parentElement.removeChild(this);\n\t};\n}\nif (!('remove' in NodeList.prototype)) {\n\tNodeList.prototype.remove = HTMLCollection.prototype.remove = function() {\n\t\tfor (var i = this.length - 1; i >= 0; i--) {\n\t\t\tif (this[i] && this[i].parentElement) {\n\t\t\t\tthis[i].parentElement.removeChild(this[i]);\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Edge does not support this yet\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat\nif (!Array.prototype.flat) {\n\tArray.prototype.flat = function() {\n\t\tvar depth = arguments[0];\n\t\tdepth = depth === undefined ? 1 : Math.floor(depth);\n\t\tif (depth < 1) return Array.prototype.slice.call(this);\n\t\treturn (function flat(arr, depth) {\n\t\t\tvar len = arr.length >>> 0;\n\t\t\tvar flattened = [];\n\t\t\tvar i = 0;\n\t\t\twhile (i < len) {\n\t\t\t\tif (i in arr) {\n\t\t\t\t\tvar el = arr[i];\n\t\t\t\t\tif (Array.isArray(el) && depth > 0)\n\t\t\t\t\t\tflattened = flattened.concat(flat(el, depth - 1));\n\t\t\t\t\telse flattened.push(el);\n\t\t\t\t}\n\t\t\t\ti++;\n\t\t\t}\n\t\t\treturn flattened;\n\t\t})(this, depth);\n\t};\n}\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define('underscore', factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (function () {\n var current = global._;\n var exports = global._ = factory();\n exports.noConflict = function () { global._ = current; return exports; };\n }()));\n}(this, (function () {\n // Underscore.js 1.13.0-2\n // https://underscorejs.org\n // (c) 2009-2020 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n // Underscore may be freely distributed under the MIT license.\n\n // Current version.\n var VERSION = '1.13.0-2';\n\n // Establish the root object, `window` (`self`) in the browser, `global`\n // on the server, or `this` in some virtual machines. We use `self`\n // instead of `window` for `WebWorker` support.\n var root = typeof self == 'object' && self.self === self && self ||\n typeof global == 'object' && global.global === global && global ||\n Function('return this')() ||\n {};\n\n // Save bytes in the minified (but not gzipped) version:\n var ArrayProto = Array.prototype, ObjProto = Object.prototype;\n var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n\n // Create quick reference variables for speed access to core prototypes.\n var push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n // Modern feature detection.\n var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined',\n supportsDataView = typeof DataView !== 'undefined';\n\n // All **ECMAScript 5+** native function implementations that we hope to use\n // are declared here.\n var nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeCreate = Object.create,\n nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;\n\n // Create references to these builtin functions because we override them.\n var _isNaN = isNaN,\n _isFinite = isFinite;\n\n // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\n var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n // The largest integer that can be represented exactly.\n var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n\n // Some functions take a variable number of arguments, or a few expected\n // arguments at the beginning and then a variable number of values to operate\n // on. This helper accumulates all remaining arguments past the function’s\n // argument length (or an explicit `startIndex`), into an array that becomes\n // the last argument. Similar to ES6’s \"rest parameter\".\n function restArguments(func, startIndex) {\n startIndex = startIndex == null ? func.length - 1 : +startIndex;\n return function() {\n var length = Math.max(arguments.length - startIndex, 0),\n rest = Array(length),\n index = 0;\n for (; index < length; index++) {\n rest[index] = arguments[index + startIndex];\n }\n switch (startIndex) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, arguments[0], rest);\n case 2: return func.call(this, arguments[0], arguments[1], rest);\n }\n var args = Array(startIndex + 1);\n for (index = 0; index < startIndex; index++) {\n args[index] = arguments[index];\n }\n args[startIndex] = rest;\n return func.apply(this, args);\n };\n }\n\n // Is a given variable an object?\n function isObject(obj) {\n var type = typeof obj;\n return type === 'function' || type === 'object' && !!obj;\n }\n\n // Is a given value equal to null?\n function isNull(obj) {\n return obj === null;\n }\n\n // Is a given variable undefined?\n function isUndefined(obj) {\n return obj === void 0;\n }\n\n // Is a given value a boolean?\n function isBoolean(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n }\n\n // Is a given value a DOM element?\n function isElement(obj) {\n return !!(obj && obj.nodeType === 1);\n }\n\n // Internal function for creating a `toString`-based type tester.\n function tagTester(name) {\n var tag = '[object ' + name + ']';\n return function(obj) {\n return toString.call(obj) === tag;\n };\n }\n\n var isString = tagTester('String');\n\n var isNumber = tagTester('Number');\n\n var isDate = tagTester('Date');\n\n var isRegExp = tagTester('RegExp');\n\n var isError = tagTester('Error');\n\n var isSymbol = tagTester('Symbol');\n\n var isArrayBuffer = tagTester('ArrayBuffer');\n\n var isFunction = tagTester('Function');\n\n // Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old\n // v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).\n var nodelist = root.document && root.document.childNodes;\n if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n }\n\n var isFunction$1 = isFunction;\n\n var hasObjectTag = tagTester('Object');\n\n // In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`.\n // In IE 11, the most common among them, this problem also applies to\n // `Map`, `WeakMap` and `Set`.\n var hasStringTagBug = (\n supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8)))\n ),\n isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map));\n\n var isDataView = tagTester('DataView');\n\n // In IE 10 - Edge 13, we need a different heuristic\n // to determine whether an object is a `DataView`.\n function ie10IsDataView(obj) {\n return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer);\n }\n\n var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView);\n\n // Is a given value an array?\n // Delegates to ECMA5's native `Array.isArray`.\n var isArray = nativeIsArray || tagTester('Array');\n\n // Internal function to check whether `key` is an own property name of `obj`.\n function has$1(obj, key) {\n return obj != null && hasOwnProperty.call(obj, key);\n }\n\n var isArguments = tagTester('Arguments');\n\n // Define a fallback version of the method in browsers (ahem, IE < 9), where\n // there isn't any inspectable \"Arguments\" type.\n (function() {\n if (!isArguments(arguments)) {\n isArguments = function(obj) {\n return has$1(obj, 'callee');\n };\n }\n }());\n\n var isArguments$1 = isArguments;\n\n // Is a given object a finite number?\n function isFinite$1(obj) {\n return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));\n }\n\n // Is the given value `NaN`?\n function isNaN$1(obj) {\n return isNumber(obj) && _isNaN(obj);\n }\n\n // Predicate-generating function. Often useful outside of Underscore.\n function constant(value) {\n return function() {\n return value;\n };\n }\n\n // Common internal logic for `isArrayLike` and `isBufferLike`.\n function createSizePropertyCheck(getSizeProperty) {\n return function(collection) {\n var sizeProperty = getSizeProperty(collection);\n return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;\n }\n }\n\n // Internal helper to generate a function to obtain property `key` from `obj`.\n function shallowProperty(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n }\n\n // Internal helper to obtain the `byteLength` property of an object.\n var getByteLength = shallowProperty('byteLength');\n\n // Internal helper to determine whether we should spend extensive checks against\n // `ArrayBuffer` et al.\n var isBufferLike = createSizePropertyCheck(getByteLength);\n\n // Is a given value a typed array?\n var typedArrayPattern = /\\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\\]/;\n function isTypedArray(obj) {\n // `ArrayBuffer.isView` is the most future-proof, so use it when available.\n // Otherwise, fall back on the above regular expression.\n return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) :\n isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));\n }\n\n var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false);\n\n // Internal helper to obtain the `length` property of an object.\n var getLength = shallowProperty('length');\n\n // Internal helper to create a simple lookup structure.\n // `collectNonEnumProps` used to depend on `_.contains`, but this led to\n // circular imports. `emulatedSet` is a one-off solution that only works for\n // arrays of strings.\n function emulatedSet(keys) {\n var hash = {};\n for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;\n return {\n contains: function(key) { return hash[key]; },\n push: function(key) {\n hash[key] = true;\n return keys.push(key);\n }\n };\n }\n\n // Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't\n // be iterated by `for key in ...` and thus missed. Extends `keys` in place if\n // needed.\n function collectNonEnumProps(obj, keys) {\n keys = emulatedSet(keys);\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = isFunction$1(constructor) && constructor.prototype || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {\n keys.push(prop);\n }\n }\n }\n\n // Retrieve the names of an object's own properties.\n // Delegates to **ECMAScript 5**'s native `Object.keys`.\n function keys(obj) {\n if (!isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (has$1(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n }\n\n // Is a given array, string, or object empty?\n // An \"empty\" object has no enumerable own-properties.\n function isEmpty(obj) {\n if (obj == null) return true;\n // Skip the more expensive `toString`-based type checks if `obj` has no\n // `.length`.\n var length = getLength(obj);\n if (typeof length == 'number' && (\n isArray(obj) || isString(obj) || isArguments$1(obj)\n )) return length === 0;\n return getLength(keys(obj)) === 0;\n }\n\n // Returns whether an object has a given set of `key:value` pairs.\n function isMatch(object, attrs) {\n var _keys = keys(attrs), length = _keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = _keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n }\n\n // If Underscore is called as a function, it returns a wrapped object that can\n // be used OO-style. This wrapper holds altered versions of all functions added\n // through `_.mixin`. Wrapped objects may be chained.\n function _$1(obj) {\n if (obj instanceof _$1) return obj;\n if (!(this instanceof _$1)) return new _$1(obj);\n this._wrapped = obj;\n }\n\n _$1.VERSION = VERSION;\n\n // Extracts the result from a wrapped and chained object.\n _$1.prototype.value = function() {\n return this._wrapped;\n };\n\n // Provide unwrapping proxies for some methods used in engine operations\n // such as arithmetic and JSON stringification.\n _$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value;\n\n _$1.prototype.toString = function() {\n return String(this._wrapped);\n };\n\n // Internal function to wrap or shallow-copy an ArrayBuffer,\n // typed array or DataView to a new view, reusing the buffer.\n function toBufferView(bufferSource) {\n return new Uint8Array(\n bufferSource.buffer || bufferSource,\n bufferSource.byteOffset || 0,\n getByteLength(bufferSource)\n );\n }\n\n // We use this string twice, so give it a name for minification.\n var tagDataView = '[object DataView]';\n\n // Internal recursive comparison function for `_.isEqual`.\n function eq(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // `null` or `undefined` only equal to itself (strict comparison).\n if (a == null || b == null) return false;\n // `NaN`s are equivalent, but non-reflexive.\n if (a !== a) return b !== b;\n // Exhaust primitive checks\n var type = typeof a;\n if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n return deepEq(a, b, aStack, bStack);\n }\n\n // Internal recursive comparison function for `_.isEqual`.\n function deepEq(a, b, aStack, bStack) {\n // Unwrap any wrapped objects.\n if (a instanceof _$1) a = a._wrapped;\n if (b instanceof _$1) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n // Work around a bug in IE 10 - Edge 13.\n if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) {\n if (!isDataView$1(b)) return false;\n className = tagDataView;\n }\n switch (className) {\n // These types are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN.\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n case '[object Symbol]':\n return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);\n case '[object ArrayBuffer]':\n case tagDataView:\n // Coerce to typed array so we can fall through.\n return deepEq(toBufferView(a), toBufferView(b), aStack, bStack);\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays && isTypedArray$1(a)) {\n var byteLength = getByteLength(a);\n if (byteLength !== getByteLength(b)) return false;\n if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true;\n areArrays = true;\n }\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor &&\n isFunction$1(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var _keys = keys(a), key;\n length = _keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = _keys[length];\n if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n }\n\n // Perform a deep comparison to check if two objects are equal.\n function isEqual(a, b) {\n return eq(a, b);\n }\n\n // Retrieve all the enumerable property names of an object.\n function allKeys(obj) {\n if (!isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n }\n\n // Since the regular `Object.prototype.toString` type tests don't work for\n // some types in IE 11, we use a fingerprinting heuristic instead, based\n // on the methods. It's not great, but it's the best we got.\n // The fingerprint method lists are defined below.\n function ie11fingerprint(methods) {\n var length = getLength(methods);\n return function(obj) {\n if (obj == null) return false;\n // `Map`, `WeakMap` and `Set` have no enumerable keys.\n var keys = allKeys(obj);\n if (getLength(keys)) return false;\n for (var i = 0; i < length; i++) {\n if (!isFunction$1(obj[methods[i]])) return false;\n }\n // If we are testing against `WeakMap`, we need to ensure that\n // `obj` doesn't have a `forEach` method in order to distinguish\n // it from a regular `Map`.\n return methods !== weakMapMethods || !isFunction$1(obj[forEachName]);\n };\n }\n\n // In the interest of compact minification, we write\n // each string in the fingerprints only once.\n var forEachName = 'forEach',\n hasName = 'has',\n commonInit = ['clear', 'delete'],\n mapTail = ['get', hasName, 'set'];\n\n // `Map`, `WeakMap` and `Set` each have slightly different\n // combinations of the above sublists.\n var mapMethods = commonInit.concat(forEachName, mapTail),\n weakMapMethods = commonInit.concat(mapTail),\n setMethods = ['add'].concat(commonInit, forEachName, hasName);\n\n var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map');\n\n var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap');\n\n var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set');\n\n var isWeakSet = tagTester('WeakSet');\n\n // Retrieve the values of an object's properties.\n function values(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[_keys[i]];\n }\n return values;\n }\n\n // Convert an object into a list of `[key, value]` pairs.\n // The opposite of `_.object` with one argument.\n function pairs(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [_keys[i], obj[_keys[i]]];\n }\n return pairs;\n }\n\n // Invert the keys and values of an object. The values must be serializable.\n function invert(obj) {\n var result = {};\n var _keys = keys(obj);\n for (var i = 0, length = _keys.length; i < length; i++) {\n result[obj[_keys[i]]] = _keys[i];\n }\n return result;\n }\n\n // Return a sorted list of the function names available on the object.\n function functions(obj) {\n var names = [];\n for (var key in obj) {\n if (isFunction$1(obj[key])) names.push(key);\n }\n return names.sort();\n }\n\n // An internal function for creating assigner functions.\n function createAssigner(keysFunc, defaults) {\n return function(obj) {\n var length = arguments.length;\n if (defaults) obj = Object(obj);\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!defaults || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n }\n\n // Extend a given object with all the properties in passed-in object(s).\n var extend = createAssigner(allKeys);\n\n // Assigns a given object with all the own properties in the passed-in\n // object(s).\n // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n var extendOwn = createAssigner(keys);\n\n // Fill in a given object with default properties.\n var defaults = createAssigner(allKeys, true);\n\n // Create a naked function reference for surrogate-prototype-swapping.\n function ctor() {\n return function(){};\n }\n\n // An internal function for creating a new object that inherits from another.\n function baseCreate(prototype) {\n if (!isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n var Ctor = ctor();\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n }\n\n // Creates an object that inherits from the given prototype object.\n // If additional properties are provided then they will be added to the\n // created object.\n function create(prototype, props) {\n var result = baseCreate(prototype);\n if (props) extendOwn(result, props);\n return result;\n }\n\n // Create a (shallow-cloned) duplicate of an object.\n function clone(obj) {\n if (!isObject(obj)) return obj;\n return isArray(obj) ? obj.slice() : extend({}, obj);\n }\n\n // Invokes `interceptor` with the `obj` and then returns `obj`.\n // The primary purpose of this method is to \"tap into\" a method chain, in\n // order to perform operations on intermediate results within the chain.\n function tap(obj, interceptor) {\n interceptor(obj);\n return obj;\n }\n\n // Normalize a (deep) property `path` to array.\n // Like `_.iteratee`, this function can be customized.\n function toPath$1(path) {\n return isArray(path) ? path : [path];\n }\n _$1.toPath = toPath$1;\n\n // Internal wrapper for `_.toPath` to enable minification.\n // Similar to `cb` for `_.iteratee`.\n function toPath(path) {\n return _$1.toPath(path);\n }\n\n // Internal function to obtain a nested property in `obj` along `path`.\n function deepGet(obj, path) {\n var length = path.length;\n for (var i = 0; i < length; i++) {\n if (obj == null) return void 0;\n obj = obj[path[i]];\n }\n return length ? obj : void 0;\n }\n\n // Get the value of the (deep) property on `path` from `object`.\n // If any property in `path` does not exist or if the value is\n // `undefined`, return `defaultValue` instead.\n // The `path` is normalized through `_.toPath`.\n function get(object, path, defaultValue) {\n var value = deepGet(object, toPath(path));\n return isUndefined(value) ? defaultValue : value;\n }\n\n // Shortcut function for checking if an object has a given property directly on\n // itself (in other words, not on a prototype). Unlike the internal `has`\n // function, this public version can also traverse nested properties.\n function has(obj, path) {\n path = toPath(path);\n var length = path.length;\n for (var i = 0; i < length; i++) {\n var key = path[i];\n if (!has$1(obj, key)) return false;\n obj = obj[key];\n }\n return !!length;\n }\n\n // Keep the identity function around for default iteratees.\n function identity(value) {\n return value;\n }\n\n // Returns a predicate for checking whether an object has a given set of\n // `key:value` pairs.\n function matcher(attrs) {\n attrs = extendOwn({}, attrs);\n return function(obj) {\n return isMatch(obj, attrs);\n };\n }\n\n // Creates a function that, when passed an object, will traverse that object’s\n // properties down the given `path`, specified as an array of keys or indices.\n function property(path) {\n path = toPath(path);\n return function(obj) {\n return deepGet(obj, path);\n };\n }\n\n // Internal function that returns an efficient (for current engines) version\n // of the passed-in callback, to be repeatedly applied in other Underscore\n // functions.\n function optimizeCb(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n // The 2-argument case is omitted because we’re not using it.\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n }\n\n // An internal function to generate callbacks that can be applied to each\n // element in a collection, returning the desired result — either `_.identity`,\n // an arbitrary callback, a property matcher, or a property accessor.\n function baseIteratee(value, context, argCount) {\n if (value == null) return identity;\n if (isFunction$1(value)) return optimizeCb(value, context, argCount);\n if (isObject(value) && !isArray(value)) return matcher(value);\n return property(value);\n }\n\n // External wrapper for our callback generator. Users may customize\n // `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n // This abstraction hides the internal-only `argCount` argument.\n function iteratee(value, context) {\n return baseIteratee(value, context, Infinity);\n }\n _$1.iteratee = iteratee;\n\n // The function we call internally to generate a callback. It invokes\n // `_.iteratee` if overridden, otherwise `baseIteratee`.\n function cb(value, context, argCount) {\n if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context);\n return baseIteratee(value, context, argCount);\n }\n\n // Returns the results of applying the `iteratee` to each element of `obj`.\n // In contrast to `_.map` it returns an object.\n function mapObject(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = keys(obj),\n length = _keys.length,\n results = {};\n for (var index = 0; index < length; index++) {\n var currentKey = _keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n }\n\n // Predicate-generating function. Often useful outside of Underscore.\n function noop(){}\n\n // Generates a function for a given object that returns a given property.\n function propertyOf(obj) {\n if (obj == null) return noop;\n return function(path) {\n return get(obj, path);\n };\n }\n\n // Run a function **n** times.\n function times(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n }\n\n // Return a random integer between `min` and `max` (inclusive).\n function random(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n }\n\n // A (possibly faster) way to get the current timestamp as an integer.\n var now = Date.now || function() {\n return new Date().getTime();\n };\n\n // Internal helper to generate functions for escaping and unescaping strings\n // to/from HTML interpolation.\n function createEscaper(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped.\n var source = '(?:' + keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n }\n\n // Internal list of HTML entities for escaping.\n var escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n };\n\n // Function for escaping strings to HTML interpolation.\n var _escape = createEscaper(escapeMap);\n\n // Internal list of HTML entities for unescaping.\n var unescapeMap = invert(escapeMap);\n\n // Function for unescaping strings from HTML interpolation.\n var _unescape = createEscaper(unescapeMap);\n\n // By default, Underscore uses ERB-style template delimiters. Change the\n // following template settings to use alternative delimiters.\n var templateSettings = _$1.templateSettings = {\n evaluate: /<%([\\s\\S]+?)%>/g,\n interpolate: /<%=([\\s\\S]+?)%>/g,\n escape: /<%-([\\s\\S]+?)%>/g\n };\n\n // When customizing `_.templateSettings`, if you don't want to define an\n // interpolation, evaluation or escaping regex, we need one that is\n // guaranteed not to match.\n var noMatch = /(.)^/;\n\n // Certain characters need to be escaped so that they can be put into a\n // string literal.\n var escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n var escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n function escapeChar(match) {\n return '\\\\' + escapes[match];\n }\n\n var bareIdentifier = /^\\s*(\\w|\\$)+\\s*$/;\n\n // JavaScript micro-templating, similar to John Resig's implementation.\n // Underscore templating handles arbitrary delimiters, preserves whitespace,\n // and correctly escapes quotes within interpolated code.\n // NB: `oldSettings` only exists for backwards compatibility.\n function template(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = defaults({}, settings, _$1.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offset.\n return match;\n });\n source += \"';\\n\";\n\n var argument = settings.variable;\n if (argument) {\n if (!bareIdentifier.test(argument)) throw new Error(argument);\n } else {\n // If a variable is not specified, place data values in local scope.\n source = 'with(obj||{}){\\n' + source + '}\\n';\n argument = 'obj';\n }\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n var render;\n try {\n render = new Function(argument, '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _$1);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n }\n\n // Traverses the children of `obj` along `path`. If a child is a function, it\n // is invoked with its parent as context. Returns the value of the final\n // child, or `fallback` if any child is undefined.\n function result(obj, path, fallback) {\n path = toPath(path);\n var length = path.length;\n if (!length) {\n return isFunction$1(fallback) ? fallback.call(obj) : fallback;\n }\n for (var i = 0; i < length; i++) {\n var prop = obj == null ? void 0 : obj[path[i]];\n if (prop === void 0) {\n prop = fallback;\n i = length; // Ensure we don't continue iterating.\n }\n obj = isFunction$1(prop) ? prop.call(obj) : prop;\n }\n return obj;\n }\n\n // Generate a unique integer id (unique within the entire client session).\n // Useful for temporary DOM ids.\n var idCounter = 0;\n function uniqueId(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n }\n\n // Start chaining a wrapped Underscore object.\n function chain(obj) {\n var instance = _$1(obj);\n instance._chain = true;\n return instance;\n }\n\n // Internal function to execute `sourceFunc` bound to `context` with optional\n // `args`. Determines whether to execute a function as a constructor or as a\n // normal function.\n function executeBound(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (isObject(result)) return result;\n return self;\n }\n\n // Partially apply a function by creating a version that has had some of its\n // arguments pre-filled, without changing its dynamic `this` context. `_` acts\n // as a placeholder by default, allowing any combination of arguments to be\n // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.\n var partial = restArguments(function(func, boundArgs) {\n var placeholder = partial.placeholder;\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n });\n\n partial.placeholder = _$1;\n\n // Create a function bound to a given object (assigning `this`, and arguments,\n // optionally).\n var bind = restArguments(function(func, context, args) {\n if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function');\n var bound = restArguments(function(callArgs) {\n return executeBound(func, bound, context, this, args.concat(callArgs));\n });\n return bound;\n });\n\n // Internal helper for collection methods to determine whether a collection\n // should be iterated as an array or as an object.\n // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\n var isArrayLike = createSizePropertyCheck(getLength);\n\n // Internal implementation of a recursive `flatten` function.\n function flatten$1(input, depth, strict, output) {\n output = output || [];\n if (!depth && depth !== 0) {\n depth = Infinity;\n } else if (depth <= 0) {\n return output.concat(input);\n }\n var idx = output.length;\n for (var i = 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) {\n // Flatten current level of array or arguments object.\n if (depth > 1) {\n flatten$1(value, depth - 1, strict, output);\n idx = output.length;\n } else {\n var j = 0, len = value.length;\n while (j < len) output[idx++] = value[j++];\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n }\n\n // Bind a number of an object's methods to that object. Remaining arguments\n // are the method names to be bound. Useful for ensuring that all callbacks\n // defined on an object belong to it.\n var bindAll = restArguments(function(obj, keys) {\n keys = flatten$1(keys, false, false);\n var index = keys.length;\n if (index < 1) throw new Error('bindAll must be passed function names');\n while (index--) {\n var key = keys[index];\n obj[key] = bind(obj[key], obj);\n }\n return obj;\n });\n\n // Memoize an expensive function by storing its results.\n function memoize(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!has$1(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n }\n\n // Delays a function for the given number of milliseconds, and then calls\n // it with the arguments supplied.\n var delay = restArguments(function(func, wait, args) {\n return setTimeout(function() {\n return func.apply(null, args);\n }, wait);\n });\n\n // Defers a function, scheduling it to run after the current call stack has\n // cleared.\n var defer = partial(delay, _$1, 1);\n\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n function throttle(func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\n var later = function() {\n previous = options.leading === false ? 0 : now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function() {\n var _now = now();\n if (!previous && options.leading === false) previous = _now;\n var remaining = wait - (_now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = _now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n\n throttled.cancel = function() {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n }\n\n // When a sequence of calls of the returned function ends, the argument\n // function is triggered. The end of a sequence is defined by the `wait`\n // parameter. If `immediate` is passed, the argument function will be\n // triggered at the beginning of the sequence instead of at the end.\n function debounce(func, wait, immediate) {\n var timeout, previous, args, result, context;\n\n var later = function() {\n var passed = now() - previous;\n if (wait > passed) {\n timeout = setTimeout(later, wait - passed);\n } else {\n timeout = null;\n if (!immediate) result = func.apply(context, args);\n // This check is needed because `func` can recursively invoke `debounced`.\n if (!timeout) args = context = null;\n }\n };\n\n var debounced = restArguments(function(_args) {\n context = this;\n args = _args;\n previous = now();\n if (!timeout) {\n timeout = setTimeout(later, wait);\n if (immediate) result = func.apply(context, args);\n }\n return result;\n });\n\n debounced.cancel = function() {\n clearTimeout(timeout);\n timeout = args = context = null;\n };\n\n return debounced;\n }\n\n // Returns the first function passed as an argument to the second,\n // allowing you to adjust arguments, run code before and after, and\n // conditionally execute the original function.\n function wrap(func, wrapper) {\n return partial(wrapper, func);\n }\n\n // Returns a negated version of the passed-in predicate.\n function negate(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n }\n\n // Returns a function that is the composition of a list of functions, each\n // consuming the return value of the function that follows.\n function compose() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n }\n\n // Returns a function that will only be executed on and after the Nth call.\n function after(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n // Returns a function that will only be executed up to (but not including) the\n // Nth call.\n function before(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n }\n\n // Returns a function that will be executed at most one time, no matter how\n // often you call it. Useful for lazy initialization.\n var once = partial(before, 2);\n\n // Returns the first key on an object that passes a truth test.\n function findKey(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = keys(obj), key;\n for (var i = 0, length = _keys.length; i < length; i++) {\n key = _keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n }\n\n // Internal function to generate `_.findIndex` and `_.findLastIndex`.\n function createPredicateIndexFinder(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n }\n\n // Returns the first index on an array-like that passes a truth test.\n var findIndex = createPredicateIndexFinder(1);\n\n // Returns the last index on an array-like that passes a truth test.\n var findLastIndex = createPredicateIndexFinder(-1);\n\n // Use a comparator function to figure out the smallest index at which\n // an object should be inserted so as to maintain order. Uses binary search.\n function sortedIndex(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n }\n\n // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions.\n function createIndexFinder(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), isNaN$1);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n }\n\n // Return the position of the first occurrence of an item in an array,\n // or -1 if the item is not included in the array.\n // If the array is large and already in sort order, pass `true`\n // for **isSorted** to use binary search.\n var indexOf = createIndexFinder(1, findIndex, sortedIndex);\n\n // Return the position of the last occurrence of an item in an array,\n // or -1 if the item is not included in the array.\n var lastIndexOf = createIndexFinder(-1, findLastIndex);\n\n // Return the first value which passes a truth test.\n function find(obj, predicate, context) {\n var keyFinder = isArrayLike(obj) ? findIndex : findKey;\n var key = keyFinder(obj, predicate, context);\n if (key !== void 0 && key !== -1) return obj[key];\n }\n\n // Convenience version of a common use case of `_.find`: getting the first\n // object containing specific `key:value` pairs.\n function findWhere(obj, attrs) {\n return find(obj, matcher(attrs));\n }\n\n // The cornerstone for collection functions, an `each`\n // implementation, aka `forEach`.\n // Handles raw objects in addition to array-likes. Treats all\n // sparse array-likes as if they were dense.\n function each(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var _keys = keys(obj);\n for (i = 0, length = _keys.length; i < length; i++) {\n iteratee(obj[_keys[i]], _keys[i], obj);\n }\n }\n return obj;\n }\n\n // Return the results of applying the iteratee to each element.\n function map(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n }\n\n // Internal helper to create a reducing function, iterating left or right.\n function createReduce(dir) {\n // Wrap code that reassigns argument variables in a separate function than\n // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n var reducer = function(obj, iteratee, memo, initial) {\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n if (!initial) {\n memo = obj[_keys ? _keys[index] : index];\n index += dir;\n }\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = _keys ? _keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n };\n\n return function(obj, iteratee, memo, context) {\n var initial = arguments.length >= 3;\n return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n };\n }\n\n // **Reduce** builds up a single result from a list of values, aka `inject`,\n // or `foldl`.\n var reduce = createReduce(1);\n\n // The right-associative version of reduce, also known as `foldr`.\n var reduceRight = createReduce(-1);\n\n // Return all the elements that pass a truth test.\n function filter(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n }\n\n // Return all the elements for which a truth test fails.\n function reject(obj, predicate, context) {\n return filter(obj, negate(cb(predicate)), context);\n }\n\n // Determine whether all of the elements pass a truth test.\n function every(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n }\n\n // Determine if at least one element in the object passes a truth test.\n function some(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n }\n\n // Determine if the array or object contains a given item (using `===`).\n function contains(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return indexOf(obj, item, fromIndex) >= 0;\n }\n\n // Invoke a method (with arguments) on every item in a collection.\n var invoke = restArguments(function(obj, path, args) {\n var contextPath, func;\n if (isFunction$1(path)) {\n func = path;\n } else {\n path = toPath(path);\n contextPath = path.slice(0, -1);\n path = path[path.length - 1];\n }\n return map(obj, function(context) {\n var method = func;\n if (!method) {\n if (contextPath && contextPath.length) {\n context = deepGet(context, contextPath);\n }\n if (context == null) return void 0;\n method = context[path];\n }\n return method == null ? method : method.apply(context, args);\n });\n });\n\n // Convenience version of a common use case of `_.map`: fetching a property.\n function pluck(obj, key) {\n return map(obj, property(key));\n }\n\n // Convenience version of a common use case of `_.filter`: selecting only\n // objects containing specific `key:value` pairs.\n function where(obj, attrs) {\n return filter(obj, matcher(attrs));\n }\n\n // Return the maximum element (or element-based computation).\n function max(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n }\n\n // Return the minimum element (or element-based computation).\n function min(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed < lastComputed || computed === Infinity && result === Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n }\n\n // Sample **n** random values from a collection using the modern version of the\n // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n // If **n** is not specified, returns a single random element.\n // The internal `guard` argument allows it to work with `_.map`.\n function sample(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n return obj[random(obj.length - 1)];\n }\n var sample = isArrayLike(obj) ? clone(obj) : values(obj);\n var length = getLength(sample);\n n = Math.max(Math.min(n, length), 0);\n var last = length - 1;\n for (var index = 0; index < n; index++) {\n var rand = random(index, last);\n var temp = sample[index];\n sample[index] = sample[rand];\n sample[rand] = temp;\n }\n return sample.slice(0, n);\n }\n\n // Shuffle a collection.\n function shuffle(obj) {\n return sample(obj, Infinity);\n }\n\n // Sort the object's values by a criterion produced by an iteratee.\n function sortBy(obj, iteratee, context) {\n var index = 0;\n iteratee = cb(iteratee, context);\n return pluck(map(obj, function(value, key, list) {\n return {\n value: value,\n index: index++,\n criteria: iteratee(value, key, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n }\n\n // An internal function used for aggregate \"group by\" operations.\n function group(behavior, partition) {\n return function(obj, iteratee, context) {\n var result = partition ? [[], []] : {};\n iteratee = cb(iteratee, context);\n each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n }\n\n // Groups the object's values by a criterion. Pass either a string attribute\n // to group by, or a function that returns the criterion.\n var groupBy = group(function(result, value, key) {\n if (has$1(result, key)) result[key].push(value); else result[key] = [value];\n });\n\n // Indexes the object's values by a criterion, similar to `_.groupBy`, but for\n // when you know that your index values will be unique.\n var indexBy = group(function(result, value, key) {\n result[key] = value;\n });\n\n // Counts instances of an object that group by a certain criterion. Pass\n // either a string attribute to count by, or a function that returns the\n // criterion.\n var countBy = group(function(result, value, key) {\n if (has$1(result, key)) result[key]++; else result[key] = 1;\n });\n\n // Split a collection into two arrays: one whose elements all pass the given\n // truth test, and one whose elements all do not pass the truth test.\n var partition = group(function(result, value, pass) {\n result[pass ? 0 : 1].push(value);\n }, true);\n\n // Safely create a real, live array from anything iterable.\n var reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\n function toArray(obj) {\n if (!obj) return [];\n if (isArray(obj)) return slice.call(obj);\n if (isString(obj)) {\n // Keep surrogate pair characters together.\n return obj.match(reStrSymbol);\n }\n if (isArrayLike(obj)) return map(obj, identity);\n return values(obj);\n }\n\n // Return the number of elements in a collection.\n function size(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : keys(obj).length;\n }\n\n // Internal `_.pick` helper function to determine whether `key` is an enumerable\n // property name of `obj`.\n function keyInObj(value, key, obj) {\n return key in obj;\n }\n\n // Return a copy of the object only containing the allowed properties.\n var pick = restArguments(function(obj, keys) {\n var result = {}, iteratee = keys[0];\n if (obj == null) return result;\n if (isFunction$1(iteratee)) {\n if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n keys = allKeys(obj);\n } else {\n iteratee = keyInObj;\n keys = flatten$1(keys, false, false);\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n });\n\n // Return a copy of the object without the disallowed properties.\n var omit = restArguments(function(obj, keys) {\n var iteratee = keys[0], context;\n if (isFunction$1(iteratee)) {\n iteratee = negate(iteratee);\n if (keys.length > 1) context = keys[1];\n } else {\n keys = map(flatten$1(keys, false, false), String);\n iteratee = function(value, key) {\n return !contains(keys, key);\n };\n }\n return pick(obj, iteratee, context);\n });\n\n // Returns everything but the last entry of the array. Especially useful on\n // the arguments object. Passing **n** will return all the values in\n // the array, excluding the last N.\n function initial(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n }\n\n // Get the first element of an array. Passing **n** will return the first N\n // values in the array. The **guard** check allows it to work with `_.map`.\n function first(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[0];\n return initial(array, array.length - n);\n }\n\n // Returns everything but the first entry of the `array`. Especially useful on\n // the `arguments` object. Passing an **n** will return the rest N values in the\n // `array`.\n function rest(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n }\n\n // Get the last element of an array. Passing **n** will return the last N\n // values in the array.\n function last(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[array.length - 1];\n return rest(array, Math.max(0, array.length - n));\n }\n\n // Trim out all falsy values from an array.\n function compact(array) {\n return filter(array, Boolean);\n }\n\n // Flatten out an array, either recursively (by default), or up to `depth`.\n // Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively.\n function flatten(array, depth) {\n return flatten$1(array, depth, false);\n }\n\n // Take the difference between one array and a number of other arrays.\n // Only the elements present in just the first array will remain.\n var difference = restArguments(function(array, rest) {\n rest = flatten$1(rest, true, true);\n return filter(array, function(value){\n return !contains(rest, value);\n });\n });\n\n // Return a version of the array that does not contain the specified value(s).\n var without = restArguments(function(array, otherArrays) {\n return difference(array, otherArrays);\n });\n\n // Produce a duplicate-free version of the array. If the array has already\n // been sorted, you have the option of using a faster algorithm.\n // The faster algorithm will not work with an iteratee if the iteratee\n // is not a one-to-one function, so providing an iteratee will disable\n // the faster algorithm.\n function uniq(array, isSorted, iteratee, context) {\n if (!isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted && !iteratee) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n }\n\n // Produce an array that contains the union: each distinct element from all of\n // the passed-in arrays.\n var union = restArguments(function(arrays) {\n return uniq(flatten$1(arrays, true, true));\n });\n\n // Produce an array that contains every item shared between all the\n // passed-in arrays.\n function intersection(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (contains(result, item)) continue;\n var j;\n for (j = 1; j < argsLength; j++) {\n if (!contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n }\n\n // Complement of zip. Unzip accepts an array of arrays and groups\n // each array's elements on shared indices.\n function unzip(array) {\n var length = array && max(array, getLength).length || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = pluck(array, index);\n }\n return result;\n }\n\n // Zip together multiple lists into a single array -- elements that share\n // an index go together.\n var zip = restArguments(unzip);\n\n // Converts lists into objects. Pass either a single array of `[key, value]`\n // pairs, or two parallel arrays of the same length -- one of keys, and one of\n // the corresponding values. Passing by pairs is the reverse of `_.pairs`.\n function object(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n }\n\n // Generate an integer Array containing an arithmetic progression. A port of\n // the native Python `range()` function. See\n // [the Python documentation](https://docs.python.org/library/functions.html#range).\n function range(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n if (!step) {\n step = stop < start ? -1 : 1;\n }\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n }\n\n // Chunk a single array into multiple arrays, each containing `count` or fewer\n // items.\n function chunk(array, count) {\n if (count == null || count < 1) return [];\n var result = [];\n var i = 0, length = array.length;\n while (i < length) {\n result.push(slice.call(array, i, i += count));\n }\n return result;\n }\n\n // Helper function to continue chaining intermediate results.\n function chainResult(instance, obj) {\n return instance._chain ? _$1(obj).chain() : obj;\n }\n\n // Add your own custom functions to the Underscore object.\n function mixin(obj) {\n each(functions(obj), function(name) {\n var func = _$1[name] = obj[name];\n _$1.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return chainResult(this, func.apply(_$1, args));\n };\n });\n return _$1;\n }\n\n // Add all mutator `Array` functions to the wrapper.\n each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _$1.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) {\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) {\n delete obj[0];\n }\n }\n return chainResult(this, obj);\n };\n });\n\n // Add all accessor `Array` functions to the wrapper.\n each(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _$1.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) obj = method.apply(obj, arguments);\n return chainResult(this, obj);\n };\n });\n\n // Named Exports\n\n var allExports = {\n __proto__: null,\n VERSION: VERSION,\n restArguments: restArguments,\n isObject: isObject,\n isNull: isNull,\n isUndefined: isUndefined,\n isBoolean: isBoolean,\n isElement: isElement,\n isString: isString,\n isNumber: isNumber,\n isDate: isDate,\n isRegExp: isRegExp,\n isError: isError,\n isSymbol: isSymbol,\n isArrayBuffer: isArrayBuffer,\n isDataView: isDataView$1,\n isArray: isArray,\n isFunction: isFunction$1,\n isArguments: isArguments$1,\n isFinite: isFinite$1,\n isNaN: isNaN$1,\n isTypedArray: isTypedArray$1,\n isEmpty: isEmpty,\n isMatch: isMatch,\n isEqual: isEqual,\n isMap: isMap,\n isWeakMap: isWeakMap,\n isSet: isSet,\n isWeakSet: isWeakSet,\n keys: keys,\n allKeys: allKeys,\n values: values,\n pairs: pairs,\n invert: invert,\n functions: functions,\n methods: functions,\n extend: extend,\n extendOwn: extendOwn,\n assign: extendOwn,\n defaults: defaults,\n create: create,\n clone: clone,\n tap: tap,\n get: get,\n has: has,\n mapObject: mapObject,\n identity: identity,\n constant: constant,\n noop: noop,\n toPath: toPath$1,\n property: property,\n propertyOf: propertyOf,\n matcher: matcher,\n matches: matcher,\n times: times,\n random: random,\n now: now,\n escape: _escape,\n unescape: _unescape,\n templateSettings: templateSettings,\n template: template,\n result: result,\n uniqueId: uniqueId,\n chain: chain,\n iteratee: iteratee,\n partial: partial,\n bind: bind,\n bindAll: bindAll,\n memoize: memoize,\n delay: delay,\n defer: defer,\n throttle: throttle,\n debounce: debounce,\n wrap: wrap,\n negate: negate,\n compose: compose,\n after: after,\n before: before,\n once: once,\n findKey: findKey,\n findIndex: findIndex,\n findLastIndex: findLastIndex,\n sortedIndex: sortedIndex,\n indexOf: indexOf,\n lastIndexOf: lastIndexOf,\n find: find,\n detect: find,\n findWhere: findWhere,\n each: each,\n forEach: each,\n map: map,\n collect: map,\n reduce: reduce,\n foldl: reduce,\n inject: reduce,\n reduceRight: reduceRight,\n foldr: reduceRight,\n filter: filter,\n select: filter,\n reject: reject,\n every: every,\n all: every,\n some: some,\n any: some,\n contains: contains,\n includes: contains,\n include: contains,\n invoke: invoke,\n pluck: pluck,\n where: where,\n max: max,\n min: min,\n shuffle: shuffle,\n sample: sample,\n sortBy: sortBy,\n groupBy: groupBy,\n indexBy: indexBy,\n countBy: countBy,\n partition: partition,\n toArray: toArray,\n size: size,\n pick: pick,\n omit: omit,\n first: first,\n head: first,\n take: first,\n initial: initial,\n last: last,\n rest: rest,\n tail: rest,\n drop: rest,\n compact: compact,\n flatten: flatten,\n without: without,\n uniq: uniq,\n unique: uniq,\n union: union,\n intersection: intersection,\n difference: difference,\n unzip: unzip,\n transpose: unzip,\n zip: zip,\n object: object,\n range: range,\n chunk: chunk,\n mixin: mixin,\n 'default': _$1\n };\n\n // Default Export\n\n // Add all of the Underscore functions to the wrapper object.\n var _ = mixin(allExports);\n // Legacy Node.js API.\n _._ = _;\n\n return _;\n\n})));\n\n","function _classCallCheck(a, n) {\n if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nexport { _classCallCheck as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(e, r) {\n for (var t = 0; t < r.length; t++) {\n var o = r[t];\n o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o);\n }\n}\nfunction _createClass(e, r, t) {\n return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", {\n writable: !1\n }), e;\n}\nexport { _createClass 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 };","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 _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 };","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 };","// 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\tif (cachedModule.error !== undefined) throw cachedModule.error;\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\tvar threw = true;\n\ttry {\n\t\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\t\tthrew = false;\n\t} finally {\n\t\tif(threw) delete __webpack_module_cache__[moduleId];\n\t}\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// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","// 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__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \"\" + {\"30\":\"7ab07c3a984f43e31a22\",\"59\":\"a995ae212c3560f48b95\",\"130\":\"790af22101938bf9218e\",\"131\":\"437f3f768ec3e459b0ae\",\"139\":\"3e1c1443d6388b8ed201\",\"198\":\"438fdfbe26a7f2fe8e53\",\"205\":\"dc29f9481cc550b55af7\",\"279\":\"1613e5cb622d1851a8c2\",\"327\":\"c14b7919e4890997044d\",\"376\":\"7e0623939825711a4983\",\"391\":\"957a5ac612e0796cc953\",\"398\":\"0d2d4ededb4d0803ae40\",\"411\":\"4fe0499175993a27f2b3\",\"505\":\"c6a2516cb025cf9facb3\",\"509\":\"52109c868ce45082e257\",\"546\":\"3680009ef314a47820c1\",\"558\":\"c8cd33323ff52a973e8a\",\"573\":\"06c2b2f2ffb02444e5f2\",\"675\":\"32383b9b62a5151e8c57\",\"703\":\"53312dee2d475a301d4d\",\"707\":\"368c7218d09f99c21cd6\",\"716\":\"3c1b958743f6dd1c5225\",\"788\":\"d5c2e03a78ddcebcfef9\",\"791\":\"a1f6d462c286cbf7f4b1\",\"908\":\"4aaec286549212069698\",\"911\":\"fe7f17e2cec15be91dfc\",\"936\":\"e259ad703f976b1de643\",\"939\":\"93a121bfb62cc4c5db0b\",\"946\":\"84738c34ae96b3a867e4\",\"968\":\"d66f9453954493b3e241\",\"970\":\"a00f3a0fcde4fa937166\",\"1001\":\"49187b64dade32dd6ed6\",\"1022\":\"1287c2fe09077bce075d\",\"1039\":\"64942d63d7076156933d\",\"1041\":\"e107a4bb7c800ee98eef\",\"1058\":\"213f0251ecd9f2292e5f\",\"1095\":\"9a5031edf43d9b582993\",\"1115\":\"ebcfd5b3ae043d329a60\",\"1118\":\"93ebceffaa1d6cbb473d\",\"1122\":\"c84d4cb89c47e1bd4296\",\"1173\":\"2597508a4100c0903545\",\"1177\":\"d39e5a0e681edcea8e69\",\"1188\":\"57608fa07b8dab54a90e\",\"1197\":\"1e734e8253b5c5b623ab\",\"1222\":\"37d18507b7816a2ebeaf\",\"1281\":\"3dc8fe57fdb6780c7931\",\"1282\":\"3310b2b6bd669c2c0204\",\"1296\":\"4950d886f280bc05dea8\",\"1345\":\"b782402fd69a8b774e07\",\"1359\":\"5d5ec0ca126018eda4a6\",\"1378\":\"f1f1b21d4f207cb80b3d\",\"1402\":\"f05ddd0aa5437e6853c8\",\"1412\":\"6846a9d052daced78e5e\",\"1446\":\"26392b67016cfee092b7\",\"1470\":\"c8de15e3d97845ea1505\",\"1490\":\"6aec52f32f1e61a496e8\",\"1522\":\"84a02a9d20bd2b2fb74a\",\"1551\":\"b78f3eaffedb4c27fe29\",\"1560\":\"ae93469201d081d9cced\",\"1640\":\"962278aa11b405cb2e51\",\"1664\":\"9b6b67c533b9e3173ce4\",\"1687\":\"88744b0e1d25bb7081e3\",\"1715\":\"0585ef0b7402ab9d0ca0\",\"1740\":\"bef8381ae2c8ea287565\",\"1744\":\"70c23a256fa192c8ba4c\",\"1756\":\"727995e567e560b77089\",\"1796\":\"f41af8e1826168d6ae9d\",\"1797\":\"77776b8c92158100a808\",\"1833\":\"a8018877345afd66f2b3\",\"1834\":\"75a8cc2ce66fd370c28c\",\"1874\":\"ba632391833359cf9263\",\"1888\":\"69d72c1e4aa23faf134b\",\"1890\":\"86936947a63d5fc10803\",\"1911\":\"fa61610a9dd4b606e18f\",\"1914\":\"bdf08e19d4a7190fedc2\",\"1985\":\"84ca72a759109358ddf4\",\"2017\":\"575a194c3f17cbf9beb7\",\"2113\":\"87b2006bea24fccc1e4a\",\"2163\":\"d851b74620b3a43c5fb9\",\"2169\":\"c9caf8ee94deb28cd525\",\"2244\":\"1506419376be8a1cf4ef\",\"2269\":\"98006edb3ed7e866e444\",\"2270\":\"08515153e4fc7d4ae69f\",\"2277\":\"07c440bd82951818d3bc\",\"2278\":\"356d7de9b176cd78b092\",\"2286\":\"a8a006942235e9c5d9ad\",\"2298\":\"e2fa6fea9890163c53ea\",\"2365\":\"a9122506efd362818b6f\",\"2378\":\"cf9acdfe10de1f79d1ec\",\"2398\":\"dd06400544709140053a\",\"2402\":\"f8137ce00680182b6b39\",\"2410\":\"8b205e97f27798be59b2\",\"2449\":\"92abbb13d67432c9d457\",\"2478\":\"66f2c714f38f86fbb338\",\"2479\":\"f77cefbb85913987a04b\",\"2547\":\"8446c091a22910fb0973\",\"2552\":\"54023037b23c33512b29\",\"2582\":\"f7f8fec58d091e33cbf5\",\"2586\":\"5227768c659673754976\",\"2652\":\"4a4ae2ae81a97caf4fd8\",\"2658\":\"7893721eacf167034970\",\"2673\":\"ac1410fcccd2351d5ffb\",\"2686\":\"5f61527c06f8b611ea65\",\"2692\":\"4c4a600a2cf640cab356\",\"2742\":\"563c6548fd9e0403dab1\",\"2747\":\"62301e7066e3006d162a\",\"2749\":\"9b074e6fd88f8e742eac\",\"2862\":\"708f82319bd95f9356f0\",\"2864\":\"9335826ca83091640af1\",\"2897\":\"ce16fc5c36daf501f7cd\",\"2962\":\"6089ef480acf5bd05119\",\"2963\":\"2f15b38290456287894e\",\"2970\":\"33d833e02b13684c0130\",\"2994\":\"4330daff40461718f38b\",\"3009\":\"08b313fe1d0592d428a2\",\"3015\":\"1b795dc6e2b4926d602f\",\"3056\":\"7a842054405051b3d3d1\",\"3062\":\"95383587c6b0fecb03ed\",\"3087\":\"bfd80e4115d2a3669adf\",\"3096\":\"5ee97b2166131db86783\",\"3132\":\"a2a009f0ab5501ff5f4f\",\"3157\":\"d4e3fd7f84874dc63566\",\"3189\":\"d888919682edea8bdfbc\",\"3197\":\"b02f6877ace3296a4185\",\"3228\":\"4acae457a458d37dd845\",\"3319\":\"398e72e765cb5f0913d7\",\"3344\":\"99bd7d10ed304e6b9477\",\"3348\":\"574c6329e9a462002feb\",\"3411\":\"6bf6c32ccf2c17279a6d\",\"3438\":\"ef094484ba3f54092e6c\",\"3455\":\"335df3b7ccf4af6e1190\",\"3465\":\"6a85150616a3d62bf902\",\"3620\":\"fc69e4adb66b48600be4\",\"3622\":\"c2ce498ae437a3f6847c\",\"3653\":\"5f3399cdb0e629365c51\",\"3669\":\"21a3a7c1e3e8f260940a\",\"3682\":\"1e6296f1f0c06ecc3aac\",\"3708\":\"f45131015410a03d4585\",\"3726\":\"ea40ed0919f275800c86\",\"3743\":\"b8adb810dcaa5534f6fc\",\"3818\":\"d5de4c05948516413791\",\"3886\":\"69d7245d8297f6a6fd66\",\"3943\":\"05988c28f6c8248fd3dd\",\"3979\":\"f4548d47f6da5cb3d5a2\",\"4001\":\"6a7f5abb258a94ec5ba8\",\"4026\":\"eb6adc49ba54b1df6890\",\"4098\":\"cfc53a943b0cffc9b51c\",\"4103\":\"6ad23e717e08bffcacc7\",\"4114\":\"ccfef29b6aec7399bcc4\",\"4120\":\"0631123dc8094a0ad49c\",\"4147\":\"9552665389bc7124e20d\",\"4315\":\"5197bd8abacf492cb825\",\"4334\":\"a79e21bf9577411b2f45\",\"4342\":\"3dcc5b1d13fb5c23335c\",\"4351\":\"a5b87f02ba401b78ba21\",\"4448\":\"1382305563dee5b24785\",\"4590\":\"44928d5b0527989d0315\",\"4594\":\"70bc7989b95192bab9e0\",\"4603\":\"ed85b36ee3263fba2216\",\"4630\":\"c24ed7a00fa0e900d04c\",\"4649\":\"8681420f85fbce248063\",\"4680\":\"3f17c633256c2b93717c\",\"4696\":\"98cf5defd0d4cb8e68b1\",\"4698\":\"0f652e1fef623653791d\",\"4703\":\"443ab70447bbebbd0646\",\"4774\":\"8f78aed719470cf509ad\",\"4777\":\"f1057716db7636668022\",\"4844\":\"a1c5a2abc78390976cd4\",\"4873\":\"7f5bd48063c22e93c37a\",\"4887\":\"a12e458229ca01e29579\",\"4910\":\"26565b7b868c72346228\",\"4958\":\"b1434cbf618e3b5aa8e0\",\"4962\":\"74e1bcf251467c397764\",\"5013\":\"eedc223f5b8b099ef2cd\",\"5099\":\"f38369d7accc65fb548f\",\"5100\":\"a0b2ed218f3f15edbf90\",\"5102\":\"71281ef5a43678f0ed54\",\"5130\":\"8dbb74904685f72064f9\",\"5134\":\"d6b04708394189a77b7e\",\"5196\":\"d90e9b31c954b7294db7\",\"5212\":\"693f6c64f63f6d379496\",\"5243\":\"03fd030bf7a79b6a8753\",\"5267\":\"1608a2035baf03712b03\",\"5301\":\"8c6cdd5e237e9f886219\",\"5351\":\"8c0ac2c10891a8af63e4\",\"5354\":\"3f0ea0c9ea2efa81ef9f\",\"5364\":\"c1d18d0f5e963f41d459\",\"5381\":\"4065af231bf39157a0a6\",\"5412\":\"0cc766061f77b06d5098\",\"5420\":\"f0b1871c4847c5033a9a\",\"5425\":\"50e9841113a6eb5ea053\",\"5461\":\"9a413a3b7ae0e9442325\",\"5509\":\"49de57d06f78035d60e9\",\"5517\":\"8bf536806bcf7a50be6d\",\"5542\":\"ffb57f05ff3a2086f5ca\",\"5550\":\"91605bace948dc24cd51\",\"5591\":\"f8aa4ada8669feef8c02\",\"5601\":\"a6bd61dd0b5aea213eb2\",\"5618\":\"087c0fe473460f174d23\",\"5644\":\"07475afecb1e37e436c7\",\"5646\":\"c6738e94b4b1be84d5ac\",\"5732\":\"437ecd8d4584d0f0b7e6\",\"5753\":\"91e12d92aa42d224602f\",\"5786\":\"fb84f0938245e67b6af9\",\"5832\":\"4f04da7a6ddb562a3765\",\"5846\":\"502f68afe8df24237065\",\"5883\":\"3e637acace18ddc5b334\",\"5912\":\"3713d2eda92bc3f7cc73\",\"5913\":\"fe010597953d11a5e868\",\"5927\":\"eb6d54d8e43989eb3683\",\"6010\":\"c06c54d1cc9eca175710\",\"6013\":\"e38416f9842638bb6e0b\",\"6018\":\"fede341dc49514b807c6\",\"6035\":\"894be66f6f58a262da44\",\"6117\":\"42e730745c7b0e66ad9b\",\"6137\":\"d65fa6603786b4ebb9c0\",\"6185\":\"1ac01543d023693795a5\",\"6217\":\"e115ee951f253d467f9a\",\"6232\":\"5d85f387bfb7c456e813\",\"6237\":\"f8f7c07c5be8d936cb1a\",\"6267\":\"819c80215cd7cae7bbc8\",\"6302\":\"edbb15850d7653cbd583\",\"6311\":\"a659f31c8f40948aeebb\",\"6357\":\"752621af6108cb3a0d1f\",\"6379\":\"0610381f109c33c74d75\",\"6414\":\"7b125972d45baf74894c\",\"6446\":\"168e0d104e1d09412c88\",\"6540\":\"3579edf5d669ff877ea8\",\"6588\":\"45d60a3200820bfedd3e\",\"6598\":\"13a57cefc810e5b0ba62\",\"6619\":\"5727f3014986a2c17fa6\",\"6748\":\"7a50f4b6d61247e0db2c\",\"6767\":\"25f4a0f8a3dc2ac0ab21\",\"6769\":\"f25e0750d9f33df821eb\",\"6809\":\"52d21b5a60ba820a6ac9\",\"6820\":\"3d2ab43edcdd682274e4\",\"6830\":\"82193c6bc9a04fc7d6e1\",\"6838\":\"8c106db95cb523cfc7fb\",\"6940\":\"5d0d13b7d82f45dc66eb\",\"6978\":\"69f58353cc2de2af5a22\",\"6990\":\"a77528e7cb16a744d551\",\"7004\":\"0f2f0c6efd0e0b9690de\",\"7013\":\"6602a89f5a9a01a61820\",\"7048\":\"4c7a9823dc1f72cfc7a4\",\"7081\":\"45946ba92026ab423a42\",\"7101\":\"438273077349c3994723\",\"7151\":\"0af0d66a9c6e1b4d5f56\",\"7200\":\"45f2fdb4ab7bf4d014b2\",\"7202\":\"7d6056cff38edb810198\",\"7205\":\"b52055cddc133d90a3d2\",\"7243\":\"8d4bc0141c188cd8f672\",\"7246\":\"10e11bc5b1cd57ec2c92\",\"7250\":\"6a14ac770c3ee16bc62f\",\"7269\":\"108d9940d09e6ce9b127\",\"7325\":\"5739b57f30343f82c029\",\"7415\":\"a6a74fe106005ad85a57\",\"7428\":\"c200e3348457a05774e4\",\"7466\":\"d875b7d704662e5d748a\",\"7487\":\"35ba08b05a935e0a859e\",\"7542\":\"ce6bc29e2248b1dae7ce\",\"7550\":\"28adfa2f512dff4c7452\",\"7562\":\"d6b8edaa17bf880f1f05\",\"7622\":\"c8e2b84d31f426fd70be\",\"7624\":\"92779ca49c04a073519a\",\"7665\":\"ca398c0b17c21ae5ebd8\",\"7688\":\"3f7ddd7379d2f5ba59f8\",\"7702\":\"b1d3123704e009ed522d\",\"7726\":\"33871f27479f3f333f27\",\"7836\":\"7ea15959831f30049d30\",\"7860\":\"01f680c46e7d3bf6924d\",\"7886\":\"676a979c41491cfb92a8\",\"7903\":\"5bf01c651f204a75b422\",\"7906\":\"491dc650fa8cbb42a1c7\",\"7926\":\"3d02be2d90464a8915a4\",\"7939\":\"d3ce5565bbeaf72a0f17\",\"8000\":\"0bbc9d269774362babd8\",\"8014\":\"f5c55e2f6244b9119010\",\"8081\":\"1a8116f91b9887c16280\",\"8109\":\"fce230be877bd63a1fe9\",\"8230\":\"2185dc267dc7e975b6ce\",\"8269\":\"307bcad5f05efd97da5f\",\"8295\":\"409f3574bf84f963b2a4\",\"8315\":\"1b1af855f0a86d6ad1d3\",\"8332\":\"9e984d1b5e6fd80e368c\",\"8334\":\"359fd1efe2cc94560b94\",\"8368\":\"67c0c62ef444e3edf75d\",\"8390\":\"91d964b680f9850d3143\",\"8417\":\"e7594fb77d105a6299b4\",\"8482\":\"d112fb457c8c3395daf8\",\"8494\":\"937b0ec414d2980a11e3\",\"8497\":\"996c6244d57d4a872cf4\",\"8527\":\"05a7679aae43195e672d\",\"8537\":\"e68aa5eacfc7cf02e4ab\",\"8542\":\"670e6eefadfc9f2b63cf\",\"8566\":\"9224265a6b3e4aa535f8\",\"8643\":\"669391f97a33bd031183\",\"8691\":\"9200fc5cf69225394993\",\"8743\":\"8c9949fa09e7549e9caf\",\"8809\":\"32cfe0f3cc4dfb777ef4\",\"8830\":\"8e2baa517c650a99be17\",\"8842\":\"982df2b7101cfb522f96\",\"8855\":\"070571ce4c4d52a1f906\",\"8856\":\"a645df6e20e7ed001182\",\"8902\":\"7d8a333fd916816def54\",\"8931\":\"9a7759d9a63e22404e53\",\"8942\":\"b207cc53caf0d9905d03\",\"8970\":\"3e8f291c44bc126423ae\",\"8984\":\"4566c8235925985be6ee\",\"8990\":\"3699a55957f35f0ee3fe\",\"8997\":\"e4fa6f274a23faf30af0\",\"9011\":\"a15e8ca7c00374c68897\",\"9024\":\"cfb9e1c935f6ecdb5147\",\"9034\":\"d8d985433c1a3f577d47\",\"9038\":\"40382fcefc1fd33ae031\",\"9150\":\"c0fe1337d40e26b72457\",\"9241\":\"65df9c3584bdf1e19ad1\",\"9306\":\"c7005be5b858fab01d51\",\"9331\":\"34c59f9c95a07cf9b541\",\"9390\":\"824f0b16e482290faaed\",\"9402\":\"94bb4aec0b228b8da0ce\",\"9411\":\"c6ffa646d55af608b1b5\",\"9438\":\"8aaec940651d26ab3e94\",\"9451\":\"d7ea082c8361ba2005d6\",\"9452\":\"2f41a553323bbdc198a6\",\"9510\":\"64cad12d0db4016c4c78\",\"9532\":\"6ad05883be33faa4968b\",\"9644\":\"6329d517a0aaf0e84c80\",\"9651\":\"644e5d90d4f6ec2c2ca6\",\"9666\":\"c09f467bb95902bb75bd\",\"9730\":\"ac820ac62150e55496ca\",\"9737\":\"b0d8d079b7f25fd91d1f\",\"9818\":\"c9e703f0a653d7f8f08e\",\"9838\":\"f522951e4ce866a15c5c\",\"9898\":\"63e6a247ae92913e93df\"}[chunkId] + \".js?3.11.5.0f839ec2e.1741817651184\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".\" + {\"131\":\"a1c23fea85273843b9d9\",\"546\":\"88d0117008a8f750df10\",\"908\":\"9ef9e85e325eea12011b\",\"1058\":\"9a0d8d216372418b1aaf\",\"1188\":\"9ef9e85e325eea12011b\",\"1296\":\"f222cdf234cd4bcd03ed\",\"1345\":\"40049b350a89d06f89a9\",\"1359\":\"53a739f72cfdcf115dd7\",\"1402\":\"35a2c582316b2a19185d\",\"1664\":\"8d3348e10ac4b2d55967\",\"1756\":\"2b22a1341688d5f43703\",\"1911\":\"04dc9d888ed65ebe095b\",\"2479\":\"9ef9e85e325eea12011b\",\"2582\":\"4f1f95182a5e24c20846\",\"2970\":\"9ef9e85e325eea12011b\",\"2994\":\"f65b78788b3f5e23af66\",\"3015\":\"37a61c453b46545ac66a\",\"3132\":\"979b5aec2f2970a194b7\",\"3157\":\"2b22a1341688d5f43703\",\"3411\":\"36bd8b2628dea74c6cff\",\"3818\":\"9ef9e85e325eea12011b\",\"4315\":\"9ef9e85e325eea12011b\",\"4649\":\"a8a4f1d644890dc34036\",\"4887\":\"9ef9e85e325eea12011b\",\"5100\":\"3b0c4130a078839b2929\",\"5243\":\"9ef9e85e325eea12011b\",\"5354\":\"dd8ac20c8084f216fb73\",\"5412\":\"9ef9e85e325eea12011b\",\"5461\":\"9ef9e85e325eea12011b\",\"5732\":\"9ef9e85e325eea12011b\",\"5883\":\"dcdd217df1f8846e4a93\",\"5913\":\"297d058640e1b6f626ef\",\"6267\":\"14ed5bcb55ab121d20d3\",\"6978\":\"6b9a7a0bb1312368fd89\",\"7004\":\"8845909b0c4da8ba7f9b\",\"7428\":\"67ab140e9d23f2d2d312\",\"8000\":\"9ef9e85e325eea12011b\",\"8109\":\"3a3b2e06cec9f2e0925b\",\"8482\":\"9ef9e85e325eea12011b\",\"8691\":\"f22fe587879a1267d673\",\"8931\":\"a76262faebc497483c02\",\"9241\":\"33b11ab282bfa67d6afa\",\"9306\":\"9ef9e85e325eea12011b\",\"9411\":\"b1aa2047a482c1d16352\",\"9451\":\"9ef9e85e325eea12011b\",\"9737\":\"c65be06534080be15a9c\",\"9818\":\"8afe3a0af97fc8459e1f\"}[chunkId] + \".css\";\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__.hmd = (module) => {\n\tmodule = Object.create(module);\n\tif (!module.children) module.children = [];\n\tObject.defineProperty(module, 'exports', {\n\t\tenumerable: true,\n\t\tset: () => {\n\t\t\tthrow new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id);\n\t\t}\n\t});\n\treturn module;\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var inProgress = {};\nvar dataWebpackPrefix = \"mono-repo:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// 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 = \"./assets/\";","if (typeof document === \"undefined\") return;\nvar createStylesheet = (chunkId, fullhref, oldTag, resolve, reject) => {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = (event) => {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tif (linkTag.parentNode) linkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tif (oldTag) {\n\t\toldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);\n\t} else {\n\t\tdocument.head.appendChild(linkTag);\n\t}\n\treturn linkTag;\n};\nvar findStylesheet = (href, fullhref) => {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = (chunkId) => {\n\treturn new Promise((resolve, reject) => {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t3524: 0\n};\n\n__webpack_require__.f.miniCss = (chunkId, promises) => {\n\tvar cssChunks = {\"131\":1,\"546\":1,\"908\":1,\"1058\":1,\"1188\":1,\"1296\":1,\"1345\":1,\"1359\":1,\"1402\":1,\"1664\":1,\"1756\":1,\"1911\":1,\"2479\":1,\"2582\":1,\"2970\":1,\"2994\":1,\"3015\":1,\"3132\":1,\"3157\":1,\"3411\":1,\"3818\":1,\"4315\":1,\"4649\":1,\"4887\":1,\"5100\":1,\"5243\":1,\"5354\":1,\"5412\":1,\"5461\":1,\"5732\":1,\"5883\":1,\"5913\":1,\"6267\":1,\"6978\":1,\"7004\":1,\"7428\":1,\"8000\":1,\"8109\":1,\"8482\":1,\"8691\":1,\"8931\":1,\"9241\":1,\"9306\":1,\"9411\":1,\"9451\":1,\"9737\":1,\"9818\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(() => {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, (e) => {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t3524: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(!/^(1345|3132|4649|546|6267|9411)$/.test(chunkId)) {\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\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\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkmono_repo\"] = self[\"webpackChunkmono_repo\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// Setup everything needed (Globals - 3rd party or otherwise to get the app ready to initialize)\nimport {getPrefixedLogger} from '@netx/core-next/instance/logger';\nimport {initializeI18n} from '@netx/core-next/locales';\nimport './bootstrap';\nimport css from './css';\n\nconst logger = getPrefixedLogger('init');\n\n// After i18n (success or fail) and custom css properties we will load the app\nfunction loadApp() {\n\t// Initialize core\n\timport(/* webpackChunkName: \"@netx/core\" */ '@netx/core').then((Core) => {\n\t\tCore.default.initialize();\n\t});\n}\n\nlogger.debug('initializing css and i18n');\n\nPromise.all([\n\t// Load custom CSS before loading in core\n\tcss(),\n\t// Load i18n and base locales before loading in core\n\tinitializeI18n(),\n])\n\t.then(\n\t\t() => {},\n\t\t(err) => {\n\t\t\tlogger.error('failed to initialize css or i18n', err.message);\n\t\t},\n\t)\n\t.finally(() => {\n\t\tlogger.debug('initialized');\n\t\tloadApp();\n\t});\n"],"names":["compileSchema","resolve","Cache","SchemaObject","stableStringify","formats","rules","$dataMetaSchema","util","module","exports","Ajv","prototype","validate","compile","addSchema","addMetaSchema","validateSchema","getSchema","removeSchema","addFormat","errorsText","_addSchema","_compile","compileAsync","customKeyword","addKeyword","add","getKeyword","get","removeKeyword","remove","validateKeyword","errorClasses","ValidationError","Validation","MissingRefError","MissingRef","META_SCHEMA_ID","META_IGNORE_OPTIONS","META_SUPPORT_DATA","opts","_opts","copy","setLogger","_schemas","_refs","_fragments","_formats","format","_cache","cache","_loadingSchemas","_compilations","RULES","_getId","chooseGetId","loopRequired","Infinity","errorDataPath","_errorDataPathProperty","undefined","serialize","_metaOpts","getMetaSchemaOptions","addInitialFormats","keywords","addInitialKeywords","addDefaultMetaSchema","meta","nullable","metaSchema","type","addInitialSchemas","schemaKeyRef","data","v","schemaObj","valid","$async","errors","schema","_meta","key","_skipValidation","Array","isArray","i","length","id","checkUnique","normalizeId","skipValidation","throwOrLogError","$schema","defaultMeta","logger","warn","message","error","self","keyRef","_getSchemaObj","_getSchemaFragment","ref","res","call","root","baseId","fragment","RegExp","_removeAllSchemas","clear","del","cacheKey","schemas","regex","test","shouldAddSchema","recursiveMeta","cached","addUsedSchema","willValidate","localRefs","ids","put","currentOpts","compiling","callValidate","e","refs","refVal","_validate","result","apply","arguments","schemaId","_get$IdOrId","_get$Id","$id","options","separator","dataVar","text","dataPath","slice","name","$data","$dataSchema","optsSchemas","keyword","metaOpts","log","noop","console","value","callback","loadSchema","p","loadMetaSchemaOf","then","_compileAsync","sch","$ref","Promise","loadMissingSchema","missingSchema","added","missingRef","schemaPromise","removePromise","ajv","validation","url","fullPath","errorSubclass","Subclass","Object","create","Error","constructor","DATE","DAYS","TIME","HOSTNAME","URI","URIREF","URITEMPLATE","URL","UUID","JSON_POINTER","JSON_POINTER_URI_FRAGMENT","RELATIVE_JSON_POINTER","mode","isLeapYear","year","date","str","matches","match","month","day","time","full","hour","minute","second","timeZone","fast","uri","email","hostname","ipv4","ipv6","uuid","date_time","DATE_TIME_SEPARATOR","dateTime","split","NOT_URI_FRAGMENT","Z_ANCHOR","validateGenerator","ucs2length","equal","patterns","patternsHash","defaults","defaultsHash","customRules","c","checkCompiling","compilation","index","localCompile","cv","sourceCode","source","endCompiling","_schema","_root","isRoot","isTop","schemaPath","errSchemaPath","errorPath","resolveRef","usePattern","useDefault","useCustomRule","vars","refValCode","patternCode","defaultCode","customRuleCode","processCode","makeValidate","code","_refVal","refCode","refIndex","resolvedRef","rootRefId","addLocalRef","localSchema","inlineRef","inlineRefs","replaceLocalRef","removeLocalRef","refId","inline","regexStr","toQuotedString","valueStr","rule","parentSchema","it","deps","definition","dependencies","every","hasOwnProperty","join","macro","compIndex","splice","arr","statement","traverse","resolveSchema","parse","refPath","_getFullPath","getFullPath","keys","resolveRecursive","getJsonPointer","parsedRef","resolveUrl","resolveIds","PREVENT_SCOPE_CHANGE","toHash","parts","part","unescapeFragment","SIMPLE_INLINED","limit","checkNoRef","countKeys","item","count","normalize","TRAILING_SLASH_HASH","replace","baseIds","fullPaths","allKeys","jsonPtr","rootSchema","parentJsonPtr","parentKeyword","keyIndex","escapeFragment","ruleModules","ALL","KEYWORDS","TYPES","all","types","forEach","group","map","implKeywords","k","push","implements","$comment","concat","custom","obj","len","pos","charCodeAt","o","to","checkDataType","dataType","strictNumbers","negate","EQUAL","AND","OK","NOT","checkDataTypes","dataTypes","t","array","object","null","number","integer","coerceToTypes","getProperty","escapeQuotes","varOccurences","varReplace","schemaHasRules","schemaHasRulesExcept","schemaUnknownRules","getPathExpr","getPath","getData","unescapeJsonPointer","escapeJsonPointer","COERCE_TO_TYPES","optionCoerceTypes","hash","IDENTIFIER","SINGLE_QUOTE","expr","exceptKeyword","currentPath","jsonPointers","isNumber","joinPaths","prop","lvl","paths","jsonPointer","up","segments","segment","a","b","decodeURIComponent","encodeURIComponent","keywordsJsonPointers","JSON","stringify","j","anyOf","definitions","simpleTypes","statements","not","required","properties","items","modifying","async","const","$keyword","$ruleType","$errorKeyword","$schemaValue","out","$lvl","level","$dataLvl","dataLevel","$schemaPath","$errSchemaPath","$breakOnError","allErrors","$isData","dataPathArr","$isMax","$exclusiveKeyword","$schemaExcl","$isDataExcl","$op","$notOp","$schemaValueExcl","$exclusive","$exclType","$exclIsNumber","$opExpr","$opStr","$$outStack","createErrors","messages","verbose","__err","pop","compositeRule","Math","unicode","$it","$closingBraces","$nextValid","$currentBaseId","$allSchemasEmpty","arr1","$sch","$i","l1","strictKeywords","$valid","$errs","$wasComposite","$idx","$dataNxt","$nextData","$nonEmptySchema","$passData","$code","$compile","$inline","$macro","$ruleValidate","$validateCode","$rule","$definition","$rDef","$validateSchema","$ruleErrs","$ruleErr","$asyncKeyword","passContext","$parentData","$parentDataProperty","def_callRuleValidate","def_customError","$schemaDeps","$propertyDeps","$ownProperties","ownProperties","$property","$deps","$currentErrorPath","$propertyKey","$prop","$useData","$propertyPath","$missingProperty","arr2","i2","l2","$vSchema","$unknownFormats","unknownFormats","$allowUnknown","$format","$isObject","$formatType","indexOf","$formatRef","$thenSch","$elseSch","$thenPresent","$elsePresent","$ifClause","allOf","contains","maximum","minimum","maxItems","minItems","maxLength","minLength","maxProperties","minProperties","multipleOf","oneOf","pattern","propertyNames","uniqueItems","$additionalItems","additionalItems","$currErrSchemaPath","multipleOfPrecision","$allErrorsOption","$prevValid","$passingSchemas","$regexp","$key","$dataProperties","$schemaKeys","filter","notProto","$pProperties","patternProperties","$pPropertyKeys","$aProperties","additionalProperties","$someProperties","$noAdditional","$additionalIsSchema","$removeAdditional","removeAdditional","$checkAdditional","$required","$requiredHash","i1","$pProperty","$additionalProperty","$useDefaults","useDefaults","arr3","i3","l3","$hasDefault","default","arr4","i4","l4","$invalidName","$refCode","$refVal","$message","missingRefs","__callValidate","$propertySch","$loopRequired","$itemType","$typeIsArray","$method","$refKeywords","$unknownKwd","$keywordsMsg","$top","rootId","strictDefaults","$defaultMsg","$closingBraces1","$closingBraces2","$typeSchema","extendRefs","coerceTypes","$coerceToTypes","$rulesGroup","$shouldUseGroup","$dataType","$coerced","$type","arr5","i5","l5","$shouldUseRule","$ruleImplementsSomeKeyword","impl","definitionSchema","_addRule","ruleGroup","rg","throwError","_validateKeyword","utils","settle","cookies","buildURL","buildFullPath","parseHeaders","isURLSameOrigin","createError","Cancel","config","reject","onCanceled","requestData","requestHeaders","headers","responseType","done","cancelToken","unsubscribe","signal","removeEventListener","isFormData","request","XMLHttpRequest","auth","username","password","unescape","Authorization","btoa","baseURL","onloadend","responseHeaders","getAllResponseHeaders","err","response","responseText","status","statusText","open","method","toUpperCase","params","paramsSerializer","timeout","onreadystatechange","readyState","responseURL","setTimeout","onabort","onerror","ontimeout","timeoutErrorMessage","transitional","clarifyTimeoutError","isStandardBrowserEnv","xsrfValue","withCredentials","xsrfCookieName","read","xsrfHeaderName","val","toLowerCase","setRequestHeader","isUndefined","onDownloadProgress","addEventListener","onUploadProgress","upload","cancel","abort","subscribe","aborted","send","bind","Axios","mergeConfig","createInstance","defaultConfig","context","instance","extend","instanceConfig","axios","CancelToken","isCancel","VERSION","promises","spread","isAxiosError","toString","__CANCEL__","executor","promise","resolvePromise","token","_listeners","l","onfulfilled","_resolve","reason","throwIfRequested","listener","InterceptorManager","dispatchRequest","validator","validators","interceptors","configOrUrl","assertOptions","silentJSONParsing","boolean","forcedJSONParsing","requestInterceptorChain","synchronousRequestInterceptors","interceptor","runWhen","synchronous","unshift","fulfilled","rejected","responseInterceptorChain","chain","shift","newConfig","onFulfilled","onRejected","getUri","handlers","use","eject","fn","h","isAbsoluteURL","combineURLs","requestedURL","enhanceError","transformData","throwIfCancellationRequested","transformRequest","merge","common","adapter","transformResponse","toJSON","description","fileName","lineNumber","columnNumber","stack","config1","config2","getMergedValue","target","isPlainObject","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","configValue","validateStatus","fns","normalizeHeaderName","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","stringifySafely","rawValue","parser","encoder","isString","trim","getDefaultAdapter","process","isArrayBuffer","isBuffer","isStream","isFile","isBlob","isArrayBufferView","buffer","isURLSearchParams","isObject","strictJSONParsing","maxContentLength","maxBodyLength","thisArg","args","encode","serializedParams","isDate","toISOString","hashmarkIndex","relativeURL","write","expires","path","domain","secure","cookie","Date","toGMTString","document","now","payload","originURL","msie","navigator","userAgent","urlParsingNode","createElement","resolveURL","href","setAttribute","protocol","host","search","port","pathname","charAt","window","location","requestURL","parsed","normalizedName","ignoreDuplicateOf","line","substr","thing","deprecatedWarnings","allowUnknown","opt","version","formatMessage","desc","ArrayBuffer","isView","getPrototypeOf","isFunction","pipe","product","assignValue","stripBOM","content","___EXPOSE_LOADER_IMPORT___","___EXPOSE_LOADER_GLOBAL_THIS___","g","globalThis","flags","valueOf","cmp","cycles","f","node","seen","isFinite","seenIndex","sort","doccy","topLevel","minDoc","win","exportName","assign","VENDOR_PREFIXES","TEST_ELEMENT","TYPE_FUNCTION","round","abs","setTimeoutContext","bindFn","invokeArrayArg","arg","each","iterator","deprecate","deprecationMessage","output","nextKey","dest","src","inherit","child","base","childP","baseP","_super","boolOrFn","ifUndefined","val1","val2","addEventListeners","handler","splitStr","removeEventListeners","hasParent","parent","parentNode","inStr","find","inArray","findByKey","toArray","uniqueArray","results","values","prefixed","property","prefix","camelProp","_uniqueId","uniqueId","getWindowForElement","element","doc","ownerDocument","defaultView","parentWindow","MOBILE_REGEX","SUPPORT_TOUCH","SUPPORT_POINTER_EVENTS","SUPPORT_ONLY_TOUCH","INPUT_TYPE_TOUCH","INPUT_TYPE_PEN","INPUT_TYPE_MOUSE","INPUT_TYPE_KINECT","COMPUTE_INTERVAL","INPUT_START","INPUT_MOVE","INPUT_END","INPUT_CANCEL","DIRECTION_NONE","DIRECTION_LEFT","DIRECTION_RIGHT","DIRECTION_UP","DIRECTION_DOWN","DIRECTION_HORIZONTAL","DIRECTION_VERTICAL","DIRECTION_ALL","PROPS_XY","PROPS_CLIENT_XY","Input","manager","inputTarget","domHandler","ev","enable","init","createInputInstance","Type","inputClass","PointerEventInput","TouchInput","TouchMouseInput","MouseInput","inputHandler","eventType","input","pointersLen","pointers","changedPointersLen","changedPointers","isFirst","isFinal","session","computeInputData","emit","recognize","prevInput","pointersLength","firstInput","simpleCloneInputData","firstMultiple","offsetCenter","center","getCenter","timeStamp","deltaTime","angle","getAngle","distance","getDistance","computeDeltaXY","offsetDirection","getDirection","deltaX","deltaY","overallVelocity","getVelocity","overallVelocityX","x","overallVelocityY","y","scale","getScale","rotation","getRotation","maxPointers","computeIntervalInputData","srcEvent","offset","offsetDelta","prevDelta","velocity","velocityX","velocityY","direction","last","lastInterval","clientX","clientY","p1","p2","props","sqrt","atan2","PI","start","end","evEl","evTarget","evWin","destroy","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","MOUSE_ELEMENT_EVENTS","MOUSE_WINDOW_EVENTS","pressed","button","which","pointerType","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","store","pointerEvents","MSPointerEvent","PointerEvent","removePointer","isTouch","storeIndex","pointerId","SINGLE_TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","SINGLE_TOUCH_TARGET_EVENTS","SINGLE_TOUCH_WINDOW_EVENTS","SingleTouchInput","started","normalizeSingleTouches","touches","changed","changedTouches","TOUCH_INPUT_MAP","TOUCH_TARGET_EVENTS","targetIds","getTouches","allTouches","identifier","targetTouches","changedTargetTouches","touch","DEDUP_TIMEOUT","DEDUP_DISTANCE","mouse","primaryTouch","lastTouches","recordTouches","eventData","setLastTouch","lastTouch","lts","isSyntheticEvent","dx","dy","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","PREFIXED_TOUCH_ACTION","style","NATIVE_TOUCH_ACTION","TOUCH_ACTION_COMPUTE","TOUCH_ACTION_AUTO","TOUCH_ACTION_MANIPULATION","TOUCH_ACTION_NONE","TOUCH_ACTION_PAN_X","TOUCH_ACTION_PAN_Y","TOUCH_ACTION_MAP","getTouchActionProps","TouchAction","set","cleanTouchActions","actions","hasPanX","hasPanY","touchMap","cssSupports","CSS","supports","compute","update","touchAction","recognizers","recognizer","getTouchAction","preventDefaults","prevented","preventDefault","hasNone","isTapPointer","isTapMovement","isTapTouchTime","preventSrc","STATE_POSSIBLE","STATE_BEGAN","STATE_CHANGED","STATE_ENDED","STATE_RECOGNIZED","STATE_CANCELLED","STATE_FAILED","Recognizer","state","simultaneous","requireFail","stateStr","directionStr","getRecognizerByNameIfManager","otherRecognizer","AttrRecognizer","PanRecognizer","pX","pY","PinchRecognizer","PressRecognizer","_timer","_input","RotateRecognizer","SwipeRecognizer","TapRecognizer","pTime","pCenter","Hammer","preset","Manager","recognizeWith","dropRecognizeWith","requireFailure","dropRequireFailure","hasRequireFailures","canRecognizeWith","event","additionalEvent","tryEmit","canEmit","inputDataClone","reset","attrTest","optionPointers","isRecognized","isValid","threshold","directionTest","hasMoved","inOut","validPointers","validMovement","validTime","clearTimeout","taps","interval","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","domEvents","cssProps","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","STOP","FORCED_STOP","oldCssProps","toggleCssProps","triggerDomEvent","gestureEvent","createEvent","initEvent","gesture","dispatchEvent","stop","force","stopped","curRecognizer","existing","on","events","off","Tap","Pan","Swipe","Pinch","Rotate","Press","freeGlobal","_extends","tName","i18nName","handleName","selectorAttr","targetAttr","optionsAttr","useOptionsAttr","parseDefaultValueFromContent","i18next","$","ele","attr","html","extendDefault","prepend","append","dataAttr","translated","defaultValue","localize","targetSelector","m","clone","lng","handle","elements","global","factory","w","noGlobal","getProto","flat","class2type","hasOwn","fnToString","ObjectFunctionString","support","nodeType","isWindow","preservedScriptAttributes","nonce","noModule","DOMEval","script","getAttribute","head","appendChild","removeChild","toType","jQuery","selector","isArrayLike","jquery","num","pushStack","elems","ret","prevObject","elem","first","eq","even","grep","_elem","odd","copyIsArray","deep","expando","random","isReady","msg","proto","Ctor","isEmptyObject","globalEval","makeArray","invert","callbackExpect","guid","Symbol","_i","Sizzle","Expr","getText","isXML","tokenize","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","preferredDoc","dirruns","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","pushNative","list","booleans","whitespace","attributes","pseudos","rwhitespace","rtrim","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","rhtml","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","escape","nonHex","high","String","fromCharCode","rcssescape","fcssescape","ch","asCodePoint","unloadHandler","inDisabledFieldset","addCombinator","disabled","nodeName","dir","next","childNodes","els","seed","nid","groups","newSelector","newContext","exec","getElementById","getElementsByTagName","getElementsByClassName","qsa","testContext","scope","toSelector","querySelectorAll","qsaError","removeAttribute","cacheLength","markFunction","assert","el","addHandle","attrs","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","namespace","namespaceURI","documentElement","hasCompare","subWindow","top","attachEvent","className","createComment","getById","getElementsByName","attrId","getAttributeNode","tag","tmp","innerHTML","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","specified","sel","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","operator","check","what","_argument","simple","forward","ofType","_context","xml","uniqueCache","outerCache","nodeIndex","useCache","lastChild","uniqueID","pseudo","setFilters","idx","matched","matcher","unmatched","lang","elemLang","activeElement","hasFocus","tabIndex","checked","selected","selectedIndex","_matchIndexes","radio","checkbox","file","image","submit","tokens","combinator","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","multipleContexts","contexts","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","filters","parseOnly","soFar","preFilters","compiled","_name","unique","isXMLDoc","escapeSelector","until","truncate","is","siblings","n","rneedsContext","needsContext","rsingleTag","winnow","qualifier","rootjQuery","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","prev","sibling","has","targets","closest","prevAll","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","reverse","rnothtmlwhite","createOptions","_","flag","Identity","Thrower","ex","adoptValue","noValue","fail","Callbacks","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","empty","disable","lock","fireWith","Deferred","func","tuples","always","deferred","newDefer","tuple","returned","progress","notify","onProgress","maxDepth","depth","special","that","mightThrow","notifyWith","resolveWith","exceptionHook","stackTrace","rejectWith","getStackHook","stateString","when","singleValue","remaining","resolveContexts","resolveValues","master","updateFunc","rerrorNames","readyException","readyList","completed","catch","readyWait","wait","doScroll","access","chainable","emptyGet","raw","bulk","_key","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","camelCase","string","acceptData","owner","Data","uid","defineProperty","configurable","hasData","dataPriv","dataUser","rbrace","rmultiDash","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","setter","clearQueue","defer","pnum","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","display","css","adjustCSS","valueParts","tween","adjusted","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","body","showHide","show","hide","toggle","rcheckableType","rtagName","rscriptType","div","createDocumentFragment","checkClone","cloneNode","noCloneChecked","option","wrapMap","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","tbody","tfoot","colgroup","caption","th","optgroup","buildFragment","scripts","selection","ignored","wrap","attached","nodes","htmlPrefilter","createTextNode","rkeyEvent","rmouseEvent","rtypenamespace","returnTrue","returnFalse","expectSync","safeActiveElement","one","origFn","leverageNative","notAsync","saved","isTrigger","delegateType","stopPropagation","stopImmediatePropagation","trigger","Event","handleObjIn","eventHandle","handleObj","namespaces","origType","elemData","triggered","dispatch","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","enumerable","originalEvent","writable","load","noBubble","click","beforeunload","returnValue","isDefaultPrevented","defaultPrevented","relatedTarget","isSimulated","altKey","bubbles","cancelable","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","charCode","keyCode","buttons","offsetX","offsetY","screenX","screenY","toElement","focus","blur","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","udataOld","udataCur","pdataOld","fixInput","domManip","collection","hasScripts","iNoClone","valueIsFunction","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","rnumnonpx","getStyles","opener","getComputedStyle","swap","old","rboxStyle","curCSS","computed","width","minWidth","maxWidth","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","container","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","right","pixelBoxStylesVal","boxSizingReliableVal","position","scrollboxSizeVal","offsetWidth","measure","parseFloat","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trChild","height","parseInt","trStyle","cssPrefixes","emptyStyle","vendorProps","vendorPropName","capName","finalPropName","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","max","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","ceil","getWidthOrHeight","boxSizingNeeded","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","opacity","origName","isCustomProp","setProperty","getBoundingClientRect","scrollboxSizeBuggy","left","margin","padding","border","suffix","expand","expanded","propHooks","run","percent","eased","duration","step","fx","scrollTop","scrollLeft","linear","swing","cos","fxNow","inProgress","rfxtypes","rrun","schedule","hidden","requestAnimationFrame","tick","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","defaultPrefilter","oldfire","propTween","restoreDisplay","isBox","anim","dataShow","unqueued","overflow","overflowX","overflowY","propFilter","specialEasing","prefilters","currentTime","startTime","tweens","originalProperties","originalOptions","gotoEnd","complete","timer","tweener","prefilter","speed","speeds","fadeTo","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","delay","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","bool","attrNames","getter","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","addClass","classes","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","isValidValue","classNames","hasClass","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","simulate","triggerHandler","attaches","rquery","parseXML","DOMParser","parseFromString","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","s","valueOrFunction","serializeArray","r20","rhash","rantiCache","rheaders","rlocalProtocol","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","ajaxHandleResponses","responses","ct","finalDataType","firstDataType","mimeType","getResponseHeader","converters","ajaxConvert","isSuccess","conv2","current","conv","responseFields","dataFilter","throws","active","lastModified","etag","isLocal","processData","contentType","accepts","json","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeadersNames","strAbort","overrideMimeType","finalText","crossDomain","hasContent","ifModified","beforeSend","success","nativeStatusText","modified","getJSON","getScript","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","offsetHeight","xhr","xhrSuccessStatus","xhrSupported","cors","errorCallback","xhrFields","onload","binary","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","animated","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","rect","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","unbind","delegate","undelegate","hover","fnOver","fnOut","proxy","holdReady","hold","parseJSON","isNumeric","isNaN","_jQuery","_$","noConflict","cb","pre","_traverse","post","arrayKeywords","propsKeywords","escapeJsonPtr","skipKeywords","enum","exclusiveMaximum","exclusiveMinimum","ls","localStorage","ms","lzstring","setItem","getItem","removeItem","this_data","_keys","_config","_compressAll","iteratee","newArr","_timeouts","Locally","compress","deconfig","decompressFromUTF16","_rebuildConfig","_saveConfig","_remove","compressToUTF16","_get","ttl","substring","eval","Number","_getType","getTime","_setTimeout","_clearTimeout","scan","returnString","persist","expire","Store","LZString","keyStrBase64","keyStrUriSafe","baseReverseDic","getBaseValue","alphabet","character","compressToBase64","_compress","decompressFromBase64","_decompress","compressed","compressToUint8Array","uncompressed","buf","Uint8Array","TotalLen","current_value","decompressFromUint8Array","decompress","compressToEncodedURIComponent","decompressFromEncodedURIComponent","bitsPerChar","getCharFromInt","ii","context_dictionary","context_dictionaryToCreate","context_c","context_wc","context_w","context_enlargeIn","context_dictSize","context_numBits","context_data","context_data_val","context_data_position","pow","resetValue","getNextValue","bits","resb","maxpower","power","dictionary","enlargeIn","dictSize","numBits","entry","d","fmtShort","msAbs","fmtLong","plural","isPlural","long","CSS_CUSTOM_PROPERTY_PREFIX","CSS_CUSTOM_PROPERTIES","DEFAULT_THEME_MODE","DATE_FORMAT","CONTAINER_ID","LOGIN_CONTAINER_ID","ALERT_CONTAINER_ID","GALLERY_CONTAINER_ID","TACK_CONTAINER_ID","HEADER_CONTAINER_ID","MODAL_CONTAINER_ID","POLL_INTERVAL","PASSIVE_ALERT_DELAY","Config","CONTACT_EMAIL","CHUNK_SIZE","PAGE_SIZE","EQUAL_GRID","LIST_TYPE","LIST_TYPES_ENABLED","LIST_TYPE_DEFAULT","ASSETS_CONTAINER_ID","DETAILS_CONTAINER_ID","VERSIONS_CONTAINER_ID","ZOOM_CONTAINER_ID","ZOOM_CANVAS_ID","ZOOM_SCALE","ZOOM_TOLERANCE","DOCVIEW_CONTAINER_ID","CHECKIN_CONTAINER_ID","CHECKIN_BROWSE_BUTTON_ID","EXPIRATION_ASSET_LIST_ID","EXPIRATION_HEADER_ID","TAGPANEL_CONTAINER_ID","MOST_VIEWED_SIZE","VIEW_UPLOAD_BUTTON_ID","REPURPOSE_CONTAINER_ID","DETAIL_TABS","DETAIL_TABS_DEFAULT","RECENTLY_UPLOADED_SIZE","REIMPORT_ENABLE","CHECKIN_ENABLE","REPURPOSE_ENABLE","DOWNLOAD_ON_CHECKOUT","CART_ASSETS_MINI","SEARCH_ASSETS_MINI","DRAGGABLE","FETCH_ON_SAVE","USE_FACETED_SEARCH","isMobile","CATEGORY_ASSETS_MINI","tags","flexible","getPublicProperty","asBoolean","publicProperties","isTrue","LabelValues","Base","label","lvb","findWhere","isFalse","__name__","models","model","Model","BatchJobs","batchJobs","BatchJobsCollection","setGlobal","PublicProperties","rpc","methods","Socket","autoConnect","autoReconnect","clientDisconnected","connected","connectionDurations","connectionRetries","disconnectEvents","lastConnectTime","lastDisconnectTime","maxConnectionRetries","reconnectCount","subscriptions","connect","whenConnected","disconnected","socket","WebSocket","onclose","onmessage","onopen","resetMaxConnectRetries","disconnect","close","getConnectionLifetime","reconnect","roomName","overrideSubscriptionCheck","inSubscriptions","action","without","simulateFail","throttle","listenTo","websocketProtocol","legacyWebsocket","SocketModel","websocket","BatchJob","idAttribute","completeUrl","details","estimatedTime","increment","jobTitle","percentComplete","runningTime","runningTimeLabel","secondsToReload","shareData","appendMetadata","errorCatastrophe","errorMessage","fileSize","hoursToLive","realPath","size","sizeUncompressed","warningMessage","hasResult","clientAttrs","getShare","parsers","addEventStr","eventStr","eventStrs","stopListening","trackJob","pollUntil","triggerProgress","pollInterval","customConfig","triggerComplete","dispatcher","triggerError","eventArgs","includes","i18n","additionalArgs","isRejected","messageCode","messageArr","LabelValue","Pager","currentPage","itemTotal","pageSize","pagesToDisplay","pageTotal","startIndex","routesToPage","adjustTotal","adj","assetCount","calculatePages","changedCurrentPage","pager","page","routeContext","gotoPage","firstPage","getPageDTO","pageDTO","startId","lastPage","nextPage","prevPage","setStartIndex","floor","fetch","clearPages","firstIndex","debounce","startPosition","lastIndex","lastChunk","SAMLService","idAttributes","SAMLServices","Session","xhrTrackProgress","getAdvertisedSamlServices","getPublicMethods","xhrLoadingMessages","xhrLoadedMessages","browserInfo","browserLimits","chrome","crios","firefox","phantomjs","safari","trident","browserOk","loginMsg","loginMsgClass","publicMethods","sessionKey","loggedInAsOtherUser","samlServices","SAMLServicesCollection","getSamlServices","testAuthentication","testSession","testToken","_tickle","triggerAnAPIError","authenticated","requiresLogin","getToken","isAuthenticatedAsPublicUser","isPublicUser","canAuthenticateAsPublicUser","getCurrentPortalProp","localStore","getSessionDuration","asMinutes","defaultMinutes","minutes","min","getPreference","UserPref","SESSION_DURATION","getSessionTickleInterval","testAjax","dataContext","jsonrpc","parseData","browserTestOk","tem","ua","N","appName","M","appVersion","limits","getCookie","Cookies","setCookie","cname","cvalue","exdays","setTime","toUTCString","deleteCookie","getKey","setKey","deleteKey","deleteToken","setToken","userSource","INTERNAL","login","shouldBeTickling","authConfig","TICKLE_SESSION","sessionTicklers","resetTickler","tickler","stopTickling","startTickling","noInitialTickle","setInterval","tickle","clearInterval","beTickling","lastTickled","resetLogoutTimer","inactivityStartTime","timeoutMinutes","visibilityState","postponeSessionTimeout","expireSession","sessionExpired","updatePortalContext","visibilityStateChanged","sessionDuration","addSubModel","unset","configured","api","jqX","POST_LOGIN_HASH_NAME","CUSTOM_LOGIN_TRIGGERED_NAME","getCurrentPortal","isBrandPortal","cms","portal","NetxThemeMode","NETX_THEME_MODES","NetxThemePref","Severity","SEVERITIES","getBrowserPreferedThemeMode","matchMedia","DARK","LIGHT","THEME_MODES","netxThemeModeToThemeMode","appAuthenticated","tokenAccess","DEFAULT","HOME_ROUTE","REQUIRE_LOGIN","Backbone","enhancedDispatcher","eventName","listenToOnce","prettyLogStyles","bold","dim","italic","underline","overline","inverse","strikethrough","black","red","green","yellow","blue","magenta","cyan","white","blackBright","redBright","greenBright","yellowBright","blueBright","magentaBright","cyanBright","whiteBright","bgBlack","bgRed","bgGreen","bgYellow","bgBlue","bgMagenta","bgCyan","bgWhite","bgBlackBright","bgRedBright","bgGreenBright","bgYellowBright","bgBlueBright","bgMagentaBright","bgCyanBright","bgWhiteBright","formatTemplate","template","hideUnsetPlaceholder","templateString","ansiColorWrap","placeholderValue","styleWrap","reduce","prevValue","thisStyle","defaultStyle","placeholder","stylePrettyLogs","formatNumberAddZeros","digits","addNumber","urlToObject","searchParams","origin","jsonStringifyRecursive","Set","ctx","stylize","stylizeNoColor","_extend","showHidden","colors","customInspect","stylizeWithColor","formatValue","isBoolean","styleType","isNull","isRegExp","re","objectToString","isError","arrayToHash","formatArray","recurseTimes","visibleKeys","formatProperty","formatError","primitive","formatPrimitive","getOwnPropertyNames","braces","reduceToSingleString","getOwnPropertyDescriptor","clonedOrigin","clonedAdd","formatWithOptions","inspectOptions","tempStr","lastPos","nextChar","tempArg","compact","tempNum","showProxy","tempInteger","tempFloat","regexp","getCallerStackFrame","getErrorTrace","getMeta","transportJSON","transportFormatted","prettyFormatLogObj","prettyFormatErrorObj","runtime","browser","pathRegex","logLevelId","logLevelName","stackDepthLevel","hideLogPositionForPerformance","parentNames","stackLineToStackFrame","pathResult","fullFilePath","fileNameWithLine","fileColumn","fileLine","filePath","filePathWithLine","pathParts","maskedArgs","errorStackStr","prettyErrorStackTemplate","stackFrame","placeholderValuesError","errorName","errorStack","prettyErrorTemplate","logMetaMarkup","logArgs","logErrors","logErrorsStr","prettyInspectOptions","BaseLogger","logArgsAndErrorsMarkup","minLevel","overwrite","mask","maskValuesOfKeys","_mask","thisLogObj","logObj","_recursiveCloneAndExecuteFunctions","toLogObj","_toLogObj","logObjWithMeta","addMeta","_addMetaToLogObj","formatMeta","metaProperty","formatLogObj","_prettyFormatLogObjMeta","attachedTransports","transportLogger","attachTransport","getSubLogger","subLoggerSettings","maskValuesOfKeysCaseInsensitive","_recursiveCloneAndMaskValuesOfKeys","Map","baseObject","_cloneError","maskPlaceholder","modifiedSource","regEx","maskValuesRegEx","isObjectOrArray","shallowCopy","descriptor","clonedLogObj","_toErrorObject","argumentsArrayName","cloned","nativeError","hideLogPositionForProduction","logObjMeta","prettyLogTemplate","placeholderValues","prettyLogTimeZone","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","dateInSettingsTimeZone","getTimezoneOffset","parentNamesString","prettyErrorParentNamesSeparator","prettyErrorLoggerNameDelimiter","addPlaceholders","Runtime","SILLY","TRACE","DEBUG","INFO","WARN","ERROR","FATAL","dateIsoStr","nameWithDelimiterPrefix","nameWithDelimiterSuffix","Logger","silly","trace","debug","info","fatal","isBrowser","isBrowserBlinkEngine","isSafari","isFirefox","getPrefixedLogger","appRouter","Router","routes","I18nLanguage","I18nSupportedLocale","I18N_LANGUAGE_ALIASES","I18N_SUPPORTED_LANGUAGES","resolver","rejector","consoleLogger","concreteLogger","_len","_len2","_key2","_len3","_key3","_len4","_key4","debugOnly","moduleName","baseLogger","EventEmitter","observers","observer","rej","makeString","getLastOfPath","Empty","cleanKey","canNotTraverseDeeper","setPath","newValue","pushPath","getPathWithDefaults","defaultData","deepExtend","regexEscape","_entityMap","chars","looksLikeObjectPath","nsSeparator","keySeparator","possibleChars","r","ki","deepFind","mix","endsWith","joinedPath","getCleanedCode","ResourceStore","ns","defaultNS","ignoreJSONStructure","addNamespaces","removeNamespaces","getResource","addResource","silent","addResources","resources","addResourceBundle","pack","removeResourceBundle","hasResourceBundle","getResourceBundle","compatibilityAPI","getDataByLanguage","hasLanguageSomeTranslations","postProcessor","processors","addPostProcessor","translator","processor","checkedLoadedFor","Translator","services","changeLanguage","language","exists","interpolation","resolved","extractFromKey","wouldCheckForNsInKey","seemsNaturalLanguage","userDefinedKeySeparator","userDefinedNsSeparator","interpolator","nestingRegexp","translate","lastKey","overloadTranslationOptionHandler","returnDetails","appendNamespaceToCIMode","usedKey","exactUsedKey","usedLng","usedNS","usedParams","getUsedParamsDetails","resUsedKey","resExactUsedKey","resType","noObject","joinArrays","handleAsObjectInI18nFormat","i18nFormat","handleAsObject","returnObjects","returnedObjectHandler","resTypeIsArray","newKeyToUse","deepKey","extendTranslation","usedDefault","needsPluralHandling","hasDefaultValue","defaultValueSuffix","pluralResolver","getSuffix","defaultValueSuffixOrdinalFallback","ordinal","isValidLookup","resForMissing","missingKeyNoValueFallbackToKey","updateMissing","fk","lngs","fallbackLngs","languageUtils","getFallbackCodes","fallbackLng","saveMissingTo","toResolveHierarchy","specificDefaultValue","defaultForMissing","missingKeyHandler","backendConnector","saveMissing","saveMissingPlurals","getSuffixes","appendNamespaceToMissingKey","parseMissingKeyHandler","_this","defaultVariables","skipInterpolation","nestBef","skipOnVariables","nb","interpolate","na","nest","postProcess","postProcessorNames","applyPostProcessor","postProcessPassResolved","i18nResolved","found","extracted","fallbackNS","needsZeroSuffixLookup","shouldUseIntlApi","needsContextHandling","codes","hasLoadedNamespace","possibleKey","finalKeys","addLookupKeys","pluralSuffix","zeroSuffix","pluralSeparator","ordinalPrefix","contextKey","contextSeparator","returnNull","returnEmptyString","resourceStore","optionsKeys","useOptionsReplaceForData","capitalize","LanguageUtil","supportedLngs","getScriptPartFromCode","formatLanguageCode","getLanguagePartFromCode","specialCases","lowerCaseLng","cleanCode","isSupportedCode","nonExplicitSupportedLngs","getBestMatchFromCodes","cleanedLng","lngOnly","supportedLng","fallbacks","fallbackCode","fallbackCodes","addCode","fc","sets","nr","_rulesPluralsTypes","nonIntlVersions","intlVersions","suffixesOrder","zero","two","few","many","other","createRules","numbers","plurals","PluralResolver","compatibilityJSON","Intl","PluralRules","addRule","getRule","needsPlural","resolvedOptions","pluralCategories","getPluralFormsOfKey","pluralCategory1","pluralCategory2","pluralCategory","getSuffixRetroCompatible","noAbs","simplifyPluralSuffix","returnSuffix","deepFindWithDefaults","Interpolator","escapeValue","iOpts","useRawValueToEscape","prefixEscaped","suffixEscaped","formatSeparator","unescapePrefix","unescapeSuffix","nestingPrefix","nestingPrefixEscaped","nestingSuffix","nestingSuffixEscaped","nestingOptionsSeparator","maxReplaces","alwaysFormat","resetRegExp","regexpStr","regexpUnescapeStr","regexpUnescape","nestingRegexpStr","replaces","regexSafe","handleFormat","interpolationkey","missingInterpolationHandler","todos","safeValue","todo","matchedVar","clonedOptions","handleHasOptions","inheritedOptions","sep","optionsString","matchedSingleQuotes","matchedDoubleQuotes","formatters","doReduce","parseFormatStr","formatStr","formatName","formatOptions","optStr","currency","range","rest","createCachedFormatter","formatter","Formatter","NumberFormat","datetime","DateTimeFormat","relativetime","RelativeTimeFormat","ListFormat","addCached","mem","formatted","valOptions","formatParams","locale","removePending","q","pending","pendingCount","Connector","backend","waitingReads","maxParallelReads","readingCalls","maxRetries","retryTimeout","queueLoad","languages","toLoad","toLoadLanguages","toLoadNamespaces","hasAllNamespaces","reload","loaded","loadedKeys","fcName","tried","prepareLoading","loadOne","fallbackValue","isUpdate","clb","initImmediate","preload","partialBundledLanguages","tDescription","transformOptions","bindMemberFunctions","inst","mems","I18n","modules","external","isInitialized","isClone","defOpts","createClassOnDemand","ClassOrObject","lu","languageDetector","detection","storeApi","storeApiChained","initializedStoreOnce","loadResources","usedCallback","resolvedLanguage","setResolvedLanguage","reloadResources","li","lngInLngs","_this2","isLanguageChangingTo","setLngProps","setLng","cacheUserLanguage","detect","getFixedT","keyPrefix","_this3","fixedT","resultKey","setDefaultNamespace","lastLng","loadNotPending","loadState","precheck","preResult","loadNamespaces","loadLanguages","preloaded","newLngs","rtlLngs","cloneInstance","forkResourceStore","mergedOptions","membersToCopy","addQueryString","queryString","paramName","queryStringParams","ActiveXObject","customHeaders","getDefaults","loadPath","addPath","allowMultiLoading","parsePayload","Backend","loadUrl","fieldContentRegExp","serializeCookie","maxAge","httpOnly","sameSite","cookieOptions","nameEQ","ca","cookie$1","lookup","lookupCookie","cookieMinutes","cookieDomain","querystring","query","lookupQuerystring","hasLocalStorageSupport","localStorageAvailable","testKey","lookupLocalStorage","hasSessionStorageSupport","sessionStorageAvailable","sessionStorage","lookupSessionStorage","navigator$1","userLanguage","htmlTag","lookupFromPathIndex","subdomain","lookupFromSubdomainIndex","order","caches","excludeCacheFor","convertDetectedLanguage","Browser","detectors","i18nOptions","lookupFromUrlIndex","addDetector","detector","detectionOrder","detected","detectorName","cacheName","backendOptions","i18nReady","i18nInitialized","initializeI18n","i18nextXHRBackend","i18nextBrowserLanguageDetector","jqueryI18next","I18nSupportedLocaleLabel","Locales","ENGLISH","FRENCH","GERMAN","JAPANESE","getAvailableLocales","localesPref","localesFilter","i18nLocaleCompare","Collator","currentLanguage","_i18n","listen","handleLoaded","apiVersion","apiEndpoint","baseDir","themeName","proxyApiEndpoint","proxyApi","uploadEndpoint","uploads3Endpoint","assetEndpoint","asset","assetFileApiEndpoint","loginBackgroundEndpoint","loginBackground","watermarkEndpoint","watermark","customCssPropertiesEndpoint","customCssProperties","logoLightEndpoint","logoDarkEndpoint","logoLight","logoDark","themeLogo","arrayToCsv","spaces","csvToArray","csv","tl","foo","typedEntries","entries","Netx","EmailFrequency","UserLevel","UserSource","UserPermission","UserGroupItemType","UserImportOption","currentUserMeetsUserLevel","getUserLevel","userLevel","userPrefs","userProfile","getUserId","publicUserLogin","PUBLIC_USER_LOGIN","setPreference","setUserPreference","Group","titleAttribute","memberIds","getGroupObjects","ignoreUsers","getUsers","groupId","autolist","downloadUserData","groupIds","getByName","getUserIds","setUserIds","userIds","fetchUsers","users","duplicateQueryPolicy","parseAndSave","save","UsersCollection","comparator","getAutocompleteLabel","Groups","getGroups","getUsersForGroup","filterStr","field","getByIds","addedGroup","createNewGroups","existingPromises","newGroups","_group","deleteGroups","deleteMultiple","curPage","PagerModel","invoke","deepObjectExtend","UserPrefs","getUserPreferences","attributeDisplay","saveUserPreferences","setUserPreferenceValues","_setUserPreference","pref","setPreferenceLocally","prefs","lvbsToDeepObject","isNew","prefObj","prefToSet","memo","setUserPreferences","queueDeferred","getDotPath","dotPath","availableLocales","localeFilter","getListPreference","prefType","defaultType","assetCustomConfig","_pref","_rememberChanged","_allChangedAttributes","setUserPreferenceValue","isEmpty","objectToLvbs","UserProfile","Users","searchUsers","isFiltered","getUserObjectsForGroup","_getUsersForCart","getUsersLength","user","password1","password2","clearSearch","filtered","defaultSearchParams","isEqual","getUsersForCart","cartId","exportGroupId","exportGroup","resetUrl","address1","address2","city","country","expirationDate","groupNames","name1","name2","name3","name4","organization","phone1","phone2","phone3","phone4","propertyValues","zip","category","minimumPasswordLength","passwordChange","passwordRequest","registration","strictPasswordInstructions","isMe","getSelf","_canCreateAPITokens","canCreateAPITokens","authenticate","getGroupsForUser","getSessionKeyForUser","getUserUploadCategory","logout","logoutUser","passwordReset","requestPasswordReset","setUserGroups","userSelfRegistration","userId","categoryId","resultBool","profile","getLexicographicName","pick","system","u","req","isType","typeName","userTypes","ucfirst","isTypeOrGreater","userLogin","loginObj","GetDefaults","autogeneratePassword","omit","passObj","newPassword","registerNewUser","userObj","loginAs","decodeUserToken","loginTokenOb","decodedTokenArr","atob","strictMsg","pat","leadIn","i18nString","fullName","getLabel","getPropertyObject","formData","propName","setPropertyArrays","modelAttrs","isOurAttr","attrName","GroupsCollection","LDAP","SAML","PING_ONE","LIVE_CONNECT","NETX","sync","retrigger","_show","_val","destroyed","dataName","selectpicker","nxVal","boxesToVal","enableIf","hasActiveTypeahead","tt","$menu","menu","$node","hasCollision","aTop","aLeft","bTop","bLeft","outerHeight","outerWidth","isBound","isHidden","isModal","Boolean","nxIgnores","dep","deprecations","change","nxData","nxIgnore","uniq","nxUnignore","newVal","nxRemoveData","valToBoxes","zIndex","purge","allowed","tapToClick","$elem","router","views","Collections","Models","Routers","ShareableTypes","NetxURL","Views","initializedModules","initializingModules","initializeModule","newModules","routesToAdd","total","finished","initialize","addRoutes","history","initialized","customPropertyPrefix","currentProperties","updated","currentThemeMode","fetchedCSS","_setStyleProperty","removeProperty","getThemeMode","USER_SELECTED","getStyleProperty","getLoginBackgroundUrl","setMetaThemeColor","querySelector","setStyleProperty","simpleKey","setThemeMode","themeChanged","classList","BBCollection","filtering","removeCollectionReference","modelRemoved","addCollectionReference","modelAdded","ES6Collection","_isModel","Collection","isCollection","__isCollection__","isSyncing","_rpc","syncing","callsByName","templateProps","cid","_byId","modelId","addToLocalStorage","localStorageKey","checkMaxStore","keyName","storeOptions","parseLocalStorageModelOut","stored","maxStore","removeFromLocalStorage","clearLocalStorage","deepClone","getModelIdFromEvent","getLocalStorageSize","amount","myTotal","toFixed","getTotal","pluck","loadLocalStorage","things","parseLocalStorageModelIn","modelChanged","makeUniqueName","title","at","setFilterStr","preferredFetchMethod","setSort","sorter","subscriptionMessage","dto","toSelectedItemFromAutocomplete","additionalAttrs","modelProto","batchJobComplete","batchJobError","batchJobProgress","getRestLoadedMessage","getRestLoadingMessage","trackBatchJob","pausePolling","resumePolling","checkReachedBeginning","reachedBeginning","checkReachedEnd","reachedEnd","initializeLazyLoad","lazyStartIndex","lowestIndex","highestIndex","startIndexUpdated","lazyLoadItems","lazyLoadedForward","addSubCollection","removeSubCollection","removeSubModel","garbageCollect","subModels","subCollections","garbageCollected","Load","Rpc","syncedOnce","deferLocalStorage","protectObjectProxy","Proxy","wrapError","resp","getDefaultsFromSchema","BBModel","ES6Model","Schema","ValidateSchema","primary","isModel","__isModel__","allows","perm","permitted","batchJob","packAttrs","clientSide","ungooeyObj","gooAttrs","serverGoo","clientGoo","goo","unpackAttrs","gooeyObj","validationError","serverAttrs","patch","getIndex","doneTest","eventPrefix","pollMethod","pollMethodOptions","_polling","_stopPolling","_pausedPolling","loop","stopPolling","arg0","collections","_listenId","retVal","isPromise","TitleAttribute","idAttr","SetSchema","_unsavedChanges","changedAttributes","BASE64_ROUTES_BASES","routeIsBase64","route","correctBase64RouteIfNeeded","escapeURI","unescapeURI","routeInterceptors","History","_isRouting","isRouting","ES6Router","AppRouter","addRouteInterceptor","removeRouteInterceptor","delete","back","home","defaultRoute","routeChanged","validUnauthenticatedRoutes","oldRoute","_routeToRegExp","_extractParameters","_route","lastIndexOf","execute","executeRoute","from","reroute","frag","replaceState","navigate","routePattern","inCategory","exitRoute","targetRoute","sendOpts","coreConfig","pageRoute","oldHash","newHash","bytes","maxScale","byteUnits","dateToHTML","pad","escapeAttributeName","getFunctionBody","fstring","getInlineWorker","blob","Blob","Worker","createObjectURL","isEmptyValue","testTocuh","Modernizr","innerWidth","resizeToFit","dimensions","fitDimensions","newDimensions","aspectRatio","maxHeight","unescapeAttributeName","crumbs","currentIndex","itemsToDisplay","ellipsis","crumbArray","totalItems","firstItem","firstAdjacentItem","lastAdjacentItem","adjacentCount","isURL","matchURL","parseURLS","toBoolean","lvbsToObject","lv","_dotExpand","levels","_dotCollapse","rk","dateToDAM","dateToLocalTimezone","dateFromAsset","dateToAsset","omitTime","dateToAssetUTC","dateFromString","getMonthString","months","getDayString","days","formatNumber","move","fromIndex","toIndex","millisecondsToDateStr","millisecondsToFullDateStr","millisecondsToTimeStr","lcfirst","toCamelCase","newWordCharacters","stripCharacters","capitalizedArray","newStr","$1","camelCaseToUnderscore","camelCaseToDash","camelCaseToTitle","_str","toCollection","targetClass","classOptions","toJQ","jqObj","tidyAssetList","assets","tidyAssets","getMenuPosition","Y","X","mouseX","mouseY","boundsX","boundsY","menuWidth","menuHeight","tp","selectorPosition","shadeColor","color","R","G","B","hexToRgb","hex","rgbToHsl","rgb","parseQuery","decodeURI","mapKeys","newKey","xl","subexp","typeOf","buildExps","isIRI","ALPHA$$","DIGIT$$","HEXDIG$$","PCT_ENCODED$","SUB_DELIMS$$","RESERVED$$","UCSCHAR$$","IPRIVATE$$","UNRESERVED$$","SCHEME$","USERINFO$","DEC_OCTET_RELAXED$","IPV4ADDRESS$","H16$","LS32$","IPV6ADDRESS1$","IPV6ADDRESS2$","IPV6ADDRESS3$","IPV6ADDRESS4$","IPV6ADDRESS5$","IPV6ADDRESS6$","IPV6ADDRESS7$","IPV6ADDRESS8$","IPV6ADDRESS9$","IPV6ADDRESS$","ZONEID$","IPV6ADDRZ_RELAXED$","IPVFUTURE$","IP_LITERAL$","REG_NAME$","HOST$","PORT$","AUTHORITY$","PCHAR$","SEGMENT$","SEGMENT_NZ$","SEGMENT_NZ_NC$","PATH_ABEMPTY$","PATH_ABSOLUTE$","PATH_NOSCHEME$","PATH_ROOTLESS$","PATH_EMPTY$","QUERY$","FRAGMENT$","HIER_PART$","URI$","RELATIVE_PART$","RELATIVE$","NOT_SCHEME","NOT_USERINFO","NOT_HOST","NOT_PATH","NOT_PATH_NOSCHEME","NOT_QUERY","NOT_FRAGMENT","ESCAPE","UNRESERVED","OTHER_CHARS","PCT_ENCODED","IPV4ADDRESS","IPV6ADDRESS","URI_PROTOCOL","IRI_PROTOCOL","slicedToArray","sliceIterator","_arr","_n","_d","_e","_s","maxInt","tMin","tMax","skew","damp","initialBias","initialN","delimiter","regexPunycode","regexNonASCII","regexSeparators","baseMinusTMin","stringFromCharCode","error$1","mapDomain","ucs2decode","counter","basicToDigit","codePoint","digitToBasic","digit","adapt","numPoints","firstTime","decode","inputLength","bias","basic","oldi","baseMinusT","fromCodePoint","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","_currentValue2","return","basicLength","handledCPCount","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","handledCPCountPlusOne","_iteratorNormalCompletion3","_didIteratorError3","_iteratorError3","_step3","_iterator3","_currentValue","qMinusT","punycode","SCHEMES","pctEncChar","chr","pctDecChars","il","c2","_c","c3","_normalizeComponentEncoding","components","decodeUnreserved","decStr","scheme","userinfo","_stripLeadingZeros","_normalizeIPv4","address","_matches","_normalizeIPv6","_matches2","zone","_address$toLowerCase$2","firstFields","lastFields","isLastFieldIPv4Address","fieldCount","lastFieldsStart","fields","longestZeroFields","allZeroFields","acc","lastLongest","newHost","newFirst","newLast","URI_PARSE","NO_MATCH_IS_UNDEFINED","uriString","iri","reference","schemeHandler","unicodeSupport","domainHost","toASCII","_recomposeAuthority","uriTokens","$2","RDS1","RDS2","RDS3","RDS5","removeDotSegments","im","toUnicode","authority","absolutePath","resolveComponents","skipNormalization","tolerant","baseURI","relativeURI","schemelessOptions","uriA","uriB","escapeComponent","unescapeComponent","handler$1","isSecure","wsComponents","handler$2","resourceName","_wsComponents$resourc2","handler$3","O","ATEXT$$","VCHAR$$","SOME_DELIMS$$","NOT_LOCAL_PART","NOT_HFNAME","NOT_HFVALUE","handler$4","mailtoComponents","unknownHeaders","hfields","hfield","toAddrs","_x","_xl","subject","_x2","_xl2","addr","toAddr","atIdx","localPart","URN_PARSE","handler$5","urnComponents","nss","uriComponents","handler$6","uuidComponents","previousBackbone","emulateHTTP","emulateJSON","addMethod","attribute","defaultVal","addUnderscoreMethods","Class","modelMatcher","Events","eventSplitter","eventsApi","names","internalOn","listening","_events","onApi","listeners","listeningTo","_listeningTo","thisId","objId","offApi","_callback","onceMap","offer","triggerApi","objEvents","allEvents","triggerEvents","a1","a2","a3","cidPrefix","changes","changing","_changing","_previousAttributes","_pending","hasChanged","previous","previousAttributes","urlError","pairs","_reset","setOptions","addOptions","tail","singular","removed","_removeModels","merged","toAdd","toMerge","toRemove","modelMap","sortable","sortAttr","_prepareModel","_addReference","orderChanged","some","_removeReference","previousModels","where","sortBy","callbackOpts","_onModelEvent","prevId","collect","foldl","inject","reduceRight","foldr","any","include","take","drop","difference","shuffle","sample","partition","groupBy","countBy","indexBy","findIndex","findLastIndex","View","viewOptions","_ensureElement","delegateEventSplitter","tagName","$el","render","_removeElement","setElement","undelegateEvents","_setElement","delegateEvents","_createElement","_setAttributes","methodMap","_method","textStatus","errorThrown","_bindRoutes","optionalParam","namedParam","splatParam","escapeRegExp","optional","checkUrl","routeStripper","rootStripper","pathStripper","atRoot","getSearch","matchRoot","rootPath","decodeFragment","getHash","getFragment","_usePushState","_wantsHashChange","hashChange","_hasHashChange","documentMode","_useHashChange","_wantsPushState","pushState","_hasPushState","iframe","iWindow","contentWindow","_checkUrlInterval","detachEvent","_updateHash","protoProps","staticProps","__super__","define","require","undef","amd","returnExportsGlobal","namespaceDelimiter","bindAll","oldModelConst","oldCollectionConst","newConst","my_ctxt","signature","argsExpected","invokedArguments","defaultExceptionHandler","oldSync","RpcError","me","ParseError","ProtocolError","MethodError","ServerValidationError","Http404Error","Http500Error","DefinitionError","parseReply","reply","replyParsed","callsById","validationData","rpcMethod","decodeArguments","onError","unregisterCall","handleExceptions","triggerQuery","parsedParameters","_query","isAjax","otherXhr","authParam","xhrCompletedProgress","trackProgress","_xhrComplete","xhrExcludeProgress","ajaxArgs","jXhr","fixtures","registerCall","checkParameters","wasFunction","parsedParams","checkParameter","checkMethods","deeperNested","hadArguments","decodedArguments","localdef","exception","sessionErrors","exceptionHandler","function","featureName","hasOwnProp","enableClasses","docElement","mod","modElem","mStyle","inputElem","smile","prefixes","omPrefixes","cssomPrefixes","domPrefixes","tests","inputs","injectElementWithStyles","testnames","docOverflow","fakeBody","background","testMediaQuery","mq","msMatchMedia","currentStyle","isEventSupported","TAGNAMES","isSupported","_hasOwnProperty","setCss","setCssAll","str1","str2","testProps","testDOMProps","testPropsAll","ucProp","webforms","HTMLDataListElement","inputElemType","WebkitAppearance","checkValidity","feature","Function","bound","F","WebGLRenderingContext","DocumentTouch","offsetTop","postMessage","openDatabase","backgroundColor","textShadow","str3","backgroundImage","offsetLeft","sheet","styleSheet","cssRules","canPlayType","ogg","h264","webm","mp3","wav","m4a","applicationCache","createElementNS","svg","createSVGRect","addTest","supportsHtml5Styles","supportsUnknownElements","html5","reSkip","saveClones","expanID","expandoData","addStyleSheet","getElements","getExpandoData","createElem","canHaveChildren","tagUrn","shivMethods","createFrag","shivDocument","shivCSS","hasCSS","_version","_prefixes","_domPrefixes","_cssomPrefixes","hasEvent","testProp","testAllProps","testStyles","ipad","ipod","iphone","webkitAudioContext","mozAudioContext","oAudioContext","msAudioContext","AudioContext","Element","parentElement","NodeList","HTMLCollection","flattened","ArrayProto","ObjProto","SymbolProto","supportsArrayBuffer","supportsDataView","DataView","nativeIsArray","nativeKeys","nativeCreate","nativeIsView","_isNaN","_isFinite","hasEnumBug","propertyIsEnumerable","nonEnumerableProps","MAX_ARRAY_INDEX","restArguments","isElement","tagTester","isSymbol","nodelist","Int8Array","isFunction$1","hasObjectTag","hasStringTagBug","isIE11","isDataView","ie10IsDataView","getInt8","isDataView$1","has$1","isArguments","isArguments$1","isFinite$1","isNaN$1","constant","createSizePropertyCheck","getSizeProperty","sizeProperty","shallowProperty","getByteLength","isBufferLike","typedArrayPattern","isTypedArray","isTypedArray$1","getLength","emulatedSet","collectNonEnumProps","nonEnumIdx","isMatch","_$1","_wrapped","toBufferView","bufferSource","byteOffset","tagDataView","aStack","bStack","deepEq","areArrays","byteLength","aCtor","bCtor","ie11fingerprint","weakMapMethods","forEachName","hasName","commonInit","mapTail","mapMethods","setMethods","isMap","isWeakMap","isSet","isWeakSet","functions","createAssigner","keysFunc","extendOwn","ctor","baseCreate","tap","toPath$1","toPath","deepGet","identity","optimizeCb","argCount","accumulator","baseIteratee","mapObject","currentKey","propertyOf","times","accum","createEscaper","escaper","testRegexp","replaceRegexp","escapeMap","_escape","_unescape","templateSettings","evaluate","noMatch","escapes","escapeChar","bareIdentifier","oldSettings","variable","fallback","idCounter","_chain","executeBound","sourceFunc","boundFunc","callingContext","partial","boundArgs","callArgs","flatten$1","strict","memoize","hasher","later","leading","throttled","_now","trailing","immediate","passed","debounced","_args","wrapper","predicate","compose","findKey","createPredicateIndexFinder","sortedIndex","low","mid","createIndexFinder","predicateFind","keyFinder","createReduce","reducer","guard","contextPath","lastComputed","rand","criteria","behavior","pass","reStrSymbol","keyInObj","flatten","otherArrays","isSorted","union","arrays","intersection","argsLength","unzip","chunk","chainResult","mixin","allExports","__proto__","transpose","_classCallCheck","_defineProperties","_createClass","_defineProperty","toPrimitive","toPropertyKey","_typeof","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","threw","__webpack_modules__","amdO","__esModule","leafPrototypes","def","chunkId","miniCssF","hmd","dataWebpackPrefix","needAttach","nc","onScriptComplete","doneFns","toStringTag","nmd","createStylesheet","fullhref","oldTag","linkTag","rel","onLinkComplete","errorType","realHref","findStylesheet","existingLinkTags","dataHref","existingStyleTags","loadStylesheet","installedCssChunks","miniCss","cssChunks","installedChunks","installedChunkData","loadingEnded","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","chunkLoadingGlobal","loadApp","Core","finally"],"sourceRoot":""}